aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorShawn Buckley <shawntbuckley@gmail.com>2015-10-18 23:04:39 -0400
committerShawn Buckley <shawntbuckley@gmail.com>2015-10-18 23:04:39 -0400
commit85c804fa112fd1f19c91e45d150a787cfbf0f7a8 (patch)
treecb302d8e0f46e06be0b1d391317578b165aec245 /src/main/java
parentce25063b910bb3bdd2b0c234b185fc4077caebdb (diff)
downloadGT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.tar.gz
GT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.tar.bz2
GT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.zip
Move source directory
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/GT_Mod.java1107
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java566
-rw-r--r--src/main/java/gregtech/api/damagesources/GT_DamageSources.java86
-rw-r--r--src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java58
-rw-r--r--src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java61
-rw-r--r--src/main/java/gregtech/api/enums/ConfigCategories.java64
-rw-r--r--src/main/java/gregtech/api/enums/Dyes.java105
-rw-r--r--src/main/java/gregtech/api/enums/Element.java311
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java160
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java785
-rw-r--r--src/main/java/gregtech/api/enums/Materials.java1670
-rw-r--r--src/main/java/gregtech/api/enums/OreDictNames.java78
-rw-r--r--src/main/java/gregtech/api/enums/OrePrefixes.java798
-rw-r--r--src/main/java/gregtech/api/enums/SubTag.java306
-rw-r--r--src/main/java/gregtech/api/enums/TC_Aspects.java108
-rw-r--r--src/main/java/gregtech/api/enums/TextureSet.java184
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java453
-rw-r--r--src/main/java/gregtech/api/enums/Tier.java91
-rw-r--r--src/main/java/gregtech/api/enums/ToolDictNames.java32
-rw-r--r--src/main/java/gregtech/api/events/BlockScanningEvent.java41
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container.java564
-rw-r--r--src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java152
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_1by1.java27
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_2by2.java30
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_3by3.java35
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_4by4.java42
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java249
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicTank.java70
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java30
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java35
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer.java67
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java39
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java28
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java28
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java28
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java28
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java86
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java35
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java26
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java55
-rw-r--r--src/main/java/gregtech/api/gui/GT_Slot_Armor.java27
-rw-r--r--src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java17
-rw-r--r--src/main/java/gregtech/api/gui/GT_Slot_Holo.java46
-rw-r--r--src/main/java/gregtech/api/gui/GT_Slot_Output.java16
-rw-r--r--src/main/java/gregtech/api/gui/GT_Slot_Render.java22
-rw-r--r--src/main/java/gregtech/api/interfaces/IColorModulationContainer.java5
-rw-r--r--src/main/java/gregtech/api/interfaces/ICondition.java104
-rw-r--r--src/main/java/gregtech/api/interfaces/IDamagableItem.java7
-rw-r--r--src/main/java/gregtech/api/interfaces/IDebugableBlock.java26
-rw-r--r--src/main/java/gregtech/api/interfaces/IDescribable.java11
-rw-r--r--src/main/java/gregtech/api/interfaces/IFoodStat.java21
-rw-r--r--src/main/java/gregtech/api/interfaces/IIconContainer.java21
-rw-r--r--src/main/java/gregtech/api/interfaces/IItemBehaviour.java30
-rw-r--r--src/main/java/gregtech/api/interfaces/IItemContainer.java24
-rw-r--r--src/main/java/gregtech/api/interfaces/IOreRecipeRegistrator.java15
-rw-r--r--src/main/java/gregtech/api/interfaces/IProjectileItem.java16
-rw-r--r--src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java66
-rw-r--r--src/main/java/gregtech/api/interfaces/ISubTagContainer.java20
-rw-r--r--src/main/java/gregtech/api/interfaces/ITexture.java15
-rw-r--r--src/main/java/gregtech/api/interfaces/IToolStats.java147
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IBCTileEntity.java8
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java7
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java34
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java412
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IIC2TileEntity.java13
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java43
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IUETileEntity.java6
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java383
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityCable.java9
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java96
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java99
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java14
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java35
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IDigitalChest.java29
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java40
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java89
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IExperimentalEnergyTileEntity.java86
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IFibreConnected.java31
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IGearEnergyTileEntity.java16
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java20
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java124
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java33
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java132
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IMachineBlockUpdateable.java16
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java69
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IPipeRenderedTileEntity.java9
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java37
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IRedstoneReceiver.java29
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IRedstoneTileEntity.java17
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ITexturedTileEntity.java10
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java33
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IUpgradableMachine.java42
-rw-r--r--src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java78
-rw-r--r--src/main/java/gregtech/api/items/GT_CoolantCell_Item.java82
-rw-r--r--src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java327
-rw-r--r--src/main/java/gregtech/api/items/GT_Generic_Block.java19
-rw-r--r--src/main/java/gregtech/api/items/GT_Generic_Item.java144
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaBase_Item.java555
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java331
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java159
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java169
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java562
-rw-r--r--src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java176
-rw-r--r--src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java161
-rw-r--r--src/main/java/gregtech/api/items/GT_SolderingTool_Item.java40
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Bug_Item.java66
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Foam_Item.java160
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Hardener_Item.java70
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Hydration_Item.java53
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Ice_Item.java81
-rw-r--r--src/main/java/gregtech/api/items/GT_Spray_Pepper_Item.java52
-rw-r--r--src/main/java/gregtech/api/items/GT_Tool_Item.java25
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java1016
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java1353
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntityUE.java98
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseTileEntity.java227
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java534
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java721
-rw-r--r--src/main/java/gregtech/api/metatileentity/examples/GT_MetaTileEntity_E_Furnace.java56
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java253
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java343
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java59
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java269
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java213
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java167
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java99
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java32
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java602
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java187
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java319
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java103
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java206
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java172
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java89
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java54
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java55
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java86
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java101
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java108
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java58
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java141
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java79
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java729
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java65
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java144
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet.java29
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_Block_Event.java59
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_Sound.java56
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntity.java83
-rw-r--r--src/main/java/gregtech/api/net/IGT_NetworkHandler.java12
-rw-r--r--src/main/java/gregtech/api/objects/ElementStack.java41
-rw-r--r--src/main/java/gregtech/api/objects/GT_ArrayList.java59
-rw-r--r--src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java96
-rw-r--r--src/main/java/gregtech/api/objects/GT_Cover_Default.java68
-rw-r--r--src/main/java/gregtech/api/objects/GT_Cover_None.java89
-rw-r--r--src/main/java/gregtech/api/objects/GT_Fluid.java28
-rw-r--r--src/main/java/gregtech/api/objects/GT_FluidStack.java55
-rw-r--r--src/main/java/gregtech/api/objects/GT_HashSet.java81
-rw-r--r--src/main/java/gregtech/api/objects/GT_ItemStack.java52
-rw-r--r--src/main/java/gregtech/api/objects/GT_MultiTexture.java53
-rw-r--r--src/main/java/gregtech/api/objects/GT_RenderedTexture.java140
-rw-r--r--src/main/java/gregtech/api/objects/GT_SidedTexture.java169
-rw-r--r--src/main/java/gregtech/api/objects/ItemData.java116
-rw-r--r--src/main/java/gregtech/api/objects/MaterialStack.java41
-rw-r--r--src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java38
-rw-r--r--src/main/java/gregtech/api/threads/GT_Runnable_Sound.java26
-rw-r--r--src/main/java/gregtech/api/util/GT_BaseCrop.java129
-rw-r--r--src/main/java/gregtech/api/util/GT_CircuitryBehavior.java178
-rw-r--r--src/main/java/gregtech/api/util/GT_Config.java86
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehavior.java217
-rw-r--r--src/main/java/gregtech/api/util/GT_CreativeTab.java24
-rw-r--r--src/main/java/gregtech/api/util/GT_FoodStat.java102
-rw-r--r--src/main/java/gregtech/api/util/GT_IBoxableWrapper.java12
-rw-r--r--src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java16
-rw-r--r--src/main/java/gregtech/api/util/GT_LanguageManager.java95
-rw-r--r--src/main/java/gregtech/api/util/GT_Log.java35
-rw-r--r--src/main/java/gregtech/api/util/GT_ModHandler.java1730
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java332
-rw-r--r--src/main/java/gregtech/api/util/GT_PlayedSound.java28
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java1046
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeRegistrator.java313
-rw-r--r--src/main/java/gregtech/api/util/GT_Shaped_Recipe.java95
-rw-r--r--src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java95
-rw-r--r--src/main/java/gregtech/api/util/GT_SpawnEventHandler.java46
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java1791
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen.java61
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java70
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore.java29
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java69
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java30
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java30
-rw-r--r--src/main/java/gregtech/common/GT_Client.java580
-rw-r--r--src/main/java/gregtech/common/GT_DummyWorld.java147
-rw-r--r--src/main/java/gregtech/common/GT_IteratorRandom.java18
-rw-r--r--src/main/java/gregtech/common/GT_MinableOreGenerator.java79
-rw-r--r--src/main/java/gregtech/common/GT_Network.java113
-rw-r--r--src/main/java/gregtech/common/GT_PlayerActivityLogger.java36
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java1884
-rw-r--r--src/main/java/gregtech/common/GT_RecipeAdder.java729
-rw-r--r--src/main/java/gregtech/common/GT_Server.java36
-rw-r--r--src/main/java/gregtech/common/GT_ThaumcraftCompat.java244
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java99
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java49
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_Stone.java91
-rw-r--r--src/main/java/gregtech/common/GT_Worldgenerator.java130
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings1.java90
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings2.java102
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings3.java93
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings4.java468
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java140
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Concretes.java104
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Granites.java80
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Machines.java578
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Ores.java263
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java175
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Casings1.java29
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Casings2.java25
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Casings3.java12
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Casings4.java12
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java45
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Concretes.java24
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Granites.java12
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Machines.java166
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Ores.java54
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java41
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Material_Casings.java21
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Material_Machines.java21
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Packet_Ores.java68
-rw-r--r--src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java247
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Arm.java112
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Blastproof.java25
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java85
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java133
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Crafting.java35
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java94
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Drain.java108
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java187
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_EnergyOnly.java102
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java93
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Lens.java20
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java97
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java122
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java120
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Pump.java187
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java84
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java25
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java24
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java81
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java25
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java30
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java98
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Screen.java80
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Shutter.java85
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java41
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Vent.java40
-rw-r--r--src/main/java/gregtech/common/entities/GT_Entity_Arrow.java391
-rw-r--r--src/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java71
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Boiler.java91
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java34
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java88
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Filter.java143
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java69
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Regulator.java174
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java83
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Teleporter.java177
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_TypeFilter.java123
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java47
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java33
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java22
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java22
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java53
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java38
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java36
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java22
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java41
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_TypeFilter.java22
-rw-r--r--src/main/java/gregtech/common/items/GT_DepletetCell_Item.java26
-rw-r--r--src/main/java/gregtech/common/items/GT_FluidDisplayItem.java102
-rw-r--r--src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java125
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java881
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java447
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java22
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java196
-rw-r--r--src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java68
-rw-r--r--src/main/java/gregtech/common/items/GT_SensorCard_Item.java101
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow.java129
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow_Potion.java66
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java63
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java115
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java37
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java68
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java137
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_None.java82
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java53
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java56
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java77
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java40
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java143
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java44
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java57
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java56
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java53
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java52
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java125
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java141
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java137
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java182
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java38
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java107
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java79
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java117
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java75
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java93
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java94
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java97
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java97
-rw-r--r--src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java124
-rw-r--r--src/main/java/gregtech/common/render/GT_CapeRenderer.java105
-rw-r--r--src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java184
-rw-r--r--src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java208
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderUtil.java36
-rw-r--r--src/main/java/gregtech/common/render/GT_Renderer_Block.java657
-rw-r--r--src/main/java/gregtech/common/render/GT_Renderer_Entity_Arrow.java23
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java75
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java88
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java107
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java45
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java159
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java330
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java176
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java160
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java152
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java180
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java126
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_FluidNaquadahReactor.java108
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java304
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SolidNaquadahReactor.java108
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java123
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java41
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java42
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java43
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java43
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java109
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java65
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java77
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java79
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java159
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Printer.java65
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java380
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java119
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java82
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java215
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java340
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java402
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java192
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java243
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java445
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java53
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java52
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java54
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java303
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java174
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java259
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java75
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java75
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java75
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java75
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java192
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java116
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java96
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java115
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java105
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java189
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java298
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java169
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java116
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java116
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java116
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java116
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java112
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java132
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java131
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java197
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java237
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java129
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool.java170
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Axe.java146
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java100
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java99
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java81
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java55
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java114
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java55
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java145
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java64
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java132
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java57
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_File.java124
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java190
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Hoe.java128
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java121
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Knife.java59
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Mortar.java124
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java128
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Plow.java81
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Plunger.java90
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java65
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Saw.java142
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Scoop.java134
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java144
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java32
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Sense.java80
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Shovel.java116
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java135
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java138
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Sword.java122
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine.java27
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java11
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java11
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java11
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java12
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java137
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java119
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench.java144
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java67
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java74
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java67
-rw-r--r--src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java13
-rw-r--r--src/main/java/gregtech/loaders/load/GT_FuelLoader.java35
-rw-r--r--src/main/java/gregtech/loaders/load/GT_ItemIterator.java302
-rw-r--r--src/main/java/gregtech/loaders/load/GT_SonictronLoader.java160
-rw-r--r--src/main/java/gregtech/loaders/misc/GT_Achievements.java500
-rw-r--r--src/main/java/gregtech/loaders/misc/GT_CoverLoader.java26
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingAll.java19
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingArrows.java43
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingBattery.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java68
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java26
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java104
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCellPlasma.java27
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java26
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java61
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java51
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedCentrifuged.java23
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedPurified.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java36
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java166
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDustImpure.java65
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDustSmall.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDustTiny.java39
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java39
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGearSmall.java22
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java56
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGemChipped.java23
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGemExquisite.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawed.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawless.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot1.java63
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot2.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot3.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot4.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot5.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngotHot.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java70
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingLeaves.java15
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java86
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java38
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java118
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java36
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java42
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeLarge.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeMedium.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeRestrictive.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeSmall.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java59
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate1.java67
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate2.java36
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate3.java36
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate4.java32
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate5.java31
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate9.java23
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPlateAlloy.java33
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java27
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java23
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java107
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java23
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java26
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java72
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java28
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneVarious.java32
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadArrow.java22
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadAxe.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadBuzzSaw.java24
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadChainsaw.java30
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadDrill.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadFile.java25
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHammer.java53
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHoe.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPickaxe.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPlow.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSaw.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSense.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadShovel.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSword.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadUniversalSpade.java21
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadWrench.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java45
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java20
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire01.java44
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire02.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire04.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire08.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire12.java34
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingWire16.java30
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java54
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java119
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java665
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_CropLoader.java54
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java84
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java1489
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java17
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java64
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java107
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_UUMRecipeLoader.java7
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java136
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java33
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java179
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java482
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java1275
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java207
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java195
-rw-r--r--src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java858
-rw-r--r--src/main/java/gregtech/nei/NEI_GT_Config.java31
551 files changed, 73142 insertions, 0 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
new file mode 100644
index 0000000000..6579445ba7
--- /dev/null
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -0,0 +1,1107 @@
+package gregtech;
+import cpw.mods.fml.common.FMLLog;
+import cpw.mods.fml.common.LoadController;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.Mod.Instance;
+import cpw.mods.fml.common.ModContainer;
+import cpw.mods.fml.common.SidedProxy;
+import cpw.mods.fml.common.event.FMLInitializationEvent;
+import cpw.mods.fml.common.event.FMLModIdMappingEvent;
+import cpw.mods.fml.common.event.FMLPostInitializationEvent;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import cpw.mods.fml.common.event.FMLServerStartedEvent;
+import cpw.mods.fml.common.event.FMLServerStartingEvent;
+import cpw.mods.fml.common.event.FMLServerStoppingEvent;
+import cpw.mods.fml.common.registry.EntityRegistry;
+ import forestry.factory.gadgets.MachineCentrifuge;
+import forestry.factory.gadgets.MachineCentrifuge.RecipeManager;
+ import forestry.factory.gadgets.MachineSqueezer;
+import gregtech.api.GregTech_API;
+import gregtech.api.enchants.Enchantment_EnderDamage;
+import gregtech.api.enchants.Enchantment_Radioactivity;
+import gregtech.api.enums.ConfigCategories.Recipes;
+ import gregtech.api.enums.*;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ItsNotMyFaultException;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Log.LogBuffer;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_RecipeRegistrator;
+ import gregtech.api.util.GT_SpawnEventHandler;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_DummyWorld;
+import gregtech.common.GT_Network;
+import gregtech.common.GT_Proxy;
+import gregtech.common.GT_RecipeAdder;
+import gregtech.common.entities.GT_Entity_Arrow;
+import gregtech.common.entities.GT_Entity_Arrow_Potion;
+import gregtech.common.items.behaviors.Behaviour_DataOrb;
+import gregtech.loaders.load.GT_CoverBehaviorLoader;
+import gregtech.loaders.load.GT_FuelLoader;
+import gregtech.loaders.load.GT_ItemIterator;
+import gregtech.loaders.load.GT_SonictronLoader;
+ import gregtech.loaders.misc.GT_Achievements;
+import gregtech.loaders.misc.GT_CoverLoader;
+import gregtech.loaders.postload.GT_BlockResistanceLoader;
+import gregtech.loaders.postload.GT_BookAndLootLoader;
+import gregtech.loaders.postload.GT_CraftingRecipeLoader;
+import gregtech.loaders.postload.GT_CropLoader;
+import gregtech.loaders.postload.GT_ItemMaxStacksizeLoader;
+import gregtech.loaders.postload.GT_MachineRecipeLoader;
+import gregtech.loaders.postload.GT_MinableRegistrator;
+import gregtech.loaders.postload.GT_RecyclerBlacklistLoader;
+import gregtech.loaders.postload.GT_ScrapboxDropLoader;
+import gregtech.loaders.postload.GT_Worldgenloader;
+import gregtech.loaders.preload.GT_Loader_CircuitBehaviors;
+import gregtech.loaders.preload.GT_Loader_ItemData;
+import gregtech.loaders.preload.GT_Loader_Item_Block_And_Fluid;
+import gregtech.loaders.preload.GT_Loader_MetaTileEntities;
+import gregtech.loaders.preload.GT_Loader_OreDictionary;
+import gregtech.loaders.preload.GT_Loader_OreProcessing;
+import ic2.api.recipe.ICannerBottleRecipeManager;
+import ic2.api.recipe.IMachineRecipeManager;
+import ic2.api.recipe.IRecipeInput;
+import ic2.api.recipe.RecipeOutput;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.Set;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.CraftingManager;
+import net.minecraft.item.crafting.FurnaceRecipes;
+import net.minecraft.item.crafting.IRecipe;
+ import net.minecraft.stats.Achievement;
+import net.minecraft.util.WeightedRandomChestContent;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.ChestGenHooks;
+ import net.minecraftforge.common.ForgeVersion;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.common.config.Property;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+@Mod(modid="gregtech", name="GregTech", version="MC1710", useMetadata=false, dependencies="required-after:IC2; after:Forestry; after:PFAAGeologica; after:Thaumcraft; after:Railcraft; after:appliedenergistics2; after:ThermalExpansion; after:TwilightForest; after:harvestcraft; after:magicalcrops; after:BuildCraft|Transport; after:BuildCraft|Silicon; after:BuildCraft|Factory; after:BuildCraft|Energy; after:BuildCraft|Core; after:BuildCraft|Builders; after:GalacticraftCore; after:GalacticraftMars; after:GalacticraftPlanets; after:ThermalExpansion|Transport; after:ThermalExpansion|Energy; after:ThermalExpansion|Factory; after:RedPowerCore; after:RedPowerBase; after:RedPowerMachine; after:RedPowerCompat; after:RedPowerWiring; after:RedPowerLogic; after:RedPowerLighting; after:RedPowerWorld; after:RedPowerControl;")
+public class GT_Mod
+ implements IGT_Mod
+{
+ @Mod.Instance("gregtech")
+ public static GT_Mod instance;
+ @SidedProxy(modId="gregtech", clientSide="gregtech.common.GT_Client", serverSide="gregtech.common.GT_Server")
+ public static GT_Proxy gregtechproxy;
+ public static final int VERSION = 508;
+ public static final int REQUIRED_IC2 = 624;
+ public static int MAX_IC2 = 2147483647;
+ public static GT_Achievements achievements;
+
+ static
+ {
+ if ((508 != GregTech_API.VERSION) || (508 != GT_ModHandler.VERSION) || (508 != GT_OreDictUnificator.VERSION) || (508 != GT_Recipe.VERSION) || (508 != GT_Utility.VERSION) || (508 != GT_RecipeRegistrator.VERSION) || (508 != Element.VERSION) || (508 != Materials.VERSION) || (508 != OrePrefixes.VERSION)) {
+ throw new GT_ItsNotMyFaultException("One of your Mods included GregTech-API Files inside it's download, mention this to the Mod Author, who does this bad thing, and tell him/her to use reflection. I have added a Version check, to prevent Authors from breaking my Mod that way.");
+ }
+ }
+
+ public GT_Mod()
+ {
+ try
+ {
+ Class.forName("ic2.core.IC2").getField("enableOreDictCircuit").set(null, Boolean.valueOf(true));
+ }
+ catch (Throwable e) {}
+ try
+ {
+ Class.forName("ic2.core.IC2").getField("enableCraftingBucket").set(null, Boolean.valueOf(false));
+ }
+ catch (Throwable e) {}
+ try
+ {
+ Class.forName("ic2.core.IC2").getField("enableEnergyInStorageBlockItems").set(null, Boolean.valueOf(false));
+ }
+ catch (Throwable e) {}
+ GT_Values.GT = this;
+ GT_Values.DW = new GT_DummyWorld();
+ GT_Values.NW = new GT_Network();
+ GregTech_API.sRecipeAdder = GT_Values.RA = new GT_RecipeAdder();
+
+ Textures.BlockIcons.VOID.name();
+ Textures.ItemIcons.VOID.name();
+ }
+
+ @Mod.EventHandler
+ public void onPreLoad(FMLPreInitializationEvent aEvent)
+ {
+ if (GregTech_API.sPreloadStarted) {
+ return;
+ }
+ for (Runnable tRunnable : GregTech_API.sBeforeGTPreload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ File tFile = new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "GregTech.cfg");
+ Configuration tMainConfig = new Configuration(tFile);
+ tMainConfig.load();
+ tFile = new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "IDs.cfg");
+ GT_Config.sConfigFileIDs = new Configuration(tFile);
+ GT_Config.sConfigFileIDs.load();
+ GT_Config.sConfigFileIDs.save();
+ GregTech_API.sRecipeFile = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "Recipes.cfg")));
+ GregTech_API.sMachineFile = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "MachineStats.cfg")));
+ GregTech_API.sWorldgenFile = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "WorldGeneration.cfg")));
+ GregTech_API.sMaterialProperties = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "MaterialProperties.cfg")));
+ GregTech_API.sUnification = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "Unification.cfg")));
+ GregTech_API.sSpecialFile = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "Other.cfg")));
+ GregTech_API.sOPStuff = new GT_Config(new Configuration(new File(new File(aEvent.getModConfigurationDirectory(), "GregTech"), "OverpoweredStuff.cfg")));
+
+ GregTech_API.sClientDataFile = new GT_Config(new Configuration(new File(aEvent.getModConfigurationDirectory().getParentFile(), "GregTech.cfg")));
+
+ GT_Log.mLogFile = new File(aEvent.getModConfigurationDirectory().getParentFile(), "logs/GregTech.log");
+ if (!GT_Log.mLogFile.exists()) {
+ try
+ {
+ GT_Log.mLogFile.createNewFile();
+ }
+ catch (Throwable e) {}
+ }
+ try
+ {
+ GT_Log.out = GT_Log.err = new PrintStream(GT_Log.mLogFile);
+ }
+ catch (FileNotFoundException e) {}
+ GT_Log.mOreDictLogFile = new File(aEvent.getModConfigurationDirectory().getParentFile(), "logs/OreDict.log");
+ if (!GT_Log.mOreDictLogFile.exists()) {
+ try
+ {
+ GT_Log.mOreDictLogFile.createNewFile();
+ }
+ catch (Throwable e) {}
+ }
+ if (tMainConfig.get("general", "LoggingPlayerActivity", true).getBoolean(true))
+ {
+ GT_Log.mPlayerActivityLogFile = new File(aEvent.getModConfigurationDirectory().getParentFile(), "logs/PlayerActivity.log");
+ if (!GT_Log.mPlayerActivityLogFile.exists()) {
+ try
+ {
+ GT_Log.mPlayerActivityLogFile.createNewFile();
+ }
+ catch (Throwable e) {}
+ }
+ try
+ {
+ GT_Log.pal = new PrintStream(GT_Log.mPlayerActivityLogFile);
+ }
+ catch (Throwable e) {}
+ }
+ try
+ {
+ List<String> tList = ((GT_Log.LogBuffer)GT_Log.ore).mBufferedOreDictLog;
+ GT_Log.ore.println("******************************************************************************");
+ GT_Log.ore.println("* This is the complete log of the GT5-Unofficial OreDictionary Handler. It *");
+ GT_Log.ore.println("* processes all OreDictionary entries and can sometimes cause errors. All *");
+ GT_Log.ore.println("* entries and errors are being logged. If you see an error please raise an *");
+ GT_Log.ore.println("* issue at https://github.com/Blood-Asp/GT5-Unofficial. *");
+ GT_Log.ore.println("******************************************************************************");
+ String tString;
+ for (Iterator i$ = tList.iterator(); i$.hasNext(); GT_Log.ore.println(tString)) {
+ tString = (String)i$.next();
+ }
+ }
+ catch (Throwable e) {}
+ gregtechproxy.onPreLoad();
+
+ GT_Log.out.println("GT_Mod: Setting Configs");
+ GT_Values.D1 = tMainConfig.get("general", "Debug", false).getBoolean(false);
+ GT_Values.D2 = tMainConfig.get("general", "Debug2", false).getBoolean(false);
+
+ GregTech_API.TICKS_FOR_LAG_AVERAGING = tMainConfig.get("general", "TicksForLagAveragingWithScanner", 25).getInt(25);
+ GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = tMainConfig.get("general", "MillisecondsPassedInGTTileEntityUntilLagWarning", 100).getInt(100);
+ if (tMainConfig.get("general", "disable_STDOUT", false).getBoolean(false)) {
+ System.out.close();
+ }
+ if (tMainConfig.get("general", "disable_STDERR", false).getBoolean(false)) {
+ System.err.close();
+ }
+ GregTech_API.sMachineExplosions = tMainConfig.get("machines", "machines_explosion_damage", true).getBoolean(false);
+ GregTech_API.sMachineFlammable = tMainConfig.get("machines", "machines_flammable", true).getBoolean(false);
+ GregTech_API.sMachineNonWrenchExplosions = tMainConfig.get("machines", "explosions_on_nonwrenching", true).getBoolean(false);
+ GregTech_API.sMachineWireFire = tMainConfig.get("machines", "wirefire_on_explosion", true).getBoolean(false);
+ GregTech_API.sMachineFireExplosions = tMainConfig.get("machines", "fire_causes_explosions", true).getBoolean(false);
+ GregTech_API.sMachineRainExplosions = tMainConfig.get("machines", "rain_causes_explosions", true).getBoolean(false);
+ GregTech_API.sMachineThunderExplosions = tMainConfig.get("machines", "lightning_causes_explosions", true).getBoolean(false);
+ GregTech_API.sConstantEnergy = tMainConfig.get("machines", "constant_need_of_energy", true).getBoolean(false);
+ GregTech_API.sColoredGUI = tMainConfig.get("machines", "colored_guis_when_painted", true).getBoolean(false);
+
+ GregTech_API.sTimber = tMainConfig.get("general", "timber_axe", false).getBoolean(false);
+ GregTech_API.sDrinksAlwaysDrinkable = tMainConfig.get("general", "drinks_always_drinkable", false).getBoolean(false);
+ GregTech_API.sDoShowAllItemsInCreative = tMainConfig.get("general", "show_all_metaitems_in_creative_and_NEI", false).getBoolean(false);
+ GregTech_API.sMultiThreadedSounds = tMainConfig.get("general", "sound_multi_threading", false).getBoolean(false);
+ for (Dyes tDye : Dyes.values()) {
+ if ((tDye != Dyes._NULL) && (tDye.mIndex < 0))
+ {
+ tDye.mRGBa[0] = ((short)Math.min(255, Math.max(0, GregTech_API.sClientDataFile.get("ColorModulation." + tDye, "R", tDye.mRGBa[0]))));
+ tDye.mRGBa[1] = ((short)Math.min(255, Math.max(0, GregTech_API.sClientDataFile.get("ColorModulation." + tDye, "G", tDye.mRGBa[1]))));
+ tDye.mRGBa[2] = ((short)Math.min(255, Math.max(0, GregTech_API.sClientDataFile.get("ColorModulation." + tDye, "B", tDye.mRGBa[2]))));
+ }
+ }
+ gregtechproxy.mMaxEqualEntitiesAtOneSpot = tMainConfig.get("general", "MaxEqualEntitiesAtOneSpot", 3).getInt(3);
+ gregtechproxy.mSkeletonsShootGTArrows = tMainConfig.get("general", "SkeletonsShootGTArrows", 16).getInt(16);
+ gregtechproxy.mFlintChance = tMainConfig.get("general", "FlintAndSteelChance", 30).getInt(30);
+ gregtechproxy.mItemDespawnTime = tMainConfig.get("general", "ItemDespawnTime", 6000).getInt(6000);
+ gregtechproxy.mDisableVanillaOres = tMainConfig.get("general", "DisableVanillaOres", true).getBoolean(true);
+ gregtechproxy.mNerfDustCrafting = tMainConfig.get("general", "NerfDustCrafting", true).getBoolean(true);
+ gregtechproxy.mIncreaseDungeonLoot = tMainConfig.get("general", "IncreaseDungeonLoot", true).getBoolean(true);
+ gregtechproxy.mAxeWhenAdventure = tMainConfig.get("general", "AdventureModeStartingAxe", true).getBoolean(true);
+ gregtechproxy.mHardcoreCables = tMainConfig.get("general", "HardCoreCableLoss", false).getBoolean(false);
+ gregtechproxy.mSurvivalIntoAdventure = tMainConfig.get("general", "forceAdventureMode", false).getBoolean(false);
+ gregtechproxy.mHungerEffect = tMainConfig.get("general", "AFK_Hunger", false).getBoolean(false);
+ gregtechproxy.mHardRock = tMainConfig.get("general", "harderstone", false).getBoolean(false);
+ gregtechproxy.mInventoryUnification = tMainConfig.get("general", "InventoryUnification", true).getBoolean(true);
+ gregtechproxy.mCraftingUnification = tMainConfig.get("general", "CraftingUnification", true).getBoolean(true);
+ gregtechproxy.mNerfedWoodPlank = tMainConfig.get("general", "WoodNeedsSawForCrafting", true).getBoolean(true);
+ gregtechproxy.mNerfedVanillaTools = tMainConfig.get("general", "smallerVanillaToolDurability", true).getBoolean(true);
+ gregtechproxy.mSortToTheEnd = tMainConfig.get("general", "EnsureToBeLoadedLast", true).getBoolean(true);
+ gregtechproxy.mDisableIC2Cables = tMainConfig.get("general", "DisableIC2Cables", false).getBoolean(false);
+ gregtechproxy.mAchievements = tMainConfig.get("general", "EnableAchievements", true).getBoolean(true);
+ gregtechproxy.mAE2Integration = tMainConfig.get("general", "EnableAE2Integration", Loader.isModLoaded("appliedenergistics2")).getBoolean(Loader.isModLoaded("appliedenergistics2"));
+
+
+ GregTech_API.mOutputRF =GregTech_API.sOPStuff.get(ConfigCategories.general, "OutputRF", false);
+ GregTech_API.mInputRF =GregTech_API.sOPStuff.get(ConfigCategories.general, "InputRF", false);
+ GregTech_API.mEUtoRF = GregTech_API.sOPStuff.get(ConfigCategories.general, "100EUtoRF", 360);
+ GregTech_API.mRFtoEU = GregTech_API.sOPStuff.get(ConfigCategories.general, "100RFtoEU", 20);
+ GregTech_API.mRFExplosions = GregTech_API.sOPStuff.get(ConfigCategories.general, "RFExplosions", true);
+ GregTech_API.meIOLoaded = Loader.isModLoaded("EnderIO");
+
+ if (tMainConfig.get("general", "hardermobspawners", true).getBoolean(true)) {
+ Blocks.mob_spawner.setHardness(500.0F).setResistance(6000000.0F);
+ }
+ gregtechproxy.mOnline = tMainConfig.get("general", "online", true).getBoolean(false);
+
+ gregtechproxy.mUpgradeCount = Math.min(64, Math.max(1, tMainConfig.get("features", "UpgradeStacksize", 4).getInt()));
+ for (OrePrefixes tPrefix : OrePrefixes.values()) {
+ if (tPrefix.mIsUsedForOreProcessing) {
+ tPrefix.mDefaultStackSize = ((byte)Math.min(64, Math.max(1, tMainConfig.get("features", "MaxOreStackSize", 64).getInt())));
+ } else if (tPrefix == OrePrefixes.plank) {
+ tPrefix.mDefaultStackSize = ((byte)Math.min(64, Math.max(16, tMainConfig.get("features", "MaxPlankStackSize", 64).getInt())));
+ } else if ((tPrefix == OrePrefixes.wood) || (tPrefix == OrePrefixes.treeLeaves) || (tPrefix == OrePrefixes.treeSapling) || (tPrefix == OrePrefixes.log)) {
+ tPrefix.mDefaultStackSize = ((byte)Math.min(64, Math.max(16, tMainConfig.get("features", "MaxLogStackSize", 64).getInt())));
+ } else if (tPrefix.mIsUsedForBlocks) {
+ tPrefix.mDefaultStackSize = ((byte)Math.min(64, Math.max(16, tMainConfig.get("features", "MaxOtherBlockStackSize", 64).getInt())));
+ }
+ }
+ //GT_Config.troll = (Calendar.getInstance().get(2) + 1 == 4) && (Calendar.getInstance().get(5) >= 1) && (Calendar.getInstance().get(5) <= 2);
+
+ Materials.init(GregTech_API.sMaterialProperties);
+
+ GT_Log.out.println("GT_Mod: Saving Main Config");
+ tMainConfig.save();
+
+ GT_Log.out.println("GT_Mod: Generating Lang-File");
+ GT_LanguageManager.sEnglishFile = new Configuration(new File(aEvent.getModConfigurationDirectory().getParentFile(), "GregTech.lang"));
+ GT_LanguageManager.sEnglishFile.load();
+
+ GT_Log.out.println("GT_Mod: Removing all original Scrapbox Drops.");
+ try
+ {
+ GT_Utility.getField("ic2.core.item.ItemScrapbox$Drop", "topChance", true, true).set(null, Integer.valueOf(0));
+ ((List)GT_Utility.getFieldContent(GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), "drops", true, true)).clear();
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Adding Scrap with a Weight of 200.0F to the Scrapbox Drops.");
+ GT_ModHandler.addScrapboxDrop(200.0F, GT_ModHandler.getIC2Item("scrap", 1L));
+
+ EntityRegistry.registerModEntity(GT_Entity_Arrow.class, "GT_Entity_Arrow", 1, GT_Values.GT, 160, 1, true);
+ EntityRegistry.registerModEntity(GT_Entity_Arrow_Potion.class, "GT_Entity_Arrow_Potion", 2, GT_Values.GT, 160, 1, true);
+
+ new Enchantment_EnderDamage();
+ new Enchantment_Radioactivity();
+
+ new GT_Loader_OreProcessing().run();
+ new GT_Loader_OreDictionary().run();
+ new GT_Loader_ItemData().run();
+ new GT_Loader_Item_Block_And_Fluid().run();
+ new GT_Loader_MetaTileEntities().run();
+
+ new GT_Loader_CircuitBehaviors().run();
+ new GT_CoverBehaviorLoader().run();
+ new GT_SonictronLoader().run();
+ new GT_SpawnEventHandler();
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanel", true)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SGS", "CPC", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('G'), new ItemStack(Blocks.glass_pane, 1), Character.valueOf('P'), OrePrefixes.plateAlloy.get(Materials.Carbon), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Silicon) });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanel8V", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_8V.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSS", "STS", "SSS", Character.valueOf('S'), ItemList.Cover_SolarPanel, Character.valueOf('T'), OrePrefixes.circuit.get(Materials.Advanced) });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelLV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_8V, Character.valueOf('T'), ItemList.Transformer_LV_ULV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelMV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_LV, Character.valueOf('T'), ItemList.Transformer_MV_LV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelHV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_MV, Character.valueOf('T'), ItemList.Transformer_HV_MV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelEV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_HV, Character.valueOf('T'), ItemList.Transformer_EV_HV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelIV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_EV, Character.valueOf('T'), ItemList.Transformer_IV_EV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelLuV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_IV, Character.valueOf('T'), ItemList.Transformer_LuV_IV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelZPM", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_LuV, Character.valueOf('T'), ItemList.Transformer_ZPM_LuV });
+ }
+ if (GregTech_API.sOPStuff.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanelUV", false)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " S ", "STS", " S ", Character.valueOf('S'), ItemList.Cover_SolarPanel_ZPM, Character.valueOf('T'), ItemList.Transformer_UV_ZPM });
+ }
+ if (gregtechproxy.mSortToTheEnd) {
+ try
+ {
+ GT_Log.out.println("GT_Mod: Sorting GregTech to the end of the Mod List for further processing.");
+ LoadController tLoadController = (LoadController)GT_Utility.getFieldContent(Loader.instance(), "modController", true, true);
+ List<ModContainer> tModList = tLoadController.getActiveModList();List<ModContainer> tNewModsList = new ArrayList();
+ ModContainer tGregTech = null;
+ for (short i = 0; i < tModList.size(); i = (short)(i + 1))
+ {
+ ModContainer tMod = (ModContainer)tModList.get(i);
+ if (tMod.getModId().equalsIgnoreCase("gregtech")) {
+ tGregTech = tMod;
+ } else {
+ tNewModsList.add(tMod);
+ }
+ }
+ if (tGregTech != null) {
+ tNewModsList.add(tGregTech);
+ }
+ GT_Utility.getField(tLoadController, "activeModList", true, true).set(tLoadController, tNewModsList);
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ GregTech_API.sPreloadFinished = true;
+ GT_Log.out.println("GT_Mod: Preload-Phase finished!");
+ GT_Log.ore.println("GT_Mod: Preload-Phase finished!");
+ for (Runnable tRunnable : GregTech_API.sAfterGTPreload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ @Mod.EventHandler
+ public void onLoad(FMLInitializationEvent aEvent)
+ {
+ if (GregTech_API.sLoadStarted) {
+ return;
+ }
+ for (Runnable tRunnable : GregTech_API.sBeforeGTLoad) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ gregtechproxy.onLoad();
+ if (gregtechproxy.mSortToTheEnd)
+ {
+ new GT_ItemIterator().run();
+ gregtechproxy.registerUnificationEntries();
+ new GT_FuelLoader().run();
+ }
+ GregTech_API.sLoadFinished = true;
+ GT_Log.out.println("GT_Mod: Load-Phase finished!");
+ GT_Log.ore.println("GT_Mod: Load-Phase finished!");
+ for (Runnable tRunnable : GregTech_API.sAfterGTLoad) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ @Mod.EventHandler
+ public void onPostLoad(FMLPostInitializationEvent aEvent)
+ {
+ if (GregTech_API.sPostloadStarted) {
+ return;
+ }
+ for (Runnable tRunnable : GregTech_API.sBeforeGTPostload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ gregtechproxy.onPostLoad();
+ if (gregtechproxy.mSortToTheEnd)
+ {
+ gregtechproxy.registerUnificationEntries();
+ }
+ else
+ {
+ new GT_ItemIterator().run();
+ gregtechproxy.registerUnificationEntries();
+ new GT_FuelLoader().run();
+ }
+ new GT_BookAndLootLoader().run();
+ new GT_ItemMaxStacksizeLoader().run();
+ new GT_BlockResistanceLoader().run();
+ new GT_RecyclerBlacklistLoader().run();
+ new GT_MinableRegistrator().run();
+ new GT_MachineRecipeLoader().run();
+ new GT_ScrapboxDropLoader().run();
+ new GT_CropLoader().run();
+ new GT_Worldgenloader().run();
+ new GT_CoverLoader().run();
+
+ GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.planks, 1), null, false);
+ GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.cobblestone, 1), null, false);
+ GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.stone, 1), null, false);
+ GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Items.leather, 1), null, false);
+
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getRecipeOutput(new ItemStack[] { null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, null, null }), new ItemData(Materials.Tin, 10886400L, new MaterialStack[0]));
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockcrafting, "tile.glowstone", false)) {
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1), null, new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1) });
+ }
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Blocks.wooden_slab, 1, 0), new ItemStack(Blocks.wooden_slab, 1, 1), new ItemStack(Blocks.wooden_slab, 1, 2) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.wooden_slab, 6, 0), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", Character.valueOf('W'), new ItemStack(Blocks.planks, 1, 0) });
+
+ GT_Log.out.println("GT_Mod: Activating OreDictionary Handler, this can take some time, as it scans the whole OreDictionary");
+ FMLLog.info("If your Log stops here, you were too impatient. Wait a bit more next time, before killing Minecraft with the Task Manager.", new Object[0]);
+ gregtechproxy.activateOreDictHandler();
+ FMLLog.info("Congratulations, you have been waiting long enough. Have a Cake.", new Object[0]);
+ GT_Log.out.println("GT_Mod: " + GT_ModHandler.sSingleNonBlockDamagableRecipeList.size() + " Recipes were left unused.");
+ if (GT_Values.D1)
+ {
+ IRecipe tRecipe;
+ for (Iterator i$ = GT_ModHandler.sSingleNonBlockDamagableRecipeList.iterator(); i$.hasNext(); GT_Log.out.println("=> " + tRecipe.getRecipeOutput().getDisplayName())) {
+ tRecipe = (IRecipe)i$.next();
+ }
+ }
+ new GT_CraftingRecipeLoader().run();
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2forgehammer", true)) {
+ GT_ModHandler.removeRecipeByOutput(ItemList.IC2_ForgeHammer.getWildcard(1L, new Object[0]));
+ }
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("machine", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("machine", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "RwR", "RRR", Character.valueOf('R'), OrePrefixes.plate.get(Materials.Iron) });
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0))
+ {
+ GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes.addRecipe(true, new ItemStack[] { ItemList.Bottle_Empty.get(1L, new Object[0]) }, new ItemStack[] { new ItemStack(Items.potionitem, 1, 0) }, null, new FluidStack[] { Materials.Water.getFluid(250L) }, null, 4, 1, 0);
+ GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes.addRecipe(true, new ItemStack[] { new ItemStack(Items.potionitem, 1, 0) }, new ItemStack[] { ItemList.Bottle_Empty.get(1L, new Object[0]) }, null, null, null, 4, 1, 0);
+ }
+ else
+ {
+ GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes.addRecipe(true, new ItemStack[] { tData.emptyContainer }, new ItemStack[] { tData.filledContainer }, null, new FluidStack[] { tData.fluid }, null, tData.fluid.amount / 62, 1, 0);
+ GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes.addRecipe(true, new ItemStack[] { tData.filledContainer }, new ItemStack[] { GT_Utility.getContainerItem(tData.filledContainer, true) }, null, null, new FluidStack[] { tData.fluid }, tData.fluid.amount / 62, 1, 0);
+ }
+ }
+ try
+ {
+ for (Object tRecipe : MachineCentrifuge.RecipeManager.recipes)
+ {
+
+
+ Map<ItemStack,Float> outputs = ((MachineCentrifuge.CentrifugeRecipe)tRecipe).getAllProducts();
+ ItemStack[] tOutputs = new ItemStack[outputs.size()];
+ int[] tChances = new int[outputs.size()];
+int i =0;
+for (Map.Entry<ItemStack, Float> entry : outputs.entrySet()) {
+ tChances[i] = (int) (entry.getValue()*10000);
+ tOutputs[i] = entry.getKey().copy();
+ i++;
+}
+// for (int i = 0; i < outputs.size(); i++) {
+// tOutputs[i] = outputs.entrySet().
+// tChances[i] = (tOriginalChances[i].intValue() * 100);
+// }
+ GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.addRecipe(true, new ItemStack[] { ((MachineCentrifuge.CentrifugeRecipe)tRecipe).getInput() }, tOutputs, null, tChances, null, null, 128, 5, 0);
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ try
+ {
+ for (Object tRecipe : MachineSqueezer.RecipeManager.recipes) {
+ if ((((MachineSqueezer.Recipe)tRecipe).resources.length == 1) && (GT_Utility.getFluidForFilledItem(((MachineSqueezer.Recipe)tRecipe).resources[0], true) == null)) {
+ GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes.addRecipe(true, new ItemStack[] { ((MachineSqueezer.Recipe)tRecipe).resources[0] }, new ItemStack[] { ((MachineSqueezer.Recipe)tRecipe).remnants }, null, new int[] { ((MachineSqueezer.Recipe)tRecipe).chance * 100 }, null, new FluidStack[] { ((MachineSqueezer.Recipe)tRecipe).liquid }, 400, 2, 0);
+ }
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ String tName = "";
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "blastfurnace"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "blockcutter"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "inductionFurnace"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "generator"), false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "windMill"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "waterMill"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "solarPanel"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "centrifuge"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "electrolyzer"), false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "compressor"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "electroFurnace"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "extractor"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "macerator"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "recycler"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "metalformer"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "orewashingplant"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "massFabricator"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "ic2_" + (tName = "replicator"), true)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item(tName, 1L));
+ }
+ if (gregtechproxy.mNerfedVanillaTools)
+ {
+ GT_Log.out.println("GT_Mod: Nerfing Vanilla Tool Durability");
+ Items.wooden_sword.setMaxDamage(12);
+ Items.wooden_pickaxe.setMaxDamage(12);
+ Items.wooden_shovel.setMaxDamage(12);
+ Items.wooden_axe.setMaxDamage(12);
+ Items.wooden_hoe.setMaxDamage(12);
+
+ Items.stone_sword.setMaxDamage(48);
+ Items.stone_pickaxe.setMaxDamage(48);
+ Items.stone_shovel.setMaxDamage(48);
+ Items.stone_axe.setMaxDamage(48);
+ Items.stone_hoe.setMaxDamage(48);
+
+ Items.iron_sword.setMaxDamage(256);
+ Items.iron_pickaxe.setMaxDamage(256);
+ Items.iron_shovel.setMaxDamage(256);
+ Items.iron_axe.setMaxDamage(256);
+ Items.iron_hoe.setMaxDamage(256);
+
+ Items.golden_sword.setMaxDamage(24);
+ Items.golden_pickaxe.setMaxDamage(24);
+ Items.golden_shovel.setMaxDamage(24);
+ Items.golden_axe.setMaxDamage(24);
+ Items.golden_hoe.setMaxDamage(24);
+
+ Items.diamond_sword.setMaxDamage(768);
+ Items.diamond_pickaxe.setMaxDamage(768);
+ Items.diamond_shovel.setMaxDamage(768);
+ Items.diamond_axe.setMaxDamage(768);
+ Items.diamond_hoe.setMaxDamage(768);
+ }
+ GT_Log.out.println("GT_Mod: Adding buffered Recipes.");
+ GT_ModHandler.stopBufferingCraftingRecipes();
+
+ GT_Log.out.println("GT_Mod: Saving Lang File.");
+ GT_LanguageManager.sEnglishFile.save();
+ GregTech_API.sPostloadFinished = true;
+ GT_Log.out.println("GT_Mod: PostLoad-Phase finished!");
+ GT_Log.ore.println("GT_Mod: PostLoad-Phase finished!");
+ for (Runnable tRunnable : GregTech_API.sAfterGTPostload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Adding Fake Recipes for NEI");
+ if (ItemList.FR_Bee_Drone.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Bee_Drone.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Bee_Drone.getWithName(1L, "Scanned Drone", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Bee_Princess.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Bee_Princess.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Bee_Princess.getWithName(1L, "Scanned Princess", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Bee_Queen.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Bee_Queen.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Bee_Queen.getWithName(1L, "Scanned Queen", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Tree_Sapling.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Tree_Sapling.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Tree_Sapling.getWithName(1L, "Scanned Sapling", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Butterfly.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Butterfly.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Butterfly.getWithName(1L, "Scanned Butterfly", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Larvae.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Larvae.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Larvae.getWithName(1L, "Scanned Larvae", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Serum.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Serum.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Serum.getWithName(1L, "Scanned Serum", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_Caterpillar.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_Caterpillar.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_Caterpillar.getWithName(1L, "Scanned Caterpillar", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.FR_PollenFertile.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.FR_PollenFertile.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.FR_PollenFertile.getWithName(1L, "Scanned Pollen", new Object[0]) }, null, new FluidStack[] { Materials.Honey.getFluid(50L) }, null, 500, 2, 0);
+ }
+ if (ItemList.IC2_Crop_Seeds.get(1L, new Object[0]) != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.IC2_Crop_Seeds.getWildcard(1L, new Object[0]) }, new ItemStack[] { ItemList.IC2_Crop_Seeds.getWithName(1L, "Scanned Seeds", new Object[0]) }, null, null, null, 160, 8, 0);
+ }
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { new ItemStack(Items.written_book, 1, 32767) }, new ItemStack[] { ItemList.Tool_DataStick.getWithName(1L, "Scanned Book Data", new Object[0]) }, ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to", new Object[0]), null, null, 128, 32, 0);
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { new ItemStack(Items.filled_map, 1, 32767) }, new ItemStack[] { ItemList.Tool_DataStick.getWithName(1L, "Scanned Map Data", new Object[0]) }, ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to", new Object[0]), null, null, 128, 32, 0);
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.Tool_DataOrb.getWithName(1L, "Orb to overwrite", new Object[0]) }, new ItemStack[] { ItemList.Tool_DataOrb.getWithName(1L, "Copy of the Orb", new Object[0]) }, ItemList.Tool_DataOrb.getWithName(0L, "Orb to copy", new Object[0]), null, null, 512, 32, 0);
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.Tool_DataStick.getWithName(1L, "Stick to overwrite", new Object[0]) }, new ItemStack[] { ItemList.Tool_DataStick.getWithName(1L, "Copy of the Stick", new Object[0]) }, ItemList.Tool_DataStick.getWithName(0L, "Stick to copy", new Object[0]), null, null, 128, 32, 0);
+ for (Materials tMaterial : Materials.VALUES) {
+ if ((tMaterial.mElement != null) && (!tMaterial.mElement.mIsIsotope) && (tMaterial != Materials.Magic) && (tMaterial.getMass() > 0L))
+ {
+ ItemStack tOutput = ItemList.Tool_DataOrb.get(1L, new Object[0]);
+ Behaviour_DataOrb.setDataTitle(tOutput, "Elemental-Scan");
+ Behaviour_DataOrb.setDataName(tOutput, tMaterial.mElement.name());
+ ItemStack tInput = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, 1L);
+ if (tInput != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { tInput }, new ItemStack[] { tOutput }, ItemList.Tool_DataOrb.get(1L, new Object[0]), null, null, (int)(tMaterial.getMass() * 8192L), 32, 0);
+ GT_Recipe.GT_Recipe_Map.sRepicatorFakeRecipes.addFakeRecipe(false, null , new ItemStack[] { tInput }, new ItemStack[] { tOutput } , new FluidStack[]{Materials.UUMatter.getFluid(tMaterial.getMass())}, null, (int)(tMaterial.getMass() * 512L), 32, 0);
+ }
+ tInput = GT_OreDictUnificator.get(OrePrefixes.cell, tMaterial, 1L);
+ if (tInput != null) {
+ GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes.addFakeRecipe(false, new ItemStack[] { tInput }, new ItemStack[] { tOutput }, ItemList.Tool_DataOrb.get(1L, new Object[0]), null, null, (int)(tMaterial.getMass() * 8192L), 32, 0);
+ GT_Recipe.GT_Recipe_Map.sRepicatorFakeRecipes.addFakeRecipe(false, null , new ItemStack[] { tInput }, new ItemStack[] { tOutput } , new FluidStack[]{Materials.UUMatter.getFluid(tMaterial.getMass())}, null, (int)(tMaterial.getMass() * 512L), 32, 0);
+ }
+ }
+ }
+ GT_Recipe.GT_Recipe_Map.sRockBreakerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.Display_ITS_FREE.getWithName(0L, "Place Lava on Side", new Object[0]) }, new ItemStack[] { new ItemStack(Blocks.cobblestone, 1) }, null, null, null, 16, 32, 0);
+ GT_Recipe.GT_Recipe_Map.sRockBreakerFakeRecipes.addFakeRecipe(false, new ItemStack[] { ItemList.Display_ITS_FREE.getWithName(0L, "Place Lava on Top", new Object[0]) }, new ItemStack[] { new ItemStack(Blocks.stone, 1) }, null, null, null, 16, 32, 0);
+ GT_Recipe.GT_Recipe_Map.sRockBreakerFakeRecipes.addFakeRecipe(false, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L) }, new ItemStack[] { new ItemStack(Blocks.obsidian, 1) }, null, null, null, 128, 32, 0);
+ for (Iterator i$ = GT_ModHandler.getMaceratorRecipeList().entrySet().iterator(); i$.hasNext();)
+ {
+ Entry tRecipe = (Map.Entry)i$.next();
+ if (((RecipeOutput)tRecipe.getValue()).items.size() > 0) {
+ for (ItemStack tStack : ((IRecipeInput)tRecipe.getKey()).getInputs()) {
+ if (GT_Utility.isStackValid(tStack)) {
+ GT_Recipe.GT_Recipe_Map.sMaceratorRecipes.addFakeRecipe(true, new ItemStack[] { GT_Utility.copyAmount(((IRecipeInput)tRecipe.getKey()).getAmount(), new Object[] { tStack }) }, new ItemStack[] { (ItemStack)((RecipeOutput)tRecipe.getValue()).items.get(0) }, null, null, null, null, 400, 2, 0);
+ }
+ }
+ }
+ }
+ achievements = new GT_Achievements();
+ Map.Entry<IRecipeInput, RecipeOutput> tRecipe;
+ GT_Log.out.println("GT_Mod: Loading finished, deallocating temporary Init Variables.");
+ GregTech_API.sBeforeGTPreload = null;
+ GregTech_API.sAfterGTPreload = null;
+ GregTech_API.sBeforeGTLoad = null;
+ GregTech_API.sAfterGTLoad = null;
+ GregTech_API.sBeforeGTPostload = null;
+ GregTech_API.sAfterGTPostload = null;
+ }
+
+ @Mod.EventHandler
+ public void onServerStarting(FMLServerStartingEvent aEvent)
+ {
+ for (Runnable tRunnable : GregTech_API.sBeforeGTServerstart) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ gregtechproxy.onServerStarting();
+ GT_Log.out.println("GT_Mod: Unificating outputs of all known Recipe Types.");
+ ArrayList<ItemStack> tStacks = new ArrayList(10000);
+ GT_Log.out.println("GT_Mod: IC2 Machines");
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.cannerBottle.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.centrifuge.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.compressor.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.extractor.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.macerator.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.metalformerCutting.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.metalformerExtruding.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.metalformerRolling.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.matterAmplifier.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.oreWashing.getRecipes().values())
+ {
+ ItemStack tStack;
+ for (Iterator i$ = tRecipe.items.iterator(); i$.hasNext(); tStacks.add(tStack)) {
+ tStack = (ItemStack)i$.next();
+ }
+ }
+ GT_Log.out.println("GT_Mod: Dungeon Loot");
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("dungeonChest").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("bonusChest").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("villageBlacksmith").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCrossing").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdLibrary").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCorridor").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleDispenser").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleChest").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidDesertyChest").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("mineshaftCorridor").getItems(new Random())) {
+ tStacks.add(tContent.theItemId);
+ }
+ GT_Log.out.println("GT_Mod: Smelting");
+ Object tStack;
+ for (Iterator i$ = FurnaceRecipes.smelting().getSmeltingList().values().iterator(); i$.hasNext(); tStacks.add((ItemStack)tStack)) {
+ tStack = i$.next();
+ }
+ if (gregtechproxy.mCraftingUnification)
+ {
+ GT_Log.out.println("GT_Mod: Crafting Recipes");
+ for (Object tRecipe : CraftingManager.getInstance().getRecipeList()) {
+ if ((tRecipe instanceof IRecipe)) {
+ tStacks.add(((IRecipe)tRecipe).getRecipeOutput());
+ }
+ }
+ }
+ for (ItemStack tOutput : tStacks) {
+ if (gregtechproxy.mRegisteredOres.contains(tOutput))
+ {
+ FMLLog.severe("GT-ERR-01: @ " + tOutput.getUnlocalizedName() + " " + tOutput.getDisplayName(), new Object[0]);
+ FMLLog.severe("A Recipe used an OreDict Item as Output directly, without copying it before!!! This is a typical CallByReference/CallByValue Error", new Object[0]);
+ FMLLog.severe("Said Item will be renamed to make the invalid Recipe visible, so that you can report it properly.", new Object[0]);
+ FMLLog.severe("Please check all Recipes outputting this Item, and report the Recipes to their Owner.", new Object[0]);
+ FMLLog.severe("The Owner of the ==>RECIPE<==, NOT the Owner of the Item, which has been mentioned above!!!", new Object[0]);
+ FMLLog.severe("And ONLY Recipes which are ==>OUTPUTTING<== the Item, sorry but I don't want failed Bug Reports.", new Object[0]);
+ FMLLog.severe("GregTech just reports this Error to you, so you can report it to the Mod causing the Problem.", new Object[0]);
+ FMLLog.severe("Even though I make that Bug visible, I can not and will not fix that for you, that's for the causing Mod to fix.", new Object[0]);
+ FMLLog.severe("And speaking of failed Reports:", new Object[0]);
+ FMLLog.severe("Both IC2 and GregTech CANNOT be the CAUSE of this Problem, so don't report it to either of them.", new Object[0]);
+ FMLLog.severe("I REPEAT, BOTH, IC2 and GregTech CANNOT be the source of THIS BUG. NO MATTER WHAT.", new Object[0]);
+ FMLLog.severe("Asking in the IC2 Forums, which Mod is causing that, won't help anyone, since it is not possible to determine, which Mod it is.", new Object[0]);
+ FMLLog.severe("If it would be possible, then I would have had added the Mod which is causing it to the Message already. But it is not possible.", new Object[0]);
+ FMLLog.severe("Sorry, but this Error is serious enough to justify this Wall-O-Text and the partially allcapsed Language.", new Object[0]);
+ FMLLog.severe("Also it is a Ban Reason on the IC2-Forums to post this seriously.", new Object[0]);
+ tOutput.setStackDisplayName("ERROR! PLEASE CHECK YOUR LOG FOR 'GT-ERR-01'!");
+ }
+ else
+ {
+ GT_OreDictUnificator.setStack(tOutput);
+ }
+ }
+ GT_Log.out.println("GT_Mod: ServerStarting-Phase finished!");
+ GT_Log.ore.println("GT_Mod: ServerStarting-Phase finished!");
+ for (Runnable tRunnable : GregTech_API.sAfterGTServerstart) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ @Mod.EventHandler
+ public void onServerStarted(FMLServerStartedEvent aEvent)
+ {
+ gregtechproxy.onServerStarted();
+ }
+
+ @Mod.EventHandler
+public void onIDChangingEvent(FMLModIdMappingEvent aEvent)
+{
+ GT_Utility.reInit();
+ GT_Recipe.reInit();
+ for(Iterator i$ = GregTech_API.sItemStackMappings.iterator(); i$.hasNext();)
+ {
+ Map tMap = (Map)i$.next();
+ try
+ {
+ GT_Utility.reMap(tMap);
+ }
+ catch(Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+}
+// public void onIDChangingEvent(FMLModIdMappingEvent aEvent)
+// {
+// GT_Utility.reInit();
+// GT_Recipe.reInit();
+// Map<GT_ItemStack, ?> tMap;
+// for (Iterator i$ = GregTech_API.sItemStackMappings.iterator(); i$.hasNext(); ) {
+// tMap = (Map)i$.next();
+// }
+// }
+
+ @Mod.EventHandler
+ public void onServerStopping(FMLServerStoppingEvent aEvent)
+ {
+ for (Runnable tRunnable : GregTech_API.sBeforeGTServerstop) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ gregtechproxy.onServerStopping();
+ try
+ {
+ if ((GT_Values.D1) || (GT_Log.out != System.out))
+ {
+ GT_Log.out.println("*");
+ GT_Log.out.println("Printing List of all registered Objects inside the OreDictionary, now with free extra Sorting:");
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+
+ String[] tList = OreDictionary.getOreNames();
+ Arrays.sort(tList);
+ for (String tOreName : tList)
+ {
+ int tAmount = OreDictionary.getOres(tOreName).size();
+ if (tAmount > 0) {
+ GT_Log.out.println((tAmount < 10 ? " " : "") + tAmount + "x " + tOreName);
+ }
+ }
+ GT_Log.out.println("*");
+ GT_Log.out.println("Printing List of all registered Objects inside the Fluid Registry, now with free extra Sorting:");
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+
+ tList = (String[])FluidRegistry.getRegisteredFluids().keySet().toArray(new String[FluidRegistry.getRegisteredFluids().keySet().size()]);
+ Arrays.sort(tList);
+ for (String tFluidName : tList) {
+ GT_Log.out.println(tFluidName);
+ }
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ GT_Log.out.println("Outputting all the Names inside the Biomeslist");
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ for (int i = 0; i < BiomeGenBase.getBiomeGenArray().length; i++) {
+ if (BiomeGenBase.getBiomeGenArray()[i] != null) {
+ GT_Log.out.println(BiomeGenBase.getBiomeGenArray()[i].biomeID + " = " + BiomeGenBase.getBiomeGenArray()[i].biomeName);
+ }
+ }
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ GT_Log.out.println("Printing List of generatable Materials");
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) {
+ if (GregTech_API.sGeneratedMaterials[i] == null) {
+ GT_Log.out.println("Index " + i + ":" + null);
+ } else {
+ GT_Log.out.println("Index " + i + ":" + GregTech_API.sGeneratedMaterials[i]);
+ }
+ }
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ GT_Log.out.println("END GregTech-Debug");
+ GT_Log.out.println("*");GT_Log.out.println("*");GT_Log.out.println("*");
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ for (Runnable tRunnable : GregTech_API.sAfterGTServerstop) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ public boolean isServerSide()
+ {
+ return gregtechproxy.isServerSide();
+ }
+
+ public boolean isClientSide()
+ {
+ return gregtechproxy.isClientSide();
+ }
+
+ public boolean isBukkitSide()
+ {
+ return gregtechproxy.isBukkitSide();
+ }
+
+ public EntityPlayer getThePlayer()
+ {
+ return gregtechproxy.getThePlayer();
+ }
+
+ public int addArmor(String aArmorPrefix)
+ {
+ return gregtechproxy.addArmor(aArmorPrefix);
+ }
+
+ public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ gregtechproxy.doSonictronSound(aStack, aWorld, aX, aY, aZ);
+ }
+}
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
new file mode 100644
index 0000000000..15140242d8
--- /dev/null
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -0,0 +1,566 @@
+package gregtech.api;
+
+import static gregtech.api.enums.GT_Values.*;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IDamagableItem;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.items.GT_CoolantCellIC_Item;
+import gregtech.api.items.GT_CoolantCell_Item;
+import gregtech.api.items.GT_Tool_Item;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.api.objects.GT_Cover_Default;
+import gregtech.api.objects.GT_Cover_None;
+import gregtech.api.objects.GT_HashSet;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.threads.GT_Runnable_MachineBlockUpdate;
+import gregtech.api.util.*;
+import gregtech.api.world.GT_Worldgen;
+
+import java.util.*;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.Fluid;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * Please do not include this File in your Mod-download as it ruins compatiblity, like with the IC2-API
+ * You may just copy those Functions into your Code, or better call them via reflection.
+ *
+ * The whole API is the basic construct of my Mod. Everything is dependent on it.
+ * I change things quite often so please don't include any File inside your Mod, even if it is an Interface.
+ * Since some Authors were stupid enough to break this simple Rule, I added Version checks to enforce it.
+ *
+ * In these Folders are many useful Functions. You can use them via reflection if you want.
+ * I know not everything is compilable due to API's of other Mods, but these are easy to fix in your Setup.
+ *
+ * You can use this to learn about Modding, but I would recommend simpler Mods.
+ * You may even copypaste Code from these API-Files into your Mod, as I have nothing against that, but you should look exactly at what you are copying.
+ *
+ * @author Gregorius Techneticies
+ */
+public class GregTech_API {
+ /** For the API Version check */
+ public static volatile int VERSION = 508;
+
+ @Deprecated
+ public static IGT_RecipeAdder sRecipeAdder;
+
+ @Deprecated
+ public static final long MATERIAL_UNIT = M, FLUID_MATERIAL_UNIT = L;
+
+ /** Used to register Aspects to ThaumCraft, this Object might be null if ThaumCraft isn't installed */
+ public static IThaumcraftCompat sThaumcraftCompat;
+
+ /** These Lists are getting executed at their respective timings. Useful if you have to do things right before/after I do them, without having to control the load order. Add your "Commands" in the Constructor or in a static Code Block of your Mods Main Class. These are not Threaded, I just use a native Java Interface for their execution. Implement just the Method run() and everything should work */
+ public static List<Runnable> sBeforeGTPreload = new ArrayList<Runnable>(), sAfterGTPreload = new ArrayList<Runnable>(), sBeforeGTLoad = new ArrayList<Runnable>(), sAfterGTLoad = new ArrayList<Runnable>(), sBeforeGTPostload = new ArrayList<Runnable>(), sAfterGTPostload = new ArrayList<Runnable>(), sBeforeGTServerstart = new ArrayList<Runnable>(), sAfterGTServerstart = new ArrayList<Runnable>(), sBeforeGTServerstop = new ArrayList<Runnable>(), sAfterGTServerstop = new ArrayList<Runnable>(), sGTBlockIconload = new ArrayList<Runnable>(), sGTItemIconload = new ArrayList<Runnable>();
+
+ /** Fixes the HashMap Mappings for ItemStacks once the Server started */
+ public static final Collection<Map<GT_ItemStack, ?>> sItemStackMappings = new ArrayList<Map<GT_ItemStack, ?>>();
+ public static final Collection<Map<Fluid, ?>> sFluidMappings = new ArrayList<Map<Fluid, ?>>();
+
+ /** The Icon Registers from Blocks and Items. They will get set right before the corresponding Icon Load Phase as executed in the Runnable List above. */
+ @SideOnly(Side.CLIENT)
+ public static IIconRegister sBlockIcons, sItemIcons;
+
+ /** The Configuration Objects */
+ public static GT_Config sRecipeFile = null, sMachineFile = null, sWorldgenFile = null, sMaterialProperties = null, sUnification = null, sSpecialFile = null, sClientDataFile, sOPStuff = null;
+
+ /** The MetaTileEntity-ID-List-Length */
+ public static final short MAXIMUM_METATILE_IDS = Short.MAX_VALUE - 1;
+
+ /** My Creative Tab */
+ public static final CreativeTabs TAB_GREGTECH = new GT_CreativeTab("Main", "Main"), TAB_GREGTECH_MATERIALS = new GT_CreativeTab("Materials", "Materials"), TAB_GREGTECH_ORES = new GT_CreativeTab("Ores", "Ores");
+
+ public static int TICKS_FOR_LAG_AVERAGING = 25, MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = 100;
+
+ /**
+ * A List of all registered MetaTileEntities
+ *
+ * 0 - 1199 are used by GregTech.
+ * 1200 - 2047 are used for GregTech Cables.
+ * 2048 - 2559 are reserved for OvermindDL.
+ * 2560 - 3071 are reserved for Immibis.
+ * 3072 - 3583 are reserved for LinusPhoenix.
+ * 3584 - 4095 are reserved for BloodyAsp.
+ * 4096 - 5095 are used for GregTech Frames.
+ * 5096 - 6099 are used for GregTech Pipes.
+ * 6100 - 8191 are used for GregTech Decoration Blocks.
+ * 8192 - 8703 are reserved for ZL123.
+ * 8704 - 9215 are reserved for Mr10Movie.
+ * 9216 - 9727 are used for GregTech Automation Machines.
+ * 9728 - 10239 are reserved for 28Smiles.
+ * 10240 - 10751 are reserved for VirMan.
+ * 10752 - 11263 are reserved for the next one who asks me.
+ * 9728 - 32766 are currently free.
+ *
+ * Contact me if you need a free ID-Range, which doesn't conflict with other Addons.
+ * You could make an ID-Config, but we all know, what "stupid" customers think about conflicting ID's
+ */
+ public static final IMetaTileEntity[] METATILEENTITIES = new IMetaTileEntity[MAXIMUM_METATILE_IDS];
+
+ /** Initialized by the Block creation. */
+ public static Block sBlockMachines;
+ public static Block sBlockOres1;
+ public static Block sBlockGranites, sBlockConcretes;
+ public static Block sBlockCasings1, sBlockCasings2, sBlockCasings3, sBlockCasings4;
+
+ /** Getting assigned by the Config */
+ public static boolean sTimber = F, sDrinksAlwaysDrinkable = F, sMultiThreadedSounds = F, sDoShowAllItemsInCreative = F, sColoredGUI = T, sConstantEnergy = T, sMachineExplosions = T, sMachineFlammable = T, sMachineNonWrenchExplosions = T, sMachineRainExplosions = T, sMachineThunderExplosions = T, sMachineFireExplosions = T, sMachineWireFire = true;
+ public static boolean mOutputRF =false;
+ public static boolean mInputRF =false;
+ public static boolean meIOLoaded =false;
+ public static int mEUtoRF = 360;
+ public static int mRFtoEU = 20;
+ public static boolean mRFExplosions = true;
+
+ /** Getting assigned by the Mod loading */
+ public static boolean sUnificationEntriesRegistered = F, sPreloadStarted = F, sPreloadFinished = F, sLoadStarted = F, sLoadFinished = F, sPostloadStarted = F, sPostloadFinished = F;
+
+ /** The Icon List for Covers */
+ public static final Map<GT_ItemStack, ITexture> sCovers = new HashMap<GT_ItemStack, ITexture>();
+
+ /** The List of Cover Behaviors for the Covers */
+ public static final Map<GT_ItemStack, GT_CoverBehavior> sCoverBehaviors = new HashMap<GT_ItemStack, GT_CoverBehavior>();
+
+ /** The List of Circuit Behaviors for the Redstone Circuit Block */
+ public static final Map<Integer, GT_CircuitryBehavior> sCircuitryBehaviors = new HashMap<Integer, GT_CircuitryBehavior>();
+
+ /** The List of Blocks, which can conduct Machine Block Updates */
+ public static final Map<Block, Integer> sMachineIDs = new HashMap<Block, Integer>();
+
+ /** The Redstone Frequencies */
+ public static final Map<Integer, Byte> sWirelessRedstone = new HashMap<Integer, Byte>();
+
+ /** The IDSU Frequencies */
+ public static final Map<Integer, Integer> sIDSUList = new HashMap<Integer, Integer>();
+
+ /** A List of all Books, which were created using @GT_Utility.getWrittenBook the original Title is the Key Value */
+ public static final Map<String, ItemStack> sBookList = new HashMap<String, ItemStack>();
+
+ /** The List of all Sounds used in GT, indices are in the static Block at the bottom */
+ public static final Map<Integer, String> sSoundList = new HashMap<Integer, String>();
+
+ /** The List of Tools, which can be used. Accepts regular damageable Items and Electric Items */
+ public static final GT_HashSet<GT_ItemStack> sToolList = new GT_HashSet<GT_ItemStack>(), sCrowbarList = new GT_HashSet<GT_ItemStack>(), sScrewdriverList = new GT_HashSet<GT_ItemStack>(), sWrenchList = new GT_HashSet<GT_ItemStack>(), sSoftHammerList = new GT_HashSet<GT_ItemStack>(), sHardHammerList = new GT_HashSet<GT_ItemStack>(), sSolderingToolList = new GT_HashSet<GT_ItemStack>(), sSolderingMetalList = new GT_HashSet<GT_ItemStack>();
+ /** The List of Hazmat Armors */
+ public static final GT_HashSet<GT_ItemStack> sGasHazmatList = new GT_HashSet<GT_ItemStack>(), sBioHazmatList = new GT_HashSet<GT_ItemStack>(), sFrostHazmatList = new GT_HashSet<GT_ItemStack>(), sHeatHazmatList = new GT_HashSet<GT_ItemStack>(), sRadioHazmatList = new GT_HashSet<GT_ItemStack>(), sElectroHazmatList = new GT_HashSet<GT_ItemStack>();
+
+ /**
+ * The List of Dimensions, which are Whitelisted for the Teleporter. This list should not contain other Planets.
+ * Mystcraft Dimensions and other Dimensional Things should be allowed.
+ * Mystcraft and Twilight Forest are automatically considered a Dimension, without being in this List.
+ */
+ public static final Collection<Integer> sDimensionalList = new HashSet<Integer>();
+
+ /** Lists of all the active World generation Features, these are getting Initialized in Postload! */
+ public static final List<GT_Worldgen> sWorldgenList = new ArrayList<GT_Worldgen>();
+
+ /** A List containing all the Materials, which are somehow in use by GT and therefor receive a specific Set of Items. */
+ public static final Materials[] sGeneratedMaterials = new Materials[1000];
+
+ /**
+ * You want OreDict-Unification for YOUR Mod/Addon, when GregTech is installed? This Function is especially for YOU.
+ * Call this Function after the load-Phase, as I register the the most of the Unification at that Phase (Redpowers Storageblocks are registered at postload).
+ * A recommended use of this Function is inside your Recipe-System itself (if you have one), as the unification then makes 100% sure, that every added non-unificated Output gets automatically unificated.
+ *
+ * I will personally make sure, that only common prefixes of Ores get registered at the Unificator, as of now there are:
+ * pulp, dust, dustSmall, ingot, nugget, gem, ore and block
+ * If another Mod-Author messes these up, then it's not my fault and it's especially not your fault. As these are commonly used prefixes.
+ *
+ * This Unificator-API-Function uses the same Functions I use, for unificating Items. So if there is something messed up (very unlikely), then everything is messed up.
+ *
+ * You shouldn't use this to unificate the Inputs of your Recipes, this is only meant for the Outputs.
+ *
+ * @param aOreStack the Stack you want to get unificated. It is stackSize Sensitive.
+ * @return Either an unificated Stack or the stack you toss in, but it should never be null, unless you throw a Nullpointer into it.
+ */
+ public static ItemStack getUnificatedOreDictStack(ItemStack aOreStack) {
+ if (!GregTech_API.sPreloadFinished) GT_Log.err.println("GregTech_API ERROR: " + aOreStack.getItem() + "." + aOreStack.getItemDamage() + " - OreDict Unification Entries are not registered now, please call it in the postload phase.");
+ return GT_OreDictUnificator.get(T, aOreStack);
+ }
+
+ /**
+ * Causes a Machineblock Update
+ * This update will cause surrounding MultiBlock Machines to update their Configuration.
+ * You should call this Function in @Block.breakBlock and in @Block.onBlockAdded of your Machine.
+ * @param aWorld is being the World
+ * @param aX is the X-Coord of the update causing Block
+ * @param aY is the Y-Coord of the update causing Block
+ * @param aZ is the Z-Coord of the update causing Block
+ */
+ public static boolean causeMachineUpdate(World aWorld, int aX, int aY, int aZ) {
+ if (!aWorld.isRemote) new Thread(new GT_Runnable_MachineBlockUpdate(aWorld, aX, aY, aZ), "Machine Block Updating").start();
+ return T;
+ }
+
+ /**
+ * Adds a Multi-Machine Block, like my Machine Casings for example.
+ * You should call @causeMachineUpdate in @Block.breakBlock and in @Block.onBlockAdded of your registered Block.
+ * You don't need to register TileEntities which implement @IMachineBlockUpdateable
+ * @param aID the ID of your Block
+ * @param aMeta the Metadata of the Blocks as Bitmask! -1 or ~0 for all Metavalues
+ */
+ public static boolean registerMachineBlock(Block aBlock, int aMeta) {
+ if (GT_Utility.isBlockInvalid(aBlock)) return F;
+ if (GregTech_API.sThaumcraftCompat != null) GregTech_API.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock);
+ sMachineIDs.put(aBlock, aMeta);
+ return T;
+ }
+
+ /**
+ * Like above but with boolean Parameters instead of a BitMask
+ */
+ public static boolean registerMachineBlock(Block aBlock, boolean... aMeta) {
+ if (GT_Utility.isBlockInvalid(aBlock) || aMeta == null || aMeta.length == 0) return F;
+ if (GregTech_API.sThaumcraftCompat != null) GregTech_API.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock);
+ int rMeta = 0;
+ for (byte i = 0; i < aMeta.length && i < 16; i++) if (aMeta[i]) rMeta |= B[i];
+ sMachineIDs.put(aBlock, rMeta);
+ return T;
+ }
+
+ /**
+ * if this Block is a Machine Update Conducting Block
+ */
+ public static boolean isMachineBlock(Block aBlock, int aMeta) {
+ if (GT_Utility.isBlockInvalid(aBlock)) return F;
+ return (sMachineIDs.containsKey(aBlock) && (sMachineIDs.get(aBlock) & B[aMeta]) != 0);
+ }
+
+ /**
+ * Creates a new Coolant Cell Item for your Nuclear Reactor
+ */
+ public static Item constructCoolantCellItem(String aUnlocalized, String aEnglish, int aMaxStore) {
+ try {
+ return new GT_CoolantCellIC_Item(aUnlocalized, aEnglish, aMaxStore);
+// return (Item)Class.forName("gregtech.api.items.GT_CoolantCellIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxStore);
+ } catch(Throwable e) {/*Do nothing*/}
+ try {
+ return new GT_CoolantCell_Item(aUnlocalized, aEnglish, aMaxStore);
+// return (Item)Class.forName("gregtech.api.items.GT_CoolantCell_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxStore);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Generic_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", F);
+ }
+
+ /**
+ * Creates a new Energy Armor Item
+ */
+ public static Item constructElectricArmorItem(String aUnlocalized, String aEnglish, int aCharge, int aTransfer, int aTier, int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, int aType, int aArmorIndex) {
+ try {
+ return (Item)Class.forName("gregtechmod.api.items.GT_EnergyArmorIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aDamageEnergyCost, aSpecials, aArmorAbsorbtionPercentage, aChargeProvider, aType, aArmorIndex);
+ } catch(Throwable e) {/*Do nothing*/}
+ try {
+ return (Item)Class.forName("gregtechmod.api.items.GT_EnergyArmor_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aDamageEnergyCost, aSpecials, aArmorAbsorbtionPercentage, aChargeProvider, aType, aArmorIndex);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Generic_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", F);
+ }
+
+ /**
+ * Creates a new Energy Battery Item
+ */
+ public static Item constructElectricEnergyStorageItem(String aUnlocalized, String aEnglish, int aCharge, int aTransfer, int aTier, int aEmptyID, int aFullID) {
+ try {
+ return (Item)Class.forName("gregtechmod.api.items.GT_EnergyStoreIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID);
+ } catch(Throwable e) {/*Do nothing*/}
+ try {
+ return (Item)Class.forName("gregtechmod.api.items.GT_EnergyStore_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Generic_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", F);
+ }
+
+ /**
+ * Creates a new Hard Hammer Item
+ */
+ public static GT_Tool_Item constructHardHammerItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_HardHammer_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new Crowbar Item
+ */
+ public static GT_Tool_Item constructCrowbarItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_CrowbarRC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage);
+ } catch(Throwable e) {/*Do nothing*/}
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_Crowbar_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new Wrench Item
+ */
+ public static GT_Tool_Item constructWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_Wrench_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new electric Screwdriver Item
+ */
+ public static GT_Tool_Item constructElectricScrewdriverItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_ScrewdriverIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new electric Wrench Item
+ */
+ public static GT_Tool_Item constructElectricWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_WrenchIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new electric Saw Item
+ */
+ public static GT_Tool_Item constructElectricSawItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_SawIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aToolQuality, aToolStrength, aEnergyConsumptionPerBlockBreak, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new electric Drill Item
+ */
+ public static GT_Tool_Item constructElectricDrillItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_DrillIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aToolQuality, aToolStrength, aEnergyConsumptionPerBlockBreak, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new electric Soldering Tool
+ */
+ public static GT_Tool_Item constructElectricSolderingToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aDisChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_SolderingToolIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, aEntityDamage, F);
+ }
+
+ /**
+ * Creates a new empty electric Tool
+ */
+ public static GT_Tool_Item constructEmptyElectricToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aChargedGTID) {
+ try {
+ return (GT_Tool_Item)Class.forName("gregtechmod.api.items.GT_EmptyToolIC_Item").getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aChargedGTID);
+ } catch(Throwable e) {/*Do nothing*/}
+ return new gregtech.api.items.GT_Tool_Item(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, 0, F);
+ }
+
+ private static Class sBaseMetaTileEntityClass = null;
+
+ /**
+ * This gives you a new BaseMetaTileEntity. As some Interfaces are not always loaded (Buildcraft, Univeral Electricity) I have to use Invocation at the Constructor of the BaseMetaTileEntity
+ */
+ public static BaseMetaTileEntity constructBaseMetaTileEntity() {
+ if (sBaseMetaTileEntityClass == null) {
+ try {
+ return (BaseMetaTileEntity)(sBaseMetaTileEntityClass = BaseMetaTileEntity.class).newInstance();
+ } catch(Throwable e) {/*Do nothing*/}
+ }
+
+ try {
+ return (BaseMetaTileEntity)(sBaseMetaTileEntityClass.newInstance());
+ } catch(Throwable e) {
+ GT_Log.err.println("GT_Mod: Fatal Error ocurred while initializing TileEntities, crashing Minecraft.");
+ e.printStackTrace(GT_Log.err);
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void registerCover(ItemStack aStack, ITexture aCover, GT_CoverBehavior aBehavior) {
+ if (!sCovers.containsKey(new GT_ItemStack(aStack))) sCovers.put(new GT_ItemStack(aStack), aCover==null||!aCover.isValidTexture()?Textures.BlockIcons.ERROR_RENDERING[0]:aCover);
+ if (aBehavior != null) sCoverBehaviors.put(new GT_ItemStack(aStack), aBehavior);
+ }
+
+ public static void registerCoverBehavior(ItemStack aStack, GT_CoverBehavior aBehavior) {
+ sCoverBehaviors.put(new GT_ItemStack(aStack), aBehavior==null?sDefaultBehavior:aBehavior);
+ }
+
+ /**
+ * Registers multiple Cover Items. I use that for the OreDict Functionality.
+ * @param aBehavior can be null
+ */
+ public static void registerCover(Collection<ItemStack> aStackList, ITexture aCover, GT_CoverBehavior aBehavior) {
+ if (aCover.isValidTexture()) for (ItemStack tStack : aStackList) registerCover(tStack, aCover, aBehavior);
+ }
+
+ /**
+ * This is the generic Cover behavior. Used for the default Covers, which have no Behavior.
+ */
+ public static final GT_CoverBehavior sDefaultBehavior = new GT_Cover_Default(), sNoBehavior = new GT_Cover_None();
+
+ /**
+ * returns a Cover behavior, guaranteed to not return null after preload
+ */
+ public static GT_CoverBehavior getCoverBehavior(ItemStack aStack) {
+ if (aStack == null || aStack.getItem() == null) return sNoBehavior;
+ GT_CoverBehavior rCover = sCoverBehaviors.get(new GT_ItemStack(aStack));
+ if (rCover == null) return sDefaultBehavior;
+ return rCover;
+ }
+
+ /**
+ * returns a Cover behavior, guaranteed to not return null
+ */
+ public static GT_CoverBehavior getCoverBehavior(int aStack) {
+ if (aStack == 0) return sNoBehavior;
+ return getCoverBehavior(GT_Utility.intToStack(aStack));
+ }
+
+ /**
+ * Register a Wrench to be usable on GregTech Machines.
+ * The Wrench MUST have some kind of Durability unlike certain Buildcraft Wrenches.
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ *
+ * -----
+ *
+ * Returning true at isDamagable was a great Idea, KingLemming. Well played.
+ * Since the OmniWrench is just a Single-Item-Mod, people can choose if they want your infinite durability or not. So that's not really a Problem.
+ * I even have a new Config to autodisable most infinite BC Wrenches (but that one is turned off).
+ *
+ * One last Bug for you to fix:
+ * My Autoregistration detects Railcrafts Crowbars, Buildcrafts Wrenches and alike, due to their Interfaces.
+ * Guess what now became a Crowbar by accident. Try registering the Wrench at the load phase to prevent things like that from happening.
+ * Yes, I know that "You need to register Tools in the Load Phase"-Part wasn't there before this. Sorry about that.
+ */
+ public static boolean registerWrench(ItemStack aTool) {
+ return registerTool(aTool, sWrenchList);
+ }
+
+ /**
+ * Register a Crowbar to extract Covers from Machines
+ * Crowbars are NOT Wrenches btw.
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerCrowbar(ItemStack aTool) {
+ return registerTool(aTool, sCrowbarList);
+ }
+
+ /**
+ * Register a Screwdriver to interact directly with Machines and Covers
+ * Did I mention, that it is intentionally not possible to make a Multitool, which doesn't switch ItemID (like a Mode) all the time?
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerScrewdriver(ItemStack aTool) {
+ return registerTool(aTool, sScrewdriverList);
+ }
+
+ /**
+ * Register a Soft Hammer to interact with Machines
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerSoftHammer(ItemStack aTool) {
+ return registerTool(aTool, sSoftHammerList);
+ }
+
+ /**
+ * Register a Hard Hammer to interact with Machines
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerHardHammer(ItemStack aTool) {
+ return registerTool(aTool, sHardHammerList);
+ }
+
+ /**
+ * Register a Soldering Tool to interact with Machines
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerSolderingTool(ItemStack aTool) {
+ return registerTool(aTool, sSolderingToolList);
+ }
+
+ /**
+ * Register a Soldering Tin to interact with Soldering Tools
+ *
+ * You need to register Tools in the Load Phase, because otherwise the Autodetection will assign a Tool Type in certain Cases during postload (When IToolWrench or similar Interfaces are implemented).
+ */
+ public static boolean registerSolderingMetal(ItemStack aTool) {
+ return registerTool(aTool, sSolderingMetalList);
+ }
+
+ /**
+ * Generic Function to add Tools to the Lists.
+ * Contains all sanity Checks for Tools, like preventing one Tool from being registered for multiple purposes as controls would override each other.
+ */
+ public static boolean registerTool(ItemStack aTool, Collection<GT_ItemStack> aToolList) {
+ if (aTool == null || GT_Utility.isStackInList(aTool, sToolList) || (!aTool.getItem().isDamageable() && !GT_ModHandler.isElectricItem(aTool) && !(aTool.getItem() instanceof IDamagableItem))) return F;
+ aToolList.add(new GT_ItemStack(GT_Utility.copyAmount(1, aTool)));
+ sToolList.add(new GT_ItemStack(GT_Utility.copyAmount(1, aTool)));
+ return T;
+ }
+
+ /**
+ * Adds Biomes to the Biome Lists for World Generation
+ */
+ static {
+ sItemStackMappings.add(sCovers);
+ sItemStackMappings.add(sCoverBehaviors);
+
+ sDimensionalList.add(-1);
+ sDimensionalList.add( 0);
+ sDimensionalList.add( 1);
+
+ sSoundList.put( 0, "random.break");
+ sSoundList.put( 1, "random.anvil_use");
+ sSoundList.put( 2, "random.anvil_break");
+ sSoundList.put( 3, "random.click");
+ sSoundList.put( 4, "random.fizz");
+ sSoundList.put( 5, "random.explode");
+ sSoundList.put( 6, "fire.ignite");
+
+ sSoundList.put(100, MOD_ID_IC2.toLowerCase() + ":" + "tools.Wrench");
+ sSoundList.put(101, MOD_ID_IC2.toLowerCase() + ":" + "tools.RubberTrampoline");
+ sSoundList.put(102, MOD_ID_IC2.toLowerCase() + ":" + "tools.Painter");
+ sSoundList.put(103, MOD_ID_IC2.toLowerCase() + ":" + "tools.BatteryUse");
+ sSoundList.put(104, MOD_ID_IC2.toLowerCase() + ":" + "tools.chainsaw.ChainsawUseOne");
+ sSoundList.put(105, MOD_ID_IC2.toLowerCase() + ":" + "tools.chainsaw.ChainsawUseTwo");
+ sSoundList.put(106, MOD_ID_IC2.toLowerCase() + ":" + "tools.drill.DrillSoft");
+ sSoundList.put(107, MOD_ID_IC2.toLowerCase() + ":" + "tools.drill.DrillHard");
+ sSoundList.put(108, MOD_ID_IC2.toLowerCase() + ":" + "tools.ODScanner");
+
+ sSoundList.put(200, MOD_ID_IC2.toLowerCase() + ":" + "machines.ExtractorOp");
+ sSoundList.put(201, MOD_ID_IC2.toLowerCase() + ":" + "machines.MaceratorOp");
+ sSoundList.put(202, MOD_ID_IC2.toLowerCase() + ":" + "machines.InductionLoop");
+ sSoundList.put(203, MOD_ID_IC2.toLowerCase() + ":" + "machines.CompressorOp");
+ sSoundList.put(204, MOD_ID_IC2.toLowerCase() + ":" + "machines.RecyclerOp");
+ sSoundList.put(205, MOD_ID_IC2.toLowerCase() + ":" + "machines.MinerOp");
+ sSoundList.put(206, MOD_ID_IC2.toLowerCase() + ":" + "machines.PumpOp");
+ sSoundList.put(207, MOD_ID_IC2.toLowerCase() + ":" + "machines.ElectroFurnaceLoop");
+ sSoundList.put(208, MOD_ID_IC2.toLowerCase() + ":" + "machines.InductionLoop");
+ sSoundList.put(209, MOD_ID_IC2.toLowerCase() + ":" + "machines.MachineOverload");
+ sSoundList.put(210, MOD_ID_IC2.toLowerCase() + ":" + "machines.InterruptOne");
+ sSoundList.put(211, MOD_ID_IC2.toLowerCase() + ":" + "machines.KaChing");
+ sSoundList.put(212, MOD_ID_IC2.toLowerCase() + ":" + "machines.MagnetizerLoop");
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/damagesources/GT_DamageSources.java b/src/main/java/gregtech/api/damagesources/GT_DamageSources.java
new file mode 100644
index 0000000000..d83bf661fe
--- /dev/null
+++ b/src/main/java/gregtech/api/damagesources/GT_DamageSources.java
@@ -0,0 +1,86 @@
+package gregtech.api.damagesources;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.*;
+
+public class GT_DamageSources {
+ public static DamageSource getElectricDamage() {
+ return ic2.api.info.Info.DMG_ELECTRIC;
+ }
+
+ public static DamageSource getRadioactiveDamage() {
+ return ic2.api.info.Info.DMG_RADIATION;
+ }
+
+ public static DamageSource getNukeExplosionDamage() {
+ return ic2.api.info.Info.DMG_NUKE_EXPLOSION;
+ }
+
+ public static DamageSource getExplodingDamage() {
+ return new DamageSourceExploding();
+ }
+
+ public static DamageSource getCombatDamage(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) {
+ return new DamageSourceCombat(aType, aPlayer, aDeathMessage);
+ }
+
+ public static DamageSource getHeatDamage() {
+ return new DamageSourceHeat();
+ }
+
+ public static DamageSource getFrostDamage() {
+ return new DamageSourceFrost();
+ }
+
+ private static class DamageSourceCombat extends EntityDamageSource {
+ private IChatComponent mDeathMessage;
+
+ public DamageSourceCombat(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) {
+ super(aType, aPlayer);
+ mDeathMessage = aDeathMessage;
+ }
+
+ @Override
+ public IChatComponent func_151519_b(EntityLivingBase aTarget) {
+ return mDeathMessage == null ? super.func_151519_b(aTarget) : mDeathMessage;
+ }
+ }
+
+ private static class DamageSourceFrost extends DamageSource {
+ public DamageSourceFrost() {
+ super("frost");
+ setDifficultyScaled();
+ }
+
+ @Override
+ public IChatComponent func_151519_b(EntityLivingBase aTarget) {
+ return new ChatComponentText(EnumChatFormatting.RED+aTarget.getCommandSenderName()+EnumChatFormatting.WHITE + " got frozen");
+ }
+ }
+
+ private static class DamageSourceHeat extends DamageSource {
+ public DamageSourceHeat() {
+ super("steam");
+ setDifficultyScaled();
+ }
+
+ @Override
+ public IChatComponent func_151519_b(EntityLivingBase aTarget) {
+ return new ChatComponentText(EnumChatFormatting.RED+aTarget.getCommandSenderName()+EnumChatFormatting.WHITE + " was boiled alive");
+ }
+ }
+
+ public static class DamageSourceExploding extends DamageSource {
+ public DamageSourceExploding() {
+ super("exploded");
+ setDamageAllowedInCreativeMode();
+ setDamageBypassesArmor();
+ setDamageIsAbsolute();
+ }
+
+ @Override
+ public IChatComponent func_151519_b(EntityLivingBase aTarget) {
+ return new ChatComponentText(EnumChatFormatting.RED+aTarget.getCommandSenderName()+EnumChatFormatting.WHITE + " exploded");
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java b/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java
new file mode 100644
index 0000000000..69919fe396
--- /dev/null
+++ b/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java
@@ -0,0 +1,58 @@
+package gregtech.api.enchants;
+
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.enchantment.EnchantmentDamage;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.boss.EntityDragon;
+import net.minecraft.entity.monster.EntityEnderman;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+public class Enchantment_EnderDamage extends EnchantmentDamage {
+ public static Enchantment_EnderDamage INSTANCE;
+
+ public Enchantment_EnderDamage() {
+ super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Disjunction", 15), 2, -1);
+ GT_LanguageManager.addStringLocalization(getName(), "Disjunction");
+ Materials.Silver .setEnchantmentForTools(this, 2);
+ Materials.Mercury .setEnchantmentForTools(this, 3);
+ Materials.Electrum .setEnchantmentForTools(this, 3);
+ Materials.SterlingSilver .setEnchantmentForTools(this, 4);
+ Materials.AstralSilver .setEnchantmentForTools(this, 5);
+ INSTANCE = this;
+ }
+
+ @Override
+ public int getMinEnchantability(int aLevel) {
+ return 5 + (aLevel - 1) * 8;
+ }
+
+ @Override
+ public int getMaxEnchantability(int aLevel) {
+ return this.getMinEnchantability(aLevel) + 20;
+ }
+
+ @Override
+ public int getMaxLevel() {
+ return 5;
+ }
+
+ @Override
+ public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) {
+ if ((aHurtEntity instanceof EntityEnderman || aHurtEntity instanceof EntityDragon || (aHurtEntity.getClass().getName().indexOf(".") >= 0 && aHurtEntity.getClass().getName().substring(aHurtEntity.getClass().getName().lastIndexOf(".")).contains("Ender")))) {
+ // Weakness causes Endermen to not be able to teleport with GT being installed.
+ aHurtEntity.addPotionEffect(new PotionEffect(Potion.weakness.id , aLevel * 200, Math.max(1, (5*aLevel) / 7)));
+ // They also get Poisoned. If you have this Enchant on an Arrow, you can kill the Ender Dragon easier.
+ aHurtEntity.addPotionEffect(new PotionEffect(Potion.poison.id , aLevel * 200, Math.max(1, (5*aLevel) / 7)));
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "enchantment.damage.endermen";
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java b/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java
new file mode 100644
index 0000000000..f05d00d08d
--- /dev/null
+++ b/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java
@@ -0,0 +1,61 @@
+package gregtech.api.enchants;
+
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.enchantment.EnchantmentDamage;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+
+public class Enchantment_Radioactivity extends EnchantmentDamage {
+ public static Enchantment_Radioactivity INSTANCE;
+
+ public Enchantment_Radioactivity() {
+ super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Radioactivity", 14), 0, -1);
+ GT_LanguageManager.addStringLocalization(getName(), "Radioactivity");
+ Materials.Plutonium .setEnchantmentForTools(this, 1).setEnchantmentForArmors(this, 1);
+ Materials.Uranium235 .setEnchantmentForTools(this, 2).setEnchantmentForArmors(this, 2);
+ Materials.Plutonium241 .setEnchantmentForTools(this, 3).setEnchantmentForArmors(this, 3);
+ Materials.NaquadahEnriched .setEnchantmentForTools(this, 4).setEnchantmentForArmors(this, 4);
+ Materials.Naquadria .setEnchantmentForTools(this, 5).setEnchantmentForArmors(this, 5);
+ INSTANCE = this;
+ }
+
+ @Override
+ public int getMinEnchantability(int aLevel) {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public int getMaxEnchantability(int aLevel) {
+ return 0;
+ }
+
+ @Override
+ public int getMaxLevel() {
+ return 5;
+ }
+
+ @Override
+ public boolean canApply(ItemStack par1ItemStack) {
+ return false;
+ }
+
+ @Override
+ public boolean isAllowedOnBooks() {
+ return false;
+ }
+
+ @Override
+ public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) {
+ GT_Utility.applyRadioactivity(aHurtEntity, aLevel, 1);
+ }
+
+ @Override
+ public String getName() {
+ return "enchantment.damage.radioactivity";
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/ConfigCategories.java b/src/main/java/gregtech/api/enums/ConfigCategories.java
new file mode 100644
index 0000000000..ba61c759da
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/ConfigCategories.java
@@ -0,0 +1,64 @@
+package gregtech.api.enums;
+
+public enum ConfigCategories {
+ news,
+ general,
+ machineconfig,
+ specialunificationtargets;
+
+ public enum IDs {
+ crops,
+ enchantments;
+ }
+
+ public enum Materials {
+ heatdamage,
+ oreprocessingoutputmultiplier,
+ blastfurnacerequirements,
+ blastinductionsmelter,;
+ }
+
+ public enum Recipes {
+ researches,
+ harderrecipes,
+ gregtechrecipes,
+ disabledrecipes,
+ recipereplacements,
+ storageblockcrafting,
+ storageblockdecrafting;
+ }
+
+ public enum Machines {
+ smelting,
+ squeezer,
+ liquidtransposer,
+ liquidtransposerfilling,
+ liquidtransposeremptying,
+ extractor,
+ sawmill,
+ compression,
+ thermalcentrifuge,
+ orewashing,
+ inductionsmelter,
+ rcblastfurnace,
+ scrapboxdrops,
+ massfabamplifier,
+ maceration,
+ rockcrushing,
+ pulverization;
+ }
+
+ public enum Fuels {
+ boilerfuels;
+ }
+
+ public enum Tools {
+ mortar,
+ hammerplating,
+ hammermultiingot,
+ hammerdoubleplate,
+ hammertripleplate,
+ hammerquadrupleplate,
+ hammerquintupleplate;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/Dyes.java b/src/main/java/gregtech/api/enums/Dyes.java
new file mode 100644
index 0000000000..e37648dbef
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/Dyes.java
@@ -0,0 +1,105 @@
+package gregtech.api.enums;
+
+import gregtech.api.interfaces.IColorModulationContainer;
+import gregtech.api.objects.GT_ArrayList;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+public enum Dyes implements IColorModulationContainer {
+ /** The valid Colors, see VALUES Array below */
+ dyeBlack ( 0, 32, 32, 32, "Black"),
+ dyeRed ( 1, 255, 0, 0, "Red"),
+ dyeGreen ( 2, 0, 255, 0, "Green"),
+ dyeBrown ( 3, 96, 64, 0, "Brown"),
+ dyeBlue ( 4, 0, 0, 255, "Blue"),
+ dyePurple ( 5, 128, 0, 128, "Purple"),
+ dyeCyan ( 6, 0, 255, 255, "Cyan"),
+ dyeLightGray ( 7, 192, 192, 192, "Light Gray"),
+ dyeGray ( 8, 128, 128, 128, "Gray"),
+ dyePink ( 9, 255, 192, 192, "Pink"),
+ dyeLime (10, 128, 255, 128, "Lime"),
+ dyeYellow (11, 255, 255, 0, "Yellow"),
+ dyeLightBlue (12, 128, 128, 255, "Light Blue"),
+ dyeMagenta (13, 255, 0, 255, "Magenta"),
+ dyeOrange (14, 255, 128, 0, "Orange"),
+ dyeWhite (15, 255, 255, 255, "White"),
+ /** The NULL Color */
+ _NULL (-1, 255, 255, 255, "INVALID COLOR"),
+ /** Additional Colors only used for direct Color referencing */
+ CABLE_INSULATION (-1, 64, 64, 64, "Cable Insulation"),
+ CONSTRUCTION_FOAM (-1, 64, 64, 64, "Construction Foam"),
+ MACHINE_METAL (-1, 220, 220, 255, "Machine Metal");
+
+ public static final Dyes VALUES[] = {dyeBlack, dyeRed, dyeGreen, dyeBrown, dyeBlue, dyePurple, dyeCyan, dyeLightGray, dyeGray, dyePink, dyeLime, dyeYellow, dyeLightBlue, dyeMagenta, dyeOrange, dyeWhite};
+
+ public final byte mIndex;
+ public final String mName;
+ public final short[] mRGBa;
+ private final ArrayList<Fluid> mFluidDyes = new GT_ArrayList<Fluid>(false, 1);
+
+ private Dyes(int aIndex, int aR, int aG, int aB, String aName) {
+ mIndex = (byte)aIndex;
+ mName = aName;
+ mRGBa = new short[] {(short)aR, (short)aG, (short)aB, 0};
+ }
+
+ public static Dyes get(int aColor) {
+ if (aColor >= 0 && aColor < 16) return VALUES[aColor];
+ return _NULL;
+ }
+
+ public static short[] getModulation(int aColor, short[] aDefaultModulation) {
+ if (aColor >= 0 && aColor < 16) return VALUES[aColor].mRGBa;
+ return aDefaultModulation;
+ }
+
+ public static Dyes get(String aColor) {
+ Object tObject = GT_Utility.getFieldContent(Dyes.class, aColor, false, false);
+ if (tObject != null && tObject instanceof Dyes) return (Dyes)tObject;
+ return _NULL;
+ }
+
+ public static boolean isAnyFluidDye(FluidStack aFluid) {
+ return aFluid != null && isAnyFluidDye(aFluid.getFluid());
+ }
+
+ public static boolean isAnyFluidDye(Fluid aFluid) {
+ if (aFluid != null) for (Dyes tDye : VALUES) if (tDye.isFluidDye(aFluid)) return true;
+ return false;
+ }
+
+ public boolean isFluidDye(FluidStack aFluid) {
+ return aFluid != null && isFluidDye(aFluid.getFluid());
+ }
+
+ public boolean isFluidDye(Fluid aFluid) {
+ return aFluid != null && mFluidDyes.contains(aFluid);
+ }
+
+ public boolean addFluidDye(Fluid aDye) {
+ if (aDye == null || mFluidDyes.contains(aDye)) return false;
+ mFluidDyes.add(aDye);
+ return true;
+ }
+
+ public int getSizeOfFluidList() {
+ return mFluidDyes.size();
+ }
+
+ /**
+ * @param aAmount 1 Fluid Material Unit (144) = 1 Dye Item
+ */
+ public FluidStack getFluidDye(int aIndex, long aAmount) {
+ if (aIndex >= mFluidDyes.size() || aIndex < 0) return null;
+ return new FluidStack(mFluidDyes.get(aIndex), (int)aAmount);
+ }
+
+ @Override
+ public short[] getRGBA() {
+ return mRGBa;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/Element.java b/src/main/java/gregtech/api/enums/Element.java
new file mode 100644
index 0000000000..b9ff795320
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/Element.java
@@ -0,0 +1,311 @@
+package gregtech.api.enums;
+
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+/**
+ * This is some kind of Periodic Table, which I use to determine Properties of the Materials.
+ */
+public enum Element {
+ _NULL ( 0, 0, 0, -1, null , "" , false),
+ H ( 1, 0, 0, -1, null , "Hydrogen" , false),
+ D ( 1, 1, 0, -1, "H" , "Deuterium" , true),
+ T ( 1, 2, 0, -1, "D" , "Tritium" , true),
+ He ( 2, 2, 0, -1, null , "Helium" , false),
+ He_3 ( 2, 1, 0, -1, "H&D" , "Helium-3" , true),
+ Li ( 3, 4, 0, -1, null , "Lithium" , false),
+ Be ( 4, 5, 0, -1, null , "Beryllium" , false),
+ B ( 5, 5, 0, -1, null , "Boron" , false),
+ C ( 6, 6, 0, -1, null , "Carbon" , false),
+ N ( 7, 7, 0, -1, null , "Nitrogen" , false),
+ O ( 8, 8, 0, -1, null , "Oxygen" , false),
+ F ( 9, 9, 0, -1, null , "Fluorine" , false),
+ Ne ( 10, 10, 0, -1, null , "Neon" , false),
+ Na ( 11, 11, 0, -1, null , "Sodium" , false),
+ Mg ( 12, 12, 0, -1, null , "Magnesium" , false),
+ Al ( 13, 13, 0, -1, null , "Aluminium" , false),
+ Si ( 14, 14, 0, -1, null , "Silicon" , false),
+ P ( 15, 15, 0, -1, null , "Phosphorus" , false),
+ S ( 16, 16, 0, -1, null , "Sulfur" , false),
+ Cl ( 17, 18, 0, -1, null , "Chlorine" , false),
+ Ar ( 18, 22, 0, -1, null , "Argon" , false),
+ K ( 19, 20, 0, -1, null , "Potassium" , false),
+ Ca ( 20, 20, 0, -1, null , "Calcium" , false),
+ Sc ( 21, 24, 0, -1, null , "Scandium" , false),
+ Ti ( 22, 26, 0, -1, null , "Titanium" , false),
+ V ( 23, 28, 0, -1, null , "Vanadium" , false),
+ Cr ( 24, 28, 0, -1, null , "Chrome" , false),
+ Mn ( 25, 30, 0, -1, null , "Manganese" , false),
+ Fe ( 26, 30, 0, -1, null , "Iron" , false),
+ Co ( 27, 32, 0, -1, null , "Cobalt" , false),
+ Ni ( 28, 30, 0, -1, null , "Nickel" , false),
+ Cu ( 29, 34, 0, -1, null , "Copper" , false),
+ Zn ( 30, 35, 0, -1, null , "Zinc" , false),
+ Ga ( 31, 39, 0, -1, null , "Gallium" , false),
+ Ge ( 32, 40, 0, -1, null , "Germanium" , false),
+ As ( 33, 42, 0, -1, null , "Arsenic" , false),
+ Se ( 34, 45, 0, -1, null , "Selenium" , false),
+ Br ( 35, 45, 0, -1, null , "Bromine" , false),
+ Kr ( 36, 48, 0, -1, null , "Krypton" , false),
+ Rb ( 37, 48, 0, -1, null , "Rubidium" , false),
+ Sr ( 38, 49, 0, -1, null , "Strontium" , false),
+ Y ( 39, 50, 0, -1, null , "Yttrium" , false),
+ Zr ( 40, 51, 0, -1, null , "Zirconium" , false),
+ Nb ( 41, 53, 0, -1, null , "Niobium" , false),
+ Mo ( 42, 53, 0, -1, null , "Molybdenum" , false),
+ Tc ( 43, 55, 0, -1, null , "Technetium" , false),
+ Ru ( 44, 57, 0, -1, null , "Ruthenium" , false),
+ Rh ( 45, 58, 0, -1, null , "Rhodium" , false),
+ Pd ( 46, 60, 0, -1, null , "Palladium" , false),
+ Ag ( 47, 60, 0, -1, null , "Silver" , false),
+ Cd ( 48, 64, 0, -1, null , "Cadmium" , false),
+ In ( 49, 65, 0, -1, null , "Indium" , false),
+ Sn ( 50, 68, 0, -1, null , "Tin" , false),
+ Sb ( 51, 70, 0, -1, null , "Antimony" , false),
+ Te ( 52, 75, 0, -1, null , "Tellurium" , false),
+ I ( 53, 74, 0, -1, null , "Iodine" , false),
+ Xe ( 54, 77, 0, -1, null , "Xenon" , false),
+ Cs ( 55, 77, 0, -1, null , "Caesium" , false),
+ Ba ( 56, 81, 0, -1, null , "Barium" , false),
+ La ( 57, 81, 0, -1, null , "Lantanium" , false),
+ Ce ( 58, 82, 0, -1, null , "Cerium" , false),
+ Pr ( 59, 81, 0, -1, null , "Praseodymium" , false),
+ Nd ( 60, 84, 0, -1, null , "Neodymium" , false),
+ Pm ( 61, 83, 0, -1, null , "Promethium" , false),
+ Sm ( 62, 88, 0, -1, null , "Samarium" , false),
+ Eu ( 63, 88, 0, -1, null , "Europium" , false),
+ Gd ( 64, 93, 0, -1, null , "Gadolinium" , false),
+ Tb ( 65, 93, 0, -1, null , "Terbium" , false),
+ Dy ( 66, 96, 0, -1, null , "Dysprosium" , false),
+ Ho ( 67, 97, 0, -1, null , "Holmium" , false),
+ Er ( 68, 99, 0, -1, null , "Erbium" , false),
+ Tm ( 69, 99, 0, -1, null , "Thulium" , false),
+ Yb ( 70, 103, 0, -1, null , "Ytterbium" , false),
+ Lu ( 71, 103, 0, -1, null , "Lutetium" , false),
+ Hf ( 72, 106, 0, -1, null , "Hafnium" , false),
+ Ta ( 73, 107, 0, -1, null , "Tantalum" , false),
+ W ( 74, 109, 0, -1, null , "Wolframium" , false),
+ Re ( 75, 111, 0, -1, null , "Rhenium" , false),
+ Os ( 76, 114, 0, -1, null , "Osmium" , false),
+ Ir ( 77, 115, 0, -1, null , "Iridium" , false),
+ Pt ( 78, 117, 0, -1, null , "Platinum" , false),
+ Au ( 79, 117, 0, -1, null , "Gold" , false),
+ Hg ( 80, 120, 0, -1, null , "Mercury" , false),
+ Tl ( 81, 123, 0, -1, null , "Thallium" , false),
+ Pb ( 82, 125, 0, -1, null , "Lead" , false),
+ Bi ( 83, 125, 0, -1, null , "Bismuth" , false),
+ Po ( 84, 124, 0, -1, null , "Polonium" , false),
+ At ( 85, 124, 0, -1, null , "Astatine" , false),
+ Rn ( 86, 134, 0, -1, null , "Radon" , false),
+ Fr ( 87, 134, 0, -1, null , "Francium" , false),
+ Ra ( 88, 136, 0, -1, null , "Radium" , false),
+ Ac ( 89, 136, 0, -1, null , "Actinium" , false),
+ Th ( 90, 140, 0, -1, null , "Thorium" , false),
+ Pa ( 91, 138, 0, -1, null , "Protactinium" , false),
+ U ( 92, 146, 0, -1, null , "Uranium" , false),
+ U_235 ( 92, 143, 0, -1, null , "Uranium-235" , true),
+ Np ( 93, 144, 0, -1, null , "Neptunium" , false),
+ Pu ( 94, 152, 0, -1, null , "Plutonium" , false),
+ Pu_241 ( 94, 149, 0, -1, null , "Plutonium-241" , true),
+ Am ( 95, 150, 0, -1, null , "Americium" , false),
+ Cm ( 96, 153, 0, -1, null , "Curium" , false),
+ Bk ( 97, 152, 0, -1, null , "Berkelium" , false),
+ Cf ( 98, 153, 0, -1, null , "Californium" , false),
+ Es ( 99, 153, 0, -1, null , "Einsteinium" , false),
+ Fm ( 100, 157, 0, -1, null , "Fermium" , false),
+ Md ( 101, 157, 0, -1, null , "Mendelevium" , false),
+ No ( 102, 157, 0, -1, null , "Nobelium" , false),
+ Lr ( 103, 159, 0, -1, null , "Lawrencium" , false),
+ Rf ( 104, 161, 0, -1, null , "Rutherfordium" , false),
+ Db ( 105, 163, 0, -1, null , "Dubnium" , false),
+ Sg ( 106, 165, 0, -1, null , "Seaborgium" , false),
+ Bh ( 107, 163, 0, -1, null , "Bohrium" , false),
+ Hs ( 108, 169, 0, -1, null , "Hassium" , false),
+ Mt ( 109, 167, 0, -1, null , "Meitnerium" , false),
+ Ds ( 110, 171, 0, -1, null , "Darmstadtium" , false),
+ Rg ( 111, 169, 0, -1, null , "Roentgenium" , false),
+ Cn ( 112, 173, 0, -1, null , "Copernicium" , false),
+ Uut ( 113, 171, 0, -1, null , "Ununtrium" , false),
+ Fl ( 114, 175, 0, -1, null , "Flerovium" , false),
+ Uup ( 115, 173, 0, -1, null , "Ununpentium" , false),
+ Lv ( 116, 177, 0, -1, null , "Livermorium" , false),
+ Fa ( 117, 177, 0, -1, null , "Farnsium" , false), // Uus, Ununseptium
+ Uuo ( 118, 176, 0, -1, null , "Ununoctium" , false),
+
+ Ma ( 0, 0, 100, -1, null , "Magic" , false),
+ Nt ( 0,100000, 0, -1, null , "Neutronium" , false),
+
+ $H (- 1,- 0, 0, -1, null , "Anti-Hydrogen" , false),
+ $D (- 1,- 1, 0, -1, "H" , "Anti-Deuterium" , true),
+ $T (- 1,- 2, 0, -1, "D" , "Anti-Tritium" , true),
+ $He (- 2,- 2, 0, -1, null , "Anti-Helium" , false),
+ $He_3 (- 2,- 1, 0, -1, "H&D" , "Anti-Helium-3" , true),
+ $Li (- 3,- 4, 0, -1, null , "Anti-Lithium" , false),
+ $Be (- 4,- 5, 0, -1, null , "Anti-Beryllium" , false),
+ $B (- 5,- 5, 0, -1, null , "Anti-Boron" , false),
+ $C (- 6,- 6, 0, -1, null , "Anti-Carbon" , false),
+ $N (- 7,- 7, 0, -1, null , "Anti-Nitrogen" , false),
+ $O (- 8,- 8, 0, -1, null , "Anti-Oxygen" , false),
+ $F (- 9,- 9, 0, -1, null , "Anti-Fluorine" , false),
+ $Ne (- 10,- 10, 0, -1, null , "Anti-Neon" , false),
+ $Na (- 11,- 11, 0, -1, null , "Anti-Sodium" , false),
+ $Mg (- 12,- 12, 0, -1, null , "Anti-Magnesium" , false),
+ $Al (- 13,- 13, 0, -1, null , "Anti-Aluminium" , false),
+ $Si (- 14,- 14, 0, -1, null , "Anti-Silicon" , false),
+ $P (- 15,- 15, 0, -1, null , "Anti-Phosphorus" , false),
+ $S (- 16,- 16, 0, -1, null , "Anti-Sulfur" , false),
+ $Cl (- 17,- 18, 0, -1, null , "Anti-Chlorine" , false),
+ $Ar (- 18,- 22, 0, -1, null , "Anti-Argon" , false),
+ $K (- 19,- 20, 0, -1, null , "Anti-Potassium" , false),
+ $Ca (- 20,- 20, 0, -1, null , "Anti-Calcium" , false),
+ $Sc (- 21,- 24, 0, -1, null , "Anti-Scandium" , false),
+ $Ti (- 22,- 26, 0, -1, null , "Anti-Titanium" , false),
+ $V (- 23,- 28, 0, -1, null , "Anti-Vanadium" , false),
+ $Cr (- 24,- 28, 0, -1, null , "Anti-Chrome" , false),
+ $Mn (- 25,- 30, 0, -1, null , "Anti-Manganese" , false),
+ $Fe (- 26,- 30, 0, -1, null , "Anti-Iron" , false),
+ $Co (- 27,- 32, 0, -1, null , "Anti-Cobalt" , false),
+ $Ni (- 28,- 30, 0, -1, null , "Anti-Nickel" , false),
+ $Cu (- 29,- 34, 0, -1, null , "Anti-Copper" , false),
+ $Zn (- 30,- 35, 0, -1, null , "Anti-Zinc" , false),
+ $Ga (- 31,- 39, 0, -1, null , "Anti-Gallium" , false),
+ $Ge (- 32,- 40, 0, -1, null , "Anti-Germanium" , false),
+ $As (- 33,- 42, 0, -1, null , "Anti-Arsenic" , false),
+ $Se (- 34,- 45, 0, -1, null , "Anti-Selenium" , false),
+ $Br (- 35,- 45, 0, -1, null , "Anti-Bromine" , false),
+ $Kr (- 36,- 48, 0, -1, null , "Anti-Krypton" , false),
+ $Rb (- 37,- 48, 0, -1, null , "Anti-Rubidium" , false),
+ $Sr (- 38,- 49, 0, -1, null , "Anti-Strontium" , false),
+ $Y (- 39,- 50, 0, -1, null , "Anti-Yttrium" , false),
+ $Zr (- 40,- 51, 0, -1, null , "Anti-Zirconium" , false),
+ $Nb (- 41,- 53, 0, -1, null , "Anti-Niobium" , false),
+ $Mo (- 42,- 53, 0, -1, null , "Anti-Molybdenum" , false),
+ $Tc (- 43,- 55, 0, -1, null , "Anti-Technetium" , false),
+ $Ru (- 44,- 57, 0, -1, null , "Anti-Ruthenium" , false),
+ $Rh (- 45,- 58, 0, -1, null , "Anti-Rhodium" , false),
+ $Pd (- 46,- 60, 0, -1, null , "Anti-Palladium" , false),
+ $Ag (- 47,- 60, 0, -1, null , "Anti-Silver" , false),
+ $Cd (- 48,- 64, 0, -1, null , "Anti-Cadmium" , false),
+ $In (- 49,- 65, 0, -1, null , "Anti-Indium" , false),
+ $Sn (- 50,- 68, 0, -1, null , "Anti-Tin" , false),
+ $Sb (- 51,- 70, 0, -1, null , "Anti-Antimony" , false),
+ $Te (- 52,- 75, 0, -1, null , "Anti-Tellurium" , false),
+ $I (- 53,- 74, 0, -1, null , "Anti-Iodine" , false),
+ $Xe (- 54,- 77, 0, -1, null , "Anti-Xenon" , false),
+ $Cs (- 55,- 77, 0, -1, null , "Anti-Caesium" , false),
+ $Ba (- 56,- 81, 0, -1, null , "Anti-Barium" , false),
+ $La (- 57,- 81, 0, -1, null , "Anti-Lantanium" , false),
+ $Ce (- 58,- 82, 0, -1, null , "Anti-Cerium" , false),
+ $Pr (- 59,- 81, 0, -1, null , "Anti-Praseodymium" , false),
+ $Nd (- 60,- 84, 0, -1, null , "Anti-Neidymium" , false),
+ $Pm (- 61,- 83, 0, -1, null , "Anti-Promethium" , false),
+ $Sm (- 62,- 88, 0, -1, null , "Anti-Samarium" , false),
+ $Eu (- 63,- 88, 0, -1, null , "Anti-Europium" , false),
+ $Gd (- 64,- 93, 0, -1, null , "Anti-Gadolinium" , false),
+ $Tb (- 65,- 93, 0, -1, null , "Anti-Terbium" , false),
+ $Dy (- 66,- 96, 0, -1, null , "Anti-Dysprosium" , false),
+ $Ho (- 67,- 97, 0, -1, null , "Anti-Holmium" , false),
+ $Er (- 68,- 99, 0, -1, null , "Anti-Erbium" , false),
+ $Tm (- 69,- 99, 0, -1, null , "Anti-Thulium" , false),
+ $Yb (- 70,-103, 0, -1, null , "Anti-Ytterbium" , false),
+ $Lu (- 71,-103, 0, -1, null , "Anti-Lutetium" , false),
+ $Hf (- 72,-106, 0, -1, null , "Anti-Hafnium" , false),
+ $Ta (- 73,-107, 0, -1, null , "Anti-Tantalum" , false),
+ $W (- 74,-109, 0, -1, null , "Anti-Wolframium" , false),
+ $Re (- 75,-111, 0, -1, null , "Anti-Rhenium" , false),
+ $Os (- 76,-114, 0, -1, null , "Anti-Osmium" , false),
+ $Ir (- 77,-115, 0, -1, null , "Anti-Iridium" , false),
+ $Pt (- 78,-117, 0, -1, null , "Anti-Platinum" , false),
+ $Au (- 79,-117, 0, -1, null , "Anti-Gold" , false),
+ $Hg (- 80,-120, 0, -1, null , "Anti-Mercury" , false),
+ $Tl (- 81,-123, 0, -1, null , "Anti-Thallium" , false),
+ $Pb (- 82,-125, 0, -1, null , "Anti-Lead" , false),
+ $Bi (- 83,-125, 0, -1, null , "Anti-Bismuth" , false),
+ $Po (- 84,-124, 0, -1, null , "Anti-Polonium" , false),
+ $At (- 85,-124, 0, -1, null , "Anti-Astatine" , false),
+ $Rn (- 86,-134, 0, -1, null , "Anti-Radon" , false),
+ $Fr (- 87,-134, 0, -1, null , "Anti-Francium" , false),
+ $Ra (- 88,-136, 0, -1, null , "Anti-Radium" , false),
+ $Ac (- 89,-136, 0, -1, null , "Anti-Actinium" , false),
+ $Th (- 90,-140, 0, -1, null , "Anti-Thorium" , false),
+ $Pa (- 91,-138, 0, -1, null , "Anti-Protactinium" , false),
+ $U (- 92,-146, 0, -1, null , "Anti-Uranium" , false),
+ $U_235 (- 92,-143, 0, -1, null , "Anti-Uranium-235" , true),
+ $Np (- 93,-144, 0, -1, null , "Anti-Neptunium" , false),
+ $Pu (- 94,-152, 0, -1, null , "Anti-Plutonium" , false),
+ $Pu_241 (- 94,-149, 0, -1, null , "Anti-Plutonium-241" , true),
+ $Am (- 95,-150, 0, -1, null , "Anti-Americum" , false),
+ $Cm (- 96,-153, 0, -1, null , "Anti-Curium" , false),
+ $Bk (- 97,-152, 0, -1, null , "Anti-Berkelium" , false),
+ $Cf (- 98,-153, 0, -1, null , "Anti-Californium" , false),
+ $Es (- 99,-153, 0, -1, null , "Anti-Einsteinium" , false),
+ $Fm (-100,-157, 0, -1, null , "Anti-Fermium" , false),
+ $Md (-101,-157, 0, -1, null , "Anti-Mendelevium" , false),
+ $No (-102,-157, 0, -1, null , "Anti-Nobelium" , false),
+ $Lr (-103,-159, 0, -1, null , "Anti-Lawrencium" , false),
+ $Rf (-104,-161, 0, -1, null , "Anti-Rutherfordium" , false),
+ $Db (-105,-163, 0, -1, null , "Anti-Dubnium" , false),
+ $Sg (-106,-165, 0, -1, null , "Anti-Seaborgium" , false),
+ $Bh (-107,-163, 0, -1, null , "Anti-Bohrium" , false),
+ $Hs (-108,-169, 0, -1, null , "Anti-Hassium" , false),
+ $Mt (-109,-167, 0, -1, null , "Anti-Meitnerium" , false),
+ $Ds (-110,-171, 0, -1, null , "Anti-Darmstadtium" , false),
+ $Rg (-111,-169, 0, -1, null , "Anti-Roentgenium" , false),
+ $Cn (-112,-173, 0, -1, null , "Anti-Copernicium" , false),
+ $Uut (-113,-171, 0, -1, null , "Anti-Ununtrium" , false),
+ $Fl (-114,-175, 0, -1, null , "Anti-Flerovium" , false),
+ $Uup (-115,-173, 0, -1, null , "Anti-Ununpentium" , false),
+ $Lv (-116,-177, 0, -1, null , "Anti-Livermorium" , false),
+ $Uus (-117,-177, 0, -1, null , "Anti-Ununseptium" , false),
+ $Uuo (-118,-176, 0, -1, null , "Anti-Ununoctium" , false),
+
+ $Ma ( 0, 0,-100, -1, null , "Anti-Magic" , false),
+ $Nt (0, -10000, 0, -1, null , "Anti-Neutronium" , false);
+
+ public static Element get(String aMaterialName) {
+ Object tObject = GT_Utility.getFieldContent(Element.class, aMaterialName, false, false);
+ if (tObject != null && tObject instanceof Element) return (Element)tObject;
+ return _NULL;
+ }
+
+ public final long mProtons, mNeutrons, mAdditionalMass, mHalfLifeSeconds;
+ public final String mName, mDecayTo;
+ public final boolean mIsIsotope;
+
+ /**
+ * Links to every pure Material containing just this Element.
+ */
+ public ArrayList<Materials> mLinkedMaterials = new ArrayList<Materials>();
+
+ /**
+ * @param aProtons Amount of Protons. Antiprotons if negative.
+ * @param aNeutrons Amount of Neutrons. Antineutrons if negative. (I could have made mistakes with the Neutron amount calculation, please tell me if I did something wrong)
+ * @param aHalfLifeSeconds Amount of Half Life this Material has in Seconds. -1 for stable Materials.
+ * @param aDecayTo String representing the Elements it decays to. Separated by an '&' Character.
+ * @param aName Name of the Element
+ */
+ private Element(long aProtons, long aNeutrons, long aAdditionalMass, long aHalfLifeSeconds, String aDecayTo, String aName, boolean aIsIsotope) {
+ mProtons = aProtons;
+ mNeutrons = aNeutrons;
+ mAdditionalMass = aAdditionalMass;
+ mHalfLifeSeconds = aHalfLifeSeconds;
+ mDecayTo = aDecayTo;
+ mName = aName;
+ mIsIsotope = aIsIsotope;
+ }
+
+ public long getProtons() {
+ return mProtons;
+ }
+
+ public long getNeutrons() {
+ return mNeutrons;
+ }
+
+ public long getMass() {
+ return mProtons + mNeutrons + mAdditionalMass;
+ }
+
+ public static volatile int VERSION = 508;
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
new file mode 100644
index 0000000000..e04b2be941
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -0,0 +1,160 @@
+package gregtech.api.enums;
+
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.net.IGT_NetworkHandler;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+/**
+ * Made for static imports, this Class is just a Helper.
+ *
+ * I am doing this to have a better Table alike view on my Code, so I can change things faster using the Block Selection Mode of eclipse.
+ *
+ * Go to "Window > Preferences > Java > Editor > Content Assist > Favorites" to set static importable Constant Classes such as this one as AutoCompleteable.
+ */
+public class GT_Values {
+ // unused: A, C, D, G, H, I, J, K, N, O, Q, R, S, T
+
+ // TODO: Rename Material Units to 'U'
+ // TODO: Rename OrePrefixes Class to 'P'
+ // TODO: Rename Materials Class to 'M'
+
+ /** Because "true" and "false" are too long. Some Programmers might wanna kill me for that, but this looks much better than true and false, and also it is better to have something that is not 4 and 5 Characters long, because of symmetry */
+ public static final boolean T = true, F = false;
+
+ /** Empty String for an easier Call Hierarchy */
+ public static final String E = "";
+
+ /** Character Set with all Numbers */
+ public static final HashSet<Character> CN = new HashSet<Character>(Arrays.asList('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'));
+ /** Character Set with all lowercased Characters */
+ public static final HashSet<Character> CL = new HashSet<Character>(Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'));
+ /** Character Set with all uppercased Characters */
+ public static final HashSet<Character> CU = new HashSet<Character>(Arrays.asList('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'));
+
+ /** The first 32 Bits */
+ public static final int[] B = new int[] {1<<0,1<<1,1<<2,1<<3,1<<4,1<<5,1<<6,1<<7,1<<8,1<<9,1<<10,1<<11,1<<12,1<<13,1<<14,1<<15,1<<16,1<<17,1<<18,1<<19,1<<20,1<<21,1<<22,1<<23,1<<24,1<<25,1<<26,1<<27,1<<28,1<<29,1<<30,1<<31};
+
+ /**
+ * Renamed from "MATERIAL_UNIT" to just "M"
+ *
+ * This is worth exactly one normal Item.
+ * This Constant can be divided by many commonly used Numbers such as
+ * 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, ... 64 or 81
+ * without loosing precision and is for that reason used as Unit of Amount.
+ * But it is also small enough to be multiplied with larger Numbers.
+ *
+ * This is used to determine the amount of Material contained inside a prefixed Ore.
+ * For example Nugget = M / 9 as it contains out of 1/9 of an Ingot.
+ */
+ public static final long M = 3628800;
+
+ /**
+ * Renamed from "FLUID_MATERIAL_UNIT" to just "L"
+ *
+ * Fluid per Material Unit (Prime Factors: 3 * 3 * 2 * 2 * 2 * 2)
+ */
+ public static final long L = 144;
+
+ /** The Item WildCard Tag. Even shorter than the "-1" of the past */
+ public static final short W = OreDictionary.WILDCARD_VALUE;
+
+ /** The Voltage Tiers. Use this Array instead of the old named Voltage Variables */
+ public static final long[] V = new long[] {8, 32, 128, 512, 2048, 8192, 32768, 131072, 524288, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE};
+
+ /** The short Names for the Voltages */
+ public static final String[] VN = new String[] {"ULV", "LV", "MV", "HV", "EV", "IV", "LuV", "ZPM", "UV", "MAX", "MAX", "MAX", "MAX", "MAX", "MAX", "MAX"};
+
+ /** The long Names for the Voltages */
+ public static final String[] VOLTAGE_NAMES = new String[] {"Ultra Low Voltage", "Low Voltage", "Medium Voltage", "High Voltage", "Extreme Voltage", "Insane Voltage", "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage", "Maximum Voltage", "Maximum Voltage", "Maximum Voltage", "Maximum Voltage", "Maximum Voltage", "Maximum Voltage", "Maximum Voltage"};
+
+ /** The Mod Object itself. That is the GT_Mod-Object. It's needed to open GUI's and similar. */
+ public static IGT_Mod GT;
+
+ /** Use this Object to add Recipes. (Recipe Adder) */
+ public static IGT_RecipeAdder RA;
+
+ /** For Internal Usage (Network) */
+ public static IGT_NetworkHandler NW;
+
+ /** This way it is possible to have a Call Hierarchy of NullPointers in ItemStack based Functions, and also because most of the time I don't know what kind of Data Type the "null" stands for */
+ public static final ItemStack NI = null;
+
+ /** This way it is possible to have a Call Hierarchy of NullPointers in FluidStack based Functions, and also because most of the time I don't know what kind of Data Type the "null" stands for */
+ public static final FluidStack NF = null;
+
+ /** Not really Constants, but they set using the Config and therefore should be constant (those are for the Debug Mode) */
+ public static boolean D1 = false, D2 = false;
+
+ /** If you have to give something a World Parameter but there is no World... (Dummy World) */
+ public static World DW;
+
+ /**
+ * MOD ID Strings, since they are very common Parameters.
+ */
+ public static final String
+ MOD_ID = "gregtech"
+
+ , MOD_ID_IC2 = "IC2"
+ , MOD_ID_NC = "IC2NuclearControl"
+
+ , MOD_ID_TC = "Thaumcraft"
+
+ , MOD_ID_TF = "TwilightForest"
+
+ , MOD_ID_RC = "Railcraft"
+
+ , MOD_ID_TE = "ThermalExpansion"
+
+ , MOD_ID_AE = "appliedenergistics2"
+
+ , MOD_ID_TFC = "terrafirmacraft"
+
+ , MOD_ID_PFAA = "PFAAGeologica"
+
+ , MOD_ID_FR = "Forestry"
+ , MOD_ID_HaC = "harvestcraft"
+ , MOD_ID_APC = "AppleCore"
+ , MOD_ID_MaCr = "magicalcrops"
+ , MOD_ID_GaEn = "ganysend"
+ , MOD_ID_GaSu = "ganyssurface"
+ , MOD_ID_GaNe = "ganysnether"
+
+ , MOD_ID_BC_SILICON = "BuildCraft|Silicon"
+ , MOD_ID_BC_TRANSPORT = "BuildCraft|Transport"
+ , MOD_ID_BC_FACTORY = "BuildCraft|Factory"
+ , MOD_ID_BC_ENERGY = "BuildCraft|Energy"
+ , MOD_ID_BC_BUILDERS = "BuildCraft|Builders"
+ , MOD_ID_BC_CORE = "BuildCraft|Core"
+
+ , MOD_ID_GC_CORE = "GalacticraftCore"
+ , MOD_ID_GC_MARS = "GalacticraftMars"
+ , MOD_ID_GC_PLANETS = "GalacticraftPlanets"
+ ;
+
+ /** File Paths and Resource Paths */
+ public static final String
+ TEX_DIR = "textures/"
+ , TEX_DIR_GUI = TEX_DIR + "gui/"
+ , TEX_DIR_ITEM = TEX_DIR + "items/"
+ , TEX_DIR_BLOCK = TEX_DIR + "blocks/"
+ , TEX_DIR_ENTITY = TEX_DIR + "entity/"
+ , TEX_DIR_ASPECTS = TEX_DIR + "aspects/"
+
+ , RES_PATH = MOD_ID + ":" + TEX_DIR
+ , RES_PATH_GUI = MOD_ID + ":" + TEX_DIR_GUI
+ , RES_PATH_ITEM = MOD_ID + ":"
+ , RES_PATH_BLOCK = MOD_ID + ":"
+ , RES_PATH_ENTITY = MOD_ID + ":" + TEX_DIR_ENTITY
+ , RES_PATH_ASPECTS = MOD_ID + ":" + TEX_DIR_ASPECTS
+
+ , RES_PATH_IC2 = MOD_ID_IC2.toLowerCase() + ":"
+ ;
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
new file mode 100644
index 0000000000..2085071249
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -0,0 +1,785 @@
+package gregtech.api.enums;
+
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.interfaces.IItemContainer;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+/**
+ * Class containing all non-OreDict Items of GregTech.
+ */
+public enum ItemList implements IItemContainer {
+ Display_ITS_FREE,
+ Display_Fluid,
+ TE_Slag,
+ TE_Slag_Rich,
+ TE_Rockwool,
+ TE_Hardened_Glass,
+ FR_Lemon,
+ FR_Mulch,
+ FR_Fertilizer,
+ FR_Compost,
+ FR_Silk,
+ FR_Wax,
+ FR_RefractoryWax,
+ FR_WaxCapsule,
+ FR_RefractoryCapsule,
+ FR_Stick,
+ FR_Casing_Impregnated,
+ FR_Casing_Sturdy,
+ FR_Casing_Hardened,
+ FR_Bee_Drone,
+ FR_Bee_Princess,
+ FR_Bee_Queen,
+ FR_Tree_Sapling,
+ FR_Butterfly,
+ FR_Larvae,
+ FR_Serum,
+ FR_Caterpillar,
+ FR_PollenFertile,
+ TF_LiveRoot,
+ TF_Vial_FieryBlood,
+ TF_Vial_FieryTears,
+ RC_ShuntingWire,
+ RC_ShuntingWireFrame,
+ RC_Rail_Reinforced,
+ RC_Rail_Electric,
+ RC_Rail_Standard,
+ RC_Rail_Wooden,
+ RC_Rail_Adv,
+ RC_Rail_HS,
+ RC_Tie_Wood,
+ RC_Tie_Stone,
+ RC_Bed_Wood,
+ RC_Bed_Stone,
+ RC_Rebar,
+ IC2_Item_Casing_Tin,
+ IC2_Item_Casing_Copper,
+ IC2_Item_Casing_Iron,
+ IC2_Item_Casing_Steel,
+ IC2_Item_Casing_Lead,
+ IC2_Item_Casing_Bronze,
+ IC2_Item_Casing_Gold,
+ IC2_Spray_WeedEx,
+ IC2_Scrap,
+ IC2_Scrapbox,
+ IC2_Fertilizer,
+ IC2_Mixed_Metal_Ingot,
+ IC2_Hops,
+ IC2_Resin,
+ IC2_Plantball,
+ IC2_PlantballCompressed,
+ IC2_CoffeeBeans,
+ IC2_CoffeePowder,
+ IC2_Crop_Seeds,
+ IC2_Grin_Powder,
+ IC2_Energium_Dust,
+ IC2_Compressed_Coal_Ball,
+ IC2_Compressed_Coal_Chunk,
+ IC2_Fuel_Rod_Empty,
+ IC2_Fuel_Can_Empty,
+ IC2_Fuel_Can_Filled,
+ IC2_Food_Can_Empty,
+ IC2_Food_Can_Filled,
+ IC2_Food_Can_Spoiled,
+ IC2_ShaftIron,
+ IC2_ShaftSteel,
+ IC2_Industrial_Diamond,
+ IC2_ForgeHammer,
+ IC2_WireCutter,
+ IC2_SuBattery,
+ IC2_ReBattery,
+ IC2_AdvBattery,
+ IC2_EnergyCrystal,
+ IC2_LapotronCrystal,
+ Arrow_Head_Glass_Emtpy,
+ Arrow_Head_Glass_Poison,
+ Arrow_Head_Glass_Poison_Long,
+ Arrow_Head_Glass_Poison_Strong,
+ Arrow_Head_Glass_Slowness,
+ Arrow_Head_Glass_Slowness_Long,
+ Arrow_Head_Glass_Weakness,
+ Arrow_Head_Glass_Weakness_Long,
+ Arrow_Head_Glass_Holy_Water,
+ Arrow_Wooden_Glass_Emtpy,
+ Arrow_Wooden_Glass_Poison,
+ Arrow_Wooden_Glass_Poison_Long,
+ Arrow_Wooden_Glass_Poison_Strong,
+ Arrow_Wooden_Glass_Slowness,
+ Arrow_Wooden_Glass_Slowness_Long,
+ Arrow_Wooden_Glass_Weakness,
+ Arrow_Wooden_Glass_Weakness_Long,
+ Arrow_Wooden_Glass_Holy_Water,
+ Arrow_Plastic_Glass_Emtpy,
+ Arrow_Plastic_Glass_Poison,
+ Arrow_Plastic_Glass_Poison_Long,
+ Arrow_Plastic_Glass_Poison_Strong,
+ Arrow_Plastic_Glass_Slowness,
+ Arrow_Plastic_Glass_Slowness_Long,
+ Arrow_Plastic_Glass_Weakness,
+ Arrow_Plastic_Glass_Weakness_Long,
+ Arrow_Plastic_Glass_Holy_Water,
+ Shape_Empty,
+ Shape_Mold_Bottle,
+ Shape_Mold_Plate,
+ Shape_Mold_Ingot,
+ Shape_Mold_Casing,
+ Shape_Mold_Gear,
+ Shape_Mold_Gear_Small,
+ Shape_Mold_Credit,
+ Shape_Mold_Nugget,
+ Shape_Mold_Block,
+ Shape_Mold_Ball,
+ Shape_Mold_Bun,
+ Shape_Mold_Bread,
+ Shape_Mold_Baguette,
+ Shape_Mold_Cylinder,
+ Shape_Mold_Anvil,
+ Shape_Mold_Arrow,
+ Shape_Mold_Name,
+ Shape_Slicer_Flat,
+ Shape_Slicer_Stripes,
+ Shape_Extruder_Bottle,
+ Shape_Extruder_Plate,
+ Shape_Extruder_Cell,
+ Shape_Extruder_Ring,
+ Shape_Extruder_Rod,
+ Shape_Extruder_Bolt,
+ Shape_Extruder_Ingot,
+ Shape_Extruder_Wire,
+ Shape_Extruder_Casing,
+ Shape_Extruder_Pipe_Tiny,
+ Shape_Extruder_Pipe_Small,
+ Shape_Extruder_Pipe_Medium,
+ Shape_Extruder_Pipe_Large,
+ Shape_Extruder_Pipe_Huge,
+ Shape_Extruder_Block,
+ Shape_Extruder_Sword,
+ Shape_Extruder_Pickaxe,
+ Shape_Extruder_Shovel,
+ Shape_Extruder_Axe,
+ Shape_Extruder_Hoe,
+ Shape_Extruder_Hammer,
+ Shape_Extruder_File,
+ Shape_Extruder_Saw,
+ Shape_Extruder_Gear,
+ Crate_Empty,
+ Credit_Copper,
+ Credit_Iron,
+ Credit_Silver,
+ Credit_Gold,
+ Credit_Platinum,
+ Credit_Osmium,
+ Credit_Greg_Copper,
+ Credit_Greg_Cupronickel,
+ Credit_Greg_Silver,
+ Credit_Greg_Gold,
+ Credit_Greg_Platinum,
+ Credit_Greg_Osmium,
+ Credit_Greg_Naquadah,
+ Credit_Greg_Neutronium,
+ Coin_Gold_Ancient,
+ Coin_Doge,
+ Coin_Chocolate,
+ Cell_Universal_Fluid,
+ Cell_Empty,
+ Cell_Water,
+ Cell_Lava,
+ Cell_Air,
+ Large_Fluid_Cell_Steel,
+ Large_Fluid_Cell_TungstenSteel,
+ ThermosCan_Empty,
+ ThermosCan_Dark_Coffee,
+ ThermosCan_Dark_Cafe_au_lait,
+ ThermosCan_Coffee,
+ ThermosCan_Cafe_au_lait,
+ ThermosCan_Lait_au_cafe,
+ ThermosCan_Dark_Chocolate_Milk,
+ ThermosCan_Chocolate_Milk,
+ ThermosCan_Tea,
+ ThermosCan_Sweet_Tea,
+ ThermosCan_Ice_Tea,
+ Bottle_Empty,
+ Bottle_Milk,
+ Bottle_Holy_Water,
+ Bottle_Purple_Drink,
+ Bottle_Grape_Juice,
+ Bottle_Wine,
+ Bottle_Vinegar,
+ Bottle_Potato_Juice,
+ Bottle_Vodka,
+ Bottle_Leninade,
+ Bottle_Mineral_Water,
+ Bottle_Salty_Water,
+ Bottle_Reed_Water,
+ Bottle_Rum,
+ Bottle_Pirate_Brew,
+ Bottle_Hops_Juice,
+ Bottle_Dark_Beer,
+ Bottle_Dragon_Blood,
+ Bottle_Wheaty_Juice,
+ Bottle_Scotch,
+ Bottle_Glen_McKenner,
+ Bottle_Wheaty_Hops_Juice,
+ Bottle_Beer,
+ Bottle_Chilly_Sauce,
+ Bottle_Hot_Sauce,
+ Bottle_Diabolo_Sauce,
+ Bottle_Diablo_Sauce,
+ Bottle_Snitches_Glitch_Sauce,
+ Bottle_Apple_Juice,
+ Bottle_Cider,
+ Bottle_Golden_Apple_Juice,
+ Bottle_Golden_Cider,
+ Bottle_Iduns_Apple_Juice,
+ Bottle_Notches_Brew,
+ Bottle_Lemon_Juice,
+ Bottle_Limoncello,
+ Bottle_Lemonade,
+ Bottle_Alcopops,
+ Bottle_Cave_Johnsons_Grenade_Juice,
+ Food_Potato_On_Stick,
+ Food_Potato_On_Stick_Roasted,
+ Food_Fries,
+ Food_ChiliChips,
+ Food_PotatoChips,
+ Food_Baked_Potato,
+ Food_Poisonous_Potato,
+ Food_Cheese,
+ Food_Chum,
+ Food_Chum_On_Stick,
+ Food_Dough,
+ Food_Dough_Sugar,
+ Food_Dough_Chocolate,
+ Food_Raw_Cookie,
+ Food_Flat_Dough,
+ Food_Burger_Veggie,
+ Food_Burger_Cheese,
+ Food_Burger_Meat,
+ Food_Burger_Chum,
+ Food_Sandwich_Veggie,
+ Food_Sandwich_Cheese,
+ Food_Sandwich_Bacon,
+ Food_Sandwich_Steak,
+ Food_Large_Sandwich_Veggie,
+ Food_Large_Sandwich_Cheese,
+ Food_Large_Sandwich_Bacon,
+ Food_Large_Sandwich_Steak,
+ Food_Sliced_Lemon,
+ Food_Sliced_Tomato,
+ Food_Sliced_Onion,
+ Food_Sliced_Cucumber,
+ Food_Sliced_Cheese,
+ Food_Sliced_Bread,
+ Food_Sliced_Bun,
+ Food_Sliced_Baguette,
+ Food_Sliced_Breads,
+ Food_Sliced_Buns,
+ Food_Sliced_Baguettes,
+ Food_Packaged_Fries,
+ Food_Packaged_PotatoChips,
+ Food_Packaged_ChiliChips,
+ Food_Raw_Potato,
+ Food_Raw_Fries,
+ Food_Raw_PotatoChips,
+ Food_Raw_Bread,
+ Food_Raw_Bun,
+ Food_Raw_Baguette,
+ Food_Raw_Cake,
+ Food_Raw_Pizza_Veggie,
+ Food_Raw_Pizza_Cheese,
+ Food_Raw_Pizza_Meat,
+ Food_Baked_Bread,
+ Food_Baked_Bun,
+ Food_Baked_Baguette,
+ Food_Baked_Cake,
+ Food_Baked_Pizza_Veggie,
+ Food_Baked_Pizza_Cheese,
+ Food_Baked_Pizza_Meat,
+ Crop_Drop_Argentia,
+ Crop_Drop_Plumbilia,
+ Crop_Drop_Indigo,
+ Crop_Drop_Ferru,
+ Crop_Drop_Aurelia,
+ Crop_Drop_OilBerry,
+ Crop_Drop_MilkWart,
+ Crop_Drop_BobsYerUncleRanks,
+ Crop_Drop_Coppon,
+ Crop_Drop_Tine,
+ Crop_Drop_Chilly,
+ Crop_Drop_Lemon,
+ Crop_Drop_Onion,
+ Crop_Drop_Tomato,
+ Crop_Drop_MTomato,
+ Crop_Drop_Grapes,
+ Crop_Drop_TeaLeaf,
+ Crop_Drop_Cucumber,
+ Schematic,
+ Schematic_Crafting,
+ Schematic_1by1,
+ Schematic_2by2,
+ Schematic_3by3,
+ Schematic_Dust,
+ Circuit_Integrated,
+ Circuit_Board_Basic,
+ Circuit_Board_Advanced,
+ Circuit_Board_Elite,
+ Circuit_Parts_Advanced,
+ Circuit_Parts_Wiring_Basic,
+ Circuit_Parts_Wiring_Advanced,
+ Circuit_Parts_Wiring_Elite,
+ Circuit_Parts_Crystal_Chip_Elite,
+ Circuit_Parts_Crystal_Chip_Master,
+ Circuit_Primitive,
+ Circuit_Basic,
+ Circuit_Good,
+ Circuit_Advanced,
+ Circuit_Data,
+ Circuit_Elite,
+ Circuit_Master,
+ Circuit_Ultimate,
+ Rotor_LV, Rotor_MV, Rotor_HV, Rotor_EV, Rotor_IV, Rotor_LuV, Rotor_ZPM, Rotor_UV,
+ Electric_Motor_LV, Electric_Motor_MV, Electric_Motor_HV, Electric_Motor_EV, Electric_Motor_IV, Electric_Motor_LuV, Electric_Motor_ZPM, Electric_Motor_UV,
+ Electric_Pump_LV, Electric_Pump_MV, Electric_Pump_HV, Electric_Pump_EV, Electric_Pump_IV, Electric_Pump_LuV, Electric_Pump_ZPM, Electric_Pump_UV,
+ Conveyor_Module_LV, Conveyor_Module_MV, Conveyor_Module_HV, Conveyor_Module_EV, Conveyor_Module_IV, Conveyor_Module_LuV, Conveyor_Module_ZPM, Conveyor_Module_UV,
+ Electric_Piston_LV, Electric_Piston_MV, Electric_Piston_HV, Electric_Piston_EV, Electric_Piston_IV, Electric_Piston_LuV, Electric_Piston_ZPM, Electric_Piston_UV,
+ Field_Generator_LV, Field_Generator_MV, Field_Generator_HV, Field_Generator_EV, Field_Generator_IV, Field_Generator_LuV, Field_Generator_ZPM, Field_Generator_UV,
+ Robot_Arm_LV, Robot_Arm_MV, Robot_Arm_HV, Robot_Arm_EV, Robot_Arm_IV, Robot_Arm_LuV, Robot_Arm_ZPM, Robot_Arm_UV,
+ Emitter_LV, Emitter_MV, Emitter_HV, Emitter_EV, Emitter_IV, Emitter_LuV, Emitter_ZPM, Emitter_UV,
+ Sensor_LV, Sensor_MV, Sensor_HV, Sensor_EV, Sensor_IV, Sensor_LuV, Sensor_ZPM, Sensor_UV,
+ Battery_Hull_LV, Battery_Hull_MV, Battery_Hull_HV,
+ Battery_SU_LV_SulfuricAcid,
+ Battery_SU_LV_Mercury,
+ Battery_SU_MV_SulfuricAcid,
+ Battery_SU_MV_Mercury,
+ Battery_SU_HV_SulfuricAcid,
+ Battery_SU_HV_Mercury,
+ Battery_RE_ULV_Tantalum,
+ Battery_RE_LV_Cadmium,
+ Battery_RE_LV_Lithium,
+ Battery_RE_LV_Sodium,
+ Battery_RE_MV_Cadmium,
+ Battery_RE_MV_Lithium,
+ Battery_RE_MV_Sodium,
+ Battery_RE_HV_Cadmium,
+ Battery_RE_HV_Lithium,
+ Battery_RE_HV_Sodium,
+ ZPM,
+ Fuel_Can_Plastic_Empty,
+ Fuel_Can_Plastic_Filled,
+ Upgrade_Battery,
+ Upgrade_Overclocker,
+ Upgrade_Muffler,
+ Upgrade_SteamEngine,
+ Upgrade_Lock,
+ Cover_Controller,
+ Cover_ActivityDetector,
+ Cover_FluidDetector,
+ Cover_ItemDetector,
+ Cover_EnergyDetector,
+ Cover_Drain,
+ Cover_Shutter,
+ Cover_Crafting,
+ Cover_Screen,
+ Cover_SolarPanel,
+ Cover_SolarPanel_8V,
+ Cover_SolarPanel_LV,
+ Cover_SolarPanel_MV,
+ Cover_SolarPanel_HV,
+ Cover_SolarPanel_EV,
+ Cover_SolarPanel_IV,
+ Cover_SolarPanel_LuV,
+ Cover_SolarPanel_ZPM,
+ Cover_SolarPanel_UV,
+ Ingot_IridiumAlloy,
+ Plank_Oak,
+ Plank_Spruce,
+ Plank_Birch,
+ Plank_Jungle,
+ Plank_Acacia,
+ Plank_DarkOak,
+ Plank_Larch,
+ Plank_Teak,
+ Plank_Acacia_Green,
+ Plank_Lime,
+ Plank_Chestnut,
+ Plank_Wenge,
+ Plank_Baobab,
+ Plank_Sequoia,
+ Plank_Kapok,
+ Plank_Ebony,
+ Plank_Mahagony,
+ Plank_Balsa,
+ Plank_Willow,
+ Plank_Walnut,
+ Plank_Greenheart,
+ Plank_Cherry,
+ Plank_Mahoe,
+ Plank_Poplar,
+ Plank_Palm,
+ Plank_Papaya,
+ Plank_Pine,
+ Plank_Plum,
+ Plank_Maple,
+ Plank_Citrus,
+ Dye_Indigo,
+ Dye_SquidInk,
+ Dye_Bonemeal,
+ Dye_Cocoa,
+ Duct_Tape,
+ Book_Written_00,
+ Book_Written_01,
+ Book_Written_02,
+ Book_Written_03,
+ Paper_Printed_Pages,
+ Paper_Magic_Empty,
+ Paper_Magic_Page,
+ Paper_Magic_Pages,
+ Paper_Punch_Card_Empty,
+ Paper_Punch_Card_Encoded,
+ McGuffium_239,
+ NC_SensorCard,
+ NC_SensorKit,
+ Tool_Matches,
+ Tool_MatchBox_Used,
+ Tool_MatchBox_Full,
+ Tool_Lighter_Invar_Empty,
+ Tool_Lighter_Invar_Used,
+ Tool_Lighter_Invar_Full,
+ Tool_Lighter_Platinum_Empty,
+ Tool_Lighter_Platinum_Used,
+ Tool_Lighter_Platinum_Full,
+ Tool_Cheat,
+ Tool_Scanner,
+ Tool_DataOrb,
+ Tool_DataStick,
+ Tool_Sonictron,
+ Tool_Sword_Bronze,
+ Tool_Pickaxe_Bronze,
+ Tool_Shovel_Bronze,
+ Tool_Axe_Bronze,
+ Tool_Hoe_Bronze,
+ Tool_Sword_Steel,
+ Tool_Pickaxe_Steel,
+ Tool_Shovel_Steel,
+ Tool_Axe_Steel,
+ Tool_Hoe_Steel,
+
+ Spray_Empty, Spray_Bug, Spray_Ice, Spray_Hardener, Spray_CFoam, Spray_Pepper, Spray_Hydration,
+ Color_00, Color_01, Color_02, Color_03, Color_04, Color_05, Color_06, Color_07, Color_08, Color_09, Color_10, Color_11, Color_12, Color_13, Color_14, Color_15,
+ Spray_Color_00, Spray_Color_01, Spray_Color_02, Spray_Color_03, Spray_Color_04, Spray_Color_05, Spray_Color_06, Spray_Color_07, Spray_Color_08, Spray_Color_09, Spray_Color_10, Spray_Color_11, Spray_Color_12, Spray_Color_13, Spray_Color_14, Spray_Color_15,
+ Spray_Color_Used_00, Spray_Color_Used_01, Spray_Color_Used_02, Spray_Color_Used_03, Spray_Color_Used_04, Spray_Color_Used_05, Spray_Color_Used_06, Spray_Color_Used_07, Spray_Color_Used_08, Spray_Color_Used_09, Spray_Color_Used_10, Spray_Color_Used_11, Spray_Color_Used_12, Spray_Color_Used_13, Spray_Color_Used_14, Spray_Color_Used_15,
+
+ Armor_Cheat,
+ Armor_Cloaking,
+ Armor_Lamp,
+ Armor_LithiumPack,
+ Armor_LapotronicPack,
+ Armor_ForceField,
+ Energy_LapotronicOrb,
+ Reactor_NeutronReflector,
+ Component_Turbine_Bronze,
+ Component_Turbine_Steel,
+ Component_Turbine_Magnalium,
+ Component_Turbine_TungstenSteel,
+ Component_Turbine_Carbon,
+ Component_LavaFilter,
+ Component_Sawblade_Diamond,
+ Component_Grinder_Diamond,
+ Component_Grinder_Tungsten,
+ Component_Filter,
+ Component_Minecart_Wheels_Iron,
+ Component_Minecart_Wheels_Steel,
+
+ Generator_Diesel_LV,
+ Generator_Diesel_MV,
+ Generator_Diesel_HV,
+ Generator_Gas_Turbine_LV,
+ Generator_Gas_Turbine_MV,
+ Generator_Gas_Turbine_HV,
+ Generator_Steam_Turbine_LV,
+ Generator_Steam_Turbine_MV,
+ Generator_Steam_Turbine_HV,
+ Generator_Naquadah_Mark_I,
+ Generator_Naquadah_Mark_II,
+ Generator_Naquadah_Fluid,
+
+ Machine_Bronze_Boiler,
+ Machine_Bronze_Boiler_Solar,
+ Machine_Bronze_CraftingTable,
+ Machine_Bronze_Furnace,
+ Machine_Bronze_Macerator,
+ Machine_Bronze_Extractor,
+ Machine_Bronze_Hammer,
+ Machine_Bronze_Compressor,
+ Machine_Bronze_AlloySmelter,
+ Machine_Bronze_BlastFurnace,
+ Machine_Steel_Boiler_Lava,
+ Machine_Steel_Boiler,
+ Machine_Steel_Furnace,
+ Machine_Steel_Macerator,
+ Machine_Steel_Extractor,
+ Machine_Steel_Hammer,
+ Machine_Steel_Compressor,
+ Machine_Steel_AlloySmelter,
+
+ Hull_Bronze, Hull_Steel, Hull_Bronze_Bricks, Hull_Steel_Bricks,
+
+ Transformer_LV_ULV, Transformer_MV_LV, Transformer_HV_MV, Transformer_EV_HV, Transformer_IV_EV, Transformer_LuV_IV, Transformer_ZPM_LuV, Transformer_UV_ZPM, Transformer_MAX_UV,
+
+ Casing_ULV, Casing_LV, Casing_MV, Casing_HV, Casing_EV, Casing_IV, Casing_LuV, Casing_ZPM, Casing_UV, Casing_MAX, Casing_BronzePlatedBricks, Casing_HeatProof, Casing_Coil_Cupronickel, Casing_Coil_Kanthal, Casing_Coil_Nichrome, Casing_Coil_Superconductor,
+ Casing_SolidSteel, Casing_FrostProof, Casing_Gearbox_Bronze, Casing_Gearbox_Steel, Casing_Gearbox_Titanium, Casing_Gearbox_TungstenSteel, Casing_Processor, Casing_DataDrive, Casing_ContainmentField, Casing_Assembler, Casing_Pump, Casing_Motor, Casing_Pipe_Bronze, Casing_Pipe_Steel, Casing_Pipe_Titanium, Casing_Pipe_TungstenSteel,
+ Casing_Stripes_A, Casing_Stripes_B, Casing_RadioactiveHazard, Casing_BioHazard, Casing_ExplosionHazard, Casing_FireHazard, Casing_AcidHazard, Casing_MagicHazard, Casing_FrostHazard, Casing_NoiseHazard, Casing_Grate, Casing_Vent, Casing_RadiationProof, Casing_Firebox_Bronze, Casing_Firebox_Steel, Casing_Firebox_TungstenSteel,
+ Casing_RobustTungstenSteel, Casing_CleanStainlessSteel, Casing_StableTitanium, Casing_Firebox_Titanium,
+ Hull_ULV, Hull_LV, Hull_MV, Hull_HV, Hull_EV, Hull_IV, Hull_LuV, Hull_ZPM, Hull_UV, Hull_MAX,
+
+ Automation_Filter_ULV, Automation_Filter_LV, Automation_Filter_MV, Automation_Filter_HV, Automation_Filter_EV, Automation_Filter_IV, Automation_Filter_LuV, Automation_Filter_ZPM, Automation_Filter_UV, Automation_Filter_MAX,
+ Automation_TypeFilter_ULV, Automation_TypeFilter_LV, Automation_TypeFilter_MV, Automation_TypeFilter_HV, Automation_TypeFilter_EV, Automation_TypeFilter_IV, Automation_TypeFilter_LuV, Automation_TypeFilter_ZPM, Automation_TypeFilter_UV, Automation_TypeFilter_MAX,
+ Automation_ChestBuffer_ULV, Automation_ChestBuffer_LV, Automation_ChestBuffer_MV, Automation_ChestBuffer_HV, Automation_ChestBuffer_EV, Automation_ChestBuffer_IV, Automation_ChestBuffer_LuV, Automation_ChestBuffer_ZPM, Automation_ChestBuffer_UV, Automation_ChestBuffer_MAX,
+ Automation_SuperBuffer_ULV, Automation_SuperBuffer_LV, Automation_SuperBuffer_MV, Automation_SuperBuffer_HV, Automation_SuperBuffer_EV, Automation_SuperBuffer_IV, Automation_SuperBuffer_LuV, Automation_SuperBuffer_ZPM, Automation_SuperBuffer_UV, Automation_SuperBuffer_MAX,
+ Automation_Regulator_ULV, Automation_Regulator_LV, Automation_Regulator_MV, Automation_Regulator_HV, Automation_Regulator_EV, Automation_Regulator_IV, Automation_Regulator_LuV, Automation_Regulator_ZPM, Automation_Regulator_UV, Automation_Regulator_MAX,
+
+ Hatch_Dynamo_ULV, Hatch_Dynamo_LV, Hatch_Dynamo_MV, Hatch_Dynamo_HV, Hatch_Dynamo_EV, Hatch_Dynamo_IV, Hatch_Dynamo_LuV, Hatch_Dynamo_ZPM, Hatch_Dynamo_UV, Hatch_Dynamo_MAX,
+ Hatch_Energy_ULV, Hatch_Energy_LV, Hatch_Energy_MV, Hatch_Energy_HV, Hatch_Energy_EV, Hatch_Energy_IV, Hatch_Energy_LuV, Hatch_Energy_ZPM, Hatch_Energy_UV, Hatch_Energy_MAX,
+ Hatch_Input_ULV, Hatch_Input_LV, Hatch_Input_MV, Hatch_Input_HV, Hatch_Input_EV, Hatch_Input_IV, Hatch_Input_LuV, Hatch_Input_ZPM, Hatch_Input_UV, Hatch_Input_MAX,
+ Hatch_Input_Bus_ULV, Hatch_Input_Bus_LV, Hatch_Input_Bus_MV, Hatch_Input_Bus_HV, Hatch_Input_Bus_EV, Hatch_Input_Bus_IV, Hatch_Input_Bus_LuV, Hatch_Input_Bus_ZPM, Hatch_Input_Bus_UV, Hatch_Input_Bus_MAX,
+ Hatch_Output_ULV, Hatch_Output_LV, Hatch_Output_MV, Hatch_Output_HV, Hatch_Output_EV, Hatch_Output_IV, Hatch_Output_LuV, Hatch_Output_ZPM, Hatch_Output_UV, Hatch_Output_MAX,
+ Hatch_Output_Bus_ULV, Hatch_Output_Bus_LV, Hatch_Output_Bus_MV, Hatch_Output_Bus_HV, Hatch_Output_Bus_EV, Hatch_Output_Bus_IV, Hatch_Output_Bus_LuV, Hatch_Output_Bus_ZPM, Hatch_Output_Bus_UV, Hatch_Output_Bus_MAX,
+ Hatch_Muffler_LV, Hatch_Muffler_MV, Hatch_Muffler_HV, Hatch_Muffler_EV, Hatch_Muffler_IV, Hatch_Muffler_LuV, Hatch_Muffler_ZPM, Hatch_Muffler_UV, Hatch_Muffler_MAX,
+ Hatch_Maintenance,
+
+ Battery_Buffer_1by1_ULV, Battery_Buffer_1by1_LV, Battery_Buffer_1by1_MV, Battery_Buffer_1by1_HV, Battery_Buffer_1by1_EV, Battery_Buffer_1by1_IV, Battery_Buffer_1by1_LuV, Battery_Buffer_1by1_ZPM, Battery_Buffer_1by1_UV, Battery_Buffer_1by1_MAX,
+ Battery_Buffer_2by2_ULV, Battery_Buffer_2by2_LV, Battery_Buffer_2by2_MV, Battery_Buffer_2by2_HV, Battery_Buffer_2by2_EV, Battery_Buffer_2by2_IV, Battery_Buffer_2by2_LuV, Battery_Buffer_2by2_ZPM, Battery_Buffer_2by2_UV, Battery_Buffer_2by2_MAX,
+ Battery_Buffer_3by3_ULV, Battery_Buffer_3by3_LV, Battery_Buffer_3by3_MV, Battery_Buffer_3by3_HV, Battery_Buffer_3by3_EV, Battery_Buffer_3by3_IV, Battery_Buffer_3by3_LuV, Battery_Buffer_3by3_ZPM, Battery_Buffer_3by3_UV, Battery_Buffer_3by3_MAX,
+ Battery_Buffer_4by4_ULV, Battery_Buffer_4by4_LV, Battery_Buffer_4by4_MV, Battery_Buffer_4by4_HV, Battery_Buffer_4by4_EV, Battery_Buffer_4by4_IV, Battery_Buffer_4by4_LuV, Battery_Buffer_4by4_ZPM, Battery_Buffer_4by4_UV, Battery_Buffer_4by4_MAX,
+
+ Locker_ULV, Locker_LV, Locker_MV, Locker_HV, Locker_EV, Locker_IV, Locker_LuV, Locker_ZPM, Locker_UV, Locker_MAX,
+
+ Machine_Multi_LargeBoiler_Bronze, Machine_Multi_LargeBoiler_Steel, Machine_Multi_LargeBoiler_Titanium, Machine_Multi_LargeBoiler_TungstenSteel, Machine_Multi_BlastFurnace, Machine_Multi_ImplosionCompressor, Machine_Multi_VacuumFreezer, Machine_Multi_Furnace,
+ Machine_LV_AlloySmelter, Machine_MV_AlloySmelter, Machine_HV_AlloySmelter, Machine_EV_AlloySmelter, Machine_IV_AlloySmelter,
+ Machine_LV_Assembler, Machine_MV_Assembler, Machine_HV_Assembler, Machine_EV_Assembler, Machine_IV_Assembler,
+ Machine_LV_Bender, Machine_MV_Bender, Machine_HV_Bender, Machine_EV_Bender, Machine_IV_Bender,
+ Machine_LV_Canner, Machine_MV_Canner, Machine_HV_Canner, Machine_EV_Canner, Machine_IV_Canner,
+ Machine_LV_Compressor, Machine_MV_Compressor, Machine_HV_Compressor, Machine_EV_Compressor, Machine_IV_Compressor,
+ Machine_LV_Cutter, Machine_MV_Cutter, Machine_HV_Cutter, Machine_EV_Cutter, Machine_IV_Cutter,
+ Machine_LV_Slicer, Machine_MV_Slicer, Machine_HV_Slicer, Machine_EV_Slicer, Machine_IV_Slicer,
+ Machine_LV_Sifter, Machine_MV_Sifter, Machine_HV_Sifter, Machine_EV_Sifter, Machine_IV_Sifter,
+ Machine_LV_ArcFurnace, Machine_MV_ArcFurnace, Machine_HV_ArcFurnace, Machine_EV_ArcFurnace, Machine_IV_ArcFurnace,
+ Machine_LV_PlasmaArcFurnace, Machine_MV_PlasmaArcFurnace, Machine_HV_PlasmaArcFurnace, Machine_EV_PlasmaArcFurnace, Machine_IV_PlasmaArcFurnace,
+ Machine_LV_Oven, Machine_MV_Oven, Machine_HV_Oven, Machine_EV_Oven, Machine_IV_Oven,
+ Machine_LV_E_Furnace, Machine_MV_E_Furnace, Machine_HV_E_Furnace, Machine_EV_E_Furnace, Machine_IV_E_Furnace,
+ Machine_LV_Extractor, Machine_MV_Extractor, Machine_HV_Extractor, Machine_EV_Extractor, Machine_IV_Extractor,
+ Machine_LV_Extruder, Machine_MV_Extruder, Machine_HV_Extruder, Machine_EV_Extruder, Machine_IV_Extruder,
+ Machine_LV_Lathe, Machine_MV_Lathe, Machine_HV_Lathe, Machine_EV_Lathe, Machine_IV_Lathe,
+ Machine_LV_Macerator, Machine_MV_Macerator, Machine_HV_Macerator, Machine_EV_Macerator, Machine_IV_Macerator,
+ Machine_LV_Microwave, Machine_MV_Microwave, Machine_HV_Microwave, Machine_EV_Microwave, Machine_IV_Microwave,
+ Machine_LV_Printer, Machine_MV_Printer, Machine_HV_Printer, Machine_EV_Printer, Machine_IV_Printer,
+ Machine_LV_Recycler, Machine_MV_Recycler, Machine_HV_Recycler, Machine_EV_Recycler, Machine_IV_Recycler,
+ Machine_LV_Scanner, Machine_MV_Scanner, Machine_HV_Scanner, Machine_EV_Scanner, Machine_IV_Scanner,
+ Machine_LV_Wiremill, Machine_MV_Wiremill, Machine_HV_Wiremill, Machine_EV_Wiremill, Machine_IV_Wiremill,
+ Machine_LV_Electrolyzer, Machine_MV_Electrolyzer, Machine_HV_Electrolyzer, Machine_EV_Electrolyzer, Machine_IV_Electrolyzer,
+ Machine_LV_Centrifuge, Machine_MV_Centrifuge, Machine_HV_Centrifuge, Machine_EV_Centrifuge, Machine_IV_Centrifuge,
+ Machine_LV_ThermalCentrifuge, Machine_MV_ThermalCentrifuge, Machine_HV_ThermalCentrifuge, Machine_EV_ThermalCentrifuge, Machine_IV_ThermalCentrifuge,
+ Machine_LV_OreWasher, Machine_MV_OreWasher, Machine_HV_OreWasher, Machine_EV_OreWasher, Machine_IV_OreWasher,
+ Machine_LV_RockBreaker, Machine_MV_RockBreaker, Machine_HV_RockBreaker, Machine_EV_RockBreaker, Machine_IV_RockBreaker,
+ Machine_LV_Boxinator, Machine_MV_Boxinator, Machine_HV_Boxinator, Machine_EV_Boxinator, Machine_IV_Boxinator,
+ Machine_LV_Unboxinator, Machine_MV_Unboxinator, Machine_HV_Unboxinator, Machine_EV_Unboxinator, Machine_IV_Unboxinator,
+ Machine_LV_ChemicalReactor, Machine_MV_ChemicalReactor, Machine_HV_ChemicalReactor, Machine_EV_ChemicalReactor, Machine_IV_ChemicalReactor,
+ Machine_LV_FluidCanner, Machine_MV_FluidCanner, Machine_HV_FluidCanner, Machine_EV_FluidCanner, Machine_IV_FluidCanner,
+ Machine_LV_Disassembler, Machine_MV_Disassembler, Machine_HV_Disassembler, Machine_EV_Disassembler, Machine_IV_Disassembler,
+ Machine_LV_Bundler, Machine_MV_Bundler, Machine_HV_Bundler, Machine_EV_Bundler, Machine_IV_Bundler,
+ Machine_LV_Massfab, Machine_MV_Massfab, Machine_HV_Massfab, Machine_EV_Massfab, Machine_IV_Massfab,
+ Machine_LV_Amplifab, Machine_MV_Amplifab, Machine_HV_Amplifab, Machine_EV_Amplifab, Machine_IV_Amplifab,
+ Machine_LV_Replicator, Machine_MV_Replicator, Machine_HV_Replicator, Machine_EV_Replicator, Machine_IV_Replicator,
+ Machine_LV_Brewery, Machine_MV_Brewery, Machine_HV_Brewery, Machine_EV_Brewery, Machine_IV_Brewery,
+ Machine_LV_Fermenter, Machine_MV_Fermenter, Machine_HV_Fermenter, Machine_EV_Fermenter, Machine_IV_Fermenter,
+ Machine_LV_FluidExtractor, Machine_MV_FluidExtractor, Machine_HV_FluidExtractor, Machine_EV_FluidExtractor, Machine_IV_FluidExtractor,
+ Machine_LV_FluidSolidifier, Machine_MV_FluidSolidifier, Machine_HV_FluidSolidifier, Machine_EV_FluidSolidifier, Machine_IV_FluidSolidifier,
+ Machine_LV_Distillery, Machine_MV_Distillery, Machine_HV_Distillery, Machine_EV_Distillery, Machine_IV_Distillery,
+ Machine_LV_ChemicalBath, Machine_MV_ChemicalBath, Machine_HV_ChemicalBath, Machine_EV_ChemicalBath, Machine_IV_ChemicalBath,
+ Machine_LV_Polarizer, Machine_MV_Polarizer, Machine_HV_Polarizer, Machine_EV_Polarizer, Machine_IV_Polarizer,
+ Machine_LV_ElectromagneticSeparator, Machine_MV_ElectromagneticSeparator, Machine_HV_ElectromagneticSeparator, Machine_EV_ElectromagneticSeparator, Machine_IV_ElectromagneticSeparator,
+ Machine_LV_Autoclave, Machine_MV_Autoclave, Machine_HV_Autoclave, Machine_EV_Autoclave, Machine_IV_Autoclave,
+ Machine_LV_Mixer, Machine_MV_Mixer, Machine_HV_Mixer, Machine_EV_Mixer, Machine_IV_Mixer,
+ Machine_LV_LaserEngraver, Machine_MV_LaserEngraver, Machine_HV_LaserEngraver, Machine_EV_LaserEngraver, Machine_IV_LaserEngraver,
+ Machine_LV_Press, Machine_MV_Press, Machine_HV_Press, Machine_EV_Press, Machine_IV_Press,
+ Machine_LV_Hammer, Machine_MV_Hammer, Machine_HV_Hammer, Machine_EV_Hammer, Machine_IV_Hammer,
+ Machine_LV_FluidHeater, Machine_MV_FluidHeater, Machine_HV_FluidHeater, Machine_EV_FluidHeater, Machine_IV_FluidHeater,
+
+ Neutron_Reflector,
+ Reactor_Coolant_He_1,
+ Reactor_Coolant_He_3,
+ Reactor_Coolant_He_6,
+ Reactor_Coolant_NaK_1,
+ Reactor_Coolant_NaK_3,
+ Reactor_Coolant_NaK_6,
+ ThoriumCell_1,
+ ThoriumCell_2,
+ ThoriumCell_4,
+ FusionComputer_LuV,
+ FusionComputer_ZPMV,
+ FusionComputer_UV,
+ Casing_Fusion_Coil,
+ Casing_Fusion,
+ Casing_Fusion2,
+ Generator_Plasma_IV,
+ Generator_Plasma_LuV,
+ Generator_Plasma_ZPMV,
+ MagicEnergyConverter_LV,
+ MagicEnergyConverter_MV,
+ MagicEnergyConverter_HV,
+ MagicEnergyAbsorber_LV,
+ MagicEnergyAbsorber_MV,
+ MagicEnergyAbsorber_HV,
+ MagicEnergyAbsorber_EV,
+ Depleted_Thorium_1,
+ Depleted_Thorium_2,
+ Depleted_Thorium_4,
+ Processing_Array,
+ Distillation_Tower,
+ Energy_LapotronicOrb2,
+ ZPM2, Quantum_Tank_LV,Quantum_Tank_MV,Quantum_Tank_HV,Quantum_Tank_EV,Quantum_Tank_IV, Quantum_Chest_LV, Quantum_Chest_MV, Quantum_Chest_HV, Quantum_Chest_EV, Quantum_Chest_IV,
+
+ NULL, Cover_RedstoneTransmitterExternal,Cover_RedstoneTransmitterInternal,Cover_RedstoneReceiverExternal,Cover_RedstoneReceiverInternal,
+ LargeSteamTurbine,
+ Ingot_Heavy1,Ingot_Heavy2,Ingot_Heavy3,
+ Pump_LV, Pump_MV, Pump_HV, Pump_EV, Pump_IV,
+ Teleporter,
+ Cover_NeedsMaintainance,
+ Casing_Turbine,
+ MobRep_LV,MobRep_MV,MobRep_HV,MobRep_EV,MobRep_IV, LargeGasTurbine, LargeHPSteamTurbine, LargePlasmaTurbine, Cover_PlayerDetector, Machine_Multi_HeatExchanger;
+
+ public static final ItemList[]
+ DYE_ONLY_ITEMS = {Color_00, Color_01, Color_02, Color_03, Color_04, Color_05, Color_06, Color_07, Color_08, Color_09, Color_10, Color_11, Color_12, Color_13, Color_14, Color_15}
+ , SPRAY_CAN_DYES = {Spray_Color_00, Spray_Color_01, Spray_Color_02, Spray_Color_03, Spray_Color_04, Spray_Color_05, Spray_Color_06, Spray_Color_07, Spray_Color_08, Spray_Color_09, Spray_Color_10, Spray_Color_11, Spray_Color_12, Spray_Color_13, Spray_Color_14, Spray_Color_15}
+ , SPRAY_CAN_DYES_USED = {Spray_Color_Used_00, Spray_Color_Used_01, Spray_Color_Used_02, Spray_Color_Used_03, Spray_Color_Used_04, Spray_Color_Used_05, Spray_Color_Used_06, Spray_Color_Used_07, Spray_Color_Used_08, Spray_Color_Used_09, Spray_Color_Used_10, Spray_Color_Used_11, Spray_Color_Used_12, Spray_Color_Used_13, Spray_Color_Used_14, Spray_Color_Used_15}
+ , TRANSFORMERS = {Transformer_LV_ULV, Transformer_MV_LV, Transformer_HV_MV, Transformer_EV_HV, Transformer_IV_EV, Transformer_LuV_IV, Transformer_ZPM_LuV, Transformer_UV_ZPM, Transformer_MAX_UV}
+ , MACHINE_HULLS = {Hull_ULV, Hull_LV, Hull_MV, Hull_HV, Hull_EV, Hull_IV, Hull_LuV, Hull_ZPM, Hull_UV, Hull_MAX}
+ , HATCHES_DYNAMO = {Hatch_Dynamo_ULV, Hatch_Dynamo_LV, Hatch_Dynamo_MV, Hatch_Dynamo_HV, Hatch_Dynamo_EV, Hatch_Dynamo_IV, Hatch_Dynamo_LuV, Hatch_Dynamo_ZPM, Hatch_Dynamo_UV, Hatch_Dynamo_MAX}
+ , HATCHES_ENERGY = {Hatch_Energy_ULV, Hatch_Energy_LV, Hatch_Energy_MV, Hatch_Energy_HV, Hatch_Energy_EV, Hatch_Energy_IV, Hatch_Energy_LuV, Hatch_Energy_ZPM, Hatch_Energy_UV, Hatch_Energy_MAX}
+ , HATCHES_INPUT = {Hatch_Input_ULV, Hatch_Input_LV, Hatch_Input_MV, Hatch_Input_HV, Hatch_Input_EV, Hatch_Input_IV, Hatch_Input_LuV, Hatch_Input_ZPM, Hatch_Input_UV, Hatch_Input_MAX}
+ , HATCHES_INPUT_BUS = {Hatch_Input_Bus_ULV, Hatch_Input_Bus_LV, Hatch_Input_Bus_MV, Hatch_Input_Bus_HV, Hatch_Input_Bus_EV, Hatch_Input_Bus_IV, Hatch_Input_Bus_LuV, Hatch_Input_Bus_ZPM, Hatch_Input_Bus_UV, Hatch_Input_Bus_MAX}
+ , HATCHES_OUTPUT = {Hatch_Output_ULV, Hatch_Output_LV, Hatch_Output_MV, Hatch_Output_HV, Hatch_Output_EV, Hatch_Output_IV, Hatch_Output_LuV, Hatch_Output_ZPM, Hatch_Output_UV, Hatch_Output_MAX}
+ , HATCHES_OUTPUT_BUS = {Hatch_Output_Bus_ULV, Hatch_Output_Bus_LV, Hatch_Output_Bus_MV, Hatch_Output_Bus_HV, Hatch_Output_Bus_EV, Hatch_Output_Bus_IV, Hatch_Output_Bus_LuV, Hatch_Output_Bus_ZPM, Hatch_Output_Bus_UV, Hatch_Output_Bus_MAX}
+ , HATCHES_MUFFLER = {Hatch_Muffler_LV, Hatch_Muffler_LV, Hatch_Muffler_MV, Hatch_Muffler_HV, Hatch_Muffler_EV, Hatch_Muffler_IV, Hatch_Muffler_LuV, Hatch_Muffler_ZPM, Hatch_Muffler_UV, Hatch_Muffler_MAX}
+ ;
+ private ItemStack mStack;
+ private boolean mHasNotBeenSet = true;
+
+ public static Fluid sOilExtraHeavy, sOilHeavy, sOilMedium, sOilLight, sNaturalGas;
+
+ @Override
+ public IItemContainer set(Item aItem) {
+ mHasNotBeenSet = false;
+ if (aItem == null) return this;
+ ItemStack aStack = new ItemStack(aItem, 1, 0);
+ mStack = GT_Utility.copyAmount(1, aStack);
+ return this;
+ }
+
+ @Override
+ public IItemContainer set(ItemStack aStack) {
+ mHasNotBeenSet = false;
+ mStack = GT_Utility.copyAmount(1, aStack);
+ return this;
+ }
+
+ @Override
+ public Item getItem() {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return null;
+ return mStack.getItem();
+ }
+
+ @Override
+ public Block getBlock() {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ return GT_Utility.getBlockFromStack(getItem());
+ }
+
+ @Override
+ public final boolean hasBeenSet() {
+ return !mHasNotBeenSet;
+ }
+
+ @Override
+ public boolean isStackEqual(Object aStack) {
+ return isStackEqual(aStack, false, false);
+ }
+
+ @Override
+ public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ return GT_Utility.areUnificationsEqual((ItemStack)aStack, aWildcard?getWildcard(1):get(1), aIgnoreNBT);
+ }
+
+ @Override
+ public ItemStack get(long aAmount, Object... aReplacements) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements);
+ return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(mStack));
+ }
+
+ @Override
+ public ItemStack getWildcard(long aAmount, Object... aReplacements) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements);
+ return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(mStack));
+ }
+
+ @Override
+ public ItemStack getUndamaged(long aAmount, Object... aReplacements) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements);
+ return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(mStack));
+ }
+
+ @Override
+ public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements);
+ return GT_Utility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage()-1, GT_OreDictUnificator.get(mStack));
+ }
+
+ @Override
+ public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) {
+ ItemStack rStack = get(1, aReplacements);
+ if (GT_Utility.isStackInvalid(rStack)) return null;
+ rStack.setStackDisplayName(aDisplayName);
+ return GT_Utility.copyAmount(aAmount, rStack);
+ }
+
+ @Override
+ public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) {
+ ItemStack rStack = get(1, aReplacements);
+ if (GT_Utility.isStackInvalid(rStack)) return null;
+ GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false);
+ return GT_Utility.copyAmount(aAmount, rStack);
+ }
+
+ @Override
+ public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements);
+ return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(mStack));
+ }
+
+ @Override
+ public IItemContainer registerOre(Object... aOreNames) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, get(1));
+ return this;
+ }
+
+ @Override
+ public IItemContainer registerWildcardAsOre(Object... aOreNames) {
+ if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!");
+ for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, getWildcard(1));
+ return this;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java
new file mode 100644
index 0000000000..2efef3ac89
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/Materials.java
@@ -0,0 +1,1670 @@
+package gregtech.api.enums;
+
+import static gregtech.api.enums.GT_Values.F;
+import static gregtech.api.enums.GT_Values.M;
+import static gregtech.api.enums.GT_Values.MOD_ID_TC;
+import static gregtech.api.enums.GT_Values.T;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.IColorModulationContainer;
+import gregtech.api.interfaces.ISubTagContainer;
+import gregtech.api.objects.GT_FluidStack;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.*;
+
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import cpw.mods.fml.common.Loader;
+
+/**
+ * This List contains every Material I know about, and is used to determine Recipes for the
+ */
+public enum Materials implements IColorModulationContainer, ISubTagContainer {
+ /**
+ * This is the Default Material returned in case no Material has been found or a NullPointer has been inserted at a location where it shouldn't happen.
+ *
+ * Mainly for preventing NullPointer Exceptions and providing Default Values.
+ */
+ _NULL ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "NULL" , 0, 0, 0, 0, F, F, 1, 1, 1, Dyes._NULL , Element._NULL , Arrays.asList(new TC_AspectStack(TC_Aspects.VACUOS, 1))),
+
+ /**
+ * Direct Elements
+ */
+ Aluminium ( 19, TextureSet.SET_DULL , 10.0F, 128, 2, 1|2 |8 |32|64|128 , 128, 200, 240, 0, "Aluminium" , 0, 0, 933, 1700, T, F, 3, 1, 1, Dyes.dyeLightBlue , Element.Al , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.VOLATUS, 1))),
+ Americium ( 103, TextureSet.SET_METALLIC , 1.0F, 0, 3, 1|2 |8 |32 , 200, 200, 200, 0, "Americium" , 0, 0, 1449, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Element.Am , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Antimony ( 58, TextureSet.SET_SHINY , 1.0F, 0, 2, 1|2 |8 |32 , 220, 220, 240, 0, "Antimony" , 0, 0, 903, 0, F, F, 2, 1, 1, Dyes.dyeLightGray , Element.Sb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.AQUA, 1))),
+ Argon ( 24, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 0, 255, 0, 240, "Argon" , 0, 0, 83, 0, F, T, 5, 1, 1, Dyes.dyeGreen , Element.Ar , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 2))),
+ Arsenic ( 39, TextureSet.SET_DULL , 1.0F, 0, 2, 1|2 |8|16|32 , 255, 255, 255, 0, "Arsenic" , 0, 0, 1090, 0, F, F, 3, 1, 1, Dyes.dyeOrange , Element.As , Arrays.asList(new TC_AspectStack(TC_Aspects.VENENUM, 3))),
+ Barium ( 63, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 |32 , 255, 255, 255, 0, "Barium" , 0, 0, 1000, 0, F, F, 1, 1, 1, Dyes._NULL , Element.Ba , Arrays.asList(new TC_AspectStack(TC_Aspects.VINCULUM, 3))),
+ Beryllium ( 8, TextureSet.SET_METALLIC , 14.0F, 64, 2, 1|2 |8 |32|64 , 100, 180, 100, 0, "Beryllium" , 0, 0, 1560, 0, F, F, 6, 1, 1, Dyes.dyeGreen , Element.Be , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.LUCRUM, 1))),
+ Bismuth ( 90, TextureSet.SET_METALLIC , 6.0F, 64, 1, 1|2 |8 |32|64|128 , 100, 160, 160, 0, "Bismuth" , 0, 0, 544, 0, F, F, 2, 1, 1, Dyes.dyeCyan , Element.Bi , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Boron ( 9, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 |32 , 250, 250, 250, 0, "Boron" , 0, 0, 2349, 0, F, F, 1, 1, 1, Dyes.dyeWhite , Element.B , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Caesium ( 62, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Caesium" , 0, 0, 301, 0, F, F, 4, 1, 1, Dyes._NULL , Element.Cs , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Calcium ( 26, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |32 , 255, 245, 245, 0, "Calcium" , 0, 0, 1115, 0, F, F, 4, 1, 1, Dyes.dyePink , Element.Ca , Arrays.asList(new TC_AspectStack(TC_Aspects.SANO, 1), new TC_AspectStack(TC_Aspects.TUTAMEN, 1))),
+ Carbon ( 10, TextureSet.SET_DULL , 1.0F, 64, 2, 1|2 |32|64|128 , 20, 20, 20, 0, "Carbon" , 0, 0, 3800, 0, F, F, 2, 1, 1, Dyes.dyeBlack , Element.C , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ Cadmium ( 55, TextureSet.SET_SHINY , 1.0F, 0, 2, 1 |8 |32 , 50, 50, 60, 0, "Cadmium" , 0, 0, 594, 0, F, F, 3, 1, 1, Dyes.dyeGray , Element.Cd , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_AspectStack(TC_Aspects.VENENUM, 1))),
+ Cerium ( 65, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Cerium" , 0, 0, 1068, 1068, T, F, 4, 1, 1, Dyes._NULL , Element.Ce , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Chlorine ( 23, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 255, 255, 0, "Chlorine" , 0, 0, 171, 0, F, F, 2, 1, 1, Dyes.dyeCyan , Element.Cl , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2), new TC_AspectStack(TC_Aspects.PANNUS, 1))),
+ Chrome ( 30, TextureSet.SET_SHINY , 11.0F, 256, 3, 1|2 |8 |32|64|128 , 255, 230, 230, 0, "Chrome" , 0, 0, 2180, 1700, T, F, 5, 1, 1, Dyes.dyePink , Element.Cr , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MACHINA, 1))),
+ Cobalt ( 33, TextureSet.SET_METALLIC , 8.0F, 512, 3, 1|2 |8 |32|64 , 80, 80, 250, 0, "Cobalt" , 0, 0, 1768, 0, F, F, 3, 1, 1, Dyes.dyeBlue , Element.Co , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Copper ( 35, TextureSet.SET_SHINY , 1.0F, 0, 1, 1|2 |8 |32 |128 , 255, 100, 0, 0, "Copper" , 0, 0, 1357, 0, F, F, 3, 1, 1, Dyes.dyeOrange , Element.Cu , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.PERMUTATIO, 1))),
+ Deuterium ( 2, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 255, 0, 240, "Deuterium" , 0, 0, 14, 0, F, T, 10, 1, 1, Dyes.dyeYellow , Element.D , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 3))),
+ Dysprosium ( 73, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Dysprosium" , 0, 0, 1680, 1680, T, F, 4, 1, 1, Dyes._NULL , Element.Dy , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3))),
+ Empty ( 0, TextureSet.SET_NONE , 1.0F, 0, 2, 256/*Only for Prefixes which need it*/, 255, 255, 255, 255, "Empty" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes._NULL , Element._NULL , Arrays.asList(new TC_AspectStack(TC_Aspects.VACUOS, 2))),
+ Erbium ( 75, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Erbium" , 0, 0, 1802, 1802, T, F, 4, 1, 1, Dyes._NULL , Element.Er , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Europium ( 70, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Europium" , 0, 0, 1099, 1099, T, F, 4, 1, 1, Dyes._NULL , Element.Eu , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Fluorine ( 14, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 255, 255, 127, "Fluorine" , 0, 0, 53, 0, F, T, 2, 1, 1, Dyes.dyeGreen , Element.F , Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 2))),
+ Gadolinium ( 71, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Gadolinium" , 0, 0, 1585, 1585, T, F, 4, 1, 1, Dyes._NULL , Element.Gd , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Gallium ( 37, TextureSet.SET_SHINY , 1.0F, 64, 2, 1|2 |8 |32 , 220, 220, 255, 0, "Gallium" , 0, 0, 302, 0, F, F, 5, 1, 1, Dyes.dyeLightGray , Element.Ga , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ELECTRUM, 1))),
+ Gold ( 86, TextureSet.SET_SHINY , 12.0F, 64, 2, 1|2 |8 |32|64|128 , 255, 255, 30, 0, "Gold" , 0, 0, 1337, 0, F, F, 4, 1, 1, Dyes.dyeYellow , Element.Au , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.LUCRUM, 2))),
+ Holmium ( 74, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Holmium" , 0, 0, 1734, 1734, T, F, 4, 1, 1, Dyes._NULL , Element.Ho , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Hydrogen ( 1, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 0, 0, 255, 240, "Hydrogen" , 1, 15, 14, 0, F, T, 2, 1, 1, Dyes.dyeBlue , Element.H , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 1))),
+ Helium ( 4, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 255, 0, 240, "Helium" , 0, 0, 1, 0, F, T, 5, 1, 1, Dyes.dyeYellow , Element.He , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 2))),
+ Helium_3 ( 5, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 255, 0, 240, "Helium-3" , 0, 0, 1, 0, F, T, 10, 1, 1, Dyes.dyeYellow , Element.He_3 , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 3))),
+ Indium ( 56, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 64, 0, 128, 0, "Indium" , 0, 0, 429, 0, F, F, 4, 1, 1, Dyes.dyeGray , Element.In , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Iridium ( 84, TextureSet.SET_DULL , 6.0F, 5120, 4, 1|2 |8 |32|64|128 , 240, 240, 245, 0, "Iridium" , 0, 0, 2719, 0, F, F, 10, 1, 1, Dyes.dyeWhite , Element.Ir , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MACHINA, 1))),
+ Iron ( 32, TextureSet.SET_METALLIC , 6.0F, 256, 2, 1|2 |8 |32|64|128 , 200, 200, 200, 0, "Iron" , 0, 0, 1811, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Element.Fe , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3))),
+ Lanthanum ( 64, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Lanthanum" , 0, 0, 1193, 1193, T, F, 4, 1, 1, Dyes._NULL , Element.La , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Lead ( 89, TextureSet.SET_DULL , 8.0F, 64, 1, 1|2 |8 |32|64|128 , 140, 100, 140, 0, "Lead" , 0, 0, 600, 0, F, F, 3, 1, 1, Dyes.dyePurple , Element.Pb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ORDO, 1))),
+ Lithium ( 6, TextureSet.SET_DULL , 1.0F, 0, 2, 1|2 |8 |32 , 225, 220, 255, 0, "Lithium" , 0, 0, 454, 0, F, F, 4, 1, 1, Dyes.dyeLightBlue , Element.Li , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.POTENTIA, 2))),
+ Lutetium ( 78, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Lutetium" , 0, 0, 1925, 1925, T, F, 4, 1, 1, Dyes._NULL , Element.Lu , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Magic (-128, TextureSet.SET_SHINY , 8.0F, 5120, 5, 1|2|4|8|16|32|64|128 , 100, 0, 200, 0, "Magic" , 5, 32, 5000, 0, F, F, 7, 1, 1, Dyes.dyePurple , Element.Ma , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 4))),
+ Magnesium ( 18, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 200, 200, 0, "Magnesium" , 0, 0, 923, 0, F, F, 3, 1, 1, Dyes.dyePink , Element.Mg , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.SANO, 1))),
+ Manganese ( 31, TextureSet.SET_DULL , 7.0F, 512, 2, 1|2 |8 |32|64 , 250, 250, 250, 0, "Manganese" , 0, 0, 1519, 0, F, F, 3, 1, 1, Dyes.dyeWhite , Element.Mn , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3))),
+ Mercury ( 87, TextureSet.SET_SHINY , 1.0F, 0, 0, 16|32 , 255, 220, 220, 0, "Mercury" , 5, 32, 234, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Element.Hg , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_AspectStack(TC_Aspects.AQUA, 1), new TC_AspectStack(TC_Aspects.VENENUM, 1))),
+ Molybdenum ( 48, TextureSet.SET_SHINY , 7.0F, 512, 2, 1|2 |8 |32|64 , 180, 180, 220, 0, "Molybdenum" , 0, 0, 2896, 0, F, F, 1, 1, 1, Dyes.dyeBlue , Element.Mo , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Neodymium ( 67, TextureSet.SET_METALLIC , 7.0F, 512, 2, 1|2 |8 |32|64|128 , 100, 100, 100, 0, "Neodymium" , 0, 0, 1297, 1297, T, F, 4, 1, 1, Dyes._NULL , Element.Nd , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 2))),
+ Neutronium ( 129, TextureSet.SET_DULL , 6.0F, 81920, 6, 1|2 |8 |32|64|128 , 250, 250, 250, 0, "Neutronium" , 0, 0, 10000, 0, F, F, 20, 1, 1, Dyes.dyeWhite , Element.Nt , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_AspectStack(TC_Aspects.ALIENIS, 2))),
+ Nickel ( 34, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |8 |32|64|128 , 200, 200, 250, 0, "Nickel" , 0, 0, 1728, 0, F, F, 4, 1, 1, Dyes.dyeLightBlue , Element.Ni , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ Niobium ( 47, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 190, 180, 200, 0, "Niobium" , 0, 0, 2750, 2750, T, F, 5, 1, 1, Dyes._NULL , Element.Nb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ELECTRUM, 1))),
+ Nitrogen ( 12, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 0, 150, 200, 240, "Nitrogen" , 0, 0, 63, 0, F, T, 2, 1, 1, Dyes.dyeCyan , Element.N , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 2))),
+ Osmium ( 83, TextureSet.SET_METALLIC , 16.0F, 1280, 4, 1|2 |8 |32|64|128 , 50, 50, 255, 0, "Osmium" , 0, 0, 3306, 0, F, F, 10, 1, 1, Dyes.dyeBlue , Element.Os , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MACHINA, 1), new TC_AspectStack(TC_Aspects.NEBRISUM, 1))),
+ Oxygen ( 13, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 0, 100, 200, 240, "Oxygen" , 0, 0, 54, 0, F, T, 1, 1, 1, Dyes.dyeWhite , Element.O , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 1))),
+ Palladium ( 52, TextureSet.SET_SHINY , 8.0F, 512, 2, 1|2 |8 |32|64|128 , 128, 128, 128, 0, "Palladium" , 0, 0, 1828, 1828, F, F, 4, 1, 1, Dyes.dyeGray , Element.Pd , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3))),
+ Phosphor ( 21, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 |32 , 255, 255, 0, 0, "Phosphor" , 0, 0, 317, 0, F, F, 2, 1, 1, Dyes.dyeYellow , Element.P , Arrays.asList(new TC_AspectStack(TC_Aspects.IGNIS, 2), new TC_AspectStack(TC_Aspects.POTENTIA, 1))),
+ Platinum ( 85, TextureSet.SET_SHINY , 12.0F, 64, 2, 1|2 |8 |32|64|128 , 255, 255, 200, 0, "Platinum" , 0, 0, 2041, 0, F, F, 6, 1, 1, Dyes.dyeOrange , Element.Pt , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.NEBRISUM, 1))),
+ Plutonium ( 100, TextureSet.SET_METALLIC , 6.0F, 512, 3, 1|2 |8 |32|64 , 240, 50, 50, 0, "Plutonium 244" , 0, 0, 912, 0, F, F, 6, 1, 1, Dyes.dyeLime , Element.Pu , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 2))),
+ Plutonium241 ( 101, TextureSet.SET_SHINY , 6.0F, 512, 3, 1|2 |8 |32|64 , 250, 70, 70, 0, "Plutonium 241" , 0, 0, 912, 0, F, F, 6, 1, 1, Dyes.dyeLime , Element.Pu_241 , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 3))),
+ Potassium ( 25, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1|2 |32 , 250, 250, 250, 0, "Potassium" , 0, 0, 336, 0, F, F, 2, 1, 1, Dyes.dyeWhite , Element.K , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.POTENTIA, 1))),
+ Praseodymium ( 66, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Praseodymium" , 0, 0, 1208, 1208, T, F, 4, 1, 1, Dyes._NULL , Element.Pr , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Promethium ( 68, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Promethium" , 0, 0, 1315, 1315, T, F, 4, 1, 1, Dyes._NULL , Element.Pm , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Radon ( 93, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 255, 0, 255, 240, "Radon" , 0, 0, 202, 0, F, T, 5, 1, 1, Dyes.dyePurple , Element.Rn , Arrays.asList(new TC_AspectStack(TC_Aspects.AER, 1), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Rubidium ( 43, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 240, 30, 30, 0, "Rubidium" , 0, 0, 312, 0, F, F, 4, 1, 1, Dyes.dyeRed , Element.Rb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ Samarium ( 69, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Samarium" , 0, 0, 1345, 1345, T, F, 4, 1, 1, Dyes._NULL , Element.Sm , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Scandium ( 27, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Scandium" , 0, 0, 1814, 1814, T, F, 2, 1, 1, Dyes.dyeYellow , Element.Sc , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Silicon ( 20, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 60, 60, 80, 0, "Silicon" , 0, 0, 1687, 1687, T, F, 1, 1, 1, Dyes.dyeBlack , Element.Si , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.TENEBRAE, 1))),
+ Silver ( 54, TextureSet.SET_SHINY , 10.0F, 64, 2, 1|2 |8 |32|64|128 , 220, 220, 255, 0, "Silver" , 0, 0, 1234, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Element.Ag , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.LUCRUM, 1))),
+ Sodium ( 17, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |32 , 0, 0, 150, 0, "Sodium" , 0, 0, 370, 0, F, F, 1, 1, 1, Dyes.dyeBlue , Element.Na , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_AspectStack(TC_Aspects.LUX, 1))),
+ Strontium ( 44, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 |32 , 200, 200, 200, 0, "Strontium" , 0, 0, 1050, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Element.Sr , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.STRONTIO, 1))),
+ Sulfur ( 22, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 |32 , 200, 200, 0, 0, "Sulfur" , 0, 0, 388, 0, F, F, 2, 1, 1, Dyes.dyeYellow , Element.S , Arrays.asList(new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ Tantalum ( 80, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Tantalum" , 0, 0, 3290, 0, F, F, 4, 1, 1, Dyes._NULL , Element.Ta , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.VINCULUM, 1))),
+ Tellurium ( 59, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Tellurium" , 0, 0, 722, 0, F, F, 4, 1, 1, Dyes.dyeGray , Element.Te , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Terbium ( 72, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Terbium" , 0, 0, 1629, 1629, T, F, 4, 1, 1, Dyes._NULL , Element.Tb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Thorium ( 96, TextureSet.SET_SHINY , 6.0F, 512, 2, 1|2 |8 |32|64 , 0, 30, 0, 0, "Thorium" , 0, 0, 2115, 0, F, F, 4, 1, 1, Dyes.dyeBlack , Element.Th , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Thulium ( 76, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Thulium" , 0, 0, 1818, 1818, T, F, 4, 1, 1, Dyes._NULL , Element.Tm , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Tin ( 57, TextureSet.SET_DULL , 1.0F, 0, 1, 1|2 |8 |32 |128 , 220, 220, 220, 0, "Tin" , 0, 0, 505, 505, F, F, 3, 1, 1, Dyes.dyeWhite , Element.Sn , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ Titanium ( 28, TextureSet.SET_METALLIC , 8.0F, 2560, 3, 1|2 |8 |32|64|128 , 220, 160, 240, 0, "Titanium" , 0, 0, 1941, 1500, T, F, 5, 1, 1, Dyes.dyePurple , Element.Ti , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.TUTAMEN, 1))),
+ Tritium ( 3, TextureSet.SET_METALLIC , 1.0F, 0, 2, 16|32 , 255, 0, 0, 240, "Tritium" , 0, 0, 14, 0, F, T, 10, 1, 1, Dyes.dyeRed , Element.T , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 4))),
+ Tungsten ( 81, TextureSet.SET_METALLIC , 8.0F, 5120, 3, 1|2 |8 |32|64|128 , 50, 50, 50, 0, "Tungsten" , 0, 0, 3695, 2500, T, F, 4, 1, 1, Dyes.dyeBlack , Element.W , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_AspectStack(TC_Aspects.TUTAMEN, 1))),
+ Uranium ( 98, TextureSet.SET_METALLIC , 6.0F, 512, 3, 1|2 |8 |32|64 , 50, 240, 50, 0, "Uranium 238" , 0, 0, 1405, 0, F, F, 4, 1, 1, Dyes.dyeGreen , Element.U , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Uranium235 ( 97, TextureSet.SET_SHINY , 6.0F, 512, 3, 1|2 |8 |32|64 , 70, 250, 70, 0, "Uranium 235" , 0, 0, 1405, 0, F, F, 4, 1, 1, Dyes.dyeGreen , Element.U_235 , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 2))),
+ Vanadium ( 29, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 50, 50, 50, 0, "Vanadium" , 0, 0, 2183, 2183, T, F, 2, 1, 1, Dyes.dyeBlack , Element.V , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Ytterbium ( 77, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 255, 255, 255, 0, "Ytterbium" , 0, 0, 1097, 1097, T, F, 4, 1, 1, Dyes._NULL , Element.Yb , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Yttrium ( 45, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 |8 |32 , 220, 250, 220, 0, "Yttrium" , 0, 0, 1799, 1799, T, F, 4, 1, 1, Dyes._NULL , Element.Y , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))),
+ Zinc ( 36, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1|2 |8 |32 , 250, 240, 240, 0, "Zinc" , 0, 0, 692, 0, F, F, 2, 1, 1, Dyes.dyeWhite , Element.Zn , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.SANO, 1))),
+
+ /**
+ * The "Random Material" ones.
+ */
+ Organic ( -1, TextureSet.SET_LEAF , 1.0F, 0, 1, F),
+ AnyCopper ( -1, TextureSet.SET_SHINY , 1.0F, 0, 3, F),
+ AnyBronze ( -1, TextureSet.SET_SHINY , 1.0F, 0, 3, F),
+ AnyIron ( -1, TextureSet.SET_SHINY , 1.0F, 0, 3, F),
+ Crystal ( -1, TextureSet.SET_SHINY , 1.0F, 0, 3, F),
+ Quartz ( -1, TextureSet.SET_QUARTZ , 1.0F, 0, 2, F),
+ Metal ( -1, TextureSet.SET_METALLIC , 1.0F, 0, 2, F),
+ Unknown ( -1, TextureSet.SET_DULL , 1.0F, 0, 2, F),
+ Cobblestone ( -1, TextureSet.SET_DULL , 1.0F, 0, 1, F),
+ Brick ( -1, TextureSet.SET_DULL , 1.0F, 0, 1, F),
+ BrickNether ( -1, TextureSet.SET_DULL , 1.0F, 0, 1, F),
+
+ /**
+ * The "I don't care" Section, everything I don't want to do anything with right now, is right here. Just to make the Material Finder shut up about them.
+ * But I do see potential uses in some of these Materials.
+ */
+ TarPitch ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Tar Pitch" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Carborundum ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Carborundum" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Satinspar ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Satinspar" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Selenite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Selenite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PetrifiedWood ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Petrified Wood" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Jet ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |4|8 , 255, 255, 255, 0, "Jet" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Microcline ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Microcline" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Serpentine ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Serpentine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Sylvite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Sylvite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Flux ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Flux" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Goshen ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Goshen" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Joshen ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Joshen" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Itarius ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Itarius" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Legendary ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Legendary" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ MutatedIron ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Mutated Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Witheria ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Witheria" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ RedstoneAlloy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Redstone Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ OsmiumTetroxide ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Osmium Tetroxide" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ NitricAcid ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Nitric Acid" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ RubberTreeSap ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Rubber Tree Sap" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ AquaRegia ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Aqua Regia" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ SolutionBlueVitriol ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Blue Vitriol Solution" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ SolutionNickelSulfate( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Nickel Sulfate Solution" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Signalum ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Signalum" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Lumium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Lumium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PhasedIron ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Phased Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PhasedGold ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Phased Gold" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Soularium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Soularium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Endium ( 770, TextureSet.SET_DULL , 1.0F, 0, 2, 1|2 |8 , 165, 220, 250, 0, "Endium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow ),
+ Prismarine ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |4 , 255, 255, 255, 0, "Prismarine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ GraveyardDirt ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Graveyard Dirt" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ DarkSteel ( 364, TextureSet.SET_DULL , 8.0F, 512, 3, 1|2 |8 |64 , 80, 70, 80, 0, "Dark Steel" , 0, 0, 1811, 0, F, F, 5, 1, 1, Dyes.dyePurple ),
+ Terrasteel ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Terrasteel" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ TerrasteelAlloyRaw ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Raw Terrasteel Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ TerrasteelAlloyStrengthened ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Strengthened Terrasteel Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ ConductiveIron ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Conductive Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ ElectricalSteel ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Electrical Steel" , 0, 0, 1811, 1000, T, F, 3, 1, 1, Dyes._NULL ),
+ EnergeticAlloy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Energetic Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ VibrantAlloy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Vibrant Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PulsatingIron ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Pulsating Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Rutile ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Rutile" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ), // TiO2
+ Teslatite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 60, 180, 200, 0, "Teslatite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Fluix ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |4 , 255, 255, 255, 0, "Fluix" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Manasteel ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Manasteel" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Tennantite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Tennantite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ DarkThaumium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Dark Thaumium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Alfium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Alfium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Ryu ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Ryu" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Mutation ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Mutation" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Aquamarine ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |4 , 255, 255, 255, 0, "Aquamarine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Ender ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Ender" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ ElvenElementium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Elven Elementium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ EnrichedCopper ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Enriched Copper" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ DiamondCopper ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Diamond Copper" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ SodiumPeroxide ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Sodium Peroxide" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ IridiumSodiumOxide ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Iridium Sodium Oxide" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PlatinumGroupSludge ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Platinum Group Sluge" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Fairy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Fairy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Ludicrite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Ludicrite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Pokefennium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Pokefennium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Draconium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Draconium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ DraconiumAwakened ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Awakened Draconium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ PurpleAlloy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 100, 180, 255, 0, "Purple Alloy" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ InfusedTeslatite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 100, 180, 255, 0, "Infused Teslatite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+
+ /**
+ * Unknown Material Components. Dead End Section.
+ */
+ Adamantium ( 319, TextureSet.SET_SHINY , 10.0F, 5120, 5, 1|2 |8 |64|128 , 255, 255, 255, 0, "Adamantium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray ),
+ Adamite ( -1, TextureSet.SET_NONE , 1.0F, 0, 3, 1 |8 , 255, 255, 255, 0, "Adamite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray ),
+ Adluorite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Adluorite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Agate ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Agate" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Alduorite ( 485, TextureSet.SET_SHINY , 1.0F, 0, 2, 1 |8|16 , 159, 180, 180, 0, "Alduorite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Amber ( 514, TextureSet.SET_RUBY , 4.0F, 128, 2, 1 |4|8 |64 , 255, 128, 0, 127, "Amber" , 5, 3, -1, 0, F, T, 1, 1, 1, Dyes.dyeOrange , Arrays.asList(new TC_AspectStack(TC_Aspects.VINCULUM, 2), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ Ammonium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Ammonium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Amordrine ( -1, TextureSet.SET_NONE , 6.0F, 64, 2, 1|2 |8|16 |64 , 255, 255, 255, 0, "Amordrine" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Andesite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Andesite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Angmallen ( 958, TextureSet.SET_METALLIC , 10.0F, 128, 2, 1|2 |8|16 |64 , 215, 225, 138, 0, "Angmallen" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Ardite ( -1, TextureSet.SET_NONE , 6.0F, 64, 2, 1|2 |8 |64 , 255, 0, 0, 0, "Ardite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Aredrite ( -1, TextureSet.SET_NONE , 6.0F, 64, 2, 1|2 |8 |64 , 255, 0, 0, 0, "Aredrite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Atlarus ( 965, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |8 |64 , 255, 255, 255, 0, "Atlarus" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Bitumen ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Bitumen" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Black ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 0, 0, 0, 0, "Black" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlack ),
+ Blizz ( 851, TextureSet.SET_SHINY , 1.0F, 0, 2, 1 , 220, 233, 255, 0, "Blizz" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Blueschist ( 852, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Blueschist" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeLightBlue ),
+ Bluestone ( 813, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Bluestone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue ),
+ Bloodstone ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Bloodstone" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed ),
+ Blutonium ( -1, TextureSet.SET_SHINY , 1.0F, 0, 2, 1|2 |8 , 0, 0, 255, 0, "Blutonium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlue ),
+ Carmot ( 962, TextureSet.SET_METALLIC , 16.0F, 128, 1, 1|2 |8 |64 , 217, 205, 140, 0, "Carmot" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Celenegil ( 964, TextureSet.SET_METALLIC , 10.0F, 4096, 2, 1|2 |8|16 |64 , 148, 204, 72, 0, "Celenegil" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ CertusQuartz ( 516, TextureSet.SET_QUARTZ , 5.0F, 32, 1, 1 |4|8 |64 , 210, 210, 230, 0, "Certus Quartz" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ Ceruclase ( 952, TextureSet.SET_METALLIC , 6.0F, 1280, 2, 1|2 |8 , 140, 189, 208, 0, "Ceruclase" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Citrine ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Citrine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ //ChargedCertusQuartz ( 517, TextureSet.SET_QUARTZ , 5.0F, 32, 1, 1 |4|8 |64 , 210, 210, 230, 0, "Charged Certus Quartz" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ CobaltHexahydrate ( 853, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |16 , 80, 80, 250, 0, "Cobalt Hexahydrate" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue ),
+ ConstructionFoam ( 854, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |16 , 128, 128, 128, 0, "Construction Foam" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray ),
+ Chert ( 857, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Chert" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes._NULL ),
+ Chimerite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Chimerite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Coral ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 128, 255, 0, "Coral" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ CrudeOil ( 858, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 10, 10, 10, 0, "Crude Oil" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack ),
+ Chrysocolla ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Chrysocolla" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ CrystalFlux ( -1, TextureSet.SET_QUARTZ , 1.0F, 0, 3, 1 |4 , 100, 50, 100, 0, "Flux Crystal" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Cyanite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Cyanite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeCyan ),
+ Dacite ( 859, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Dacite" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeLightGray ),
+ DarkIron ( 342, TextureSet.SET_DULL , 7.0F, 384, 3, 1|2 |8 |64 , 55, 40, 60, 0, "Dark Iron" , 0, 0, -1, 0, F, F, 5, 1, 1, Dyes.dyePurple ),
+ DarkStone ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Dark Stone" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlack ),
+ Demonite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Demonite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed ),
+ Desh ( 884, TextureSet.SET_DULL , 1.0F, 1280, 3, 1|2 |8 |64|128 , 40, 40, 40, 0, "Desh" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack ),
+ Desichalkos ( -1, TextureSet.SET_NONE , 6.0F, 1280, 3, 1|2 |8|16 |64 , 255, 255, 255, 0, "Desichalkos" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Dilithium ( 515, TextureSet.SET_DIAMOND , 1.0F, 0, 1, 1 |4|8|16 , 255, 250, 250, 127, "Dilithium" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes.dyeWhite ),
+ Draconic ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Draconic" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed ),
+ Drulloy ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|16 , 255, 255, 255, 0, "Drulloy" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed ),
+ Duranium ( 328, TextureSet.SET_METALLIC , 8.0F, 1280, 4, 1|2 |64 , 255, 255, 255, 0, "Duranium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray ),
+ Eclogite ( 860, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Eclogite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ ElectrumFlux ( 320, TextureSet.SET_SHINY , 16.0F, 512, 3, 1|2 |64 , 255, 255, 120, 0, "Fluxed Electrum" , 0, 0, 3000, 3000, T, F, 1, 1, 1, Dyes.dyeYellow ),
+ Emery ( 861, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Emery" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Enderium ( 321, TextureSet.SET_DULL , 8.0F, 256, 3, 1|2 |64 , 89, 145, 135, 0, "Enderium" , 0, 0, 3000, 3000, T, F, 1, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ALIENIS, 1))),
+ EnderiumBase ( -1, TextureSet.SET_DULL , 8.0F, 256, 3, 1|2 |64 , 89, 145, 135, 0, "Enderium Base" , 0, 0, 3000, 3000, T, F, 1, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ALIENIS, 1))),
+ Energized ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Energized" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Epidote ( 862, TextureSet.SET_DULL , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Epidote" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes._NULL ),
+ Eximite ( 959, TextureSet.SET_METALLIC , 5.0F, 2560, 3, 1|2 |8 |64 , 124, 90, 150, 0, "Eximite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ FierySteel ( 346, TextureSet.SET_FIERY , 8.0F, 256, 3, 1|2 |16 |64|128 , 64, 0, 0, 0, "Fiery Steel" , 5, 2048, 1811, 1000, T, F, 1, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 3), new TC_AspectStack(TC_Aspects.IGNIS, 3), new TC_AspectStack(TC_Aspects.CORPUS, 3))),
+ Firestone ( 347, TextureSet.SET_QUARTZ , 6.0F, 1280, 3, 1 |4|8 |64 , 200, 20, 0, 0, "Firestone" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed ),
+ Fluorite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 |8 , 255, 255, 255, 0, "Fluorite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen ),
+ FoolsRuby ( 512, TextureSet.SET_RUBY , 1.0F, 0, 2, 1 |4|8 , 255, 100, 100, 127, "Ruby" , 0, 0, -1, 0, F, T, 3, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 2), new TC_AspectStack(TC_Aspects.VITREUS, 2))),
+ Force ( 521, TextureSet.SET_DIAMOND , 10.0F, 128, 3, 1|2|4|8 |64|128 , 255, 255, 0, 0, "Force" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 5))),
+ Forcicium ( 518, TextureSet.SET_DIAMOND , 1.0F, 0, 1, 1 |4|8|16 , 50, 50, 70, 0, "Forcicium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2))),
+ Forcillium ( 519, TextureSet.SET_DIAMOND , 1.0F, 0, 1, 1 |4|8|16 , 50, 50, 70, 0, "Forcillium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2))),
+ Gabbro ( 863, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Gabbro" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes._NULL ),
+ Glowstone ( 811, TextureSet.SET_SHINY , 1.0F, 0, 1, 1 |16 , 255, 255, 0, 0, "Glowstone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.LUX, 2), new TC_AspectStack(TC_Aspects.SENSUS, 1))),
+ Gneiss ( 864, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Gneiss" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes._NULL ),
+ Graphite ( 865, TextureSet.SET_DULL , 5.0F, 32, 2, 1 |8|16 |64 , 128, 128, 128, 0, "Graphite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ Graphene ( 819, TextureSet.SET_DULL , 6.0F, 32, 1, 1 |64 , 128, 128, 128, 0, "Graphene" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_AspectStack(TC_Aspects.ELECTRUM, 1))),
+ Greenschist ( 866, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Green Schist" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGreen ),
+ Greenstone ( 867, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Greenstone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGreen ),
+ Greywacke ( 868, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Greywacke" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray ),
+ Haderoth ( 963, TextureSet.SET_METALLIC , 10.0F, 3200, 3, 1|2 |8|16 |64 , 119, 52, 30, 0, "Haderoth" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Hematite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Hematite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Hepatizon ( 957, TextureSet.SET_METALLIC , 12.0F, 128, 2, 1|2 |8|16 |64 , 117, 94, 117, 0, "Hepatizon" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ HSLA ( 322, TextureSet.SET_METALLIC , 6.0F, 500, 2, 1|2 |64|128 , 128, 128, 128, 0, "HSLA Steel" , 0, 0, 1811, 1000, T, F, 3, 1, 1, Dyes._NULL , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_AspectStack(TC_Aspects.ORDO, 1))),
+ Ignatius ( 950, TextureSet.SET_METALLIC , 12.0F, 512, 2, 1|2 |16 , 255, 169, 83, 0, "Ignatius" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Infernal ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 0 , 255, 255, 255, 0, "Infernal" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Infuscolium ( 490, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |8|16 |64 , 146, 33, 86, 0, "Infuscolium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ InfusedGold ( 323, TextureSet.SET_SHINY , 12.0F, 64, 3, 1|2 |8 |64|128 , 255, 200, 60, 0, "Infused Gold" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow ),
+ InfusedAir ( 540, TextureSet.SET_SHARDS , 8.0F, 64, 3, 1 |4|8 |64|128 , 255, 255, 0, 0, "Aer" , 5, 160, -1, 0, F, T, 3, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.AER, 2))),
+ InfusedFire ( 541, TextureSet.SET_SHARDS , 8.0F, 64, 3, 1 |4|8 |64|128 , 255, 0, 0, 0, "Ignis" , 5, 320, -1, 0, F, T, 3, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.IGNIS, 2))),
+ InfusedEarth ( 542, TextureSet.SET_SHARDS , 8.0F, 256, 3, 1 |4|8 |64|128 , 0, 255, 0, 0, "Terra" , 5, 160, -1, 0, F, T, 3, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.TERRA, 2))),
+ InfusedWater ( 543, TextureSet.SET_SHARDS , 8.0F, 64, 3, 1 |4|8 |64|128 , 0, 0, 255, 0, "Aqua" , 5, 160, -1, 0, F, T, 3, 1, 1, Dyes.dyeBlue , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.AQUA, 2))),
+ InfusedEntropy ( 544, TextureSet.SET_SHARDS , 32.0F, 64, 4, 1 |4|8 |64|128 , 62, 62, 62, 0, "Perditio" , 5, 320, -1, 0, F, T, 3, 1, 1, Dyes.dyeBlack , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.PERDITIO, 2))),
+ InfusedOrder ( 545, TextureSet.SET_SHARDS , 8.0F, 64, 3, 1 |4|8 |64|128 , 252, 252, 252, 0, "Ordo" , 5, 240, -1, 0, F, T, 3, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.ORDO, 2))),
+ InfusedVis ( -1, TextureSet.SET_SHARDS , 8.0F, 64, 3, 1 |4|8 |64|128 , 255, 0, 255, 0, "Auram" , 5, 240, -1, 0, F, T, 3, 1, 1, Dyes.dyePurple , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.AURAM, 2))),
+ InfusedDull ( -1, TextureSet.SET_SHARDS , 32.0F, 64, 3, 1 |4|8 |64|128 , 100, 100, 100, 0, "Vacuus" , 5, 160, -1, 0, F, T, 3, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 1), new TC_AspectStack(TC_Aspects.VACUOS, 2))),
+ Inolashite ( 954, TextureSet.SET_NONE , 8.0F, 2304, 3, 1|2 |8|16 |64 , 148, 216, 187, 0, "Inolashite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Invisium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1 , 255, 255, 255, 0, "Invisium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Jade ( 537, TextureSet.SET_SHINY , 1.0F, 0, 2, 1 |8 , 0, 100, 0, 0, "Jade" , 0, 0, -1, 0, F, F, 5, 1, 1, Dyes.dyeGreen , Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Jasper ( 511, TextureSet.SET_EMERALD , 1.0F, 0, 2, 1 |4|8 , 200, 80, 80, 100, "Jasper" , 0, 0, -1, 0, F, T, 3, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 4), new TC_AspectStack(TC_Aspects.VITREUS, 2))),
+ Kalendrite ( 953, TextureSet.SET_METALLIC , 5.0F, 2560, 3, 1|2 |16 , 170, 91, 189, 0, "Kalendrite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Komatiite ( 869, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Komatiite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Lava ( 700, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 255, 64, 0, 0, "Lava" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange ),
+ Lemurite ( 486, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |16 , 219, 219, 219, 0, "Lemurite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Limestone ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Limestone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Lodestone ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Lodestone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Luminite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 250, 250, 250, 0, "Luminite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeWhite ),
+ Magma ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 64, 0, 0, "Magma" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange ),
+ Mawsitsit ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Mawsitsit" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Mercassium ( -1, TextureSet.SET_NONE , 6.0F, 64, 1, 1|2 |8 |64 , 255, 255, 255, 0, "Mercassium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ MeteoricIron ( 340, TextureSet.SET_METALLIC , 6.0F, 384, 2, 1|2 |8 |64 , 100, 50, 80, 0, "Meteoric Iron" , 0, 0, 1811, 0, F, F, 1, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ MeteoricSteel ( 341, TextureSet.SET_METALLIC , 6.0F, 768, 2, 1|2 |64 , 50, 25, 40, 0, "Meteoric Steel" , 0, 0, 1811, 1000, T, F, 1, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1), new TC_AspectStack(TC_Aspects.ORDO, 1))),
+ Meteorite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 80, 35, 60, 0, "Meteorite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple ),
+ Meutoite ( 487, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8|16 , 95, 82, 105, 0, "Meutoite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Migmatite ( 872, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Migmatite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Mimichite ( -1, TextureSet.SET_GEM_VERTICAL , 1.0F, 0, 1, 1 |4|8 , 255, 255, 255, 0, "Mimichite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Moonstone ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Moonstone" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.ALIENIS, 1))),
+ Naquadah ( 324, TextureSet.SET_METALLIC , 6.0F, 1280, 4, 1|2 |8|16 |64 , 50, 50, 50, 0, "Naquadah" , 0, 0, 3000, 3000, T, F, 10, 1, 1, Dyes.dyeBlack , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_AspectStack(TC_Aspects.RADIO, 1), new TC_AspectStack(TC_Aspects.NEBRISUM, 1))),
+ NaquadahAlloy ( 325, TextureSet.SET_METALLIC , 8.0F, 5120, 5, 1|2 |64|128 , 40, 40, 40, 0, "Naquadah Alloy" , 0, 0, 3000, 3000, T, F, 10, 1, 1, Dyes.dyeBlack , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_AspectStack(TC_Aspects.NEBRISUM, 1))),
+ NaquadahEnriched ( 326, TextureSet.SET_METALLIC , 6.0F, 1280, 4, 1|2 |8|16 |64 , 50, 50, 50, 0, "Enriched Naquadah" , 0, 0, 3000, 3000, T, F, 15, 1, 1, Dyes.dyeBlack , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_AspectStack(TC_Aspects.RADIO, 2), new TC_AspectStack(TC_Aspects.NEBRISUM, 2))),
+ Naquadria ( 327, TextureSet.SET_SHINY , 1.0F, 512, 4, 1|2 |8 |64 , 30, 30, 30, 0, "Naquadria" , 0, 0, 3000, 3000, T, F, 20, 1, 1, Dyes.dyeBlack , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_AspectStack(TC_Aspects.RADIO, 3), new TC_AspectStack(TC_Aspects.NEBRISUM, 3))),
+ Nether ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Nether" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ NetherBrick ( 814, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 100, 0, 0, 0, "Nether Brick" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ NetherQuartz ( 522, TextureSet.SET_QUARTZ , 1.0F, 32, 1, 1 |4|8 |64 , 230, 210, 210, 0, "Nether Quartz" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_AspectStack(TC_Aspects.VITREUS, 1))),
+ NetherStar ( 506, TextureSet.SET_NETHERSTAR , 1.0F, 5120, 4, 1 |4 |64 , 255, 255, 255, 0, "Nether Star" , 5, 50000, -1, 0, F, F, 15, 1, 1, Dyes.dyeWhite ),
+ Nikolite ( 812, TextureSet.SET_SHINY , 1.0F, 0, 1, 1 |8 , 60, 180, 200, 0, "Nikolite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeCyan , Arrays.asList(new TC_AspectStack(TC_Aspects.ELECTRUM, 2))),
+ ObsidianFlux ( -1, TextureSet.SET_DULL , 1.0F, 0, 1, 1|2 , 80, 50, 100, 0, "Fluxed Obsidian" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple ),
+ Oilsands ( 878, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 10, 10, 10, 0, "Oilsands" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Onyx ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Onyx" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Orichalcum ( 966, TextureSet.SET_METALLIC , 4.5F, 3456, 3, 1|2 |8 |64 , 84, 122, 56, 0, "Orichalcum" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Osmonium ( -1, TextureSet.SET_NONE , 6.0F, 64, 1, 1|2 |8 |64 , 255, 255, 255, 0, "Osmonium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlue ),
+ Oureclase ( 961, TextureSet.SET_METALLIC , 6.0F, 1920, 3, 1|2 |8 |64 , 183, 98, 21, 0, "Oureclase" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Painite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Painite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Peanutwood ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Peanut Wood" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Petroleum ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Petroleum" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Pewter ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Pewter" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Phoenixite ( -1, TextureSet.SET_NONE , 6.0F, 64, 1, 1|2 |8 |64 , 255, 255, 255, 0, "Phoenixite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Potash ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Potash" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Prometheum ( 960, TextureSet.SET_METALLIC , 8.0F, 512, 1, 1|2 |8 |64 , 90, 129, 86, 0, "Prometheum" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Quartzite ( 523, TextureSet.SET_QUARTZ , 1.0F, 0, 1, 1 |4|8 , 210, 230, 210, 0, "Quartzite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeWhite ),
+ Quicklime ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Quicklime" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Randomite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Randomite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ RefinedGlowstone (-326, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1|2 , 255, 255, 0, 0, "Refined Glowstone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ RefinedObsidian (-327, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1|2 , 80, 50, 100, 0, "Refined Obsidian" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple ),
+ Rhyolite ( 875, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Rhyolite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Rubracium ( 488, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8|16 , 151, 45, 45, 0, "Rubracium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ RyuDragonRyder ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Ryu Dragon Ryder" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Sand ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Sanguinite ( 955, TextureSet.SET_METALLIC , 3.0F, 4480, 4, 1|2 |8 , 185, 0, 0, 0, "Sanguinite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Siltstone ( 876, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Siltstone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Spinel ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 0, "Spinel" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Starconium ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1|2 |8 , 255, 255, 255, 0, "Starconium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Sugilite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Sugilite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Sunstone ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Sunstone" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.ALIENIS, 1))),
+ Tar ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 10, 10, 10, 0, "Tar" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack ),
+ Tartarite ( 956, TextureSet.SET_METALLIC , 20.0F, 7680, 5, 1|2 |8|16 , 255, 118, 60, 0, "Tartarite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Tapazite ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Tapazite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen ),
+ Thyrium ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1|2 |8 , 255, 255, 255, 0, "Thyrium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Tourmaline ( -1, TextureSet.SET_RUBY , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Tourmaline" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ Tritanium ( 329, TextureSet.SET_METALLIC , 6.0F, 2560, 4, 1|2 |64 , 255, 255, 255, 0, "Tritanium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ORDO, 2))),
+ Turquoise ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Turquoise" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes._NULL ),
+ UUAmplifier ( 721, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 96, 0, 128, 0, "UU-Amplifier" , 0, 0, -1, 0, F, F, 10, 1, 1, Dyes.dyePink ),
+ UUMatter ( 703, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 128, 0, 196, 0, "UU-Matter" , 0, 0, -1, 0, F, F, 10, 1, 1, Dyes.dyePink ),
+ Void ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 200, "Void" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes._NULL , Arrays.asList(new TC_AspectStack(TC_Aspects.VACUOS, 1))),
+ Voidstone ( -1, TextureSet.SET_NONE , 1.0F, 0, 1, 0 , 255, 255, 255, 200, "Voidstone" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes._NULL , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.VACUOS, 1))),
+ Vulcanite ( 489, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |8|16 |64 , 255, 132, 72, 0, "Vulcanite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Vyroxeres ( 951, TextureSet.SET_METALLIC , 9.0F, 768, 3, 1|2 |8 |64 , 85, 224, 1, 0, "Vyroxeres" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL ),
+ Wimalite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 8 , 255, 255, 255, 0, "Wimalite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow ),
+ Yellorite ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 8 , 255, 255, 255, 0, "Yellorite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow ),
+ Yellorium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 , 255, 255, 255, 0, "Yellorium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow ),
+ Zectium ( -1, TextureSet.SET_NONE , 1.0F, 0, 2, 1|2 |8 , 255, 255, 255, 0, "Zectium" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlack ),
+
+ /**
+ * Circuitry, Batteries and other Technical things
+ */
+ Primitive ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Primitive" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 1))),
+ Basic ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Basic" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 2))),
+ Good ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Good" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 3))),
+ Advanced ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Advanced" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 4))),
+ Data ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Data" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 5))),
+ Elite ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Elite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 6))),
+ Master ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Master" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 7))),
+ Ultimate ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Ultimate" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 8))),
+ Superconductor ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Superconductor" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.ELECTRUM, 8))),
+ Infinite ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Infinite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray ),
+
+ /**
+ * Not possible to determine exact Components
+ */
+ Antimatter ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Antimatter" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 9), new TC_AspectStack(TC_Aspects.PERFODIO, 8))),
+ BioFuel ( 705, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 255, 128, 0, 0, "Biofuel" , 0, 6, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange ),
+ Biomass ( 704, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 0, 255, 0, 0, "Biomass" , 3, 8, -1, 0, F, F, 1, 1, 1, Dyes.dyeGreen ),
+ Cheese ( 894, TextureSet.SET_FINE , 1.0F, 0, 0, 1 |8 , 255, 255, 0, 0, "Cheese" , 0, 0, 320, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Chili ( 895, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 200, 0, 0, 0, "Chili" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed ),
+ Chocolate ( 886, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 190, 95, 0, 0, "Chocolate" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown ),
+ Cluster ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 127, "Cluster" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes.dyeWhite ),
+ CoalFuel ( 710, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 50, 50, 70, 0, "Coalfuel" , 0, 16, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack ),
+ Cocoa ( 887, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 190, 95, 0, 0, "Cocoa" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown ),
+ Coffee ( 888, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 150, 75, 0, 0, "Coffee" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown ),
+ Creosote ( 712, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 128, 64, 0, 0, "Creosote" , 3, 8, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown ),
+ Ethanol ( 706, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 255, 128, 0, 0, "Ethanol" , 0, 128, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple ),
+ FishOil ( 711, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 255, 196, 0, 0, "Fish Oil" , 3, 2, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.CORPUS, 2))),
+ Fuel ( 708, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 255, 255, 0, 0, "Diesel" , 0, 128, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Glue ( 726, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 200, 196, 0, 0, "Glue" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , Arrays.asList(new TC_AspectStack(TC_Aspects.LIMUS, 2))),
+ Gunpowder ( 800, TextureSet.SET_DULL , 1.0F, 0, 0, 1 , 128, 128, 128, 0, "Gunpowder" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 3), new TC_AspectStack(TC_Aspects.IGNIS, 4))),
+ FryingOilHot ( 727, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 200, 196, 0, 0, "Hot Frying Oil" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 1), new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ Honey ( 725, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 210, 200, 0, 0, "Honey" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Leather ( -1, TextureSet.SET_ROUGH , 1.0F, 0, 0, 1 , 150, 150, 80, 127, "Leather" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange ),
+ LimePure ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Pure Lime" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime ),
+ Lubricant ( 724, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 255, 196, 0, 0, "Lubricant" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2), new TC_AspectStack(TC_Aspects.MACHINA, 1))),
+ McGuffium239 ( 999, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 200, 50, 150, 0, "Mc Guffium 239" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , Arrays.asList(new TC_AspectStack(TC_Aspects.ALIENIS, 8), new TC_AspectStack(TC_Aspects.PERMUTATIO, 8), new TC_AspectStack(TC_Aspects.SPIRITUS, 8), new TC_AspectStack(TC_Aspects.AURAM, 8), new TC_AspectStack(TC_Aspects.VITIUM, 8), new TC_AspectStack(TC_Aspects.RADIO, 8), new TC_AspectStack(TC_Aspects.MAGNETO, 8), new TC_AspectStack(TC_Aspects.ELECTRUM, 8), new TC_AspectStack(TC_Aspects.NEBRISUM, 8), new TC_AspectStack(TC_Aspects.STRONTIO, 8))),
+ MeatRaw ( 892, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 255, 100, 100, 0, "Raw Meat" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink ),
+ MeatCooked ( 893, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 150, 60, 20, 0, "Cooked Meat" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink ),
+ Milk ( 885, TextureSet.SET_FINE , 1.0F, 0, 0, 1 |16 , 254, 254, 254, 0, "Milk" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.SANO, 2))),
+ Mud ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Mud" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown ),
+ Oil ( 707, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 10, 10, 10, 0, "Oil" , 3, 16, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack ),
+ Paper ( 879, TextureSet.SET_PAPER , 1.0F, 0, 0, 1 , 250, 250, 250, 0, "Paper" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.COGNITO, 1))),
+ Peat ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Peat" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_AspectStack(TC_Aspects.IGNIS, 2))),
+ Quantum ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Quantum" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite ),
+ RareEarth ( 891, TextureSet.SET_FINE , 1.0F, 0, 0, 1 , 128, 128, 100, 0, "Rare Earth" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_AspectStack(TC_Aspects.LUCRUM, 1))),
+ Red ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 0, 0, 0, "Red" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed ),
+ Reinforced ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Reinforced" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray ),
+ SeedOil ( 713, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 196, 255, 0, 0, "Seed Oil" , 3, 2, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime , Arrays.asList(new TC_AspectStack(TC_Aspects.GRANUM, 2))),
+ SeedOilHemp ( 722, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 196, 255, 0, 0, "Hemp Seed Oil" , 3, 2, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime , Arrays.asList(new TC_AspectStack(TC_Aspects.GRANUM, 2))),
+ SeedOilLin ( 723, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 196, 255, 0, 0, "Lin Seed Oil" , 3, 2, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime , Arrays.asList(new TC_AspectStack(TC_Aspects.GRANUM, 2))),
+ Stone ( 299, TextureSet.SET_ROUGH , 4.0F, 32, 1, 1 |64|128 , 205, 205, 205, 0, "Stone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , Arrays.asList(new TC_AspectStack(TC_Aspects.TERRA, 1))),
+ TNT ( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "TNT" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed , Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 7), new TC_AspectStack(TC_Aspects.IGNIS, 4))),
+ Unstable ( -1, TextureSet.SET_NONE , 1.0F, 0, 4, 0 , 255, 255, 255, 127, "Unstable" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 4))),
+ Unstableingot ( -1, TextureSet.SET_NONE , 1.0F, 0, 4, 0 , 255, 255, 255, 127, "Unstable" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes.dyeWhite , Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 4))),
+ Wheat ( 881, TextureSet.SET_POWDER , 1.0F, 0, 0, 1 , 255, 255, 196, 0, "Wheat" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , Arrays.asList(new TC_AspectStack(TC_Aspects.MESSIS, 2))),
+
+ /**
+ * TODO: This
+ */
+ AluminiumBrass ( -1, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |64 , 255, 255, 255, 0, "Aluminium Brass" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Osmiridium ( 317, TextureSet.SET_METALLIC , 8.0F, 3000, 4, 1|2 |64|128 , 100, 100, 255, 0, "Osmiridium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightBlue ),
+ Sunnarium ( 318, TextureSet.SET_SHINY , 1.0F, 0, 1, 1|2 , 255, 255, 0, 0, "Sunnarium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow ),
+ Endstone ( 808, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 255, 255, 255, 0, "Endstone" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeYellow ),
+ Netherrack ( 807, TextureSet.SET_DULL , 1.0F, 0, 0, 1 , 200, 0, 0, 0, "Netherrack" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeRed ),
+ SoulSand ( -1, TextureSet.SET_DULL , 1.0F, 0, 0, 1 , 255, 255, 255, 0, "Soulsand" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeBrown ),
+
+ /**
+ * First Degree Compounds
+ */
+ Air ( -1, TextureSet.SET_FLUID , 1.0F, 0, 2, 16|32 , 169, 208, 245, 240, "Air" , 0, 0, -1, 0, F, T, 1, 1, 1, Dyes.dyeLightBlue , 0, Arrays.asList(new MaterialStack(Nitrogen, 40), new MaterialStack(Oxygen, 11), new MaterialStack(Argon, 1))),
+ Almandine ( 820, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |8 , 255, 0, 0, 0, "Almandine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Iron, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ Andradite ( 821, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |8 , 150, 120, 0, 0, "Andradite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow , 1, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Iron, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ AnnealedCopper ( 345, TextureSet.SET_SHINY , 1.0F, 0, 2, 1|2 |128 , 255, 120, 20, 0, "Annealed Copper" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Copper, 1))),
+ Asbestos ( 946, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 230, 230, 230, 0, "Asbestos" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 2), new MaterialStack(Hydrogen, 4), new MaterialStack(Oxygen, 9))), // Mg3Si2O5(OH)4
+ Ash ( 815, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 150, 150, 150, 0, "Ashes" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , 2, Arrays.asList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, 1))),
+ BandedIron ( 917, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 145, 90, 90, 0, "Banded Iron" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , 1, Arrays.asList(new MaterialStack(Iron, 2), new MaterialStack(Oxygen, 3))),
+ BatteryAlloy ( 315, TextureSet.SET_DULL , 1.0F, 0, 1, 1|2 , 156, 124, 160, 0, "Battery Alloy" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple , 2, Arrays.asList(new MaterialStack(Lead, 4), new MaterialStack(Antimony, 1))),
+ Bauxite ( 822, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 200, 100, 0, 0, "Bauxite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBrown , 1, Arrays.asList(new MaterialStack(Titanium, 1), new MaterialStack(Aluminium, 16), new MaterialStack(Hydrogen, 10), new MaterialStack(Oxygen, 12))),
+ BlueTopaz ( 513, TextureSet.SET_GEM_HORIZONTAL , 7.0F, 256, 3, 1 |4|8 |64 , 0, 0, 255, 127, "Blue Topaz" , 0, 0, -1, 0, F, T, 3, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_AspectStack(TC_Aspects.VITREUS, 4))),
+ Bone ( 806, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 250, 250, 250, 0, "Bone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 0, Arrays.asList(new MaterialStack(Calcium, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.MORTUUS, 2), new TC_AspectStack(TC_Aspects.CORPUS, 1))),
+ Brass ( 301, TextureSet.SET_METALLIC , 7.0F, 96, 1, 1|2 |64|128 , 255, 180, 0, 0, "Brass" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Zinc, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Bronze ( 300, TextureSet.SET_METALLIC , 6.0F, 192, 2, 1|2 |64|128 , 255, 128, 0, 0, "Bronze" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ BrownLimonite ( 930, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8 , 200, 100, 0, 0, "Brown Limonite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 2))), // FeO(OH)
+ Calcite ( 823, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 250, 230, 220, 0, "Calcite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3))),
+ Cassiterite ( 824, TextureSet.SET_METALLIC , 1.0F, 0, 1, 8 , 220, 220, 220, 0, "Cassiterite" , 0, 0, -1, 0, F, F, 4, 3, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Oxygen, 2))),
+ CassiteriteSand ( 937, TextureSet.SET_SAND , 1.0F, 0, 1, 8 , 220, 220, 220, 0, "Cassiterite Sand" , 0, 0, -1, 0, F, F, 4, 3, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Oxygen, 2))),
+ Celestine ( 913, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 200, 205, 240, 0, "Celestine" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , 1, Arrays.asList(new MaterialStack(Strontium, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Oxygen, 4))),
+ Chalcopyrite ( 855, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 160, 120, 40, 0, "Chalcopyrite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , 1, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Iron, 1), new MaterialStack(Sulfur, 2))),
+ Chalk ( 856, TextureSet.SET_FINE , 1.0F, 0, 2, 1 , 250, 250, 250, 0, "Chalk" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3))),
+ Charcoal ( 536, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |4 , 100, 70, 70, 0, "Charcoal" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_AspectStack(TC_Aspects.IGNIS, 2))),
+ Chromite ( 825, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8 , 35, 20, 15, 0, "Chromite" , 0, 0, 1700, 1700, T, F, 6, 1, 1, Dyes.dyePink , 1, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Chrome, 2), new MaterialStack(Oxygen, 4))),
+ ChromiumDioxide ( 361, TextureSet.SET_DULL , 11.0F, 256, 3, 1|2 , 230, 200, 200, 0, "Chromium Dioxide" , 0, 0, 650, 650, F, F, 5, 3, 1, Dyes.dyePink , 1, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Oxygen, 2)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MACHINA, 1))),
+ Cinnabar ( 826, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |8 , 150, 0, 0, 0, "Cinnabar" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBrown , 2, Arrays.asList(new MaterialStack(Mercury, 1), new MaterialStack(Sulfur, 1))),
+ Clay ( 805, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 , 200, 200, 220, 0, "Clay" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeLightBlue , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Lithium, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 2))),
+ Coal ( 535, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |4|8 , 70, 70, 70, 0, "Coal" , 0, 0, -1, 0, F, F, 2, 2, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_AspectStack(TC_Aspects.IGNIS, 2))),
+ Cobaltite ( 827, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8 , 80, 80, 250, 0, "Cobaltite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(Cobalt, 1), new MaterialStack(Arsenic, 1), new MaterialStack(Sulfur, 1))),
+ Cooperite ( 828, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8 , 255, 255, 200, 0, "Sheldonite" , 0, 0, -1, 0, F, F, 5, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Platinum, 3), new MaterialStack(Nickel, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Palladium, 1))),
+ Cupronickel ( 310, TextureSet.SET_METALLIC , 6.0F, 64, 1, 1|2 |64 , 227, 150, 128, 0, "Cupronickel" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Nickel, 1))),
+ DarkAsh ( 816, TextureSet.SET_DULL , 1.0F, 0, 1, 1 , 50, 50, 50, 0, "Dark Ashes" , 0, 0, -1, 0, F, F, 1, 2, 1, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.IGNIS, 1), new TC_AspectStack(TC_Aspects.PERDITIO, 1))),
+ DeepIron ( 829, TextureSet.SET_METALLIC , 6.0F, 384, 2, 1|2 |8 |64 , 150, 140, 140, 0, "Deep Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyePink , 2, Arrays.asList(new MaterialStack(Iron, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ Diamond ( 500, TextureSet.SET_DIAMOND , 8.0F, 1280, 3, 1 |4|8 |64|128 , 200, 255, 255, 127, "Diamond" , 0, 0, -1, 0, F, T, 5, 64, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_AspectStack(TC_Aspects.LUCRUM, 4))),
+ Electrum ( 303, TextureSet.SET_SHINY , 12.0F, 64, 2, 1|2 |8 |64|128 , 255, 255, 100, 0, "Electrum" , 0, 0, -1, 0, F, F, 4, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(Gold, 1))),
+ Emerald ( 501, TextureSet.SET_EMERALD , 7.0F, 256, 2, 1 |4|8 |64 , 80, 255, 80, 127, "Emerald" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeGreen , 1, Arrays.asList(new MaterialStack(Beryllium, 3), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 6), new MaterialStack(Oxygen, 18)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_AspectStack(TC_Aspects.LUCRUM, 5))),
+ FreshWater ( -1, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 0, 0, 255, 0, "Fresh Water" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2))),
+ Galena ( 830, TextureSet.SET_DULL , 1.0F, 0, 3, 1 |8 , 100, 60, 100, 0, "Galena" , 0, 0, -1, 0, F, F, 4, 1, 1, Dyes.dyePurple , 1, Arrays.asList(new MaterialStack(Lead, 3), new MaterialStack(Silver, 3), new MaterialStack(Sulfur, 2))),
+ Garnierite ( 906, TextureSet.SET_METALLIC , 1.0F, 0, 3, 1 |8 , 50, 200, 70, 0, "Garnierite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightBlue , 1, Arrays.asList(new MaterialStack(Nickel, 1), new MaterialStack(Oxygen, 1))),
+ Glyceryl ( 714, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 0, 150, 150, 0, "Glyceryl Trinitrate" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Carbon, 3), new MaterialStack(Hydrogen, 5), new MaterialStack(Nitrogen, 3), new MaterialStack(Oxygen, 9))),
+ GreenSapphire ( 504, TextureSet.SET_GEM_HORIZONTAL , 7.0F, 256, 2, 1 |4|8 |64 , 100, 200, 130, 127, "Green Sapphire" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Grossular ( 831, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |8 , 200, 100, 0, 0, "Grossular" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ HolyWater ( 729, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 0, 0, 255, 0, "Holy Water" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2), new TC_AspectStack(TC_Aspects.AURAM, 1))),
+ Ice ( 702, TextureSet.SET_SHINY , 1.0F, 0, 0, 1| 16 , 200, 200, 255, 0, "Ice" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.GELUM, 2))),
+ Ilmenite ( 918, TextureSet.SET_METALLIC , 1.0F, 0, 3, 1 |8 , 70, 55, 50, 0, "Ilmenite" , 0, 0, -1, 0, F, F, 1, 2, 1, Dyes.dyePurple , 1, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Titanium, 1), new MaterialStack(Oxygen, 3))),
+ Invar ( 302, TextureSet.SET_METALLIC , 6.0F, 256, 2, 1|2 |64|128 , 180, 180, 120, 0, "Invar" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , 2, Arrays.asList(new MaterialStack(Iron, 2), new MaterialStack(Nickel, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.GELUM, 1))),
+ IronCompressed ( -1, TextureSet.SET_METALLIC , 7.0F, 96, 1, 1|2 |64|128 , 128, 128, 128, 0, "Compressed Iron" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(Iron, 1))),
+ Kanthal ( 312, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |64 , 194, 210, 223, 0, "Kanthal" , 0, 0, 1800, 1800, T, F, 1, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Chrome, 1))),
+ Lazurite ( 524, TextureSet.SET_LAPIS , 1.0F, 0, 1, 1 |4|8 , 100, 120, 255, 0, "Lazurite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Aluminium, 6), new MaterialStack(Silicon, 6), new MaterialStack(Calcium, 8), new MaterialStack(Sodium, 8))),
+ Magnalium ( 313, TextureSet.SET_DULL , 6.0F, 256, 2, 1|2 |64|128 , 200, 190, 255, 0, "Magnalium" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightBlue , 2, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Aluminium, 2))),
+ Magnesite ( 908, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 250, 250, 180, 0, "Magnesite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3))),
+ Magnetite ( 870, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 30, 30, 30, 0, "Magnetite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Iron, 3), new MaterialStack(Oxygen, 4)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ Methane ( 715, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 255, 255, 255, 0, "Methane" , 1, 45, -1, 0, F, F, 3, 1, 1, Dyes.dyeMagenta , 1, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Hydrogen, 4))),
+ Molybdenite ( 942, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 25, 25, 25, 0, "Molybdenite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(Molybdenum, 1), new MaterialStack(Sulfur, 2))), // MoS2 (also source of Re)
+ Nichrome ( 311, TextureSet.SET_METALLIC , 6.0F, 64, 2, 1|2 |64 , 205, 206, 246, 0, "Nichrome" , 0, 0, 2700, 2700, T, F, 1, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Nickel, 4), new MaterialStack(Chrome, 1))),
+ NiobiumNitride ( 359, TextureSet.SET_DULL , 1.0F, 0, 2, 1|2 , 29, 41, 29, 0, "Niobium Nitride" , 0, 0, 2573, 2573, T, F, 1, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Niobium, 1), new MaterialStack(Nitrogen, 1))), // Anti-Reflective Material
+ NiobiumTitanium ( 360, TextureSet.SET_DULL , 1.0F, 0, 2, 1|2 , 29, 29, 41, 0, "Niobium-Titanium" , 0, 0, 2800, 2800, T, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Niobium, 1), new MaterialStack(Titanium, 1))),
+ NitroCarbon ( 716, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 0, 75, 100, 0, "Nitro-Carbon" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Nitrogen, 1), new MaterialStack(Carbon, 1))),
+ NitrogenDioxide ( 717, TextureSet.SET_FLUID , 1.0F, 0, 1, 16 , 100, 175, 255, 0, "Nitrogen Dioxide" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Nitrogen, 1), new MaterialStack(Oxygen, 2))),
+ Obsidian ( 804, TextureSet.SET_DULL , 1.0F, 0, 3, 1 , 80, 50, 100, 0, "Obsidian" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Iron, 1), new MaterialStack(Silicon, 2), new MaterialStack(Oxygen, 8))),
+ Phosphate ( 833, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8|16 , 255, 255, 0, 0, "Phosphate" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeYellow , 1, Arrays.asList(new MaterialStack(Phosphor, 1), new MaterialStack(Oxygen, 4))),
+ PigIron ( 307, TextureSet.SET_METALLIC , 6.0F, 384, 2, 1|2 |8 |64 , 200, 180, 180, 0, "Pig Iron" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyePink , 2, Arrays.asList(new MaterialStack(Iron, 1))),
+ Plastic ( 874, TextureSet.SET_DULL , 3.0F, 32, 1, 1|2 |64|128 , 200, 200, 200, 0, "Plastic" , 0, 0, 400, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Hydrogen, 2)), Arrays.asList(new TC_AspectStack(TC_Aspects.MOTUS, 2))),
+ Powellite ( 883, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 255, 255, 0, 0, "Powellite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Molybdenum, 1), new MaterialStack(Oxygen, 4))),
+ Pumice ( 926, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 230, 185, 185, 0, "Pumice" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(Stone, 1))),
+ Pyrite ( 834, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 |8 , 150, 120, 40, 0, "Pyrite" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Sulfur, 2))),
+ Pyrolusite ( 943, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 150, 150, 170, 0, "Pyrolusite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , 1, Arrays.asList(new MaterialStack(Manganese, 1), new MaterialStack(Oxygen, 2))),
+ Pyrope ( 835, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 120, 50, 100, 0, "Pyrope" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyePurple , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ RockSalt ( 944, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |8 , 240, 200, 200, 0, "Rock Salt" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Chlorine, 1))),
+ Rubber ( 880, TextureSet.SET_SHINY , 1.5F, 16, 0, 1|2 |64|128 , 0, 0, 0, 0, "Rubber" , 0, 0, 400, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 0, Arrays.asList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 8)), Arrays.asList(new TC_AspectStack(TC_Aspects.MOTUS, 2))),
+ Ruby ( 502, TextureSet.SET_RUBY , 7.0F, 256, 2, 1 |4|8 |64 , 255, 100, 100, 127, "Ruby" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeRed , 1, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_AspectStack(TC_Aspects.VITREUS, 4))),
+ Salt ( 817, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |8 , 250, 250, 250, 0, "Salt" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Chlorine, 1))),
+ Saltpeter ( 836, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |8 , 230, 230, 230, 0, "Saltpeter" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Nitrogen, 1), new MaterialStack(Oxygen, 3))),
+ SaltWater ( -1, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 0, 0, 255, 0, "Salt Water" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2))),
+ Sapphire ( 503, TextureSet.SET_GEM_VERTICAL , 7.0F, 256, 2, 1 |4|8 |64 , 100, 100, 200, 127, "Sapphire" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Scheelite ( 910, TextureSet.SET_DULL , 1.0F, 0, 3, 1 |8 , 200, 140, 20, 0, "Scheelite" , 0, 0, 2500, 2500, F, F, 4, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Tungsten, 1), new MaterialStack(Calcium, 2), new MaterialStack(Oxygen, 4))),
+ SiliconDioxide ( 837, TextureSet.SET_QUARTZ , 1.0F, 0, 1, 1 |16 , 200, 200, 200, 0, "Silicon Dioxide" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLightGray , 1, Arrays.asList(new MaterialStack(Silicon, 1), new MaterialStack(Oxygen, 2))),
+ Snow ( 728, TextureSet.SET_FINE , 1.0F, 0, 0, 1| 16 , 250, 250, 250, 0, "Snow" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.GELUM, 1))),
+ Sodalite ( 525, TextureSet.SET_LAPIS , 1.0F, 0, 1, 1 |4|8 , 20, 20, 255, 0, "Sodalite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Sodium, 4), new MaterialStack(Chlorine, 1))),
+ SodiumPersulfate ( 718, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 255, 255, 255, 0, "Sodium Persulfate" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Oxygen, 4))),
+ SodiumSulfide ( 719, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 255, 255, 255, 0, "Sodium Sulfide" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Sulfur, 1))),
+ SolderingAlloy ( 314, TextureSet.SET_DULL , 1.0F, 0, 1, 1|2 , 220, 220, 230, 0, "Soldering Alloy" , 0, 0, 400, 400, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Tin, 9), new MaterialStack(Antimony, 1))),
+ Spessartine ( 838, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 255, 100, 100, 0, "Spessartine" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Manganese, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ Sphalerite ( 839, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 255, 255, 255, 0, "Sphalerite" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeYellow , 1, Arrays.asList(new MaterialStack(Zinc, 1), new MaterialStack(Sulfur, 1))),
+ StainlessSteel ( 306, TextureSet.SET_SHINY , 7.0F, 480, 2, 1|2 |64|128 , 200, 200, 220, 0, "Stainless Steel" , 0, 0, -1, 1700, T, F, 1, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Iron, 6), new MaterialStack(Chrome, 1), new MaterialStack(Manganese, 1), new MaterialStack(Nickel, 1))),
+ Steel ( 305, TextureSet.SET_METALLIC , 6.0F, 512, 2, 1|2 |64|128 , 128, 128, 128, 0, "Steel" , 0, 0, 1811, 1000, T, F, 4, 51, 50, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Iron, 50), new MaterialStack(Carbon, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.ORDO, 1))),
+ Stibnite ( 945, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 70, 70, 70, 0, "Stibnite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Antimony, 2), new MaterialStack(Sulfur, 3))),
+ SulfuricAcid ( 720, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 255, 128, 0, 0, "Sulfuric Acid" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Sulfur, 1), new MaterialStack(Oxygen, 4))),
+ Tanzanite ( 508, TextureSet.SET_GEM_VERTICAL , 7.0F, 256, 2, 1 |4|8 |64 , 64, 0, 200, 127, "Tanzanite" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyePurple , 1, Arrays.asList(new MaterialStack(Calcium, 2), new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 13)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Tetrahedrite ( 840, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 200, 32, 0, 0, "Tetrahedrite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Copper, 3), new MaterialStack(Antimony, 1), new MaterialStack(Sulfur, 3), new MaterialStack(Iron, 1))), //Cu3SbS3 + x(Fe,Zn)6Sb2S9
+ TinAlloy ( 363, TextureSet.SET_METALLIC , 6.5F, 96, 2, 1|2 |64|128 , 200, 200, 200, 0, "Tin Alloy" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Iron, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Topaz ( 507, TextureSet.SET_GEM_HORIZONTAL , 7.0F, 256, 3, 1 |4|8 |64 , 255, 128, 0, 127, "Topaz" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeOrange , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_AspectStack(TC_Aspects.VITREUS, 4))),
+ Tungstate ( 841, TextureSet.SET_DULL , 1.0F, 0, 3, 1 |8 , 55, 50, 35, 0, "Tungstate" , 0, 0, 2500, 2500, T, F, 4, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Tungsten, 1), new MaterialStack(Lithium, 2), new MaterialStack(Oxygen, 4))),
+ Ultimet ( 344, TextureSet.SET_SHINY , 6.0F, 512, 3, 1|2 |64|128 , 180, 180, 230, 0, "Ultimet" , 0, 0, 2700, 2700, T, F, 1, 1, 1, Dyes.dyeLightBlue , 1, Arrays.asList(new MaterialStack(Cobalt, 5), new MaterialStack(Chrome, 2), new MaterialStack(Nickel, 1), new MaterialStack(Molybdenum, 1))), // 54% Cobalt, 26% Chromium, 9% Nickel, 5% Molybdenum, 3% Iron, 2% Tungsten, 0.8% Manganese, 0.3% Silicon, 0.08% Nitrogen and 0.06% Carbon
+ Uraninite ( 922, TextureSet.SET_METALLIC , 1.0F, 0, 3, 1 |8 , 35, 35, 35, 0, "Uraninite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime , 2, Arrays.asList(new MaterialStack(Uranium, 1), new MaterialStack(Oxygen, 2))),
+ Uvarovite ( 842, TextureSet.SET_DIAMOND , 1.0F, 0, 2, 1 |8 , 180, 255, 180, 0, "Uvarovite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen , 1, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Chrome, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12))),
+ VanadiumGallium ( 357, TextureSet.SET_SHINY , 1.0F, 0, 2, 1|2 , 128, 128, 140, 0, "Vanadium-Gallium" , 0, 0, 3000, 3000, T, F, 1, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(Vanadium, 3), new MaterialStack(Gallium, 1))),
+ Water ( 701, TextureSet.SET_FLUID , 1.0F, 0, 0, 16 , 0, 0, 255, 0, "Water" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlue , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.AQUA, 2))),
+ Wood ( 809, TextureSet.SET_WOOD , 2.0F, 16, 0, 1|2 |64|128 , 100, 50, 0, 0, "Wood" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 1), new MaterialStack(Hydrogen, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.ARBOR, 2))),
+ WroughtIron ( 304, TextureSet.SET_METALLIC , 6.0F, 384, 2, 1|2 |64|128 , 200, 180, 180, 0, "Wrought Iron" , 0, 0, 1811, 0, F, F, 3, 1, 1, Dyes.dyeLightGray , 2, Arrays.asList(new MaterialStack(Iron, 1))),
+ Wulfenite ( 882, TextureSet.SET_DULL , 1.0F, 0, 3, 1 |8 , 255, 128, 0, 0, "Wulfenite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Lead, 1), new MaterialStack(Molybdenum, 1), new MaterialStack(Oxygen, 4))),
+ YellowLimonite ( 931, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 200, 200, 0, 0, "Yellow Limonite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 2))), // FeO(OH) + a bit Ni and Co
+ YttriumBariumCuprate( 358, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1|2 , 80, 64, 70, 0, "Yttrium Barium Cuprate" , 0, 0, 1200, 1200, T, F, 1, 1, 1, Dyes.dyeGray , 0, Arrays.asList(new MaterialStack(Yttrium, 1), new MaterialStack(Barium, 2), new MaterialStack(Copper, 3), new MaterialStack(Oxygen, 7))),
+
+ /**
+ * Second Degree Compounds
+ */
+ WoodSealed ( 889, TextureSet.SET_WOOD , 3.0F, 24, 0, 1|2 |64|128 , 80, 40, 0, 0, "Sealed Wood" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBrown , 0, Arrays.asList(new MaterialStack(Wood, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.ARBOR, 2), new TC_AspectStack(TC_Aspects.FABRICO, 1))),
+ LiveRoot ( 832, TextureSet.SET_WOOD , 1.0F, 0, 1, 1 , 220, 200, 0, 0, "Liveroot" , 5, 16, -1, 0, F, F, 2, 4, 3, Dyes.dyeBrown , 2, Arrays.asList(new MaterialStack(Wood, 3), new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.ARBOR, 2), new TC_AspectStack(TC_Aspects.VICTUS, 2), new TC_AspectStack(TC_Aspects.PRAECANTIO, 1))),
+ IronWood ( 338, TextureSet.SET_WOOD , 6.0F, 384, 2, 1|2 |64|128 , 150, 140, 110, 0, "Ironwood" , 5, 8, -1, 0, F, F, 2, 19, 18, Dyes.dyeBrown , 2, Arrays.asList(new MaterialStack(Iron, 9), new MaterialStack(LiveRoot, 9), new MaterialStack(Gold, 1))),
+ Glass ( 890, TextureSet.SET_GLASS , 1.0F, 4, 0, 1 |4 , 250, 250, 250, 220, "Glass" , 0, 0, 1500, 0, F, T, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 2))),
+ Perlite ( 925, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 30, 20, 30, 0, "Perlite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Obsidian, 2), new MaterialStack(Water, 1))),
+ Borax ( 941, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |8 , 250, 250, 250, 0, "Borax" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Boron, 4), new MaterialStack(Water, 10), new MaterialStack(Oxygen, 7))),
+ Lignite ( 538, TextureSet.SET_LIGNITE , 1.0F, 0, 0, 1 |4|8 , 100, 70, 70, 0, "Lignite Coal" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Water, 4), new MaterialStack(DarkAsh, 1))),
+ Olivine ( 505, TextureSet.SET_RUBY , 7.0F, 256, 2, 1 |4|8 |64 , 150, 255, 150, 127, "Olivine" , 0, 0, -1, 0, F, T, 5, 1, 1, Dyes.dyeLime , 1, Arrays.asList(new MaterialStack(Magnesium, 2), new MaterialStack(Iron, 1), new MaterialStack(SiliconDioxide, 2)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 4), new TC_AspectStack(TC_Aspects.VITREUS, 2))),
+ Opal ( 510, TextureSet.SET_OPAL , 7.0F, 256, 2, 1 |4|8 |64 , 0, 0, 255, 0, "Opal" , 0, 0, -1, 0, F, T, 3, 1, 1, Dyes.dyeBlue , 1, Arrays.asList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Amethyst ( 509, TextureSet.SET_FLINT , 7.0F, 256, 3, 1 |4|8 |64 , 210, 50, 210, 127, "Amethyst" , 0, 0, -1, 0, F, T, 3, 1, 1, Dyes.dyePink , 1, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Iron, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_AspectStack(TC_Aspects.VITREUS, 4))),
+ Redstone ( 810, TextureSet.SET_ROUGH , 1.0F, 0, 2, 1 |8 , 200, 0, 0, 0, "Redstone" , 0, 0, 500, 0, F, F, 3, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Silicon, 1), new MaterialStack(Pyrite, 5), new MaterialStack(Ruby, 1), new MaterialStack(Mercury, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 1), new TC_AspectStack(TC_Aspects.POTENTIA, 2))),
+ Lapis ( 526, TextureSet.SET_LAPIS , 1.0F, 0, 1, 1 |4|8 , 70, 70, 220, 0, "Lapis" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeBlue , 2, Arrays.asList(new MaterialStack(Lazurite, 12), new MaterialStack(Sodalite, 2), new MaterialStack(Pyrite, 1), new MaterialStack(Calcite, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.SENSUS, 1))),
+ Blaze ( 801, TextureSet.SET_POWDER , 2.0F, 16, 1, 1 |64 , 255, 200, 0, 0, "Blaze" , 0, 0, 6400, 0, F, F, 2, 3, 2, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(DarkAsh, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 2), new TC_AspectStack(TC_Aspects.IGNIS, 4))),
+ EnderPearl ( 532, TextureSet.SET_SHINY , 1.0F, 16, 1, 1 |4 , 108, 220, 200, 0, "Enderpearl" , 0, 0, -1, 0, F, F, 1, 16, 10, Dyes.dyeGreen , 1, Arrays.asList(new MaterialStack(Beryllium, 1), new MaterialStack(Potassium, 4), new MaterialStack(Nitrogen, 5), new MaterialStack(Magic, 6)), Arrays.asList(new TC_AspectStack(TC_Aspects.ALIENIS, 4), new TC_AspectStack(TC_Aspects.ITER, 4), new TC_AspectStack(TC_Aspects.PRAECANTIO, 2))),
+ EnderEye ( 533, TextureSet.SET_SHINY , 1.0F, 16, 1, 1 |4 , 160, 250, 230, 0, "Endereye" , 5, 10, -1, 0, F, F, 1, 2, 1, Dyes.dyeGreen , 2, Arrays.asList(new MaterialStack(EnderPearl, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.SENSUS, 4), new TC_AspectStack(TC_Aspects.ALIENIS, 4), new TC_AspectStack(TC_Aspects.ITER, 4), new TC_AspectStack(TC_Aspects.PRAECANTIO, 3), new TC_AspectStack(TC_Aspects.IGNIS, 2))),
+ Flint ( 802, TextureSet.SET_FLINT , 2.5F, 64, 1, 1 |64 , 0, 32, 64, 0, "Flint" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.TERRA, 1), new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))),
+ Diatomite ( 948, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 225, 225, 225, 0, "Diatomite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(Flint, 8), new MaterialStack(BandedIron, 1), new MaterialStack(Sapphire, 1))),
+ VolcanicAsh ( 940, TextureSet.SET_FLINT , 1.0F, 0, 0, 1 , 60, 50, 50, 0, "Volcanic Ashes" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Flint, 6), new MaterialStack(Iron, 1), new MaterialStack(Magnesium, 1))),
+ Niter ( 531, TextureSet.SET_FLINT , 1.0F, 0, 1, 1 |4|8 , 255, 200, 200, 0, "Niter" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , 2, Arrays.asList(new MaterialStack(Saltpeter, 1))),
+ Pyrotheum ( 843, TextureSet.SET_FIERY , 1.0F, 0, 1, 1 , 255, 128, 0, 0, "Pyrotheum" , 2, 62, -1, 0, F, F, 2, 3, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Coal, 1), new MaterialStack(Redstone, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.PRAECANTIO, 2), new TC_AspectStack(TC_Aspects.IGNIS, 1))),
+ HydratedCoal ( 818, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 , 70, 70, 100, 0, "Hydrated Coal" , 0, 0, -1, 0, F, F, 1, 9, 8, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Coal, 8), new MaterialStack(Water, 1))),
+ Apatite ( 530, TextureSet.SET_DIAMOND , 1.0F, 0, 1, 1 |4|8 , 200, 200, 255, 0, "Apatite" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeCyan , 1, Arrays.asList(new MaterialStack(Calcium, 5), new MaterialStack(Phosphate, 3), new MaterialStack(Chlorine, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.MESSIS, 2))),
+ Alumite ( -1, TextureSet.SET_METALLIC , 1.5F, 64, 0, 1|2 |64 , 255, 255, 255, 0, "Alumite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , 2, Arrays.asList(new MaterialStack(Aluminium, 5), new MaterialStack(Iron, 2), new MaterialStack(Obsidian, 2)), Arrays.asList(new TC_AspectStack(TC_Aspects.STRONTIO, 2))),
+ Manyullyn ( -1, TextureSet.SET_METALLIC , 1.5F, 64, 0, 1|2 |64 , 255, 255, 255, 0, "Manyullyn" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple , 2, Arrays.asList(new MaterialStack(Cobalt, 1), new MaterialStack(Aredrite, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.STRONTIO, 2))),
+ ShadowIron ( 336, TextureSet.SET_METALLIC , 6.0F, 384, 2, 1|2 |8 |64 , 120, 120, 120, 0, "Shadowiron" , 0, 0, -1, 0, F, F, 3, 4, 3, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Iron, 3), new MaterialStack(Magic, 1))),
+ ShadowSteel ( 337, TextureSet.SET_METALLIC , 6.0F, 768, 2, 1|2 |64 , 90, 90, 90, 0, "Shadowsteel" , 0, 0, -1, 1700, T, F, 4, 4, 3, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Steel, 3), new MaterialStack(Magic, 1))),
+ Steeleaf ( 339, TextureSet.SET_LEAF , 8.0F, 768, 3, 1|2 |64|128 , 50, 127, 50, 0, "Steeleaf" , 5, 24, -1, 0, F, F, 4, 1, 1, Dyes.dyeGreen , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.HERBA, 2), new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.PRAECANTIO, 1))),
+ Knightmetal ( 362, TextureSet.SET_METALLIC , 8.0F, 1024, 3, 1|2 |64|128 , 210, 240, 200, 0, "Knightmetal" , 5, 24, -1, 0, F, F, 4, 1, 1, Dyes.dyeLime , 2, Arrays.asList(new MaterialStack(Steel, 2), new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.LUCRUM, 1), new TC_AspectStack(TC_Aspects.METALLUM, 2))),
+ SterlingSilver ( 350, TextureSet.SET_SHINY , 13.0F, 128, 2, 1|2 |64|128 , 250, 220, 225, 0, "Sterling Silver" , 0, 0, -1, 1700, T, F, 4, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Silver, 4))),
+ RoseGold ( 351, TextureSet.SET_SHINY , 14.0F, 128, 2, 1|2 |64|128 , 255, 230, 30, 0, "Rose Gold" , 0, 0, -1, 1600, T, F, 4, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Gold, 4))),
+ BlackBronze ( 352, TextureSet.SET_DULL , 12.0F, 256, 2, 1|2 |64|128 , 100, 50, 125, 0, "Black Bronze" , 0, 0, -1, 2000, T, F, 4, 1, 1, Dyes.dyePurple , 2, Arrays.asList(new MaterialStack(Gold, 1), new MaterialStack(Silver, 1), new MaterialStack(Copper, 3))),
+ BismuthBronze ( 353, TextureSet.SET_DULL , 8.0F, 256, 2, 1|2 |64|128 , 100, 125, 125, 0, "Bismuth Bronze" , 0, 0, -1, 1100, T, F, 4, 1, 1, Dyes.dyeCyan , 2, Arrays.asList(new MaterialStack(Bismuth, 1), new MaterialStack(Zinc, 1), new MaterialStack(Copper, 3))),
+ BlackSteel ( 334, TextureSet.SET_METALLIC , 6.5F, 768, 2, 1|2 |64 , 100, 100, 100, 0, "Black Steel" , 0, 0, -1, 1200, T, F, 4, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Nickel, 1), new MaterialStack(BlackBronze, 1), new MaterialStack(Steel, 3))),
+ RedSteel ( 348, TextureSet.SET_METALLIC , 7.0F, 896, 2, 1|2 |64 , 140, 100, 100, 0, "Red Steel" , 0, 0, -1, 1300, T, F, 4, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(SterlingSilver, 1), new MaterialStack(BismuthBronze, 1), new MaterialStack(Steel, 2), new MaterialStack(BlackSteel, 4))),
+ BlueSteel ( 349, TextureSet.SET_METALLIC , 7.5F, 1024, 2, 1|2 |64 , 100, 100, 140, 0, "Blue Steel" , 0, 0, -1, 1400, T, F, 4, 1, 1, Dyes.dyeBlue , 2, Arrays.asList(new MaterialStack(RoseGold, 1), new MaterialStack(Brass, 1), new MaterialStack(Steel, 2), new MaterialStack(BlackSteel, 4))),
+ DamascusSteel ( 335, TextureSet.SET_METALLIC , 8.0F, 1280, 2, 1|2 |64 , 110, 110, 110, 0, "Damascus Steel" , 0, 0, 2000, 1500, T, F, 4, 1, 1, Dyes.dyeGray , 2, Arrays.asList(new MaterialStack(Steel, 1))),
+ TungstenSteel ( 316, TextureSet.SET_METALLIC , 10.0F, 5120, 4, 1|2 |64|128 , 100, 100, 160, 0, "Tungstensteel" , 0, 0, -1, 3000, T, F, 4, 1, 1, Dyes.dyeBlue , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Tungsten, 1))),
+ NitroCoalFuel ( -1, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 50, 70, 50, 0, "Nitro-Coalfuel" , 0, 48, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 0, Arrays.asList(new MaterialStack(Glyceryl, 1), new MaterialStack(CoalFuel, 4))),
+ NitroFuel ( 709, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 200, 255, 0, 0, "Nitro-Diesel" , 0, 384, -1, 0, F, F, 1, 1, 1, Dyes.dyeLime , 0, Arrays.asList(new MaterialStack(Glyceryl, 1), new MaterialStack(Fuel, 4))),
+ AstralSilver ( 333, TextureSet.SET_SHINY , 10.0F, 64, 2, 1|2 |8 |64 , 230, 230, 255, 0, "Astral Silver" , 0, 0, -1, 0, F, F, 4, 3, 2, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Silver, 2), new MaterialStack(Magic, 1))),
+ Midasium ( 332, TextureSet.SET_SHINY , 12.0F, 64, 2, 1|2 |8 |64 , 255, 200, 40, 0, "Midasium" , 0, 0, -1, 0, F, F, 4, 3, 2, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Gold, 2), new MaterialStack(Magic, 1))),
+ Mithril ( 331, TextureSet.SET_SHINY , 14.0F, 64, 3, 1|2 |8 |64 , 255, 255, 210, 0, "Mithril" , 0, 0, -1, 0, F, F, 4, 3, 2, Dyes.dyeLightBlue , 2, Arrays.asList(new MaterialStack(Platinum, 2), new MaterialStack(Magic, 1))),
+ BlueAlloy ( 309, TextureSet.SET_DULL , 1.0F, 0, 0, 1|2 , 100, 180, 255, 0, "Blue Alloy" , 0, 0, -1, 0, F, F, 3, 5, 1, Dyes.dyeLightBlue , 2, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(Nikolite, 4)), Arrays.asList(new TC_AspectStack(TC_Aspects.ELECTRUM, 3))),
+ RedAlloy ( 308, TextureSet.SET_DULL , 1.0F, 0, 0, 1|2 , 200, 0, 0, 0, "Red Alloy" , 0, 0, -1, 0, F, F, 3, 5, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Metal, 1), new MaterialStack(Redstone, 4)), Arrays.asList(new TC_AspectStack(TC_Aspects.MACHINA, 3))),
+ CobaltBrass ( 343, TextureSet.SET_METALLIC , 8.0F, 256, 2, 1|2 |64|128 , 180, 180, 160, 0, "Cobalt Brass" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(Brass, 7), new MaterialStack(Aluminium, 1), new MaterialStack(Cobalt, 1))),
+ Phosphorus ( 534, TextureSet.SET_FLINT , 1.0F, 0, 2, 1 |4|8|16 , 255, 255, 0, 0, "Phosphorus" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Phosphate, 2))),
+ Basalt ( 844, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 , 30, 20, 20, 0, "Basalt" , 0, 0, -1, 0, F, F, 2, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Olivine, 1), new MaterialStack(Calcite, 3), new MaterialStack(Flint, 8), new MaterialStack(DarkAsh, 4)), Arrays.asList(new TC_AspectStack(TC_Aspects.TENEBRAE, 1))),
+ GarnetRed ( 527, TextureSet.SET_RUBY , 7.0F, 128, 2, 1 |4|8 |64 , 200, 80, 80, 127, "Red Garnet" , 0, 0, -1, 0, F, T, 4, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Pyrope, 3), new MaterialStack(Almandine, 5), new MaterialStack(Spessartine, 8)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ GarnetYellow ( 528, TextureSet.SET_RUBY , 7.0F, 128, 2, 1 |4|8 |64 , 200, 200, 80, 127, "Yellow Garnet" , 0, 0, -1, 0, F, T, 4, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Andradite, 5), new MaterialStack(Grossular, 8), new MaterialStack(Uvarovite, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 3))),
+ Marble ( 845, TextureSet.SET_FINE , 1.0F, 0, 1, 1 , 200, 200, 200, 0, "Marble" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Calcite, 7)), Arrays.asList(new TC_AspectStack(TC_Aspects.PERFODIO, 1))),
+ Sugar ( 803, TextureSet.SET_FINE , 1.0F, 0, 1, 1 , 250, 250, 250, 0, "Sugar" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Water, 5), new MaterialStack(Oxygen, 25)), Arrays.asList(new TC_AspectStack(TC_Aspects.HERBA, 1), new TC_AspectStack(TC_Aspects.AQUA, 1), new TC_AspectStack(TC_Aspects.AER, 1))),
+ Thaumium ( 330, TextureSet.SET_METALLIC , 12.0F, 256, 3, 1|2 |64|128 , 150, 100, 200, 0, "Thaumium" , 0, 0, -1, 0, F, F, 5, 2, 1, Dyes.dyePurple , 0, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.PRAECANTIO, 1))),
+ Vinteum ( 529, TextureSet.SET_EMERALD , 10.0F, 128, 3, 1 |4|8 |64 , 100, 200, 255, 0, "Vinteum" , 5, 32, -1, 0, F, F, 4, 1, 1, Dyes.dyeLightBlue , 2, Arrays.asList(new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_AspectStack(TC_Aspects.PRAECANTIO, 1))),
+ Vis ( -1, TextureSet.SET_SHINY , 1.0F, 0, 3, 0 , 128, 0, 255, 0, "Vis" , 5, 32, -1, 0, F, F, 1, 1, 1, Dyes.dyePurple , 2, Arrays.asList(new MaterialStack(Magic, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.AURAM, 2), new TC_AspectStack(TC_Aspects.PRAECANTIO, 1))),
+ Redrock ( 846, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 , 255, 80, 50, 0, "Redrock" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeRed , 2, Arrays.asList(new MaterialStack(Calcite, 2), new MaterialStack(Flint, 1), new MaterialStack(Clay, 1))),
+ PotassiumFeldspar ( 847, TextureSet.SET_FINE , 1.0F, 0, 1, 1 , 120, 40, 40, 0, "Potassium Feldspar" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyePink , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 8))),
+ Biotite ( 848, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 , 20, 30, 20, 0, "Biotite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Magnesium, 3), new MaterialStack(Aluminium, 3), new MaterialStack(Fluorine, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 10))),
+ GraniteBlack ( 849, TextureSet.SET_ROUGH , 4.0F, 64, 3, 1 |64|128 , 10, 10, 10, 0, "Black Granite" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Biotite, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.TUTAMEN, 1))),
+ GraniteRed ( 850, TextureSet.SET_ROUGH , 4.0F, 64, 3, 1 |64|128 , 255, 0, 128, 0, "Red Granite" , 0, 0, -1, 0, F, F, 0, 1, 1, Dyes.dyeMagenta , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(PotassiumFeldspar, 1), new MaterialStack(Oxygen, 3)), Arrays.asList(new TC_AspectStack(TC_Aspects.TUTAMEN, 1))),
+ Chrysotile ( 912, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 110, 140, 110, 0, "Chrysotile" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Asbestos, 1))),
+ Realgar ( 555, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 140, 100, 100, 0, "Realgar" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(Arsenic, 4), new MaterialStack(Sulfur,4))),
+ VanadiumMagnetite ( 923, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 35, 35, 60, 0, "Vanadium Magnetite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Vanadium, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))), // Mixture of Fe3O4 and V2O5
+ BasalticMineralSand ( 935, TextureSet.SET_SAND , 1.0F, 0, 1, 1 |8 , 40, 50, 40, 0, "Basaltic Mineral Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Basalt, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ GraniticMineralSand ( 936, TextureSet.SET_SAND , 1.0F, 0, 1, 1 |8 , 40, 60, 60, 0, "Granitic Mineral Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeBlack , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(GraniteBlack, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ GarnetSand ( 938, TextureSet.SET_SAND , 1.0F, 0, 1, 1 |8 , 200, 100, 0, 0, "Garnet Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeOrange , 2, Arrays.asList(new MaterialStack(GarnetRed, 1), new MaterialStack(GarnetYellow, 1))),
+ QuartzSand ( 939, TextureSet.SET_SAND , 1.0F, 0, 1, 1 |8 , 200, 200, 200, 0, "Quartz Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes.dyeWhite , 2, Arrays.asList(new MaterialStack(CertusQuartz, 1), new MaterialStack(Quartzite, 1))),
+ Bastnasite ( 905, TextureSet.SET_FINE , 1.0F, 0, 2, 1 |8 , 200, 110, 45, 0, "Bastnasite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Cerium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Fluorine, 1), new MaterialStack(Oxygen, 3))), // (Ce, La, Y)CO3F
+ Pentlandite ( 909, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 165, 150, 5, 0, "Pentlandite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Nickel, 9), new MaterialStack(Sulfur, 8))), // (Fe,Ni)9S8
+ Spodumene ( 920, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 190, 170, 170, 0, "Spodumene" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Lithium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Silicon, 2), new MaterialStack(Oxygen, 6))), // LiAl(SiO3)2
+ Pollucite ( 919, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 240, 210, 210, 0, "Pollucite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Caesium, 2), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 4), new MaterialStack(Water, 2), new MaterialStack(Oxygen, 12))), // (Cs,Na)2Al2Si4O12 2H2O (also a source of Rb)
+ Tantalite ( 921, TextureSet.SET_METALLIC , 1.0F, 0, 3, 1 |8 , 145, 80, 40, 0, "Tantalite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Manganese, 1), new MaterialStack(Tantalum, 2), new MaterialStack(Oxygen, 6))), // (Fe, Mn)Ta2O6 (also source of Nb)
+ Lepidolite ( 907, TextureSet.SET_FINE , 1.0F, 0, 2, 1 |8 , 240, 50, 140, 0, "Lepidolite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Lithium, 3), new MaterialStack(Aluminium, 4), new MaterialStack(Fluorine, 2), new MaterialStack(Oxygen, 10))), // K(Li,Al,Rb)3(Al,Si)4O10(F,OH)2
+ Glauconite ( 933, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 130, 180, 60, 0, "Glauconite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Magnesium, 2), new MaterialStack(Aluminium, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))), // (K,Na)(Fe3+,Al,Mg)2(Si,Al)4O10(OH)2
+ GlauconiteSand ( 949, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 130, 180, 60, 0, "Glauconite Sand" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Magnesium, 2), new MaterialStack(Aluminium, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))), // (K,Na)(Fe3+,Al,Mg)2(Si,Al)4O10(OH)2
+ Vermiculite ( 932, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 200, 180, 15, 0, "Vermiculite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Iron, 3), new MaterialStack(Aluminium, 4), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Water, 4), new MaterialStack(Oxygen, 12))), // (Mg+2, Fe+2, Fe+3)3 [(AlSi)4O10] (OH)2 4H2O)
+ Bentonite ( 927, TextureSet.SET_ROUGH , 1.0F, 0, 2, 1 |8 , 245, 215, 210, 0, "Bentonite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Magnesium, 6), new MaterialStack(Silicon, 12), new MaterialStack(Hydrogen, 6), new MaterialStack(Water, 5), new MaterialStack(Oxygen, 36))), // (Na,Ca)0.33(Al,Mg)2(Si4O10)(OH)2 nH2O
+ FullersEarth ( 928, TextureSet.SET_FINE , 1.0F, 0, 2, 1 |8 , 160, 160, 120, 0, "Fullers Earth" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 1), new MaterialStack(Water, 4), new MaterialStack(Oxygen, 11))), // (Mg,Al)2Si4O10(OH) 4(H2O)
+ Pitchblende ( 873, TextureSet.SET_DULL , 1.0F, 0, 3, 1 |8 , 200, 210, 0, 0, "Pitchblende" , 0, 0, -1, 0, F, F, 5, 1, 1, Dyes.dyeYellow , 2, Arrays.asList(new MaterialStack(Uraninite, 3), new MaterialStack(Thorium, 1), new MaterialStack(Lead, 1))),
+ Monazite ( 520, TextureSet.SET_DIAMOND , 1.0F, 0, 1, 1 |4|8 , 50, 70, 50, 0, "Monazite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen , 1, Arrays.asList(new MaterialStack(RareEarth, 1), new MaterialStack(Phosphate, 1))), // Wikipedia: (Ce, La, Nd, Th, Sm, Gd)PO4 Monazite also smelt-extract to Helium, it is brown like the rare earth Item Monazite sand deposits are inevitably of the monazite-(Ce) composition. Typically, the lanthanides in such monazites contain about 45–48% cerium, about 24% lanthanum, about 17% neodymium, about 5% praseodymium, and minor quantities of samarium, gadolinium, and yttrium. Europium concentrations tend to be low, about 0.05% Thorium content of monazite is variable and sometimes can be up to 20–30%
+ Malachite ( 871, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 5, 95, 5, 0, "Malachite" , 0, 0, -1, 0, F, F, 3, 1, 1, Dyes.dyeGreen , 1, Arrays.asList(new MaterialStack(Copper, 2), new MaterialStack(Carbon, 1), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 5))), // Cu2CO3(OH)2
+ Mirabilite ( 900, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 240, 250, 210, 0, "Mirabilite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Sulfur, 1), new MaterialStack(Water, 10), new MaterialStack(Oxygen, 4))), // Na2SO4 10H2O
+ Mica ( 901, TextureSet.SET_FINE , 1.0F, 0, 1, 1 |8 , 195, 195, 205, 0, "Mica" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Fluorine, 2), new MaterialStack(Oxygen, 10))), // KAl2(AlSi3O10)(F,OH)2
+ Trona ( 903, TextureSet.SET_METALLIC , 1.0F, 0, 1, 1 |8 , 135, 135, 95, 0, "Trona" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Sodium, 3), new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 1), new MaterialStack(Water, 2), new MaterialStack(Oxygen, 6))), // Na3(CO3)(HCO3) 2H2O
+ Barite ( 904, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 230, 235, 255, 0, "Barite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Barium, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Oxygen, 4))),
+ Gypsum ( 934, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 230, 230, 250, 0, "Gypsum" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Water, 2), new MaterialStack(Oxygen, 4))), // CaSO4 2H2O
+ Alunite ( 911, TextureSet.SET_METALLIC , 1.0F, 0, 2, 1 |8 , 225, 180, 65, 0, "Alunite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 14))), // KAl3(SO4)2(OH)6
+ Dolomite ( 914, TextureSet.SET_FLINT , 1.0F, 0, 1, 1 |8 , 225, 205, 205, 0, "Dolomite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Magnesium, 1), new MaterialStack(Carbon, 2), new MaterialStack(Oxygen, 6))), // CaMg(CO3)2
+ Wollastonite ( 915, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 240, 240, 240, 0, "Wollastonite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Silicon, 1), new MaterialStack(Oxygen, 3))), // CaSiO3
+ Zeolite ( 916, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 240, 230, 230, 0, "Zeolite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Calcium, 4), new MaterialStack(Silicon, 27), new MaterialStack(Aluminium, 9), new MaterialStack(Water, 28), new MaterialStack(Oxygen, 72))), // NaCa4(Si27Al9)O72 28(H2O)
+ Kyanite ( 924, TextureSet.SET_FLINT , 1.0F, 0, 2, 1 |8 , 110, 110, 250, 0, "Kyanite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Oxygen, 5))), // Al2SiO5
+ Kaolinite ( 929, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 245, 235, 235, 0, "Kaolinite" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 2), new MaterialStack(Hydrogen, 4), new MaterialStack(Oxygen, 9))), // Al2Si2O5(OH)4
+ Talc ( 902, TextureSet.SET_DULL , 1.0F, 0, 2, 1 |8 , 90, 180, 90, 0, "Talc" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))), // H2Mg3(SiO3)4
+ Soapstone ( 877, TextureSet.SET_DULL , 1.0F, 0, 1, 1 |8 , 95, 145, 95, 0, "Soapstone" , 0, 0, -1, 0, F, F, 1, 1, 1, Dyes._NULL , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))), // H2Mg3(SiO3)4
+ Concrete ( 947, TextureSet.SET_ROUGH , 1.0F, 0, 1, 1 , 100, 100, 100, 0, "Concrete" , 0, 0, 300, 0, F, F, 0, 1, 1, Dyes.dyeGray , 0, Arrays.asList(new MaterialStack(Stone, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.TERRA, 1))),
+ IronMagnetic ( 354, TextureSet.SET_MAGNETIC , 6.0F, 256, 2, 1|2 |64|128 , 200, 200, 200, 0, "Magnetic Iron" , 0, 0, -1, 0, F, F, 4, 51, 50, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Iron, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ SteelMagnetic ( 355, TextureSet.SET_MAGNETIC , 6.0F, 512, 2, 1|2 |64|128 , 128, 128, 128, 0, "Magnetic Steel" , 0, 0, 1000, 1000, T, F, 4, 51, 50, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Steel, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_AspectStack(TC_Aspects.ORDO, 1), new TC_AspectStack(TC_Aspects.MAGNETO, 1))),
+ NeodymiumMagnetic ( 356, TextureSet.SET_MAGNETIC , 7.0F, 512, 2, 1|2 |64|128 , 100, 100, 100, 0, "Magnetic Neodymium" , 0, 0, 1297, 1297, T, F, 4, 51, 50, Dyes.dyeGray , 1, Arrays.asList(new MaterialStack(Neodymium, 1)), Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_AspectStack(TC_Aspects.MAGNETO, 3))),
+
+ /**
+ * Materials which are renamed automatically
+ */
+ @Deprecated IridiumAndSodiumOxide(IridiumSodiumOxide, F),
+ @Deprecated Palygorskite (FullersEarth, F),
+ @Deprecated Adamantine (Adamantium, T),
+ @Deprecated FzDarkIron (DarkIron, T),
+ @Deprecated FZDarkIron (DarkIron, T),
+ @Deprecated Ashes (Ash, F),
+ @Deprecated DarkAshes (DarkAsh, F),
+ @Deprecated Abyssal (Basalt, F),
+ @Deprecated Adamant (Adamantium, T),
+ @Deprecated AluminumBrass (AluminiumBrass, F),
+ @Deprecated Aluminum (Aluminium, F),
+ @Deprecated NaturalAluminum (Aluminium, F),
+ @Deprecated NaturalAluminium (Aluminium, F),
+ @Deprecated Americum (Americium, F),
+ @Deprecated Beryl (Emerald, F), // 30,200,200
+ @Deprecated BlackGranite (GraniteBlack, F),
+ @Deprecated CalciumCarbonate (Calcite, F),
+ @Deprecated CreosoteOil (Creosote, F),
+ @Deprecated Chromium (Chrome, F),
+ @Deprecated Diesel (Fuel, F),
+ @Deprecated Enderpearl (EnderPearl, F),
+ @Deprecated Endereye (EnderEye, F),
+ @Deprecated EyeOfEnder (EnderEye, F),
+ @Deprecated Eyeofender (EnderEye, F),
+ @Deprecated RawTerrasteelAlloy (TerrasteelAlloyRaw, F),
+ @Deprecated StrengthenedTerrasteelAlloy(TerrasteelAlloyStrengthened, F),
+ @Deprecated Flour (Wheat, F),
+ @Deprecated Meat (MeatRaw, F),
+ @Deprecated Garnet (GarnetRed, T),
+ @Deprecated Granite (GraniteBlack, F),
+ @Deprecated Goethite (BrownLimonite, F),
+ @Deprecated Kalium (Potassium, F),
+ @Deprecated Lapislazuli (Lapis, F),
+ @Deprecated LapisLazuli (Lapis, F),
+ @Deprecated Monazit (Monazite, F),
+ @Deprecated Natrium (Sodium, F),
+ @Deprecated Mythril (Mithril, F),
+ @Deprecated NitroDiesel (NitroFuel, F),
+ @Deprecated Naquadriah (Naquadria, F),
+ @Deprecated Obby (Obsidian, F),
+ @Deprecated Peridot (Olivine, T),
+ @Deprecated Phosphorite (Phosphorus, T),
+ @Deprecated Quarried (Marble, F),
+ @Deprecated Quicksilver (Mercury, T),
+ @Deprecated QuickSilver (Mercury, F),
+ @Deprecated RedRock (Redrock, F),
+ @Deprecated RefinedIron (Iron, F),
+ @Deprecated RedGranite (GraniteRed, F),
+ @Deprecated Sheldonite (Cooperite, F),
+ @Deprecated Soulsand (SoulSand, F),
+ @Deprecated SilverLead (Galena, F),
+ @Deprecated Titan (Titanium, F),
+ @Deprecated Uran (Uranium, F),
+ @Deprecated Wolframite (Tungstate, F),
+ @Deprecated Wolframium (Tungsten, F),
+ @Deprecated Wolfram (Tungsten, F),
+ @Deprecated WrougtIron (WroughtIron, F);
+
+ /** List of all Materials. */
+ public static final Collection<Materials> VALUES = new HashSet<Materials>(Arrays.asList(values()));
+
+ static {
+ SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM.addTo(Bastnasite, Monazite, Forcicium, Forcillium);
+ SubTag.ELECTROMAGNETIC_SEPERATION_GOLD.addTo(Magnetite, VanadiumMagnetite, BasalticMineralSand, GraniticMineralSand);
+ SubTag.ELECTROMAGNETIC_SEPERATION_IRON.addTo(YellowLimonite, BrownLimonite, Pyrite, BandedIron, Nickel, Vermiculite, Glauconite, GlauconiteSand, Pentlandite, Tin, Antimony, Ilmenite, Manganese, Chrome, Chromite, Andradite);
+ SubTag.BLASTFURNACE_CALCITE_DOUBLE.addTo(Pyrite, YellowLimonite, BasalticMineralSand, GraniticMineralSand);
+ SubTag.BLASTFURNACE_CALCITE_TRIPLE.addTo(Iron, PigIron, DeepIron, ShadowIron, WroughtIron, MeteoricIron, BrownLimonite);
+ SubTag.WASHING_MERCURY.addTo(Gold, Silver, Osmium, Mithril, Platinum, Midasium, Cooperite, AstralSilver);
+ SubTag.WASHING_SODIUMPERSULFATE.addTo(Zinc, Nickel, Copper, Cobalt, Cobaltite, Tetrahedrite);
+ SubTag.METAL.addTo(AnyIron, AnyCopper, AnyBronze, Metal, Aluminium, Americium, Antimony, Beryllium, Bismuth, Caesium, Cerium, Chrome, Cobalt, Copper, Dysprosium, Erbium, Europium, Gadolinium, Gallium, Gold, Holmium, Indium, Iridium, Iron, Lanthanum, Lead, Lutetium, Magnesium, Manganese, Mercury, Niobium, Molybdenum, Neodymium, Neutronium, Nickel, Osmium, Palladium, Platinum, Plutonium, Plutonium241, Praseodymium, Promethium, Rubidium, Samarium, Scandium, Silicon, Silver, Tantalum, Tellurium, Terbium, Thorium, Thulium, Tin, Titanium, Tungsten, Uranium, Uranium235, Vanadium, Ytterbium, Yttrium, Zinc, Satinspar, Selenite, Microcline, Serpentine, Sylvite, Signalum, Lumium, PhasedIron, PhasedGold, DarkSteel, Terrasteel, TerrasteelAlloyRaw, TerrasteelAlloyStrengthened, TinAlloy, ConductiveIron, ElectricalSteel, EnergeticAlloy, VibrantAlloy, PulsatingIron, Manasteel, DarkThaumium, ElvenElementium, EnrichedCopper, DiamondCopper, Adamantium, Amordrine, Angmallen, Ardite, Aredrite, Atlarus, Blutonium, Carmot, Celenegil, Ceruclase, DarkIron, Desh, Desichalkos, Duranium, ElectrumFlux, Enderium, EnderiumBase, Eximite, FierySteel, Force, Haderoth, Hematite, Hepatizon, HSLA, Infuscolium, InfusedGold, Inolashite, Mercassium, MeteoricIron, MeteoricSteel, Naquadah, NaquadahAlloy, NaquadahEnriched, Naquadria, ObsidianFlux, Orichalcum, Osmonium, Oureclase, Phoenixite, Prometheum, RefinedGlowstone, RefinedObsidian, Sanguinite, Starconium, Tartarite, Thyrium, Tritanium, Vulcanite, Vyroxeres, Yellorium, Zectium, AluminiumBrass, Osmiridium, Sunnarium, AnnealedCopper, BatteryAlloy, Brass, Bronze, ChromiumDioxide, Cupronickel, DeepIron, Electrum, Invar, IronCompressed, Kanthal, Magnalium, Nichrome, NiobiumNitride, NiobiumTitanium, PigIron, SolderingAlloy, StainlessSteel, Steel, Ultimet, VanadiumGallium, WroughtIron, YttriumBariumCuprate, IronWood, Alumite, Manyullyn, ShadowIron, ShadowSteel, Steeleaf, SterlingSilver, RoseGold, BlackBronze, BismuthBronze, BlackSteel, RedSteel, BlueSteel, DamascusSteel, TungstenSteel, AstralSilver, Midasium, Mithril, BlueAlloy, RedAlloy, CobaltBrass, Thaumium, IronMagnetic, SteelMagnetic, NeodymiumMagnetic, Knightmetal);
+
+ SubTag.FOOD.addTo(MeatRaw, MeatCooked, Ice, Water, Salt, Chili, Cocoa, Cheese, Coffee, Chocolate, Milk, Honey, FryingOilHot, FishOil, SeedOil, SeedOilLin, SeedOilHemp, Wheat, Sugar, FreshWater);
+
+ Wood .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ WoodSealed .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.NO_WORKING);
+ Peanutwood .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ LiveRoot .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.MAGICAL, SubTag.MORTAR_GRINDABLE);
+ IronWood .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.MAGICAL, SubTag.MORTAR_GRINDABLE);
+ Steeleaf .add(SubTag.WOOD, SubTag.FLAMMABLE, SubTag.MAGICAL, SubTag.MORTAR_GRINDABLE, SubTag.NO_SMELTING);
+
+ MeatRaw .add(SubTag.NO_SMASHING);
+ MeatCooked .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Snow .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.NO_RECYCLING);
+ Ice .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.NO_RECYCLING);
+ Water .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.NO_RECYCLING);
+ Sulfur .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE);
+ Saltpeter .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE);
+ Graphite .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE, SubTag.NO_SMELTING);
+
+ Wheat .add(SubTag.FLAMMABLE, SubTag.MORTAR_GRINDABLE);
+ Paper .add(SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.MORTAR_GRINDABLE, SubTag.PAPER);
+ Coal .add(SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.MORTAR_GRINDABLE);
+ Charcoal .add(SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.MORTAR_GRINDABLE);
+ Lignite .add(SubTag.FLAMMABLE, SubTag.NO_SMELTING, SubTag.NO_SMASHING, SubTag.MORTAR_GRINDABLE);
+
+ Rubber .add(SubTag.FLAMMABLE, SubTag.NO_SMASHING, SubTag.BOUNCY, SubTag.STRETCHY);
+ Plastic .add(SubTag.FLAMMABLE, SubTag.NO_SMASHING, SubTag.BOUNCY);
+
+ TNT .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ Gunpowder .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ Glyceryl .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ NitroCoalFuel .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ NitroFuel .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+ NitroCarbon .add(SubTag.FLAMMABLE, SubTag.EXPLOSIVE, SubTag.NO_SMELTING, SubTag.NO_SMASHING);
+
+ Lead .add(SubTag.MORTAR_GRINDABLE, SubTag.SOLDERING_MATERIAL, SubTag.SOLDERING_MATERIAL_BAD);
+ Tin .add(SubTag.MORTAR_GRINDABLE, SubTag.SOLDERING_MATERIAL);
+ SolderingAlloy .add(SubTag.MORTAR_GRINDABLE, SubTag.SOLDERING_MATERIAL, SubTag.SOLDERING_MATERIAL_GOOD);
+
+ Cheese .add(SubTag.SMELTING_TO_FLUID);
+ Sugar .add(SubTag.SMELTING_TO_FLUID);
+
+ Concrete .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.SMELTING_TO_FLUID);
+ ConstructionFoam .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.EXPLOSIVE, SubTag.NO_SMELTING);
+ Redstone .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.UNBURNABLE, SubTag.SMELTING_TO_FLUID, SubTag.PULVERIZING_CINNABAR);
+ Glowstone .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.UNBURNABLE, SubTag.SMELTING_TO_FLUID);
+ Nikolite .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.UNBURNABLE, SubTag.SMELTING_TO_FLUID);
+ Teslatite .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.UNBURNABLE, SubTag.SMELTING_TO_FLUID);
+ Netherrack .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.UNBURNABLE, SubTag.FLAMMABLE);
+ Stone .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.NO_RECYCLING);
+ Brick .add(SubTag.STONE, SubTag.NO_SMASHING);
+ NetherBrick .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Endstone .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Marble .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Basalt .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Redrock .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Obsidian .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Flint .add(SubTag.STONE, SubTag.NO_SMASHING, SubTag.MORTAR_GRINDABLE);
+ GraniteRed .add(SubTag.STONE, SubTag.NO_SMASHING);
+ GraniteBlack .add(SubTag.STONE, SubTag.NO_SMASHING);
+ Salt .add(SubTag.STONE, SubTag.NO_SMASHING);
+ RockSalt .add(SubTag.STONE, SubTag.NO_SMASHING);
+
+ Sand .add(SubTag.NO_RECYCLING);
+
+ Gold .add(SubTag.MORTAR_GRINDABLE);
+ Silver .add(SubTag.MORTAR_GRINDABLE);
+ Iron .add(SubTag.MORTAR_GRINDABLE);
+ IronMagnetic .add(SubTag.MORTAR_GRINDABLE);
+ HSLA .add(SubTag.MORTAR_GRINDABLE);
+ Steel .add(SubTag.MORTAR_GRINDABLE);
+ SteelMagnetic .add(SubTag.MORTAR_GRINDABLE);
+ Zinc .add(SubTag.MORTAR_GRINDABLE);
+ Antimony .add(SubTag.MORTAR_GRINDABLE);
+ Copper .add(SubTag.MORTAR_GRINDABLE);
+ AnnealedCopper .add(SubTag.MORTAR_GRINDABLE);
+ Bronze .add(SubTag.MORTAR_GRINDABLE);
+ Nickel .add(SubTag.MORTAR_GRINDABLE);
+ Invar .add(SubTag.MORTAR_GRINDABLE);
+ Brass .add(SubTag.MORTAR_GRINDABLE);
+ WroughtIron .add(SubTag.MORTAR_GRINDABLE);
+ Electrum .add(SubTag.MORTAR_GRINDABLE);
+ Clay .add(SubTag.MORTAR_GRINDABLE);
+
+ Glass .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_RECYCLING, SubTag.SMELTING_TO_FLUID);
+ Diamond .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE);
+ Emerald .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Amethyst .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Tanzanite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Topaz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ BlueTopaz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Amber .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ GreenSapphire .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Sapphire .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Ruby .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ FoolsRuby .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Opal .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Olivine .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Jasper .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ GarnetRed .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ GarnetYellow .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Mimichite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ CrystalFlux .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Crystal .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Niter .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Apatite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE);
+ Lapis .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE);
+ Sodalite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE);
+ Lazurite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE);
+ Monazite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE);
+ Quartzite .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ Quartz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ SiliconDioxide .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ Dilithium .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ NetherQuartz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ CertusQuartz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ Fluix .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.QUARTZ);
+ //ChargedCertusQuartz .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.QUARTZ);
+ Phosphorus .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE, SubTag.EXPLOSIVE);
+ Phosphate .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.FLAMMABLE, SubTag.EXPLOSIVE);
+ InfusedAir .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedFire .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedEarth .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedWater .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedEntropy .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedOrder .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedVis .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ InfusedDull .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ Vinteum .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ NetherStar .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ EnderPearl .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.PEARL);
+ EnderEye .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.MAGICAL, SubTag.PEARL);
+ Firestone .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.MAGICAL, SubTag.QUARTZ, SubTag.UNBURNABLE, SubTag.BURNING);
+ Forcicium .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.MAGICAL);
+ Forcillium .add(SubTag.CRYSTAL, SubTag.NO_SMASHING, SubTag.NO_SMELTING, SubTag.CRYSTALLISABLE, SubTag.MAGICAL);
+ Force .add(SubTag.CRYSTAL, SubTag.MAGICAL, SubTag.UNBURNABLE);
+ Magic .add(SubTag.CRYSTAL, SubTag.MAGICAL, SubTag.UNBURNABLE);
+
+ Primitive .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Basic .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Good .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Advanced .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Data .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Elite .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Master .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Ultimate .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Superconductor .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+ Infinite .add(SubTag.NO_SMASHING, SubTag.NO_SMELTING);
+
+ Blaze .add(SubTag.MAGICAL, SubTag.NO_SMELTING, SubTag.SMELTING_TO_FLUID, SubTag.MORTAR_GRINDABLE, SubTag.UNBURNABLE, SubTag.BURNING);
+ FierySteel .add(SubTag.MAGICAL, SubTag.UNBURNABLE, SubTag.BURNING);
+ ElvenElementium .add(SubTag.MAGICAL);
+ DarkThaumium .add(SubTag.MAGICAL);
+ Thaumium .add(SubTag.MAGICAL);
+ Enderium .add(SubTag.MAGICAL);
+ AstralSilver .add(SubTag.MAGICAL);
+ Midasium .add(SubTag.MAGICAL);
+ Mithril .add(SubTag.MAGICAL);
+
+ Iron .mOreReRegistrations.add(AnyIron );
+ PigIron .mOreReRegistrations.add(AnyIron );
+ WroughtIron .mOreReRegistrations.add(AnyIron );
+
+ Copper .mOreReRegistrations.add(AnyCopper );
+ AnnealedCopper .mOreReRegistrations.add(AnyCopper );
+
+ Bronze .mOreReRegistrations.add(AnyBronze );
+
+ Peanutwood .setMaceratingInto(Wood );
+ WoodSealed .setMaceratingInto(Wood );
+ NetherBrick .setMaceratingInto(Netherrack );
+
+ NeodymiumMagnetic .setSmeltingInto(Neodymium ).setMaceratingInto(Neodymium ).setArcSmeltingInto(Neodymium );
+ SteelMagnetic .setSmeltingInto(Steel ).setMaceratingInto(Steel ).setArcSmeltingInto(Steel );
+ Iron .setSmeltingInto(Iron ).setMaceratingInto(Iron ).setArcSmeltingInto(WroughtIron );
+ AnyIron .setSmeltingInto(Iron ).setMaceratingInto(Iron ).setArcSmeltingInto(WroughtIron );
+ PigIron .setSmeltingInto(Iron ).setMaceratingInto(Iron ).setArcSmeltingInto(WroughtIron );
+ WroughtIron .setSmeltingInto(Iron ).setMaceratingInto(Iron ).setArcSmeltingInto(WroughtIron );
+ IronMagnetic .setSmeltingInto(Iron ).setMaceratingInto(Iron ).setArcSmeltingInto(WroughtIron );
+ Copper .setSmeltingInto(Copper ).setMaceratingInto(Copper ).setArcSmeltingInto(AnnealedCopper );
+ AnyCopper .setSmeltingInto(Copper ).setMaceratingInto(Copper ).setArcSmeltingInto(AnnealedCopper );
+ AnnealedCopper .setSmeltingInto(Copper ).setMaceratingInto(Copper ).setArcSmeltingInto(AnnealedCopper );
+ Netherrack .setSmeltingInto(NetherBrick );
+ MeatRaw .setSmeltingInto(MeatCooked );
+ Sand .setSmeltingInto(Glass );
+ Ice .setSmeltingInto(Water );
+ Snow .setSmeltingInto(Water );
+
+ Mercury .add(SubTag.SMELTING_TO_GEM);
+ Cinnabar .setDirectSmelting(Mercury ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT).add(SubTag.SMELTING_TO_GEM);
+ Celestine .setDirectSmelting(Strontium ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Tetrahedrite .setDirectSmelting(Copper ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Chalcopyrite .setDirectSmelting(Copper ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Malachite .setDirectSmelting(Copper ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Pentlandite .setDirectSmelting(Nickel ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Sphalerite .setDirectSmelting(Zinc ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ Pyrite .setDirectSmelting(Iron ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ BasalticMineralSand .setDirectSmelting(Iron ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ GraniticMineralSand .setDirectSmelting(Iron ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ YellowLimonite .setDirectSmelting(Iron ).add(SubTag.INDUCTIONSMELTING_LOW_OUTPUT);
+ BrownLimonite .setDirectSmelting(Iron );
+ BandedIron .setDirectSmelting(Iron );
+ Cassiterite .setDirectSmelting(Tin );
+ CassiteriteSand .setDirectSmelting(Tin );
+ Chromite .setDirectSmelting(Chrome );
+ Garnierite .setDirectSmelting(Nickel );
+ Cobaltite .setDirectSmelting(Cobalt );
+ Stibnite .setDirectSmelting(Antimony );
+ Cooperite .setDirectSmelting(Platinum );
+ Pyrolusite .setDirectSmelting(Manganese );
+ Magnesite .setDirectSmelting(Magnesium );
+ Molybdenite .setDirectSmelting(Molybdenum );
+
+ Amber .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedAir .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedFire .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedEarth .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedWater .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedEntropy .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedOrder .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedVis .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ InfusedDull .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ Salt .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ RockSalt .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ Scheelite .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ Tungstate .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ Cassiterite .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ CassiteriteSand .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ NetherQuartz .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ CertusQuartz .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ //ChargedCertusQuartz .setOreMultiplier( 2).setSmeltingMultiplier( 2);
+ Phosphorus .setOreMultiplier( 3).setSmeltingMultiplier( 3);
+ Saltpeter .setOreMultiplier( 4).setSmeltingMultiplier( 4);
+ Apatite .setOreMultiplier( 4).setSmeltingMultiplier( 4).setByProductMultiplier(2);
+ Nikolite .setOreMultiplier( 5).setSmeltingMultiplier( 5);
+ Teslatite .setOreMultiplier( 5).setSmeltingMultiplier( 5);
+ Redstone .setOreMultiplier( 5).setSmeltingMultiplier( 5);
+ Glowstone .setOreMultiplier( 5).setSmeltingMultiplier( 5);
+ Lapis .setOreMultiplier( 6).setSmeltingMultiplier( 6).setByProductMultiplier(4);
+ Sodalite .setOreMultiplier( 6).setSmeltingMultiplier( 6).setByProductMultiplier(4);
+ Lazurite .setOreMultiplier( 6).setSmeltingMultiplier( 6).setByProductMultiplier(4);
+ Monazite .setOreMultiplier( 8).setSmeltingMultiplier( 8).setByProductMultiplier(2);
+
+ Plastic .setEnchantmentForTools(Enchantment.knockback, 1);
+ Rubber .setEnchantmentForTools(Enchantment.knockback, 2);
+ InfusedAir .setEnchantmentForTools(Enchantment.knockback, 2);
+
+ IronWood .setEnchantmentForTools(Enchantment.fortune, 1);
+ Steeleaf .setEnchantmentForTools(Enchantment.fortune, 2);
+ Midasium .setEnchantmentForTools(Enchantment.fortune, 2);
+ Mithril .setEnchantmentForTools(Enchantment.fortune, 3);
+ Vinteum .setEnchantmentForTools(Enchantment.fortune, 1);
+ Thaumium .setEnchantmentForTools(Enchantment.fortune, 2);
+ DarkThaumium .setEnchantmentForTools(Enchantment.fortune, 3);
+ Magic .setEnchantmentForTools(Enchantment.fortune, 3);
+ InfusedWater .setEnchantmentForTools(Enchantment.fortune, 3);
+
+ Flint .setEnchantmentForTools(Enchantment.fireAspect, 1);
+ DarkIron .setEnchantmentForTools(Enchantment.fireAspect, 2);
+ Firestone .setEnchantmentForTools(Enchantment.fireAspect, 3);
+ FierySteel .setEnchantmentForTools(Enchantment.fireAspect, 3);
+ Pyrotheum .setEnchantmentForTools(Enchantment.fireAspect, 3);
+ Blaze .setEnchantmentForTools(Enchantment.fireAspect, 3);
+ InfusedFire .setEnchantmentForTools(Enchantment.fireAspect, 3);
+
+ Force .setEnchantmentForTools(Enchantment.silkTouch, 1);
+ Amber .setEnchantmentForTools(Enchantment.silkTouch, 1);
+ EnderPearl .setEnchantmentForTools(Enchantment.silkTouch, 1);
+ Enderium .setEnchantmentForTools(Enchantment.silkTouch, 1);
+ NetherStar .setEnchantmentForTools(Enchantment.silkTouch, 1);
+ InfusedOrder .setEnchantmentForTools(Enchantment.silkTouch, 1);
+
+ BlackBronze .setEnchantmentForTools(Enchantment.smite, 2);
+ Gold .setEnchantmentForTools(Enchantment.smite, 3);
+ RoseGold .setEnchantmentForTools(Enchantment.smite, 4);
+ Platinum .setEnchantmentForTools(Enchantment.smite, 5);
+ InfusedVis .setEnchantmentForTools(Enchantment.smite, 5);
+
+ Lead .setEnchantmentForTools(Enchantment.baneOfArthropods, 2);
+ Nickel .setEnchantmentForTools(Enchantment.baneOfArthropods, 2);
+ Invar .setEnchantmentForTools(Enchantment.baneOfArthropods, 3);
+ Antimony .setEnchantmentForTools(Enchantment.baneOfArthropods, 3);
+ BatteryAlloy .setEnchantmentForTools(Enchantment.baneOfArthropods, 4);
+ Bismuth .setEnchantmentForTools(Enchantment.baneOfArthropods, 4);
+ BismuthBronze .setEnchantmentForTools(Enchantment.baneOfArthropods, 5);
+ InfusedEarth .setEnchantmentForTools(Enchantment.baneOfArthropods, 5);
+
+ Iron .setEnchantmentForTools(Enchantment.sharpness, 1);
+ Bronze .setEnchantmentForTools(Enchantment.sharpness, 1);
+ Brass .setEnchantmentForTools(Enchantment.sharpness, 2);
+ HSLA .setEnchantmentForTools(Enchantment.sharpness, 2);
+ Steel .setEnchantmentForTools(Enchantment.sharpness, 2);
+ WroughtIron .setEnchantmentForTools(Enchantment.sharpness, 2);
+ StainlessSteel .setEnchantmentForTools(Enchantment.sharpness, 3);
+ Knightmetal .setEnchantmentForTools(Enchantment.sharpness, 3);
+ ShadowIron .setEnchantmentForTools(Enchantment.sharpness, 3);
+ ShadowSteel .setEnchantmentForTools(Enchantment.sharpness, 4);
+ BlackSteel .setEnchantmentForTools(Enchantment.sharpness, 4);
+ RedSteel .setEnchantmentForTools(Enchantment.sharpness, 4);
+ BlueSteel .setEnchantmentForTools(Enchantment.sharpness, 5);
+ DamascusSteel .setEnchantmentForTools(Enchantment.sharpness, 5);
+ InfusedEntropy .setEnchantmentForTools(Enchantment.sharpness, 5);
+
+ InfusedAir .setEnchantmentForArmors(Enchantment.respiration, 3);
+
+ InfusedFire .setEnchantmentForArmors(Enchantment.featherFalling, 4);
+
+ Steeleaf .setEnchantmentForArmors(Enchantment.protection, 2);
+ Knightmetal .setEnchantmentForArmors(Enchantment.protection, 1);
+ InfusedEarth .setEnchantmentForArmors(Enchantment.protection, 4);
+
+ InfusedEntropy .setEnchantmentForArmors(Enchantment.thorns, 3);
+
+ InfusedWater .setEnchantmentForArmors(Enchantment.aquaAffinity, 1);
+ IronWood .setEnchantmentForArmors(Enchantment.aquaAffinity, 1);
+
+ InfusedOrder .setEnchantmentForArmors(Enchantment.projectileProtection, 4);
+
+ InfusedDull .setEnchantmentForArmors(Enchantment.blastProtection, 4);
+
+ InfusedVis .setEnchantmentForArmors(Enchantment.protection, 4);
+
+ /*
+ Stone .setSpecialEffect(SpecialToolEffect.Crushing, 1);
+ GraniteRed .setSpecialEffect(SpecialToolEffect.Crushing, 2);
+ GraniteBlack .setSpecialEffect(SpecialToolEffect.Crushing, 2);
+ Adamantium .setSpecialEffect(SpecialToolEffect.Crushing, 3);
+
+ DeepIron .setSpecialEffect(SpecialToolEffect.Magnetic, 1);
+ MeteoricIron .setSpecialEffect(SpecialToolEffect.Magnetic, 2);
+ MeteoricSteel .setSpecialEffect(SpecialToolEffect.Magnetic, 3);
+ IronMagnetic .setSpecialEffect(SpecialToolEffect.Magnetic, 1);
+ SteelMagnetic .setSpecialEffect(SpecialToolEffect.Magnetic, 2);
+ NeodymiumMagnetic .setSpecialEffect(SpecialToolEffect.Magnetic, 3);
+ */
+
+ FryingOilHot .setHeatDamage(1.0F);
+ Lava .setHeatDamage(3.0F);
+ Firestone .setHeatDamage(5.0F);
+ Pyrotheum .setHeatDamage(5.0F);
+
+ Chalcopyrite .addOreByProducts(Pyrite , Cobalt , Cadmium , Gold );
+ Sphalerite .addOreByProducts(GarnetYellow , Cadmium , Gallium , Zinc );
+ MeteoricIron .addOreByProducts(Iron , Nickel , Iridium , Platinum );
+ GlauconiteSand .addOreByProducts(Sodium , Aluminium , Iron );
+ Glauconite .addOreByProducts(Sodium , Aluminium , Iron );
+ Vermiculite .addOreByProducts(Iron , Aluminium , Magnesium );
+ FullersEarth .addOreByProducts(Aluminium , Silicon , Magnesium );
+ Bentonite .addOreByProducts(Aluminium , Calcium , Magnesium );
+ Uraninite .addOreByProducts(Uranium , Thorium , Plutonium );
+ Pitchblende .addOreByProducts(Thorium , Uranium , Lead );
+ Galena .addOreByProducts(Sulfur , Silver , Lead );
+ Lapis .addOreByProducts(Lazurite , Sodalite , Pyrite );
+ Pyrite .addOreByProducts(Sulfur , Phosphorus , Iron );
+ Copper .addOreByProducts(Cobalt , Gold , Nickel );
+ Nickel .addOreByProducts(Cobalt , Platinum , Iron );
+ GarnetRed .addOreByProducts(Spessartine , Pyrope , Almandine );
+ GarnetYellow .addOreByProducts(Andradite , Grossular , Uvarovite );
+ Cooperite .addOreByProducts(Palladium , Nickel , Iridium );
+ Cinnabar .addOreByProducts(Redstone , Sulfur , Glowstone );
+ Tantalite .addOreByProducts(Manganese , Niobium , Tantalum );
+ Pollucite .addOreByProducts(Caesium , Aluminium , Rubidium );
+ Chrysotile .addOreByProducts(Asbestos , Silicon , Magnesium );
+ Asbestos .addOreByProducts(Asbestos , Silicon , Magnesium );
+ Pentlandite .addOreByProducts(Iron , Sulfur , Cobalt );
+ Uranium .addOreByProducts(Lead , Plutonium , Thorium );
+ Scheelite .addOreByProducts(Manganese , Molybdenum , Calcium );
+ Tungstate .addOreByProducts(Manganese , Silver , Lithium );
+ Bauxite .addOreByProducts(Grossular , Titanium , Gallium );
+ QuartzSand .addOreByProducts(CertusQuartz , Quartzite , Barite );
+ Quartzite .addOreByProducts(CertusQuartz , Barite );
+ CertusQuartz .addOreByProducts(Quartzite , Barite );
+ //ChargedCertusQuartz .addOreByProducts(CertusQuartz , Quartzite , Barite );
+ Redstone .addOreByProducts(Cinnabar , RareEarth , Glowstone );
+ Monazite .addOreByProducts(Thorium , Neodymium , RareEarth );
+ Forcicium .addOreByProducts(Thorium , Neodymium , RareEarth );
+ Forcillium .addOreByProducts(Thorium , Neodymium , RareEarth );
+ Malachite .addOreByProducts(Copper , BrownLimonite , Calcite );
+ YellowLimonite .addOreByProducts(Nickel , BrownLimonite , Cobalt );
+ BrownLimonite .addOreByProducts(Malachite , YellowLimonite );
+ Neodymium .addOreByProducts(Monazite , RareEarth );
+ Bastnasite .addOreByProducts(Neodymium , RareEarth );
+ Glowstone .addOreByProducts(Redstone , Gold );
+ Zinc .addOreByProducts(Tin , Gallium );
+ Tungsten .addOreByProducts(Manganese , Molybdenum );
+ Diatomite .addOreByProducts(BandedIron , Sapphire );
+ Iron .addOreByProducts(Nickel , Tin );
+ Lepidolite .addOreByProducts(Lithium , Caesium );
+ Gold .addOreByProducts(Copper , Nickel );
+ Tin .addOreByProducts(Iron , Zinc );
+ Antimony .addOreByProducts(Zinc , Iron );
+ Silver .addOreByProducts(Lead , Sulfur );
+ Lead .addOreByProducts(Silver , Sulfur );
+ Thorium .addOreByProducts(Uranium , Lead );
+ Plutonium .addOreByProducts(Uranium , Lead );
+ Electrum .addOreByProducts(Gold , Silver );
+ Bronze .addOreByProducts(Copper , Tin );
+ Brass .addOreByProducts(Copper , Zinc );
+ Coal .addOreByProducts(Lignite , Thorium );
+ Ilmenite .addOreByProducts(Iron , Titanium );
+ Manganese .addOreByProducts(Chrome , Iron );
+ Sapphire .addOreByProducts(Aluminium , GreenSapphire );
+ GreenSapphire .addOreByProducts(Aluminium , Sapphire );
+ Platinum .addOreByProducts(Nickel , Iridium );
+ Emerald .addOreByProducts(Beryllium , Aluminium );
+ Olivine .addOreByProducts(Pyrope , Magnesium );
+ Chrome .addOreByProducts(Iron , Magnesium );
+ Chromite .addOreByProducts(Iron , Magnesium );
+ Tetrahedrite .addOreByProducts(Antimony , Zinc );
+ GarnetSand .addOreByProducts(GarnetRed , GarnetYellow );
+ Magnetite .addOreByProducts(Iron , Gold );
+ GraniticMineralSand .addOreByProducts(GraniteBlack , Magnetite );
+ BasalticMineralSand .addOreByProducts(Basalt , Magnetite );
+ Basalt .addOreByProducts(Olivine , DarkAsh );
+ Celestine .addOreByProducts(Strontium , Sulfur );
+ VanadiumMagnetite .addOreByProducts(Magnetite , Vanadium );
+ Lazurite .addOreByProducts(Sodalite , Lapis );
+ Sodalite .addOreByProducts(Lazurite , Lapis );
+ Spodumene .addOreByProducts(Aluminium , Lithium );
+ Ruby .addOreByProducts(Chrome , GarnetRed );
+ Phosphorus .addOreByProducts(Apatite , Phosphate );
+ Iridium .addOreByProducts(Platinum , Osmium );
+ Pyrope .addOreByProducts(GarnetRed , Magnesium );
+ Almandine .addOreByProducts(GarnetRed , Aluminium );
+ Spessartine .addOreByProducts(GarnetRed , Manganese );
+ Andradite .addOreByProducts(GarnetYellow , Iron );
+ Grossular .addOreByProducts(GarnetYellow , Calcium );
+ Uvarovite .addOreByProducts(GarnetYellow , Chrome );
+ Calcite .addOreByProducts(Andradite , Malachite );
+ NaquadahEnriched .addOreByProducts(Naquadah , Naquadria );
+ Naquadah .addOreByProducts(NaquadahEnriched );
+ Pyrolusite .addOreByProducts(Manganese );
+ Molybdenite .addOreByProducts(Molybdenum );
+ Stibnite .addOreByProducts(Antimony );
+ Garnierite .addOreByProducts(Nickel );
+ Lignite .addOreByProducts(Coal );
+ Diamond .addOreByProducts(Graphite );
+ Beryllium .addOreByProducts(Emerald );
+ Apatite .addOreByProducts(Phosphorus );
+ Nikolite .addOreByProducts(Diamond );
+ Teslatite .addOreByProducts(Diamond );
+ Magnesite .addOreByProducts(Magnesium );
+ NetherQuartz .addOreByProducts(Netherrack );
+ PigIron .addOreByProducts(Iron );
+ DeepIron .addOreByProducts(Iron );
+ ShadowIron .addOreByProducts(Iron );
+ DarkIron .addOreByProducts(Iron );
+ MeteoricIron .addOreByProducts(Iron );
+ Steel .addOreByProducts(Iron );
+ HSLA .addOreByProducts(Iron );
+ Mithril .addOreByProducts(Platinum );
+ Midasium .addOreByProducts(Gold );
+ AstralSilver .addOreByProducts(Silver );
+ Graphite .addOreByProducts(Carbon );
+ Netherrack .addOreByProducts(Sulfur );
+ Flint .addOreByProducts(Obsidian );
+ Cobaltite .addOreByProducts(Cobalt );
+ Cobalt .addOreByProducts(Cobaltite );
+ Sulfur .addOreByProducts(Sulfur );
+ Saltpeter .addOreByProducts(Saltpeter );
+ Endstone .addOreByProducts(Helium_3 );
+ Osmium .addOreByProducts(Iridium );
+ Magnesium .addOreByProducts(Olivine );
+ Aluminium .addOreByProducts(Bauxite );
+ Titanium .addOreByProducts(Almandine );
+ Obsidian .addOreByProducts(Olivine );
+ Ash .addOreByProducts(Carbon );
+ DarkAsh .addOreByProducts(Carbon );
+ Redrock .addOreByProducts(Clay );
+ Marble .addOreByProducts(Calcite );
+ Clay .addOreByProducts(Clay );
+ Cassiterite .addOreByProducts(Tin );
+ CassiteriteSand .addOreByProducts(Tin );
+ GraniteBlack .addOreByProducts(Biotite );
+ GraniteRed .addOreByProducts(PotassiumFeldspar );
+ Phosphate .addOreByProducts(Phosphor );
+ Phosphor .addOreByProducts(Phosphate );
+ Jade .addOreByProducts(Jade );
+ Tanzanite .addOreByProducts(Opal );
+ Opal .addOreByProducts(Tanzanite );
+ Amethyst .addOreByProducts(Amethyst );
+ Jasper .addOreByProducts(FoolsRuby );
+ FoolsRuby .addOreByProducts(Jasper );
+ Amber .addOreByProducts(Amber );
+ Topaz .addOreByProducts(BlueTopaz );
+ BlueTopaz .addOreByProducts(Topaz );
+ Niter .addOreByProducts(Saltpeter );
+ Vinteum .addOreByProducts(Vinteum );
+ Force .addOreByProducts(Force );
+ Dilithium .addOreByProducts(Dilithium );
+ Neutronium .addOreByProducts(Neutronium );
+ Lithium .addOreByProducts(Lithium );
+ Silicon .addOreByProducts(SiliconDioxide );
+ Salt .addOreByProducts(RockSalt );
+ RockSalt .addOreByProducts(Salt );
+
+ Glue.mChemicalFormula = "No Horses were harmed for the Production";
+ UUAmplifier.mChemicalFormula = "Accelerates the Mass Fabricator";
+ LiveRoot.mChemicalFormula = "";
+ WoodSealed.mChemicalFormula = "";
+ Wood.mChemicalFormula = "";
+ FoolsRuby.mChemicalFormula = Ruby.mChemicalFormula;
+
+ // Naquadah is green when molten, so this reflects the Color change approciately
+ Naquadah.mMoltenRGBa[0] = 0;
+ Naquadah.mMoltenRGBa[1] = 255;
+ Naquadah.mMoltenRGBa[2] = 0;
+ Naquadah.mMoltenRGBa[3] = 0;
+ NaquadahEnriched.mMoltenRGBa[0] = 64;
+ NaquadahEnriched.mMoltenRGBa[1] = 255;
+ NaquadahEnriched.mMoltenRGBa[2] = 64;
+ NaquadahEnriched.mMoltenRGBa[3] = 0;
+ Naquadria.mMoltenRGBa[0] = 128;
+ Naquadria.mMoltenRGBa[1] = 255;
+ Naquadria.mMoltenRGBa[2] = 128;
+ Naquadria.mMoltenRGBa[3] = 0;
+
+ NaquadahEnriched.mChemicalFormula = "Nq+";
+ Naquadah.mChemicalFormula = "Nq";
+ Naquadria.mChemicalFormula = "NqX";
+ }
+
+ public static Materials get(String aMaterialName) {
+ Object tObject = GT_Utility.getFieldContent(Materials.class, aMaterialName, F, F);
+ if (tObject != null && tObject instanceof Materials) return (Materials)tObject;
+ return _NULL;
+ }
+
+ public static Materials getRealMaterial(String aMaterialName) {
+ return get(aMaterialName).mMaterialInto;
+ }
+
+ /**
+ * Called in preInit with the Config to set Values.
+ * @param aConfiguration
+ */
+ public static void init(GT_Config aConfiguration) {
+ for (Materials tMaterial : VALUES) {
+ String tString = tMaterial.toString().toLowerCase();
+ tMaterial.mHeatDamage = (float)aConfiguration.get(ConfigCategories.Materials.heatdamage, tString, tMaterial.mHeatDamage);
+ if (tMaterial.mBlastFurnaceRequired) tMaterial.mBlastFurnaceRequired = aConfiguration.get(ConfigCategories.Materials.blastfurnacerequirements, tString, T);
+ if (tMaterial.mBlastFurnaceRequired && aConfiguration.get(ConfigCategories.Materials.blastinductionsmelter, tString, tMaterial.mBlastFurnaceTemp < 1500)) GT_ModHandler.ThermalExpansion.addSmelterBlastOre(tMaterial);
+ tMaterial.mHandleMaterial = (tMaterial==Desh?tMaterial.mHandleMaterial:tMaterial==Diamond||tMaterial==Thaumium?Wood:tMaterial.contains(SubTag.BURNING)?Blaze:tMaterial.contains(SubTag.MAGICAL)&&tMaterial.contains(SubTag.CRYSTAL)&&Loader.isModLoaded(MOD_ID_TC)?Thaumium:tMaterial.getMass()>Element.Tc.getMass()*2?TungstenSteel:tMaterial.getMass()>Element.Tc.getMass()?Steel:Wood);
+ }
+ }
+
+ public boolean isRadioactive() {
+ if (mElement != null) return mElement.mHalfLifeSeconds >= 0;
+ for (MaterialStack tMaterial : mMaterialList) if (tMaterial.mMaterial.isRadioactive()) return T;
+ return F;
+ }
+
+ public long getProtons() {
+ if (mElement != null) return mElement.getProtons();
+ if (mMaterialList.size() <= 0) return Element.Tc.getProtons();
+ long rAmount = 0, tAmount = 0;
+ for (MaterialStack tMaterial : mMaterialList) {
+ tAmount += tMaterial.mAmount;
+ rAmount += tMaterial.mAmount * tMaterial.mMaterial.getProtons();
+ }
+ return (getDensity() * rAmount) / (tAmount * M);
+ }
+
+ public long getNeutrons() {
+ if (mElement != null) return mElement.getNeutrons();
+ if (mMaterialList.size() <= 0) return Element.Tc.getNeutrons();
+ long rAmount = 0, tAmount = 0;
+ for (MaterialStack tMaterial : mMaterialList) {
+ tAmount += tMaterial.mAmount;
+ rAmount += tMaterial.mAmount * tMaterial.mMaterial.getNeutrons();
+ }
+ return (getDensity() * rAmount) / (tAmount * M);
+ }
+
+ public long getMass() {
+ if (mElement != null) return mElement.getMass();
+ if (mMaterialList.size() <= 0) return Element.Tc.getMass();
+ long rAmount = 0, tAmount = 0;
+ for (MaterialStack tMaterial : mMaterialList) {
+ tAmount += tMaterial.mAmount;
+ rAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass();
+ }
+ return (getDensity() * rAmount) / (tAmount * M);
+ }
+
+ public long getDensity() {
+ return mDensity;
+ }
+
+ public String getToolTip() {
+ return getToolTip(1, F);
+ }
+
+ public String getToolTip(boolean aShowQuestionMarks) {
+ return getToolTip(1, aShowQuestionMarks);
+ }
+
+ public String getToolTip(long aMultiplier) {
+ return getToolTip(aMultiplier, F);
+ }
+
+ public String getToolTip(long aMultiplier, boolean aShowQuestionMarks) {
+ if (!aShowQuestionMarks && mChemicalFormula.equals("?")) return "";
+ if (aMultiplier >= M * 2 && !mMaterialList.isEmpty()) {
+ return ((mElement != null || (mMaterialList.size() < 2 && mMaterialList.get(0).mAmount == 1))?mChemicalFormula:"(" + mChemicalFormula + ")") + aMultiplier;
+ }
+ return mChemicalFormula;
+ }
+
+ private final ArrayList<ItemStack> mMaterialItems = new ArrayList<ItemStack>();
+
+ /**
+ * Adds an ItemStack to this Material.
+ */
+ public Materials add(ItemStack aStack) {
+ if (aStack != null && !contains(aStack)) mMaterialItems.add(aStack);
+ return this;
+ }
+
+ /**
+ * This is used to determine if any of the ItemStacks belongs to this Material.
+ */
+ public boolean contains(ItemStack... aStacks) {
+ if (aStacks == null || aStacks.length <= 0) return F;
+ for (ItemStack tStack : mMaterialItems) for (ItemStack aStack : aStacks) if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) return T;
+ return F;
+ }
+
+ /**
+ * This is used to determine if an ItemStack belongs to this Material.
+ */
+ public boolean remove(ItemStack aStack) {
+ if (aStack == null) return F;
+ boolean temp = F;
+ for (int i = 0; i < mMaterialItems.size(); i++) if (GT_Utility.areStacksEqual(aStack, mMaterialItems.get(i))) {
+ mMaterialItems.remove(i--);
+ temp = T;
+ }
+ return temp;
+ }
+
+ private final Collection<SubTag> mSubTags = new HashSet<SubTag>();
+
+ /**
+ * Adds a SubTag to this Material
+ */
+ @Override
+ public ISubTagContainer add(SubTag... aTags) {
+ if (aTags != null) for (SubTag aTag : aTags) if (aTag != null && !contains(aTag)) {
+ aTag.addContainerToList(this);
+ mSubTags.add(aTag);
+ }
+ return this;
+ }
+
+ /**
+ * If this Material has this exact SubTag
+ */
+ @Override
+ public boolean contains(SubTag aTag) {
+ return mSubTags.contains(aTag);
+ }
+
+ /**
+ * Removes a SubTag from this Material
+ */
+ @Override
+ public boolean remove(SubTag aTag) {
+ return mSubTags.remove(aTag);
+ }
+
+ /**
+ * Sets the Heat Damage for this Material (negative = frost)
+ */
+ public Materials setHeatDamage(float aHeatDamage) {
+ mHeatDamage = aHeatDamage;
+ return this;
+ }
+
+ /**
+ * Adds a Material to the List of Byproducts when grinding this Ore.
+ * Is used for more precise Ore grinding, so that it is possible to choose between certain kinds of Materials.
+ */
+ public Materials addOreByProduct(Materials aMaterial) {
+ if (!mOreByProducts.contains(aMaterial.mMaterialInto)) mOreByProducts.add(aMaterial.mMaterialInto);
+ return this;
+ }
+
+ /**
+ * Adds multiple Materials to the List of Byproducts when grinding this Ore.
+ * Is used for more precise Ore grinding, so that it is possible to choose between certain kinds of Materials.
+ */
+ public Materials addOreByProducts(Materials... aMaterials) {
+ for (Materials tMaterial : aMaterials) if (tMaterial != null) addOreByProduct(tMaterial);
+ return this;
+ }
+
+ /**
+ * If this Ore gives multiple drops of its Main Material.
+ * Lapis Ore for example gives about 6 drops.
+ */
+ public Materials setOreMultiplier(int aOreMultiplier) {
+ if (aOreMultiplier > 0) mOreMultiplier = aOreMultiplier;
+ return this;
+ }
+
+ /**
+ * If this Ore gives multiple drops of its Byproduct Material.
+ */
+ public Materials setByProductMultiplier(int aByProductMultiplier) {
+ if (aByProductMultiplier > 0) mByProductMultiplier = aByProductMultiplier;
+ return this;
+ }
+
+ /**
+ * If this Ore gives multiple drops of its Main Material.
+ * Lapis Ore for example gives about 6 drops.
+ */
+ public Materials setSmeltingMultiplier(int aSmeltingMultiplier) {
+ if (aSmeltingMultiplier > 0) mSmeltingMultiplier = aSmeltingMultiplier;
+ return this;
+ }
+
+ /**
+ * This Ore should be smolten directly into an Ingot of this Material instead of an Ingot of itself.
+ */
+ public Materials setDirectSmelting(Materials aMaterial) {
+ if (aMaterial != null) mDirectSmelting = aMaterial.mMaterialInto.mDirectSmelting;
+ return this;
+ }
+
+ /**
+ * This Material should be the Main Material this Ore gets ground into.
+ * Example, Chromite giving Chrome or Tungstate giving Tungsten.
+ */
+ public Materials setOreReplacement(Materials aMaterial) {
+ if (aMaterial != null) mOreReplacement = aMaterial.mMaterialInto.mOreReplacement;
+ return this;
+ }
+
+ /**
+ * This Material smelts always into an instance of aMaterial. Used for Magnets.
+ */
+ public Materials setSmeltingInto(Materials aMaterial) {
+ if (aMaterial != null) mSmeltInto = aMaterial.mMaterialInto.mSmeltInto;
+ return this;
+ }
+
+ /**
+ * This Material arc smelts always into an instance of aMaterial. Used for Wrought Iron.
+ */
+ public Materials setArcSmeltingInto(Materials aMaterial) {
+ if (aMaterial != null) mArcSmeltInto = aMaterial.mMaterialInto.mArcSmeltInto;
+ return this;
+ }
+
+ /**
+ * This Material macerates always into an instance of aMaterial.
+ */
+ public Materials setMaceratingInto(Materials aMaterial) {
+ if (aMaterial != null) mMacerateInto = aMaterial.mMaterialInto.mMacerateInto;
+ return this;
+ }
+
+ public Materials setEnchantmentForTools(Enchantment aEnchantment, int aEnchantmentLevel) {
+ mEnchantmentTools = aEnchantment;
+ mEnchantmentToolsLevel = (byte)aEnchantmentLevel;
+ return this;
+ }
+
+ public Materials setEnchantmentForArmors(Enchantment aEnchantment, int aEnchantmentLevel) {
+ mEnchantmentArmors = aEnchantment;
+ mEnchantmentArmorsLevel = (byte)aEnchantmentLevel;
+ return this;
+ }
+
+ /**
+ * This Array can be changed dynamically by a Tick Handler in order to get a glowing Effect on all GT Meta Items out of this Material.
+ */
+ public final short[] mRGBa = new short[] {255, 255, 255, 0}, mMoltenRGBa = new short[] {255, 255, 255, 0};
+
+ public Enchantment mEnchantmentTools = null, mEnchantmentArmors = null;
+ public byte mEnchantmentToolsLevel = 0, mEnchantmentArmorsLevel = 0;
+ public final TextureSet mIconSet;
+ public boolean mBlastFurnaceRequired = F;
+ public float mToolSpeed = 1.0F, mHeatDamage = 0.0F;
+ public String mChemicalFormula = "?", mDefaultLocalName = "null";
+ public Dyes mColor = Dyes._NULL;
+ public short mMeltingPoint = 0, mBlastFurnaceTemp = 0;
+ public int mTypes = 0, mDurability = 16, mFuelPower = 0, mFuelType = 0, mExtraData = 0, mOreValue = 0, mOreMultiplier = 1, mByProductMultiplier = 1, mSmeltingMultiplier = 1;
+ public long mDensity = M;
+ public Element mElement = null;
+ public Materials mDirectSmelting = this, mOreReplacement = this, mMacerateInto = this, mSmeltInto = this, mArcSmeltInto = this, mHandleMaterial = this;
+ public byte mToolQuality = 0;
+ public final int mMetaItemSubID;
+ public final boolean mUnificatable;
+ public final Materials mMaterialInto;
+ public final List<MaterialStack> mMaterialList = new ArrayList<MaterialStack>();
+ public final List<Materials> mOreByProducts = new ArrayList<Materials>(), mOreReRegistrations = new ArrayList<Materials>();
+ public final List<TC_AspectStack> mAspects = new ArrayList<TC_AspectStack>();
+ public Fluid mSolid = null, mFluid = null, mGas = null, mPlasma = null;
+ /** This Fluid is used as standard Unit for Molten Materials. 1296 is a Molten Block, what means 144 is one Material Unit worth */
+ public Fluid mStandardMoltenFluid = null;
+
+ public FluidStack getSolid(long aAmount) {
+ if (mSolid == null) return null;
+ return new GT_FluidStack(mSolid, (int)aAmount);
+ }
+
+ public FluidStack getFluid(long aAmount) {
+ if (mFluid == null) return null;
+ return new GT_FluidStack(mFluid, (int)aAmount);
+ }
+
+ public FluidStack getGas(long aAmount) {
+ if (mGas == null) return null;
+ return new GT_FluidStack(mGas, (int)aAmount);
+ }
+
+ public FluidStack getPlasma(long aAmount) {
+ if (mPlasma == null) return null;
+ return new GT_FluidStack(mPlasma, (int)aAmount);
+ }
+
+ public FluidStack getMolten(long aAmount) {
+ if (mStandardMoltenFluid == null) return null;
+ return new GT_FluidStack(mStandardMoltenFluid, (int)aAmount);
+ }
+
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, boolean aUnificatable) {
+ mUnificatable = aUnificatable;
+ mMaterialInto = this;
+ mMetaItemSubID = aMetaItemSubID;
+ mToolQuality = (byte)aToolQuality;
+ mDurability = aToolDurability;
+ mToolSpeed = aToolSpeed;
+ mIconSet = aIconSet;
+ if (aMetaItemSubID >= 0) {
+ if (GregTech_API.sGeneratedMaterials[aMetaItemSubID] == null) {
+ GregTech_API.sGeneratedMaterials[aMetaItemSubID] = this;
+ } else {
+ throw new IllegalArgumentException("The Index " + aMetaItemSubID + " is already used!");
+ }
+ }
+ }
+
+ private Materials(Materials aMaterialInto, boolean aReRegisterIntoThis) {
+ mUnificatable = F;
+ mDefaultLocalName = aMaterialInto.mDefaultLocalName;
+ mMaterialInto = aMaterialInto.mMaterialInto;
+ if (aReRegisterIntoThis) mMaterialInto.mOreReRegistrations.add(this);
+ mChemicalFormula = aMaterialInto.mChemicalFormula;
+ mMetaItemSubID = -1;
+ mIconSet = TextureSet.SET_NONE;
+ }
+
+ /**
+ * @param aMetaItemSubID the Sub-ID used in my own MetaItems. Range 0-1000. -1 for no Material
+ * @param aTypes which kind of Items should be generated. Bitmask as follows:
+ * 1 = Dusts of all kinds.
+ * 2 = Dusts, Ingots, Plates, Rods/Sticks, Machine Components and other Metal specific things.
+ * 4 = Dusts, Gems, Plates, Lenses (if transparent).
+ * 8 = Dusts, Impure Dusts, crushed Ores, purified Ores, centrifuged Ores etc.
+ * 16 = Cells
+ * 32 = Plasma Cells
+ * 64 = Tool Heads
+ * 128 = Gears
+ * @param aR, aG, aB Color of the Material 0-255 each.
+ * @param aA transparency of the Material Texture. 0 = fully visible, 255 = Invisible.
+ * @param aLocalName The Name used as Default for localization.
+ * @param aFuelType Type of Generator to get Energy from this Material.
+ * @param aFuelPower EU generated. Will be multiplied by 1000, also additionally multiplied by 2 for Gems.
+ * @param aAmplificationValue Amount of UUM amplifier gotten from this.
+ * @param aUUMEnergy Amount of EU needed to shape the UUM into this Material.
+ * @param aMeltingPoint Used to determine the smelting Costs in Furnii.
+ * @param aBlastFurnaceTemp Used to determine the needed Heat capactiy Costs in Blast Furnii.
+ * @param aBlastFurnaceRequired If this requires a Blast Furnace.
+ * @param aColor Vanilla MC Wool Color which comes the closest to this.
+ */
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, int aTypes, int aR, int aG, int aB, int aA, String aLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor) {
+ this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, T);
+ mDefaultLocalName = aLocalName;
+ mMeltingPoint = (short)aMeltingPoint;
+ mBlastFurnaceTemp = (short)aBlastFurnaceTemp;
+ mBlastFurnaceRequired = aBlastFurnaceRequired;
+ if (aTransparent) add(SubTag.TRANSPARENT);
+ mFuelPower = aFuelPower;
+ mFuelType = aFuelType;
+ mOreValue = aOreValue;
+ mDensity = (M * aDensityMultiplier) / aDensityDivider;
+ mColor = aColor==null?Dyes._NULL:aColor;
+ if (mColor != null) add(SubTag.HAS_COLOR);
+ mRGBa[0] = mMoltenRGBa[0] = (short)aR;
+ mRGBa[1] = mMoltenRGBa[1] = (short)aG;
+ mRGBa[2] = mMoltenRGBa[2] = (short)aB;
+ mRGBa[3] = mMoltenRGBa[3] = (short)aA;
+ mTypes = aTypes;
+ if ((mTypes & 2) != 0) add(SubTag.SMELTING_TO_FLUID);
+ }
+
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, int aTypes, int aR, int aG, int aB, int aA, String aLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, List<TC_AspectStack> aAspects) {
+ this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, aTypes, aR, aG, aB, aA, aLocalName, aFuelType, aFuelPower, aMeltingPoint, aBlastFurnaceTemp, aBlastFurnaceRequired, aTransparent, aOreValue, aDensityMultiplier, aDensityDivider, aColor);
+ mAspects.addAll(aAspects);
+ }
+
+ /**
+ * @param aElement The Element Enum represented by this Material
+ */
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, int aTypes, int aR, int aG, int aB, int aA, String aLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, Element aElement, List<TC_AspectStack> aAspects) {
+ this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, aTypes, aR, aG, aB, aA, aLocalName, aFuelType, aFuelPower, aMeltingPoint, aBlastFurnaceTemp, aBlastFurnaceRequired, aTransparent, aOreValue, aDensityMultiplier, aDensityDivider, aColor);
+ mElement = aElement;
+ mElement.mLinkedMaterials.add(this);
+ if (aElement == Element._NULL) {
+ mChemicalFormula = "Empty";
+ } else {
+ mChemicalFormula = aElement.toString();
+ mChemicalFormula = mChemicalFormula.replaceAll("_", "-");
+ }
+ mAspects.addAll(aAspects);
+ }
+
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, int aTypes, int aR, int aG, int aB, int aA, String aLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, int aExtraData, List<MaterialStack> aMaterialList) {
+ this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, aTypes, aR, aG, aB, aA, aLocalName, aFuelType, aFuelPower, aMeltingPoint, aBlastFurnaceTemp, aBlastFurnaceRequired, aTransparent, aOreValue, aDensityMultiplier, aDensityDivider, aColor, aExtraData, aMaterialList, null);
+ }
+
+ private Materials(int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aToolDurability, int aToolQuality, int aTypes, int aR, int aG, int aB, int aA, String aLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, int aExtraData, List<MaterialStack> aMaterialList, List<TC_AspectStack> aAspects) {
+ this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, aTypes, aR, aG, aB, aA, aLocalName, aFuelType, aFuelPower, aMeltingPoint, aBlastFurnaceTemp, aBlastFurnaceRequired, aTransparent, aOreValue, aDensityMultiplier, aDensityDivider, aColor);
+ mExtraData = aExtraData;
+ mMaterialList.addAll(aMaterialList);
+ mChemicalFormula = "";
+ for (MaterialStack tMaterial : mMaterialList) mChemicalFormula += tMaterial.toString();
+ mChemicalFormula = mChemicalFormula.replaceAll("_", "-");
+
+ int tAmountOfComponents = 0, tMeltingPoint = 0;
+ for (MaterialStack tMaterial : mMaterialList) {
+ tAmountOfComponents += tMaterial.mAmount;
+ if (tMaterial.mMaterial.mMeltingPoint > 0) tMeltingPoint += tMaterial.mMaterial.mMeltingPoint * tMaterial.mAmount;
+ if (aAspects == null) for (TC_AspectStack tAspect : tMaterial.mMaterial.mAspects) tAspect.addToAspectList(mAspects);
+ }
+
+ if (mMeltingPoint < 0) mMeltingPoint = (short)(tMeltingPoint / tAmountOfComponents);
+
+ tAmountOfComponents *= aDensityMultiplier;
+ tAmountOfComponents /= aDensityDivider;
+ if (aAspects == null) for (TC_AspectStack tAspect : mAspects) tAspect.mAmount = Math.max(1, tAspect.mAmount / Math.max(1, tAmountOfComponents)); else mAspects.addAll(aAspects);
+ }
+
+ public static volatile int VERSION = 508;
+
+ @Override
+ public short[] getRGBA() {
+ return mRGBa;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/OreDictNames.java b/src/main/java/gregtech/api/enums/OreDictNames.java
new file mode 100644
index 0000000000..4ba2b7b158
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/OreDictNames.java
@@ -0,0 +1,78 @@
+package gregtech.api.enums;
+
+
+public enum OreDictNames {
+ craftingAnvil,
+ craftingBook,
+ craftingCentrifuge,
+ craftingChest,
+ craftingCompressor,
+ craftingConveyor,
+ craftingDiamondBlade,
+ craftingDrain,
+ craftingDuctTape,
+ craftingElectricFurnace,
+ craftingElectromagnet,
+ enderChest, // Vanilla OreDict Name
+ craftingEnergyCellUpgrade,
+ craftingEnergyMeter,
+ craftingExtractor,
+ craftingFeather,
+ craftingFurnace,
+ craftingFilter,
+ craftingGenerator,
+ craftingGeothermalGenerator,
+ craftingGrinder,
+ craftingInductionFurnace,
+ craftingIndustrialDiamond,
+ craftingIronFurnace,
+ craftingLensBlack,
+ craftingLensBlue,
+ craftingLensBrown,
+ craftingLensCyan,
+ craftingLensGray,
+ craftingLensGreen,
+ craftingLensLightBlue,
+ craftingLensLightGray,
+ craftingLensLime,
+ craftingLensMagenta,
+ craftingLensOrange,
+ craftingLensPink,
+ craftingLensPurple,
+ craftingLensRed,
+ craftingLensWhite,
+ craftingLensYellow,
+ craftingMacerator,
+ craftingMetalformer,
+ craftingPiston,
+ craftingPump,
+ craftingQuantumChestUpgrade,
+ craftingQuartz,
+ craftingRawMachineTier00,
+ craftingRawMachineTier01,
+ craftingRawMachineTier02,
+ craftingRawMachineTier03,
+ craftingRawMachineTier04,
+ craftingRecycler,
+ craftingRedstoneReceiver,
+ craftingRedstoneTorch,
+ craftingRedstoneTranceiver,
+ craftingRedstoneTransmitter,
+ craftingSafe,
+ craftingSteamTank,
+ craftingSteamUpgrade,
+ craftingSuperconductor,
+ craftingTank,
+ craftingTeleporter,
+ craftingThermalCentrifuge,
+ craftingTurbineBladeBronze,
+ craftingTurbineBladeCarbon,
+ craftingTurbineBladeMagnalium,
+ craftingTurbineBladeSteel,
+ craftingTurbineBladeTungstenSteel,
+ craftingWireCopper,
+ craftingWireGold,
+ craftingWireIron,
+ craftingWireTin,
+ craftingWorkBench,
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java
new file mode 100644
index 0000000000..fb7510dd45
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/OrePrefixes.java
@@ -0,0 +1,798 @@
+package gregtech.api.enums;
+
+import static gregtech.api.enums.GT_Values.*;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.ICondition;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.ISubTagContainer;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+
+public enum OrePrefixes {
+ @Deprecated pulp ("Pulps" , "" , "" ,F,F,F,F,F,F,F,F,F,F, B[0]|B[1]|B[2]|B[3] , -1, 64, -1),
+ @Deprecated leaves ("Leaves" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ @Deprecated sapling ("Saplings" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ @Deprecated itemDust ("Dusts" , "" , "" ,F,F,F,F,F,F,F,F,F,F, B[0]|B[1]|B[2]|B[3] , -1, 64, -1),
+ oreBlackgranite ("Black Granite Ores" , "Granite " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // In case of an End-Ores Mod. Ore -> Material is a Oneway Operation!
+ oreRedgranite ("Red Granite Ores" , "Granite " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // In case of an End-Ores Mod. Ore -> Material is a Oneway Operation!
+ oreNetherrack ("Netherrack Ores" , "Nether " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of the Nether-Ores Mod. Causes Ores to double. Ore -> Material is a Oneway Operation!
+ oreNether ("Nether Ores" , "Nether " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of the Nether-Ores Mod. Causes Ores to double. Ore -> Material is a Oneway Operation!
+ @Deprecated denseore ("Dense Ores" , "" , "" ,F,F,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1),
+ oreDense ("Dense Ores" , "Dense " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of the Dense-Ores Mod. Causes Ores to double. Ore -> Material is a Oneway Operation!
+ oreRich ("Rich Ores" , "Rich " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of TFC
+ oreNormal ("Normal Ores" , "Normal " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of TFC
+ oreSmall ("Small Ores" , "Small " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, 67), // Prefix of Railcraft.
+ orePoor ("Poor Ores" , "Poor " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // Prefix of Railcraft.
+ oreEndstone ("Endstone Ores" , "End " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // In case of an End-Ores Mod. Ore -> Material is a Oneway Operation!
+ oreEnd ("End Ores" , "End " , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1), // In case of an End-Ores Mod. Ore -> Material is a Oneway Operation!
+ @Deprecated oreGem ("Ores" , "" , "" ,F,F,F,F,F,T,F,F,F,T, B[3] , -1, 64, -1),
+ ore ("Ores" , "" , " Ore" ,T,T,F,F,F,T,F,F,F,T, B[3] , -1, 64, 68), // Regular Ore Prefix. Ore -> Material is a Oneway Operation! Introduced by Eloraam
+ crushedCentrifuged ("Centrifuged Ores" , "Centrifuged " , " Ore" ,T,T,F,F,F,F,F,T,F,T, B[3] , -1, 64, 7),
+ crushedPurified ("Purified Ores" , "Purified " , " Ore" ,T,T,F,F,F,F,F,T,F,T, B[3] , -1, 64, 6),
+ crushed ("Crushed Ores" , "Crushed " , " Ore" ,T,T,F,F,F,F,F,T,F,T, B[3] , -1, 64, 5),
+ shard ("Crystallised Shards" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1), // Introduced by Mekanism
+ clump ("Clumps" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1),
+ reduced ("Reduced Gravels" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1),
+ crystalline ("Crystallised Metals" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1),
+ cleanGravel ("Clean Gravels" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1),
+ dirtyGravel ("Dirty Gravels" , "" , "" ,T,T,F,F,F,F,F,F,F,T, B[3] , -1, 64, -1),
+ ingotQuintuple ("5x Ingots" , "Quintuple " , " Ingot" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 5 , 12, 16), // A quintuple Ingot.
+ ingotQuadruple ("4x Ingots" , "Quadruple " , " Ingot" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 4 , 16, 15), // A quadruple Ingot.
+ @Deprecated ingotQuad ("4x Ingots" , "Quadruple " , " Ingot" ,F,F,F,F,F,F,F,F,F,F, B[1] , -1, 16, 15),
+ ingotTriple ("3x Ingots" , "Triple " , " Ingot" ,T,T,F,F,F,F,T,F,F,F, B[1] , M * 3 , 21, 14), // A triple Ingot.
+ ingotDouble ("2x Ingots" , "Double " , " Ingot" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 2 , 32, 13), // A double Ingot. Introduced by TerraFirmaCraft
+ ingotHot ("Hot Ingots" , "Hot " , " Ingot" ,T,T,F,F,F,F,F,T,F,F, B[1] , M * 1 , 16, 12), // A hot Ingot, which has to be cooled down by a Vacuum Freezer.
+ ingot ("Ingots" , "" , " Ingot" ,T,T,F,F,F,F,F,T,F,F, B[1] , M * 1 , 64, 11), // A regular Ingot. Introduced by Eloraam
+ gemChipped ("Chipped Gemstones" , "Chipped " , "" ,T,T,T,F,F,F,T,T,F,F, B[2] , M / 4 , 64, 59), // A regular Gem worth one small Dust. Introduced by TerraFirmaCraft
+ gemFlawed ("Flawed Gemstones" , "Flawed " , "" ,T,T,T,F,F,F,T,T,F,F, B[2] , M / 2 , 64, 60), // A regular Gem worth two small Dusts. Introduced by TerraFirmaCraft
+ gemFlawless ("Flawless Gemstones" , "Flawless " , "" ,T,T,T,F,F,F,T,T,F,F, B[2] , M * 2 , 32, 61), // A regular Gem worth two Dusts. Introduced by TerraFirmaCraft
+ gemExquisite ("Exquisite Gemstones" , "Exquisite " , "" ,T,T,T,F,F,F,T,T,F,F, B[2] , M * 4 , 16, 62), // A regular Gem worth four Dusts. Introduced by TerraFirmaCraft
+ gem ("Gemstones" , "" , "" ,T,T,T,F,F,F,T,T,F,F, B[2] , M * 1 , 64, 8), // A regular Gem worth one Dust. Introduced by Eloraam
+ @Deprecated dustDirty ("Impure Dusts" , "" , "" ,F,F,F,F,F,F,F,F,F,T, B[3] , -1, 64, 3),
+ dustTiny ("Tiny Dusts" , "Tiny Pile of " , " Dust" ,T,T,F,F,F,F,F,T,F,F, B[0]|B[1]|B[2]|B[3] , M / 9 , 64, 0), // 1/9th of a Dust.
+ dustSmall ("Small Dusts" , "Small Pile of " , " Dust" ,T,T,F,F,F,F,F,T,F,F, B[0]|B[1]|B[2]|B[3] , M / 4 , 64, 1), // 1/4th of a Dust.
+ dustImpure ("Impure Dusts" , "Impure Pile of " , " Dust" ,T,T,F,F,F,F,F,T,F,T, B[3] , M * 1 , 64, 3), // Dust with impurities. 1 Unit of Main Material and 1/9 - 1/4 Unit of secondary Material
+ dustRefined ("Refined Dusts" , "Refined Pile of " , " Dust" ,T,T,F,F,F,F,F,T,F,T, B[3] , M * 1 , 64, 2),
+ dustPure ("Purified Dusts" , "Purified Pile of " , " Dust" ,T,T,F,F,F,F,F,T,F,T, B[3] , M * 1 , 64, 4),
+ dust ("Dusts" , "" , " Dust" ,T,T,F,F,F,F,F,T,F,F, B[0]|B[1]|B[2]|B[3] , M * 1 , 64, 2), // Pure Dust worth of one Ingot or Gem. Introduced by Alblaka.
+ nugget ("Nuggets" , "" , " Nugget" ,T,T,F,F,F,F,F,T,F,F, B[1] , M / 9 , 64, 9), // A Nugget. Introduced by Eloraam
+ plateAlloy ("Alloy Plates" , "" , "" ,T,F,F,F,F,F,F,F,F,F, B[1] , -1, 64, 17), // Special Alloys have this prefix.
+ plateSteamcraft ("Steamcraft Plates" , "" , "" ,F,F,F,F,F,F,F,F,F,F, B[1] , -1, 64, 17),
+ plateDense ("Dense Plates" , "Dense " , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 9 , 8, 22), // 9 Plates combined in one Item.
+ plateQuintuple ("5x Plates" , "Quintuple " , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 5 , 12, 21),
+ plateQuadruple ("4x Plates" , "Quadruple " , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 4 , 16, 20),
+ @Deprecated plateQuad ("4x Plates" , "" , "" ,F,F,F,F,F,F,F,F,F,F, B[1] , -1, 16, 20),
+ plateTriple ("3x Plates" , "Triple " , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 3 , 21, 19),
+ plateDouble ("2x Plates" , "Double " , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 2 , 32, 18),
+ plate ("Plates" , "" , " Plate" ,T,T,F,F,F,F,T,T,F,F, B[1]|B[2] , M * 1 , 64, 17), // Regular Plate made of one Ingot/Dust. Introduced by Calclavia
+ foil ("Foils" , "" , " Foil" ,T,T,F,F,F,F,T,T,F,F, B[1] , M / 4 , 64, 29), // Foil made of 1/4 Ingot/Dust.
+ stickLong ("Long Sticks/Rods" , "Long " , " Rod" ,T,T,F,F,F,F,T,T,F,F, B[1]|B[2] , M * 1 , 64, 54), // Stick made of an Ingot.
+ stick ("Sticks/Rods" , "" , " Rod" ,T,T,F,F,F,F,T,T,F,F, B[1]|B[2] , M / 2 , 64, 23), // Stick made of half an Ingot. Introduced by Eloraam
+ round ("Rounds" , "" , " Round" ,T,T,F,F,F,F,T,T,F,F, B[1] , M / 9 , 64, 25), // consisting out of one Nugget.
+ bolt ("Bolts" , "" , " Bolt" ,T,T,F,F,F,F,T,T,F,F, B[1]|B[2] , M / 8 , 64, 26), // consisting out of 1/8 Ingot or 1/4 Stick.
+ screw ("Screws" , "" , " Screw" ,T,T,F,F,F,F,T,T,F,F, B[1]|B[2] , M / 9 , 64, 27), // consisting out of a Bolt.
+ ring ("Rings" , "" , " Ring" ,T,T,F,F,F,F,T,T,F,F, B[1] , M / 4 , 64, 28), // consisting out of 1/2 Stick.
+ springSmall ("Small Springs" , "Small " , " Spring" ,T,T,F,F,F,F,T,T,F,F, B[1] , M / 4 , 64, 55), // consisting out of 1 Fine Wire.
+ spring ("Springs" , "" , " Spring" ,T,T,F,F,F,F,T,T,F,F, B[1] , M * 1 , 64, 56), // consisting out of 2 Sticks.
+ wireFine ("Fine Wires" , "Fine " , " Wire" ,T,T,F,F,F,F,T,T,F,F, B[1] , M / 8 , 64, 51), // consisting out of 1/8 Ingot or 1/4 Wire.
+ rotor ("Rotors" , "" , " Rotor" ,T,T,F,F,F,F,T,T,F,F, B[7] ,M*4+M/4+M/9,16, 53), // consisting out of 4 Plates, 1 Ring and 1 Screw.
+ gearGtSmall ("Small Gears" , "Small " , " Gear" ,T,T,F,F,F,F,T,T,F,F, B[7] , M * 1 , 64, 52),
+ gearGt ("Gears" , "" , " Gear" ,T,T,F,F,F,F,T,T,F,F, B[7] , M * 4 , 16, 63), // Introduced by me because BuildCraft has ruined the gear Prefix...
+ lens ("Lenses" , "" , " Lens" ,T,T,F,F,F,F,T,T,F,F, B[2] ,(M * 3)/ 4, 64, 24), // 3/4 of a Plate or Gem used to shape a Lense. Normally only used on Transparent Materials.
+ crateGtDust ("Crates of Dust" , "Crate of " , " Dust" ,T,T,F,T,F,F,F,T,F,F, B[0]|B[1]|B[2]|B[3] , -1, 64, 96), // consisting out of 16 Dusts.
+ crateGtPlate ("Crates of Plates" , "Crate of " , " Plate" ,T,T,F,T,F,F,F,T,F,F, B[1]|B[2] , -1, 64, 99), // consisting out of 16 Plates.
+ crateGtIngot ("Crates of Ingots" , "Crate of " , " Ingot" ,T,T,F,T,F,F,F,T,F,F, B[1] , -1, 64, 97), // consisting out of 16 Ingots.
+ crateGtGem ("Crates of Gems" , "Crate of " , " Gem" ,T,T,F,T,F,F,F,T,F,F, B[2] , -1, 64, 98), // consisting out of 16 Gems.
+ cellPlasma ("Cells of Plasma" , "" , " Plasma Cell" ,T,T,T,T,F,F,F,T,F,F, B[5] , M * 1 , 64, 31), // Hot Cell full of Plasma, which can be used in the Plasma Generator.
+ cell ("Cells" , "" , " Cell" ,T,T,T,T,F,F,T,T,F,F, B[4]|B[8] , M * 1 , 64, 30), // Regular Gas/Fluid Cell. Introduced by Calclavia
+ bucket ("Buckets" , "" , " Bucket" ,T,T,T,T,F,F,T,F,F,F, B[4]|B[8] , M * 1 , 16, -1), // A vanilla Iron Bucket filled with the Material.
+ bottle ("Bottles" , "" , " Bottle" ,T,T,T,T,F,F,F,F,F,F, B[4]|B[8] , -1, 16, -1), // Glass Bottle containing a Fluid.
+ capsule ("Capsules" , "" , " Capsule" ,F,T,T,T,F,F,F,F,F,F, B[4]|B[8] , M * 1 , 16, -1),
+ crystal ("Crystals" , "" , " Crystal" ,F,T,F,F,F,F,T,F,F,F, B[2] , M * 1 , 64, -1),
+ bulletGtSmall ("Small Bullets" , "Small " , " Bullet" ,T,T,F,F,T,F,T,F,T,F, B[6]|B[8] , M / 9 , 64, -1),
+ bulletGtMedium ("Medium Bullets" , "Medium " , " Bullet" ,T,T,F,F,T,F,T,F,T,F, B[6]|B[8] , M / 6 , 64, -1),
+ bulletGtLarge ("Large Bullets" , "Large " , " Bullet" ,T,T,F,F,T,F,T,F,T,F, B[6]|B[8] , M / 3 , 64, -1),
+ arrowGtWood ("Regular Arrows" , "" , " Arrow" ,T,T,F,F,T,F,T,F,T,F, B[6] , M / 4 , 64, 57), // Arrow made of 1/4 Ingot/Dust + Wooden Stick.
+ arrowGtPlastic ("Light Arrows" , "Light " , " Arrow" ,T,T,F,F,T,F,T,F,T,F, B[6] , M / 4 , 64, 58), // Arrow made of 1/4 Ingot/Dust + Plastic Stick.
+ arrow ("Arrows" , "" , "" ,F,F,T,F,F,F,F,F,T,F, B[6] , -1, 64, 57),
+ toolHeadArrow ("Arrow Heads" , "" , " Arrow Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M / 4 , 64, 46), // consisting out of 1/4 Ingot.
+ toolHeadSword ("Sword Blades" , "" , " Sword Blade" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 2 , 16, 32), // consisting out of 2 Ingots.
+ toolHeadPickaxe ("Pickaxe Heads" , "" , " Pickaxe Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 3 , 16, 33), // consisting out of 3 Ingots.
+ toolHeadShovel ("Shovel Heads" , "" , " Shovel Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 1 , 16, 34), // consisting out of 1 Ingots.
+ toolHeadUniversalSpade ("Universal Spade Heads" , "" , " Universal Spade Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 1 , 16, 43), // consisting out of 1 Ingots.
+ toolHeadAxe ("Axe Heads" , "" , " Axe Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 3 , 16, 35), // consisting out of 3 Ingots.
+ toolHeadHoe ("Hoe Heads" , "" , " Hoe Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 2 , 16, 36), // consisting out of 2 Ingots.
+ toolHeadSense ("Sense Blades" , "" , " Sense Blade" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 3 , 16, 44), // consisting out of 3 Ingots.
+ toolHeadFile ("File Heads" , "" , " File Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 2 , 16, 38), // consisting out of 2 Ingots.
+ toolHeadHammer ("Hammer Heads" , "" , " Hammer Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 6 , 16, 37), // consisting out of 6 Ingots.
+ toolHeadPlow ("Plow Heads" , "" , " Plow Head" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 4 , 16, 45), // consisting out of 4 Ingots.
+ toolHeadSaw ("Saw Blades" , "" , " Saw Blade" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 2 , 16, 39), // consisting out of 2 Ingots.
+ toolHeadBuzzSaw ("Buzzsaw Blades" , "" , " Buzzsaw Blade" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 4 , 16, 48), // consisting out of 4 Ingots.
+ toolHeadScrewdriver ("Screwdriver Tips" , "" , " Screwdriver Tip" ,T,T,F,F,F,F,T,F,F,F, B[6] , M * 1 , 16, 47), // consisting out of 1 Ingots.
+ toolHeadDrill ("Drill Tips" , "" , " Drill Tip" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 4 , 16, 40), // consisting out of 4 Ingots.
+ toolHeadChainsaw ("Chainsaw Tips" , "" , " Chainsaw Tip" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 2 , 16, 41), // consisting out of 2 Ingots.
+ toolHeadWrench ("Wrench Tips" , "" , " Wrench Tip" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 4 , 16, 42), // consisting out of 4 Ingots.
+ turbineBlade ("Turbine Blades" , "" , " Turbine Blade" ,T,T,F,F,F,F,T,T,F,F, B[6] , M * 6 , 64, 100), // consisting out of 6 Ingots.
+ toolSword ("Swords" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 2 , 1, -1), // vanilly Sword
+ toolPickaxe ("Pickaxes" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 3 , 1, -1), // vanilly Pickaxe
+ toolShovel ("Shovels" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 1 , 1, -1), // vanilly Shovel
+ toolAxe ("Axes" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 3 , 1, -1), // vanilly Axe
+ toolHoe ("Hoes" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 2 , 1, -1), // vanilly Hoe
+ toolShears ("Shears" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 2 , 1, -1), // vanilly Shears
+ tool ("Tools" , "" , "" ,F,F,F,F,F,F,F,F,T,F, B[6] , -1, 1, -1), // toolPot, toolSkillet, toolSaucepan, toolBakeware, toolCuttingboard, toolMortarandpestle, toolMixingbowl, toolJuicer
+ compressedCobblestone ("9^X Compressed Cobblestones" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ compressedStone ("9^X Compressed Stones" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ compressedDirt ("9^X Compressed Dirt" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ compressedGravel ("9^X Compressed Gravel" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ compressedSand ("9^X Compressed Sand" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ compressed ("Compressed Materials" , "Compressed " , "" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 2 , 64, -1), // Compressed Material, worth 1 Unit. Introduced by Galacticraft
+ glass ("Glasses" , "" , "" ,F,F,T,F,T,F,F,F,F,F, 0 , -1, 64, -1),
+ paneGlass ("Glass Panes" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ blockGlass ("Glass Blocks" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ blockWool ("Wool Blocks" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ block_ ("Random Blocks" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1), // IGNORE
+ block ("Storage Blocks" , "Block of " , "" ,T,T,F,F,F,T,T,F,F,F, 0 , M * 9 , 64, 71), // Storage Block consisting out of 9 Ingots/Gems/Dusts. Introduced by CovertJaguar
+ craftingTool ("Crafting Tools" , "" , "" ,F,F,F,F,F,F,F,F,T,F, 0 , -1, 64, -1), // Special Prefix used mainly for the Crafting Handler.
+ crafting ("Crafting Ingredients" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Special Prefix used mainly for the Crafting Handler.
+ craft ("Crafting Stuff?" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Special Prefix used mainly for the Crafting Handler.
+ log ("Logs" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix used for Logs. Usually as "logWood". Introduced by Eloraam
+ slab ("Slabs" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix used for Slabs. Usually as "slabWood" or "slabStone". Introduced by SirSengir
+ stair ("Stairs" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix used for Stairs. Usually as "stairWood" or "stairStone". Introduced by SirSengir
+ fence ("Fences" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Prefix used for Fences. Usually as "fenceWood". Introduced by Forge
+ plank ("Planks" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix for Planks. Usually "plankWood". Introduced by Eloraam
+ treeSapling ("Saplings" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix for Saplings.
+ treeLeaves ("Leaves" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Prefix for Leaves.
+ tree ("Tree Parts" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Prefix for Tree Parts.
+ stoneCobble ("Cobblestones" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Cobblestone Prefix for all Cobblestones.
+ stoneSmooth ("Smoothstones" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Smoothstone Prefix.
+ stoneMossyBricks ("mossy Stone Bricks" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Mossy Stone Bricks.
+ stoneMossy ("Mossy Stones" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Mossy Cobble.
+ @Deprecated stoneBricksMossy("Mossy Stone Bricks" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ stoneBricks ("Stone Bricks" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Stone Bricks.
+ @Deprecated stoneBrick ("Stone Bricks" , "" , "" ,F,F,F,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ stoneCracked ("Cracked Stones" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Cracked Bricks.
+ stoneChiseled ("Chiseled Stones" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Chiseled Stone.
+ stone ("Stones" , "" , "" ,F,T,T,F,T,T,F,F,F,F, 0 , -1, 64, -1), // Prefix to determine which kind of Rock this is.
+ cobblestone ("Cobblestones" , "" , "" ,F,T,T,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ rock ("Rocks" , "" , "" ,F,T,T,F,T,T,F,F,F,F, 0 , -1, 64, -1), // Prefix to determine which kind of Rock this is.
+ record ("Records" , "" , "" ,F,F,T,F,F,F,F,F,F,F, 0 , -1, 1, -1),
+ rubble ("Rubbles" , "" , "" ,T,T,T,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ scraps ("Scraps" , "" , "" ,T,T,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ scrap ("Scraps" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ item_ ("Items" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // IGNORE
+ item ("Items" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Random Item. Introduced by Alblaka
+ book ("Books" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Used for Books of any kind.
+ paper ("Papers" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Used for Papers of any kind.
+ dye ("Dyes" , "" , "" ,F,F,T,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Used for the 16 dyes. Introduced by Eloraam
+ stainedClay ("Stained Clays" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1), // Used for the 16 colors of Stained Clay. Introduced by Forge
+ armorHelmet ("Helmets" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 5 , 1, -1), // vanilly Helmet
+ armorChestplate ("Chestplates" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 8 , 1, -1), // vanilly Chestplate
+ armorLeggings ("Leggings" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 7 , 1, -1), // vanilly Pants
+ armorBoots ("Boots" , "" , "" ,F,T,F,F,F,F,T,F,T,F, B[6] , M * 4 , 1, -1), // vanilly Boots
+ armor ("Armor Parts" , "" , "" ,F,F,F,F,F,F,F,F,T,F, B[6] , -1, 1, -1),
+ frameGt ("Frame Boxes" , "" , "" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 2 , 64, 83),
+ pipeTiny ("Tiny Pipes" , "Tiny " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M / 2 , 64, 78),
+ pipeSmall ("Small Pipes" , "Small " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 1 , 64, 79),
+ pipeMedium ("Medium Pipes" , "Medium " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 3 , 64, 80),
+ pipeLarge ("Large pipes" , "Large " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 6 , 64, 81),
+ pipeHuge ("Huge Pipes" , "Huge " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M *12 , 64, 82),
+ pipeRestrictiveTiny ("Tiny Restrictive Pipes" , "Tiny Restrictive " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M / 2 , 64, 78),
+ pipeRestrictiveSmall ("Small Restrictive Pipes" , "Small Restrictive " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 1 , 64, 79),
+ pipeRestrictiveMedium ("Medium Restrictive Pipes" , "Medium Restrictive " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 3 , 64, 80),
+ pipeRestrictiveLarge ("Large Restrictive Pipes" , "Large Restrictive " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M * 6 , 64, 81),
+ pipeRestrictiveHuge ("Huge Restrictive Pipes" , "Huge Restrictive " , " Pipe" ,T,T,F,F,T,F,T,F,F,F, 0 , M *12 , 64, 82),
+ pipe ("Pipes" , "" , " Pipe" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, 77),
+ wireGt16 ("16x Wires" , "16x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 8 , 64, -1),
+ wireGt12 ("12x Wires" , "12x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 6 , 64, -1),
+ wireGt08 ("8x Wires" , "8x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 4 , 64, -1),
+ wireGt04 ("4x Wires" , "4x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 2 , 64, -1),
+ wireGt02 ("2x Wires" , "2x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 1 , 64, -1),
+ wireGt01 ("1x Wires" , "1x " , " Wire" ,T,T,F,F,F,F,T,F,F,F, 0 , M / 2 , 64, -1),
+ cableGt12 ("12x Cables" , "12x " , " Cable" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 6 , 64, -1),
+ cableGt08 ("8x Cables" , "8x " , " Cable" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 4 , 64, -1),
+ cableGt04 ("4x Cables" , "4x " , " Cable" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 2 , 64, -1),
+ cableGt02 ("2x Cables" , "2x " , " Cable" ,T,T,F,F,F,F,T,F,F,F, 0 , M * 1 , 64, -1),
+ cableGt01 ("1x Cables" , "1x " , " Cable" ,T,T,F,F,F,F,T,F,F,F, 0 , M / 2 , 64, -1),
+
+ /* Electric Components.
+ *
+ * usual Materials for this are:
+ * Primitive (Tier 1)
+ * Basic (Tier 2) as used by UE as well : IC2 Circuit and RE-Battery
+ * Good (Tier 3)
+ * Advanced (Tier 4) as used by UE as well : Advanced Circuit, Advanced Battery and Lithium Battery
+ * Data (Tier 5) : Data Storage Circuit
+ * Elite (Tier 6) as used by UE as well : Energy Crystal and Data Control Circuit
+ * Master (Tier 7) : Energy Flow Circuit and Lapotron Crystal
+ * Ultimate (Tier 8) : Data Orb and Lapotronic Energy Orb
+ * Infinite (Cheaty)
+ */
+ batterySingleuse ("Single Use Batteries" , "" , "" ,F,T,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ battery ("Reusable Batteries" , "" , "" ,F,T,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Introduced by Calclavia
+ circuit ("Circuits" , "" , "" ,T,T,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Introduced by Calclavia
+ chipset ("Chipsets" , "" , "" ,T,T,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Introduced by Buildcraft
+ computer ("Computers" , "" , "" ,T,T,F,F,T,F,F,F,F,F, 0 , -1, 64, -1), // A whole Computer. "computerMaster" = ComputerCube
+
+ // random known prefixes without special abilities.
+ skull ("Skulls" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ plating ("Platings" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ dinosaur ("Dinosaurs" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ travelgear ("Travel Gear" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ bauble ("Baubles" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ cluster ("Clusters" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ grafter ("Grafters" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ scoop ("Scoops" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ frame ("Frames" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ tome ("Tomes" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ junk ("Junk" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ bee ("Bees" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ rod ("Rods" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ dirt ("Dirts" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ sand ("Sands" , "" , "" ,F,F,T,F,F,T,F,F,F,F, 0 , -1, 64, -1),
+ grass ("Grasses" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ gravel ("Gravels" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ mushroom ("Mushrooms" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ wood ("Woods" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Introduced by Eloraam
+ drop ("Drops" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ fuel ("Fuels" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ panel ("Panels" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ brick ("Bricks" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ chunk ("Chunks" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ wire ("Wires" , "" , "" ,F,F,F,F,T,F,F,F,F,F, 0 , -1, 64, -1),
+ seed ("Seeds" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ reed ("Reeds" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ sheetDouble ("2x Sheets" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ sheet ("Sheets" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ crop ("Crops" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ plant ("Plants" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ coin ("Coins" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ lumar ("Lumars" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ ground ("Grounded Stuff" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ cable ("Cables" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ component ("Components" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ wax ("Waxes" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ wall ("Walls" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ tube ("Tubes" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ list ("Lists" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ food ("Foods" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ gear ("Gears" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1), // Introduced by SirSengir
+ coral ("Corals" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ flower ("Flowers" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ storage ("Storages" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ material ("Materials" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ plasma ("Plasmas" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ element ("Elements" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ molecule ("Molecules" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ wafer ("Wafers" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ orb ("Orbs" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ handle ("Handles" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ blade ("Blades" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ head ("Heads" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ motor ("Motors" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ bit ("Bits" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ shears ("Shears" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ turbine ("Turbines" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ fertilizer ("Fertilizers" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ chest ("Chests" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ raw ("Raw Things" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ stainedGlass ("Stained Glasses" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ mystic ("Mystic Stuff" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ mana ("Mana Stuff" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ rune ("Runes" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ petal ("Petals" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ pearl ("Pearls" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ powder ("Powders" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ soulsand ("Soulsands" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ obsidian ("Obsidians" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ glowstone ("Glowstones" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ beans ("Beans" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ br ("br" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ essence ("Essences" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ alloy ("Alloys" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ cooking ("Cooked Things" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ elven ("Elven Stuff" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ reactor ("Reactors" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ mffs ("MFFS" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ projred ("Project Red" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ ganys ("Ganys Stuff" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ liquid ("Liquids" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ bars ("Bars" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1),
+ bar ("Bars" , "" , "" ,F,F,F,F,F,F,F,F,F,F, 0 , -1, 64, -1);
+
+ static {
+ pulp.mPrefixInto = dust;
+ oreGem.mPrefixInto = ore;
+ leaves.mPrefixInto = treeLeaves;
+ sapling.mPrefixInto = treeSapling;
+ itemDust.mPrefixInto = dust;
+ dustDirty.mPrefixInto = dustImpure;
+ denseore.mPrefixInto = oreDense;
+ ingotQuad.mPrefixInto = ingotQuadruple;
+ plateQuad.mPrefixInto = plateQuadruple;
+ stoneBrick.mPrefixInto = stoneBricks;
+ stoneBricksMossy.mPrefixInto = stoneMossyBricks;
+
+ ingotHot.mHeatDamage = 3.0F;
+ cellPlasma.mHeatDamage = 6.0F;
+
+ block.ignoreMaterials(Materials.Ice, Materials.Snow, Materials.Concrete, Materials.Glass, Materials.Glowstone, Materials.DarkIron, Materials.Marble, Materials.Quartz, Materials.CertusQuartz, Materials.Limestone);
+ ingot.ignoreMaterials(Materials.Brick, Materials.NetherBrick);
+
+ dust.addFamiliarPrefix(dustTiny);
+ dust.addFamiliarPrefix(dustSmall);
+ dustTiny.addFamiliarPrefix(dust);
+ dustTiny.addFamiliarPrefix(dustSmall);
+ dustSmall.addFamiliarPrefix(dust);
+ dustSmall.addFamiliarPrefix(dustTiny);
+
+ ingot.addFamiliarPrefix(nugget);
+ nugget.addFamiliarPrefix(ingot);
+
+ for (OrePrefixes tPrefix1 : values()) if (tPrefix1.name().startsWith("ore" )) for (OrePrefixes tPrefix2 : values()) if (tPrefix2.name().startsWith("ore" )) tPrefix1.addFamiliarPrefix(tPrefix2);
+ for (OrePrefixes tPrefix1 : values()) if (tPrefix1.name().startsWith("pipe" )) for (OrePrefixes tPrefix2 : values()) if (tPrefix2.name().startsWith("pipe" )) tPrefix1.addFamiliarPrefix(tPrefix2);
+ for (OrePrefixes tPrefix1 : values()) if (tPrefix1.name().startsWith("wireGt" )) for (OrePrefixes tPrefix2 : values()) if (tPrefix2.name().startsWith("wireGt" )) tPrefix1.addFamiliarPrefix(tPrefix2);
+ for (OrePrefixes tPrefix1 : values()) if (tPrefix1.name().startsWith("cableGt" )) for (OrePrefixes tPrefix2 : values()) if (tPrefix2.name().startsWith("cableGt" )) tPrefix1.addFamiliarPrefix(tPrefix2);
+
+ // These are only the important ones.
+ gem .mNotGeneratedItems.add(Materials.Coal);
+ gem .mNotGeneratedItems.add(Materials.Charcoal);
+ gem .mNotGeneratedItems.add(Materials.NetherStar);
+ gem .mNotGeneratedItems.add(Materials.Diamond);
+ gem .mNotGeneratedItems.add(Materials.Emerald);
+ gem .mNotGeneratedItems.add(Materials.NetherQuartz);
+ gem .mNotGeneratedItems.add(Materials.EnderPearl);
+ gem .mNotGeneratedItems.add(Materials.EnderEye);
+ gem .mNotGeneratedItems.add(Materials.Flint);
+ gem .mNotGeneratedItems.add(Materials.Lapis);
+ dust .mNotGeneratedItems.add(Materials.Bone);
+ dust .mNotGeneratedItems.add(Materials.Redstone);
+ dust .mNotGeneratedItems.add(Materials.Glowstone);
+ dust .mNotGeneratedItems.add(Materials.Gunpowder);
+ dust .mNotGeneratedItems.add(Materials.Sugar);
+ dust .mNotGeneratedItems.add(Materials.Blaze);
+ stick .mNotGeneratedItems.add(Materials.Wood);
+ stick .mNotGeneratedItems.add(Materials.Bone);
+ stick .mNotGeneratedItems.add(Materials.Blaze);
+ ingot .mNotGeneratedItems.add(Materials.Iron);
+ ingot .mNotGeneratedItems.add(Materials.Gold);
+ ingot .mNotGeneratedItems.add(Materials.Brick);
+ ingot .mNotGeneratedItems.add(Materials.BrickNether);
+ ingot .mNotGeneratedItems.add(Materials.WoodSealed);
+ ingot .mNotGeneratedItems.add(Materials.Wood);
+ nugget .mNotGeneratedItems.add(Materials.Gold);
+ plate .mNotGeneratedItems.add(Materials.Paper);
+ cell .mNotGeneratedItems.add(Materials.Empty);
+ cell .mNotGeneratedItems.add(Materials.Water);
+ cell .mNotGeneratedItems.add(Materials.Lava);
+ cell .mNotGeneratedItems.add(Materials.ConstructionFoam);
+ cell .mNotGeneratedItems.add(Materials.UUMatter);
+ cell .mNotGeneratedItems.add(Materials.BioFuel);
+ cell .mNotGeneratedItems.add(Materials.CoalFuel);
+ bucket .mNotGeneratedItems.add(Materials.Empty);
+ bucket .mNotGeneratedItems.add(Materials.Lava);
+ bucket .mNotGeneratedItems.add(Materials.Milk);
+ bucket .mNotGeneratedItems.add(Materials.Water);
+ bottle .mNotGeneratedItems.add(Materials.Empty);
+ bottle .mNotGeneratedItems.add(Materials.Water);
+ bottle .mNotGeneratedItems.add(Materials.Milk);
+ block .mNotGeneratedItems.add(Materials.Iron);
+ block .mNotGeneratedItems.add(Materials.Gold);
+ block .mNotGeneratedItems.add(Materials.Lapis);
+ block .mNotGeneratedItems.add(Materials.Emerald);
+ block .mNotGeneratedItems.add(Materials.Redstone);
+ block .mNotGeneratedItems.add(Materials.Diamond);
+ block .mNotGeneratedItems.add(Materials.Coal);
+ toolHeadArrow .mNotGeneratedItems.add(Materials.Glass);
+
+ //-----
+
+ dustImpure .mGeneratedItems.add(Materials.GraniteRed);
+ dustImpure .mGeneratedItems.add(Materials.GraniteBlack);
+ dustImpure .mGeneratedItems.add(Materials.Quartzite);
+ dustImpure .mGeneratedItems.add(Materials.Flint);
+ dustImpure .mGeneratedItems.add(Materials.Redrock);
+ dustImpure .mGeneratedItems.add(Materials.Basalt);
+ dustImpure .mGeneratedItems.add(Materials.Marble);
+ dustImpure .mGeneratedItems.add(Materials.Netherrack);
+ dustImpure .mGeneratedItems.add(Materials.Endstone);
+ dustImpure .mGeneratedItems.add(Materials.Stone);
+
+ plate .mGeneratedItems.add(Materials.Redstone);
+ plate .mGeneratedItems.add(Materials.Concrete);
+ plate .mGeneratedItems.add(Materials.GraniteRed);
+ plate .mGeneratedItems.add(Materials.GraniteBlack);
+ plate .mGeneratedItems.add(Materials.Glowstone);
+ plate .mGeneratedItems.add(Materials.Nikolite);
+ plate .mGeneratedItems.add(Materials.Obsidian);
+
+ plate .mGeneratedItems.add(Materials.Paper);
+ plateDouble .mGeneratedItems.add(Materials.Paper);
+ plateTriple .mGeneratedItems.add(Materials.Paper);
+ plateQuadruple .mGeneratedItems.add(Materials.Paper);
+ plateQuintuple .mGeneratedItems.add(Materials.Paper);
+
+ lens .mGeneratedItems.add(Materials.EnderPearl);
+ lens .mGeneratedItems.add(Materials.EnderEye);
+
+ stickLong .mGeneratedItems.add(Materials.Blaze);
+
+ //-----
+
+ dust .mGeneratedItems.addAll(dustPure.mGeneratedItems);
+ dust .mGeneratedItems.addAll(dustImpure.mGeneratedItems);
+ dust .mGeneratedItems.addAll(dustRefined.mGeneratedItems);
+ dustTiny .mGeneratedItems.addAll(dust.mGeneratedItems);
+ dustSmall .mGeneratedItems.addAll(dust.mGeneratedItems);
+ crateGtDust .mGeneratedItems.addAll(dust.mGeneratedItems);
+ crateGtIngot .mGeneratedItems.addAll(ingot.mGeneratedItems);
+ crateGtGem .mGeneratedItems.addAll(gem.mGeneratedItems);
+ crateGtPlate .mGeneratedItems.addAll(plate.mGeneratedItems);
+
+ //-----
+
+ toolHeadFile .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+ toolHeadSaw .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+ toolHeadDrill .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+ toolHeadChainsaw .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+ toolHeadWrench .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+ toolHeadBuzzSaw .mCondition = new ICondition.And<ISubTagContainer>(new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING), new ICondition.Not<ISubTagContainer>(SubTag.BOUNCY));
+
+ rotor .mCondition = new ICondition.Nor<ISubTagContainer>(SubTag.CRYSTAL, SubTag.STONE, SubTag.BOUNCY);
+
+ spring .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.STRETCHY, SubTag.BOUNCY, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+ springSmall .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.STRETCHY, SubTag.BOUNCY, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+
+ gemChipped .mCondition = new ICondition.And<ISubTagContainer>(SubTag.TRANSPARENT, SubTag.CRYSTAL, new ICondition.Not<ISubTagContainer>(SubTag.QUARTZ), new ICondition.Not<ISubTagContainer>(SubTag.PEARL), new ICondition.Not<ISubTagContainer>(SubTag.MAGICAL));
+ gemFlawed .mCondition = new ICondition.And<ISubTagContainer>(SubTag.TRANSPARENT, SubTag.CRYSTAL, new ICondition.Not<ISubTagContainer>(SubTag.QUARTZ), new ICondition.Not<ISubTagContainer>(SubTag.PEARL), new ICondition.Not<ISubTagContainer>(SubTag.MAGICAL));
+ gemFlawless .mCondition = new ICondition.And<ISubTagContainer>(SubTag.TRANSPARENT, SubTag.CRYSTAL, new ICondition.Not<ISubTagContainer>(SubTag.QUARTZ), new ICondition.Not<ISubTagContainer>(SubTag.PEARL), new ICondition.Not<ISubTagContainer>(SubTag.MAGICAL));
+ gemExquisite .mCondition = new ICondition.And<ISubTagContainer>(SubTag.TRANSPARENT, SubTag.CRYSTAL, new ICondition.Not<ISubTagContainer>(SubTag.QUARTZ), new ICondition.Not<ISubTagContainer>(SubTag.PEARL), new ICondition.Not<ISubTagContainer>(SubTag.MAGICAL));
+
+ lens .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.MAGICAL, new ICondition.And<ISubTagContainer>(SubTag.TRANSPARENT, SubTag.HAS_COLOR));
+
+ plateDouble .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.PAPER, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+ plateTriple .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.PAPER, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+ plateQuadruple .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.PAPER, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+ plateQuintuple .mCondition = new ICondition.Or<ISubTagContainer>(SubTag.PAPER, new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING));
+
+ plateDense .mCondition = new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING);
+
+ ingotDouble .mCondition = new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING);
+ ingotTriple .mCondition = new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING);
+ ingotQuadruple .mCondition = new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING);
+ ingotQuintuple .mCondition = new ICondition.Not<ISubTagContainer>(SubTag.NO_SMASHING);
+
+ wireFine .mCondition = SubTag.METAL;
+
+ //-----
+
+ pipeRestrictiveTiny.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount);
+ pipeRestrictiveSmall.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount * 2);
+ pipeRestrictiveMedium.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount * 3);
+ pipeRestrictiveLarge.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount * 4);
+ pipeRestrictiveHuge.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount * 5);
+ cableGt12.mSecondaryMaterial = new MaterialStack(Materials.Rubber , plate.mMaterialAmount * 4);
+ cableGt08.mSecondaryMaterial = new MaterialStack(Materials.Rubber , plate.mMaterialAmount * 3);
+ cableGt04.mSecondaryMaterial = new MaterialStack(Materials.Rubber , plate.mMaterialAmount * 2);
+ cableGt02.mSecondaryMaterial = new MaterialStack(Materials.Rubber , plate.mMaterialAmount);
+ cableGt01.mSecondaryMaterial = new MaterialStack(Materials.Rubber , plate.mMaterialAmount);
+ bucket.mSecondaryMaterial = new MaterialStack(Materials.Iron , ingot.mMaterialAmount * 3);
+ cell.mSecondaryMaterial = new MaterialStack(Materials.Tin , plate.mMaterialAmount * 2);
+ cellPlasma.mSecondaryMaterial = new MaterialStack(Materials.Tin , plate.mMaterialAmount * 2);
+ oreRedgranite.mSecondaryMaterial = new MaterialStack(Materials.GraniteRed , dust.mMaterialAmount);
+ oreBlackgranite.mSecondaryMaterial = new MaterialStack(Materials.GraniteBlack , dust.mMaterialAmount);
+ oreNetherrack.mSecondaryMaterial = new MaterialStack(Materials.Netherrack , dust.mMaterialAmount);
+ oreNether.mSecondaryMaterial = new MaterialStack(Materials.Netherrack , dust.mMaterialAmount);
+ oreEndstone.mSecondaryMaterial = new MaterialStack(Materials.Endstone , dust.mMaterialAmount);
+ oreEnd.mSecondaryMaterial = new MaterialStack(Materials.Endstone , dust.mMaterialAmount);
+ oreDense.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount);
+ orePoor.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount * 2);
+ oreSmall.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount * 2);
+ oreNormal.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount * 2);
+ oreRich.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount * 2);
+ ore.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount);
+ crushed.mSecondaryMaterial = new MaterialStack(Materials.Stone , dust.mMaterialAmount);
+ toolHeadDrill.mSecondaryMaterial = new MaterialStack(Materials.Steel , plate.mMaterialAmount * 4);
+ toolHeadChainsaw.mSecondaryMaterial = new MaterialStack(Materials.Steel , plate.mMaterialAmount * 4 + ring.mMaterialAmount * 2);
+ toolHeadWrench.mSecondaryMaterial = new MaterialStack(Materials.Steel , ring.mMaterialAmount + screw.mMaterialAmount * 2);
+ arrowGtWood.mSecondaryMaterial = new MaterialStack(Materials.Wood , stick.mMaterialAmount);
+ arrowGtPlastic.mSecondaryMaterial = new MaterialStack(Materials.Plastic , stick.mMaterialAmount);
+ bulletGtSmall.mSecondaryMaterial = new MaterialStack(Materials.Brass , ingot.mMaterialAmount / 9);
+ bulletGtMedium.mSecondaryMaterial = new MaterialStack(Materials.Brass , ingot.mMaterialAmount / 6);
+ bulletGtLarge.mSecondaryMaterial = new MaterialStack(Materials.Brass , ingot.mMaterialAmount / 3);
+ }
+
+ public final ArrayList<ItemStack> mPrefixedItems = new ArrayList<ItemStack>();
+
+ public boolean add(ItemStack aStack) {
+ if (aStack == null) return false;
+ if (!contains(aStack)) mPrefixedItems.add(aStack);
+ while (mPrefixedItems.contains(null)) mPrefixedItems.remove(null);
+ return true;
+ }
+
+ public boolean contains(ItemStack aStack) {
+ if (aStack == null) return false;
+ for (ItemStack tStack : mPrefixedItems) if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) return true;
+ return false;
+ }
+
+ public boolean doGenerateItem(Materials aMaterial) {
+ return aMaterial != null && aMaterial != Materials._NULL && ((aMaterial.mTypes & mMaterialGenerationBits) != 0 || mGeneratedItems.contains(aMaterial)) && !mNotGeneratedItems.contains(aMaterial) && (mCondition == null || mCondition.isTrue(aMaterial));
+ }
+
+ public boolean ignoreMaterials(Materials... aMaterials) {
+ for (Materials tMaterial : aMaterials) if (tMaterial != null) mIgnoredMaterials.add(tMaterial);
+ return true;
+ }
+
+ public boolean isIgnored(Materials aMaterial) {
+ if (aMaterial != null && (!aMaterial.mUnificatable || aMaterial != aMaterial.mMaterialInto)) return true;
+ return mIgnoredMaterials.contains(aMaterial);
+ }
+
+ public boolean addFamiliarPrefix(OrePrefixes aPrefix) {
+ if (aPrefix == null || mFamiliarPrefixes.contains(aPrefix) || aPrefix == this) return false;
+ return mFamiliarPrefixes.add(aPrefix);
+ }
+
+ public boolean add(IOreRecipeRegistrator aRegistrator) {
+ if (aRegistrator == null) return false;
+ return mOreProcessing.add(aRegistrator);
+ }
+
+ public void processOre(Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) {
+ if (aMaterial != null && (aMaterial != Materials._NULL || mIsSelfReferencing || !mIsMaterialBased) && GT_Utility.isStackValid(aStack)) for (IOreRecipeRegistrator tRegistrator : mOreProcessing) {
+ if (D2) GT_Log.ore.println("Processing '" + aOreDictName + "' with the Prefix '" + name() + "' and the Material '" + aMaterial.name() + "' at " + GT_Utility.getClassName(tRegistrator));
+ tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GT_Utility.copyAmount(1, aStack));
+ }
+ }
+
+ public ItemStack mContainerItem = null;
+ public ICondition<ISubTagContainer> mCondition = null;
+ public byte mDefaultStackSize = 64;
+ public final short mTextureIndex;
+ public final String mRegularLocalName, mLocalizedMaterialPre, mLocalizedMaterialPost;
+ public final boolean mIsUsedForOreProcessing, mIsEnchantable, mIsUnificatable, mIsMaterialBased, mIsSelfReferencing, mIsContainer, mDontUnificateActively, mIsUsedForBlocks, mAllowNormalRecycling, mGenerateDefaultItem;
+ public MaterialStack mSecondaryMaterial = null;
+ public OrePrefixes mPrefixInto = this;
+ public final List<TC_AspectStack> mAspects = new ArrayList<TC_AspectStack>();
+ public final Collection<OrePrefixes> mFamiliarPrefixes = new HashSet<OrePrefixes>();
+ private final Collection<Materials> mNotGeneratedItems = new HashSet<Materials>(), mIgnoredMaterials = new HashSet<Materials>(), mGeneratedItems = new HashSet<Materials>();
+ private final ArrayList<IOreRecipeRegistrator> mOreProcessing = new ArrayList<IOreRecipeRegistrator>();
+ public float mHeatDamage = 0.0F; // Negative for Frost Damage
+
+ /**
+ * Used to determine the amount of Material this Prefix contains.
+ * Multiply or Divide GregTech_API.MATERIAL_UNIT to get the Amounts in comparision to one Ingot.
+ * 0 = Null
+ * Negative = Undefined Amount
+ */
+ public final long mMaterialAmount;
+
+ /**
+ * Yes this Value can be changed to add Bits for the MetaGenerated-Item-Check.
+ */
+ public int mMaterialGenerationBits = 0;
+
+ private OrePrefixes(String aRegularLocalName, String aLocalizedMaterialPre, String aLocalizedMaterialPost, boolean aIsUnificatable, boolean aIsMaterialBased, boolean aIsSelfReferencing, boolean aIsContainer, boolean aDontUnificateActively, boolean aIsUsedForBlocks, boolean aAllowNormalRecycling, boolean aGenerateDefaultItem, boolean aIsEnchantable, boolean aIsUsedForOreProcessing, int aMaterialGenerationBits, long aMaterialAmount, int aDefaultStackSize, int aTextureindex) {
+ mIsUnificatable = aIsUnificatable;
+ mIsMaterialBased = aIsMaterialBased;
+ mIsSelfReferencing = aIsSelfReferencing;
+ mIsContainer = aIsContainer;
+ mDontUnificateActively = aDontUnificateActively;
+ mIsUsedForBlocks = aIsUsedForBlocks;
+ mAllowNormalRecycling = aAllowNormalRecycling;
+ mGenerateDefaultItem = aGenerateDefaultItem;
+ mIsEnchantable = aIsEnchantable;
+ mIsUsedForOreProcessing = aIsUsedForOreProcessing;
+ mMaterialGenerationBits = aMaterialGenerationBits;
+ mMaterialAmount = aMaterialAmount;
+ mRegularLocalName = aRegularLocalName;
+ mLocalizedMaterialPre = aLocalizedMaterialPre;
+ mLocalizedMaterialPost = aLocalizedMaterialPost;
+ mDefaultStackSize = (byte)aDefaultStackSize;
+ mTextureIndex = (short)aTextureindex;
+
+ if (name().startsWith("ore")) {
+ new TC_AspectStack(TC_Aspects.TERRA, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("wire") || name().startsWith("cable")) {
+ new TC_AspectStack(TC_Aspects.ELECTRUM, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("dust")) {
+ new TC_AspectStack(TC_Aspects.PERDITIO, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("crushed")) {
+ new TC_AspectStack(TC_Aspects.PERFODIO, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("ingot") || name().startsWith("nugget")) {
+ new TC_AspectStack(TC_Aspects.METALLUM, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("armor")) {
+ new TC_AspectStack(TC_Aspects.TUTAMEN, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("stone")) {
+ new TC_AspectStack(TC_Aspects.TERRA, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("pipe")) {
+ new TC_AspectStack(TC_Aspects.ITER, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("gear")) {
+ new TC_AspectStack(TC_Aspects.MOTUS, 1).addToAspectList(mAspects);
+ new TC_AspectStack(TC_Aspects.MACHINA, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("frame") || name().startsWith("plate")) {
+ new TC_AspectStack(TC_Aspects.FABRICO, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("tool")) {
+ new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("gem") || name().startsWith("crystal") || name().startsWith("lens")) {
+ new TC_AspectStack(TC_Aspects.VITREUS, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("crate")) {
+ new TC_AspectStack(TC_Aspects.ITER, 2).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("circuit")) {
+ new TC_AspectStack(TC_Aspects.COGNITO, 1).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("computer")) {
+ new TC_AspectStack(TC_Aspects.COGNITO, 4).addToAspectList(mAspects);
+ } else
+ if (name().startsWith("battery")) {
+ new TC_AspectStack(TC_Aspects.ELECTRUM, 1).addToAspectList(mAspects);
+ }
+ }
+
+ public static OrePrefixes getOrePrefix(String aOre) {
+ for (OrePrefixes tPrefix : values()) if (aOre.startsWith(tPrefix.toString())) {
+ if (tPrefix == oreNether && aOre.equals("oreNetherQuartz")) return ore;
+ return tPrefix;
+ }
+ return null;
+ }
+
+ public static String stripPrefix(String aOre) {
+ for (OrePrefixes tPrefix : values()) {
+ if (aOre.startsWith(tPrefix.toString())) {
+ return aOre.replaceFirst(tPrefix.toString(), "");
+ }
+ }
+ return aOre;
+ }
+
+ public static String replacePrefix(String aOre, OrePrefixes aPrefix) {
+ for (OrePrefixes tPrefix : values()) {
+ if (aOre.startsWith(tPrefix.toString())) {
+ return aOre.replaceFirst(tPrefix.toString(), aPrefix.toString());
+ }
+ }
+ return "";
+ }
+
+ public static OrePrefixes getPrefix(String aPrefixName) {
+ return getPrefix(aPrefixName, null);
+ }
+
+ public static OrePrefixes getPrefix(String aPrefixName, OrePrefixes aReplacement) {
+ Object tObject = GT_Utility.getFieldContent(OrePrefixes.class, aPrefixName, false, false);
+ if (tObject != null && tObject instanceof OrePrefixes) return (OrePrefixes)tObject;
+ return aReplacement;
+ }
+
+ public Object get(Object aMaterial) {
+ if (aMaterial instanceof Materials) return new ItemData(this, (Materials)aMaterial);
+ return name() + aMaterial;
+ }
+
+ public static Materials getMaterial(String aOre) {
+ return Materials.get(stripPrefix(aOre));
+ }
+
+ public static Materials getMaterial(String aOre, OrePrefixes aPrefix) {
+ return Materials.get(aOre.replaceFirst(aPrefix.toString(), ""));
+ }
+
+ public static Materials getRealMaterial(String aOre, OrePrefixes aPrefix) {
+ return Materials.getRealMaterial(aOre.replaceFirst(aPrefix.toString(), ""));
+ }
+
+ public static boolean isInstanceOf(String aName, OrePrefixes aPrefix) {
+ return aName == null ? false : aName.startsWith(aPrefix.toString());
+ }
+
+ public static volatile int VERSION = 508;
+
+ @SuppressWarnings("incomplete-switch")
+ public String getDefaultLocalNameForItem(Materials aMaterial) {
+ // Certain Materials have slightly different Localizations.
+ switch (this) {
+ case crateGtDust: return mLocalizedMaterialPre + OrePrefixes.dust.getDefaultLocalNameForItem(aMaterial);
+ case crateGtIngot: return mLocalizedMaterialPre + OrePrefixes.ingot.getDefaultLocalNameForItem(aMaterial);
+ case crateGtGem: return mLocalizedMaterialPre + OrePrefixes.gem.getDefaultLocalNameForItem(aMaterial);
+ case crateGtPlate: return mLocalizedMaterialPre + OrePrefixes.plate.getDefaultLocalNameForItem(aMaterial);
+ }
+ switch (aMaterial) {
+ case Glass:
+ if (name().startsWith("gem")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystal";
+ if (name().startsWith("plate")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Pane";
+ break;
+ case InfusedAir: case InfusedDull: case InfusedEarth: case InfusedEntropy: case InfusedFire: case InfusedOrder: case InfusedVis: case InfusedWater:
+ if (name().startsWith("gem")) return mLocalizedMaterialPre + "Shard of " + aMaterial.mDefaultLocalName;
+ if (name().startsWith("crystal")) return mLocalizedMaterialPre + "Shard of " + aMaterial.mDefaultLocalName;
+ if (name().startsWith("plate")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystal Plate";
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystal Powder";
+ if (this == OrePrefixes.crushedCentrifuged) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystals";
+ if (this == OrePrefixes.crushedPurified) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystals";
+ if (this == OrePrefixes.crushed) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Crystals";
+ break;
+ case Wheat:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Flour";
+ break;
+ case Ice:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Crushed Ice";
+ break;
+ case Wood: case WoodSealed:
+ if (name().startsWith("bolt")) return "Short " + aMaterial.mDefaultLocalName + " Stick";
+ if (name().startsWith("stick")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Stick";
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Pulp";
+ if (name().startsWith("nugget")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Chip";
+ if (name().startsWith("plate")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Plank";
+ break;
+ case Plastic: case Rubber:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Pulp";
+ if (name().startsWith("plate")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Sheet";
+ if (name().startsWith("ingot")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Bar";
+ if (name().startsWith("nugget")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Chip";
+ if (name().startsWith("foil")) return "Thin " + aMaterial.mDefaultLocalName + " Sheet";
+ break;
+ case FierySteel:
+ if (mIsContainer) return mLocalizedMaterialPre + "Fiery Blood" + mLocalizedMaterialPost;
+ break;
+ case Steeleaf:
+ if (name().startsWith("ingot")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName;
+ break;
+ case Bone:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Bone Meal";
+ break;
+ case Blaze: case Milk: case Cocoa: case Chocolate: case Coffee: case Chili: case Cheese: case Snow:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + " Powder";
+ break;
+ case Paper:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Chad";
+ if (this == OrePrefixes.plate) return "Sheet of Paper";
+ if (this == OrePrefixes.plateDouble) return "Paperboard";
+ if (this == OrePrefixes.plateTriple) return "Carton";
+ if (this == OrePrefixes.plateQuadruple) return "Cardboard";
+ if (this == OrePrefixes.plateQuintuple) return "Thick Cardboard";
+ if (this == OrePrefixes.plateDense) return "Strong Cardboard";
+ break;
+ case MeatRaw:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Mince Meat";
+ break;
+ case MeatCooked:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + "Cooked Mince Meat";
+ break;
+ case Ash: case DarkAsh: case Gunpowder: case Sugar: case Salt: case RockSalt: case VolcanicAsh: case RareEarth:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName;
+ break;
+ case Vermiculite: case Bentonite: case Kaolinite: case Talc: case BasalticMineralSand: case GraniticMineralSand: case GlauconiteSand: case CassiteriteSand: case GarnetSand: case QuartzSand: case Pitchblende: case FullersEarth:
+ if (name().startsWith("dust")) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName;
+ if (this == OrePrefixes.crushedCentrifuged) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName;
+ if (this == OrePrefixes.crushedPurified) return mLocalizedMaterialPre + aMaterial.mDefaultLocalName;
+ if (this == OrePrefixes.crushed) return "Ground " + aMaterial.mDefaultLocalName;
+ break;
+ }
+ // Use Standard Localization
+ return mLocalizedMaterialPre + aMaterial.mDefaultLocalName + mLocalizedMaterialPost;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/SubTag.java b/src/main/java/gregtech/api/enums/SubTag.java
new file mode 100644
index 0000000000..854a64a701
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/SubTag.java
@@ -0,0 +1,306 @@
+package gregtech.api.enums;
+
+import gregtech.api.interfaces.ICondition;
+import gregtech.api.interfaces.ISubTagContainer;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+
+/**
+ * Just a simple Class to be able to add special Tags for Materials.
+ *
+ * The Tags should be added in preload and before I do my own preload to the Materials.
+ * In order to make yourself a new SubTag, just create one new instance of SubTag using getNewSubTag
+ * and use that one instance on all Materials you want to add those Tags to.
+ *
+ * You should look at this File whenever you update, maybe there are some new Tags you could use.
+ *
+ * -------------------------------------------------------------------------------------------------
+ *
+ * Some SubTags are used for other things than Materials too. It is useful when I need an easy way to declare Stuff in Items.
+ */
+public final class SubTag implements ICondition<ISubTagContainer> {
+ private static long sSubtagID = 0;
+
+ public static final ArrayList<SubTag> sSubTags = new ArrayList<SubTag>();
+
+ /**
+ * Add this to your Material if you want to have its Ore Calcite heated in a Blast Furnace for more output. Already listed are:
+ * Iron, Pyrite, PigIron, DeepIron, ShadowIron, WroughtIron and MeteoricIron.
+ */
+ public static final SubTag BLASTFURNACE_CALCITE_DOUBLE = getNewSubTag("BLASTFURNACE_CALCITE_DOUBLE"), BLASTFURNACE_CALCITE_TRIPLE = getNewSubTag("BLASTFURNACE_CALCITE_TRIPLE");
+
+ /**
+ * Materials which are outputting less in an Induction Smelter. Already listed are:
+ * Pyrite, Tetrahedrite, Sphalerite, Cinnabar
+ */
+ public static final SubTag INDUCTIONSMELTING_LOW_OUTPUT = getNewSubTag("INDUCTIONSMELTING_LOW_OUTPUT");
+
+ /**
+ * Add this to your Material if you want to have its Ore Sodium Persulfate washed. Already listed are:
+ * Zinc, Nickel, Copper, Cobalt, Cobaltite and Tetrahedrite.
+ */
+ public static final SubTag WASHING_SODIUMPERSULFATE = getNewSubTag("WASHING_SODIUMPERSULFATE");
+
+ /**
+ * Add this to your Material if you want to have its Ore Mercury washed. Already listed are:
+ * Gold, Silver, Osmium, Mithril, Platinum, Midasium, Cooperite and AstralSilver.
+ */
+ public static final SubTag WASHING_MERCURY = getNewSubTag("WASHING_MERCURY");
+
+ /**
+ * Add this to your Material if you want to have its Ore electromagnetically separated to give Gold.
+ */
+ public static final SubTag ELECTROMAGNETIC_SEPERATION_GOLD = getNewSubTag("ELECTROMAGNETIC_SEPERATION_GOLD");
+
+ /**
+ * Add this to your Material if you want to have its Ore electromagnetically separated to give Iron.
+ */
+ public static final SubTag ELECTROMAGNETIC_SEPERATION_IRON = getNewSubTag("ELECTROMAGNETIC_SEPERATION_IRON");
+
+ /**
+ * Add this to your Material if you want to have its Ore electromagnetically separated to give Neodymium.
+ */
+ public static final SubTag ELECTROMAGNETIC_SEPERATION_NEODYMIUM = getNewSubTag("ELECTROMAGNETIC_SEPERATION_NEODYMIUM");
+
+ /**
+ * Add this to your Material if you want to have its Ore giving Cinnabar Crystals on Pulverization. Already listed are:
+ * Redstone
+ */
+ public static final SubTag PULVERIZING_CINNABAR = getNewSubTag("PULVERIZING_CINNABAR");
+
+ /**
+ * This Material cannot be worked by any other means, than smashing or smelting. This is used for coated Materials.
+ */
+ public static final SubTag NO_WORKING = getNewSubTag("NO_WORKING");
+
+ /**
+ * This Material cannot be used for regular Metal working techniques since it is not possible to bend it. Already listed are:
+ * Rubber, Plastic, Paper, Wood, Stone
+ */
+ public static final SubTag NO_SMASHING = getNewSubTag("NO_SMASHING");
+
+ /**
+ * This Material cannot be unificated
+ */
+ public static final SubTag NO_UNIFICATION = getNewSubTag("NO_UNIFICATION");
+
+ /**
+ * This Material cannot be used in any Recycler. Already listed are:
+ * Stone, Glass, Water
+ */
+ public static final SubTag NO_RECYCLING = getNewSubTag("NO_RECYCLING");
+
+ /**
+ * This Material cannot be used in any Furnace alike Structure. Already listed are:
+ * Paper, Wood, Gunpowder, Stone
+ */
+ public static final SubTag NO_SMELTING = getNewSubTag("NO_SMELTING");
+
+ /**
+ * This Material can be molten into a Fluid
+ */
+ public static final SubTag SMELTING_TO_FLUID = getNewSubTag("SMELTING_TO_FLUID");
+
+ /**
+ * This Ore should be molten directly into a Gem of this Material, if the Ingot is missing. Already listed are:
+ * Cinnabar
+ */
+ public static final SubTag SMELTING_TO_GEM = getNewSubTag("SMELTING_TO_GEM");
+
+ /**
+ * If this Material is some kind of Wood
+ */
+ public static final SubTag WOOD = getNewSubTag("WOOD");
+
+ /**
+ * If this Material is some kind of Food (or edible at all)
+ */
+ public static final SubTag FOOD = getNewSubTag("FOOD");
+
+ /**
+ * If this Material is some kind of Stone
+ */
+ public static final SubTag STONE = getNewSubTag("STONE");
+
+ /**
+ * If this Material is some kind of Pearl
+ */
+ public static final SubTag PEARL = getNewSubTag("PEARL");
+
+ /**
+ * If this Material is some kind of Quartz
+ */
+ public static final SubTag QUARTZ = getNewSubTag("QUARTZ");
+
+ /**
+ * If this Material is Crystallisable
+ */
+ public static final SubTag CRYSTALLISABLE = getNewSubTag("CRYSTALLISABLE");
+
+ /**
+ * If this Material is some kind of Crystal
+ */
+ public static final SubTag CRYSTAL = getNewSubTag("CRYSTAL");
+
+ /**
+ * If this Material is some kind of Magical
+ */
+ public static final SubTag MAGICAL = getNewSubTag("MAGICAL");
+
+ /**
+ * If this Material is some kind of Metal
+ */
+ public static final SubTag METAL = getNewSubTag("METAL");
+
+ /**
+ * If this Material is some kind of Paper
+ */
+ public static final SubTag PAPER = getNewSubTag("PAPER");
+
+ /**
+ * If this Material is having a constantly burning Aura
+ */
+ public static final SubTag BURNING = getNewSubTag("BURNING");
+
+ /**
+ * If this Material is some kind of flammable
+ */
+ public static final SubTag FLAMMABLE = getNewSubTag("FLAMMABLE");
+
+ /**
+ * If this Material is not burnable at all
+ */
+ public static final SubTag UNBURNABLE = getNewSubTag("UNBURNABLE");
+
+ /**
+ * If this Material is some kind of explosive
+ */
+ public static final SubTag EXPLOSIVE = getNewSubTag("EXPLOSIVE");
+
+ /**
+ * If this Material is bouncy
+ */
+ public static final SubTag BOUNCY = getNewSubTag("BOUNCY");
+
+ /**
+ * If this Material is invisible
+ */
+ public static final SubTag INVISIBLE = getNewSubTag("INVISIBLE");
+
+ /**
+ * If this Material is transparent
+ */
+ public static final SubTag TRANSPARENT = getNewSubTag("TRANSPARENT");
+
+ /**
+ * If this Material has a Color
+ */
+ public static final SubTag HAS_COLOR = getNewSubTag("HAS_COLOR");
+
+ /**
+ * If this Material is stretchable
+ */
+ public static final SubTag STRETCHY = getNewSubTag("STRETCHY");
+
+ /**
+ * If this Material is grindable with a simple Mortar
+ */
+ public static final SubTag MORTAR_GRINDABLE = getNewSubTag("MORTAR_GRINDABLE");
+
+ /**
+ * If this Material is usable for Soldering
+ */
+ public static final SubTag SOLDERING_MATERIAL = getNewSubTag("SOLDERING_MATERIAL");
+
+ /**
+ * If this Material is has extra Costs for Soldering, requires the Tag "SOLDERING_MATERIAL" too
+ */
+ public static final SubTag SOLDERING_MATERIAL_BAD = getNewSubTag("SOLDERING_MATERIAL_BAD");
+
+ /**
+ * If this Material is has a discount for Soldering, requires the Tag "SOLDERING_MATERIAL" too
+ */
+ public static final SubTag SOLDERING_MATERIAL_GOOD = getNewSubTag("SOLDERING_MATERIAL_GOOD");
+
+ /**
+ * Energy Tag for Electricity
+ * Primary = Voltage
+ * Secondary = Amperage
+ */
+ public static final SubTag ENERGY_ELECTRICITY = getNewSubTag("ENERGY_ELECTRICITY");
+
+ /**
+ * Energy Tag for Rotating Power
+ * Primary = Speed
+ * Secondary = Power
+ */
+ public static final SubTag ENERGY_ROTATIONAL = getNewSubTag("ENERGY_ROTATIONAL");
+
+ /**
+ * Energy Tag for Steam Power
+ * Primary = Steam per Tick
+ * Secondary = unused (always 1)
+ */
+ public static final SubTag ENERGY_STEAM = getNewSubTag("ENERGY_STEAM");
+
+ /**
+ * Energy Tag for Air Pressure Power
+ * Primary = Pressure
+ * Secondary = unused (always 1)
+ */
+ public static final SubTag ENERGY_AIR = getNewSubTag("ENERGY_AIR");
+
+ /**
+ * Energy Tag for Heat
+ * Primary = Temperature
+ * Secondary = unused (always 1)
+ */
+ public static final SubTag ENERGY_HEAT = getNewSubTag("ENERGY_HEAT");
+
+ /**
+ * Energy Tag for RedstoneFlux
+ * Primary = unused (always 1)
+ * Secondary = RF
+ */
+ public static final SubTag ENERGY_REDSTONE_FLUX = getNewSubTag("ENERGY_REDSTONE_FLUX");
+
+ /** Projectile Tag for Arrows */
+ public static final SubTag PROJECTILE_ARROW = getNewSubTag("PROJECTILE_ARROW");
+
+ public final long mSubtagID;
+ public final String mName;
+ public final Collection<ISubTagContainer> mRelevantTaggedItems = new HashSet<ISubTagContainer>(1);
+
+ private SubTag(String aName) {
+ mSubtagID = sSubtagID++;
+ mName = aName;
+ sSubTags.add(this);
+ }
+
+ public static SubTag getNewSubTag(String aName) {
+ for (SubTag tSubTag : sSubTags) if (tSubTag.mName.equals(aName)) return tSubTag;
+ return new SubTag(aName);
+ }
+
+ @Override
+ public String toString() {
+ return mName;
+ }
+
+ public SubTag addContainerToList(ISubTagContainer... aContainers) {
+ if (aContainers != null) for (ISubTagContainer aContainer : aContainers) if (aContainer != null && !mRelevantTaggedItems.contains(aContainer)) mRelevantTaggedItems.add(aContainer);
+ return this;
+ }
+
+ public SubTag addTo(ISubTagContainer... aContainers) {
+ if (aContainers != null) for (ISubTagContainer aContainer : aContainers) if (aContainer != null) aContainer.add(this);
+ return this;
+ }
+
+ @Override
+ public boolean isTrue(ISubTagContainer aObject) {
+ return aObject.contains(this);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/TC_Aspects.java b/src/main/java/gregtech/api/enums/TC_Aspects.java
new file mode 100644
index 0000000000..79a9b61782
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/TC_Aspects.java
@@ -0,0 +1,108 @@
+package gregtech.api.enums;
+
+import java.util.List;
+
+public enum TC_Aspects {
+ AER(1)
+ , ALIENIS(20)
+ , AQUA(3)
+ , ARBOR(1)
+ , AURAM(16)
+ , BESTIA(6)
+ , COGNITO(2)
+ , CORPUS(2)
+ , ELECTRUM(24)
+ , EXAMINIS(32)
+ , FABRICO(2)
+ , FAMES(2)
+ , GELUM(1)
+ , GRANUM(4)
+ , HERBA(2)
+ , HUMANUS(8)
+ , IGNIS(4)
+ , INSTRUMENTUM(4)
+ , ITER(6)
+ , LIMUS(3)
+ , LUCRUM(32)
+ , LUX(4)
+ , MACHINA(16)
+ , MAGNETO(24)
+ , MESSIS(3)
+ , METALLUM(8)
+ , METO(2)
+ , MORTUUS(16)
+ , MOTUS(4)
+ , NEBRISUM(48)
+ , ORDO(8)
+ , PANNUS(6)
+ , PERDITIO(2)
+ , PERFODIO(4)
+ , PERMUTATIO(12)
+ , POTENTIA(16)
+ , PRAECANTIO(16)
+ , RADIO(48)
+ , SANO(24)
+ , SENSUS(4)
+ , SPIRITUS(24)
+ , STRONTIO(64)
+ , TELUM(6)
+ , TERRA(1)
+ , TEMPESTAS(64)
+ , TENEBRAE(24)
+ , TUTAMEN(12)
+ , VACUOS(6)
+ , VENENUM(16)
+ , VICTUS(4)
+ , VINCULUM(16)
+ , VITIUM(48)
+ , VITREUS(3)
+ , VOLATUS(12)
+ ;
+
+ /**
+ * The Thaumcraft Aspect Object of the Mod itself.
+ */
+ public Object mAspect;
+ public int mValue;
+
+ private TC_Aspects(int aValue){
+ mValue = aValue;
+ }
+
+ public static class TC_AspectStack {
+ public TC_Aspects mAspect;
+ public long mAmount;
+
+
+ public TC_AspectStack(TC_Aspects aAspect, long aAmount) {
+ mAspect = aAspect;
+ mAmount = aAmount;
+ }
+
+ public TC_AspectStack copy() {
+ return new TC_AspectStack(mAspect, mAmount);
+ }
+
+ public TC_AspectStack copy(long aAmount) {
+ return new TC_AspectStack(mAspect, aAmount);
+ }
+
+ public List<TC_AspectStack> addToAspectList(List<TC_AspectStack> aList) {
+ if (mAmount == 0) return aList;
+ for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) {tAspect.mAmount += mAmount; return aList;}
+ aList.add(copy());
+ return aList;
+ }
+
+ public boolean removeFromAspectList(List<TC_AspectStack> aList) {
+ for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) {
+ if (tAspect.mAmount >= mAmount) {
+ tAspect.mAmount -= mAmount;
+ if (tAspect.mAmount == 0) aList.remove(tAspect);
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/TextureSet.java b/src/main/java/gregtech/api/enums/TextureSet.java
new file mode 100644
index 0000000000..4a4bf6165e
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/TextureSet.java
@@ -0,0 +1,184 @@
+package gregtech.api.enums;
+
+import gregtech.api.interfaces.IIconContainer;
+
+public class TextureSet {
+ public static final TextureSet
+ SET_NONE = new TextureSet("NONE")
+ , SET_DULL = new TextureSet("DULL")
+ , SET_RUBY = new TextureSet("RUBY")
+ , SET_OPAL = new TextureSet("OPAL")
+ , SET_LEAF = new TextureSet("LEAF")
+ , SET_WOOD = new TextureSet("WOOD")
+ , SET_SAND = new TextureSet("SAND")
+ , SET_FINE = new TextureSet("FINE")
+ , SET_FIERY = new TextureSet("FIERY")
+ , SET_FLUID = new TextureSet("FLUID")
+ , SET_ROUGH = new TextureSet("ROUGH")
+ , SET_PAPER = new TextureSet("PAPER")
+ , SET_GLASS = new TextureSet("GLASS")
+ , SET_FLINT = new TextureSet("FLINT")
+ , SET_LAPIS = new TextureSet("LAPIS")
+ , SET_SHINY = new TextureSet("SHINY")
+ , SET_SHARDS = new TextureSet("SHARDS")
+ , SET_POWDER = new TextureSet("POWDER")
+ , SET_QUARTZ = new TextureSet("QUARTZ")
+ , SET_EMERALD = new TextureSet("EMERALD")
+ , SET_DIAMOND = new TextureSet("DIAMOND")
+ , SET_LIGNITE = new TextureSet("LIGNITE")
+ , SET_MAGNETIC = new TextureSet("MAGNETIC")
+ , SET_METALLIC = new TextureSet("METALLIC")
+ , SET_NETHERSTAR = new TextureSet("NETHERSTAR")
+ , SET_GEM_VERTICAL = new TextureSet("GEM_VERTICAL")
+ , SET_GEM_HORIZONTAL = new TextureSet("GEM_HORIZONTAL")
+ ;
+
+ /**
+ * For the Indices of OrePrefixes you need to look into the OrePrefix Enum.
+ */
+ public static final short
+ INDEX_wire = 69
+ , INDEX_foil = 70
+ , INDEX_block1 = 71
+ , INDEX_block2 = 72
+ , INDEX_block3 = 73
+ , INDEX_block4 = 74
+ , INDEX_block5 = 75
+ , INDEX_block6 = 76
+ ;
+
+ public final IIconContainer[] mTextures = new IIconContainer[128];
+ public final String mSetName;
+
+ public TextureSet(String aSetName) {
+ mSetName = aSetName;
+ mTextures[ 0] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/dustTiny");
+ mTextures[ 1] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/dustSmall");
+ mTextures[ 2] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/dust");
+ mTextures[ 3] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/dustImpure");
+ mTextures[ 4] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/dustPure");
+ mTextures[ 5] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crushed");
+ mTextures[ 6] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crushedPurified");
+ mTextures[ 7] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crushedCentrifuged");
+ mTextures[ 8] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gem");
+ mTextures[ 9] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/nugget");
+ mTextures[ 10] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 11] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingot");
+ mTextures[ 12] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingotHot");
+ mTextures[ 13] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingotDouble");
+ mTextures[ 14] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingotTriple");
+ mTextures[ 15] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingotQuadruple");
+ mTextures[ 16] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ingotQuintuple");
+ mTextures[ 17] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plate");
+ mTextures[ 18] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plateDouble");
+ mTextures[ 19] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plateTriple");
+ mTextures[ 20] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plateQuadruple");
+ mTextures[ 21] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plateQuintuple");
+ mTextures[ 22] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/plateDense");
+ mTextures[ 23] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/stick");
+ mTextures[ 24] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/lens");
+ mTextures[ 25] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/round");
+ mTextures[ 26] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/bolt");
+ mTextures[ 27] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/screw");
+ mTextures[ 28] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/ring");
+ mTextures[ 29] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/foil");
+ mTextures[ 30] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/cell");
+ mTextures[ 31] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/cellPlasma");
+ mTextures[ 32] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadSword");
+ mTextures[ 33] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadPickaxe");
+ mTextures[ 34] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadShovel");
+ mTextures[ 35] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadAxe");
+ mTextures[ 36] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadHoe");
+ mTextures[ 37] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadHammer");
+ mTextures[ 38] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadFile");
+ mTextures[ 39] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadSaw");
+ mTextures[ 40] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadDrill");
+ mTextures[ 41] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadChainsaw");
+ mTextures[ 42] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadWrench");
+ mTextures[ 43] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadUniversalSpade");
+ mTextures[ 44] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadSense");
+ mTextures[ 45] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadPlow");
+ mTextures[ 46] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadArrow");
+ mTextures[ 47] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadScrewdriver");
+ mTextures[ 48] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadBuzzSaw");
+ mTextures[ 49] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/toolHeadSoldering");
+ mTextures[ 50] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 51] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/wireFine");
+ mTextures[ 52] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gearGtSmall");
+ mTextures[ 53] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/rotor");
+ mTextures[ 54] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/stickLong");
+ mTextures[ 55] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/springSmall");
+ mTextures[ 56] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/spring");
+ mTextures[ 57] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/arrowGtWood");
+ mTextures[ 58] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/arrowGtPlastic");
+ mTextures[ 59] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gemChipped");
+ mTextures[ 60] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gemFlawed");
+ mTextures[ 61] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gemFlawless");
+ mTextures[ 62] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gemExquisite");
+ mTextures[ 63] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/gearGt");
+ mTextures[ 64] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 65] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 66] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 67] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/oreSmall");
+ mTextures[ 68] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/ore");
+ mTextures[ 69] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/wire");
+ mTextures[ 70] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/foil");
+ mTextures[ 71] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block1");
+ mTextures[ 72] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block2");
+ mTextures[ 73] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block3");
+ mTextures[ 74] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block4");
+ mTextures[ 75] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block5");
+ mTextures[ 76] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/block6");
+ mTextures[ 77] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeSide");
+ mTextures[ 78] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeTiny");
+ mTextures[ 79] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeSmall");
+ mTextures[ 80] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeMedium");
+ mTextures[ 81] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeLarge");
+ mTextures[ 82] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/pipeHuge");
+ mTextures[ 83] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/frameGt");
+ mTextures[ 84] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 85] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 86] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 87] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 88] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 89] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 90] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 91] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 92] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 93] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 94] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 95] = new Textures.BlockIcons.CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[ 96] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crateGtDust");
+ mTextures[ 97] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crateGtIngot");
+ mTextures[ 98] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crateGtGem");
+ mTextures[ 99] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/crateGtPlate");
+ mTextures[100] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/turbineBlade");
+ mTextures[101] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[102] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[103] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[104] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[105] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[106] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[107] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[108] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[109] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[110] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[111] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[112] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[113] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[114] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[115] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[116] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[117] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[118] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[119] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[120] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[121] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[122] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[123] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[124] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[125] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[126] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ mTextures[127] = new Textures.ItemIcons .CustomIcon("materialicons/"+mSetName+"/void");
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java
new file mode 100644
index 0000000000..43c33fc8db
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/Textures.java
@@ -0,0 +1,453 @@
+package gregtech.api.enums;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_BLOCK;
+import static gregtech.api.enums.GT_Values.RES_PATH_ITEM;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.objects.GT_SidedTexture;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.ResourceLocation;
+
+public class Textures {
+ public enum BlockIcons implements IIconContainer, Runnable {
+ VOID // The Empty Texture
+ , RENDERING_ERROR
+ , PIPE_RESTRICTOR
+ , INSULATION_FULL, INSULATION_TINY, INSULATION_SMALL, INSULATION_MEDIUM, INSULATION_LARGE, INSULATION_HUGE
+ , CFOAM_FRESH, CFOAM_HARDENED
+ , SOLARPANEL, SOLARPANEL_8V, SOLARPANEL_LV, SOLARPANEL_MV, SOLARPANEL_HV, SOLARPANEL_EV, SOLARPANEL_IV, SOLARPANEL_LuV, SOLARPANEL_ZPM, SOLARPANEL_UV
+ , VENT_NORMAL, VENT_ADVANCED, COVER_WOOD_PLATE
+ , ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT
+ , AUTOMATION_FILTER, AUTOMATION_TYPEFILTER, AUTOMATION_CHESTBUFFER, AUTOMATION_SUPERBUFFER, AUTOMATION_REGULATOR
+ , CONCRETE_LIGHT_STONE, CONCRETE_LIGHT_COBBLE, CONCRETE_LIGHT_COBBLE_MOSSY, CONCRETE_LIGHT_BRICKS, CONCRETE_LIGHT_BRICKS_CRACKED, CONCRETE_LIGHT_BRICKS_MOSSY, CONCRETE_LIGHT_BRICKS_CHISELED, CONCRETE_LIGHT_SMOOTH
+ , CONCRETE_DARK_STONE, CONCRETE_DARK_COBBLE, CONCRETE_DARK_COBBLE_MOSSY, CONCRETE_DARK_BRICKS, CONCRETE_DARK_BRICKS_CRACKED, CONCRETE_DARK_BRICKS_MOSSY, CONCRETE_DARK_BRICKS_CHISELED, CONCRETE_DARK_SMOOTH
+ , GRANITE_BLACK_STONE, GRANITE_BLACK_COBBLE, GRANITE_BLACK_COBBLE_MOSSY, GRANITE_BLACK_BRICKS, GRANITE_BLACK_BRICKS_CRACKED, GRANITE_BLACK_BRICKS_MOSSY, GRANITE_BLACK_BRICKS_CHISELED, GRANITE_BLACK_SMOOTH
+ , GRANITE_RED_STONE, GRANITE_RED_COBBLE, GRANITE_RED_COBBLE_MOSSY, GRANITE_RED_BRICKS, GRANITE_RED_BRICKS_CRACKED, GRANITE_RED_BRICKS_MOSSY, GRANITE_RED_BRICKS_CHISELED, GRANITE_RED_SMOOTH
+ , MACHINE_BRONZEBRICKS_TOP, MACHINE_BRONZEBRICKS_SIDE, MACHINE_BRONZEBRICKS_BOTTOM
+ , MACHINE_STEELBRICKS_TOP, MACHINE_STEELBRICKS_SIDE, MACHINE_STEELBRICKS_BOTTOM
+ , MACHINE_BRONZE_TOP, MACHINE_BRONZE_SIDE, MACHINE_BRONZE_BOTTOM
+ , MACHINE_STEEL_TOP, MACHINE_STEEL_SIDE, MACHINE_STEEL_BOTTOM
+ , MACHINE_8V_TOP, MACHINE_8V_SIDE, MACHINE_8V_BOTTOM
+ , MACHINE_LV_TOP, MACHINE_LV_SIDE, MACHINE_LV_BOTTOM
+ , MACHINE_MV_TOP, MACHINE_MV_SIDE, MACHINE_MV_BOTTOM
+ , MACHINE_HV_TOP, MACHINE_HV_SIDE, MACHINE_HV_BOTTOM
+ , MACHINE_EV_TOP, MACHINE_EV_SIDE, MACHINE_EV_BOTTOM
+ , MACHINE_IV_TOP, MACHINE_IV_SIDE, MACHINE_IV_BOTTOM
+ , MACHINE_LuV_TOP, MACHINE_LuV_SIDE, MACHINE_LuV_BOTTOM
+ , MACHINE_ZPM_TOP, MACHINE_ZPM_SIDE, MACHINE_ZPM_BOTTOM
+ , MACHINE_UV_TOP, MACHINE_UV_SIDE, MACHINE_UV_BOTTOM
+ , MACHINE_MAX_TOP, MACHINE_MAX_SIDE, MACHINE_MAX_BOTTOM
+ , MACHINE_BRONZEPLATEDBRICKS, MACHINE_HEATPROOFCASING, MACHINE_BRONZEBLASTFURNACE, MACHINE_BRONZEBLASTFURNACE_ACTIVE
+ , MACHINE_CASING_ROBUST_TUNGSTENSTEEL, MACHINE_CASING_CLEAN_STAINLESSSTEEL, MACHINE_CASING_STABLE_TITANIUM, MACHINE_CASING_FIREBOX_TITANIUM, MACHINE_CASING_FUSION_COIL, MACHINE_CASING_FUSION, MACHINE_CASING_FUSION_GLASS, MACHINE_CASING_FUSION_GLASS_YELLOW, MACHINE_CASING_FUSION_2,MACHINE_CASING_MAGIC,MACHINE_CASING_MAGIC_ACTIVE,MACHINE_CASING_MAGIC_FRONT,MACHINE_CASING_MAGIC_FRONT_ACTIVE,MACHINE_CASING_DRAGONEGG
+ , MACHINE_CASING_SOLID_STEEL, MACHINE_CASING_FROST_PROOF, MACHINE_CASING_PUMP, MACHINE_CASING_MOTOR, MACHINE_CASING_PIPE_BRONZE, MACHINE_CASING_PIPE_STEEL, MACHINE_CASING_PIPE_TITANIUM, MACHINE_CASING_PIPE_TUNGSTENSTEEL, MACHINE_CASING_GEARBOX_BRONZE, MACHINE_CASING_GEARBOX_STEEL, MACHINE_CASING_GEARBOX_TITANIUM, MACHINE_CASING_GEARBOX_TUNGSTENSTEEL, MACHINE_CASING_DATA_DRIVE, MACHINE_CASING_CONTAINMENT_FIELD, MACHINE_CASING_ASSEMBLER, MACHINE_CASING_PROCESSOR
+ , MACHINE_CASING_STRIPES_A, MACHINE_CASING_STRIPES_B, MACHINE_CASING_RADIOACTIVEHAZARD, MACHINE_CASING_BIOHAZARD, MACHINE_CASING_EXPLOSIONHAZARD, MACHINE_CASING_FIREHAZARD, MACHINE_CASING_ACIDHAZARD, MACHINE_CASING_MAGICHAZARD, MACHINE_CASING_FROSTHAZARD, MACHINE_CASING_NOISEHAZARD, MACHINE_CASING_GRATE, MACHINE_CASING_VENT, MACHINE_CASING_RADIATIONPROOF, MACHINE_CASING_FIREBOX_BRONZE, MACHINE_CASING_FIREBOX_STEEL, MACHINE_CASING_FIREBOX_TUNGSTENSTEEL
+ , BOILER_SOLAR, BOILER_FRONT, BOILER_FRONT_ACTIVE, BOILER_LAVA_FRONT, BOILER_LAVA_FRONT_ACTIVE
+ , NAQUADAH_REACTOR_SOLID_BACK, NAQUADAH_REACTOR_SOLID_FRONT, NAQUADAH_REACTOR_SOLID_SIDE, NAQUADAH_REACTOR_SOLID_BOTTOM, NAQUADAH_REACTOR_SOLID_TOP, NAQUADAH_REACTOR_SOLID_BACK_ACTIVE, NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE, NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE, NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE, NAQUADAH_REACTOR_SOLID_TOP_ACTIVE
+ , NAQUADAH_REACTOR_FLUID_BACK, NAQUADAH_REACTOR_FLUID_FRONT, NAQUADAH_REACTOR_FLUID_SIDE, NAQUADAH_REACTOR_FLUID_BOTTOM, NAQUADAH_REACTOR_FLUID_TOP, NAQUADAH_REACTOR_FLUID_BACK_ACTIVE, NAQUADAH_REACTOR_FLUID_FRONT_ACTIVE, NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE, NAQUADAH_REACTOR_FLUID_BOTTOM_ACTIVE, NAQUADAH_REACTOR_FLUID_TOP_ACTIVE
+ , DIESEL_GENERATOR_BACK, DIESEL_GENERATOR_FRONT, DIESEL_GENERATOR_SIDE, DIESEL_GENERATOR_BOTTOM, DIESEL_GENERATOR_TOP, DIESEL_GENERATOR_BACK_ACTIVE, DIESEL_GENERATOR_FRONT_ACTIVE, DIESEL_GENERATOR_SIDE_ACTIVE, DIESEL_GENERATOR_BOTTOM_ACTIVE, DIESEL_GENERATOR_TOP_ACTIVE
+ , GAS_TURBINE_BACK, GAS_TURBINE_FRONT, GAS_TURBINE_SIDE, GAS_TURBINE_BOTTOM, GAS_TURBINE_TOP, GAS_TURBINE_BACK_ACTIVE, GAS_TURBINE_FRONT_ACTIVE, GAS_TURBINE_SIDE_ACTIVE, GAS_TURBINE_BOTTOM_ACTIVE, GAS_TURBINE_TOP_ACTIVE
+ , STEAM_TURBINE_BACK, STEAM_TURBINE_FRONT, STEAM_TURBINE_SIDE, STEAM_TURBINE_BOTTOM, STEAM_TURBINE_TOP, STEAM_TURBINE_BACK_ACTIVE, STEAM_TURBINE_FRONT_ACTIVE, STEAM_TURBINE_SIDE_ACTIVE, STEAM_TURBINE_BOTTOM_ACTIVE, STEAM_TURBINE_TOP_ACTIVE
+ , MACHINE_COIL_CUPRONICKEL, MACHINE_COIL_KANTHAL, MACHINE_COIL_NICHROME, MACHINE_COIL_SUPERCONDUCTOR
+ , OVERLAY_LOCKER, OVERLAY_LOCKER_000, OVERLAY_LOCKER_001, OVERLAY_LOCKER_002, OVERLAY_LOCKER_003, OVERLAY_LOCKER_004, OVERLAY_LOCKER_005, OVERLAY_LOCKER_006, OVERLAY_LOCKER_007, OVERLAY_LOCKER_008, OVERLAY_LOCKER_009, OVERLAY_LOCKER_010, OVERLAY_LOCKER_011, OVERLAY_LOCKER_012, OVERLAY_LOCKER_013
+ , OVERLAY_LENS, OVERLAY_PIPE, OVERLAY_PIPE_IN, OVERLAY_PIPE_OUT, OVERLAY_MUFFLER, OVERLAY_CONTROLLER, OVERLAY_ACTIVITYDETECTOR, OVERLAY_ENERGYDETECTOR, OVERLAY_FLUIDDETECTOR, OVERLAY_ITEMDETECTOR, OVERLAY_FUSION1, OVERLAY_FUSION2, OVERLAY_FUSION3, OVERLAY_SCREEN, OVERLAY_QTANK, OVERLAY_QCHEST, OVERLAY_SHUTTER, OVERLAY_CLOSET, OVERLAY_DUCTTAPE, OVERLAY_MAINTENANCE, OVERLAY_CONVEYOR, OVERLAY_PUMP, OVERLAY_ARM, OVERLAY_DRAIN, OVERLAY_CRAFTING
+ , OVERLAY_ENERGY_IN, OVERLAY_ENERGY_OUT , OVERLAY_ENERGY_IN_MULTI, OVERLAY_ENERGY_OUT_MULTI
+ , OVERLAY_FRONT_LARGE_BOILER, OVERLAY_FRONT_LARGE_BOILER_ACTIVE, OVERLAY_FRONT_VACUUM_FREEZER, OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE, OVERLAY_FRONT_MULTI_SMELTER, OVERLAY_FRONT_MULTI_SMELTER_ACTIVE, OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE, OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE, OVERLAY_FRONT_IMPLOSION_COMPRESSOR, OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE
+ , OVERLAY_TOP_POTIONBREWER , OVERLAY_TOP_REPLICATOR , OVERLAY_TOP_MASSFAB , OVERLAY_TOP_STEAM_HAMMER , OVERLAY_TOP_STEAM_FURNACE , OVERLAY_TOP_STEAM_ALLOY_SMELTER , OVERLAY_TOP_STEAM_MACERATOR , OVERLAY_TOP_STEAM_COMPRESSOR , OVERLAY_TOP_STEAM_EXTRACTOR , OVERLAY_TOP_DISASSEMBLER , OVERLAY_TOP_BOXINATOR , OVERLAY_TOP_ROCK_BREAKER , OVERLAY_TOP_SCANNER
+ , OVERLAY_FRONT_POTIONBREWER , OVERLAY_FRONT_REPLICATOR , OVERLAY_FRONT_MASSFAB , OVERLAY_FRONT_STEAM_HAMMER , OVERLAY_FRONT_STEAM_FURNACE , OVERLAY_FRONT_STEAM_ALLOY_SMELTER , OVERLAY_FRONT_STEAM_MACERATOR , OVERLAY_FRONT_STEAM_COMPRESSOR , OVERLAY_FRONT_STEAM_EXTRACTOR , OVERLAY_FRONT_DISASSEMBLER , OVERLAY_FRONT_BOXINATOR , OVERLAY_FRONT_ROCK_BREAKER , OVERLAY_FRONT_SCANNER
+ , OVERLAY_BOTTOM_POTIONBREWER , OVERLAY_BOTTOM_REPLICATOR , OVERLAY_BOTTOM_MASSFAB , OVERLAY_BOTTOM_STEAM_HAMMER , OVERLAY_BOTTOM_STEAM_FURNACE , OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER , OVERLAY_BOTTOM_STEAM_MACERATOR , OVERLAY_BOTTOM_STEAM_COMPRESSOR , OVERLAY_BOTTOM_STEAM_EXTRACTOR , OVERLAY_BOTTOM_DISASSEMBLER , OVERLAY_BOTTOM_BOXINATOR , OVERLAY_BOTTOM_ROCK_BREAKER , OVERLAY_BOTTOM_SCANNER
+ , OVERLAY_SIDE_POTIONBREWER , OVERLAY_SIDE_REPLICATOR , OVERLAY_SIDE_MASSFAB , OVERLAY_SIDE_STEAM_HAMMER , OVERLAY_SIDE_STEAM_FURNACE , OVERLAY_SIDE_STEAM_ALLOY_SMELTER , OVERLAY_SIDE_STEAM_MACERATOR , OVERLAY_SIDE_STEAM_COMPRESSOR , OVERLAY_SIDE_STEAM_EXTRACTOR , OVERLAY_SIDE_DISASSEMBLER , OVERLAY_SIDE_BOXINATOR , OVERLAY_SIDE_ROCK_BREAKER , OVERLAY_SIDE_SCANNER
+ , OVERLAY_TOP_POTIONBREWER_ACTIVE, OVERLAY_TOP_REPLICATOR_ACTIVE, OVERLAY_TOP_MASSFAB_ACTIVE, OVERLAY_TOP_STEAM_HAMMER_ACTIVE, OVERLAY_TOP_STEAM_FURNACE_ACTIVE, OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE, OVERLAY_TOP_STEAM_MACERATOR_ACTIVE, OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE, OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE, OVERLAY_TOP_DISASSEMBLER_ACTIVE, OVERLAY_TOP_BOXINATOR_ACTIVE, OVERLAY_TOP_ROCK_BREAKER_ACTIVE, OVERLAY_TOP_SCANNER_ACTIVE
+ , OVERLAY_FRONT_POTIONBREWER_ACTIVE, OVERLAY_FRONT_REPLICATOR_ACTIVE, OVERLAY_FRONT_MASSFAB_ACTIVE, OVERLAY_FRONT_STEAM_HAMMER_ACTIVE, OVERLAY_FRONT_STEAM_FURNACE_ACTIVE, OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE, OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE, OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE, OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE, OVERLAY_FRONT_DISASSEMBLER_ACTIVE, OVERLAY_FRONT_BOXINATOR_ACTIVE, OVERLAY_FRONT_ROCK_BREAKER_ACTIVE, OVERLAY_FRONT_SCANNER_ACTIVE
+ , OVERLAY_BOTTOM_POTIONBREWER_ACTIVE, OVERLAY_BOTTOM_REPLICATOR_ACTIVE, OVERLAY_BOTTOM_MASSFAB_ACTIVE, OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE, OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE, OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE, OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE, OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE, OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE, OVERLAY_BOTTOM_DISASSEMBLER_ACTIVE, OVERLAY_BOTTOM_BOXINATOR_ACTIVE, OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE, OVERLAY_BOTTOM_SCANNER_ACTIVE
+ , OVERLAY_SIDE_POTIONBREWER_ACTIVE, OVERLAY_SIDE_REPLICATOR_ACTIVE, OVERLAY_SIDE_MASSFAB_ACTIVE, OVERLAY_SIDE_STEAM_HAMMER_ACTIVE, OVERLAY_SIDE_STEAM_FURNACE_ACTIVE, OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE, OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE, OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE, OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE, OVERLAY_SIDE_DISASSEMBLER_ACTIVE, OVERLAY_SIDE_BOXINATOR_ACTIVE, OVERLAY_SIDE_ROCK_BREAKER_ACTIVE, OVERLAY_SIDE_SCANNER_ACTIVE, OVERLAY_ADV_PUMP, OVERLAY_TELEPORTER,OVERLAY_TELEPORTER_ACTIVE
+ ,FUSIONI_1,FUSIONI_2,FUSIONI_3,FUSIONI_4,FUSIONI_5,FUSIONI_6,FUSIONI_7,FUSIONI_8,FUSIONI_9,FUSIONI_10,FUSIONI_11,FUSIONI_12,FUSIONII_1,FUSIONII_2,FUSIONII_3,FUSIONII_4,FUSIONII_5,FUSIONII_6,FUSIONII_7,FUSIONII_8,FUSIONII_9,FUSIONII_10,FUSIONII_11,FUSIONII_12
+ ,LARGETURBINE1,LARGETURBINE2,LARGETURBINE3,LARGETURBINE4,LARGETURBINE5,LARGETURBINE6,LARGETURBINE7,LARGETURBINE8,LARGETURBINE9,LARGETURBINE_ACTIVE1,LARGETURBINE_ACTIVE2,LARGETURBINE_ACTIVE3,LARGETURBINE_ACTIVE4,LARGETURBINE_ACTIVE5,LARGETURBINE_ACTIVE6,LARGETURBINE_ACTIVE7,LARGETURBINE_ACTIVE8,LARGETURBINE_ACTIVE9, MACHINE_CASING_TURBINE
+
+ ;
+
+ protected IIcon mIcon;
+
+ @Override public IIcon getIcon() {return mIcon;}
+ @Override public IIcon getOverlayIcon() {return null;}
+
+ private BlockIcons() {
+ GregTech_API.sGTBlockIconload.add(this);
+ }
+
+ @Override
+ public void run() {
+ mIcon = GregTech_API.sBlockIcons.registerIcon(RES_PATH_BLOCK + "iconsets/" + this);
+ }
+
+ @Override
+ public ResourceLocation getTextureFile() {
+ return TextureMap.locationBlocksTexture;
+ }
+
+ /**
+ * Icon for Fresh CFoam
+ */
+ public static final ITexture[] FRESHFOAM = new ITexture[] {new GT_RenderedTexture(CFOAM_FRESH)};
+
+ /**
+ * Icons for Hardened CFoam
+ * 0 = No Color
+ * 1 - 16 = Colors
+ */
+ public static final ITexture[][] HARDENEDFOAMS = new ITexture[][] {
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.CONSTRUCTION_FOAM.mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 0].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 1].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 2].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 3].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 4].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 5].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 6].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 7].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 8].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[ 9].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[10].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[11].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[12].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[13].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[14].mRGBa)},
+ new ITexture[] {new GT_RenderedTexture(CFOAM_HARDENED, Dyes.VALUES[15].mRGBa)}
+ };
+
+ /**
+ * Machine Casings by Tier
+ * 0 = 8V, 1 = LV, 2 = MV, 3 = HV, 4 = EV, 5 = IV, 6 = IV, 7 = IV, 8 = IV, 9 = IV
+ */
+ public static final IIconContainer[]
+ MACHINECASINGS_SIDE = new IIconContainer[] {
+ MACHINE_8V_SIDE,
+ MACHINE_LV_SIDE,
+ MACHINE_MV_SIDE,
+ MACHINE_HV_SIDE,
+ MACHINE_EV_SIDE,
+ MACHINE_IV_SIDE,
+ MACHINE_LuV_SIDE,
+ MACHINE_ZPM_SIDE,
+ MACHINE_UV_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ MACHINE_MAX_SIDE,
+ },
+ MACHINECASINGS_TOP = new IIconContainer[] {
+ MACHINE_8V_TOP,
+ MACHINE_LV_TOP,
+ MACHINE_MV_TOP,
+ MACHINE_HV_TOP,
+ MACHINE_EV_TOP,
+ MACHINE_IV_TOP,
+ MACHINE_LuV_TOP,
+ MACHINE_ZPM_TOP,
+ MACHINE_UV_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ MACHINE_MAX_TOP,
+ },
+ MACHINECASINGS_BOTTOM = new IIconContainer[] {
+ MACHINE_8V_BOTTOM,
+ MACHINE_LV_BOTTOM,
+ MACHINE_MV_BOTTOM,
+ MACHINE_HV_BOTTOM,
+ MACHINE_EV_BOTTOM,
+ MACHINE_IV_BOTTOM,
+ MACHINE_LuV_BOTTOM,
+ MACHINE_ZPM_BOTTOM,
+ MACHINE_UV_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ MACHINE_MAX_BOTTOM,
+ },
+ GRANITES = new IIconContainer[] {
+ GRANITE_BLACK_STONE,
+ GRANITE_BLACK_COBBLE,
+ GRANITE_BLACK_COBBLE_MOSSY,
+ GRANITE_BLACK_BRICKS,
+ GRANITE_BLACK_BRICKS_CRACKED,
+ GRANITE_BLACK_BRICKS_MOSSY,
+ GRANITE_BLACK_BRICKS_CHISELED,
+ GRANITE_BLACK_SMOOTH,
+ GRANITE_RED_STONE,
+ GRANITE_RED_COBBLE,
+ GRANITE_RED_COBBLE_MOSSY,
+ GRANITE_RED_BRICKS,
+ GRANITE_RED_BRICKS_CRACKED,
+ GRANITE_RED_BRICKS_MOSSY,
+ GRANITE_RED_BRICKS_CHISELED,
+ GRANITE_RED_SMOOTH,
+ },
+ CONCRETES = new IIconContainer[] {
+ CONCRETE_DARK_STONE,
+ CONCRETE_DARK_COBBLE,
+ CONCRETE_DARK_COBBLE_MOSSY,
+ CONCRETE_DARK_BRICKS,
+ CONCRETE_DARK_BRICKS_CRACKED,
+ CONCRETE_DARK_BRICKS_MOSSY,
+ CONCRETE_DARK_BRICKS_CHISELED,
+ CONCRETE_DARK_SMOOTH,
+ CONCRETE_LIGHT_STONE,
+ CONCRETE_LIGHT_COBBLE,
+ CONCRETE_LIGHT_COBBLE_MOSSY,
+ CONCRETE_LIGHT_BRICKS,
+ CONCRETE_LIGHT_BRICKS_CRACKED,
+ CONCRETE_LIGHT_BRICKS_MOSSY,
+ CONCRETE_LIGHT_BRICKS_CHISELED,
+ CONCRETE_LIGHT_SMOOTH,
+ },
+ TURBINE = new IIconContainer[] {
+ LARGETURBINE1,
+ LARGETURBINE2,
+ LARGETURBINE3,
+ LARGETURBINE4,
+ LARGETURBINE5,
+ LARGETURBINE6,
+ LARGETURBINE7,
+ LARGETURBINE8,
+ LARGETURBINE9
+ },
+ TURBINE_ACTIVE = new IIconContainer[] {
+ LARGETURBINE_ACTIVE1,
+ LARGETURBINE_ACTIVE2,
+ LARGETURBINE_ACTIVE3,
+ LARGETURBINE_ACTIVE4,
+ LARGETURBINE_ACTIVE5,
+ LARGETURBINE_ACTIVE6,
+ LARGETURBINE_ACTIVE7,
+ LARGETURBINE_ACTIVE8,
+ LARGETURBINE_ACTIVE9
+ },
+ CONNECTED_HULLS = new IIconContainer[] {
+ CONCRETE_DARK_STONE,
+ FUSIONI_1,
+ FUSIONI_2,
+ FUSIONI_3,
+ FUSIONI_4,
+ FUSIONI_5,
+ FUSIONI_6,
+ FUSIONI_7,
+ FUSIONI_8,
+ FUSIONI_9,
+ FUSIONI_10,
+ FUSIONI_11,
+ FUSIONI_12,
+ FUSIONII_1,
+ FUSIONII_2,
+ FUSIONII_3,
+ FUSIONII_4,
+ FUSIONII_5,
+ FUSIONII_6,
+ FUSIONII_7,
+ FUSIONII_8,
+ FUSIONII_9,
+ FUSIONII_10,
+ FUSIONII_11,
+ FUSIONII_12,
+ };
+
+
+
+ public static ITexture[]
+ ERROR_RENDERING = new ITexture[] {
+ new GT_RenderedTexture(RENDERING_ERROR)
+ },
+ OVERLAYS_ENERGY_IN = new ITexture[] {
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {255, 100, 0, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {255, 255, 30, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {128, 128, 128, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] {240, 240, 245, 0}),
+ },
+ OVERLAYS_ENERGY_OUT = new ITexture[] {
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {255, 100, 0, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {255, 255, 30, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {128, 128, 128, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] {240, 240, 245, 0}),
+ },
+ OVERLAYS_ENERGY_IN_MULTI = new ITexture[] {
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {255, 100, 0, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {255, 255, 30, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {128, 128, 128, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] {240, 240, 245, 0}),
+ },
+ OVERLAYS_ENERGY_OUT_MULTI = new ITexture[] {
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {220, 220, 220, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {255, 100, 0, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {255, 255, 30, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {128, 128, 128, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {240, 240, 245, 0}),
+ new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] {240, 240, 245, 0}),
+ },
+ LOCKERS = new ITexture[] {
+ new GT_RenderedTexture(OVERLAY_LOCKER_000),
+ new GT_RenderedTexture(OVERLAY_LOCKER_001),
+ new GT_RenderedTexture(OVERLAY_LOCKER_002),
+ new GT_RenderedTexture(OVERLAY_LOCKER_003),
+ new GT_RenderedTexture(OVERLAY_LOCKER_004),
+ new GT_RenderedTexture(OVERLAY_LOCKER_005),
+ new GT_RenderedTexture(OVERLAY_LOCKER_006),
+ new GT_RenderedTexture(OVERLAY_LOCKER_007),
+ new GT_RenderedTexture(OVERLAY_LOCKER_008),
+ new GT_RenderedTexture(OVERLAY_LOCKER_009),
+ new GT_RenderedTexture(OVERLAY_LOCKER_010),
+ new GT_RenderedTexture(OVERLAY_LOCKER_011),
+ new GT_RenderedTexture(OVERLAY_LOCKER_012),
+ new GT_RenderedTexture(OVERLAY_LOCKER_013),
+ },
+ CASING_BLOCKS = new ITexture[128],
+ MACHINE_CASINGS[] = new ITexture[10][17];
+
+ static {
+ for (byte i = 0; i < MACHINE_CASINGS.length; i++) for (byte j = 0; j < MACHINE_CASINGS[i].length; j++) MACHINE_CASINGS[i][j] = new GT_SidedTexture(MACHINECASINGS_BOTTOM[i], MACHINECASINGS_TOP[i], MACHINECASINGS_SIDE[i], Dyes.getModulation(j-1, Dyes.MACHINE_METAL.mRGBa));
+ }
+
+ public static class CustomIcon implements IIconContainer, Runnable {
+ protected IIcon mIcon;
+ protected String mIconName;
+
+ @Override public IIcon getIcon() {return mIcon;}
+ @Override public IIcon getOverlayIcon() {return null;}
+
+ public CustomIcon(String aIconName) {
+ mIconName = aIconName;
+ GregTech_API.sGTBlockIconload.add(this);
+ }
+
+ @Override
+ public void run() {
+ mIcon = GregTech_API.sBlockIcons.registerIcon(RES_PATH_BLOCK + mIconName);
+ }
+
+ @Override
+ public ResourceLocation getTextureFile() {
+ return TextureMap.locationBlocksTexture;
+ }
+ }
+ }
+
+ public enum ItemIcons implements IIconContainer, Runnable {
+ VOID // The Empty Texture
+ , RENDERING_ERROR
+ , WRENCH
+ , MORTAR
+ , CROWBAR
+ , JACKHAMMER
+ , WIRE_CUTTER
+ , KNIFE, BUTCHERYKNIFE, SICKLE
+ , SCOOP, GRAFTER
+ , PLUNGER, ROLLING_PIN
+ , HANDLE_SWORD, HANDLE_FILE, HANDLE_SAW, HANDLE_SCREWDRIVER, HANDLE_BUZZSAW, HANDLE_ELECTRIC_SCREWDRIVER, HANDLE_SOLDERING
+ , POWER_UNIT_LV, POWER_UNIT_MV, POWER_UNIT_HV
+ , DURABILITY_BAR_0, DURABILITY_BAR_1, DURABILITY_BAR_2, DURABILITY_BAR_3, DURABILITY_BAR_4, DURABILITY_BAR_5, DURABILITY_BAR_6, DURABILITY_BAR_7, DURABILITY_BAR_8
+ , ENERGY_BAR_0, ENERGY_BAR_1, ENERGY_BAR_2, ENERGY_BAR_3, ENERGY_BAR_4, ENERGY_BAR_5, ENERGY_BAR_6, ENERGY_BAR_7, ENERGY_BAR_8, TURBINE, TURBINE_SMALL, TURBINE_LARGE, TURBINE_HUGE
+ ;
+
+ public static final IIconContainer[]
+ DURABILITY_BAR = new IIconContainer[] {
+ DURABILITY_BAR_0,
+ DURABILITY_BAR_1,
+ DURABILITY_BAR_2,
+ DURABILITY_BAR_3,
+ DURABILITY_BAR_4,
+ DURABILITY_BAR_5,
+ DURABILITY_BAR_6,
+ DURABILITY_BAR_7,
+ DURABILITY_BAR_8,
+ },
+ ENERGY_BAR = new IIconContainer[] {
+ ENERGY_BAR_0,
+ ENERGY_BAR_1,
+ ENERGY_BAR_2,
+ ENERGY_BAR_3,
+ ENERGY_BAR_4,
+ ENERGY_BAR_5,
+ ENERGY_BAR_6,
+ ENERGY_BAR_7,
+ ENERGY_BAR_8,
+ };
+
+ public static final ITexture[] ERROR_RENDERING = new ITexture[] {new GT_RenderedTexture(RENDERING_ERROR)};
+
+ protected IIcon mIcon, mOverlay;
+
+ @Override public IIcon getIcon() {return mIcon;}
+ @Override public IIcon getOverlayIcon() {return mOverlay;}
+
+ private ItemIcons() {
+ GregTech_API.sGTItemIconload.add(this);
+ }
+
+ @Override
+ public ResourceLocation getTextureFile() {
+ return TextureMap.locationItemsTexture;
+ }
+
+ @Override
+ public void run() {
+ mIcon = GregTech_API.sItemIcons.registerIcon(RES_PATH_ITEM + "iconsets/" + this);
+ mOverlay = GregTech_API.sItemIcons.registerIcon(RES_PATH_ITEM + "iconsets/" + this + "_OVERLAY");
+ }
+
+ public static class CustomIcon implements IIconContainer, Runnable {
+ protected IIcon mIcon, mOverlay;
+ protected String mIconName;
+
+ @Override public IIcon getIcon() {return mIcon;}
+ @Override public IIcon getOverlayIcon() {return mOverlay;}
+
+ public CustomIcon(String aIconName) {
+ mIconName = aIconName;
+ GregTech_API.sGTItemIconload.add(this);
+ }
+
+ @Override
+ public void run() {
+ mIcon = GregTech_API.sItemIcons.registerIcon(RES_PATH_ITEM + mIconName);
+ mOverlay = GregTech_API.sItemIcons.registerIcon(RES_PATH_ITEM + mIconName + "_OVERLAY");
+ }
+
+ @Override
+ public ResourceLocation getTextureFile() {
+ return TextureMap.locationItemsTexture;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/enums/Tier.java b/src/main/java/gregtech/api/enums/Tier.java
new file mode 100644
index 0000000000..8ee2bc6853
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/Tier.java
@@ -0,0 +1,91 @@
+package gregtech.api.enums;
+
+/**
+ * Experimental Class for later
+ */
+public class Tier {
+ public static final Tier[]
+ ELECTRIC = new Tier[] {
+ new Tier(SubTag.ENERGY_ELECTRICITY , 0, 8, 1, 1, 1, Materials.WroughtIron , ItemList.Hull_ULV , OrePrefixes.cableGt01 .get(Materials.Lead ), OrePrefixes.cableGt04 .get(Materials.Lead ), OrePrefixes.circuit .get(Materials.Primitive ), OrePrefixes.circuit .get(Materials.Basic )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 1, 32, 1, 1, 1, Materials.Steel , ItemList.Hull_LV , OrePrefixes.cableGt01 .get(Materials.Tin ), OrePrefixes.cableGt04 .get(Materials.Tin ), OrePrefixes.circuit .get(Materials.Basic ), OrePrefixes.circuit .get(Materials.Good )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 2, 128, 1, 1, 1, Materials.Aluminium , ItemList.Hull_MV , OrePrefixes.cableGt01 .get(Materials.AnyCopper ), OrePrefixes.cableGt04 .get(Materials.AnyCopper ), OrePrefixes.circuit .get(Materials.Good ), OrePrefixes.circuit .get(Materials.Advanced )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 3, 512, 1, 1, 1, Materials.StainlessSteel , ItemList.Hull_HV , OrePrefixes.cableGt01 .get(Materials.Gold ), OrePrefixes.cableGt04 .get(Materials.Gold ), OrePrefixes.circuit .get(Materials.Advanced ), OrePrefixes.circuit .get(Materials.Elite )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 4, 2048, 1, 1, 1, Materials.Titanium , ItemList.Hull_EV , OrePrefixes.cableGt01 .get(Materials.Aluminium ), OrePrefixes.cableGt04 .get(Materials.Aluminium ), OrePrefixes.circuit .get(Materials.Elite ), OrePrefixes.circuit .get(Materials.Master )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 5, 8192, 1, 1, 1, Materials.TungstenSteel , ItemList.Hull_IV , OrePrefixes.cableGt01 .get(Materials.Tungsten ), OrePrefixes.cableGt04 .get(Materials.Tungsten ), OrePrefixes.circuit .get(Materials.Master ), OrePrefixes.circuit .get(Materials.Ultimate )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 6, 32768, 1, 1, 1, Materials.Chrome , ItemList.Hull_LuV , OrePrefixes.cableGt01 .get(Materials.Osmium ), OrePrefixes.cableGt04 .get(Materials.Osmium ), OrePrefixes.circuit .get(Materials.Ultimate ), OrePrefixes.circuit .get(Materials.Ultimate )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 7, 131072, 1, 1, 1, Materials.Iridium , ItemList.Hull_ZPM , OrePrefixes.cableGt04 .get(Materials.Osmium ), OrePrefixes.wireGt16 .get(Materials.Osmium ), OrePrefixes.circuit .get(Materials.Ultimate ), OrePrefixes.circuit .get(Materials.Ultimate )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 8, 524288, 1, 1, 1, Materials.Osmium , ItemList.Hull_UV , OrePrefixes.wireGt16 .get(Materials.Osmium ), OrePrefixes.wireGt01 .get(Materials.Superconductor ), OrePrefixes.circuit .get(Materials.Ultimate ), OrePrefixes.circuit .get(Materials.Ultimate )),
+ new Tier(SubTag.ENERGY_ELECTRICITY , 9, Integer.MAX_VALUE, 1, 1, 1, Materials.Neutronium , ItemList.Hull_MAX , OrePrefixes.wireGt01 .get(Materials.Superconductor ), OrePrefixes.wireGt04 .get(Materials.Superconductor ), OrePrefixes.circuit .get(Materials.Ultimate ), OrePrefixes.circuit .get(Materials.Ultimate )),
+ }, ROTATIONAL = new Tier[] {
+ new Tier(SubTag.ENERGY_ROTATIONAL , 1, 32, 1, 1, 1, Materials.Wood , OrePrefixes.frameGt .get(Materials.Wood ), OrePrefixes.stick .get(Materials.Wood ), OrePrefixes.ingot .get(Materials.Wood ), OrePrefixes.gearGt .get(Materials.Wood ), OrePrefixes.gearGt .get(Materials.Stone )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 1, 32, 1, 2, 2, Materials.WoodSealed , OrePrefixes.frameGt .get(Materials.WoodSealed ), OrePrefixes.stick .get(Materials.WoodSealed ), OrePrefixes.ingot .get(Materials.WoodSealed ), OrePrefixes.gearGt .get(Materials.WoodSealed ), OrePrefixes.gearGt .get(Materials.Stone )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 2, 128, 1, 1, 1, Materials.Stone , OrePrefixes.frameGt .get(Materials.Stone ), OrePrefixes.stick .get(Materials.Stone ), OrePrefixes.ingot .get(Materials.Stone ), OrePrefixes.gearGt .get(Materials.Stone ), OrePrefixes.gearGt .get(Materials.Bronze )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 2, 128, 1, 2, 2, Materials.IronWood , OrePrefixes.frameGt .get(Materials.IronWood ), OrePrefixes.stick .get(Materials.IronWood ), OrePrefixes.ingot .get(Materials.IronWood ), OrePrefixes.gearGt .get(Materials.IronWood ), OrePrefixes.gearGt .get(Materials.Bronze )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 3, 512, 1, 1, 1, Materials.Bronze , OrePrefixes.frameGt .get(Materials.Bronze ), OrePrefixes.stick .get(Materials.Bronze ), OrePrefixes.ingot .get(Materials.Bronze ), OrePrefixes.gearGt .get(Materials.Bronze ), OrePrefixes.gearGt .get(Materials.Steel )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 3, 512, 1, 2, 2, Materials.Brass , OrePrefixes.frameGt .get(Materials.Brass ), OrePrefixes.stick .get(Materials.Brass ), OrePrefixes.ingot .get(Materials.Brass ), OrePrefixes.gearGt .get(Materials.Brass ), OrePrefixes.gearGt .get(Materials.Steel )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 4, 2048, 1, 1, 1, Materials.Steel , OrePrefixes.frameGt .get(Materials.Steel ), OrePrefixes.stick .get(Materials.Steel ), OrePrefixes.ingot .get(Materials.Steel ), OrePrefixes.gearGt .get(Materials.Steel ), OrePrefixes.gearGt .get(Materials.TungstenSteel )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 4, 2048, 1, 2, 2, Materials.Titanium , OrePrefixes.frameGt .get(Materials.Titanium ), OrePrefixes.stick .get(Materials.Titanium ), OrePrefixes.ingot .get(Materials.Titanium ), OrePrefixes.gearGt .get(Materials.Titanium ), OrePrefixes.gearGt .get(Materials.TungstenSteel )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 5, 8192, 1, 1, 1, Materials.TungstenSteel , OrePrefixes.frameGt .get(Materials.TungstenSteel ), OrePrefixes.stick .get(Materials.TungstenSteel ), OrePrefixes.ingot .get(Materials.TungstenSteel ), OrePrefixes.gearGt .get(Materials.TungstenSteel ), OrePrefixes.gearGt .get(Materials.Iridium )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 6, 32768, 1, 1, 1, Materials.Iridium , OrePrefixes.frameGt .get(Materials.Iridium ), OrePrefixes.stick .get(Materials.Iridium ), OrePrefixes.ingot .get(Materials.Iridium ), OrePrefixes.gearGt .get(Materials.Iridium ), OrePrefixes.gearGt .get(Materials.Neutronium )),
+ new Tier(SubTag.ENERGY_ROTATIONAL , 9, Integer.MAX_VALUE, 1, 1, 1, Materials.Neutronium , OrePrefixes.frameGt .get(Materials.Neutronium ), OrePrefixes.stick .get(Materials.Neutronium ), OrePrefixes.ingot .get(Materials.Neutronium ), OrePrefixes.gearGt .get(Materials.Neutronium ), OrePrefixes.gearGt .get(Materials.Neutronium )),
+ }, STEAM = new Tier[] {
+ new Tier(SubTag.ENERGY_STEAM , 1, 32, 1, 1, 1, Materials.Bronze , OrePrefixes.frameGt .get(Materials.Bronze ), OrePrefixes.pipeMedium .get(Materials.Bronze ), OrePrefixes.pipeHuge .get(Materials.Bronze ), OrePrefixes.pipeMedium .get(Materials.Bronze ), OrePrefixes.pipeLarge .get(Materials.Bronze )),
+ new Tier(SubTag.ENERGY_STEAM , 2, 128, 1, 1, 1, Materials.Steel , OrePrefixes.frameGt .get(Materials.Steel ), OrePrefixes.pipeMedium .get(Materials.Steel ), OrePrefixes.pipeHuge .get(Materials.Steel ), OrePrefixes.pipeMedium .get(Materials.Steel ), OrePrefixes.pipeLarge .get(Materials.Steel )),
+ new Tier(SubTag.ENERGY_STEAM , 3, 512, 1, 1, 1, Materials.Titanium , OrePrefixes.frameGt .get(Materials.Titanium ), OrePrefixes.pipeMedium .get(Materials.Titanium ), OrePrefixes.pipeHuge .get(Materials.Titanium ), OrePrefixes.pipeMedium .get(Materials.Titanium ), OrePrefixes.pipeLarge .get(Materials.Titanium )),
+ new Tier(SubTag.ENERGY_STEAM , 4, 2048, 1, 1, 1, Materials.TungstenSteel , OrePrefixes.frameGt .get(Materials.TungstenSteel ), OrePrefixes.pipeMedium .get(Materials.TungstenSteel ), OrePrefixes.pipeHuge .get(Materials.TungstenSteel ), OrePrefixes.pipeMedium .get(Materials.TungstenSteel ), OrePrefixes.pipeLarge .get(Materials.TungstenSteel )),
+ new Tier(SubTag.ENERGY_STEAM , 5, 8192, 1, 1, 1, Materials.Iridium , OrePrefixes.frameGt .get(Materials.Iridium ), OrePrefixes.pipeMedium .get(Materials.Iridium ), OrePrefixes.pipeHuge .get(Materials.Iridium ), OrePrefixes.pipeMedium .get(Materials.Iridium ), OrePrefixes.pipeLarge .get(Materials.Iridium )),
+ new Tier(SubTag.ENERGY_STEAM , 9, Integer.MAX_VALUE, 1, 1, 1, Materials.Neutronium , OrePrefixes.frameGt .get(Materials.Neutronium ), OrePrefixes.pipeMedium .get(Materials.Neutronium ), OrePrefixes.pipeHuge .get(Materials.Neutronium ), OrePrefixes.pipeMedium .get(Materials.Neutronium ), OrePrefixes.pipeLarge .get(Materials.Neutronium )),
+ };
+
+ private final SubTag mType;
+ private final byte mRank;
+ private final long mPrimaryValue, mSecondaryValue, mSpeedMultiplier, mEnergyCostMultiplier;
+ private final Materials mMaterial;
+
+ /** Used for Crafting Recipes */
+ public final Object mHullObject, mConductingObject, mLargerConductingObject, mManagingObject, mBetterManagingObject;
+
+ public Tier(SubTag aType, int aRank, long aPrimaryValue, long aSecondaryValue, long aSpeedMultiplier, long aEnergyCostMultiplier, Materials aMaterial, Object aHullObject, Object aConductingObject, Object aLargerConductingObject, Object aManagingObject, Object aBetterManagingObject) {
+ mType = aType;
+ mRank = (byte)aRank;
+ mPrimaryValue = aPrimaryValue;
+ mSecondaryValue = aSecondaryValue;
+ mSpeedMultiplier = aSpeedMultiplier;
+ mEnergyCostMultiplier = Math.max(mSpeedMultiplier, aEnergyCostMultiplier);
+ mMaterial = aMaterial;
+
+ mHullObject = aHullObject;
+ mConductingObject = aConductingObject;
+ mManagingObject = aManagingObject;
+ mBetterManagingObject = aBetterManagingObject;
+ mLargerConductingObject = aLargerConductingObject;
+ }
+
+ public byte getRank() {
+ return mRank;
+ }
+
+ public SubTag getEnergyType() {
+ return mType;
+ }
+
+ public long getEnergyPrimary() {
+ return mPrimaryValue;
+ }
+
+ public long getEnergySecondary() {
+ return mSecondaryValue;
+ }
+
+ public long getSpeedMultiplier() {
+ return mSpeedMultiplier;
+ }
+
+ public long getEnergyCostMultiplier() {
+ return mEnergyCostMultiplier;
+ }
+
+ public Materials getMaterial() {
+ return mMaterial;
+ }
+}
diff --git a/src/main/java/gregtech/api/enums/ToolDictNames.java b/src/main/java/gregtech/api/enums/ToolDictNames.java
new file mode 100644
index 0000000000..dfa4486f23
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/ToolDictNames.java
@@ -0,0 +1,32 @@
+package gregtech.api.enums;
+
+public enum ToolDictNames {
+ craftingToolSaw,
+ craftingToolHoe,
+ craftingToolAxe,
+ craftingToolFile,
+ craftingToolPlow,
+ craftingToolDrill,
+ craftingToolSword,
+ craftingToolScoop,
+ craftingToolKnife,
+ craftingToolBlade,
+ craftingToolMortar,
+ craftingToolShovel,
+ craftingToolWrench,
+ craftingToolPlunger,
+ craftingToolCrowbar,
+ craftingToolPickaxe,
+ craftingToolDrawplate,
+ craftingToolRollingPin,
+ craftingToolWireCutter,
+ craftingToolBranchCutter,
+ craftingToolHardHammer,
+ craftingToolSoftHammer,
+ craftingToolJackHammer,
+ craftingToolMiningDrill,
+ craftingToolForgeHammer,
+ craftingToolScrewdriver,
+ craftingToolSolderingIron,
+ craftingToolSolderingMetal;
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/events/BlockScanningEvent.java b/src/main/java/gregtech/api/events/BlockScanningEvent.java
new file mode 100644
index 0000000000..927919f5ba
--- /dev/null
+++ b/src/main/java/gregtech/api/events/BlockScanningEvent.java
@@ -0,0 +1,41 @@
+package gregtech.api.events;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+@cpw.mods.fml.common.eventhandler.Cancelable
+public class BlockScanningEvent extends net.minecraftforge.event.world.WorldEvent {
+
+ public final EntityPlayer mPlayer;
+ public final int mX, mY, mZ, mScanLevel;
+ public final ArrayList<String> mList;
+ public final byte mSide;
+ public final float mClickX, mClickY, mClickZ;
+ public final TileEntity mTileEntity;
+ public final Block mBlock;
+
+ /**
+ * used to determine the amount of Energy this Scan is costing.
+ */
+ public int mEUCost = 0;
+
+ public BlockScanningEvent(World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ, byte aSide, int aScanLevel, Block aBlock, TileEntity aTileEntity, ArrayList<String> aList, float aClickX, float aClickY, float aClickZ) {
+ super(aWorld);
+ mPlayer = aPlayer;
+ mScanLevel = aScanLevel;
+ mTileEntity = aTileEntity;
+ mBlock = aBlock;
+ mList = aList;
+ mSide = aSide;
+ mX = aX;
+ mY = aY;
+ mZ = aZ;
+ mClickX = aClickX;
+ mClickY = aClickY;
+ mClickZ = aClickZ;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_Container.java b/src/main/java/gregtech/api/gui/GT_Container.java
new file mode 100644
index 0000000000..dc5e59d7d4
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container.java
@@ -0,0 +1,564 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer;
+
+import java.util.List;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Main Container-Class, used for all my GUIs
+ */
+public class GT_Container extends Container {
+ public IGregTechTileEntity mTileEntity;
+ public InventoryPlayer mPlayerInventory;
+
+ public GT_Container (InventoryPlayer aPlayerInventory, IGregTechTileEntity aTileEntityInventory) {
+
+ mTileEntity = aTileEntityInventory;
+ mPlayerInventory = aPlayerInventory;
+ }
+
+ /**
+ * To add the Slots to your GUI
+ */
+ public void addSlots(InventoryPlayer aPlayerInventory) {
+ //
+ }
+
+ /**
+ * Amount of regular Slots in the GUI (so, non-HoloSlots)
+ */
+ public int getSlotCount() {
+ return 0;
+ }
+
+ /**
+ * Amount of ALL Slots in the GUI including HoloSlots and ArmorSlots, but excluding regular Player Slots
+ */
+ protected final int getAllSlotCount() {
+ if (inventorySlots != null) {
+ if (doesBindPlayerInventory()) return inventorySlots.size()-36;
+ return inventorySlots.size();
+ }
+ return getSlotCount();
+ }
+
+ /**
+ * Start-Index of the usable Slots (the first non-HoloSlot)
+ */
+ public int getSlotStartIndex() {
+ return 0;
+ }
+
+ public int getShiftClickStartIndex() {
+ return getSlotStartIndex();
+ }
+
+ /**
+ * Amount of Slots in the GUI the player can Shift-Click into. Uses also getSlotStartIndex
+ */
+ public int getShiftClickSlotCount() {
+ return 0;
+ }
+
+ /**
+ * Is Player-Inventory visible?
+ */
+ public boolean doesBindPlayerInventory() {
+ return true;
+ }
+
+ /**
+ * Override this Function with something like "return mTileEntity.isUseableByPlayer(aPlayer);"
+ */
+ @Override
+ public boolean canInteractWith(EntityPlayer aPlayer) {
+ return false;
+ }
+
+ protected void bindPlayerInventory(InventoryPlayer aInventoryPlayer) {
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 9; j++) {
+ addSlotToContainer(new Slot(aInventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
+ }
+ }
+
+ for (int i = 0; i < 9; i++) {
+ addSlotToContainer(new Slot(aInventoryPlayer, i, 8 + i * 18, 142));
+ }
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ mTileEntity.markDirty();
+
+ if (aSlotIndex >= 0) {
+ if (inventorySlots.get(aSlotIndex) == null || inventorySlots.get(aSlotIndex) instanceof GT_Slot_Holo) return null;
+ if (!(inventorySlots.get(aSlotIndex) instanceof GT_Slot_Armor)) if (aSlotIndex < getAllSlotCount()) if (aSlotIndex < getSlotStartIndex() || aSlotIndex >= getSlotStartIndex() + getSlotCount()) return null;
+ }
+
+ try {return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);} catch (Throwable e) {e.printStackTrace(GT_Log.err);}
+
+ ItemStack rStack = null;
+ InventoryPlayer aPlayerInventory = aPlayer.inventory;
+ Slot aSlot;
+ ItemStack tTempStack;
+ int tTempStackSize;
+ ItemStack aHoldStack;
+
+ if ((aShifthold == 0 || aShifthold == 1) && (aMouseclick == 0 || aMouseclick == 1)) {
+ if (aSlotIndex == -999) {
+ if (aPlayerInventory.getItemStack() != null && aSlotIndex == -999) {
+ if (aMouseclick == 0) {
+ aPlayer.dropPlayerItemWithRandomChoice(aPlayerInventory.getItemStack(), true);
+ aPlayerInventory.setItemStack(null);
+ }
+ if (aMouseclick == 1) {
+ aPlayer.dropPlayerItemWithRandomChoice(aPlayerInventory.getItemStack().splitStack(1), true);
+ if (aPlayerInventory.getItemStack().stackSize == 0) {
+ aPlayerInventory.setItemStack(null);
+ }
+ }
+ }
+ } else if (aShifthold == 1) {
+ aSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (aSlot != null && aSlot.canTakeStack(aPlayer)) {
+ tTempStack = this.transferStackInSlot(aPlayer, aSlotIndex);
+ if (tTempStack != null) {
+ rStack = GT_Utility.copy(tTempStack);
+ if (aSlot.getStack() != null && aSlot.getStack().getItem() == tTempStack.getItem()) {
+ slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ }
+ }
+ } else {
+ if (aSlotIndex < 0) {
+ return null;
+ }
+ aSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (aSlot != null) {
+ tTempStack = aSlot.getStack();
+ ItemStack var13 = aPlayerInventory.getItemStack();
+ if (tTempStack != null) {
+ rStack = GT_Utility.copy(tTempStack);
+ }
+ if (tTempStack == null) {
+ if (var13 != null && aSlot.isItemValid(var13)) {
+ tTempStackSize = aMouseclick == 0 ? var13.stackSize : 1;
+ if (tTempStackSize > aSlot.getSlotStackLimit()) {
+ tTempStackSize = aSlot.getSlotStackLimit();
+ }
+ aSlot.putStack(var13.splitStack(tTempStackSize));
+
+ if (var13.stackSize == 0) {
+ aPlayerInventory.setItemStack((ItemStack)null);
+ }
+ }
+ } else if (aSlot.canTakeStack(aPlayer)) {
+ if (var13 == null) {
+ tTempStackSize = aMouseclick == 0 ? tTempStack.stackSize : (tTempStack.stackSize + 1) / 2;
+ aHoldStack = aSlot.decrStackSize(tTempStackSize);
+ aPlayerInventory.setItemStack(aHoldStack);
+ if (tTempStack.stackSize == 0) {
+ aSlot.putStack((ItemStack)null);
+ }
+ aSlot.onPickupFromSlot(aPlayer, aPlayerInventory.getItemStack());
+ } else if (aSlot.isItemValid(var13)) {
+ if (tTempStack.getItem() == var13.getItem() && tTempStack.getItemDamage() == var13.getItemDamage() && ItemStack.areItemStackTagsEqual(tTempStack, var13)) {
+ tTempStackSize = aMouseclick == 0 ? var13.stackSize : 1;
+ if (tTempStackSize > aSlot.getSlotStackLimit() - tTempStack.stackSize) {
+ tTempStackSize = aSlot.getSlotStackLimit() - tTempStack.stackSize;
+ }
+ if (tTempStackSize > var13.getMaxStackSize() - tTempStack.stackSize) {
+ tTempStackSize = var13.getMaxStackSize() - tTempStack.stackSize;
+ }
+ var13.splitStack(tTempStackSize);
+ if (var13.stackSize == 0) {
+ aPlayerInventory.setItemStack((ItemStack)null);
+ }
+ tTempStack.stackSize += tTempStackSize;
+ } else if (var13.stackSize <= aSlot.getSlotStackLimit()) {
+ aSlot.putStack(var13);
+ aPlayerInventory.setItemStack(tTempStack);
+ }
+ } else if (tTempStack.getItem() == var13.getItem() && var13.getMaxStackSize() > 1 && (!tTempStack.getHasSubtypes() || tTempStack.getItemDamage() == var13.getItemDamage()) && ItemStack.areItemStackTagsEqual(tTempStack, var13)) {
+ tTempStackSize = tTempStack.stackSize;
+
+ if (tTempStackSize > 0 && tTempStackSize + var13.stackSize <= var13.getMaxStackSize()) {
+ var13.stackSize += tTempStackSize;
+ tTempStack = aSlot.decrStackSize(tTempStackSize);
+
+ if (tTempStack.stackSize == 0) {
+ aSlot.putStack((ItemStack)null);
+ }
+
+ aSlot.onPickupFromSlot(aPlayer, aPlayerInventory.getItemStack());
+ }
+ }
+ }
+ aSlot.onSlotChanged();
+ }
+ }
+ } else if (aShifthold == 2 && aMouseclick >= 0 && aMouseclick < 9) {
+ aSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+
+ if (aSlot.canTakeStack(aPlayer)) {
+ tTempStack = aPlayerInventory.getStackInSlot(aMouseclick);
+ boolean var9 = tTempStack == null || aSlot.inventory == aPlayerInventory && aSlot.isItemValid(tTempStack);
+ tTempStackSize = -1;
+
+ if (!var9) {
+ tTempStackSize = aPlayerInventory.getFirstEmptyStack();
+ var9 |= tTempStackSize > -1;
+ }
+
+ if (aSlot.getHasStack() && var9) {
+ aHoldStack = aSlot.getStack();
+ aPlayerInventory.setInventorySlotContents(aMouseclick, aHoldStack);
+
+ if ((aSlot.inventory != aPlayerInventory || !aSlot.isItemValid(tTempStack)) && tTempStack != null) {
+ if (tTempStackSize > -1) {
+ aPlayerInventory.addItemStackToInventory(tTempStack);
+ aSlot.decrStackSize(aHoldStack.stackSize);
+ aSlot.putStack((ItemStack)null);
+ aSlot.onPickupFromSlot(aPlayer, aHoldStack);
+ }
+ } else {
+ aSlot.decrStackSize(aHoldStack.stackSize);
+ aSlot.putStack(tTempStack);
+ aSlot.onPickupFromSlot(aPlayer, aHoldStack);
+ }
+ } else if (!aSlot.getHasStack() && tTempStack != null && aSlot.isItemValid(tTempStack)) {
+ aPlayerInventory.setInventorySlotContents(aMouseclick, (ItemStack)null);
+ aSlot.putStack(tTempStack);
+ }
+ }
+ } else if (aShifthold == 3 && aPlayer.capabilities.isCreativeMode && aPlayerInventory.getItemStack() == null && aSlotIndex >= 0) {
+ aSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (aSlot != null && aSlot.getHasStack()) {
+ tTempStack = GT_Utility.copy(aSlot.getStack());
+ tTempStack.stackSize = tTempStack.getMaxStackSize();
+ aPlayerInventory.setItemStack(tTempStack);
+ }
+ }
+ return rStack;
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) {
+ ItemStack stack = null;
+ Slot slotObject = (Slot)inventorySlots.get(aSlotIndex);
+
+ mTileEntity.markDirty();
+
+ //null checks and checks if the item can be stacked (maxStackSize > 1)
+ if (getSlotCount() > 0 && slotObject != null && slotObject.getHasStack() && !(slotObject instanceof GT_Slot_Holo)) {
+ ItemStack stackInSlot = slotObject.getStack();
+ stack = GT_Utility.copy(stackInSlot);
+
+ //TileEntity -> Player
+ if (aSlotIndex < getAllSlotCount()) {
+ if (doesBindPlayerInventory())
+ if (!mergeItemStack(stackInSlot, getAllSlotCount(), getAllSlotCount()+36, true)) {
+ return null;
+ }
+ //Player -> TileEntity
+ } else if (!mergeItemStack(stackInSlot, getShiftClickStartIndex(), getShiftClickStartIndex()+getShiftClickSlotCount(), false)) {
+ return null;
+ }
+
+ if (stackInSlot.stackSize == 0) {
+ slotObject.putStack(null);
+ } else {
+ slotObject.onSlotChanged();
+ }
+ }
+ return stack;
+ }
+
+ /**
+ * merges provided ItemStack with the first avaliable one in the container/player inventory
+ */
+ @Override
+ protected boolean mergeItemStack(ItemStack aStack, int aStartIndex, int aSlotCount, boolean par4) {
+ boolean var5 = false;
+ int var6 = aStartIndex;
+
+ mTileEntity.markDirty();
+
+ if (par4) {
+ var6 = aSlotCount - 1;
+ }
+
+ Slot var7;
+ ItemStack var8;
+
+ if (aStack.isStackable()) {
+ while (aStack.stackSize > 0 && (!par4 && var6 < aSlotCount || par4 && var6 >= aStartIndex)) {
+ var7 = (Slot)this.inventorySlots.get(var6);
+ var8 = var7.getStack();
+
+ if (!(var7 instanceof GT_Slot_Holo) && !(var7 instanceof GT_Slot_Output) && var8 != null && var8.getItem() == aStack.getItem() && (!aStack.getHasSubtypes() || aStack.getItemDamage() == var8.getItemDamage()) && ItemStack.areItemStackTagsEqual(aStack, var8)) {
+ int var9 = var8.stackSize + aStack.stackSize;
+
+ if (var9 <= aStack.getMaxStackSize()) {
+ aStack.stackSize = 0;
+ var8.stackSize = var9;
+ var7.onSlotChanged();
+ var5 = true;
+ } else if (var8.stackSize < aStack.getMaxStackSize()) {
+ aStack.stackSize -= aStack.getMaxStackSize() - var8.stackSize;
+ var8.stackSize = aStack.getMaxStackSize();
+ var7.onSlotChanged();
+ var5 = true;
+ }
+ }
+
+ if (par4) {
+ --var6;
+ } else {
+ ++var6;
+ }
+ }
+ }
+
+ if (aStack.stackSize > 0)
+ {
+ if (par4)
+ {
+ var6 = aSlotCount - 1;
+ }
+ else
+ {
+ var6 = aStartIndex;
+ }
+
+ while (!par4 && var6 < aSlotCount || par4 && var6 >= aStartIndex)
+ {
+ var7 = (Slot)this.inventorySlots.get(var6);
+ var8 = var7.getStack();
+
+ if (var8 == null)
+ {
+ var7.putStack(GT_Utility.copy(aStack));
+ var7.onSlotChanged();
+ aStack.stackSize = 0;
+ var5 = true;
+ break;
+ }
+
+ if (par4)
+ {
+ --var6;
+ }
+ else
+ {
+ ++var6;
+ }
+ }
+ }
+
+ return var5;
+ }
+
+ @Override
+ protected Slot addSlotToContainer(Slot par1Slot) {
+ try {
+ return super.addSlotToContainer(par1Slot);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return par1Slot;
+ }
+
+ @Override
+ public void addCraftingToCrafters(ICrafting par1ICrafting) {
+ try {
+ super.addCraftingToCrafters(par1ICrafting);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public List getInventory() {
+ try {
+ return super.getInventory();
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ @Override
+ public void removeCraftingFromCrafters(ICrafting par1ICrafting) {
+ try {
+ super.removeCraftingFromCrafters(par1ICrafting);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ try {
+ super.detectAndSendChanges();
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public boolean enchantItem(EntityPlayer par1EntityPlayer, int par2) {
+ try {
+ return super.enchantItem(par1EntityPlayer, par2);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public Slot getSlotFromInventory(IInventory par1IInventory, int par2) {
+ try {
+ return super.getSlotFromInventory(par1IInventory, par2);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ @Override
+ public Slot getSlot(int par1) {
+ try {
+ if (this.inventorySlots.size() > par1) return super.getSlot(par1);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ @Override
+ public boolean func_94530_a(ItemStack par1ItemStack, Slot par2Slot) {
+ try {
+ return super.func_94530_a(par1ItemStack, par2Slot);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return true;
+ }
+
+ @Override
+ protected void retrySlotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer) {
+ try {
+ super.retrySlotClick(par1, par2, par3, par4EntityPlayer);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void onContainerClosed(EntityPlayer par1EntityPlayer) {
+ try {
+ super.onContainerClosed(par1EntityPlayer);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void onCraftMatrixChanged(IInventory par1IInventory) {
+ try {
+ super.onCraftMatrixChanged(par1IInventory);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void putStackInSlot(int par1, ItemStack par2ItemStack) {
+ try {
+ super.putStackInSlot(par1, par2ItemStack);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void putStacksInSlots(ItemStack[] par1ArrayOfItemStack) {
+ try {
+ super.putStacksInSlots(par1ArrayOfItemStack);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void updateProgressBar(int par1, int par2) {
+ try {
+ super.updateProgressBar(par1, par2);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public short getNextTransactionID(InventoryPlayer par1InventoryPlayer) {
+ try {
+ return super.getNextTransactionID(par1InventoryPlayer);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean isPlayerNotUsingContainer(EntityPlayer par1EntityPlayer) {
+ try {
+ return super.isPlayerNotUsingContainer(par1EntityPlayer);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return true;
+ }
+
+ @Override
+ public void setPlayerIsPresent(EntityPlayer par1EntityPlayer, boolean par2) {
+ try {
+ super.setPlayerIsPresent(par1EntityPlayer, par2);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ protected void func_94533_d() {
+ try {
+ super.func_94533_d();
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public boolean canDragIntoSlot(Slot par1Slot) {
+ try {
+ return super.canDragIntoSlot(par1Slot);
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java
new file mode 100644
index 0000000000..d4fc27aaf9
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java
@@ -0,0 +1,152 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+
+import java.util.Iterator;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The Container I use for all my MetaTileEntities
+ */
+public class GT_ContainerMetaTile_Machine extends GT_Container {
+
+ public GT_ContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+
+ mTileEntity = aTileEntity;
+
+ if (mTileEntity != null && mTileEntity.getMetaTileEntity() != null) {
+ addSlots(aInventoryPlayer);
+ if (doesBindPlayerInventory()) bindPlayerInventory(aInventoryPlayer);
+ detectAndSendChanges();
+ } else {
+ aInventoryPlayer.player.openContainer = aInventoryPlayer.player.inventoryContainer;
+ }
+ }
+ public GT_ContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, boolean doesBindInventory){
+ super(aInventoryPlayer, aTileEntity);
+ mTileEntity = aTileEntity;
+
+ if (mTileEntity != null && mTileEntity.getMetaTileEntity() != null) {
+ addSlots(aInventoryPlayer);
+ if (doesBindPlayerInventory()&&doesBindInventory) bindPlayerInventory(aInventoryPlayer);
+ detectAndSendChanges();
+ } else {
+ aInventoryPlayer.player.openContainer = aInventoryPlayer.player.inventoryContainer;
+ }
+ }
+
+
+ public int mActive = 0, mMaxProgressTime = 0, mProgressTime = 0, mEnergy = 0, mSteam = 0, mSteamStorage = 0, mStorage = 0, mOutput = 0, mInput = 0, mID = 0, mDisplayErrorCode = 0;
+ private int oActive = 0, oMaxProgressTime = 0, oProgressTime = 0, oEnergy = 0, oSteam = 0, oSteamStorage = 0, oStorage = 0, oOutput = 0, oInput = 0, oID = 0, oDisplayErrorCode = 0, mTimer = 0;
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
+ mStorage = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getEUCapacity());
+ mEnergy = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getStoredEU());
+ mSteamStorage = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getSteamCapacity());
+ mSteam = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getStoredSteam());
+ mOutput = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getOutputVoltage());
+ mInput = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getInputVoltage());
+ mDisplayErrorCode = mTileEntity.getErrorDisplayID();
+ mProgressTime = mTileEntity.getProgress();
+ mMaxProgressTime = mTileEntity.getMaxProgress();
+ mActive = mTileEntity.isActive()?1:0;
+ mTimer++;
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting)var2.next();
+ if (mTimer % 500 == 10 || oEnergy != mEnergy) {
+ var1.sendProgressBarUpdate(this, 0, mEnergy & 65535);
+ var1.sendProgressBarUpdate(this, 1, mEnergy >>> 16);
+ }
+ if (mTimer % 500 == 10 || oStorage != mStorage) {
+ var1.sendProgressBarUpdate(this, 2, mStorage & 65535);
+ var1.sendProgressBarUpdate(this, 3, mStorage >>> 16);
+ }
+ if (mTimer % 500 == 10 || oOutput != mOutput) {
+ var1.sendProgressBarUpdate(this, 4, mOutput);
+ }
+ if (mTimer % 500 == 10 || oInput != mInput) {
+ var1.sendProgressBarUpdate(this, 5, mInput);
+ }
+ if (mTimer % 500 == 10 || oDisplayErrorCode != mDisplayErrorCode) {
+ var1.sendProgressBarUpdate(this, 6, mDisplayErrorCode);
+ }
+ if (mTimer % 500 == 10 || oProgressTime != mProgressTime) {
+ var1.sendProgressBarUpdate(this, 11, mProgressTime & 65535);
+ var1.sendProgressBarUpdate(this, 12, mProgressTime >>> 16);
+ }
+ if (mTimer % 500 == 10 || oMaxProgressTime != mMaxProgressTime) {
+ var1.sendProgressBarUpdate(this, 13, mMaxProgressTime & 65535);
+ var1.sendProgressBarUpdate(this, 14, mMaxProgressTime >>> 16);
+ }
+ if (mTimer % 500 == 10 || oID != mID) {
+ var1.sendProgressBarUpdate(this, 15, mID);
+ }
+ if (mTimer % 500 == 10 || oActive != mActive) {
+ var1.sendProgressBarUpdate(this, 16, mActive);
+ }
+ if (mTimer % 500 == 10 || oSteam != mSteam) {
+ var1.sendProgressBarUpdate(this, 17, mSteam & 65535);
+ var1.sendProgressBarUpdate(this, 18, mSteam >>> 16);
+ }
+ if (mTimer % 500 == 10 || oSteamStorage != mSteamStorage) {
+ var1.sendProgressBarUpdate(this, 19, mSteamStorage & 65535);
+ var1.sendProgressBarUpdate(this, 20, mSteamStorage >>> 16);
+ }
+ }
+
+ oID = mID;
+ oSteam = mSteam;
+ oInput = mInput;
+ oActive = mActive;
+ oOutput = mOutput;
+ oEnergy = mEnergy;
+ oStorage = mStorage;
+ oSteamStorage = mSteamStorage;
+ oProgressTime = mProgressTime;
+ oMaxProgressTime = mMaxProgressTime;
+ oDisplayErrorCode = mDisplayErrorCode;
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 0: mEnergy = mEnergy & -65536 | par2; break;
+ case 1: mEnergy = mEnergy & 65535 | par2 << 16; break;
+ case 2: mStorage = mStorage & -65536 | par2; break;
+ case 3: mStorage = mStorage & 65535 | par2 << 16; break;
+ case 4: mOutput = par2; break;
+ case 5: mInput = par2; break;
+ case 6: mDisplayErrorCode = par2; break;
+ case 11: mProgressTime = mProgressTime & -65536 | par2; break;
+ case 12: mProgressTime = mProgressTime & 65535 | par2 << 16; break;
+ case 13: mMaxProgressTime = mMaxProgressTime & -65536 | par2; break;
+ case 14: mMaxProgressTime = mMaxProgressTime & 65535 | par2 << 16; break;
+ case 15: mID = par2; break;
+ case 16: mActive = par2; break;
+ case 17: mSteam = mSteam & -65536 | par2; break;
+ case 18: mSteam = mSteam & 65535 | par2 << 16; break;
+ case 19: mSteamStorage = mSteamStorage & -65536 | par2; break;
+ case 20: mSteamStorage = mSteamStorage & 65535 | par2 << 16; break;
+ }
+ }
+
+ @Override
+ public boolean canInteractWith(EntityPlayer player) {
+ return mTileEntity.isUseableByPlayer(player);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_Container_1by1.java b/src/main/java/gregtech/api/gui/GT_Container_1by1.java
new file mode 100644
index 0000000000..3607d81e38
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_1by1.java
@@ -0,0 +1,27 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+public class GT_Container_1by1 extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_1by1(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 80, 35));
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 1;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_2by2.java b/src/main/java/gregtech/api/gui/GT_Container_2by2.java
new file mode 100644
index 0000000000..2d4bdcd3ae
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_2by2.java
@@ -0,0 +1,30 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+public class GT_Container_2by2 extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_2by2(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 71, 26));
+ addSlotToContainer(new Slot(mTileEntity, 1, 89, 26));
+ addSlotToContainer(new Slot(mTileEntity, 2, 71, 44));
+ addSlotToContainer(new Slot(mTileEntity, 3, 89, 44));
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 4;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 4;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_3by3.java b/src/main/java/gregtech/api/gui/GT_Container_3by3.java
new file mode 100644
index 0000000000..9206116de1
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_3by3.java
@@ -0,0 +1,35 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+public class GT_Container_3by3 extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_3by3(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 62, 17));
+ addSlotToContainer(new Slot(mTileEntity, 1, 80, 17));
+ addSlotToContainer(new Slot(mTileEntity, 2, 98, 17));
+ addSlotToContainer(new Slot(mTileEntity, 3, 62, 35));
+ addSlotToContainer(new Slot(mTileEntity, 4, 80, 35));
+ addSlotToContainer(new Slot(mTileEntity, 5, 98, 35));
+ addSlotToContainer(new Slot(mTileEntity, 6, 62, 53));
+ addSlotToContainer(new Slot(mTileEntity, 7, 80, 53));
+ addSlotToContainer(new Slot(mTileEntity, 8, 98, 53));
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 9;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 9;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_4by4.java b/src/main/java/gregtech/api/gui/GT_Container_4by4.java
new file mode 100644
index 0000000000..eb6039cd1c
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_4by4.java
@@ -0,0 +1,42 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+public class GT_Container_4by4 extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_4by4(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 53, 8));
+ addSlotToContainer(new Slot(mTileEntity, 1, 71, 8));
+ addSlotToContainer(new Slot(mTileEntity, 2, 89, 8));
+ addSlotToContainer(new Slot(mTileEntity, 3, 107, 8));
+ addSlotToContainer(new Slot(mTileEntity, 4, 53, 26));
+ addSlotToContainer(new Slot(mTileEntity, 5, 71, 26));
+ addSlotToContainer(new Slot(mTileEntity, 6, 89, 26));
+ addSlotToContainer(new Slot(mTileEntity, 7, 107, 26));
+ addSlotToContainer(new Slot(mTileEntity, 8, 53, 44));
+ addSlotToContainer(new Slot(mTileEntity, 9, 71, 44));
+ addSlotToContainer(new Slot(mTileEntity,10, 89, 44));
+ addSlotToContainer(new Slot(mTileEntity,11, 107, 44));
+ addSlotToContainer(new Slot(mTileEntity,12, 53, 62));
+ addSlotToContainer(new Slot(mTileEntity,13, 71, 62));
+ addSlotToContainer(new Slot(mTileEntity,14, 89, 62));
+ addSlotToContainer(new Slot(mTileEntity,15, 107, 62));
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 16;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 16;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
new file mode 100644
index 0000000000..410d4c9801
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
@@ -0,0 +1,249 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+
+import java.util.Iterator;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The Container I use for all my Basic Machines
+ */
+public class GT_Container_BasicMachine extends GT_Container_BasicTank {
+
+ public GT_Container_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 107, 63));
+
+ int tStartIndex = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).getInputSlot();
+
+ switch (((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mInputSlotCount) {
+ case 0:
+ break;
+ case 1:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ break;
+ case 2:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ break;
+ case 3:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ break;
+ case 4:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34));
+ break;
+ case 5:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34));
+ break;
+ case 6:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 34));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34));
+ break;
+ case 7:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43));
+ break;
+ case 8:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 43));
+ break;
+ default:
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 43));
+ addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 43));
+ break;
+ }
+
+ tStartIndex = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).getOutputSlot();
+
+ switch (((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mOutputItems.length) {
+ case 0:
+ break;
+ case 1:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ break;
+ case 2:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25));
+ break;
+ case 3:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25));
+ break;
+ case 4:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34));
+ break;
+ case 5:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34));
+ break;
+ case 6:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 16));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 34));
+ break;
+ case 7:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43));
+ break;
+ case 8:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 43));
+ break;
+ default:
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 43));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 43));
+ break;
+ }
+
+ addSlotToContainer(new Slot(mTileEntity, 1, 80, 63));
+ addSlotToContainer(new Slot(mTileEntity, 3, 125, 63));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, tStartIndex++, 53, 63));
+ }
+
+ public boolean mFluidTransfer = false, mItemTransfer = false, mStuttering = false;
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ switch(aSlotIndex) {
+ case 0:
+ if (mTileEntity.getMetaTileEntity() == null) return null;
+ ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer;
+ return null;
+ case 1:
+ if (mTileEntity.getMetaTileEntity() == null) return null;
+ ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer;
+ return null;
+ default:
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
+
+ mFluidTransfer = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer;
+ mItemTransfer = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer;
+ mStuttering = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mStuttering;
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting)var2.next();
+ var1.sendProgressBarUpdate(this, 102, mFluidTransfer?1:0);
+ var1.sendProgressBarUpdate(this, 103, mItemTransfer?1:0);
+ var1.sendProgressBarUpdate(this, 104, mStuttering?1:0);
+ }
+ }
+
+ @Override
+ public void addCraftingToCrafters(ICrafting par1ICrafting) {
+ super.addCraftingToCrafters(par1ICrafting);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 102: mFluidTransfer = (par2 != 0); break;
+ case 103: mItemTransfer = (par2 != 0); break;
+ case 104: mStuttering = (par2 != 0); break;
+ }
+ }
+
+ @Override
+ public int getSlotStartIndex() {
+ return 3;
+ }
+
+ @Override
+ public int getShiftClickStartIndex() {
+ return 3;
+ }
+
+ @Override
+ public int getSlotCount() {
+ return getShiftClickSlotCount() + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mOutputItems.length + 2;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mInputSlotCount;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java
new file mode 100644
index 0000000000..7fe15f7474
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java
@@ -0,0 +1,70 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
+
+import java.util.Iterator;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The Container I use for all my Basic Tanks
+ */
+public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_BasicTank(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42));
+ }
+
+ public int mContent = 0;
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
+ if (((GT_MetaTileEntity_BasicTank)mTileEntity.getMetaTileEntity()).mFluid != null)
+ mContent = ((GT_MetaTileEntity_BasicTank)mTileEntity.getMetaTileEntity()).mFluid.amount;
+ else
+ mContent = 0;
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting)var2.next();
+ var1.sendProgressBarUpdate(this, 100, mContent & 65535);
+ var1.sendProgressBarUpdate(this, 101, mContent >>> 16);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 100: mContent = mContent & -65536 | par2; break;
+ case 101: mContent = mContent & 65535 | par2 << 16; break;
+ }
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 2;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java b/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java
new file mode 100644
index 0000000000..3f9846bb99
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java
@@ -0,0 +1,30 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_MaintenanceHatch extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_MaintenanceHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 80, 35, false, false, 1));
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ if (aSlotIndex != 0) return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ ItemStack tStack = aPlayer.inventory.getItemStack();
+ if (tStack != null) {
+ ((GT_MetaTileEntity_Hatch_Maintenance)mTileEntity.getMetaTileEntity()).onToolClick(tStack, aPlayer);
+ if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null);
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java b/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java
new file mode 100644
index 0000000000..289b783e25
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java
@@ -0,0 +1,35 @@
+package gregtech.api.gui;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The Container I use for all my Basic Machines
+ */
+public class GT_Container_MultiMachine extends GT_ContainerMetaTile_Machine {
+ public GT_Container_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public GT_Container_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, boolean bindInventory) {
+ super(aInventoryPlayer, aTileEntity, bindInventory);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 1, 152, 5));
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 1;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer.java b/src/main/java/gregtech/api/gui/GT_GUIContainer.java
new file mode 100644
index 0000000000..a92ca35666
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer.java
@@ -0,0 +1,67 @@
+package gregtech.api.gui;
+
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.inventory.Container;
+import net.minecraft.util.ResourceLocation;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Main GUI-Container-Class which basically contains the Code needed to prevent crashes from improperly Coded Items.
+ */
+public class GT_GUIContainer extends GuiContainer {
+
+ public boolean mCrashed = false;
+
+ public ResourceLocation mGUIbackground;
+
+ public String mGUIbackgroundPath;
+
+ public int getLeft() {return guiLeft;}
+ public int getTop() {return guiTop;}
+
+ public GT_GUIContainer(Container aContainer, String aGUIbackground) {
+ super(aContainer);
+ mGUIbackground = new ResourceLocation(mGUIbackgroundPath = aGUIbackground);
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ //
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ mc.renderEngine.bindTexture(mGUIbackground);
+ }
+
+ @Override
+ public void drawScreen(int par1, int par2, float par3) {
+ try {
+ super.drawScreen(par1, par2, par3);
+ } catch(Throwable e) {
+ try {
+ Tessellator.instance.draw();
+ } catch(Throwable f) {
+ //
+ }
+ }
+ }
+ /*
+ @Override
+ protected void drawSlotInventory(Slot par1Slot) {
+ try {
+ super.drawSlotInventory(par1Slot);
+ } catch(Throwable e) {
+ try {
+ Tessellator.instance.draw();
+ } catch(Throwable f) {}
+ if (!mCrashed) {
+ GT_Log.out.println("Clientside Slot drawing Crash prevented. Seems one Itemstack causes Problems with negative Damage Values or the Wildcard Damage Value. This is absolutely NOT a Bug of the GregTech-Addon, so don't even think about reporting it to me, it's a Bug of the Mod, which belongs to the almost-crash-causing Item, so bug that Mods Author and not me! Did you hear it? NOT ME!!!");
+ e.printStackTrace();
+ mCrashed = true;
+ }
+ }
+ }*/
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java
new file mode 100644
index 0000000000..0bfc774bfb
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java
@@ -0,0 +1,39 @@
+package gregtech.api.gui;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemDye;
+
+import org.lwjgl.opengl.GL11;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The GUI-Container I use for all my MetaTileEntities
+ */
+public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer {
+
+ public final GT_ContainerMetaTile_Machine mContainer;
+
+ public GT_GUIContainerMetaTile_Machine(GT_ContainerMetaTile_Machine aContainer, String aGUIbackground) {
+ super(aContainer, aGUIbackground);
+ mContainer = aContainer;
+ }
+
+ public GT_GUIContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aGUIbackground) {
+ this(new GT_ContainerMetaTile_Machine(aInventoryPlayer, aTileEntity), aGUIbackground);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ if (GregTech_API.sColoredGUI && mContainer != null && mContainer.mTileEntity != null) {
+ int tColor = mContainer.mTileEntity.getColorization() & 15;
+ if (tColor >= 0 && tColor < ItemDye.field_150922_c.length) {
+ tColor = ItemDye.field_150922_c[tColor];
+ GL11.glColor4f(((tColor >> 16) & 255) / 255.0F, ((tColor >> 8) & 255) / 255.0F, (tColor & 255) / 255.0F, 1.0F);
+ } else GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ } else GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java
new file mode 100644
index 0000000000..2d4176ee84
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java
@@ -0,0 +1,28 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_1by1 extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_1by1(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_1by1(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "1by1.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, 4, 4210752);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java
new file mode 100644
index 0000000000..3ad77d8a2b
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java
@@ -0,0 +1,28 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_2by2 extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_2by2(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_2by2(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "2by2.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, 4, 4210752);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java
new file mode 100644
index 0000000000..4eb892d4ba
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java
@@ -0,0 +1,28 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_3by3 extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_3by3(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_3by3(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "3by3.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, 4, 4210752);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java
new file mode 100644
index 0000000000..e01e5f81d9
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java
@@ -0,0 +1,28 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_4by4 extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_4by4(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_4by4(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "4by4.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, 4, 4210752);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java
new file mode 100644
index 0000000000..7898f3b635
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java
@@ -0,0 +1,86 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The GUI-Container I use for all my Basic Machines
+ *
+ * As the NEI-RecipeTransferRect Handler can't handle one GUI-Class for all GUIs I needed to produce some dummy-classes which extend this class
+ */
+public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machine {
+
+ public final String mName, mNEI;
+ public final byte mProgressBarDirection, mProgressBarAmount;
+
+ public GT_GUIContainer_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile, String aNEI) {
+ this(aInventoryPlayer, aTileEntity, aName, aTextureFile, aNEI, (byte)0, (byte)1);
+ }
+
+ public GT_GUIContainer_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile, String aNEI, byte aProgressBarDirection, byte aProgressBarAmount) {
+ super(new GT_Container_BasicMachine(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "basicmachines/" + aTextureFile);
+ mProgressBarDirection = aProgressBarDirection;
+ mProgressBarAmount = (byte)Math.max(1, aProgressBarAmount);
+ mName = aName;
+ mNEI = aNEI;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, 4, 4210752);
+ drawTooltip(par1, par2);
+ }
+
+ private void drawTooltip(int x2, int y2){
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ int x = x2 - xStart;
+ int y = y2 - yStart +5;
+ List<String> list = new ArrayList<String>();
+ if (y >= 67 && y <= 84) {
+ if (x >= 7 && x <= 24){
+ list.add("Fluid Auto-Output");
+ }
+ if (x >= 25 && x <= 42){
+ list.add("Item Auto-Output");
+ }
+ }
+ if (!list.isEmpty())
+ drawHoveringText(list, x, y, fontRendererObj);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ if (mContainer != null) {
+ if (((GT_Container_BasicMachine)mContainer).mFluidTransfer) drawTexturedModalRect(x + 7, y + 62, 176, 18, 18, 18);
+ if (((GT_Container_BasicMachine)mContainer).mItemTransfer) drawTexturedModalRect(x + 25, y + 62, 176, 36, 18, 18);
+ if (((GT_Container_BasicMachine)mContainer).mStuttering) drawTexturedModalRect(x + 79, y + 44, 176, 54, 18, 18);
+
+ if (mContainer.mMaxProgressTime > 0) {
+ int tSize = (mProgressBarDirection < 2 ? 20 : 18), tProgress = Math.max(1, Math.min(tSize * mProgressBarAmount, (mContainer.mProgressTime>0?1:0) + (mContainer.mProgressTime * tSize * mProgressBarAmount) / mContainer.mMaxProgressTime)) % (tSize+1);
+
+ switch (mProgressBarDirection) { // yes, my OCD was mad at me before I did the Tabs.
+ case 0: drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , tProgress , 18 ); break;
+ case 1: drawTexturedModalRect(x + 78 + 20 - tProgress , y + 24 , 176 + 20 - tProgress , 0 , tProgress , 18 ); break;
+ case 2: drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , 20 , tProgress ); break;
+ case 3: drawTexturedModalRect(x + 78 , y + 24 + 18 - tProgress , 176 , 18 - tProgress , 20 , tProgress ); break;
+ case 4: tProgress = 20 - tProgress; drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , tProgress , 18 ); break;
+ case 5: tProgress = 20 - tProgress; drawTexturedModalRect(x + 78 + 20 - tProgress , y + 24 , 176 + 20 - tProgress , 0 , tProgress , 18 ); break;
+ case 6: tProgress = 18 - tProgress; drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , 20 , tProgress ); break;
+ case 7: tProgress = 18 - tProgress; drawTexturedModalRect(x + 78 , y + 24 + 18 - tProgress , 176 , 18 - tProgress , 20 , tProgress ); break;
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java
new file mode 100644
index 0000000000..ae35067e42
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java
@@ -0,0 +1,35 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.util.StatCollector;
+
+public class GT_GUIContainer_BasicTank extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_BasicTank(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_BasicTank(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "BasicTank.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752);
+ fontRendererObj.drawString(mName, 8, 6, 4210752);
+ if (mContainer != null) {
+ fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255);
+ fontRendererObj.drawString(GT_Utility.parseNumberToString(((GT_Container_BasicTank)mContainer).mContent), 10, 30, 16448255);
+ }
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java
new file mode 100644
index 0000000000..cc663ad258
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java
@@ -0,0 +1,26 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_MaintenanceHatch extends GT_GUIContainerMetaTile_Machine {
+
+ public GT_GUIContainer_MaintenanceHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(new GT_Container_MaintenanceHatch(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "Maintenance.png");
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString("Maintenance Hatch", 8, 4, 4210752);
+ fontRendererObj.drawString("Click with Tool to repair.", 8, 12, 4210752);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java
new file mode 100644
index 0000000000..b71b328293
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java
@@ -0,0 +1,55 @@
+package gregtech.api.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * The GUI-Container I use for all my Basic Machines
+ *
+ * As the NEI-RecipeTransferRect Handler can't handle one GUI-Class for all GUIs I needed to produce some dummy-classes which extend this class
+ */
+public class GT_GUIContainer_MultiMachine extends GT_GUIContainerMetaTile_Machine {
+
+ String mName = "";
+
+ public GT_GUIContainer_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile) {
+ super(new GT_Container_MultiMachine(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "multimachines/" + (aTextureFile==null?"MultiblockDisplay":aTextureFile));
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 10, 8, 16448255);
+
+ if (mContainer != null) {
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 1) != 0) fontRendererObj.drawString("Pipe is loose.", 10, 16, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 2) != 0) fontRendererObj.drawString("Screws are missing.", 10, 24, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 4) != 0) fontRendererObj.drawString("Something is stuck.", 10, 32, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 8) != 0) fontRendererObj.drawString("Platings are dented.", 10, 40, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 16) != 0) fontRendererObj.drawString("Circuitry burned out.", 10, 48, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 32) != 0) fontRendererObj.drawString("That doesn't belong there.", 10, 56, 16448255);
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 64) != 0) fontRendererObj.drawString("Incomplete Structure.", 10, 64, 16448255);
+
+ if (((GT_Container_MultiMachine)mContainer).mDisplayErrorCode == 0) {
+ if (((GT_Container_MultiMachine)mContainer).mActive == 0) {
+ fontRendererObj.drawString("Hit with Soft Hammer", 10, 16, 16448255);
+ fontRendererObj.drawString("to (re-)start the Machine", 10, 24, 16448255);
+ fontRendererObj.drawString("if it doesn't start.", 10, 32, 16448255);
+ } else {
+ fontRendererObj.drawString("Running perfectly.", 10, 16, 16448255);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Armor.java b/src/main/java/gregtech/api/gui/GT_Slot_Armor.java
new file mode 100644
index 0000000000..fdd89bca38
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Slot_Armor.java
@@ -0,0 +1,27 @@
+package gregtech.api.gui;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Slot_Armor extends Slot {
+ final int mArmorType;
+ final EntityPlayer mPlayer;
+
+ public GT_Slot_Armor(IInventory par2IInventory, int par3, int par4, int par5, int par6, EntityPlayer aPlayer) {
+ super(par2IInventory, par3, par4, par5);
+ mArmorType = par6;
+ mPlayer = aPlayer;
+ }
+
+ @Override
+ public int getSlotStackLimit() {
+ return 1;
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack aStack) {
+ return aStack != null && aStack.getItem() != null && aStack.getItem().isValidArmor(aStack, mArmorType, mPlayer);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java b/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java
new file mode 100644
index 0000000000..bd247148f3
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java
@@ -0,0 +1,17 @@
+package gregtech.api.gui;
+
+import gregtech.api.enums.ItemList;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Slot_DataOrb extends Slot {
+ public GT_Slot_DataOrb(IInventory par1iInventory, int par2, int par3, int par4) {
+ super(par1iInventory, par2, par3, par4);
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack aStack) {
+ return ItemList.Tool_DataOrb.isStackEqual(aStack, false, true);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Holo.java b/src/main/java/gregtech/api/gui/GT_Slot_Holo.java
new file mode 100644
index 0000000000..87bb9c51dc
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Slot_Holo.java
@@ -0,0 +1,46 @@
+package gregtech.api.gui;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Slot_Holo extends Slot {
+ public final int mSlotIndex;
+ public boolean mCanInsertItem, mCanStackItem;
+ public int mMaxStacksize = 127;
+
+ public GT_Slot_Holo(IInventory par1iInventory, int par2, int par3, int par4, boolean aCanInsertItem, boolean aCanStackItem, int aMaxStacksize) {
+ super(par1iInventory, par2, par3, par4);
+ mCanInsertItem = aCanInsertItem;
+ mCanStackItem = aCanStackItem;
+ mMaxStacksize = aMaxStacksize;
+ mSlotIndex = par2;
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack par1ItemStack) {
+ return mCanInsertItem;
+ }
+
+ @Override
+ public int getSlotStackLimit() {
+ return mMaxStacksize;
+ }
+
+ @Override
+ public boolean getHasStack() {
+ return false;
+ }
+
+ @Override
+ public ItemStack decrStackSize(int par1) {
+ if (!mCanStackItem) return null;
+ return super.decrStackSize(par1);
+ }
+
+ @Override
+ public boolean canTakeStack(EntityPlayer par1EntityPlayer) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Output.java b/src/main/java/gregtech/api/gui/GT_Slot_Output.java
new file mode 100644
index 0000000000..3c91380d16
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Slot_Output.java
@@ -0,0 +1,16 @@
+package gregtech.api.gui;
+
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Slot_Output extends Slot {
+ public GT_Slot_Output(IInventory par1iInventory, int par2, int par3, int par4) {
+ super(par1iInventory, par2, par3, par4);
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack par1ItemStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Render.java b/src/main/java/gregtech/api/gui/GT_Slot_Render.java
new file mode 100644
index 0000000000..15f4c339ae
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_Slot_Render.java
@@ -0,0 +1,22 @@
+package gregtech.api.gui;
+
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+
+public class GT_Slot_Render extends GT_Slot_Holo {
+ public GT_Slot_Render(IInventory par1iInventory, int par2, int par3, int par4) {
+ super(par1iInventory, par2, par3, par4, false, false, 0);
+ }
+
+ /**
+ * NEI has a nice and "useful" Delete-All Function, which would delete the Content of this Slot. This is here to prevent that.
+ */
+ @Override
+ public void putStack(ItemStack aStack) {
+ if (inventory instanceof TileEntity && ((TileEntity)inventory).getWorldObj().isRemote) {
+ inventory.setInventorySlotContents(getSlotIndex(), aStack);
+ }
+ onSlotChanged();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IColorModulationContainer.java b/src/main/java/gregtech/api/interfaces/IColorModulationContainer.java
new file mode 100644
index 0000000000..b1151cf808
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IColorModulationContainer.java
@@ -0,0 +1,5 @@
+package gregtech.api.interfaces;
+
+public interface IColorModulationContainer {
+ public short[] getRGBA();
+}
diff --git a/src/main/java/gregtech/api/interfaces/ICondition.java b/src/main/java/gregtech/api/interfaces/ICondition.java
new file mode 100644
index 0000000000..507315ee91
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/ICondition.java
@@ -0,0 +1,104 @@
+package gregtech.api.interfaces;
+
+public interface ICondition<O> {
+ public boolean isTrue(O aObject);
+
+ // Utility Classes for adding relations between Conditions.
+
+ public static class Not<O> implements ICondition<O> {
+ private final ICondition<O> mCondition;
+
+ public Not(ICondition<O> aCondition) {
+ mCondition = aCondition;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ return !mCondition.isTrue(aObject);
+ }
+ }
+
+ public static class Or<O> implements ICondition<O> {
+ private final ICondition<O>[] mConditions;
+
+ public Or(ICondition<O>... aConditions) {
+ mConditions = aConditions;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ for (ICondition<O> tCondition : mConditions) if (tCondition.isTrue(aObject)) return true;
+ return false;
+ }
+ }
+
+ public static class Nor<O> implements ICondition<O> {
+ private final ICondition<O>[] mConditions;
+
+ public Nor(ICondition<O>... aConditions) {
+ mConditions = aConditions;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ for (ICondition<O> tCondition : mConditions) if (tCondition.isTrue(aObject)) return false;
+ return true;
+ }
+ }
+
+ public static class And<O> implements ICondition<O> {
+ private final ICondition<O>[] mConditions;
+
+ public And(ICondition<O>... aConditions) {
+ mConditions = aConditions;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ for (ICondition<O> tCondition : mConditions) if (!tCondition.isTrue(aObject)) return false;
+ return true;
+ }
+ }
+
+ public static class Nand<O> implements ICondition<O> {
+ private final ICondition<O>[] mConditions;
+
+ public Nand(ICondition<O>... aConditions) {
+ mConditions = aConditions;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ for (ICondition<O> tCondition : mConditions) if (!tCondition.isTrue(aObject)) return true;
+ return false;
+ }
+ }
+
+ public static class Xor<O> implements ICondition<O> {
+ private final ICondition<O> mCondition1, mCondition2;
+
+ public Xor(ICondition<O> aCondition1, ICondition<O> aCondition2) {
+ mCondition1 = aCondition1;
+ mCondition2 = aCondition2;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ return mCondition1.isTrue(aObject) != mCondition2.isTrue(aObject);
+ }
+ }
+
+ public static class Equal<O> implements ICondition<O> {
+ private final ICondition<O> mCondition1, mCondition2;
+
+ public Equal(ICondition<O> aCondition1, ICondition<O> aCondition2) {
+ mCondition1 = aCondition1;
+ mCondition2 = aCondition2;
+ }
+
+ @Override
+ public boolean isTrue(O aObject) {
+ return mCondition1.isTrue(aObject) == mCondition2.isTrue(aObject);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IDamagableItem.java b/src/main/java/gregtech/api/interfaces/IDamagableItem.java
new file mode 100644
index 0000000000..f47c65f545
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IDamagableItem.java
@@ -0,0 +1,7 @@
+package gregtech.api.interfaces;
+
+import net.minecraft.item.ItemStack;
+
+public interface IDamagableItem {
+ public boolean doDamageToItem(ItemStack aStack, int aVanillaDamage);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IDebugableBlock.java b/src/main/java/gregtech/api/interfaces/IDebugableBlock.java
new file mode 100644
index 0000000000..ce95982018
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IDebugableBlock.java
@@ -0,0 +1,26 @@
+package gregtech.api.interfaces;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.player.EntityPlayer;
+
+/**
+ * You are allowed to include this File in your Download, as i will not change it.
+ */
+public interface IDebugableBlock {
+ /**
+ * Returns a Debug Message, for a generic DebugItem
+ * Blocks have to implement this interface NOT TileEntities!
+ * @param aPlayer the Player, who rightclicked with his Debug Item
+ * @param aX Block-Coordinate
+ * @param aY Block-Coordinate
+ * @param aZ Block-Coordinate
+ * @param aLogLevel the Log Level of the Debug Item.
+ * 0 = Obvious
+ * 1 = Visible for the regular Scanner
+ * 2 = Only visible to more advanced Scanners
+ * 3 = Debug ONLY
+ * @return a String-Array containing the DebugInfo, every Index is a separate line (0 = first Line)
+ */
+ public ArrayList<String> getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IDescribable.java b/src/main/java/gregtech/api/interfaces/IDescribable.java
new file mode 100644
index 0000000000..7ccf1a6627
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IDescribable.java
@@ -0,0 +1,11 @@
+package gregtech.api.interfaces;
+
+/**
+ * To get simple things like a ToolTip Description
+ */
+public interface IDescribable {
+ /**
+ * The Tooltip Text
+ */
+ public String[] getDescription();
+}
diff --git a/src/main/java/gregtech/api/interfaces/IFoodStat.java b/src/main/java/gregtech/api/interfaces/IFoodStat.java
new file mode 100644
index 0000000000..cb01e102c6
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IFoodStat.java
@@ -0,0 +1,21 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.ItemStack;
+
+public interface IFoodStat {
+ /** Warning the "aPlayer" Parameter may be null! */
+ public int getFoodLevel(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer);
+ /** Warning the "aPlayer" Parameter may be null! */
+ public float getSaturation(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer);
+ /** Warning the "aPlayer" Parameter may be null! */
+ public boolean alwaysEdible(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer);
+ /** Warning the "aPlayer" Parameter may be null! */
+ public boolean isRotten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer);
+ /** Warning the "aPlayer" Parameter may be null! */
+ public EnumAction getFoodAction(GT_MetaBase_Item aItem, ItemStack aStack);
+
+ public void onEaten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IIconContainer.java b/src/main/java/gregtech/api/interfaces/IIconContainer.java
new file mode 100644
index 0000000000..dc9a845f06
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IIconContainer.java
@@ -0,0 +1,21 @@
+package gregtech.api.interfaces;
+
+import net.minecraft.util.IIcon;
+import net.minecraft.util.ResourceLocation;
+
+public interface IIconContainer {
+ /**
+ * @return A regular Icon.
+ */
+ public IIcon getIcon();
+
+ /**
+ * @return Icon of the Overlay (or null if there is no Icon)
+ */
+ public IIcon getOverlayIcon();
+
+ /**
+ * @return the Default Texture File for this Icon.
+ */
+ public ResourceLocation getTextureFile();
+}
diff --git a/src/main/java/gregtech/api/interfaces/IItemBehaviour.java b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java
new file mode 100644
index 0000000000..1f28b6a696
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java
@@ -0,0 +1,30 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.enums.SubTag;
+import gregtech.api.items.GT_MetaBase_Item;
+
+import java.util.List;
+
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public interface IItemBehaviour<E extends Item> {
+ public boolean onLeftClickEntity(E aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity);
+ public boolean onItemUse(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ);
+ public boolean onItemUseFirst(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ);
+ public ItemStack onItemRightClick(E aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer);
+ public List<String> getAdditionalToolTips(E aItem, List<String> aList, ItemStack aStack);
+ public void onUpdate(E aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand);
+ public boolean isItemStackUsable(E aItem, ItemStack aStack);
+ public boolean canDispense(E aItem, IBlockSource aSource, ItemStack aStack);
+ public ItemStack onDispense(E aItem, IBlockSource aSource, ItemStack aStack);
+ public boolean hasProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack);
+ public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ);
+ public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IItemContainer.java b/src/main/java/gregtech/api/interfaces/IItemContainer.java
new file mode 100644
index 0000000000..e61553ce7d
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IItemContainer.java
@@ -0,0 +1,24 @@
+package gregtech.api.interfaces;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public interface IItemContainer {
+ public Item getItem();
+ public Block getBlock();
+ public boolean isStackEqual(Object aStack);
+ public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT);
+ public ItemStack get(long aAmount, Object... aReplacements);
+ public ItemStack getWildcard(long aAmount, Object... aReplacements);
+ public ItemStack getUndamaged(long aAmount, Object... aReplacements);
+ public ItemStack getAlmostBroken(long aAmount, Object... aReplacements);
+ public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements);
+ public IItemContainer set(Item aItem);
+ public IItemContainer set(ItemStack aStack);
+ public IItemContainer registerOre(Object... aOreNames);
+ public IItemContainer registerWildcardAsOre(Object... aOreNames);
+ public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements);
+ public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements);
+ public boolean hasBeenSet();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IOreRecipeRegistrator.java b/src/main/java/gregtech/api/interfaces/IOreRecipeRegistrator.java
new file mode 100644
index 0000000000..4535c4d6c8
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IOreRecipeRegistrator.java
@@ -0,0 +1,15 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import net.minecraft.item.ItemStack;
+
+public interface IOreRecipeRegistrator {
+ /**
+ * Contains a Code Fragment, used in the OrePrefix to register Recipes. Better than using a switch/case, like I did before.
+ * @param aPrefix always != null
+ * @param aMaterial always != null, and can be == _NULL if the Prefix is Self Referencing or not Material based!
+ * @param aStack always != null
+ */
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IProjectileItem.java b/src/main/java/gregtech/api/interfaces/IProjectileItem.java
new file mode 100644
index 0000000000..0b06a65373
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IProjectileItem.java
@@ -0,0 +1,16 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.enums.SubTag;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public interface IProjectileItem {
+ /** @return if this Item has an Arrow Entity */
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack);
+ /** @return an Arrow Entity to be spawned. If null then this is not an Arrow. Note: Other Projectiles still extend EntityArrow */
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ);
+ /** @return an Arrow Entity to be spawned. If null then this is not an Arrow. Note: Other Projectiles still extend EntityArrow */
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java b/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java
new file mode 100644
index 0000000000..13c63b7555
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java
@@ -0,0 +1,66 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.block.Block;
+import net.minecraft.tileentity.TileEntity;
+
+/**
+ * Implemented by the MetaTileEntity of the Redstone Circuit Block
+ */
+public interface IRedstoneCircuitBlock {
+ /**
+ * The Output Direction the Circuit Block is Facing
+ */
+ public byte getOutputFacing();
+
+ /**
+ * sets Output Redstone State at Side
+ */
+ public boolean setRedstone(byte aStrength, byte aSide);
+
+ /**
+ * returns Output Redstone State at Side
+ * Note that setRedstone checks if there is a Difference between the old and the new Setting before consuming any Energy
+ */
+ public byte getOutputRedstone(byte aSide);
+
+ /**
+ * returns Input Redstone Signal at Side
+ */
+ public byte getInputRedstone(byte aSide);
+
+ /**
+ * If this Side is Covered up and therefor not doing any Redstone
+ */
+ public GT_CoverBehavior getCover(byte aSide);
+
+ public int getCoverID(byte aSide);
+
+ public int getCoverVariable(byte aSide);
+
+ /**
+ * returns whatever Block-ID is adjacent to the Redstone Circuit Block
+ */
+ public Block getBlockAtSide(byte aSide);
+
+ /**
+ * returns whatever Meta-Value is adjacent to the Redstone Circuit Block
+ */
+ public byte getMetaIDAtSide(byte aSide);
+
+ /**
+ * returns whatever TileEntity is adjacent to the Redstone Circuit Block
+ */
+ public TileEntity getTileEntityAtSide(byte aSide);
+
+ /**
+ * returns whatever TileEntity is used by the Redstone Circuit Block
+ */
+ public ICoverable getOwnTileEntity();
+
+ /**
+ * returns worldObj.rand.nextInt(aRange)
+ */
+ public int getRandom(int aRange);
+}
diff --git a/src/main/java/gregtech/api/interfaces/ISubTagContainer.java b/src/main/java/gregtech/api/interfaces/ISubTagContainer.java
new file mode 100644
index 0000000000..ae7d59ec1d
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/ISubTagContainer.java
@@ -0,0 +1,20 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.enums.SubTag;
+
+public interface ISubTagContainer {
+ /**
+ * @return if the Tag is inside the List.
+ */
+ public boolean contains(SubTag aTag);
+
+ /**
+ * @return The ISubTagContainer you called this Function on, for convenience.
+ */
+ public ISubTagContainer add(SubTag... aTags);
+
+ /**
+ * @return if the Tag was there before it has been removed.
+ */
+ public boolean remove(SubTag aTag);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/ITexture.java b/src/main/java/gregtech/api/interfaces/ITexture.java
new file mode 100644
index 0000000000..534a738c45
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/ITexture.java
@@ -0,0 +1,15 @@
+package gregtech.api.interfaces;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+
+public interface ITexture {
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
+
+ public boolean isValidTexture();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/IToolStats.java b/src/main/java/gregtech/api/interfaces/IToolStats.java
new file mode 100644
index 0000000000..9f894bfac8
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IToolStats.java
@@ -0,0 +1,147 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.DamageSource;
+import net.minecraftforge.event.world.BlockEvent;
+
+/**
+ * The Stats for GT Tools. Not including any Material Modifiers.
+ *
+ * And this is supposed to not have any ItemStack Parameters as these are generic Stats.
+ */
+public interface IToolStats {
+ /**
+ * Called when aPlayer crafts this Tool
+ */
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer);
+
+ /**
+ * Called when this gets added to a Tool Item
+ */
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID);
+
+ /**
+ * @return Damage the Tool receives when breaking a Block. 100 is one Damage Point (or 100 EU).
+ */
+ public int getToolDamagePerBlockBreak();
+
+ /**
+ * @return Damage the Tool receives when converting the drops of a Block. 100 is one Damage Point (or 100 EU).
+ */
+ public int getToolDamagePerDropConversion();
+
+ /**
+ * @return Damage the Tool receives when being used as Container Item. 100 is one use, however it is usually 8 times more than normal.
+ */
+ public int getToolDamagePerContainerCraft();
+
+ /**
+ * @return Damage the Tool receives when being used as Weapon, 200 is the normal Value, 100 for actual Weapons.
+ */
+ public int getToolDamagePerEntityAttack();
+
+ /**
+ * @return Basic Quality of the Tool, 0 is normal. If increased, it will increase the general quality of all Tools of this Type. Decreasing is also possible.
+ */
+ public int getBaseQuality();
+
+ /**
+ * @return The Damage Bonus for this Type of Tool against Mobs. 1.0F is normal punch.
+ */
+ public float getBaseDamage();
+
+ /**
+ * @return This gets the Hurt Resistance time for Entities getting hit. (always does 1 as minimum)
+ */
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity);
+
+ /**
+ * @return This is a multiplier for the Tool Speed. 1.0F = no special Speed.
+ */
+ public float getSpeedMultiplier();
+
+ /**
+ * @return This is a multiplier for the Tool Speed. 1.0F = no special Durability.
+ */
+ public float getMaxDurabilityMultiplier();
+
+ public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity);
+
+ public String getMiningSound();
+ public String getCraftingSound();
+ public String getEntityHitSound();
+ public String getBreakingSound();
+
+ public Enchantment[] getEnchantments(ItemStack aStack);
+ public int[] getEnchantmentLevels(ItemStack aStack);
+
+ /**
+ * @return If this Tool can be used for blocking Damage like a Sword.
+ */
+ public boolean canBlock();
+
+ /**
+ * @return If this Tool can be used as an RC Crowbar.
+ */
+ public boolean isCrowbar();
+
+ /**
+ * @return If this Tool can be used as an RC Crowbar.
+ */
+ public boolean isGrafter();
+
+ /**
+ * @return If this Tool can be used as Weapon i.e. if that is the main purpose.
+ */
+ public boolean isWeapon();
+
+ /**
+ * @return If this Tool is a Ranged Weapon. Return false at isWeapon unless you have a Blade attached to your Bow/Gun or something
+ */
+ public boolean isRangedWeapon();
+
+ /**
+ * @return If this Tool can be used as Weapon i.e. if that is the main purpose.
+ */
+ public boolean isMiningTool();
+
+ /**
+ * aBlock.getHarvestTool(aMetaData) can return the following Values for example.
+ * "axe", "pickaxe", "sword", "shovel", "hoe", "grafter", "saw", "wrench", "crowbar", "file", "hammer", "plow", "plunger", "scoop", "screwdriver", "sense", "scythe", "softhammer", "cutter", "plasmatorch"
+ * @return If this is a minable Block. Tool Quality checks (like Diamond Tier or something) are separate from this check.
+ */
+ public boolean isMinableBlock(Block aBlock, byte aMetaData);
+
+ /**
+ * This lets you modify the Drop List, when this type of Tool has been used.
+ * @return the Amount of modified Items.
+ */
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent);
+
+ /**
+ * @return Returns a broken Version of the Item.
+ */
+ public ItemStack getBrokenItem(ItemStack aStack);
+
+ /**
+ * @return the Damage actually done to the Mob.
+ */
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer);
+
+ /**
+ * @return the Damage actually done to the Mob.
+ */
+ public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer);
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack);
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/internal/IBCTileEntity.java b/src/main/java/gregtech/api/interfaces/internal/IBCTileEntity.java
new file mode 100644
index 0000000000..3d471731ff
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IBCTileEntity.java
@@ -0,0 +1,8 @@
+package gregtech.api.interfaces.internal;
+
+/**
+ * A simple compound Interface for generic BuildCraft Code.
+ */
+public interface IBCTileEntity /*extends IPowerReceptor*/ {
+ //
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java b/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java
new file mode 100644
index 0000000000..a886cf67ac
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java
@@ -0,0 +1,7 @@
+package gregtech.api.interfaces.internal;
+
+import net.minecraft.item.crafting.IRecipe;
+
+public interface IGT_CraftingRecipe extends IRecipe {
+ public boolean isRemovable();
+}
diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java b/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java
new file mode 100644
index 0000000000..f64d120ec8
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java
@@ -0,0 +1,34 @@
+package gregtech.api.interfaces.internal;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+/**
+ * Interface used by the Mods Main Class to reference to internals.
+ *
+ * Don't even think about including this File in your Mod.
+ */
+public interface IGT_Mod {
+ /** This means that Server specific Basefiles are definitely existing! Not if the World is actually server side or not! */
+ public boolean isServerSide();
+ /** This means that Client specific Basefiles are definitely existing! Not if the World is actually client side or not! */
+ public boolean isClientSide();
+ /** This means that Bukkit specific Basefiles are definitely existing! Not if the World is actually bukkit server or not! */
+ public boolean isBukkitSide();
+ /** works only ClientSide otherwise returns null */
+ public EntityPlayer getThePlayer();
+
+ //---------- Internal Usage Only ----------
+
+ /**
+ * works only ClientSide otherwise returns 0
+ * @return the Index of the added Armor
+ */
+ public int addArmor(String aArmorPrefix);
+
+ /**
+ * Plays the Sonictron Sound for the ItemStack on the Client Side
+ */
+ public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
new file mode 100644
index 0000000000..ce72d93374
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
@@ -0,0 +1,412 @@
+package gregtech.api.interfaces.internal;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+public interface IGT_RecipeAdder {
+ /**
+ * Adds a FusionreactorRecipe
+ * Does not work anymore!
+ */
+ @Deprecated
+ public boolean addFusionReactorRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aFusionDurationInTicks, int aFusionEnergyPerTick, int aEnergyNeededForStartingFusion);
+
+ /**
+ * Adds a FusionreactorRecipe
+ * @param aInput1 = first Input (not null, and respects StackSize)
+ * @param aInput2 = second Input (not null, and respects StackSize)
+ * @param aOutput = Output of the Fusion (can be null, and respects StackSize)
+ * @param aFusionDurationInTicks = How many ticks the Fusion lasts (must be > 0)
+ * @param aFusionEnergyPerTick = The EU generated per Tick (can even be negative!)
+ * @param aEnergyNeededForStartingFusion = EU needed for heating the Reactor up (must be >= 0)
+ * @return true if the Recipe got added, otherwise false.
+ */
+ public boolean addFusionReactorRecipe(FluidStack aInput1, FluidStack aInput2, FluidStack aOutput1, int aFusionDurationInTicks, int aFusionEnergyPerTick, int aEnergyNeededForStartingFusion);
+
+ /**
+ * Adds a Centrifuge Recipe
+ * @param aInput1 must be != null
+ * @param aCellInput this is for the needed Cells, > 0 for Tincellcount, < 0 for negative Fuelcancount, == 0 for nothing
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aOutput3 can be null
+ * @param aOutput4 can be null
+ * @param aDuration must be > 0
+ */
+ public boolean addCentrifugeRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int aDuration);
+
+ /**
+ * Adds a Centrifuge Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aOutput3 can be null
+ * @param aOutput4 can be null
+ * @param aDuration must be > 0
+ */
+ public boolean addCentrifugeRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Electrolyzer Recipe
+ * @param aInput1 must be != null
+ * @param aCellInput this is for the needed Cells, > 0 for Tincellcount, < 0 for negative Fuelcancount, == 0 for nothing
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aOutput3 can be null
+ * @param aOutput4 can be null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addElectrolyzerRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int aDuration, int aEUt);
+
+ /**
+ * Adds a Electrolyzer Recipe
+ * @param aInput1 must be != null
+ * @param aCellInput this is for the needed Cells, > 0 for Tincellcount, < 0 for negative Fuelcancount, == 0 for nothing
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aOutput3 can be null
+ * @param aOutput4 can be null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addElectrolyzerRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Chemical Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ */
+ public boolean addChemicalRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput, int aDuration);
+
+ /**
+ * Adds a Chemical Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ */
+ public boolean addChemicalRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput, int aDuration);
+
+ /**
+ * Adds a Blast Furnace Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 can be null
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ * @param aLevel should be > 0 is the minimum Heat Level needed for this Recipe
+ */
+ @Deprecated
+ public boolean addBlastRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt, int aLevel);
+
+ /**
+ * Adds a Blast Furnace Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 can be null
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ * @param aLevel should be > 0 is the minimum Heat Level needed for this Recipe
+ */
+ public boolean addBlastRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt, int aLevel);
+
+ /**
+ * Adds a Canning Machine Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0, 100 ticks is standard.
+ * @param aEUt should be > 0, 1 EU/t is standard.
+ */
+ public boolean addCannerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt);
+
+ /**
+ * Adds an Alloy Smelter Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 can be null
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addAlloySmelterRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt);
+
+ /**
+ * Adds a CNC-Machine Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addCNCRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt);
+
+ /**
+ * Adds a Circuit Assembler Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addAssemblerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt);
+
+ /**
+ * Adds a Circuit Assembler Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addAssemblerRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, ItemStack aOutput1, int aDuration, int aEUt);
+
+ /**
+ * Adds a Forge Hammer Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addForgeHammerRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt);
+
+ /**
+ * Adds a Wiremill Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addWiremillRecipe(ItemStack aInput, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Polariser Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addPolarizerRecipe(ItemStack aInput, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Plate Bending Machine Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addBenderRecipe(ItemStack aInput, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Extruder Machine Recipe
+ * @param aInput1 must be != null
+ * @param aShape must be != null, Set the stackSize to 0 if you don't want to let it consume this Item.
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addExtruderRecipe(ItemStack aInput, ItemStack aShape, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Slicer Machine Recipe
+ * @param aInput1 must be != null
+ * @param aShape must be != null, Set the stackSize to 0 if you don't want to let it consume this Item.
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ * @param aEUt should be > 0
+ */
+ public boolean addSlicerRecipe(ItemStack aInput, ItemStack aShape, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds an Implosion Compressor Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 amount of ITNT, should be > 0
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ */
+ public boolean addImplosionRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2);
+
+ /**
+ * Adds a Grinder Recipe
+ * @param aInput1 must be != null
+ * @param aInput2 id for the Cell needed for this Recipe
+ * @param aOutput1 must be != null
+ * @param aOutput2 can be null
+ * @param aOutput3 can be null
+ * @param aOutput4 can be null
+ */
+ public boolean addGrinderRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4);
+
+ /**
+ * Adds a Distillation Tower Recipe
+ * @param aInput1 must be != null
+ * @param aOutputs must be != null 1-5 Fluids
+ * @param aOutput2 can be null
+ */
+ public boolean addDistillationTowerRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt);
+
+
+ public boolean addSimpleArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt);
+
+ public boolean addPlasmaArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt);
+
+ public boolean addPlasmaArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs,FluidStack aFluidPutput, int[] aChances, int aDuration, int aEUt);
+
+
+
+
+
+
+ /**
+ * Adds a Distillation Tower Recipe
+ */
+ public boolean addDistillationRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, int aDuration, int aEUt);
+
+ /**
+ * Adds a Lathe Machine Recipe
+ */
+ public boolean addLatheRecipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt);
+
+ /**
+ * Adds a Cutter Recipe
+ */
+ public boolean addCutterRecipe(ItemStack aInput, FluidStack aLubricant, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt);
+
+ /**
+ * Adds Cutter Recipes with default Lubricants
+ */
+ public boolean addCutterRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt);
+
+ /**
+ * Adds a Boxing Recipe
+ */
+ public boolean addBoxingRecipe(ItemStack aContainedItem, ItemStack aEmptyBox, ItemStack aFullBox, int aDuration, int aEUt);
+
+ /**
+ * Adds an Unboxing Recipe
+ */
+ public boolean addUnboxingRecipe(ItemStack aFullBox, ItemStack aContainedItem, ItemStack aEmptyBox, int aDuration, int aEUt);
+
+ /**
+ * Adds a Vacuum Freezer Recipe
+ * @param aInput1 must be != null
+ * @param aOutput1 must be != null
+ * @param aDuration must be > 0
+ */
+ public boolean addVacuumFreezerRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration);
+
+ /**
+ * Adds a Fuel for My Generators
+ * @param aInput1 must be != null
+ * @param aOutput1 can be null
+ * @param aEU EU per MilliBucket. If no Liquid Form of this Container is available, then it will give you EU*1000 per Item.
+ * @param aType 0 = Diesel; 1 = Gas Turbine; 2 = Thermal; 3 = Dense Fluid; 4 = Plasma; 5 = Magic; And if something is unclear or missing, then look at the GT_Recipe-Class
+ */
+ public boolean addFuel(ItemStack aInput1, ItemStack aOutput1, int aEU, int aType);
+
+ /**
+ * Adds an Amplifier Recipe for the Amplifabricator
+ */
+ public boolean addAmplifier(ItemStack aAmplifierItem, int aDuration, int aAmplifierAmountOutputted);
+
+ /**
+ * Adds a Recipe for the Brewing Machine (intentionally limited to Fluid IDs)
+ */
+ public boolean addBrewingRecipe(ItemStack aIngredient, Fluid aInput, Fluid aOutput, boolean aHidden);
+
+ /**
+ * Adds a Recipe for the Fermenter
+ */
+ public boolean addFermentingRecipe(FluidStack aInput, FluidStack aOutput, int aDuration, boolean aHidden);
+
+ /**
+ * Adds a Recipe for the Fluid Heater
+ */
+ public boolean addFluidHeaterRecipe(ItemStack aCircuit, FluidStack aInput, FluidStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Distillery
+ */
+ public boolean addDistilleryRecipe(ItemStack aCircuit, FluidStack aInput, FluidStack aOutput, int aDuration, int aEUt, boolean aHidden);
+
+ /**
+ * Adds a Recipe for the Fluid Solidifier
+ */
+ public boolean addFluidSolidifierRecipe(ItemStack aMold, FluidStack aInput, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for Fluid Smelting
+ */
+ public boolean addFluidSmelterRecipe(ItemStack aInput, ItemStack aRemains, FluidStack aOutput, int aChance, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for Fluid Extraction
+ */
+ public boolean addFluidExtractionRecipe(ItemStack aInput, ItemStack aRemains, FluidStack aOutput, int aChance, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Fluid Canner
+ */
+ public boolean addFluidCannerRecipe(ItemStack aInput, ItemStack aOutput, FluidStack aFluidInput, FluidStack aFluidOutput);
+
+ /**
+ * Adds a Recipe for the Chemical Bath
+ */
+ public boolean addChemicalBathRecipe(ItemStack aInput, FluidStack aBathingFluid, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Electromagnetic Separator
+ */
+ public boolean addElectromagneticSeparatorRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Printer
+ */
+ public boolean addPrinterRecipe(ItemStack aInput, FluidStack aFluid, ItemStack aSpecialSlot, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Autoclave
+ */
+ public boolean addAutoclaveRecipe(ItemStack aInput, FluidStack aFluid, ItemStack aOutput, int aChance, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Mixer
+ */
+ public boolean addMixerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aInput3, ItemStack aInput4, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Laser Engraver
+ */
+ public boolean addLaserEngraverRecipe(ItemStack aItemToEngrave, ItemStack aLens, ItemStack aEngravedItem, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Forming Press
+ */
+ public boolean addFormingPressRecipe(ItemStack aItemToImprint, ItemStack aForm, ItemStack aImprintedItem, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Sifter. (up to 9 Outputs)
+ */
+ public boolean addSifterRecipe(ItemStack aItemToSift, ItemStack[] aSiftedItems, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the Arc Furnace. (up to 4 Outputs)
+ */
+ public boolean addArcFurnaceRecipe(ItemStack aInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Recipe for the GT Pulveriser. (up to 4 Outputs)
+ */
+ public boolean addPulveriserRecipe(ItemStack aInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt);
+
+ /**
+ * Adds a Sound to the Sonictron9001
+ * you should NOT call this in the preInit-Phase!
+ * @param aItemStack = The Item you want to display for this Sound
+ * @param aSoundName = The Name of the Sound in the resources/newsound-folder like Vanillasounds
+ * @return true if the Sound got added, otherwise false.
+ */
+ public boolean addSonictronSound(ItemStack aItemStack, String aSoundName);
+}
diff --git a/src/main/java/gregtech/api/interfaces/internal/IIC2TileEntity.java b/src/main/java/gregtech/api/interfaces/internal/IIC2TileEntity.java
new file mode 100644
index 0000000000..736cbf67d7
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IIC2TileEntity.java
@@ -0,0 +1,13 @@
+package gregtech.api.interfaces.internal;
+
+import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
+import ic2.api.energy.tile.IEnergySink;
+import ic2.api.energy.tile.IEnergySource;
+import ic2.api.tile.IEnergyStorage;
+
+/**
+ * A simple compound Interface for generic EnergyTileEntities. I don't want to have imports of the IC2-API in my main-code
+ */
+public interface IIC2TileEntity extends IEnergyStorage, IEnergySink, IEnergySource, IHasWorldObjectAndCoords {
+ //
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java b/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java
new file mode 100644
index 0000000000..0b48d43db9
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java
@@ -0,0 +1,43 @@
+package gregtech.api.interfaces.internal;
+
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+
+public interface IThaumcraftCompat {
+ public static final int RESEARCH_TYPE_NORMAL = 0, RESEARCH_TYPE_SECONDARY = 1, RESEARCH_TYPE_FREE = 2, RESEARCH_TYPE_HIDDEN = 4, RESEARCH_TYPE_VIRTUAL = 8, RESEARCH_TYPE_ROUND = 16, RESEARCH_TYPE_SPECIAL = 32, RESEARCH_TYPE_AUTOUNLOCK = 64;
+
+ /** The Research Keys of GT */
+ public static final String
+ IRON_TO_STEEL = "GT_IRON_TO_STEEL"
+ , FILL_WATER_BUCKET = "GT_FILL_WATER_BUCKET"
+ , WOOD_TO_CHARCOAL = "GT_WOOD_TO_CHARCOAL"
+ , TRANSZINC = "GT_TRANSZINC"
+ , TRANSNICKEL = "GT_TRANSNICKEL"
+ , TRANSCOBALT = "GT_TRANSCOBALT"
+ , TRANSBISMUTH = "GT_TRANSBISMUTH"
+ , TRANSANTIMONY = "GT_TRANSANTIMONY"
+ , TRANSCUPRONICKEL = "GT_TRANSCUPRONICKEL"
+ , TRANSBATTERYALLOY = "GT_TRANSBATTERYALLOY"
+ , TRANSSOLDERINGALLOY = "GT_TRANSSOLDERINGALLOY"
+ , TRANSBRASS = "GT_TRANSBRASS"
+ , TRANSBRONZE = "GT_TRANSBRONZE"
+ , TRANSINVAR = "GT_TRANSINVAR"
+ , TRANSELECTRUM = "GT_TRANSELECTRUM"
+ , TRANSALUMINIUM = "GT_TRANSALUMINIUM"
+ , CRYSTALLISATION = "GT_CRYSTALLISATION"
+ , ADVANCEDENTROPICPROCESSING = "GT_ADVANCEDENTROPICPROCESSING"
+ , ADVANCEDMETALLURGY = "GT_ADVANCEDMETALLURGY"
+ ;
+
+ public boolean registerPortholeBlacklistedBlock(Block aBlock);
+ public boolean registerThaumcraftAspectsToItem(ItemStack aStack, List<TC_AspectStack> aAspects, boolean aAdditive);
+ public boolean registerThaumcraftAspectsToItem(ItemStack aStack, List<TC_AspectStack> aAspects, String aOreDict);
+ public Object addCrucibleRecipe(String aResearch, Object aInput, ItemStack aOutput, List<TC_AspectStack> aAspects);
+ public Object addInfusionRecipe(String aResearch, ItemStack aMainInput,ItemStack[] aSideInputs, ItemStack aOutput,int aInstability, List<TC_Aspects.TC_AspectStack> aAspects);
+ public Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, List<TC_AspectStack> aAspects, ItemStack[] aResearchTriggers, Object[] aPages);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/internal/IUETileEntity.java b/src/main/java/gregtech/api/interfaces/internal/IUETileEntity.java
new file mode 100644
index 0000000000..945c6792f8
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/internal/IUETileEntity.java
@@ -0,0 +1,6 @@
+package gregtech.api.interfaces.internal;
+
+
+public interface IUETileEntity /*extends IElectrical*/ {
+ //
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java
new file mode 100644
index 0000000000..7b7d36ea6f
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java
@@ -0,0 +1,383 @@
+package gregtech.api.interfaces.metatileentity;
+
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGearEnergyTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_Config;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.IFluidHandler;
+import net.minecraftforge.fluids.IFluidTank;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * Warning, this Interface has just been made to be able to add multiple kinds of MetaTileEntities (Cables, Pipes, Transformers, but not the regular Blocks)
+ *
+ * Don't implement this yourself and expect it to work. Extend @MetaTileEntity itself.
+ */
+public interface IMetaTileEntity extends ISidedInventory, IFluidTank, IFluidHandler, IGearEnergyTileEntity {
+ /**
+ * This determines the BaseMetaTileEntity belonging to this MetaTileEntity by using the Meta ID of the Block itself.
+ *
+ * 0 = BaseMetaTileEntity, Wrench lvl 0 to dismantle
+ * 1 = BaseMetaTileEntity, Wrench lvl 1 to dismantle
+ * 2 = BaseMetaTileEntity, Wrench lvl 2 to dismantle
+ * 3 = BaseMetaTileEntity, Wrench lvl 3 to dismantle
+ * 4 = BaseMetaPipeEntity, Wrench lvl 0 to dismantle
+ * 5 = BaseMetaPipeEntity, Wrench lvl 1 to dismantle
+ * 6 = BaseMetaPipeEntity, Wrench lvl 2 to dismantle
+ * 7 = BaseMetaPipeEntity, Wrench lvl 3 to dismantle
+ * 8 = BaseMetaPipeEntity, Cutter lvl 0 to dismantle
+ * 9 = BaseMetaPipeEntity, Cutter lvl 1 to dismantle
+ * 10 = BaseMetaPipeEntity, Cutter lvl 2 to dismantle
+ * 11 = BaseMetaPipeEntity, Cutter lvl 3 to dismantle
+ * 12 = BaseMetaPipeEntity, Axe lvl 0 to dismantle
+ * 13 = BaseMetaPipeEntity, Axe lvl 1 to dismantle
+ * 14 = BaseMetaPipeEntity, Axe lvl 2 to dismantle
+ * 15 = BaseMetaPipeEntity, Axe lvl 3 to dismantle
+ */
+ public byte getTileEntityBaseType();
+
+ /**
+ * @param aTileEntity is just because the internal Variable "mBaseMetaTileEntity" is set after this Call.
+ * @return a newly created and ready MetaTileEntity
+ */
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity);
+
+ /**
+ * @return an ItemStack representing this MetaTileEntity.
+ */
+ public ItemStack getStackForm(long aAmount);
+
+ /**
+ * Sets the BaseMetaTileEntity of this
+ */
+ public void setBaseMetaTileEntity(IGregTechTileEntity aBaseMetaTileEntity);
+
+ /**
+ * new getter for the BaseMetaTileEntity, which restricts usage to certain Functions.
+ */
+ public IGregTechTileEntity getBaseMetaTileEntity();
+
+ /**
+ * when placing a Machine in World, to initialize default Modes. aNBT can be null!
+ */
+ public void initDefaultModes(NBTTagCompound aNBT);
+
+ /**
+ * ^= writeToNBT
+ */
+ public void saveNBTData(NBTTagCompound aNBT);
+
+ /**
+ * ^= readFromNBT
+ */
+ public void loadNBTData(NBTTagCompound aNBT);
+
+ /**
+ * Adds the NBT-Information to the ItemStack, when being dismanteled properly
+ * Used to store Machine specific Upgrade Data.
+ */
+ public void setItemNBT(NBTTagCompound aNBT);
+
+ /**
+ * Called in the registered MetaTileEntity when the Server starts, to reset static variables
+ */
+ public void onServerStart();
+
+ /**
+ * Called in the registered MetaTileEntity when the Server ticks a World the first time, to load things from the World Save
+ */
+ public void onWorldLoad(File aSaveDirectory);
+
+ /**
+ * Called in the registered MetaTileEntity when the Server stops, to save the Game.
+ */
+ public void onWorldSave(File aSaveDirectory);
+
+ /**
+ * Called to set Configuration values for this MetaTileEntity.
+ * Use aConfig.get(ConfigCategories.machineconfig, "MetaTileEntityName.Ability", DEFAULT_VALUE); to set the Values.
+ */
+ public void onConfigLoad(GT_Config aConfig);
+
+ /**
+ * If a Cover of that Type can be placed on this Side.
+ * Also Called when the Facing of the Block Changes and a Cover is on said Side.
+ */
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aStack);
+
+ /**
+ * When a Player rightclicks the Facing with a Screwdriver.
+ */
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ);
+
+ /**
+ * When a Player rightclicks the Facing with a Wrench.
+ */
+ public boolean onWrenchRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ);
+
+ /**
+ * Called right before this Machine explodes
+ */
+ public void onExplosion();
+
+ /**
+ * The First processed Tick which was passed to this MetaTileEntity
+ */
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity);
+
+ /**
+ * The Tick before all the generic handling happens, what gives a slightly faster reaction speed.
+ * Don't use this if you really don't need to. @onPostTick is better suited for ticks.
+ * This happens still after the Cover handling.
+ */
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick);
+
+ /**
+ * The Tick after all the generic handling happened.
+ * Recommended to use this like updateEntity.
+ */
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick);
+
+ /**
+ * Called when this MetaTileEntity gets (intentionally) disconnected from the BaseMetaTileEntity.
+ * Doesn't get called when this thing is moved by Frames or similar hacks.
+ */
+ public void inValidate();
+
+ /**
+ * Called when the BaseMetaTileEntity gets invalidated, what happens right before the @inValidate above gets called
+ */
+ public void onRemoval();
+
+ /**
+ * @param aFacing
+ * @return if aFacing would be a valid Facing for this Device. Used for wrenching.
+ */
+ public boolean isFacingValid(byte aFacing);
+
+ /**
+ * @return the Server Side Container
+ */
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity);
+
+ /**
+ * @return the Client Side GUI Container
+ */
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity);
+
+ /**
+ * From new ISidedInventory
+ */
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack);
+
+ /**
+ * From new ISidedInventory
+ */
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack);
+
+ /**
+ * @return if aIndex is a valid Slot. false for things like HoloSlots. Is used for determining if an Item is dropped upon Block destruction and for Inventory Access Management
+ */
+ public boolean isValidSlot(int aIndex);
+
+ /**
+ * @return if aIndex can be set to Zero stackSize, when being removed.
+ */
+ public boolean setStackToZeroInsteadOfNull(int aIndex);
+
+ /**
+ * If this Side can connect to inputting pipes
+ */
+ public boolean isLiquidInput(byte aSide);
+
+ /**
+ * If this Side can connect to outputting pipes
+ */
+ public boolean isLiquidOutput(byte aSide);
+
+ /**
+ * Just an Accessor for the Name variable.
+ */
+ public String getMetaName();
+
+ /**
+ * @return true if the Machine can be accessed
+ */
+ public boolean isAccessAllowed(EntityPlayer aPlayer);
+
+ /**
+ * When a Machine Update occurs
+ */
+ public void onMachineBlockUpdate();
+
+ /**
+ * a Player rightclicks the Machine
+ * Sneaky rightclicks are not getting passed to this!
+ * @return
+ */
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ);
+
+ /**
+ * a Player leftclicks the Machine
+ * Sneaky leftclicks are getting passed to this unlike with the rightclicks.
+ */
+ public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer);
+
+ /**
+ * Called Clientside with the Data got from @getUpdateData
+ */
+ public void onValueUpdate(byte aValue);
+
+ /**
+ * return a small bit of Data, like a secondary Facing for example with this Function, for the Client.
+ * The BaseMetaTileEntity detects changes to this Value and will then send an Update.
+ * This is only for Information, which is visible as Texture to the outside.
+ *
+ * If you just want to have an Active/Redstone State then set the Active State inside the BaseMetaTileEntity instead.
+ */
+ public byte getUpdateData();
+
+ /**
+ * For the rare case you need this Function
+ */
+ public void receiveClientEvent(byte aEventID, byte aValue);
+
+ /**
+ * Called to actually play the Sound.
+ * Do not insert Client/Server checks. That is already done for you.
+ * Do not use @playSoundEffect, Minecraft doesn't like that at all. Use @playSound instead.
+ */
+ public void doSound(byte aIndex, double aX, double aY, double aZ);
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ);
+ public void stopSoundLoop(byte aValue, double aX, double aY, double aZ);
+
+ /**
+ * Sends the Event for the Sound Triggers, only usable Server Side!
+ */
+ public void sendSound(byte aIndex);
+
+ /**
+ * Sends the Event for the Sound Triggers, only usable Server Side!
+ */
+ public void sendLoopStart(byte aIndex);
+
+ /**
+ * Sends the Event for the Sound Triggers, only usable Server Side!
+ */
+ public void sendLoopEnd(byte aIndex);
+
+ /**
+ * Called when the Machine explodes, override Explosion Code here.
+ * @param aExplosionPower
+ */
+ public void doExplosion(long aExplosionPower);
+
+ /**
+ * If this is just a simple Machine, which can be wrenched at 100%
+ */
+ public boolean isSimpleMachine();
+
+ /**
+ * If there should be a Lag Warning if something laggy happens during this Tick.
+ *
+ * The Advanced Pump uses this to not cause the Lag Message, while it scans for all close Fluids.
+ * The Item Pipes and Retrievers neither send this Message, when scanning for Pipes.
+ */
+ public boolean doTickProfilingMessageDuringThisTick();
+
+ /**
+ * returns the DebugLog
+ */
+ public ArrayList<String> getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, int aLogLevel, ArrayList<String> aList);
+
+ /**
+ * get a small Description
+ */
+ public String[] getDescription();
+
+ /**
+ * In case the Output Voltage varies.
+ */
+ public String getSpecialVoltageToolTip();
+
+ /**
+ * Icon of the Texture. If this returns null then it falls back to getTextureIndex.
+ *
+ * @param aSide is the Side of the Block
+ * @param aFacing is the direction the Block is facing (or a Bitmask of all Connections in case of Pipes)
+ * @param aColorIndex The Minecraft Color the Block is having
+ * @param aActive if the Machine is currently active (use this instead of calling mBaseMetaTileEntity.mActive!!!). Note: In case of Pipes this means if this Side is connected to something or not.
+ * @param aRedstone if the Machine is currently outputting a RedstoneSignal (use this instead of calling mBaseMetaTileEntity.mRedstone!!!)
+ */
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone);
+
+ /**
+ * The Textures used for the Item rendering. Return null if you want the regular 3D Block Rendering.
+ */
+ //public ITexture[] getItemTexture(ItemStack aStack);
+
+ /**
+ * Register Icons here. This gets called when the Icons get initialized by the Base Block
+ * Best is you put your Icons in a static Array for quick and easy access without relying on the MetaTileList.
+ * @param aBlockIconRegister The Block Icon Register
+ */
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aBlockIconRegister);
+
+ /**
+ * @return true if you override the Rendering.
+ */
+ @SideOnly(Side.CLIENT)
+ public boolean renderInInventory(Block aBlock, int aMeta, RenderBlocks aRenderer);
+
+ /**
+ * @return true if you override the Rendering.
+ */
+ @SideOnly(Side.CLIENT)
+ public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer);
+
+ /**
+ * Gets the Output for the comparator on the given Side
+ */
+ public byte getComparatorValue(byte aSide);
+
+ public float getExplosionResistance(byte aSide);
+
+ public String[] getInfoData();
+ public boolean isGivingInformation();
+
+ public ItemStack[] getRealInventory();
+
+ public boolean connectsToItemPipe(byte aSide);
+
+ public void onColorChangeServer(byte aColor);
+ public void onColorChangeClient(byte aColor);
+
+ public int getLightOpacity();
+
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider);
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ);
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider);
+
+ /** The onCreated Function of the Item Class redirects here */
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityCable.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityCable.java
new file mode 100644
index 0000000000..6cdb15cfea
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityCable.java
@@ -0,0 +1,9 @@
+package gregtech.api.interfaces.metatileentity;
+
+import java.util.ArrayList;
+
+import net.minecraft.tileentity.TileEntity;
+
+public interface IMetaTileEntityCable extends IMetaTileEntity {
+ public long transferElectricity(byte aSide, long aVoltage, long aAmperage, ArrayList<TileEntity> aAlreadyPassedTileEntityList);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
new file mode 100644
index 0000000000..0e6d3c6f09
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
@@ -0,0 +1,96 @@
+package gregtech.api.interfaces.metatileentity;
+
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
+ /**
+ * @return if this Pipe can still be used.
+ */
+ public boolean pipeCapacityCheck();
+
+ /**
+ * @return if this Pipe can still be used.
+ */
+ public boolean incrementTransferCounter(int aIncrement);
+
+ /**
+ * Sends an ItemStack from aSender to the adjacent Blocks.
+ * @param aSender the BaseMetaTileEntity sending the Stack.
+ * @return if it was able to send something
+ */
+ public boolean sendItemStack(Object aSender);
+
+ /**
+ * Executes the Sending Code for inserting Stacks into the TileEntities.
+ * @param aSender the BaseMetaTileEntity sending the Stack.
+ * @param aSide the Side of the PIPE facing the TileEntity.
+ * @return if this Side was allowed to Output into the Block.
+ */
+ public boolean insertItemStackIntoTileEntity(Object aSender, byte aSide);
+
+ /**
+ * Can be used to make flow control Pipes, like Redpowers Restriction Tubes.
+ * Every normal Pipe returns a Value of 32768, so you can easily insert lower Numbers to set Routing priorities.
+ * Negative Numbers to "suck" Items into a certain direction are also possible.
+ */
+ public int getStepSize();
+
+ /**
+ * Utility for the Item Network
+ */
+ public static class Util {
+ /**
+ * @return a List of connected Item Pipes
+ */
+ public static Map<IMetaTileEntityItemPipe, Long> scanPipes(IMetaTileEntityItemPipe aMetaTileEntity, Map<IMetaTileEntityItemPipe, Long> aMap, long aStep, boolean aSuckItems, boolean aIgnoreCapacity) {
+ aStep+=aMetaTileEntity.getStepSize();
+ if (aIgnoreCapacity || aMetaTileEntity.pipeCapacityCheck()) if (aMap.get(aMetaTileEntity) == null || aMap.get(aMetaTileEntity) > aStep) {
+ IGregTechTileEntity aBaseMetaTileEntity = aMetaTileEntity.getBaseMetaTileEntity();
+ aMap.put(aMetaTileEntity, aStep);
+ for (byte i = 0, j = 0; i < 6; i++) {
+ j = GT_Utility.getOppositeSide(i);
+ if (aSuckItems) {
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsIn(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -2, aBaseMetaTileEntity)) {
+ IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
+ if (aBaseMetaTileEntity.getColorization() >= 0) {
+ byte tColor = tItemPipe.getColorization();
+ if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) {
+ continue;
+ }
+ }
+ if (tItemPipe != null && tItemPipe instanceof BaseMetaPipeEntity) {
+ IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
+ if (tMetaTileEntity != null && tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSide(j).letsItemsOut(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSide(j), -2, tItemPipe)) {
+ scanPipes((IMetaTileEntityItemPipe)tMetaTileEntity, aMap, aStep, aSuckItems, aIgnoreCapacity);
+ }
+ }
+ }
+ } else {
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsOut(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -2, aBaseMetaTileEntity)) {
+ IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
+ if (tItemPipe != null) {
+ if (aBaseMetaTileEntity.getColorization() >= 0) {
+ byte tColor = tItemPipe.getColorization();
+ if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) {
+ continue;
+ }
+ }
+ if (tItemPipe instanceof BaseMetaPipeEntity) {
+ IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
+ if (tMetaTileEntity != null && tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSide(j).letsItemsIn(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSide(j), -2, tItemPipe)) {
+ scanPipes((IMetaTileEntityItemPipe)tMetaTileEntity, aMap, aStep, aSuckItems, aIgnoreCapacity);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return aMap;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java
new file mode 100644
index 0000000000..6b39391d46
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java
@@ -0,0 +1,99 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * Interface for internal Code, which is mainly used for independent Energy conversion.
+ */
+public interface IBasicEnergyContainer extends IEnergyConnected {
+ /**
+ * Gets if that Amount of Energy is stored inside the Machine.
+ * It is used for checking the contained Energy before consuming it.
+ * If this returns false, it will also give a Message inside the Scanner, that this Machine doesn't have enough Energy.
+ */
+ public boolean isUniversalEnergyStored(long aEnergyAmount);
+
+ /**
+ * Gets the stored electric, kinetic or steam Energy (with EU as reference Value)
+ * Always returns the largest one.
+ */
+ public long getUniversalEnergyStored();
+
+ /**
+ * Gets the largest electric, kinetic or steam Energy Capacity (with EU as reference Value)
+ */
+ public long getUniversalEnergyCapacity();
+
+ /**
+ * Gets the amount of Energy Packets per tick.
+ */
+ public long getOutputAmperage();
+
+ /**
+ * Gets the Output in EU/p.
+ */
+ public long getOutputVoltage();
+
+ /**
+ * Gets the amount of Energy Packets per tick.
+ */
+ public long getInputAmperage();
+
+ /**
+ * Gets the maximum Input in EU/p.
+ */
+ public long getInputVoltage();
+
+ /**
+ * Decreases the Amount of stored universal Energy. If ignoring too less Energy, then it just sets the Energy to 0 and returns false.
+ */
+ public boolean decreaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooLessEnergy);
+
+ /**
+ * Increases the Amount of stored electric Energy. If ignoring too much Energy, then the Energy Limit is just being ignored.
+ */
+ public boolean increaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooMuchEnergy);
+
+ /**
+ * Drain Energy Call for Electricity.
+ */
+ public boolean drainEnergyUnits(byte aSide, long aVoltage, long aAmperage);
+
+ /**
+ * returns the amount of Electricity, accepted by this Block the last 5 ticks as Average.
+ */
+ public long getAverageElectricInput();
+
+ /**
+ * returns the amount of Electricity, outputted by this Block the last 5 ticks as Average.
+ */
+ public long getAverageElectricOutput();
+
+ /**
+ * returns the amount of electricity contained in this Block, in EU units!
+ */
+ public long getStoredEU();
+
+ /**
+ * returns the amount of electricity containable in this Block, in EU units!
+ */
+ public long getEUCapacity();
+
+ /**
+ * returns the amount of Steam contained in this Block, in EU units!
+ */
+ public long getStoredSteam();
+
+ /**
+ * returns the amount of Steam containable in this Block, in EU units!
+ */
+ public long getSteamCapacity();
+
+ /**
+ * Increases stored Energy. Energy Base Value is in EU, even though it's Steam!
+ * @param aEnergy The Energy to add to the Machine.
+ * @param aIgnoreTooMuchEnergy if it shall ignore if it has too much Energy.
+ * @return if it was successful
+ *
+ * And yes, you can't directly decrease the Steam of a Machine. That is done by decreaseStoredEnergyUnits
+ */
+ public boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java
new file mode 100644
index 0000000000..dc511f3050
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java
@@ -0,0 +1,14 @@
+package gregtech.api.interfaces.tileentity;
+
+public interface IColoredTileEntity {
+ /**
+ * @return 0 - 15 are Colors, while -1 means uncolored
+ */
+ public byte getColorization();
+
+ /**
+ * Sets the Color Modulation of the Block
+ * @param aColor the Color you want to set it to. -1 for reset.
+ */
+ public byte setColorization(byte aColor);
+}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
new file mode 100644
index 0000000000..546b8d81c6
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
@@ -0,0 +1,35 @@
+package gregtech.api.interfaces.tileentity;
+
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.item.ItemStack;
+
+public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEnergyContainer {
+ public boolean canPlaceCoverIDAtSide (byte aSide, int aID);
+ public boolean canPlaceCoverItemAtSide (byte aSide, ItemStack aCover);
+ public boolean dropCover (byte aSide, byte aDroppedSide, boolean aForced);
+ public void setCoverDataAtSide (byte aSide, int aData);
+ public void setCoverIDAtSide (byte aSide, int aID);
+ public void setCoverItemAtSide (byte aSide, ItemStack aCover);
+ public int getCoverDataAtSide (byte aSide);
+ public int getCoverIDAtSide (byte aSide);
+ public ItemStack getCoverItemAtSide (byte aSide);
+ public GT_CoverBehavior getCoverBehaviorAtSide (byte aSide);
+
+ /**
+ * For use by the regular MetaTileEntities. Returns the Cover Manipulated input Redstone.
+ * Don't use this if you are a Cover Behavior. Only for MetaTileEntities.
+ */
+ public byte getInternalInputRedstoneSignal(byte aSide);
+
+ /**
+ * For use by the regular MetaTileEntities. This makes it not conflict with Cover based Redstone Signals.
+ * Don't use this if you are a Cover Behavior. Only for MetaTileEntities.
+ */
+ public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength);
+
+ /**
+ * Causes a general Cover Texture update.
+ * Sends 6 Integers to Client + causes @issueTextureUpdate()
+ */
+ public void issueCoverUpdate(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IDigitalChest.java b/src/main/java/gregtech/api/interfaces/tileentity/IDigitalChest.java
new file mode 100644
index 0000000000..d017a1d7c4
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IDigitalChest.java
@@ -0,0 +1,29 @@
+package gregtech.api.interfaces.tileentity;
+
+import net.minecraft.item.ItemStack;
+
+/**
+ * You are allowed to include this File in your Download, as i will not change it.
+ */
+public interface IDigitalChest extends IHasWorldObjectAndCoords {
+ /**
+ * Is this even a TileEntity of a Digital Chest?
+ * I need things like this Function for MetaTileEntities, you MUST check this!!!
+ * Do not assume that it's a Digital Chest or similar Device, when it just implements this Interface.
+ */
+ public boolean isDigitalChest();
+ /**
+ * Gives an Array of Stacks with Size (of all the Data-stored Items) of the correspondent Item kinds (regular QChests have only one)
+ * Does NOT include the 64 "ready" Items inside the Slots, and neither the 128 Items in the overflow Buffer.
+ */
+ public ItemStack[] getStoredItemData();
+ /**
+ * A generic Interface for just setting the amount of contained Items
+ */
+ public void setItemCount(int aCount);
+
+ /**
+ * Gets the maximum Item count for this QChest alike Storage. This applies to the Data-Storage, not for the up to 192 buffered Items!
+ */
+ public int getMaxItemCount();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java
new file mode 100644
index 0000000000..96684de6e3
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java
@@ -0,0 +1,40 @@
+package gregtech.api.interfaces.tileentity;
+
+import gregtech.api.enums.Materials;
+
+/**
+ * Informative Class for Cables. Not used for now.
+ *
+ * Not all Data might be reliable. This is just for Information sake.
+ */
+public interface IEnergyConductor extends IEnergyConnected {
+ /**
+ * @return if this is actually a Cable. (you must check this)
+ */
+ public boolean isConductor();
+
+ /**
+ * @return the maximum Voltage of the Cable.
+ */
+ public long getMaxVoltage();
+
+ /**
+ * @return the maximum Amperage of the Cable, per Wire.
+ */
+ public long getMaxAmperage();
+
+ /**
+ * @return the Loss of the Cable, per Meter.
+ */
+ public long getLossPerMeter();
+
+ /**
+ * @return the Material the Cable consists of. (may return Materials._NULL)
+ */
+ public Materials getCableMaterial();
+
+ /**
+ * @return the Material the Cable Insulation consists of. (may return Materials._NULL)
+ */
+ public Materials getInsulationMaterial();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java
new file mode 100644
index 0000000000..097493807d
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java
@@ -0,0 +1,89 @@
+package gregtech.api.interfaces.tileentity;
+
+import static gregtech.api.enums.GT_Values.V;
+import cofh.api.energy.IEnergyReceiver;
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Utility;
+import ic2.api.energy.tile.IEnergySink;
+import net.minecraft.init.Blocks;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * Interface for getting Connected to the GregTech Energy Network.
+ *
+ * This is all you need to connect to the GT Network.
+ * IColoredTileEntity is needed for not connecting differently coloured Blocks to each other.
+ * IHasWorldObjectAndCoords is needed for the InWorld related Stuff. @BaseTileEntity does implement most of that Interface.
+ */
+public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAndCoords {
+ /**
+ * Inject Energy Call for Electricity. Gets called by EnergyEmitters to inject Energy into your Block
+ *
+ * Note: you have to check for @inputEnergyFrom because the Network won't check for that by itself.
+ *
+ * @param aSide 0 - 5 = Vanilla Directions of YOUR Block the Energy gets inserted to. 6 = No specific Side (don't do Side checks for this Side)
+ * @return amount of used Amperes. 0 if not accepted anything.
+ */
+ public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage);
+
+ /**
+ * Sided Energy Input
+ */
+ public boolean inputEnergyFrom(byte aSide);
+
+ /**
+ * Sided Energy Output
+ */
+ public boolean outputsEnergyTo(byte aSide);
+
+ /**
+ * Utility for the Network
+ */
+ public static class Util {
+ /**
+ * Emits Energy to the E-net. Also compatible with adjacent IC2 TileEntities.
+ * @return the used Amperage.
+ */
+ public static final long emitEnergyToNetwork(long aVoltage, long aAmperage, IEnergyConnected aEmitter) {
+ long rUsedAmperes = 0;
+ for (byte i = 0, j = 0; i < 6 && aAmperage > rUsedAmperes; i++) if (aEmitter.outputsEnergyTo(i)) {
+ j = GT_Utility.getOppositeSide(i);
+ TileEntity tTileEntity = aEmitter.getTileEntityAtSide(i);
+ if (tTileEntity instanceof IEnergyConnected) {
+ if (aEmitter.getColorization() >= 0) {
+ byte tColor = ((IEnergyConnected)tTileEntity).getColorization();
+ if (tColor >= 0 && tColor != aEmitter.getColorization()) continue;
+ }
+ rUsedAmperes+=((IEnergyConnected)tTileEntity).injectEnergyUnits(j, aVoltage, aAmperage-rUsedAmperes);
+// } else if (tTileEntity instanceof IEnergySink) {
+// if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)aEmitter, ForgeDirection.getOrientation(j))) {
+// while (aAmperage > rUsedAmperes && ((IEnergySink)tTileEntity).demandedEnergyUnits() > 0 && ((IEnergySink)tTileEntity).injectEnergyUnits(ForgeDirection.getOrientation(j), aVoltage) < aVoltage) rUsedAmperes++;
+// }
+ } else if (tTileEntity instanceof IEnergySink) {
+ if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)aEmitter, ForgeDirection.getOrientation(j))) {
+ while (aAmperage > rUsedAmperes && ((IEnergySink)tTileEntity).getDemandedEnergy() > 0 && ((IEnergySink)tTileEntity).injectEnergy(ForgeDirection.getOrientation(j), aVoltage, aVoltage) < aVoltage) rUsedAmperes++;
+ }
+ } else if(GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver){
+ ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
+ int rfOut = (int) (aVoltage * GregTech_API.mEUtoRF / 100);
+ if(((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, rfOut, true)==rfOut){
+ ((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, rfOut, false); rUsedAmperes++;
+ }
+ if(GregTech_API.mRFExplosions && GregTech_API.sMachineExplosions && ((IEnergyReceiver)tTileEntity).getMaxEnergyStored(tDirection) < rfOut * 600){
+ if(rfOut > 32 * GregTech_API.mEUtoRF / 100) {
+ int aExplosionPower = rfOut;
+ float tStrength = aExplosionPower<V[0]?1.0F:aExplosionPower<V[1]?2.0F:aExplosionPower<V[2]?3.0F:aExplosionPower<V[3]?4.0F:aExplosionPower<V[4]?5.0F:aExplosionPower<V[4]*2?6.0F:aExplosionPower<V[5]?7.0F:aExplosionPower<V[6]?8.0F:aExplosionPower<V[7]?9.0F:10.0F;
+ int tX=tTileEntity.xCoord, tY=tTileEntity.yCoord, tZ=tTileEntity.zCoord;
+ World tWorld = tTileEntity.getWorldObj();
+ GT_Utility.sendSoundToPlayers(tWorld, GregTech_API.sSoundList.get(209), 1.0F, -1, tX, tY, tZ);
+ tWorld.setBlock(tX, tY, tZ, Blocks.air);
+ if (GregTech_API.sMachineExplosions) tWorld.createExplosion(null, tX+0.5, tY+0.5, tZ+0.5, tStrength, true);}
+ }
+ }
+ }
+ return rUsedAmperes;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IExperimentalEnergyTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IExperimentalEnergyTileEntity.java
new file mode 100644
index 0000000000..9bb3fec13e
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IExperimentalEnergyTileEntity.java
@@ -0,0 +1,86 @@
+package gregtech.api.interfaces.tileentity;
+
+import static gregtech.api.enums.GT_Values.F;
+import static gregtech.api.enums.GT_Values.T;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_Utility;
+import ic2.api.energy.tile.IEnergySink;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+import cofh.api.energy.IEnergyReceiver;
+
+/**
+ * THIS IS GOING TO BE USED IN 1.8
+ *
+ * Interface for getting Connected to the GregTech Energy Network.
+ *
+ * This is all you need to connect to the GT Network.
+ * IColoredTileEntity is needed for not connecting differently coloured Blocks to each other.
+ * IHasWorldObjectAndCoords is needed for the InWorld related Stuff. @BaseTileEntity does implement most of that Interface.
+ */
+public interface IExperimentalEnergyTileEntity extends IColoredTileEntity, IHasWorldObjectAndCoords {
+ /**
+ * Inject Energy Call for Electricity. Gets called by EnergyEmitters to inject Energy into your Block
+ *
+ * Note: you have to check for @inputEnergyFrom because the Network won't check for that by itself.
+ *
+ * @param aSide 0 - 5 = Vanilla Directions of YOUR Block the Energy gets inserted to. 6 = No specific Side (don't do Side checks for this Side)
+ * @return amount of used Amperes. 0 if not accepted anything.
+ */
+ public long injectEnergy(SubTag aEnergyType, byte aSide, long aPrimary, long aSecondary);
+
+ /** Sided Energy Input */
+ public boolean inputEnergyFrom(SubTag aEnergyType, byte aSide);
+
+ /** Sided Energy Output */
+ public boolean outputsEnergyTo(SubTag aEnergyType, byte aSide);
+
+ /** Utility for the Network */
+ public static class Util {
+ private static boolean RF_ENERGY = F, IC_ENERGY = F, CHECK_ALL = T;
+ public static int RF_PER_EU = 4;
+
+ private static void checkAvailabilities() {
+ if (CHECK_ALL) {
+ try {
+ Class tClass = cofh.api.energy.IEnergyReceiver.class;
+ tClass.getCanonicalName();
+ RF_ENERGY = T;
+ } catch(Throwable e) {/**/}
+ try {
+ Class tClass = ic2.api.energy.tile.IEnergySink.class;
+ tClass.getCanonicalName();
+ IC_ENERGY = T;
+ } catch(Throwable e) {/**/}
+ CHECK_ALL = F;
+ }
+ }
+
+ /**
+ * Emits Energy to the adjacent Blocks. Also compatible with adjacent IC2 TileEntities when electric and RF TileEntities when RedstoneFlux.
+ * @return the amount of used secondary value.
+ */
+ public static final long emitEnergyToNetwork(SubTag aEnergyType, long aPrimary, long aSecondary, IExperimentalEnergyTileEntity aEmitter) {
+ long rUsedSecondary = 0;
+ checkAvailabilities();
+ for (byte i = 0, j = 0; i < 6 && aSecondary > rUsedSecondary; i++) if (aEmitter.outputsEnergyTo(aEnergyType, i)) {
+ j = GT_Utility.getOppositeSide(i);
+ TileEntity tTileEntity = aEmitter.getTileEntityAtSide(i);
+ if (tTileEntity instanceof IExperimentalEnergyTileEntity) {
+ if (aEmitter.getColorization() >= 0) {
+ byte tColor = ((IExperimentalEnergyTileEntity)tTileEntity).getColorization();
+ if (tColor >= 0 && tColor != aEmitter.getColorization()) continue;
+ }
+ rUsedSecondary+=((IExperimentalEnergyTileEntity)tTileEntity).injectEnergy(aEnergyType, j, aPrimary, aSecondary-rUsedSecondary);
+ } else if (IC_ENERGY && aEnergyType == SubTag.ENERGY_ELECTRICITY && tTileEntity instanceof IEnergySink) {
+ if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)aEmitter, ForgeDirection.getOrientation(j))) {
+ while (aSecondary > rUsedSecondary && ((IEnergySink)tTileEntity).getDemandedEnergy() > 0 && ((IEnergySink)tTileEntity).injectEnergy(ForgeDirection.getOrientation(j), aPrimary, aPrimary) < aPrimary) rUsedSecondary++;
+ }
+ } else if (RF_ENERGY && aEnergyType == SubTag.ENERGY_REDSTONE_FLUX && tTileEntity instanceof IEnergyReceiver && ((IEnergyReceiver)tTileEntity).canConnectEnergy(ForgeDirection.getOrientation(j))) {
+ rUsedSecondary+=((IEnergyReceiver)tTileEntity).receiveEnergy(ForgeDirection.getOrientation(j), (int)aSecondary, F);
+ }
+ }
+ return rUsedSecondary;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IFibreConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IFibreConnected.java
new file mode 100644
index 0000000000..7694b3d1c3
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IFibreConnected.java
@@ -0,0 +1,31 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * This File has just internal Information about the Fibre Redstone State of a TileEntity
+ */
+public interface IFibreConnected extends IColoredTileEntity, IHasWorldObjectAndCoords {
+ /**
+ * If this Blocks accepts Fibre from this Side
+ */
+ public void inputFibreFrom(byte aSide);
+
+ /**
+ * If this Blocks emits Fibre to this Side
+ */
+ public void outputsFibreTo(byte aSide);
+
+ /**
+ * Sets the Signal this Blocks outputs to this Fibre Color
+ */
+ public void setFibreOutput(byte aSide, byte aColor, byte aRedstoneStrength);
+
+ /**
+ * Gets the Signal this Blocks outputs to this Fibre Color
+ */
+ public byte getFibreOutput(byte aSide, byte aColor);
+
+ /**
+ * Gets the Signal this Blocks receives from this Fibre Color
+ */
+ public byte getFibreInput(byte aSide, byte aColor);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGearEnergyTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IGearEnergyTileEntity.java
new file mode 100644
index 0000000000..6ae032b874
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IGearEnergyTileEntity.java
@@ -0,0 +1,16 @@
+package gregtech.api.interfaces.tileentity;
+
+public interface IGearEnergyTileEntity {
+ /**
+ * If Rotation Energy can be accepted on this Side.
+ * This means that the Gear/Axle will connect to this Side, and can cause the Gear/Axle to stop if the Energy isn't accepted.
+ */
+ public boolean acceptsRotationalEnergy(byte aSide);
+
+ /**
+ * Inject Energy Call for Rotational Energy.
+ * Rotation Energy can't be stored, this is just for things like internal Dynamos, which convert it into Energy, or into Progress.
+ * @param aSpeed Positive = Clockwise, Negative = Counterclockwise
+ */
+ public boolean injectRotationalEnergy(byte aSide, long aSpeed, long aEnergy);
+}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java
new file mode 100644
index 0000000000..f6393f5d10
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java
@@ -0,0 +1,20 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * You are allowed to include this File in your Download, as i will not change it.
+ */
+public interface IGregTechDeviceInformation {
+ /**
+ * Is this even a TileEntity which allows GregTech Sensor Kits?
+ * I need things like this Function for MetaTileEntities, you MUST check this!!!
+ * Do not assume that it's a Information returning Device, when it just implements this Interface.
+ */
+ public boolean isGivingInformation();
+
+ /**
+ * Up to 8 Strings can be returned.
+ * Note: If you insert "\\\\" in the String it tries to translate seperate Parts of the String instead of the String as a whole.
+ * @return an Array of Information Strings. Don't return null!
+ */
+ public String[] getInfoData();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java
new file mode 100644
index 0000000000..7419214dcb
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java
@@ -0,0 +1,124 @@
+package gregtech.api.interfaces.tileentity;
+
+import gregtech.api.interfaces.IDescribable;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.IFluidHandler;
+
+/**
+ * A simple compound Interface for all my TileEntities.
+ *
+ * Also delivers most of the Informations about my TileEntities.
+ *
+ * It can cause Problems to include this Interface!
+ */
+public interface IGregTechTileEntity extends ITexturedTileEntity, IGearEnergyTileEntity, ICoverable, IFluidHandler, ITurnable, IGregTechDeviceInformation, IUpgradableMachine, IDigitalChest, IDescribable, IMachineBlockUpdateable {
+ /**
+ * gets the Error displayed on the GUI
+ */
+ public int getErrorDisplayID();
+
+ /**
+ * sets the Error displayed on the GUI
+ */
+ public void setErrorDisplayID(int aErrorID);
+
+ /**
+ * @return the MetaID of the Block or the MetaTileEntity ID.
+ */
+ public int getMetaTileID();
+
+ /**
+ * Internal Usage only!
+ */
+ public int setMetaTileID(short aID);
+
+ /**
+ * @return the MetaTileEntity which is belonging to this, or null if it doesnt has one.
+ */
+ public IMetaTileEntity getMetaTileEntity();
+
+ /**
+ * Sets the MetaTileEntity.
+ * Even though this uses the Universal Interface, certain BaseMetaTileEntities only accept one kind of MetaTileEntity
+ * so only use this if you are sure its the correct one or you will get a Class cast Error.
+ * @param aMetaTileEntity
+ */
+ public void setMetaTileEntity(IMetaTileEntity aMetaTileEntity);
+
+ /**
+ * Causes a general Texture update.
+ *
+ * Only used Client Side to mark Blocks dirty.
+ */
+ public void issueTextureUpdate();
+
+ /**
+ * Causes the Machine to send its initial Data, like Covers and its ID.
+ */
+ public void issueClientUpdate();
+
+ /**
+ * causes Explosion. Strength in Overload-EU
+ */
+ public void doExplosion(long aExplosionEU);
+
+ /**
+ * Sets the Block on Fire in all 6 Directions
+ */
+ public void setOnFire();
+
+ /**
+ * Sets the Block to Fire
+ */
+ public void setToFire();
+
+ /**
+ * Sets the Owner of the Machine. Returns the set Name.
+ */
+ public String setOwnerName(String aName);
+
+ /**
+ * gets the Name of the Machines Owner or "Player" if not set.
+ */
+ public String getOwnerName();
+
+ /**
+ * Sets initial Values from NBT
+ * @param tNBT is the NBTTag of readFromNBT
+ * @param aID is the MetaTileEntityID
+ */
+ public void setInitialValuesAsNBT(NBTTagCompound aNBT, short aID);
+
+ /**
+ * Called when leftclicking the TileEntity
+ */
+ public void onLeftclick(EntityPlayer aPlayer);
+
+ /**
+ * Called when rightclicking the TileEntity
+ */
+ public boolean onRightclick(EntityPlayer aPlayer, byte aSide, float par1, float par2, float par3);
+
+ public float getBlastResistance(byte aSide);
+
+ public ArrayList<ItemStack> getDrops();
+
+ /**
+ * 255 = 100%
+ */
+ public int getLightOpacity();
+
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider);
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ);
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java b/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java
new file mode 100644
index 0000000000..3b3d4ee75d
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java
@@ -0,0 +1,33 @@
+package gregtech.api.interfaces.tileentity;
+
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+
+public interface IHasInventory extends ISidedInventory, IHasWorldObjectAndCoords {
+
+ /**
+ * if the Inventory of this TileEntity got modified this tick
+ */
+ public boolean hasInventoryBeenModified();
+
+ /**
+ * if this is just a Holoslot
+ */
+ public boolean isValidSlot(int aIndex);
+
+ /**
+ * Tries to add a Stack to the Slot.
+ * It doesn't matter if the Slot is valid or invalid as described at the Function above.
+ *
+ * @return true if aStack == null, then false if aIndex is out of bounds, then false if aStack cannot be added, and then true if aStack has been added
+ */
+ public boolean addStackToSlot(int aIndex, ItemStack aStack);
+
+ /**
+ * Tries to add X Items of a Stack to the Slot.
+ * It doesn't matter if the Slot is valid or invalid as described at the Function above.
+ *
+ * @return true if aStack == null, then false if aIndex is out of bounds, then false if aStack cannot be added, and then true if aStack has been added
+ */
+ public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java b/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java
new file mode 100644
index 0000000000..c6ebb56e40
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java
@@ -0,0 +1,132 @@
+package gregtech.api.interfaces.tileentity;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.fluids.IFluidHandler;
+
+/**
+ * This is a bunch of Functions my TileEntities provide, to make life much easier, and to get rid of internal TileEntity stuff.
+ *
+ * This also makes access to adjacent TileEntities more Efficient.
+ *
+ * Note: It doesn't have to be a TileEntity in certain cases! And only certain cases, such as the Recipe checking of the findRecipe Function.
+ */
+public interface IHasWorldObjectAndCoords {
+ public World getWorld();
+ public int getXCoord();
+ public short getYCoord();
+ public int getZCoord();
+
+ public boolean isServerSide();
+ public boolean isClientSide();
+
+ public int getRandomNumber(int aRange);
+
+ public TileEntity getTileEntity(int aX, int aY, int aZ);
+ public TileEntity getTileEntityOffset(int aX, int aY, int aZ);
+ public TileEntity getTileEntityAtSide(byte aSide);
+ public TileEntity getTileEntityAtSideAndDistance(byte aSide, int aDistance);
+
+ public IInventory getIInventory(int aX, int aY, int aZ);
+ public IInventory getIInventoryOffset(int aX, int aY, int aZ);
+ public IInventory getIInventoryAtSide(byte aSide);
+ public IInventory getIInventoryAtSideAndDistance(byte aSide, int aDistance);
+
+ public IFluidHandler getITankContainer(int aX, int aY, int aZ);
+ public IFluidHandler getITankContainerOffset(int aX, int aY, int aZ);
+ public IFluidHandler getITankContainerAtSide(byte aSide);
+ public IFluidHandler getITankContainerAtSideAndDistance(byte aSide, int aDistance);
+
+ public IGregTechTileEntity getIGregTechTileEntity(int aX, int aY, int aZ);
+ public IGregTechTileEntity getIGregTechTileEntityOffset(int aX, int aY, int aZ);
+ public IGregTechTileEntity getIGregTechTileEntityAtSide(byte aSide);
+ public IGregTechTileEntity getIGregTechTileEntityAtSideAndDistance(byte aSide, int aDistance);
+
+ public Block getBlock(int aX, int aY, int aZ);
+ public Block getBlockOffset(int aX, int aY, int aZ);
+ public Block getBlockAtSide(byte aSide);
+ public Block getBlockAtSideAndDistance(byte aSide, int aDistance);
+
+ public byte getMetaID(int aX, int aY, int aZ);
+ public byte getMetaIDOffset(int aX, int aY, int aZ);
+ public byte getMetaIDAtSide(byte aSide);
+ public byte getMetaIDAtSideAndDistance(byte aSide, int aDistance);
+
+ public byte getLightLevel(int aX, int aY, int aZ);
+ public byte getLightLevelOffset(int aX, int aY, int aZ);
+ public byte getLightLevelAtSide(byte aSide);
+ public byte getLightLevelAtSideAndDistance(byte aSide, int aDistance);
+
+ public boolean getOpacity(int aX, int aY, int aZ);
+ public boolean getOpacityOffset(int aX, int aY, int aZ);
+ public boolean getOpacityAtSide(byte aSide);
+ public boolean getOpacityAtSideAndDistance(byte aSide, int aDistance);
+
+ public boolean getSky(int aX, int aY, int aZ);
+ public boolean getSkyOffset(int aX, int aY, int aZ);
+ public boolean getSkyAtSide(byte aSide);
+ public boolean getSkyAtSideAndDistance(byte aSide, int aDistance);
+
+ public boolean getAir(int aX, int aY, int aZ);
+ public boolean getAirOffset(int aX, int aY, int aZ);
+ public boolean getAirAtSide(byte aSide);
+ public boolean getAirAtSideAndDistance(byte aSide, int aDistance);
+
+ public BiomeGenBase getBiome();
+ public BiomeGenBase getBiome(int aX, int aZ);
+
+ public int getOffsetX(byte aSide, int aMultiplier);
+ public short getOffsetY(byte aSide, int aMultiplier);
+ public int getOffsetZ(byte aSide, int aMultiplier);
+
+ /**
+ * Checks if the TileEntity is Invalid or Unloaded. Stupid Minecraft cannot do that btw.
+ */
+ public boolean isDead();
+
+ /**
+ * Sends a Block Event to the Client TileEntity, the byte Parameters are only for validation as Minecraft doesn't properly write Packet Data.
+ */
+ public void sendBlockEvent(byte aID, byte aValue);
+
+ /**
+ * @return the Time this TileEntity has been loaded.
+ */
+ public long getTimer();
+
+ /**
+ * Sets the Light Level of this Block on a Scale of 0 - 15
+ * It could be that it doesn't work. This is just for convenience.
+ */
+ public void setLightValue(byte aLightValue);
+
+ /**
+ * Function of the regular TileEntity
+ */
+ public void writeToNBT(NBTTagCompound aNBT);
+
+ /**
+ * Function of the regular TileEntity
+ */
+ public void readFromNBT(NBTTagCompound aNBT);
+
+ /**
+ * Function of the regular TileEntity
+ */
+ public boolean isInvalidTileEntity();
+
+ /**
+ * Opens the GUI with this ID of this MetaTileEntity
+ */
+ public boolean openGUI(EntityPlayer aPlayer, int aID);
+
+ /**
+ * Opens the GUI with the ID = 0 of this TileEntity
+ */
+ public boolean openGUI(EntityPlayer aPlayer);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IMachineBlockUpdateable.java b/src/main/java/gregtech/api/interfaces/tileentity/IMachineBlockUpdateable.java
new file mode 100644
index 0000000000..ba8650f245
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IMachineBlockUpdateable.java
@@ -0,0 +1,16 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * You are allowed to include this File in your Download, as i will not change it.
+ * Simple Interface for Machines, which need my Machine Blocks for MultiBlockStructures.
+ *
+ * Every Machine implementing this Interface will conduct Machine updates.
+ */
+public interface IMachineBlockUpdateable {
+ /**
+ * The Machine Update, which is called when the Machine needs an Update of its Parts.
+ * I suggest to wait 1-5 seconds before actually checking the Machine Parts.
+ * RP-Frames could for example cause Problems when you instacheck the Machine Parts.
+ */
+ public void onMachineBlockUpdate();
+}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java b/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java
new file mode 100644
index 0000000000..78f238aa3e
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java
@@ -0,0 +1,69 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * For Machines which have Progress
+ */
+public interface IMachineProgress extends IHasWorldObjectAndCoords {
+ /**
+ * returns the Progress this Machine has made. Warning, this can also be negative!
+ */
+ public int getProgress();
+
+ /**
+ * returns the Progress the Machine needs to complete its task.
+ */
+ public int getMaxProgress();
+
+ /**
+ * increases the Progress of the Machine
+ */
+ public boolean increaseProgress(int aProgressAmountInTicks);
+
+ /**
+ * returns if the Machine currently does something.
+ */
+ public boolean hasThingsToDo();
+
+ /**
+ * returns if the Machine just got enableWorking called after being disabled.
+ * Used for Translocators, which need to check if they need to transfer immediately.
+ */
+ public boolean hasWorkJustBeenEnabled();
+
+ /**
+ * allows Machine to work
+ */
+ public void enableWorking();
+
+ /**
+ * disallows Machine to work
+ */
+ public void disableWorking();
+
+ /**
+ * if the Machine is allowed to Work
+ */
+ public boolean isAllowedToWork();
+
+ /**
+ * used to control Machines via Redstone Signal Strength by special Covers
+ * only Values between 0 and 15!
+ */
+ public void setWorkDataValue(byte aValue);
+
+ /**
+ * used to control Machines via Redstone Signal Strength by special Covers
+ * In case of 0 the Machine is very likely doing nothing, or is just not being controlled at all.
+ */
+ public byte getWorkDataValue();
+
+ /**
+ * gives you the Active Status of the Machine
+ */
+ public boolean isActive();
+
+ /**
+ * sets the visible Active Status of the Machine
+ */
+ public void setActive(boolean aActive);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IPipeRenderedTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IPipeRenderedTileEntity.java
new file mode 100644
index 0000000000..0ddc76a6d6
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IPipeRenderedTileEntity.java
@@ -0,0 +1,9 @@
+package gregtech.api.interfaces.tileentity;
+
+import gregtech.api.interfaces.ITexture;
+
+public interface IPipeRenderedTileEntity extends ICoverable, ITexturedTileEntity {
+ public float getThickNess();
+ public byte getConnections();
+ public ITexture[] getTextureUncovered(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java
new file mode 100644
index 0000000000..720f7e9bc5
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java
@@ -0,0 +1,37 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * This File has just internal Information about the Redstone State of a TileEntity
+ */
+public interface IRedstoneEmitter extends IHasWorldObjectAndCoords {
+ /**
+ * gets the Redstone Level the TileEntity should emit to the given Output Side
+ */
+ byte getOutputRedstoneSignal(byte aSide);
+
+ /**
+ * sets the Redstone Level the TileEntity should emit to the given Output Side
+ *
+ * Do not use this if ICoverable is implemented. ICoverable has @getInternalOutputRedstoneSignal for Machine internal Output Redstone, so that it doesnt conflict with Cover Redstone.
+ * This sets the true Redstone Output Signal. Only Cover Behaviors should use it, not MetaTileEntities.
+ */
+ void setOutputRedstoneSignal(byte aSide, byte aStrength);
+
+ /**
+ * gets the Redstone Level the TileEntity should emit to the given Output Side
+ */
+ byte getStrongOutputRedstoneSignal(byte aSide);
+
+ /**
+ * sets the Redstone Level the TileEntity should emit to the given Output Side
+ *
+ * Do not use this if ICoverable is implemented. ICoverable has @getInternalOutputRedstoneSignal for Machine internal Output Redstone, so that it doesnt conflict with Cover Redstone.
+ * This sets the true Redstone Output Signal. Only Cover Behaviors should use it, not MetaTileEntities.
+ */
+ void setStrongOutputRedstoneSignal(byte aSide, byte aStrength);
+
+ /**
+ * Gets the Output for the comparator on the given Side
+ */
+ byte getComparatorValue(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneReceiver.java b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneReceiver.java
new file mode 100644
index 0000000000..f4c63c803e
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneReceiver.java
@@ -0,0 +1,29 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * This File has just internal Information about the Redstone State of a TileEntity
+ */
+public interface IRedstoneReceiver extends IHasWorldObjectAndCoords {
+ /**
+ * gets the Redstone Level of the TileEntity to the given Input Side
+ *
+ * Do not use this if ICoverable is implemented. ICoverable has @getInternalInputRedstoneSignal for Machine internal Input Redstone
+ * This returns the true incoming Redstone Signal. Only Cover Behaviors should check it, not MetaTileEntities.
+ */
+ public byte getInputRedstoneSignal(byte aSide);
+
+ /**
+ * gets the strongest Redstone Level the TileEntity receives
+ */
+ public byte getStrongestRedstone();
+
+ /**
+ * gets if the TileEntity receives Redstone
+ */
+ public boolean getRedstone();
+
+ /**
+ * gets if the TileEntity receives Redstone at this Side
+ */
+ public boolean getRedstone(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneTileEntity.java
new file mode 100644
index 0000000000..a1d2b533cb
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneTileEntity.java
@@ -0,0 +1,17 @@
+package gregtech.api.interfaces.tileentity;
+
+/**
+ * This File has just internal Information about the Redstone State of a TileEntity
+ */
+public interface IRedstoneTileEntity extends IRedstoneEmitter, IRedstoneReceiver {
+ /**
+ * enables/disables Redstone Output in general.
+ */
+ void setGenericRedstoneOutput(boolean aOnOff);
+
+ /**
+ * Causes a general Block update.
+ * Sends nothing to Client, just causes a Block Update.
+ */
+ public void issueBlockUpdate();
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ITexturedTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/ITexturedTileEntity.java
new file mode 100644
index 0000000000..3c0782ba2e
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ITexturedTileEntity.java
@@ -0,0 +1,10 @@
+package gregtech.api.interfaces.tileentity;
+
+import gregtech.api.interfaces.ITexture;
+
+public interface ITexturedTileEntity {
+ /**
+ * @return the Textures rendered by the GT Rendering
+ */
+ public ITexture[] getTexture(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java b/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java
new file mode 100644
index 0000000000..1605bd677e
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java
@@ -0,0 +1,33 @@
+package gregtech.api.interfaces.tileentity;
+
+
+/**
+ * Implemented by all my Machines. However without any security checks, if the Players are even allowed to rotate it.
+ */
+public interface ITurnable {
+ /**
+ * Get the block's facing.
+ *
+ * @return front Block facing
+ */
+ byte getFrontFacing();
+
+ /**
+ * Get the block's back facing.
+ *
+ * @return opposite Block facing
+ */
+ byte getBackFacing();
+
+ /**
+ * Determine if the wrench can be used to set the block's facing.
+ */
+ boolean isValidFacing(byte aSide);
+
+ /**
+ * Set the block's facing
+ *
+ * @param facing facing to set the block to
+ */
+ void setFrontFacing(byte aSide);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IUpgradableMachine.java b/src/main/java/gregtech/api/interfaces/tileentity/IUpgradableMachine.java
new file mode 100644
index 0000000000..97360fd514
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IUpgradableMachine.java
@@ -0,0 +1,42 @@
+package gregtech.api.interfaces.tileentity;
+
+
+/**
+ * To access my Machines a bit easier
+ */
+public interface IUpgradableMachine extends IMachineProgress {
+ /**
+ * Accepts Upgrades. Some Machines have an Upgrade Limit.
+ */
+ boolean isUpgradable();
+
+ /**
+ * Accepts Muffler Upgrades
+ */
+ boolean isMufflerUpgradable();
+
+ /**
+ * Accepts Steam-Converter Upgrades
+ */
+ boolean isSteamEngineUpgradable();
+
+ /**
+ * Adds Muffler Upgrade
+ */
+ boolean addMufflerUpgrade();
+
+ /**
+ * Adds MJ-Converter Upgrade
+ */
+ boolean addSteamEngineUpgrade();
+
+ /**
+ * Does this Machine have an Muffler
+ */
+ boolean hasMufflerUpgrade();
+
+ /**
+ * Does this Machine have a Steam-Converter
+ */
+ boolean hasSteamEngineUpgrade();
+}
diff --git a/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java b/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java
new file mode 100644
index 0000000000..c24e3947f2
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java
@@ -0,0 +1,78 @@
+package gregtech.api.items;
+
+
+import ic2.api.reactor.IReactor;
+import ic2.api.reactor.IReactorComponent;
+import net.minecraft.item.ItemStack;
+
+public class GT_CoolantCellIC_Item
+ extends GT_CoolantCell_Item
+ implements IReactorComponent
+{
+ public GT_CoolantCellIC_Item(String aUnlocalized, String aEnglish, int aMaxStore)
+ {
+ super(aUnlocalized, aEnglish, aMaxStore);
+ }
+
+ public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {}
+
+ public boolean acceptUraniumPulse(IReactor aReactor, ItemStack aStack, ItemStack pulsingStack, int youX, int youY, int pulseX, int pulseY, boolean aHeatRun)
+ {
+ return false;
+ }
+
+ public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ if(aReactor.isFluidCooled()&&(getControlTagOfStack(aStack))!=0){
+ return false;
+ }
+ return true;
+ }
+
+ public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ return this.heatStorage;
+ }
+
+ public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ return getHeatOfStack(aStack);
+ }
+
+ public float influenceExplosion(IReactor aReactor, ItemStack aStack)
+ {
+ return 1.0F + this.heatStorage / 30000.0F;
+ }
+
+ public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat)
+ {
+
+ int tHeat = getHeatOfStack(aStack);
+ if ((tHeat == 0) && (getControlTagOfStack(aStack) != 0)) {
+ setControlTagOfStack(aStack, 0);
+ }
+ tHeat += aHeat;
+ if (tHeat > this.heatStorage)
+ {
+ aReactor.setItemAt(x, y, (ItemStack)null);
+ aHeat = this.heatStorage - tHeat + 1;
+ }
+ else
+ {
+ if (tHeat < 0)
+ {
+ aHeat = tHeat;
+ tHeat = 0;
+ }
+ else
+ {
+ aHeat = 0;
+ }
+ if ((tHeat > 0) && (getControlTagOfStack(aStack) == 0) && (!aReactor.isFluidCooled())) {
+ setControlTagOfStack(aStack, 1);
+ }
+ setHeatForStack(aStack, tHeat);
+ }
+ return aHeat;
+ }
+}
diff --git a/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java b/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java
new file mode 100644
index 0000000000..fe56ffc310
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java
@@ -0,0 +1,82 @@
+package gregtech.api.items;
+
+import gregtech.api.GregTech_API;
+import ic2.core.util.StackUtil;
+
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
+
+public class GT_CoolantCell_Item
+ extends GT_Generic_Item
+{
+ protected int heatStorage;
+
+ public GT_CoolantCell_Item(String aUnlocalized, String aEnglish, int aMaxStore)
+ {
+ super(aUnlocalized, aEnglish, null);
+ this.setMaxStackSize(1);
+ this.setMaxDamage(100);
+ setNoRepair();
+ this.heatStorage = aMaxStore;
+ this.setCreativeTab(GregTech_API.TAB_GREGTECH);
+ }
+
+ protected void setHeatForStack(ItemStack aStack, int aHeat)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ tNBT.setInteger("heat", aHeat);
+ if (this.heatStorage > 0)
+ {
+ double var4 = (double)aHeat / (double)this.heatStorage;
+ int var6 = (int)(aStack.getMaxDamage() * var4);
+ if (var6 >= aStack.getMaxDamage()) {
+ var6 = aStack.getMaxDamage() - 1;
+ }
+ aStack.setItemDamage(var6);
+ }
+ }
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ super.addAdditionalToolTips(aList, aStack);
+ aList.add("Stored Heat: " + getHeatOfStack(aStack));
+ switch (getControlTagOfStack(aStack))
+ {
+ case 1:
+ aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line1"));
+ aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line2"));
+ }
+ }
+
+ protected static int getHeatOfStack(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ return tNBT.getInteger("heat");
+ }
+
+ public int getControlTagOfStack(ItemStack stack)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ return nbtData.getInteger("tag");
+ }
+
+ public void setControlTagOfStack(ItemStack stack, int tag)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ nbtData.setInteger("tag", tag);
+ }
+
+}
diff --git a/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java b/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java
new file mode 100644
index 0000000000..4cbfd5445d
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java
@@ -0,0 +1,327 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_ITEM;
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemArmor;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraftforge.common.ISpecialArmor;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingFallEvent;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class GT_EnergyArmor_Item extends ItemArmor implements ISpecialArmor {
+ public int mCharge, mTransfer, mTier, mDamageEnergyCost, mSpecials;
+ public boolean mChargeProvider;
+ public double mArmorAbsorbtionPercentage;
+
+ public static Map jumpChargeMap = new HashMap();
+
+ public GT_EnergyArmor_Item(int aID, String aUnlocalized, String aEnglish, int aCharge, int aTransfer, int aTier, int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, int aType, int aArmorIndex) {
+ super(ArmorMaterial.DIAMOND, aArmorIndex, aType);
+ setMaxStackSize(1);
+ setMaxDamage(100);
+ setNoRepair();
+ setUnlocalizedName(aUnlocalized);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".name", aEnglish);
+ mCharge = Math.max(1, aCharge);
+ mTransfer = Math.max(1, aTransfer);
+ mTier = Math.max(1, aTier);
+ mSpecials = aSpecials;
+ mChargeProvider = aChargeProvider;
+ mDamageEnergyCost = Math.max(0, aDamageEnergyCost);
+ mArmorAbsorbtionPercentage = aArmorAbsorbtionPercentage;
+
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ ItemStack tStack = aPlayer.inventory.armorInventory[3-armorType];
+ if (tStack != null) {
+ for (int i = 0; i < 9; i++) {
+ if (aPlayer.inventory.mainInventory[i] == aStack) {
+ aPlayer.inventory.armorInventory[3-armorType] = aPlayer.inventory.mainInventory[i];
+ aPlayer.inventory.mainInventory[i] = tStack;
+ return tStack;
+ }
+ }
+ }
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister) {
+ this.itemIcon = aIconRegister.registerIcon(RES_PATH_ITEM + getUnlocalizedName());
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ aList.add("Tier: " + mTier);
+ if ((mSpecials & 1) != 0) aList.add("Rebreather");
+ if ((mSpecials & 2) != 0) aList.add("Inertia Damper");
+ if ((mSpecials & 4) != 0) aList.add("Food Replicator");
+ if ((mSpecials & 8) != 0) aList.add("Medicine Module");
+ if ((mSpecials & 16) != 0) aList.add("Lamp");
+ if ((mSpecials & 32) != 0) aList.add("Solarpanel");
+ if ((mSpecials & 64) != 0) aList.add("Extinguisher Module");
+ if ((mSpecials & 128) != 0) aList.add("Jump Booster");
+ if ((mSpecials & 256) != 0) aList.add("Speed Booster");
+ if ((mSpecials & 512) != 0) aList.add("Invisibility Field");
+ if ((mSpecials & 1024) != 0) aList.add("Infinite Charge");
+ }
+
+ private static void setCharge(ItemStack aStack) {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound();
+ tNBT.setInteger("charge", 1000000000);
+ aStack.setTagCompound(tNBT);
+ }
+
+ @Override
+ public void onArmorTick(World aWorld, EntityPlayer aPlayer, ItemStack aStack) {
+ if (mSpecials == 0) return;
+
+ if (!aPlayer.worldObj.isRemote && (mSpecials & 1) != 0) {
+ int var4 = aPlayer.getAir();
+ if (GT_ModHandler.canUseElectricItem(aStack, 1000) && var4 < 50) {
+ aPlayer.setAir(var4 + 250);
+ GT_ModHandler.useElectricItem(aStack, 1000, aPlayer);
+ }
+ }
+
+ if (!aPlayer.worldObj.isRemote && (mSpecials & 4) != 0) {
+ if (GT_ModHandler.canUseElectricItem(aStack, 50000) && aPlayer.getFoodStats().needFood()) {
+ aPlayer.getFoodStats().addStats(1, 0.0F);
+ GT_ModHandler.useElectricItem(aStack, 50000, aPlayer);
+ }
+ }
+
+ if ((mSpecials & 8) != 0) {
+ if (GT_ModHandler.canUseElectricItem(aStack, 10000) && aPlayer.isPotionActive(Potion.poison)) {
+ GT_Utility.removePotion(aPlayer, Potion.poison.id);
+ GT_ModHandler.useElectricItem(aStack, 10000, aPlayer);
+ }
+ if (GT_ModHandler.canUseElectricItem(aStack, 100000) && aPlayer.isPotionActive(Potion.wither)) {
+ GT_Utility.removePotion(aPlayer, Potion.wither.id);
+ GT_ModHandler.useElectricItem(aStack, 100000, aPlayer);
+ }
+ }
+
+ if ((mSpecials & 64) != 0) {
+ aPlayer.setFire(0);
+ }
+
+ if (!aPlayer.worldObj.isRemote && (mSpecials & 128) != 0) {
+ float var6 = jumpChargeMap.containsKey(aPlayer) ? ((Float)jumpChargeMap.get(aPlayer)).floatValue() : 1.0F;
+
+ if (GT_ModHandler.canUseElectricItem(aStack, 1000) && aPlayer.onGround && var6 < 1.0F) {
+ var6 = 1.0F;
+ GT_ModHandler.useElectricItem(aStack, 1000, aPlayer);
+ }
+
+ if (aPlayer.motionY >= 0.0D && var6 > 0.0F && !aPlayer.isInWater()) {
+ if (GT_ModHandler.getJumpKeyDown(aPlayer) && GT_ModHandler.getBoostKeyDown(aPlayer)) {
+ if (var6 == 1.0F) {
+ aPlayer.motionX *= 3.5D;
+ aPlayer.motionZ *= 3.5D;
+ }
+
+ aPlayer.motionY += (var6 * 0.3F);
+ var6 = (float)(var6 * 0.75D);
+ } else if (var6 < 1.0F) {
+ var6 = 0.0F;
+ }
+ }
+
+ jumpChargeMap.put(aPlayer, Float.valueOf(var6));
+ }
+
+ if ((mSpecials & 256) != 0) {
+ if (GT_ModHandler.canUseElectricItem(aStack, 100) && aPlayer.isSprinting() && (aPlayer.onGround && Math.abs(aPlayer.motionX) + Math.abs(aPlayer.motionZ) > 0.10000000149011612D || aPlayer.isInWater())) {
+ GT_ModHandler.useElectricItem(aStack, 100, aPlayer);
+ float var7 = 0.22F;
+
+ if (aPlayer.isInWater()) {
+ GT_ModHandler.useElectricItem(aStack, 100, aPlayer);
+ var7 = 0.1F;
+
+
+ if (aPlayer.motionY > 0) {
+ aPlayer.motionY += 0.10000000149011612D;
+ }
+ }
+
+ if (var7 > 0.0F) {
+ aPlayer.moveFlying(0.0F, 1.0F, var7);
+ }
+ }
+ }
+
+ if ((mSpecials & 512) != 0) {
+ if (GT_ModHandler.canUseElectricItem(aStack, 10000)) {
+ GT_ModHandler.useElectricItem(aStack, 10000, aPlayer);
+ aPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), 25, 1, true));
+ }
+ }
+
+ if (!aPlayer.worldObj.isRemote && (mSpecials & (16|32)) != 0) {
+ //if (GregTech_API.sWorldTickCounter%20==0) {
+ ItemStack tTargetChargeItem = aStack, tTargetDechargeItem = aStack;
+
+ if (GT_ModHandler.chargeElectricItem(tTargetChargeItem, 1, Integer.MAX_VALUE, true, true) < 1) {
+ tTargetChargeItem = aPlayer.inventory.armorInventory[2];
+ }
+ if (GT_ModHandler.dischargeElectricItem(tTargetDechargeItem, 10, Integer.MAX_VALUE, true, true, true) < 10) {
+ tTargetDechargeItem = aPlayer.inventory.armorInventory[2];
+ }
+
+ if (tTargetChargeItem == null || !GT_ModHandler.isElectricItem(tTargetChargeItem)) {
+ tTargetChargeItem = null;
+ }
+ if (tTargetDechargeItem == null || !GT_ModHandler.isElectricItem(tTargetChargeItem) || !(aStack == tTargetDechargeItem || GT_ModHandler.isChargerItem(tTargetDechargeItem))) {
+ tTargetDechargeItem = null;
+ }
+
+ if (aPlayer.worldObj.isDaytime() && aPlayer.worldObj.canBlockSeeTheSky(MathHelper.floor_double(aPlayer.posX), MathHelper.floor_double(aPlayer.posY+1), MathHelper.floor_double(aPlayer.posZ))) {
+ if ((mSpecials & 32) != 0 && tTargetChargeItem != null) {
+ GT_ModHandler.chargeElectricItem(tTargetChargeItem, 20, Integer.MAX_VALUE, true, false);
+ }
+ } else {
+ /* TODO:
+ if ((mSpecials & 16) != 0 && tTargetDechargeItem != null && GT_ModHandler.canUseElectricItem(tTargetDechargeItem, 10)) {
+ if (aPlayer.worldObj.getBlock ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ) == Blocks.air)
+ aPlayer.worldObj.setBlock ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ, GregTech_API.sBlockList[3]);
+ GT_ModHandler.useElectricItem(tTargetDechargeItem, 10, aPlayer);
+ }*/
+ //}
+ }
+ }
+ }
+
+ @Override
+ public boolean getShareTag() {
+ return true;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item aItem, CreativeTabs var2, List var3) {
+ ItemStack tCharged = new ItemStack(this, 1), tUncharged = new ItemStack(this, 1, getMaxDamage());
+ GT_ModHandler.chargeElectricItem(tCharged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false);
+ var3.add(tCharged);
+ var3.add(tUncharged);
+ }
+
+ public boolean canProvideEnergy(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return mChargeProvider;
+ }
+
+ public Item getChargedItem(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return this;
+ }
+
+ public Item getEmptyItem(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return this;
+ }
+
+ public int getMaxCharge(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return mCharge;
+ }
+
+ public int getTier(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return mTier;
+ }
+
+ public int getTransferLimit(ItemStack aStack) {
+ if ((mSpecials & 1024) != 0) setCharge(aStack);
+ return mTransfer;
+ }
+
+ @Override
+ public int getItemEnchantability() {
+ return 0;
+ }
+
+ @Override
+ public boolean isBookEnchantable(ItemStack itemstack1, ItemStack itemstack2) {
+ return false;
+ }
+
+ @Override
+ public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
+ return false;
+ }
+
+ // TODO: @ForgeSubscribe
+ public void onEntityLivingFallEvent(LivingFallEvent var1) {
+ if (!var1.entity.worldObj.isRemote && var1.entity instanceof EntityPlayer) {
+ EntityPlayer var2 = (EntityPlayer)var1.entity;
+ for (int i = 0; i < 4; i++) {
+ ItemStack var3 = var2.inventory.armorInventory[i];
+ if (var3 != null && var3.getItem() == this && (mSpecials & 2) != 0) {
+ int var4 = (int)var1.distance - 3;
+ int var5 = (this.mDamageEnergyCost * var4) / 4;
+ if (var5 <= GT_ModHandler.dischargeElectricItem(var3, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true)) {
+ GT_ModHandler.dischargeElectricItem(var3, var5, Integer.MAX_VALUE, true, false, true);
+ var1.setCanceled(true);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase var1, ItemStack var2, DamageSource var3, double var4, int var6) {
+ return new ISpecialArmor.ArmorProperties((var3 == DamageSource.fall && (mSpecials & 2) != 0)?10:0, getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage, mDamageEnergyCost > 0 ? 25 * GT_ModHandler.dischargeElectricItem(var2, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true) / mDamageEnergyCost : 0);
+ }
+
+ @Override
+ public int getArmorDisplay(EntityPlayer var1, ItemStack var2, int var3) {
+ return (int)Math.round(20.0D * getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage);
+ }
+
+ @Override
+ public void damageArmor(EntityLivingBase var1, ItemStack var2, DamageSource var3, int var4, int var5) {
+ GT_ModHandler.dischargeElectricItem(var2, var4 * mDamageEnergyCost, Integer.MAX_VALUE, true, false, true);
+ }
+
+ private double getBaseAbsorptionRatio() {
+ if (mArmorAbsorbtionPercentage <= 0) return 0.00;
+ switch (this.armorType) {
+ case 0: return 0.15;
+ case 1: return 0.40;
+ case 2: return 0.30;
+ case 3: return 0.15;
+ default: return 0.00;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/items/GT_Generic_Block.java b/src/main/java/gregtech/api/items/GT_Generic_Block.java
new file mode 100644
index 0000000000..a4fd8b61a4
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Generic_Block.java
@@ -0,0 +1,19 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.item.ItemBlock;
+import cpw.mods.fml.common.registry.GameRegistry;
+
+public class GT_Generic_Block extends Block {
+ protected final String mUnlocalizedName;
+
+ protected GT_Generic_Block(Class<? extends ItemBlock> aItemClass, String aName, Material aMaterial) {
+ super(aMaterial);
+ setBlockName(mUnlocalizedName = aName);
+ GameRegistry.registerBlock(this, aItemClass, getUnlocalizedName());
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName()+"." + W + ".name", "Any Sub Block of this one");
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Generic_Item.java b/src/main/java/gregtech/api/items/GT_Generic_Item.java
new file mode 100644
index 0000000000..a90c13a204
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Generic_Item.java
@@ -0,0 +1,144 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.MOD_ID;
+import static gregtech.api.enums.GT_Values.RES_PATH_ITEM;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.IProjectileItem;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.List;
+
+import net.minecraft.block.BlockDispenser;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
+import net.minecraft.dispenser.BehaviorProjectileDispense;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.dispenser.IPosition;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.IProjectile;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur.
+ */
+public class GT_Generic_Item extends Item implements IProjectileItem {
+ protected IIcon mIcon;
+ private final String mName, mTooltip;
+
+ public GT_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip) {
+ this(aUnlocalized, aEnglish, aEnglishTooltip, true);
+ }
+
+ public GT_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip, boolean aWriteToolTipIntoLangFile) {
+ super();
+ mName = "gt." + aUnlocalized;
+ GT_LanguageManager.addStringLocalization(mName + ".name", aEnglish);
+ if (GT_Utility.isStringValid(aEnglishTooltip)) GT_LanguageManager.addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip, aWriteToolTipIntoLangFile); else mTooltip = null;
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ GameRegistry.registerItem(this, mName, MOD_ID);
+ BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense());
+ }
+
+ @Override public final Item setUnlocalizedName(String aName) {return this;}
+ @Override public final String getUnlocalizedName() {return mName;}
+ @Override public String getUnlocalizedName(ItemStack aStack) {return getHasSubtypes()?mName+"."+getDamage(aStack):mName;}
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister) {
+ mIcon = aIconRegister.registerIcon(RES_PATH_ITEM + (GT_Config.troll?"troll":mName));
+ }
+
+ @Override
+ public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int par1) {
+ return mIcon;
+ }
+
+ public int getTier(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ if (getMaxDamage() > 0 && !getHasSubtypes()) aList.add((aStack.getMaxDamage() - getDamage(aStack)) + " / " + aStack.getMaxDamage());
+ if (mTooltip != null) aList.add(GT_LanguageManager.getTranslation(mTooltip));
+ if (GT_ModHandler.isElectricItem(aStack)) aList.add("Tier: " + getTier(aStack));
+ addAdditionalToolTips(aList, aStack);
+ }
+
+ protected void addAdditionalToolTips(List aList, ItemStack aStack) {
+ //
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ isItemStackUsable(aStack);
+ }
+
+ public boolean isItemStackUsable(ItemStack aStack) {
+ return true;
+ }
+
+ public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) {
+ EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
+ IPosition iposition = BlockDispenser.func_149939_a(aSource);
+ ItemStack itemstack1 = aStack.splitStack(1);
+ BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
+ return aStack;
+ }
+
+ public static class GT_Item_Dispense extends BehaviorProjectileDispense {
+ @Override
+ public ItemStack dispenseStack(IBlockSource aSource, ItemStack aStack) {
+ return ((GT_Generic_Item)aStack.getItem()).onDispense(aSource, aStack);
+ }
+
+ @Override
+ protected IProjectile getProjectileEntity(World aWorld, IPosition aPosition) {
+ return null;
+ }
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ) {
+ return null;
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed) {
+ return null;
+ }
+
+ @Override
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public boolean hasContainerItem(ItemStack aStack) {
+ return getContainerItem(aStack) != null;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_MetaBase_Item.java b/src/main/java/gregtech/api/items/GT_MetaBase_Item.java
new file mode 100644
index 0000000000..4a0cd6f655
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_MetaBase_Item.java
@@ -0,0 +1,555 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.D1;
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import ic2.api.item.ElectricItem;
+import ic2.api.item.IElectricItem;
+import ic2.api.item.IElectricItemManager;
+import ic2.api.item.ISpecialElectricItem;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.inventory.Container;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+public abstract class GT_MetaBase_Item extends GT_Generic_Item implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem {
+ /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
+ private final HashMap<Short, ArrayList<IItemBehaviour<GT_MetaBase_Item>>> mItemBehaviors = new HashMap<Short, ArrayList<IItemBehaviour<GT_MetaBase_Item>>>();
+
+ /**
+ * Creates the Item using these Parameters.
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated.
+ */
+ public GT_MetaBase_Item(String aUnlocalized) {
+ super(aUnlocalized, "Generated Item", null, false);
+ setHasSubtypes(true);
+ setMaxDamage(0);
+ }
+
+ /**
+ * Adds a special Item Behaviour to the Item.
+ *
+ * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before.
+ *
+ * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765]
+ * @param aBehavior the Click Behavior you want to add.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final GT_MetaBase_Item addItemBehavior(int aMetaValue, IItemBehaviour<GT_MetaBase_Item> aBehavior) {
+ if (aMetaValue < 0 || aMetaValue >= 32766 || aBehavior == null) return this;
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)aMetaValue);
+ if (tList == null) {
+ tList = new ArrayList<IItemBehaviour<GT_MetaBase_Item>>(1);
+ mItemBehaviors.put((short)aMetaValue, tList);
+ }
+ tList.add(aBehavior);
+ return this;
+ }
+
+ public abstract Long[] getElectricStats(ItemStack aStack);
+ public abstract Long[] getFluidContainerStats(ItemStack aStack);
+
+ @Override
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) if (tBehavior.hasProjectile(this, aProjectileType, aStack)) return true;
+ return super.hasProjectile(aProjectileType, aStack);
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) {
+ EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ);
+ if (rArrow != null) return rArrow;
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ);
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) {
+ EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ if (rArrow != null) return rArrow;
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ }
+
+ @Override
+ public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) if (tBehavior.canDispense(this, aSource, aStack)) return tBehavior.onDispense(this, aSource, aStack);
+ return super.onDispense(aSource, aStack);
+ }
+
+ @Override
+ public boolean isItemStackUsable(ItemStack aStack) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) if (!tBehavior.isItemStackUsable(this, aStack)) return false;
+ return super.isItemStackUsable(aStack);
+ }
+
+ @Override
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) try {
+ if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) try {
+ if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) try {
+ if (tBehavior.onItemUseFirst(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) try {
+ aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer);
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return aStack;
+ }
+
+ @Override
+ public final void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ String tKey = getUnlocalizedName(aStack) + ".tooltip", tString = GT_LanguageManager.getTranslation(tKey);
+ if (GT_Utility.isStringValid(tString) && !tKey.equals(tString)) aList.add(tString);
+
+ Long[]
+ tStats = getElectricStats(aStack);
+ if (tStats != null) {
+ if (tStats[3] > 0) {
+ aList.add(EnumChatFormatting.AQUA + "Contains " + GT_Utility.formatNumbers(tStats[3]) + " EU Tier: " + (tStats[2]>=0?tStats[2]:0) + EnumChatFormatting.GRAY);
+ } else {
+ long tCharge = getRealCharge(aStack);
+ if (tStats[3] == -2 && tCharge <= 0) {
+ aList.add(EnumChatFormatting.AQUA + "Empty. You should recycle it properly." + EnumChatFormatting.GRAY);
+ } else {
+ aList.add(EnumChatFormatting.AQUA + "" + GT_Utility.formatNumbers(tCharge) + " / " + GT_Utility.formatNumbers(Math.abs(tStats[0])) + " EU - Voltage: " + V[(int)(tStats[2]>=0?tStats[2]<V.length?tStats[2]:V.length-1:1)] + EnumChatFormatting.GRAY);
+ }
+ }
+ }
+
+ tStats = getFluidContainerStats(aStack);
+ if (tStats != null && tStats[0] > 0) {
+ FluidStack tFluid = getFluidContent(aStack);
+ aList.add(EnumChatFormatting.BLUE + ((tFluid==null?"No Fluids Contained":GT_Utility.getFluidName(tFluid, true))) + EnumChatFormatting.GRAY);
+ aList.add(EnumChatFormatting.BLUE + ((tFluid==null?0:tFluid.amount) + "L / " + tStats[0] + "L") + EnumChatFormatting.GRAY);
+ }
+
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) aList = tBehavior.getAdditionalToolTips(this, aList, aStack);
+
+ addAdditionalToolTips(aList, aStack);
+ }
+
+ @Override
+ public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {
+ ArrayList<IItemBehaviour<GT_MetaBase_Item>> tList = mItemBehaviors.get((short)getDamage(aStack));
+ if (tList != null) for (IItemBehaviour<GT_MetaBase_Item> tBehavior : tList) tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand);
+ }
+
+ @Override
+ public final boolean canProvideEnergy(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return false;
+ return tStats[3] > 0 || (aStack.stackSize == 1 && (tStats[3] == -2 || tStats[3] == -3));
+ }
+
+ @Override
+ public final double getMaxCharge(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return Math.abs(tStats[0]);
+ }
+
+ @Override
+ public final double getTransferLimit(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return Math.max(tStats[1], tStats[3]);
+ }
+
+ @Override
+ public final double charge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier || !(tStats[3] == -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) || aStack.stackSize != 1) return 0;
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = aCharge==Integer.MAX_VALUE?Long.MAX_VALUE:Math.min(Math.abs(tStats[0]), tChargeBefore + (aIgnoreTransferLimit?(long)aCharge:Math.min(tStats[1], (long)aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return tNewCharge-tChargeBefore;
+ }
+
+ @Override
+ public final double discharge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aBatteryAlike, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier) return 0;
+ if (aBatteryAlike && !canProvideEnergy(aStack)) return 0;
+ if (tStats[3] > 0) {
+ if (aCharge < tStats[3] || aStack.stackSize < 1) return 0;
+ if (!aSimulate) aStack.stackSize--;
+ return tStats[3];
+ }
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = Math.max(0, tChargeBefore - (aIgnoreTransferLimit?(long)aCharge:Math.min(tStats[1], (long)aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return tChargeBefore-tNewCharge;
+ }
+
+ @Override
+ public final double getCharge(ItemStack aStack) {
+ return getRealCharge(aStack);
+ }
+
+ @Override
+ public final boolean canUse(ItemStack aStack, double aAmount) {
+ return getRealCharge(aStack) >= aAmount;
+ }
+
+ @Override
+ public final boolean use(ItemStack aStack, double aAmount, EntityLivingBase aPlayer) {
+ chargeFromArmor(aStack, aPlayer);
+ if (aPlayer instanceof EntityPlayer && ((EntityPlayer)aPlayer).capabilities.isCreativeMode) return true;
+ double tTransfer = discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true);
+ if (tTransfer == aAmount) {
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
+ chargeFromArmor(aStack, aPlayer);
+ return true;
+ }
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
+ chargeFromArmor(aStack, aPlayer);
+ return false;
+ }
+
+ @Override
+ public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (aPlayer == null || aPlayer.worldObj.isRemote) return;
+ for (int i = 1; i < 5; i++) {
+ ItemStack tArmor = aPlayer.getEquipmentInSlot(i);
+ if (GT_ModHandler.isElectricItem(tArmor)) {
+ IElectricItem tArmorItem = (IElectricItem)tArmor.getItem();
+ if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= getTier(aStack)) {
+ double tCharge = ElectricItem.manager.discharge(tArmor, charge(aStack, Integer.MAX_VALUE-1, Integer.MAX_VALUE, true, true), Integer.MAX_VALUE, true, true, false);
+ if (tCharge > 0) {
+ charge(aStack, tCharge, Integer.MAX_VALUE, true, false);
+ if (aPlayer instanceof EntityPlayer) {
+ Container tContainer = ((EntityPlayer)aPlayer).openContainer;
+ if (tContainer != null) tContainer.detectAndSendChanges();
+ }
+ }
+ }
+ }
+ }
+ }
+ /*
+
+ @Override
+ public final int getMaxCharge(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return (int)Math.abs(tStats[0]);
+ }
+
+ @Override
+ public final int getTransferLimit(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return (int)Math.max(tStats[1], tStats[3]);
+ }
+
+ @Override
+ public final int charge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier || !(tStats[3] == -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) || aStack.stackSize != 1) return 0;
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = aCharge==Integer.MAX_VALUE?Long.MAX_VALUE:Math.min(Math.abs(tStats[0]), tChargeBefore + (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return (int)(tNewCharge-tChargeBefore);
+ }
+
+ @Override
+ public final int discharge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier) return 0;
+ if (tStats[3] > 0) {
+ if (aCharge < tStats[3] || aStack.stackSize < 1) return 0;
+ if (!aSimulate) aStack.stackSize--;
+ return (int)(long)tStats[3];
+ }
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = Math.max(0, tChargeBefore - (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return (int)(tChargeBefore-tNewCharge);
+ }
+
+ @Override
+ public final int getCharge(ItemStack aStack) {
+ return (int)Math.min(Integer.MAX_VALUE, getRealCharge(aStack));
+ }
+
+ @Override
+ public final boolean canUse(ItemStack aStack, int aAmount) {
+ return getRealCharge(aStack) >= aAmount;
+ }
+
+ @Override
+ public final boolean use(ItemStack aStack, int aAmount, EntityLivingBase aPlayer) {
+ chargeFromArmor(aStack, aPlayer);
+ if (aPlayer instanceof EntityPlayer && ((EntityPlayer)aPlayer).capabilities.isCreativeMode) return true;
+ int tTransfer = discharge(aStack, aAmount, Integer.MAX_VALUE, true, true);
+ if (tTransfer == aAmount) {
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false);
+ chargeFromArmor(aStack, aPlayer);
+ return true;
+ }
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false);
+ chargeFromArmor(aStack, aPlayer);
+ return false;
+ }
+
+ @Override
+ public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (aPlayer == null || aPlayer.worldObj.isRemote) return;
+ for (int i = 1; i < 5; i++) {
+ ItemStack tArmor = aPlayer.getEquipmentInSlot(i);
+ if (GT_ModHandler.isElectricItem(tArmor)) {
+ IElectricItem tArmorItem = (IElectricItem)tArmor.getItem();
+ if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= getTier(aStack)) {
+ int tCharge = ElectricItem.manager.discharge(tArmor, charge(aStack, Integer.MAX_VALUE-1, Integer.MAX_VALUE, true, true), Integer.MAX_VALUE, true, false);
+ if (tCharge > 0) {
+ charge(aStack, tCharge, Integer.MAX_VALUE, true, false);
+ if (aPlayer instanceof EntityPlayer) {
+ Container tContainer = ((EntityPlayer)aPlayer).openContainer;
+ if (tContainer != null) tContainer.detectAndSendChanges();
+ }
+ }
+ }
+ }
+ }
+ }
+ */
+ public final long getRealCharge(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ if (tStats[3] > 0) return (int)(long)tStats[3];
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ return tNBT==null?0:tNBT.getLong("GT.ItemCharge");
+ }
+
+ public final boolean setCharge(ItemStack aStack, long aCharge) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[3] > 0) return false;
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound();
+ tNBT.removeTag("GT.ItemCharge");
+ aCharge = Math.min(tStats[0]<0?Math.abs(tStats[0] / 2):aCharge, Math.abs(tStats[0]));
+ if (aCharge > 0) {
+ aStack.setItemDamage(getChargedMetaData(aStack));
+ tNBT.setLong("GT.ItemCharge", aCharge);
+ } else {
+ aStack.setItemDamage(getEmptyMetaData(aStack));
+ }
+ if (tNBT.hasNoTags()) aStack.setTagCompound(null); else aStack.setTagCompound(tNBT);
+ isItemStackUsable(aStack);
+ return true;
+ }
+
+ public short getChargedMetaData(ItemStack aStack) {return (short)aStack.getItemDamage();}
+ public short getEmptyMetaData(ItemStack aStack) {return (short)aStack.getItemDamage();}
+
+ @Override
+ public FluidStack getFluid(ItemStack aStack) {
+ return getFluidContent(aStack);
+ }
+
+ @Override
+ public int getCapacity(ItemStack aStack) {
+ Long[] tStats = getFluidContainerStats(aStack);
+ return tStats==null?0:(int)Math.max(0, tStats[0]);
+ }
+
+ @Override
+ public int fill(ItemStack aStack, FluidStack aFluid, boolean doFill) {
+ if (aStack == null || aStack.stackSize != 1) return 0;
+
+ ItemStack tStack = GT_Utility.fillFluidContainer(aFluid, aStack, false, false);
+ if (tStack != null) {
+ aStack.setItemDamage(tStack.getItemDamage());
+ aStack.func_150996_a(tStack.getItem());
+ return GT_Utility.getFluidForFilledItem(tStack, false).amount;
+ }
+
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0 || aFluid == null || aFluid.getFluid().getID() <= 0 || aFluid.amount <= 0) return 0;
+
+ FluidStack tFluid = getFluidContent(aStack);
+
+ if (tFluid == null || tFluid.getFluid().getID() <= 0) {
+ if (aFluid.amount <= tStats[0]) {
+ if (doFill) {
+ setFluidContent(aStack, aFluid);
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ tFluid = aFluid.copy();
+ tFluid.amount = (int)(long)tStats[0];
+ setFluidContent(aStack, tFluid);
+ }
+ return (int)(long)tStats[0];
+ }
+
+ if (!tFluid.isFluidEqual(aFluid)) return 0;
+
+ int space = (int)(long)tStats[0] - tFluid.amount;
+ if (aFluid.amount <= space) {
+ if (doFill) {
+ tFluid.amount += aFluid.amount;
+ setFluidContent(aStack, tFluid);
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ tFluid.amount = (int)(long)tStats[0];
+ setFluidContent(aStack, tFluid);
+ }
+ return space;
+ }
+
+ @Override
+ public FluidStack drain(ItemStack aStack, int maxDrain, boolean doDrain) {
+ if (aStack == null || aStack.stackSize != 1) return null;
+
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, false);
+ if (tFluid != null && maxDrain >= tFluid.amount) {
+ ItemStack tStack = GT_Utility.getContainerItem(aStack, false);
+ if (tStack == null) {
+ aStack.stackSize = 0;
+ return tFluid;
+ }
+ aStack.setItemDamage(tStack.getItemDamage());
+ aStack.func_150996_a(tStack.getItem());
+ return tFluid;
+ }
+
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0) return null;
+
+ tFluid = getFluidContent(aStack);
+ if (tFluid == null) return null;
+
+ int used = maxDrain;
+ if (tFluid.amount < used) used = tFluid.amount;
+ if (doDrain) {
+ tFluid.amount -= used;
+ setFluidContent(aStack, tFluid);
+ }
+
+ FluidStack drained = tFluid.copy();
+ drained.amount = used;
+ return drained;
+ }
+
+ public FluidStack getFluidContent(ItemStack aStack) {
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0) return GT_Utility.getFluidForFilledItem(aStack, false);
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ return tNBT==null?null:FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent"));
+ }
+
+ public void setFluidContent(ItemStack aStack, FluidStack aFluid) {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound(); else tNBT.removeTag("GT.FluidContent");
+ if (aFluid != null && aFluid.amount > 0) tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound()));
+ if (tNBT.hasNoTags()) aStack.setTagCompound(null); else aStack.setTagCompound(tNBT);
+ isItemStackUsable(aStack);
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats != null && (tStats[3] == -1 || tStats[3] == -3) && getRealCharge(aStack) > 0) return 1;
+ tStats = getFluidContainerStats(aStack);
+ if (tStats != null) return (int)(long)tStats[1];
+ return 64;
+ }
+
+ @Override public final Item getChargedItem(ItemStack itemStack) {return this;}
+ @Override public final Item getEmptyItem(ItemStack itemStack) {return this;}
+ @Override public final int getTier(ItemStack aStack) {Long[] tStats = getElectricStats(aStack); return (int)(tStats==null?Integer.MAX_VALUE:tStats[2]);}
+ @Override public final String getToolTip(ItemStack aStack) {return null;} // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point
+ @Override public final IElectricItemManager getManager(ItemStack aStack) {return this;} // We are our own Manager
+ @Override public final boolean getShareTag() {return true;} // just to be sure.
+ @Override public int getItemEnchantability() {return 0;}
+ @Override public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {return false;}
+ @Override public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {return false;}
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java
new file mode 100644
index 0000000000..d8ef7f8a32
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java
@@ -0,0 +1,331 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.D1;
+import static gregtech.api.enums.GT_Values.MOD_ID_APC;
+import static gregtech.api.enums.GT_Values.RA;
+import static gregtech.api.enums.GT_Values.RES_PATH_ITEM;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.IFoodStat;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.interfaces.IItemContainer;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.util.*;
+
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemFood;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+import squeek.applecore.api.food.FoodValues;
+import squeek.applecore.api.food.IEdible;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.Optional;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * @author Gregorius Techneticies
+ *
+ * One Item for everything!
+ *
+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, like Dusts, Ingots, Gems, Plates and similar.
+ * It saves me a ton of work, when adding Items, because I always have to make a new Item SubType for each OreDict Prefix, when adding a new Material.
+ *
+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom defined, just to save space and MetaData.
+ *
+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike Item.
+ */
+@Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = MOD_ID_APC)
+public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IEdible {
+ /**
+ * All instances of this Item Class are listed here.
+ * This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.
+ *
+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item.
+ */
+ public static final HashMap<String, GT_MetaGenerated_Item> sInstances = new HashMap<String, GT_MetaGenerated_Item>();
+
+ /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
+
+ public final short mOffset, mItemAmount;
+ public final BitSet mEnabledItems;
+ public final BitSet mVisibleItems;
+ public final IIcon[][] mIconList;
+
+ public final HashMap<Short, IFoodStat> mFoodStats = new HashMap<Short, IFoodStat>();
+ public final HashMap<Short, Long[]> mElectricStats = new HashMap<Short, Long[]>();
+ public final HashMap<Short, Long[]> mFluidContainerStats = new HashMap<Short, Long[]>();
+ public final HashMap<Short, Short> mBurnValues = new HashMap<Short, Short>();
+
+ /**
+ * Creates the Item using these Parameters.
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ */
+ public GT_MetaGenerated_Item(String aUnlocalized, short aOffset, short aItemAmount) {
+ super(aUnlocalized);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS);
+ setHasSubtypes(true);
+ setMaxDamage(0);
+ mEnabledItems = new BitSet(aItemAmount);
+ mVisibleItems = new BitSet(aItemAmount);
+
+ mOffset = (short)Math.min(32766, aOffset);
+ mItemAmount = (short)Math.min(aItemAmount, 32766-mOffset);
+ mIconList = new IIcon[aItemAmount][1];
+
+ sInstances.put(getUnlocalizedName(), this);
+ }
+
+ /**
+ * This adds a Custom Item to the ending Range.
+ * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset)
+ * @param aEnglish The Default Localized 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.
+ */
+ public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) {
+ if (aToolTip == null) aToolTip = "";
+ if (aID >= 0 && aID < mItemAmount) {
+ ItemStack rStack = new ItemStack(this, 1, mOffset+aID);
+ mEnabledItems.set(aID);
+ mVisibleItems.set(aID);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip);
+ List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
+ // Important Stuff to do first
+ for (Object tRandomData : aRandomData) if (tRandomData instanceof SubTag) {
+ if (tRandomData == SubTag.INVISIBLE) {
+ mVisibleItems.set(aID, false);
+ continue;
+ }
+ if (tRandomData == SubTag.NO_UNIFICATION) {
+ GT_OreDictUnificator.addToBlacklist(rStack);
+ continue;
+ }
+ }
+ // now check for the rest
+ for (Object tRandomData : aRandomData) if (tRandomData != null) {
+ boolean tUseOreDict = true;
+ if (tRandomData instanceof IFoodStat) {
+ setFoodBehavior(mOffset+aID, (IFoodStat)tRandomData);
+ if (((IFoodStat)tRandomData).getFoodAction(this, rStack) == EnumAction.eat) {
+ int tFoodValue = ((IFoodStat)tRandomData).getFoodLevel(this, rStack, null);
+ if (tFoodValue > 0) RA.addCannerRecipe(rStack, ItemList.IC2_Food_Can_Empty.get(tFoodValue), ((IFoodStat)tRandomData).isRotten(this, rStack, null)?ItemList.IC2_Food_Can_Spoiled.get(tFoodValue):ItemList.IC2_Food_Can_Filled.get(tFoodValue), null, tFoodValue*100, 1);
+ }
+ tUseOreDict = false;
+ }
+ if (tRandomData instanceof IItemBehaviour) {
+ addItemBehavior(mOffset+aID, (IItemBehaviour<GT_MetaBase_Item>)tRandomData);
+ tUseOreDict = false;
+ }
+ if (tRandomData instanceof IItemContainer) {
+ ((IItemContainer)tRandomData).set(rStack);
+ tUseOreDict = false;
+ }
+ if (tRandomData instanceof SubTag) {
+ continue;
+ }
+ if (tRandomData instanceof TC_AspectStack) {
+ ((TC_AspectStack)tRandomData).addToAspectList(tAspects);
+ continue;
+ }
+ if (tRandomData instanceof ItemData) {
+ if (GT_Utility.isStringValid(tRandomData)) GT_OreDictUnificator.registerOre(tRandomData, rStack); else GT_OreDictUnificator.addItemData(rStack, (ItemData)tRandomData);
+ continue;
+ }
+ if (tUseOreDict) {
+ GT_OreDictUnificator.registerOre(tRandomData, rStack);
+ continue;
+ }
+ }
+ if (GregTech_API.sThaumcraftCompat != null) GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false);
+ return rStack;
+ }
+ return null;
+ }
+
+ /**
+ * Sets a Food Behavior for the Item.
+ *
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aFoodBehavior the Food Behavior you want to add.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final GT_MetaGenerated_Item setFoodBehavior(int aMetaValue, IFoodStat aFoodBehavior) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this;
+ if (aFoodBehavior == null) mFoodStats.remove((short)aMetaValue); else mFoodStats.put((short)aMetaValue, aFoodBehavior);
+ return this;
+ }
+
+ /**
+ * Sets the Furnace Burn Value for the Item.
+ *
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU)
+ * @return the Item itself for convenience in constructing.
+ */
+ public final GT_MetaGenerated_Item setBurnValue(int aMetaValue, int aValue) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length() || aValue < 0) return this;
+ if (aValue == 0) mBurnValues.remove((short)aMetaValue); else mBurnValues.put((short)aMetaValue, aValue>Short.MAX_VALUE?Short.MAX_VALUE:(short)aValue);
+ return this;
+ }
+
+ /**
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior)
+ * @param aTransferLimit Transfer Limit.
+ * @param aTier The electric Tier.
+ * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0).
+ * Use -1 if you want to make this Battery chargeable (the use and canUse Functions will still discharge if you just use this)
+ * Use -2 if you want to make this Battery dischargeable.
+ * Use -3 if you want to make this Battery charge/discharge-able.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final GT_MetaGenerated_Item setElectricStats(int aMetaValue, long aMaxCharge, long aTransferLimit, long aTier, long aSpecialData, boolean aUseAnimations) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this;
+ if (aMaxCharge == 0) mElectricStats.remove((short)aMetaValue); else {
+ mElectricStats.put((short)aMetaValue, new Long[] {aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData});
+ if (aMetaValue >= mOffset && aUseAnimations) mIconList[aMetaValue-mOffset] = Arrays.copyOf(mIconList[aMetaValue-mOffset], Math.max(9, mIconList[aMetaValue-mOffset].length));
+ }
+ return this;
+ }
+
+ /**
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior)
+ * @param aTransferLimit Transfer Limit.
+ * @param aTier The electric Tier.
+ * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0).
+ * Use -1 if you want to make this Battery chargeable (the use and canUse Functions will still discharge if you just use this)
+ * Use -2 if you want to make this Battery dischargeable.
+ * Use -3 if you want to make this Battery charge/discharge-able.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final GT_MetaGenerated_Item setFluidContainerStats(int aMetaValue, long aCapacity, long aStacksize) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this;
+ if (aCapacity < 0) mElectricStats.remove((short)aMetaValue); else mFluidContainerStats.put((short)aMetaValue, new Long[] {aCapacity, Math.max(1, aStacksize)});
+ return this;
+ }
+
+ /**
+ * @return if this MetaGenerated Item should use my Default Renderer System.
+ */
+ public boolean useStandardMetaItemRenderer() {
+ return true;
+ }
+
+ /**
+ * @return the Color Modulation the Material is going to be rendered with.
+ */
+ public short[] getRGBa(ItemStack aStack) {
+ return Materials._NULL.getRGBA();
+ }
+
+ /**
+ * @return the Icon the Material is going to be rendered with.
+ */
+ public IIconContainer getIconContainer(int aMetaData) {
+ return null;
+ }
+
+ /* ---------- INTERNAL OVERRIDES ---------- */
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IFoodStat tStat = mFoodStats.get((short)getDamage(aStack));
+ if (tStat != null && aPlayer.canEat(tStat.alwaysEdible(this, aStack, aPlayer))) aPlayer.setItemInUse(aStack, 32);
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
+
+ @Override
+ public int getMaxItemUseDuration(ItemStack aStack) {
+ return mFoodStats.get((short)getDamage(aStack)) == null ? 0 : 32;
+ }
+
+ @Override
+ public EnumAction getItemUseAction(ItemStack aStack) {
+ IFoodStat tStat = mFoodStats.get((short)getDamage(aStack));
+ return tStat == null ? EnumAction.none : tStat.getFoodAction(this, aStack);
+ }
+
+ @Override
+ public final ItemStack onEaten(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IFoodStat tStat = mFoodStats.get((short)getDamage(aStack));
+ if (tStat != null) {
+ if (Loader.isModLoaded(MOD_ID_APC)) {
+ aPlayer.getFoodStats().func_151686_a((ItemFood)GT_Utility.callConstructor("squeek.applecore.api.food.ItemFoodProxy.ItemFoodProxy", 0, null, true, this), aStack);
+ } else {
+ aPlayer.getFoodStats().addStats(tStat.getFoodLevel(this, aStack, aPlayer), tStat.getSaturation(this, aStack, aPlayer));
+ }
+ tStat.onEaten(this, aStack, aPlayer);
+ }
+ return aStack;
+ }
+
+ @Override
+ @Optional.Method(modid = MOD_ID_APC)
+ public FoodValues getFoodValues(ItemStack aStack) {
+ IFoodStat tStat = mFoodStats.get((short)getDamage(aStack));
+ return tStat==null?null:new FoodValues(tStat.getFoodLevel(this, aStack, null), tStat.getSaturation(this, aStack, null));
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0, j = mEnabledItems.length(); i < j; i++) if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) {
+ Long[] tStats = mElectricStats.get((short)(mOffset+i));
+ if (tStats != null && tStats[3] < 0) {
+ ItemStack tStack = new ItemStack(this, 1, mOffset+i);
+ setCharge(tStack, Math.abs(tStats[0]));
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ if (tStats == null || tStats[3] != -2) {
+ ItemStack tStack = new ItemStack(this, 1, mOffset+i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void registerIcons(IIconRegister aIconRegister) {
+ for (short i = 0, j = (short)mEnabledItems.length(); i < j; i++) if (mEnabledItems.get(i)) {
+ for (byte k = 1; k < mIconList[i].length; k++) {
+ mIconList[i][k] = aIconRegister.registerIcon(RES_PATH_ITEM + (GT_Config.troll?"troll":getUnlocalizedName() + "/" + i + "/" + k));
+ }
+ mIconList[i][0] = aIconRegister.registerIcon(RES_PATH_ITEM + (GT_Config.troll?"troll":getUnlocalizedName() + "/" + i));
+ }
+ }
+
+ @Override
+ public final Long[] getElectricStats(ItemStack aStack) {
+ return mElectricStats.get((short)aStack.getItemDamage());
+ }
+
+ @Override
+ public final Long[] getFluidContainerStats(ItemStack aStack) {
+ return mFluidContainerStats.get((short)aStack.getItemDamage());
+ }
+
+ @Override public int getItemEnchantability() {return 0;}
+ @Override public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {return false;}
+ @Override public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {return false;}
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java
new file mode 100644
index 0000000000..76743abd74
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java
@@ -0,0 +1,159 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.M;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.util.List;
+
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * @author Gregorius Techneticies
+ *
+ * One Item for everything!
+ *
+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, like Dusts, Ingots, Gems, Plates and similar.
+ * It saves me a ton of work, when adding Items, because I always have to make a new Item SubType for each OreDict Prefix, when adding a new Material.
+ *
+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom defined, just to save space and MetaData.
+ *
+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike Item.
+ */
+public abstract class GT_MetaGenerated_Item_X01 extends GT_MetaGenerated_Item {
+
+ protected final OrePrefixes mPrefix;
+ protected final int mIconSetIndex;
+
+ /**
+ * Creates the Item using these Parameters. This is for the new 1 Item = 1 Prefix System.
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ * @param aGeneratedPrefix The OreDict Prefix you want to have generated.
+ * @param aIconSetIndex The TextureSet Index to be used. -1 for Defaulting to the Data contained in the Prefix. (this is only to be used for selecting the Icon in getIconContainer, nothing else)
+ */
+ public GT_MetaGenerated_Item_X01(String aUnlocalized, OrePrefixes aGeneratedPrefix, int aIconSetIndex) {
+ super(aUnlocalized, (short)32000, (short)766);
+ mPrefix = aGeneratedPrefix;
+ mIconSetIndex = aIconSetIndex>=0?aIconSetIndex:aGeneratedPrefix.mTextureIndex>=0?aGeneratedPrefix.mTextureIndex:0;
+
+ for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) {
+ OrePrefixes tPrefix = mPrefix;
+ if (tPrefix == null) continue;
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[i];
+ if (tMaterial == null) continue;
+ if (mPrefix.doGenerateItem(tMaterial)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".name", getDefaultLocalization(tPrefix, tMaterial, i));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".tooltip", tMaterial.getToolTip(tPrefix.mMaterialAmount / M));
+ String tOreName = getOreDictString(tPrefix, tMaterial);
+ tPrefix = OrePrefixes.getOrePrefix(tOreName);
+ if (tPrefix != null && tPrefix.mIsUnificatable) {
+ GT_OreDictUnificator.set(tPrefix, OrePrefixes.getMaterial(tOreName, tPrefix), tStack);
+ } else {
+ GT_OreDictUnificator.registerOre(tOreName, tStack);
+ }
+ }
+ }
+ }
+
+ /* ---------- OVERRIDEABLE FUNCTIONS ---------- */
+
+ /**
+ * @param aPrefix the OreDict Prefix
+ * @param aMaterial the Material
+ * @param aMetaData a Index from [0 - 31999]
+ * @return the Localized Name when default LangFiles are used.
+ */
+ public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) {
+ return aPrefix.getDefaultLocalNameForItem(aMaterial);
+ }
+
+ /**
+ * @param aPrefix always != null
+ * @param aMaterial always != null
+ * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny Dusts or Crushed Ores as well.
+ * @return if this Item should be visible in NEI or Creative
+ */
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) {
+ return true;
+ }
+
+ /**
+ * @return the name of the Item to be registered at the OreDict.
+ */
+ public String getOreDictString(OrePrefixes aPrefix, Materials aMaterial) {
+ return aPrefix.get(aMaterial).toString();
+ }
+
+ public IIconContainer getIconContainer(int aMetaData, Materials aMaterial) {
+ return aMaterial.mIconSet.mTextures[mIconSetIndex];
+ }
+
+ /* ---------- INTERNAL OVERRIDES ---------- */
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ int aMetaData = aStack.getItemDamage();
+ if (aMetaData < GregTech_API.sGeneratedMaterials.length && aMetaData >= 0) {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[aMetaData];
+ if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) {
+ return GT_Utility.copyAmount(1, mPrefix.mContainerItem);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public short[] getRGBa(ItemStack aStack) {
+ int aMetaData = getDamage(aStack);
+ return aMetaData < GregTech_API.sGeneratedMaterials.length && GregTech_API.sGeneratedMaterials[aMetaData] != null ? GregTech_API.sGeneratedMaterials[aMetaData].mRGBa : Materials._NULL.mRGBa;
+ }
+
+ @Override
+ public final IIconContainer getIconContainer(int aMetaData) {
+ return aMetaData < GregTech_API.sGeneratedMaterials.length && GregTech_API.sGeneratedMaterials[aMetaData] != null ? getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData]) : null;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) if (mPrefix.doGenerateItem(GregTech_API.sGeneratedMaterials[i]) && doesShowInCreative(mPrefix, GregTech_API.sGeneratedMaterials[i], GregTech_API.sDoShowAllItemsInCreative)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ super.getSubItems(var1, aCreativeTab, aList);
+ }
+
+ @Override
+ public final IIcon getIconFromDamage(int aMetaData) {
+ if (aMetaData < 0) return null;
+ if (aMetaData < GregTech_API.sGeneratedMaterials.length) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData];
+ if (tMaterial == null) return null;
+ IIconContainer tIcon = getIconContainer(aMetaData, tMaterial);
+ if (tIcon != null) return tIcon.getIcon();
+ return null;
+ }
+ return aMetaData>=mOffset&&aMetaData-mOffset<mIconList.length?mIconList[aMetaData-mOffset][0]:null;
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ return getDamage(aStack) < mOffset ? Math.min(super.getItemStackLimit(aStack), mPrefix.mDefaultStackSize) : super.getItemStackLimit(aStack);
+ }
+
+ @Override public int getItemEnchantability() {return 0;}
+ @Override public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {return false;}
+ @Override public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {return false;}
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java
new file mode 100644
index 0000000000..181e5bddf6
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java
@@ -0,0 +1,169 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.M;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * @author Gregorius Techneticies
+ *
+ * One Item for everything!
+ *
+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, like Dusts, Ingots, Gems, Plates and similar.
+ * It saves me a ton of work, when adding Items, because I always have to make a new Item SubType for each OreDict Prefix, when adding a new Material.
+ *
+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom defined, just to save space and MetaData.
+ *
+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike Item.
+ */
+public abstract class GT_MetaGenerated_Item_X32 extends GT_MetaGenerated_Item {
+
+ protected final OrePrefixes[] mGeneratedPrefixList;
+
+ /**
+ * Creates the Item using these Parameters.
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated.
+ */
+ public GT_MetaGenerated_Item_X32(String aUnlocalized, OrePrefixes... aGeneratedPrefixList) {
+ super(aUnlocalized, (short)32000, (short)766);
+ mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32);
+
+ for (int i = 0; i < 32000; i++) {
+ OrePrefixes tPrefix = mGeneratedPrefixList[i / 1000];
+ if (tPrefix == null) continue;
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[i % 1000];
+ if (tMaterial == null) continue;
+ if (doesMaterialAllowGeneration(tPrefix, tMaterial)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".name", getDefaultLocalization(tPrefix, tMaterial, i));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".tooltip", tMaterial.getToolTip(tPrefix.mMaterialAmount / M));
+ if (tPrefix.mIsUnificatable) {
+ GT_OreDictUnificator.set(tPrefix, tMaterial, tStack);
+ } else {
+ GT_OreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack);
+ }
+ if((tPrefix==OrePrefixes.stick||tPrefix==OrePrefixes.wireFine)&&(tMaterial==Materials.Lead||tMaterial==Materials.Tin||tMaterial==Materials.SolderingAlloy)){GregTech_API.sSolderingMetalList.add(tStack);}
+ }
+ }
+ }
+
+ /* ---------- OVERRIDEABLE FUNCTIONS ---------- */
+
+ /**
+ * @return the Color Modulation the Material is going to be rendered with.
+ */
+ @Override
+ public short[] getRGBa(ItemStack aStack) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[getDamage(aStack) % 1000];
+ return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa;
+ }
+
+ /**
+ * @param aPrefix this can be null, you have to return false in that case
+ * @param aMaterial this can be null, you have to return false in that case
+ * @return if this Item should be generated and visible.
+ */
+ public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) {
+ // You have to check for at least these Conditions in every Case! So add a super Call like the following for this before executing your Code:
+ // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false;
+ return aPrefix != null && aMaterial != null && aPrefix.doGenerateItem(aMaterial);
+ }
+
+ /* ---------- OVERRIDEABLE FUNCTIONS ---------- */
+
+ /**
+ * @param aPrefix the OreDict Prefix
+ * @param aMaterial the Material
+ * @param aMetaData a Index from [0 - 31999]
+ * @return the Localized Name when default LangFiles are used.
+ */
+ public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) {
+ return aPrefix.getDefaultLocalNameForItem(aMaterial);
+ }
+
+ /**
+ * @param aMetaData a Index from [0 - 31999]
+ * @param aMaterial the Material
+ * @return an Icon Container for the Item Display.
+ */
+ public final IIconContainer getIconContainer(int aMetaData, Materials aMaterial) {
+ return mGeneratedPrefixList[aMetaData / 1000] != null && mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0 ? aMaterial.mIconSet.mTextures[mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] : null;
+ }
+
+ /**
+ * @param aPrefix always != null
+ * @param aMaterial always != null
+ * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny Dusts or Crushed Ores as well.
+ * @return if this Item should be visible in NEI or Creative
+ */
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) {
+ return true;
+ }
+
+ /* ---------- INTERNAL OVERRIDES ---------- */
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ int aDamage = aStack.getItemDamage();
+ if (aDamage < 32000 && aDamage >= 0) {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[aDamage % 1000];
+ if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) {
+ OrePrefixes aPrefix = mGeneratedPrefixList[aDamage / 1000];
+ if (aPrefix != null) return GT_Utility.copyAmount(1, aPrefix.mContainerItem);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public final IIconContainer getIconContainer(int aMetaData) {
+ return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null : getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData % 1000]);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0; i < 32000; i++) if (doesMaterialAllowGeneration(mGeneratedPrefixList[i / 1000], GregTech_API.sGeneratedMaterials[i % 1000]) && doesShowInCreative(mGeneratedPrefixList[i / 1000], GregTech_API.sGeneratedMaterials[i % 1000], GregTech_API.sDoShowAllItemsInCreative)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ super.getSubItems(var1, aCreativeTab, aList);
+ }
+
+ @Override
+ public final IIcon getIconFromDamage(int aMetaData) {
+ if (aMetaData < 0) return null;
+ if (aMetaData < 32000) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData % 1000];
+ if (tMaterial == null) return null;
+ IIconContainer tIcon = getIconContainer(aMetaData, tMaterial);
+ if (tIcon != null) return tIcon.getIcon();
+ return null;
+ }
+ return aMetaData-32000<mIconList.length?mIconList[aMetaData-32000][0]:null;
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ int tDamage = getDamage(aStack);
+ if (tDamage < 32000 && mGeneratedPrefixList[tDamage / 1000] != null) return Math.min(super.getItemStackLimit(aStack), mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize);
+ return super.getItemStackLimit(aStack);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java
new file mode 100644
index 0000000000..ff3cdfdfc0
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java
@@ -0,0 +1,562 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.MOD_ID_FR;
+import static gregtech.api.enums.GT_Values.MOD_ID_RC;
+import forestry.api.arboriculture.IToolGrafter;
+import gregtech.api.GregTech_API;
+import gregtech.api.enchants.Enchantment_Radioactivity;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.IDamagableItem;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tools.GT_Tool_Turbine;
+
+import java.util.*;
+import java.util.Map.Entry;
+
+import mods.railcraft.api.core.items.IToolCrowbar;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.item.EntityMinecart;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.Potion;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.stats.StatList;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+import cpw.mods.fml.common.Optional;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench:
+ * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16, 1, Materials.Bismuth, Materials.Bismuth, null);
+ */
+@Optional.InterfaceList(value = {@Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = MOD_ID_FR), @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = MOD_ID_RC)})
+public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements IDamagableItem, IToolGrafter , IToolCrowbar{
+ /**
+ * All instances of this Item Class are listed here.
+ * This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.
+ *
+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item.
+ */
+ public static final HashMap<String, GT_MetaGenerated_Tool> sInstances = new HashMap<String, GT_MetaGenerated_Tool>();
+
+ /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
+
+ public final HashMap<Short, IToolStats> mToolStats = new HashMap<Short, IToolStats>();
+
+ /**
+ * Creates the Item using these Parameters.
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ */
+ public GT_MetaGenerated_Tool(String aUnlocalized) {
+ super(aUnlocalized);
+ GT_ModHandler.registerBoxableItemToToolBox(this);
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ setMaxStackSize(1);
+ sInstances.put(getUnlocalizedName(), this);
+ }
+
+ /* ---------- FOR ADDING CUSTOM ITEMS INTO THE REMAINING 766 RANGE ---------- */
+
+ /**
+ * This adds a Custom Item to the ending Range.
+ * @param aID The Id of the assigned Tool Class [0 - 32765] (only even Numbers allowed! Uneven ID's are empty electric Items)
+ * @param aEnglish The Default Localized Name of the created Item
+ * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip
+ * @param aToolStats The Food Value of this Item. Can be null as well.
+ * @param aOreDictNamesAndAspects The OreDict Names you want to give the Item. Also used to assign Thaumcraft Aspects.
+ * @return An ItemStack containing the newly created Item, but without specific Stats.
+ */
+ public final ItemStack addTool(int aID, String aEnglish, String aToolTip, IToolStats aToolStats, Object... aOreDictNamesAndAspects) {
+ if (aToolTip == null) aToolTip = "";
+ if (aID >= 0 && aID < 32766 && aID % 2 == 0) {
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".name" , aEnglish);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".tooltip" , aToolTip);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (aID+1) + ".name" , aEnglish + " (Empty)");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (aID+1) + ".tooltip" , "You need to recharge it");
+ mToolStats.put((short) aID , aToolStats);
+ mToolStats.put((short)(aID+1), aToolStats);
+ aToolStats.onStatsAddedToTool(this, aID);
+ ItemStack rStack = new ItemStack(this, 1, aID);
+ List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
+ for (Object tOreDictNameOrAspect : aOreDictNamesAndAspects) {
+ if (tOreDictNameOrAspect instanceof TC_AspectStack)
+ ((TC_AspectStack)tOreDictNameOrAspect).addToAspectList(tAspects);
+ else
+ GT_OreDictUnificator.registerOre(tOreDictNameOrAspect, rStack);
+ }
+ if (GregTech_API.sThaumcraftCompat != null) GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false);
+ return rStack;
+ }
+ return null;
+ }
+
+ /**
+ * This Function gets an ItemStack Version of this Tool
+ * @param aToolID the ID of the Tool Class
+ * @param aAmount Amount of Items (well normally you only need 1)
+ * @param aPrimaryMaterial Primary Material of this Tool
+ * @param aSecondaryMaterial Secondary (Rod/Handle) Material of this Tool
+ * @param aElectricArray The Electric Stats of this Tool (or null if not electric)
+ */
+ public final ItemStack getToolWithStats(int aToolID, int aAmount, Materials aPrimaryMaterial, Materials aSecondaryMaterial, long[] aElectricArray) {
+ ItemStack rStack = new ItemStack(this, aAmount, aToolID);
+ IToolStats tToolStats = getToolStats(rStack);
+ if (tToolStats != null) {
+ NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound();
+ if (aPrimaryMaterial != null) {
+ tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.toString());
+ tToolNBT.setLong("MaxDamage", 100L*(long)(aPrimaryMaterial.mDurability * tToolStats.getMaxDurabilityMultiplier()));
+ }
+ if (aSecondaryMaterial != null) tToolNBT.setString("SecondaryMaterial", aSecondaryMaterial.toString());
+
+ if (aElectricArray != null) {
+ tToolNBT.setBoolean("Electric", true);
+ tToolNBT.setLong("MaxCharge", aElectricArray[0]);
+ tToolNBT.setLong("Voltage", aElectricArray[1]);
+ tToolNBT.setLong("Tier", aElectricArray[2]);
+ tToolNBT.setLong("SpecialData", aElectricArray[3]);
+ }
+
+ tMainNBT.setTag("GT.ToolStats", tToolNBT);
+ rStack.setTagCompound(tMainNBT);
+ }
+ isItemStackUsable(rStack);
+ return rStack;
+ }
+
+ /* ---------- INTERNAL OVERRIDES ---------- */
+
+ /**
+ * Called by the Block Harvesting Event within the GT_Proxy
+ */
+ public void onHarvestBlockEvent(ArrayList<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ IToolStats tStats = getToolStats(aStack);
+ if (isItemStackUsable(aStack) && getDigSpeed(aStack, aBlock, aMetaData) > 0.0F) doDamage(aStack, tStats.convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData, aFortune, aSilkTouch, aEvent) * tStats.getToolDamagePerDropConversion());
+ }
+
+ @Override
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || !isItemStackUsable(aStack)) return true;
+ GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F);
+ if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) return true;
+ if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) {
+ float tMagicDamage = tStats.getMagicDamageAgainstEntity(aEntity instanceof EntityLivingBase?EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase)aEntity):0.0F, aEntity, aStack, aPlayer), tDamage = tStats.getNormalDamageAgainstEntity((float)aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue() + getToolCombatDamage(aStack), aEntity, aStack, aPlayer);
+ if (tDamage + tMagicDamage > 0.0F) {
+ boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround && !aPlayer.isOnLadder() && !aPlayer.isInWater() && !aPlayer.isPotionActive(Potion.blindness) && aPlayer.ridingEntity == null && aEntity instanceof EntityLivingBase;
+ if (tCriticalHit && tDamage > 0.0F) tDamage *= 1.5F;
+ tDamage += tMagicDamage;
+ if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) {
+ if (aEntity instanceof EntityLivingBase) aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4);
+ int tKnockcack = (aPlayer.isSprinting()?1:0) + (aEntity instanceof EntityLivingBase?EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase)aEntity):0);
+ if (tKnockcack > 0) {
+ aEntity.addVelocity(-MathHelper.sin(aPlayer.rotationYaw * (float)Math.PI / 180.0F) * tKnockcack * 0.5F, 0.1D, MathHelper.cos(aPlayer.rotationYaw * (float)Math.PI / 180.0F) * tKnockcack * 0.5F);
+ aPlayer.motionX *= 0.6D;
+ aPlayer.motionZ *= 0.6D;
+ aPlayer.setSprinting(false);
+ }
+ if (tCriticalHit) aPlayer.onCriticalHit(aEntity);
+ if (tMagicDamage > 0.0F) aPlayer.onEnchantmentCritical(aEntity);
+ if (tDamage >= 18.0F) aPlayer.triggerAchievement(AchievementList.overkill);
+ aPlayer.setLastAttacker(aEntity);
+ if (aEntity instanceof EntityLivingBase) EnchantmentHelper.func_151384_a((EntityLivingBase)aEntity, aPlayer);
+ EnchantmentHelper.func_151385_b(aPlayer, aEntity);
+ if (aEntity instanceof EntityLivingBase) aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F));
+ aEntity.hurtResistantTime = Math.max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity));
+ aPlayer.addExhaustion(0.3F);
+ doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+ }
+ }
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && tStats.canBlock()) aPlayer.setItemInUse(aStack, 72000);
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
+
+ @Override
+ public final int getMaxItemUseDuration(ItemStack aStack) {
+ return 72000;
+ }
+
+ @Override
+ public final EnumAction getItemUseAction(ItemStack aStack) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && tStats.canBlock()) return EnumAction.block;
+ return EnumAction.none;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0; i < 32766; i+=2) if (getToolStats(new ItemStack(this, 1, i)) != null) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void registerIcons(IIconRegister aIconRegister) {
+ //
+ }
+
+ @Override
+ public final IIcon getIconFromDamage(int aMetaData) {
+ return null;
+ }
+
+ @Override
+ public void addAdditionalToolTips(List aList, ItemStack aStack) {
+ long tMaxDamage = getToolMaxDamage(aStack);
+ Materials tMaterial = getPrimaryMaterial(aStack);
+ IToolStats tStats = getToolStats(aStack);
+ int tOffset = getElectricStats(aStack) != null ? 2 : 1;
+ if (tStats != null) {
+ String name = aStack.getUnlocalizedName();
+ if(name.equals("gt.metatool.01.170")||name.equals("gt.metatool.01.172")||name.equals("gt.metatool.01.174")||name.equals("gt.metatool.01.176")){
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Turbine Efficency: " + EnumChatFormatting.BLUE + (50.0F+(10.0F*getToolCombatDamage(aStack))) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Steam flow: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed*1000) + EnumChatFormatting.GRAY+ "L/sec");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed*25) + EnumChatFormatting.GRAY+ "EU/t");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed*1000) + EnumChatFormatting.GRAY+ "EU/t");
+
+ }else{
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Attack Damage: " + EnumChatFormatting.BLUE + getToolCombatDamage(aStack) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Mining Speed: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + EnumChatFormatting.GRAY);
+ }}
+ }
+
+ public static final Materials getPrimaryMaterial(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("PrimaryMaterial"));
+ }
+ return Materials._NULL;
+ }
+
+ public static final Materials getSecondaryMaterial(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("SecondaryMaterial"));
+ }
+ return Materials._NULL;
+ }
+
+ @Override
+ public Long[] getFluidContainerStats(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public Long[] getElectricStats(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null && aNBT.getBoolean("Electric")) return new Long[] {aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"), aNBT.getLong("SpecialData")};
+ }
+ return null;
+ }
+
+ public float getToolCombatDamage(ItemStack aStack) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return 0;
+ return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality;
+ }
+
+ public static final long getToolMaxDamage(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return aNBT.getLong("MaxDamage");
+ }
+ return 0;
+ }
+
+ public static final long getToolDamage(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return aNBT.getLong("Damage");
+ }
+ return 0;
+ }
+
+ public static final boolean setToolDamage(ItemStack aStack, long aDamage) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) {
+ aNBT.setLong("Damage", aDamage);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public final boolean doDamageToItem(ItemStack aStack, int aVanillaDamage) {
+ return doDamage(aStack, aVanillaDamage * 100);
+ }
+
+ public final boolean doDamage(ItemStack aStack, long aAmount) {
+ if (!isItemStackUsable(aStack)) return false;
+ Long[] tElectric = getElectricStats(aStack);
+ if (tElectric == null) {
+ long tNewDamage = getToolDamage(aStack) + aAmount;
+ setToolDamage(aStack, tNewDamage);
+ if (tNewDamage >= getToolMaxDamage(aStack)) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || GT_Utility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) {
+ if (tStats != null) GT_Utility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F);
+ if (aStack.stackSize > 0) aStack.stackSize--;
+
+ }
+ }
+ return true;
+ }
+ if (use(aStack, (int)aAmount, null)) {
+ if (new Random().nextInt(25) == 0) {
+ long tNewDamage = getToolDamage(aStack) + aAmount;
+ setToolDamage(aStack, tNewDamage);
+ if (tNewDamage >= getToolMaxDamage(aStack)) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || GT_Utility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) {
+ if (tStats != null) GT_Utility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F);
+ if (aStack.stackSize > 0) aStack.stackSize--;
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public float getDigSpeed(ItemStack aStack, Block aBlock, int aMetaData) {
+ if (!isItemStackUsable(aStack)) return 0.0F;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F;
+ return tStats.isMinableBlock(aBlock, (byte)aMetaData)?Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed):0.0F;
+ }
+
+ @Override
+ public final boolean canHarvestBlock(Block aBlock, ItemStack aStack) {
+ return getDigSpeed(aStack, aBlock, (byte)0) > 0.0F;
+ }
+
+ @Override
+ public final int getHarvestLevel(ItemStack aStack, String aToolClass) {
+ IToolStats tStats = getToolStats(aStack);
+ return tStats == null ? -1 : tStats.getBaseQuality() + getPrimaryMaterial(aStack).mToolQuality;
+ }
+
+ @Override
+ public boolean onBlockDestroyed(ItemStack aStack, World aWorld, Block aBlock, int aX, int aY, int aZ, EntityLivingBase aPlayer) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return false;
+ GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F);
+ doDamage(aStack, (int)Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak()));
+ return getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F;
+ }
+
+ @Override
+ public final ItemStack getContainerItem(ItemStack aStack) {
+ return getContainerItem(aStack, true);
+ }
+
+ @Override
+ public final boolean hasContainerItem(ItemStack aStack) {
+ return getContainerItem(aStack, false) != null;
+ }
+
+ private ItemStack getContainerItem(ItemStack aStack, boolean playSound) {
+ if (!isItemStackUsable(aStack)) return null;
+ aStack = GT_Utility.copyAmount(1, aStack);
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return null;
+ doDamage(aStack, tStats.getToolDamagePerContainerCraft());
+ aStack = aStack.stackSize > 0 ? aStack : null;
+ if (playSound) {
+ String sound = (aStack == null) ? tStats.getBreakingSound() : tStats.getCraftingSound();
+ GT_Utility.doSoundAtClient(sound, 1, 1.0F);
+ }
+ return aStack;
+ }
+
+ public IToolStats getToolStats(ItemStack aStack) {
+ isItemStackUsable(aStack);
+ return getToolStatsInternal(aStack);
+ }
+
+ private IToolStats getToolStatsInternal(ItemStack aStack) {
+ return aStack == null ? null : mToolStats.get((short)aStack.getItemDamage());
+ }
+
+ @Override
+ public float getSaplingModifier(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) {
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isGrafter() ? Math.min(100.0F, (1+getHarvestLevel(aStack, "")) * 20.0F) : 0.0F;
+ }
+
+ @Override
+ public boolean canWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
+ }
+
+ @Override
+ public void onWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+
+ @Override
+ public boolean canLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
+ }
+
+ @Override
+ public void onLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+
+ @Override
+ public boolean canBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
+ }
+
+ @Override
+ public void onBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && aPlayer != null) tStats.onToolCrafted(aStack, aPlayer);
+ super.onCreated(aStack, aWorld, aPlayer);
+ }
+
+ @Override
+ public final boolean doesContainerItemLeaveCraftingGrid(ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public final int getItemStackLimit(ItemStack aStack) {
+ return 1;
+ }
+
+ @Override
+ public boolean isFull3D() {
+ return true;
+ }
+
+ @Override
+ public boolean isItemStackUsable(ItemStack aStack) {
+ IToolStats tStats = getToolStatsInternal(aStack);
+ if (aStack.getItemDamage() % 2 == 1 || tStats == null) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
+ return false;
+ }
+ Materials aMaterial = getPrimaryMaterial(aStack);
+ HashMap<Integer, Integer> tMap = new HashMap<Integer, Integer>(), tResult = new HashMap<Integer, Integer>();
+ if (aMaterial.mEnchantmentTools != null) {
+ tMap.put(aMaterial.mEnchantmentTools.effectId, (int)aMaterial.mEnchantmentToolsLevel);
+ if (aMaterial.mEnchantmentTools == Enchantment.fortune)
+ tMap.put(Enchantment.looting.effectId, (int)aMaterial.mEnchantmentToolsLevel);
+ if (aMaterial.mEnchantmentTools == Enchantment.knockback)
+ tMap.put(Enchantment.power.effectId, (int)aMaterial.mEnchantmentToolsLevel);
+ if (aMaterial.mEnchantmentTools == Enchantment.fireAspect)
+ tMap.put(Enchantment.flame.effectId, (int)aMaterial.mEnchantmentToolsLevel);
+ }
+ Enchantment[] tEnchants = tStats.getEnchantments(aStack);
+ int[] tLevels = tStats.getEnchantmentLevels(aStack);
+ for (int i = 0; i < tEnchants.length; i++) if (tLevels[i] > 0) {
+ Integer tLevel = tMap.get(tEnchants[i].effectId);
+ tMap.put(tEnchants[i].effectId, tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel+1 : Math.max(tLevel, tLevels[i]));
+ }
+ for (Entry<Integer, Integer> tEntry : tMap.entrySet()) {
+ if (tEntry.getKey() == 33 || (tEntry.getKey() == 20 && tEntry.getValue() > 2) || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId) tResult.put(tEntry.getKey(), tEntry.getValue()); else
+ switch(Enchantment.enchantmentsList[tEntry.getKey()].type) {
+ case weapon:
+ if (tStats.isWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case all:
+ tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case armor: case armor_feet: case armor_head: case armor_legs: case armor_torso:
+ break;
+ case bow:
+ if (tStats.isRangedWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case breakable:
+ break;
+ case fishing_rod:
+ break;
+ case digger:
+ if (tStats.isMiningTool()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ }
+ }
+ EnchantmentHelper.setEnchantments(tResult, aStack);
+ return true;
+ }
+
+ @Override
+ public short getChargedMetaData(ItemStack aStack) {
+ return (short)(aStack.getItemDamage() - (aStack.getItemDamage() % 2));
+ }
+
+ @Override
+ public short getEmptyMetaData(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
+ return (short)(aStack.getItemDamage()+1-(aStack.getItemDamage() % 2));
+ }
+
+ @Override public int getItemEnchantability() {return 0;}
+ @Override public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {return false;}
+ @Override public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {return false;}
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java
new file mode 100644
index 0000000000..2d9d8e0c4f
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java
@@ -0,0 +1,176 @@
+package gregtech.api.items;
+
+
+ import gregtech.api.enums.ItemList;
+import ic2.api.reactor.IReactor;
+import ic2.api.reactor.IReactorComponent;
+import ic2.core.IC2Potion;
+import ic2.core.Ic2Items;
+import ic2.core.init.InternalName;
+import ic2.core.item.ItemGradualInt;
+import ic2.core.item.armor.ItemArmorHazmat;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+
+ public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent
+ {
+ public final int numberOfCells;
+ public final float sEnergy;
+ public final int sRadiation;
+ public final float sHeat;
+
+ public GT_RadioactiveCellIC_Item( String aUnlocalized, String aEnglish, int aCellcount, int maxDamage, float aEnergy, int aRadiation, float aHeat)
+ {
+ super(aUnlocalized, aEnglish, aCellcount);
+ setMaxStackSize(64);
+ this.maxDmg=maxDamage;
+ this.numberOfCells = aCellcount;
+ this.sEnergy = aEnergy;
+ this.sRadiation = aRadiation;
+ this.sHeat = aHeat;
+
+ }
+
+
+ private class ItemStackCoord
+ {
+ public ItemStack stack;
+ public int x;
+ public int y;
+
+ public ItemStackCoord(ItemStack stack1, int x1, int y1)
+ {
+ this.stack = stack1;
+ this.x = x1;
+ this.y = y1;
+ }
+ }
+
+ public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y, boolean heatrun)
+ {
+ if (!reactor.produceEnergy()) {
+ return;
+ }
+ for (int iteration = 0; iteration < this.numberOfCells; iteration++)
+ {
+ int pulses = 1 + this.numberOfCells / 2;
+ if (!heatrun)
+ {
+ for (int i = 0; i < pulses; i++) {
+ acceptUraniumPulse(reactor, yourStack, yourStack, x, y, x, y, heatrun);
+ }
+ pulses += checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun) + checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun) + checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun) + checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun);
+ }
+ else
+ {
+ pulses += checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun) + checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun) + checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun) + checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun);
+
+ int heat = sumUp(pulses) * 4;
+
+ ArrayList<ItemStackCoord> heatAcceptors = new ArrayList();
+ checkHeatAcceptor(reactor, x - 1, y, heatAcceptors);
+ checkHeatAcceptor(reactor, x + 1, y, heatAcceptors);
+ checkHeatAcceptor(reactor, x, y - 1, heatAcceptors);
+ checkHeatAcceptor(reactor, x, y + 1, heatAcceptors);
+ heat = Math.round(heat * sHeat);
+ while ((heatAcceptors.size() > 0) && (heat > 0))
+ {
+
+ int dheat = heat / heatAcceptors.size();
+ heat -= dheat;
+ dheat = ((IReactorComponent)((ItemStackCoord)heatAcceptors.get(0)).stack.getItem()).alterHeat(reactor, ((ItemStackCoord)heatAcceptors.get(0)).stack, ((ItemStackCoord)heatAcceptors.get(0)).x, ((ItemStackCoord)heatAcceptors.get(0)).y, dheat);
+ heat += dheat;
+ heatAcceptors.remove(0);
+ }
+ if (heat > 0) {
+ reactor.addHeat(heat);
+ }
+ }
+ }
+ if (getDamageOfStack(yourStack) >= getMaxDamageEx() - 1) {
+ switch (this.numberOfCells)
+ {
+ case 1:
+ reactor.setItemAt(x, y, ItemList.Depleted_Thorium_1.get(1, new Object[0]));
+ break;
+ case 2:
+ reactor.setItemAt(x, y, ItemList.Depleted_Thorium_2.get(1, new Object[0]));
+ break;
+ case 4:
+ reactor.setItemAt(x, y, ItemList.Depleted_Thorium_4.get(1, new Object[0]));
+ }
+ } else if (heatrun) {
+ damageItemStack(yourStack, 1);
+ }
+ }
+
+
+ private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun)
+ {
+ ItemStack other = reactor.getItemAt(x, y);
+ if ((other != null) && ((other.getItem() instanceof IReactorComponent)) &&
+ (((IReactorComponent)other.getItem()).acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun))) {
+ return 1;
+ }
+ return 0;
+ }
+
+ private void checkHeatAcceptor(IReactor reactor, int x, int y, ArrayList<ItemStackCoord> heatAcceptors)
+ {
+ ItemStack thing = reactor.getItemAt(x, y);
+ if ((thing != null) && ((thing.getItem() instanceof IReactorComponent)) &&
+ (((IReactorComponent)thing.getItem()).canStoreHeat(reactor, thing, x, y))) {
+ heatAcceptors.add(new ItemStackCoord(thing, x, y));
+ }
+ }
+
+ public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, int pulseX, int pulseY, boolean heatrun)
+ {
+ if (!heatrun) {
+ reactor.addOutput((float) (1.0F*this.sEnergy));
+ }
+ return true;
+ }
+
+ public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y)
+ {
+ return false;
+ }
+
+ public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y)
+ {
+ return 0;
+ }
+
+ public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y)
+ {
+ return 0;
+ }
+
+ public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat)
+ {
+ return heat;
+ }
+
+ public float influenceExplosion(IReactor reactor, ItemStack yourStack)
+ {
+ return 2 * this.numberOfCells;
+ }
+
+ public void onUpdate(ItemStack stack, World world, Entity entity, int slotIndex, boolean isCurrentItem)
+ {
+ if (this.sRadiation>0&&(entity instanceof EntityLivingBase))
+ {
+ EntityLivingBase entityLiving = (EntityLivingBase)entity;
+ if (!ItemArmorHazmat.hasCompleteHazmat(entityLiving)) {
+ IC2Potion.radiation.applyTo(entityLiving, sRadiation*20, sRadiation*10);
+ }
+ }
+ }
+ }
diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java
new file mode 100644
index 0000000000..a8cc213072
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java
@@ -0,0 +1,161 @@
+package gregtech.api.items;
+
+import ic2.core.util.StackUtil;
+
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_RadioactiveCell_Item
+ extends GT_Generic_Item
+{
+ protected int cellCount;
+ protected int maxDmg;
+ protected int dura;
+
+ public GT_RadioactiveCell_Item(String aUnlocalized, String aEnglish, int aCellcount)
+ {
+ super(aUnlocalized, aEnglish, null);
+ this.setMaxStackSize(64);
+ this.setMaxDamage(100);
+ setNoRepair();
+ this.cellCount = Math.max(1, aCellcount);
+ }
+
+ protected boolean outputPulseForStack(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ tNBT.setInteger("output", tNBT.getInteger("output") + 1);
+ return false;//(this.pulserate > 0) || (tNBT.getInteger("output") % -this.pulserate == 0);
+ }
+
+ protected boolean incrementPulseForStack(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ tNBT.setInteger("pulse", tNBT.getInteger("pulse") + 1);
+ return false;//(this.pulserate > 0) || (tNBT.getInteger("pulse") % -this.pulserate == 0);
+ }
+
+ protected void setDurabilityForStack(ItemStack aStack, int aDurability)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ tNBT.setInteger("durability", aDurability);
+// if (this.maxDelay > 0)
+// {
+// double var4 = (this.maxDelay - aDurability) / this.maxDelay;
+// int var6 = (int)(aStack.getMaxDamage() * var4);
+// if (var6 >= aStack.getMaxDamage()) {
+// var6 = aStack.getMaxDamage() - 1;
+// }
+// aStack.setItemDamage(aStack.getMaxDamage() - var6);
+// }
+ }
+
+ public static int getDurabilityOfStack(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ tNBT = new NBTTagCompound();
+ aStack.setTagCompound(tNBT);
+ }
+ return tNBT.getInteger("advDmg");
+ }
+
+ public int getMaxNuclearDurability()
+ {
+ return 0;//return this.maxDelay;
+ }
+
+ public int func_77619_b()
+ {
+ return 0;
+ }
+
+ public boolean isBookEnchantable(ItemStack itemstack1, ItemStack itemstack2)
+ {
+ return false;
+ }
+
+ public boolean func_82789_a(ItemStack par1ItemStack, ItemStack par2ItemStack)
+ {
+ return false;
+ }
+
+ protected static int sumUp(int a)
+ {
+ int b = 0;
+ for (int c = 1; c <= a; c++) {
+ b += c;
+ }
+ return b;
+ }
+
+ public void setDamageForStack(ItemStack stack, int advDmg)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ nbtData.setInteger("advDmg", advDmg);
+ if (this.maxDmg > 0)
+ {
+ double p = (double)advDmg / (double)this.maxDmg;
+ int newDmg = (int)(stack.getMaxDamage() * p);
+ if (newDmg >= stack.getMaxDamage()) {
+ newDmg = stack.getMaxDamage() - 1;
+ }
+ stack.setItemDamage(newDmg);
+ this.dura = newDmg;
+ }
+ }
+
+ public int getDamageOfStack(ItemStack stack)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ this.dura = nbtData.getInteger("advDmg");
+ return this.dura;
+ }
+
+ public int getControlTagOfStack(ItemStack stack)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ return nbtData.getInteger("tag");
+ }
+
+ public void setControlTagOfStack(ItemStack stack, int tag)
+ {
+ NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack);
+ nbtData.setInteger("tag", tag);
+ }
+
+ public int getMaxDamageEx()
+ {
+ return this.maxDmg;
+ }
+
+ public void damageItemStack(ItemStack stack, int Dmg)
+ {
+ setDamageForStack(stack, getDamageOfStack(stack) + Dmg);
+ }
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ super.addAdditionalToolTips(aList, aStack);
+ //aList.add("Time left: " + (this.maxDelay - getDurabilityOfStack(aStack)) + " secs");
+ aList.add("Durability: "+(this.maxDmg - getDurabilityOfStack(aStack))+"/"+this.maxDmg);
+ }
+}
diff --git a/src/main/java/gregtech/api/items/GT_SolderingTool_Item.java b/src/main/java/gregtech/api/items/GT_SolderingTool_Item.java
new file mode 100644
index 0000000000..0c8e3a8e2b
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_SolderingTool_Item.java
@@ -0,0 +1,40 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+
+import java.util.List;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class GT_SolderingTool_Item extends GT_Tool_Item {
+ public GT_SolderingTool_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, int aDischargedGTID) {
+ super(aUnlocalized, aEnglish, "To repair and construct Circuitry", aMaxDamage, aEntityDamage, true, -1, aDischargedGTID);
+ GT_OreDictUnificator.registerOre(ToolDictNames.craftingToolSolderingIron, new ItemStack(this, 1, W));
+ GregTech_API.registerSolderingTool(new ItemStack(this, 1, W));
+// setCraftingSound(GregTech_API.sSoundList.get(103));
+// setBreakingSound(GregTech_API.sSoundList.get(103));
+// setEntityHitSound(GregTech_API.sSoundList.get(103));
+// setUsageAmounts(1, 1, 1);
+ }
+
+ @Override
+ public void addAdditionalToolTips(List aList, ItemStack aStack) {
+ aList.add(GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip_1", "Sets the Strength of outputted Redstone"));
+ aList.add(GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip_2", "Needs Soldering Metal in Inventory!"));
+ }
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Bug_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Bug_Item.java
new file mode 100644
index 0000000000..d39d3d67a1
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Bug_Item.java
@@ -0,0 +1,66 @@
+package gregtech.api.items;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class GT_Spray_Bug_Item extends GT_Tool_Item {
+ public GT_Spray_Bug_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "A very 'buggy' Spray", aMaxDamage, aEntityDamage, true);/*
+ addToEffectiveList(EntityCaveSpider.class.getName());
+ addToEffectiveList(EntitySpider.class.getName());
+ addToEffectiveList("EntityTFHedgeSpider");
+ addToEffectiveList("EntityTFKingSpider");
+ addToEffectiveList("EntityTFSwarmSpider");
+ addToEffectiveList("EntityTFTowerBroodling");
+ addToEffectiveList("EntityTFFireBeetle");
+ addToEffectiveList("EntityTFSlimeBeetle");
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(8, 4, 1);*/
+ }
+ /*
+ @Override
+ public void onHitEntity(Entity aEntity) {
+ if (aEntity instanceof EntityLiving) {
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.poison.getId(), 60, 1, false));
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.confusion.getId(), 600, 1, false));
+ }
+ }
+
+ @Override
+ public ItemStack getEmptiedItem(ItemStack aStack) {
+ return ItemList.Spray_Empty.get(1);
+ }
+ */
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+// byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ try {
+ if (aTileEntity instanceof ic2.api.crops.ICropTile) {
+ int tCropBefore = ((ic2.api.crops.ICropTile)aTileEntity).getWeedExStorage();
+ if (tCropBefore <= 100 && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ ((ic2.api.crops.ICropTile)aTileEntity).setWeedExStorage(tCropBefore+100);
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ return true;
+ }
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Foam_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Foam_Item.java
new file mode 100644
index 0000000000..20f2971e87
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Foam_Item.java
@@ -0,0 +1,160 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.D1;
+import gregtech.api.GregTech_API;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_Spray_Foam_Item extends GT_Tool_Item {
+ public GT_Spray_Foam_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "Precision Spray", aMaxDamage, aEntityDamage, true);/*
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(25, 3, 1);*/
+ }
+ /*
+ @Override
+ public ItemStack getEmptiedItem(ItemStack aStack) {
+ return ItemList.Spray_Empty.get(1);
+ }
+
+ public void switchMode(ItemStack aStack, EntityPlayer aPlayer) {
+ setMode(aStack, (getMode(aStack) + 1) % 3);
+ switch (getMode(aStack)) {
+ case 0: GT_Utility.sendChatToPlayer(aPlayer, "Single Block Mode"); break;
+ case 1: GT_Utility.sendChatToPlayer(aPlayer, "4m Line Mode"); break;
+ case 2: GT_Utility.sendChatToPlayer(aPlayer, "3mx3m Area Mode"); break;
+ }
+ }
+
+ @Override
+ public void addAdditionalToolTips(List aList, ItemStack aStack) {
+ super.addAdditionalToolTips(aList, aStack);
+ switch (getMode(aStack)) {
+ case 0: aList.add("Single Block Mode"); break;
+ case 1: aList.add("4m Line Mode"); break;
+ case 2: aList.add("3mx3m Area Mode"); break;
+ }
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ if (aPlayer.isSneaking()) switchMode(aStack, aPlayer);
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
+ */
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aPlayer.isSneaking()) return false;
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+// byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ try {
+ if (GT_Utility.getClassName(aTileEntity).startsWith("TileEntityCable")) {
+ if (GT_Utility.getPublicField(aTileEntity, "foamed").getByte(aTileEntity) == 0) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ GT_Utility.callPublicMethod(aTileEntity, "changeFoam", (byte)1);
+ return true;
+ }
+ }
+ return false;
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+
+ if (aTileEntity instanceof BaseMetaPipeEntity && (((BaseMetaPipeEntity)aTileEntity).mConnections & -64) == 0) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ ((BaseMetaPipeEntity)aTileEntity).mConnections |= 64;
+ }
+ return true;
+ }
+
+ aX += ForgeDirection.getOrientation(aSide).offsetX;
+ aY += ForgeDirection.getOrientation(aSide).offsetY;
+ aZ += ForgeDirection.getOrientation(aSide).offsetZ;
+
+ ItemStack tStack = GT_ModHandler.getIC2Item("constructionFoam", 1);
+ if (tStack != null && tStack.getItem() instanceof ItemBlock) {
+ int tRotationPitch = Math.round(aPlayer.rotationPitch);
+ byte tSide = 0;
+ if (tRotationPitch >= 65) {
+ tSide = 1;
+ } else if (tRotationPitch <= -65) {
+ tSide = 0;
+ } else {
+ switch (MathHelper.floor_double((aPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) {
+ case 0: tSide = 2; break;
+ case 1: tSide = 5; break;
+ case 2: tSide = 3; break;
+ case 3: tSide = 4; break;
+ }
+ }
+ switch (0) {
+ case 0:
+ if (GT_Utility.isBlockAir(aWorld, aX, aY, aZ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, GT_Utility.getBlockFromStack(tStack), tStack.getItemDamage(), 3);
+ return true;
+ }
+ break;
+ case 1:
+ for (byte i = 0; i < 4; i++) {
+ if (GT_Utility.isBlockAir(aWorld, aX, aY, aZ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, GT_Utility.getBlockFromStack(tStack), tStack.getItemDamage(), 3);
+ } else {
+ if (i == 0) return false;
+ break;
+ }
+ aX -= ForgeDirection.getOrientation(tSide).offsetX;
+ aY -= ForgeDirection.getOrientation(tSide).offsetY;
+ aZ -= ForgeDirection.getOrientation(tSide).offsetZ;
+ }
+ return true;
+ case 2:
+ boolean temp = false,
+ tXFactor = (ForgeDirection.getOrientation(tSide).offsetX == 0),
+ tYFactor = (ForgeDirection.getOrientation(tSide).offsetY == 0),
+ tZFactor = (ForgeDirection.getOrientation(tSide).offsetZ == 0);
+
+ aX -= (tXFactor ? 1 : 0);
+ aY -= (tYFactor ? 1 : 0);
+ aZ -= (tZFactor ? 1 : 0);
+
+ for (byte i = 0; i < 3; i++) for (byte j = 0; j < 3; j++) {
+ if (GT_Utility.isBlockAir(aWorld, aX + (tXFactor?i:0), aY + (!tXFactor&&tYFactor?i:0) + (!tZFactor&&tYFactor?j:0), aZ + (tZFactor?j:0))) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX + (tXFactor?i:0), aY + (!tXFactor&&tYFactor?i:0) + (!tZFactor&&tYFactor?j:0), aZ + (tZFactor?j:0), GT_Utility.getBlockFromStack(tStack), tStack.getItemDamage(), 3);
+ temp = true;
+ } else {
+ break;
+ }
+ }
+ }
+ return temp;
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Hardener_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Hardener_Item.java
new file mode 100644
index 0000000000..bd90c295ec
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Hardener_Item.java
@@ -0,0 +1,70 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.D1;
+import gregtech.api.GregTech_API;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class GT_Spray_Hardener_Item extends GT_Tool_Item {
+ public GT_Spray_Hardener_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "Construction Foam Hardener", aMaxDamage, aEntityDamage, true);/*
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(16, 3, 1);*/
+ }
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+// byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ try {
+ if (GT_Utility.getClassName(aTileEntity).startsWith("TileEntityCable")) {
+ if (GT_Utility.getPublicField(aTileEntity, "foamed").getByte(aTileEntity) == 1) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ GT_Utility.callPublicMethod(aTileEntity, "changeFoam", (byte)2);
+ return true;
+ }
+ }
+ return false;
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+
+ ItemStack tStack1 = GT_ModHandler.getIC2Item("constructionFoam", 1), tStack2 = GT_ModHandler.getIC2Item("constructionFoamWall", 1);
+ if (tStack1 != null && tStack1.isItemEqual(new ItemStack(aBlock)) && tStack2 != null && tStack2.getItem() != null && tStack2.getItem() instanceof ItemBlock) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, GT_Utility.getBlockFromStack(tStack2), 7, 3);
+ }
+ return true;
+ }
+
+ if (aTileEntity instanceof BaseMetaPipeEntity && (((BaseMetaPipeEntity)aTileEntity).mConnections & -64) == 64) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ ((BaseMetaPipeEntity)aTileEntity).mConnections = (byte)((((BaseMetaPipeEntity)aTileEntity).mConnections & ~64) | -128);
+ }
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Hydration_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Hydration_Item.java
new file mode 100644
index 0000000000..2fbc1f38f9
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Hydration_Item.java
@@ -0,0 +1,53 @@
+package gregtech.api.items;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class GT_Spray_Hydration_Item extends GT_Tool_Item {
+ public GT_Spray_Hydration_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "To hydrate Crops and similar", aMaxDamage, aEntityDamage, true);/*
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(20, 3, 1);*/
+ }
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+// byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ try {
+ if (aTileEntity instanceof ic2.api.crops.ICropTile) {
+ int tCropBefore = ((ic2.api.crops.ICropTile)aTileEntity).getHydrationStorage();
+ if (tCropBefore <= 100 && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ ((ic2.api.crops.ICropTile)aTileEntity).setHydrationStorage(tCropBefore+100);
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ }
+ return true;
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+
+ if (aTileEntity instanceof IGregTechTileEntity) {
+ if (((IGregTechTileEntity)aTileEntity).getColorization() >= 0 && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ ((IGregTechTileEntity)aTileEntity).setColorization((byte)-1);
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ }
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Ice_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Ice_Item.java
new file mode 100644
index 0000000000..2e8c4ed0a8
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Ice_Item.java
@@ -0,0 +1,81 @@
+package gregtech.api.items;
+
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Arrays;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_Spray_Ice_Item extends GT_Tool_Item {
+ public GT_Spray_Ice_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "Very effective against Slimes", aMaxDamage, aEntityDamage, true);/*
+ addToEffectiveList(EntitySlime.class.getName());
+ addToEffectiveList("BlueSlime");
+ addToEffectiveList("SlimeClone");
+ addToEffectiveList("MetalSlime");
+ addToEffectiveList("EntityTFFireBeetle");
+ addToEffectiveList("EntityTFMazeSlime");
+ addToEffectiveList("EntityTFSlimeBeetle");
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(4, 16, 1);*/
+
+ for (Object tName : Arrays.asList(OrePrefixes.bucket.get(Materials.Water), OrePrefixes.cell.get(Materials.Water), OrePrefixes.capsule.get(Materials.Water))) {
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.ice, 1, 0), new Object[] {new ItemStack(this, 1, W), tName});
+ }
+ }
+ /*
+ @Override
+ public void onHitEntity(Entity aEntity) {
+ if (aEntity instanceof EntityLiving) {
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.weakness.getId(), 400, 2, false));
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 400, 2, false));
+ }
+ }
+ */
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ aX += ForgeDirection.getOrientation(aSide).offsetX;
+ aY += ForgeDirection.getOrientation(aSide).offsetY;
+ aZ += ForgeDirection.getOrientation(aSide).offsetZ;
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+// TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ if (aBlock == Blocks.water || aBlock == Blocks.flowing_water) {
+ if (aMeta == 0 && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, Blocks.ice, 0, 3);
+ return true;
+ }
+ return false;
+ }
+
+ if (aBlock == Blocks.lava || aBlock == Blocks.flowing_lava) {
+ if (aMeta == 0 && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(102), 1.0F, -1, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, Blocks.obsidian, 0, 3);
+ return true;
+ }
+ return false;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Spray_Pepper_Item.java b/src/main/java/gregtech/api/items/GT_Spray_Pepper_Item.java
new file mode 100644
index 0000000000..65f7469126
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Spray_Pepper_Item.java
@@ -0,0 +1,52 @@
+package gregtech.api.items;
+
+import gregtech.api.util.GT_LanguageManager;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class GT_Spray_Pepper_Item extends GT_Tool_Item {
+ public GT_Spray_Pepper_Item(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage) {
+ super(aUnlocalized, aEnglish, "To defend yourself against Bears", aMaxDamage, aEntityDamage, true);/*
+ setCraftingSound(GregTech_API.sSoundList.get(102));
+ setBreakingSound(GregTech_API.sSoundList.get(102));
+ setEntityHitSound(GregTech_API.sSoundList.get(102));
+ setUsageAmounts(1, 8, 1);*/
+ }
+
+ @Override
+ public void addAdditionalToolTips(List aList, ItemStack aStack) {
+ aList.add(GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip_1", "especially Pedobears, Care Bears,"));
+ aList.add(GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip_2", "Confession Bears, Bear Grylls"));
+ aList.add(GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip_3", "And ofcourse Man-Bear-Pig"));
+ }
+ /*
+ @Override
+ public void onHitEntity(Entity aEntity) {
+ if (aEntity instanceof EntityLiving) {
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.blindness.getId(), 1200, 2, false));
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.poison.getId(), 120, 2, false));
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.weakness.getId(), 200, 2, false));
+ ((EntityLiving)aEntity).addPotionEffect(new PotionEffect(Potion.confusion.getId(), 600, 2, false));
+ }
+ }
+ */
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ super.onItemUseFirst(aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ);
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) return false;
+// byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+// TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/items/GT_Tool_Item.java b/src/main/java/gregtech/api/items/GT_Tool_Item.java
new file mode 100644
index 0000000000..6c61d596f3
--- /dev/null
+++ b/src/main/java/gregtech/api/items/GT_Tool_Item.java
@@ -0,0 +1,25 @@
+package gregtech.api.items;
+
+import gregtech.api.util.GT_ModHandler;
+
+/**
+ * This is just a basic Tool, which has normal durability and could break Blocks.
+ */
+public class GT_Tool_Item extends GT_Generic_Item {
+ public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, boolean aSwingIfUsed) {
+ this(aUnlocalized, aEnglish, aTooltip, aMaxDamage, aEntityDamage, aSwingIfUsed, -1, -1);
+ }
+
+ public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID) {
+ this(aUnlocalized, aEnglish, aTooltip, aMaxDamage, aEntityDamage, aSwingIfUsed, aChargedGTID, aDisChargedGTID, 0, 0.0F);
+ }
+
+ public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID, int aToolQuality, float aToolStrength) {
+ super(aUnlocalized, aEnglish, aTooltip, aTooltip != null && !aTooltip.equals("Doesn't work as intended, this is a Bug"));
+ setMaxDamage(aMaxDamage);
+ setMaxStackSize(1);
+ setNoRepair();
+ setFull3D();
+ GT_ModHandler.registerBoxableItemToToolBox(this);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
new file mode 100644
index 0000000000..4244753ba7
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -0,0 +1,1016 @@
+package gregtech.api.metatileentity;
+
+import static gregtech.api.enums.GT_Values.NW;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity;
+import gregtech.api.net.GT_Packet_TileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.network.Packet;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main TileEntity for EVERYTHING.
+ */
+public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileEntity, IPipeRenderedTileEntity {
+ public byte mConnections = 0;
+
+ protected MetaPipeEntity mMetaTileEntity;
+
+ private byte[] mSidedRedstone = new byte[] {0,0,0,0,0,0};
+ private int[] mCoverSides = new int[] {0,0,0,0,0,0}, mCoverData = new int[] {0,0,0,0,0,0}, mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
+ private boolean mInventoryChanged = false, mWorkUpdate = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false;
+ private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, mLagWarningCount = 0;
+ private int oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0;
+ private short mID = 0;
+ private long mTickTimer = 0;
+
+ public BaseMetaPipeEntity() {}
+
+ @Override
+ public void writeToNBT(NBTTagCompound aNBT) {
+ try {
+ super.writeToNBT(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ try {
+ aNBT.setInteger ("mID" , mID);
+ aNBT.setIntArray ("mCoverData" , mCoverData);
+ aNBT.setIntArray ("mCoverSides" , mCoverSides);
+ aNBT.setByteArray ("mRedstoneSided" , mSidedRedstone);
+ aNBT.setByte ("mConnections" , mConnections);
+ aNBT.setByte ("mColor" , mColor);
+ aNBT.setByte ("mStrongRedstone" , mStrongRedstone);
+ aNBT.setBoolean ("mWorks" , !mWorks);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ try {
+ if (hasValidMetaTileEntity()) {
+ NBTTagList tItemList = new NBTTagList();
+ for (int i = 0; i < mMetaTileEntity.getRealInventory().length; i++) {
+ ItemStack tStack = mMetaTileEntity.getRealInventory()[i];
+ if (tStack != null) {
+ NBTTagCompound tTag = new NBTTagCompound();
+ tTag.setInteger("IntSlot", i);
+ tStack.writeToNBT(tTag);
+ tItemList.appendTag(tTag);
+ }
+ }
+ aNBT.setTag("Inventory", tItemList);
+
+ try {
+ mMetaTileEntity.saveNBTData(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound aNBT) {
+ super.readFromNBT(aNBT);
+ setInitialValuesAsNBT(aNBT, (short)0);
+ }
+
+ @Override
+ public void setInitialValuesAsNBT(NBTTagCompound aNBT, short aID) {
+ if (aNBT == null) {
+ if (aID>0) mID=aID; else mID=mID>0?mID:0;
+ if (mID!=0) createNewMetatileEntity(mID);
+ } else {
+ if (aID<=0) mID = (short)aNBT.getInteger ("mID"); else mID = aID;
+ mCoverSides = aNBT.getIntArray ("mCoverSides");
+ mCoverData = aNBT.getIntArray ("mCoverData");
+ mSidedRedstone = aNBT.getByteArray ("mRedstoneSided");
+ mConnections = aNBT.getByte ("mConnections");
+ mColor = aNBT.getByte ("mColor");
+ mStrongRedstone = aNBT.getByte ("mStrongRedstone");
+ mWorks =!aNBT.getBoolean ("mWorks");
+
+ if (mCoverData.length != 6) mCoverData = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mCoverSides.length != 6) mCoverSides = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mSidedRedstone.length != 6) mSidedRedstone = new byte[] { 0, 0, 0, 0, 0, 0};
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+
+ if (mID!=0 && createNewMetatileEntity(mID)) {
+ NBTTagList tItemList = aNBT.getTagList("Inventory", 10);
+ for (int i = 0; i < tItemList.tagCount(); i++) {
+ NBTTagCompound tTag = tItemList.getCompoundTagAt(i);
+ int tSlot = tTag.getInteger("IntSlot");
+ if (tSlot >= 0 && tSlot < mMetaTileEntity.getRealInventory().length) {
+ mMetaTileEntity.getRealInventory()[tSlot] = GT_Utility.loadItem(tTag);
+ }
+ }
+
+ try {
+ mMetaTileEntity.loadNBTData(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while loading MetaTileEntity, the Server should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ if (mCoverData.length != 6) mCoverData = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mCoverSides.length != 6) mCoverSides = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mSidedRedstone.length != 6) mSidedRedstone = new byte[] { 0, 0, 0, 0, 0, 0};
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ }
+
+ private boolean createNewMetatileEntity(short aID) {
+ if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) {
+ GT_Log.err.println("MetaID " + aID + " not loadable => locking TileEntity!");
+ } else {
+ if (aID != 0) {
+ if (hasValidMetaTileEntity()) mMetaTileEntity.setBaseMetaTileEntity(null);
+ GregTech_API.METATILEENTITIES[aID].newMetaEntity(this).setBaseMetaTileEntity(this);
+ mTickTimer = 0;
+ mID = aID;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void updateEntity() {
+ super.updateEntity();
+
+ if (!hasValidMetaTileEntity()) {
+ if (mMetaTileEntity == null) return;
+ mMetaTileEntity.setBaseMetaTileEntity(this);
+ }
+
+ long tTime = System.currentTimeMillis();
+
+ for (int tCode = 0; hasValidMetaTileEntity() && tCode >= 0;) {try {switch (tCode) {
+ case 0:
+ tCode++;
+ if (mTickTimer++==0) {
+ oX = xCoord;
+ oY = yCoord;
+ oZ = zCoord;
+ if (isServerSide()) for (byte i = 0; i < 6; i++) if (getCoverIDAtSide(i)!=0) if (!mMetaTileEntity.allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) dropCover(i, i, true);
+ worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this);
+ mMetaTileEntity.onFirstTick(this);
+ if (!hasValidMetaTileEntity()) return;
+ }
+ case 1:
+ tCode++;
+ if (isClientSide()) {
+ if (mColor != oColor) {
+ mMetaTileEntity.onColorChangeClient(oColor = mColor);
+ issueTextureUpdate();
+ }
+
+ if (mNeedsUpdate) {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ //worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ mNeedsUpdate = false;
+ }
+ }
+ case 2: case 3: case 4: case 5: case 6: case 7:
+ if (isServerSide() && mTickTimer > 10) {
+ for (byte i = (byte)(tCode-2); i < 6; i++) if (getCoverIDAtSide(i) != 0) {
+ tCode++;
+ GT_CoverBehavior tCover = getCoverBehaviorAtSide(i);
+ int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this);
+ if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) {
+ mCoverData[i] = tCover.doCoverThings(i, getInputRedstoneSignal(i), getCoverIDAtSide(i), mCoverData[i], this, mTickTimer);
+ if (!hasValidMetaTileEntity()) return;
+ }
+ }
+ mConnections = (byte)(mMetaTileEntity.mConnections | (mConnections & ~63));
+ if ((mConnections & -64) == 64 && getRandomNumber(1000) == 0) {
+ mConnections = (byte)((mConnections & ~64) | -128);
+ }
+ }
+ case 8:
+ tCode=9;
+ mMetaTileEntity.onPreTick(this, mTickTimer);
+ if (!hasValidMetaTileEntity()) return;
+ case 9:
+ tCode++;
+ if (isServerSide()) {
+ if (mTickTimer == 10) {
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ issueBlockUpdate();
+ }
+
+ if (xCoord != oX || yCoord != oY || zCoord != oZ) {
+ oX = xCoord;
+ oY = yCoord;
+ oZ = zCoord;
+ issueClientUpdate();
+ clearTileEntityBuffer();
+ }
+ }
+ case 10:
+ tCode++;
+ mMetaTileEntity.onPostTick(this, mTickTimer);
+ if (!hasValidMetaTileEntity()) return;
+ case 11:
+ tCode++;
+ if (isServerSide()) {
+ if (mTickTimer % 10 == 0) {
+ if (mSendClientData) {
+ NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_TileEntity(xCoord, (short)yCoord, zCoord, mID, mCoverSides[0], mCoverSides[1], mCoverSides[2], mCoverSides[3], mCoverSides[4], mCoverSides[5], oTextureData = mConnections, oUpdateData = hasValidMetaTileEntity()?mMetaTileEntity.getUpdateData():0, oRedstoneData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0)), oColor = mColor), xCoord, zCoord);
+ mSendClientData = false;
+ }
+ }
+
+ if (mTickTimer > 10) {
+ if (mConnections != oTextureData) sendBlockEvent((byte)0, oTextureData = mConnections);
+ byte tData = mMetaTileEntity.getUpdateData();
+ if (tData != oUpdateData) sendBlockEvent((byte)1, oUpdateData = tData);
+ if (mColor != oColor) sendBlockEvent((byte)2, oColor = mColor);
+ tData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0));
+ if (tData != oRedstoneData) sendBlockEvent((byte)3, oRedstoneData = tData);
+ }
+
+ if (mNeedsBlockUpdate) {
+ worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockOffset(0, 0, 0));
+ mNeedsBlockUpdate = false;
+ }
+ }
+ default:
+ tCode = -1;
+ break;
+ }} catch (Throwable e) {
+ GT_Log.err.println("Encountered Exception while ticking MetaTileEntity in Step "+(tCode-1)+". The Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }}
+
+ if (isServerSide() && hasValidMetaTileEntity()) {
+ tTime = System.currentTimeMillis() - tTime;
+ if (mTimeStatistics.length > 0) mTimeStatistics[mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length] = (int)tTime;
+ if (tTime > 0 && tTime > GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++<10) System.out.println("WARNING: Possible Lag Source at [" + xCoord + ", " + yCoord + ", " + zCoord + "] in Dimension " + worldObj.provider.dimensionId + " with " + tTime + "ms caused by an instance of " + getMetaTileEntity().getClass());
+ }
+
+ mWorkUpdate = mInventoryChanged = false;
+ }
+
+ @Override
+ public Packet getDescriptionPacket() {
+ issueClientUpdate();
+ return null;
+ }
+
+ public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
+ issueTextureUpdate();
+ if (mID != aID && aID > 0) {
+ mID = aID;
+ createNewMetatileEntity(mID);
+ }
+
+ mCoverSides[0] = aCover0;
+ mCoverSides[1] = aCover1;
+ mCoverSides[2] = aCover2;
+ mCoverSides[3] = aCover3;
+ mCoverSides[4] = aCover4;
+ mCoverSides[5] = aCover5;
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+
+ receiveClientEvent(0, aTextureData);
+ receiveClientEvent(1, aUpdateData);
+ receiveClientEvent(2, aColorData);
+ receiveClientEvent(3, aRedstoneData);
+ }
+
+ @Override
+ public boolean receiveClientEvent(int aEventID, int aValue) {
+ super.receiveClientEvent(aEventID, aValue);
+
+ if (hasValidMetaTileEntity()) {
+ try {
+ mMetaTileEntity.receiveClientEvent((byte)aEventID, (byte)aValue);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while receiving Data from the Server, the Client should've been crashed by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ if (isClientSide()) {
+ issueTextureUpdate();
+ switch(aEventID) {
+ case 0:
+ mConnections = (byte)aValue;
+ break;
+ case 1:
+ if (hasValidMetaTileEntity()) mMetaTileEntity.onValueUpdate((byte)aValue);
+ break;
+ case 2:
+ if (aValue > 16 || aValue < 0) aValue = 0;
+ mColor = (byte)aValue;
+ break;
+ case 3:
+ mSidedRedstone[0] = (byte)((aValue& 1)>0?15:0);
+ mSidedRedstone[1] = (byte)((aValue& 2)>0?15:0);
+ mSidedRedstone[2] = (byte)((aValue& 4)>0?15:0);
+ mSidedRedstone[3] = (byte)((aValue& 8)>0?15:0);
+ mSidedRedstone[4] = (byte)((aValue&16)>0?15:0);
+ mSidedRedstone[5] = (byte)((aValue&32)>0?15:0);
+ break;
+ case 4:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.doSound((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ case 5:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.startSoundLoop((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ case 6:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.stopSoundLoop((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ }
+ }
+ return true;
+ }
+
+ public ArrayList<String> getDebugInfo(EntityPlayer aPlayer, int aLogLevel) {
+ ArrayList<String> tList = new ArrayList<String>();
+ if (aLogLevel > 2) {
+ tList.add("Meta-ID: " + mID + (hasValidMetaTileEntity()?" valid":" invalid") + (mMetaTileEntity==null?" MetaTileEntity == null!":" "));
+ }
+ if (aLogLevel > 1) {
+ if (mTimeStatistics.length > 0) {
+ double tAverageTime = 0; for (int tTime : mTimeStatistics) tAverageTime += tTime;
+ tList.add("This particular TileEntity has caused an average CPU-load of ~" + (tAverageTime/mTimeStatistics.length) + "ms over the last " + mTimeStatistics.length + " ticks.");
+ }
+ if (mLagWarningCount > 0) {
+ tList.add("This TileEntity has also caused " + (mLagWarningCount>=10?"more than 10":mLagWarningCount) + " Lag Spike Warnings (anything taking longer than " + GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + "ms) on the Server.");
+ }
+ tList.add("Is" + (mMetaTileEntity.isAccessAllowed(aPlayer)?" ":" not ") + "accessible for you");
+ }
+ return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList);
+ }
+
+ @Override public void issueTextureUpdate() {mNeedsUpdate = true;}
+ @Override public void issueBlockUpdate() {mNeedsBlockUpdate = true;}
+ @Override public void issueClientUpdate() {mSendClientData = true;}
+ @Override public void issueCoverUpdate(byte aSide) {issueClientUpdate();}
+
+ @Override public byte getStrongestRedstone() {return (byte)Math.max(getInternalInputRedstoneSignal((byte)0), Math.max(getInternalInputRedstoneSignal((byte)1), Math.max(getInternalInputRedstoneSignal((byte)2), Math.max(getInternalInputRedstoneSignal((byte)3), Math.max(getInternalInputRedstoneSignal((byte)4), getInternalInputRedstoneSignal((byte)5))))));}
+
+ @Override public boolean getRedstone() {return getRedstone((byte)0)||getRedstone((byte)1)||getRedstone((byte)2)||getRedstone((byte)3)||getRedstone((byte)4)||getRedstone((byte)5);}
+ @Override public boolean getRedstone(byte aSide) {return getInternalInputRedstoneSignal(aSide) > 0;}
+
+ public ITexture getCoverTexture(byte aSide) {return GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));}
+
+ @Override public boolean isGivingInformation() {if (canAccessData()) return mMetaTileEntity.isGivingInformation(); return false;}
+ @Override public boolean isValidFacing(byte aSide) {if (canAccessData()) return mMetaTileEntity.isFacingValid(aSide); return false;}
+ @Override public byte getBackFacing() {return GT_Utility.getOppositeSide(getFrontFacing());}
+ @Override public byte getFrontFacing() {return 6;}
+ @Override public void setFrontFacing(byte aFacing) {/*Do nothing*/}
+ @Override public int getSizeInventory() {if (canAccessData()) return mMetaTileEntity.getSizeInventory(); return 0;}
+ @Override public ItemStack getStackInSlot(int aIndex) {if (canAccessData()) return mMetaTileEntity.getStackInSlot(aIndex); return null;}
+ @Override public void setInventorySlotContents(int aIndex, ItemStack aStack) {mInventoryChanged = true; if (canAccessData()) mMetaTileEntity.setInventorySlotContents(aIndex, worldObj.isRemote?aStack:GT_OreDictUnificator.setStack(true, aStack));}
+ @Override public String getInventoryName() {if (canAccessData()) return mMetaTileEntity.getInventoryName(); if (GregTech_API.METATILEENTITIES[mID] != null) return GregTech_API.METATILEENTITIES[mID].getInventoryName(); return "";}
+ @Override public int getInventoryStackLimit() {if (canAccessData()) return mMetaTileEntity.getInventoryStackLimit(); return 64;}
+ @Override public void openInventory() {/*Do nothing*/}
+ @Override public void closeInventory() {/*Do nothing*/}
+ @Override public boolean isUseableByPlayer(EntityPlayer aPlayer) {return hasValidMetaTileEntity() && mTickTimer>40 && getTileEntityOffset(0, 0, 0) == this && aPlayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64 && mMetaTileEntity.isAccessAllowed(aPlayer);}
+ @Override public void validate() {super.validate(); mTickTimer = 0;}
+ @Override public void invalidate() {tileEntityInvalid = false; if (hasValidMetaTileEntity()) {mMetaTileEntity.onRemoval(); mMetaTileEntity.setBaseMetaTileEntity(null);} super.invalidate();}
+ @Override public void onChunkUnload() {super.onChunkUnload();}
+ @Override public boolean hasCustomInventoryName() {return false;}
+ @Override public ItemStack getStackInSlotOnClosing(int slot) {ItemStack stack = getStackInSlot(slot); if (stack != null) setInventorySlotContents(slot, null); return stack;}
+ @Override public void onMachineBlockUpdate() {if (canAccessData()) mMetaTileEntity.onMachineBlockUpdate();}
+ @Override public int getProgress() {return canAccessData()?mMetaTileEntity.getProgresstime():0;}
+ @Override public int getMaxProgress() {return canAccessData()?mMetaTileEntity.maxProgresstime():0;}
+ @Override public boolean increaseProgress(int aProgressAmountInTicks) {return canAccessData()?mMetaTileEntity.increaseProgress(aProgressAmountInTicks)!=aProgressAmountInTicks:false;}
+ @Override public boolean hasThingsToDo() {return getMaxProgress()>0;}
+ @Override public void enableWorking() {if (!mWorks) mWorkUpdate = true; mWorks = true;}
+ @Override public void disableWorking() {mWorks = false;}
+ @Override public boolean isAllowedToWork() {return mWorks;}
+ @Override public boolean hasWorkJustBeenEnabled() {return mWorkUpdate;}
+ @Override public void setWorkDataValue(byte aValue) {/*Do nothing*/}
+ @Override public byte getWorkDataValue() {return 0;}
+ @Override public int getMetaTileID() {return mID;}
+ @Override public int setMetaTileID(short aID) {return mID = aID;}
+ @Override public boolean isActive() {return false;}
+ @Override public void setActive(boolean aActive) {/*Do nothing*/}
+ @Override public long getTimer() {return mTickTimer;}
+ @Override public boolean decreaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooLessEnergy) {return false;}
+ @Override public boolean increaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooMuchEnergy) {return false;}
+ @Override public boolean inputEnergyFrom(byte aSide) {return false;}
+ @Override public boolean outputsEnergyTo(byte aSide) {return false;}
+ @Override public long getOutputAmperage() {return 0;}
+ @Override public long getOutputVoltage() {return 0;}
+ @Override public long getInputAmperage() {return 0;}
+ @Override public long getInputVoltage() {return 0;}
+ @Override public boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy) {return false;}
+ @Override public String[] getDescription() {if (canAccessData()) return mMetaTileEntity.getDescription(); return new String[0];}
+ @Override public boolean isValidSlot(int aIndex) {if (canAccessData()) return mMetaTileEntity.isValidSlot(aIndex); return false;}
+ @Override public long getUniversalEnergyStored() {return Math.max(getStoredEU(), getStoredSteam());}
+ @Override public long getUniversalEnergyCapacity() {return Math.max(getEUCapacity(), getSteamCapacity());}
+ @Override public long getStoredEU() {return 0;}
+ @Override public long getEUCapacity() {return 0;}
+ @Override public long getStoredSteam() {return 0;}
+ @Override public long getSteamCapacity() {return 0;}
+ @Override public ITexture[] getTexture(byte aSide) {ITexture rIcon = getCoverTexture(aSide); if (rIcon != null) return new ITexture[] {rIcon}; return getTextureUncovered(aSide);}
+ @Override public ITexture[] getTextureUncovered(byte aSide) {if ((mConnections & 64) != 0) return Textures.BlockIcons.FRESHFOAM; if ((mConnections & -128) != 0) return Textures.BlockIcons.HARDENEDFOAMS[mColor]; if ((mConnections & -64) != 0) return Textures.BlockIcons.ERROR_RENDERING; byte tConnections = mConnections; if (tConnections == 1 || tConnections == 2) tConnections = 3; else if (tConnections == 4 || tConnections == 8) tConnections = 12; else if (tConnections == 16 || tConnections == 32) tConnections = 48; if (hasValidMetaTileEntity()) return mMetaTileEntity.getTexture(this, aSide, tConnections, (byte)(mColor-1), tConnections == 0 || (tConnections & (1<<aSide)) != 0, getOutputRedstoneSignal(aSide)>0); return Textures.BlockIcons.ERROR_RENDERING;}
+
+ protected boolean hasValidMetaTileEntity() {return mMetaTileEntity != null && mMetaTileEntity.getBaseMetaTileEntity() == this;}
+ protected boolean canAccessData() {return !isDead && hasValidMetaTileEntity();}
+
+ @Override
+ public void doExplosion(long aAmount) {
+ if (canAccessData()) {
+ mMetaTileEntity.onExplosion();
+ mMetaTileEntity.doExplosion(aAmount);
+ }
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops() {
+ ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID);
+ NBTTagCompound tNBT = new NBTTagCompound();
+ if (mStrongRedstone > 0) tNBT.setByte ("mStrongRedstone" , mStrongRedstone);
+ for (byte i = 0; i < mCoverSides.length; i++) {
+ if (mCoverSides[i] != 0) {
+ tNBT.setIntArray("mCoverData" , mCoverData);
+ tNBT.setIntArray("mCoverSides" , mCoverSides);
+ break;
+ }
+ }
+ if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT);
+ if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT);
+ return new ArrayList<ItemStack>(Arrays.asList(rStack));
+ }
+
+ @Override
+ public boolean onRightclick(EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) {
+ if (isClientSide()) {
+ if (getCoverBehaviorAtSide(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) return true;
+ }
+ if (isServerSide()) {
+ ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
+ if (tCurrentItem != null) {
+ if (getColorization() >= 0 && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) {
+ tCurrentItem.func_150996_a(Items.bucket);
+ setColorization((byte)-1);
+ return true;
+ }
+ byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) {
+ if (mMetaTileEntity.onWrenchRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) {
+ GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) {
+ if (getCoverIDAtSide(aSide) == 0 && getCoverIDAtSide(tSide) != 0) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
+ setCoverDataAtSide(tSide, getCoverBehaviorAtSide(tSide).onCoverScrewdriverclick(tSide, getCoverIDAtSide(tSide), getCoverDataAtSide(tSide), this, aPlayer, 0.5F, 0.5F, 0.5F));
+ mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ } else {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ setCoverDataAtSide(aSide, getCoverBehaviorAtSide(aSide).onCoverScrewdriverclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ));
+ mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList)) {
+ //if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ // GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(1), 1.0F, -1, xCoord, yCoord, zCoord);
+ //}
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ if (mWorks) disableWorking(); else enableWorking();
+ GT_Utility.sendChatToPlayer(aPlayer, "Machine Processing: " + (isAllowedToWork()?"Enabled":"Disabled"));
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(101), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) {
+ if (GT_ModHandler.useSolderingIron(tCurrentItem, aPlayer)) {
+ mStrongRedstone ^= (1 << tSide);
+ GT_Utility.sendChatToPlayer(aPlayer, "Redstone Output at Side " + tSide + " set to: " + ((mStrongRedstone & (1 << tSide))!=0?"Strong":"Weak"));
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 3.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ byte cSide = tSide;
+ if (getCoverIDAtSide(aSide) != 0) cSide = aSide;
+
+ if (getCoverIDAtSide(cSide) == 0) {
+ if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) {
+ if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(cSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(cSide, new GT_ItemStack(tCurrentItem))) {
+ setCoverItemAtSide(cSide, tCurrentItem);
+ if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--;
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+ } else {
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(0), 1.0F, -1, xCoord, yCoord, zCoord);
+ dropCover(cSide, aSide, false);
+ }
+ return true;
+ }
+ }
+ }
+
+ if (getCoverBehaviorAtSide(aSide).onCoverRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ)) return true;
+ }
+
+ if (!getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false;
+
+ try {
+ if (hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+
+ return false;
+ }
+
+ @Override
+ public void onLeftclick(EntityPlayer aPlayer) {
+ try {
+ if (aPlayer != null && hasValidMetaTileEntity()) mMetaTileEntity.onLeftclick(this, aPlayer);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while leftclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public boolean isDigitalChest() {
+ return false;
+ }
+
+ @Override
+ public ItemStack[] getStoredItemData() {
+ return null;
+ }
+
+ @Override
+ public void setItemCount(int aCount) {
+ //
+ }
+
+ @Override
+ public int getMaxItemCount() {
+ return 0;
+ }
+
+ /**
+ * Can put aStack into Slot
+ */
+ @Override
+ public boolean isItemValidForSlot(int aIndex, ItemStack aStack) {
+ return canAccessData() && mMetaTileEntity.isItemValidForSlot(aIndex, aStack);
+ }
+
+ /**
+ * returns all valid Inventory Slots, no matter which Side (Unless it's covered).
+ * The Side Stuff is done in the following two Functions.
+ */
+ @Override
+ public int[] getAccessibleSlotsFromSide(int aSide) {
+ if (canAccessData() && (getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), -1, this) || getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), -1, this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide);
+ return new int[0];
+ }
+
+ /**
+ * Can put aStack into Slot at Side
+ */
+ @Override
+ public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
+ return canAccessData() && getCoverBehaviorAtSide((byte)aSide).letsItemsIn ((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), aIndex, this) && mMetaTileEntity.canInsertItem(aIndex, aStack, aSide);
+ }
+
+ /**
+ * Can pull aStack out of Slot from Side
+ */
+ @Override
+ public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) {
+ return canAccessData() && getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), aIndex, this) && mMetaTileEntity.canExtractItem(aIndex, aStack, aSide);
+ }
+
+ @Override
+ public boolean isUpgradable() {
+ return false;
+ }
+
+ @Override
+ public byte getInternalInputRedstoneSignal(byte aSide) {
+ return (byte)(getCoverBehaviorAtSide(aSide).getRedstoneInput(aSide, getInputRedstoneSignal(aSide), getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)&15);
+ }
+
+ @Override
+ public byte getInputRedstoneSignal(byte aSide) {
+ return (byte)(worldObj.getIndirectPowerLevelTo(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1), aSide)&15);
+ }
+
+ @Override
+ public byte getOutputRedstoneSignal(byte aSide) {
+ return (byte)(getCoverBehaviorAtSide(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this) || (getCoverBehaviorAtSide(aSide).letsRedstoneGoOut(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this))?mSidedRedstone[aSide]&15:0);
+ }
+
+ @Override
+ public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength) {
+ if (!getCoverBehaviorAtSide(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) setOutputRedstoneSignal(aSide, aStrength);
+ }
+
+ @Override
+ public void setOutputRedstoneSignal(byte aSide, byte aStrength) {
+ aStrength = (byte)Math.min(Math.max(0, aStrength), 15);
+ if (aSide >= 0 && aSide < 6 && mSidedRedstone[aSide] != aStrength) {
+ mSidedRedstone[aSide] = aStrength;
+ issueBlockUpdate();
+ }
+ }
+
+ @Override
+ public boolean isSteamEngineUpgradable() {
+ return isUpgradable()&&!hasSteamEngineUpgrade()&&getSteamCapacity()>0;
+ }
+
+ @Override
+ public boolean addSteamEngineUpgrade() {
+ if (isSteamEngineUpgradable()) {
+ issueBlockUpdate();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean hasSteamEngineUpgrade() {
+ return false;
+ }
+
+ @Override
+ public boolean hasInventoryBeenModified() {
+ return mInventoryChanged;
+ }
+
+ @Override
+ public void setGenericRedstoneOutput(boolean aOnOff) {
+ //
+ }
+
+ @Override
+ public int getErrorDisplayID() {
+ return 0;
+ }
+
+ @Override
+ public void setErrorDisplayID(int aErrorID) {
+ //
+ }
+
+ @Override
+ public IMetaTileEntity getMetaTileEntity() {
+ return hasValidMetaTileEntity()?mMetaTileEntity:null;
+ }
+
+ private final GT_CoverBehavior[] mCoverBehaviors = new GT_CoverBehavior[] {GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior};
+
+ @Override
+ public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) {
+ return aSide >= 0 && aSide < mCoverBehaviors.length ? mCoverBehaviors[aSide] : GregTech_API.sNoBehavior;
+ }
+
+ @Override
+ public void setCoverIDAtSide(byte aSide, int aID) {
+ if (aSide >= 0 && aSide < 6) {
+ mCoverSides[aSide] = aID;
+ mCoverData[aSide] = 0;
+ mCoverBehaviors[aSide] = GregTech_API.getCoverBehavior(aID);
+ issueCoverUpdate(aSide);
+ issueBlockUpdate();
+ }
+ }
+
+ @Override
+ public void setCoverItemAtSide(byte aSide, ItemStack aCover) {
+ GregTech_API.getCoverBehavior(aCover).placeCover(aSide, aCover, this);
+ }
+
+ @Override
+ public int getCoverIDAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) return mCoverSides[aSide]; return 0;
+ }
+
+ @Override
+ public ItemStack getCoverItemAtSide(byte aSide) {
+ return GT_Utility.intToStack(getCoverIDAtSide(aSide));
+ }
+
+ @Override
+ public boolean canPlaceCoverIDAtSide(byte aSide, int aID) {
+ return getCoverIDAtSide(aSide) == 0;
+ }
+
+ @Override
+ public boolean canPlaceCoverItemAtSide(byte aSide, ItemStack aCover) {
+ return getCoverIDAtSide(aSide) == 0;
+ }
+
+ @Override
+ public void setCoverDataAtSide(byte aSide, int aData) {
+ if (aSide >= 0 && aSide < 6) mCoverData[aSide] = aData;
+ }
+
+ @Override
+ public int getCoverDataAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) return mCoverData[aSide];
+ return 0;
+ }
+
+ @Override
+ public void setLightValue(byte aLightValue) {
+ //
+ }
+
+ @Override
+ public long getAverageElectricInput() {
+ return 0;
+ }
+
+ @Override
+ public long getAverageElectricOutput() {
+ return 0;
+ }
+
+ @Override
+ public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) {
+ if (getCoverBehaviorAtSide(aSide).onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) || aForced) {
+ ItemStack tStack = getCoverBehaviorAtSide(aSide).getDrop(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this);
+ if (tStack != null) {
+ tStack.setTagCompound(null);
+ EntityItem tEntity = new EntityItem(worldObj, getOffsetX(aDroppedSide, 1) + 0.5, getOffsetY(aDroppedSide, 1) + 0.5, getOffsetZ(aDroppedSide, 1) + 0.5, tStack);
+ tEntity.motionX = 0;
+ tEntity.motionY = 0;
+ tEntity.motionZ = 0;
+ worldObj.spawnEntityInWorld(tEntity);
+ }
+
+ setCoverIDAtSide(aSide, 0);
+ setOutputRedstoneSignal(aSide, (byte) 0);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String getOwnerName() {
+ return "Player";
+ }
+
+ @Override
+ public String setOwnerName(String aName) {
+ return "Player";
+ }
+
+ @Override
+ public byte getComparatorValue(byte aSide) {
+ return canAccessData()?mMetaTileEntity.getComparatorValue(aSide):0;
+ }
+
+ @Override
+ public byte getStrongOutputRedstoneSignal(byte aSide) {
+ return aSide>=0&&aSide<6&&(mStrongRedstone & (1 << aSide))!=0?(byte)(mSidedRedstone[aSide]&15):0;
+ }
+
+ @Override
+ public void setStrongOutputRedstoneSignal(byte aSide, byte aStrength) {
+ mStrongRedstone |= (1 << aSide);
+ setOutputRedstoneSignal(aSide, aStrength);
+ }
+
+ @Override
+ public ItemStack decrStackSize(int aIndex, int aAmount) {
+ if (canAccessData()) {
+ mInventoryChanged = true;
+ return mMetaTileEntity.decrStackSize(aIndex, aAmount);
+ }
+ return null;
+ }
+
+ @Override
+ public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ if (canAccessData()) return mMetaTileEntity.injectEnergyUnits(aSide, aVoltage, aAmperage);
+ return 0;
+ }
+
+ @Override
+ public boolean drainEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ return false;
+ }
+
+ @Override
+ public boolean acceptsRotationalEnergy(byte aSide) {
+ if (!canAccessData() || getCoverIDAtSide(aSide) != 0) return false;
+ return mMetaTileEntity.acceptsRotationalEnergy(aSide);
+ }
+
+ @Override
+ public boolean injectRotationalEnergy(byte aSide, long aSpeed, long aEnergy) {
+ if (!canAccessData() || getCoverIDAtSide(aSide) != 0) return false;
+ return mMetaTileEntity.injectRotationalEnergy(aSide, aSpeed, aEnergy);
+ }
+
+ @Override
+ public int fill(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ if (mTickTimer > 5 && canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput ((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid==null?null:aFluid.getFluid(), this)))) return mMetaTileEntity.fill(aSide, aFluid, doFill);
+ return 0;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) {
+ if (mTickTimer > 5 && canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), mMetaTileEntity.getFluid()==null?null:mMetaTileEntity.getFluid().getFluid(), this)))) return mMetaTileEntity.drain(aSide, maxDrain, doDrain);
+ return null;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) {
+ if (mTickTimer > 5 && canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid==null?null:aFluid.getFluid(), this)))) return mMetaTileEntity.drain(aSide, aFluid, doDrain);
+ return null;
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
+ if (mTickTimer > 5 && canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput ((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid, this)))) return mMetaTileEntity.canFill(aSide, aFluid);
+ return false;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection aSide, Fluid aFluid) {
+ if (mTickTimer > 5 && canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid, this)))) return mMetaTileEntity.canDrain(aSide, aFluid);
+ return false;
+ }
+
+ @Override
+ public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
+ if (canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), null, this)))) return mMetaTileEntity.getTankInfo(aSide);
+ return new FluidTankInfo[] {};
+ }
+
+ @Override
+ public boolean isInvalidTileEntity() {
+ return isInvalid();
+ }
+
+ @Override
+ public boolean addStackToSlot(int aIndex, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return true;
+ if (aIndex < 0 || aIndex >= getSizeInventory()) return false;
+ ItemStack tStack = getStackInSlot(aIndex);
+ if (GT_Utility.isStackInvalid(tStack)) {
+ setInventorySlotContents(aIndex, aStack);
+ return true;
+ }
+ aStack = GT_OreDictUnificator.get(aStack);
+ if (GT_Utility.areStacksEqual(tStack, aStack) && tStack.stackSize + aStack.stackSize <= Math.min(aStack.getMaxStackSize(), getInventoryStackLimit())) {
+ tStack.stackSize+=aStack.stackSize;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) {
+ return addStackToSlot(aIndex, GT_Utility.copyAmount(aAmount, aStack));
+ }
+
+ @Override
+ public void setMetaTileEntity(IMetaTileEntity aMetaTileEntity) {
+ mMetaTileEntity = (MetaPipeEntity)aMetaTileEntity;
+ }
+
+ @Override
+ public byte getColorization() {
+ return (byte)(mColor-1);
+ }
+
+ @Override
+ public byte setColorization(byte aColor) {
+ if (aColor > 15 || aColor < -1) aColor = -1;
+ if (canAccessData()) mMetaTileEntity.onColorChangeServer(aColor);
+ return mColor = (byte)(aColor+1);
+ }
+
+ @Override
+ public float getThickNess() {
+ if (canAccessData()) return mMetaTileEntity.getThickNess();
+ return 1.0F;
+ }
+
+ public boolean renderInside(byte aSide) {
+ if (canAccessData()) return mMetaTileEntity.renderInside(aSide);
+ return false;
+ }
+
+ @Override
+ public float getBlastResistance(byte aSide) {
+ return (mConnections & 192) != 0 ? 50.0F : 5.0F;
+ }
+
+ @Override
+ public boolean isMufflerUpgradable() {
+ return false;
+ }
+
+ @Override
+ public boolean addMufflerUpgrade() {
+ return false;
+ }
+
+ @Override
+ public boolean hasMufflerUpgrade() {
+ return false;
+ }
+
+ @Override
+ public boolean isUniversalEnergyStored(long aEnergyAmount) {
+ return getUniversalEnergyStored() >= aEnergyAmount;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ {if (canAccessData()) return getMetaTileEntity().getInfoData(); return new String[]{};}
+ }
+
+ @Override
+ public byte getConnections() {
+ return mConnections;
+ }
+
+ @Override
+ public void markDirty() {
+ super.markDirty();
+ mInventoryChanged = true;
+ }
+
+ @Override
+ public int getLightOpacity() {
+ return mMetaTileEntity == null ? 0 : mMetaTileEntity.getLightOpacity();
+ }
+
+ @Override
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider) {
+ mMetaTileEntity.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ return mMetaTileEntity.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
+ mMetaTileEntity.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
new file mode 100644
index 0000000000..9870ba9bec
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -0,0 +1,1353 @@
+package gregtech.api.metatileentity;
+
+import static gregtech.api.enums.GT_Values.NW;
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IEnergyConnected;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.net.GT_Packet_TileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.*;
+import ic2.api.Direction;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockFire;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.network.Packet;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.EnumSkyBlock;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main TileEntity for EVERYTHING.
+ */
+public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileEntity {
+ protected MetaTileEntity mMetaTileEntity;
+ protected long mStoredEnergy = 0, mStoredSteam = 0;
+ protected int mAverageEUInputIndex = 0, mAverageEUOutputIndex = 0;
+ protected boolean mReleaseEnergy = false;
+ protected int[] mAverageEUInput = new int[] {0,0,0,0,0}, mAverageEUOutput = new int[] {0,0,0,0,0};
+
+ private boolean[] mActiveEUInputs = new boolean[] {false, false, false, false, false, false}, mActiveEUOutputs = new boolean[] {false, false, false, false, false, false};
+ private byte[] mSidedRedstone = new byte[] {15,15,15,15,15,15};
+ private int[] mCoverSides = new int[] {0,0,0,0,0,0}, mCoverData = new int[] {0,0,0,0,0,0}, mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
+ private boolean mHasEnoughEnergy = true, mRunningThroughTick = false, mInputDisabled = false, mOutputDisabled = false, mMuffler = false, mLockUpgrade = false, mActive = false, mRedstone = false, mWorkUpdate = false, mSteamConverter = false, mInventoryChanged = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false, oRedstone = false;
+ private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, oLightValueClient = -1, oLightValue = -1, mLightValue = 0, mOtherUpgrades = 0, mFacing = 0, oFacing = 0, mWorkData = 0;
+ private int mDisplayErrorCode = 0, oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0, mLagWarningCount = 0;
+ private short mID = 0;
+ private long mTickTimer = 0, oOutput = 0, mAcceptedAmperes = Long.MAX_VALUE;
+ private String mOwnerName = "";
+ private NBTTagCompound mRecipeStuff = new NBTTagCompound();
+
+ public BaseMetaTileEntity() {}
+
+ @Override
+ public void writeToNBT(NBTTagCompound aNBT) {
+ try {
+ super.writeToNBT(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ try {
+ aNBT.setInteger ("mID" , mID);
+ aNBT.setLong ("mStoredSteam" , mStoredSteam);
+ aNBT.setLong ("mStoredEnergy" , mStoredEnergy);
+ aNBT.setIntArray ("mCoverData" , mCoverData);
+ aNBT.setIntArray ("mCoverSides" , mCoverSides);
+ aNBT.setByteArray ("mRedstoneSided" , mSidedRedstone);
+ aNBT.setByte ("mColor" , mColor);
+ aNBT.setByte ("mLightValue" , mLightValue);
+ aNBT.setByte ("mOtherUpgrades" , mOtherUpgrades);
+ aNBT.setByte ("mWorkData" , mWorkData);
+ aNBT.setByte ("mStrongRedstone" , mStrongRedstone);
+ aNBT.setShort ("mFacing" , mFacing);
+ aNBT.setString ("mOwnerName" , mOwnerName);
+ aNBT.setBoolean ("mLockUpgrade" , mLockUpgrade);
+ aNBT.setBoolean ("mMuffler" , mMuffler);
+ aNBT.setBoolean ("mSteamConverter" , mSteamConverter);
+ aNBT.setBoolean ("mActive" , mActive);
+ aNBT.setBoolean ("mRedstone" , mRedstone);
+ aNBT.setBoolean ("mWorks" , !mWorks);
+ aNBT.setBoolean ("mInputDisabled" , mInputDisabled);
+ aNBT.setBoolean ("mOutputDisabled" , mOutputDisabled);
+ aNBT.setTag ("GT.CraftingComponents", mRecipeStuff);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ try {
+ if (hasValidMetaTileEntity()) {
+ NBTTagList tItemList = new NBTTagList();
+ for (int i = 0; i < mMetaTileEntity.getRealInventory().length; i++) {
+ ItemStack tStack = mMetaTileEntity.getRealInventory()[i];
+ if (tStack != null) {
+ NBTTagCompound tTag = new NBTTagCompound();
+ tTag.setInteger("IntSlot", i);
+ tStack.writeToNBT(tTag);
+ tItemList.appendTag(tTag);
+ }
+ }
+ aNBT.setTag("Inventory", tItemList);
+
+ try {
+ mMetaTileEntity.saveNBTData(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound aNBT) {
+ super.readFromNBT(aNBT);
+ setInitialValuesAsNBT(aNBT, (short)0);
+ }
+
+ @Override
+ public void setInitialValuesAsNBT(NBTTagCompound aNBT, short aID) {
+ if (aNBT == null) {
+ if (aID>0) mID=aID; else mID=mID>0?mID:0;
+ if (mID!=0) createNewMetatileEntity(mID);
+ mSidedRedstone = (hasValidMetaTileEntity()&&mMetaTileEntity.hasSidedRedstoneOutputBehavior()?new byte[] {0,0,0,0,0,0}:new byte[] {15,15,15,15,15,15});
+ } else {
+ if (aID<=0) mID = (short)aNBT.getInteger ("mID"); else mID = aID;
+ mStoredSteam = aNBT.getInteger ("mStoredSteam");
+ mStoredEnergy = aNBT.getInteger ("mStoredEnergy");
+ mColor = aNBT.getByte ("mColor");
+ mLightValue = aNBT.getByte ("mLightValue");
+ mWorkData = aNBT.getByte ("mWorkData");
+ mStrongRedstone = aNBT.getByte ("mStrongRedstone");
+ mFacing = oFacing = (byte)aNBT.getShort("mFacing");
+ mOwnerName = aNBT.getString ("mOwnerName");
+ mLockUpgrade = aNBT.getBoolean ("mLockUpgrade");
+ mMuffler = aNBT.getBoolean ("mMuffler");
+ mSteamConverter = aNBT.getBoolean ("mSteamConverter");
+ mActive = aNBT.getBoolean ("mActive");
+ mRedstone = aNBT.getBoolean ("mRedstone");
+ mWorks =!aNBT.getBoolean ("mWorks");
+ mInputDisabled = aNBT.getBoolean ("mInputDisabled");
+ mOutputDisabled = aNBT.getBoolean ("mOutputDisabled");
+ mOtherUpgrades = (byte)(aNBT.getByte("mOtherUpgrades")+aNBT.getByte("mBatteries")+aNBT.getByte("mLiBatteries"));
+ mCoverSides = aNBT.getIntArray ("mCoverSides");
+ mCoverData = aNBT.getIntArray ("mCoverData");
+ mSidedRedstone = aNBT.getByteArray ("mRedstoneSided");
+ mRecipeStuff = aNBT.getCompoundTag("GT.CraftingComponents");
+
+ if (mCoverData.length != 6) mCoverData = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mCoverSides.length != 6) mCoverSides = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mSidedRedstone.length != 6) if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior()) mSidedRedstone = new byte[] {0,0,0,0,0,0}; else mSidedRedstone = new byte[] {15,15,15,15,15,15};
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+
+ if (mID!=0 && createNewMetatileEntity(mID)) {
+ NBTTagList tItemList = aNBT.getTagList("Inventory", 10);
+ for (int i = 0; i < tItemList.tagCount(); i++) {
+ NBTTagCompound tTag = tItemList.getCompoundTagAt(i);
+ int tSlot = tTag.getInteger("IntSlot");
+ if (tSlot >= 0 && tSlot < mMetaTileEntity.getRealInventory().length) {
+ mMetaTileEntity.getRealInventory()[tSlot] = GT_Utility.loadItem(tTag);
+ }
+ }
+
+ try {
+ mMetaTileEntity.loadNBTData(aNBT);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while loading MetaTileEntity, the Server should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ if (mCoverData.length != 6) mCoverData = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mCoverSides.length != 6) mCoverSides = new int[] { 0, 0, 0, 0, 0, 0};
+ if (mSidedRedstone.length != 6) if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior()) mSidedRedstone = new byte[] {0,0,0,0,0,0}; else mSidedRedstone = new byte[] {15,15,15,15,15,15};
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ }
+
+ private boolean createNewMetatileEntity(short aID) {
+ if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) {
+ GT_Log.err.println("MetaID " + aID + " not loadable => locking TileEntity!");
+ } else {
+ if (aID != 0) {
+ if (hasValidMetaTileEntity()) mMetaTileEntity.setBaseMetaTileEntity(null);
+ GregTech_API.METATILEENTITIES[aID].newMetaEntity(this).setBaseMetaTileEntity(this);
+ mTickTimer = 0;
+ mID = aID;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Used for ticking special BaseMetaTileEntities, which need that for Energy Conversion
+ * It's called right before onPostTick()
+ */
+ public void updateStatus() {
+ //
+ }
+
+ /**
+ * Called when trying to charge Items
+ */
+ public void chargeItem(ItemStack aStack) {
+ decreaseStoredEU(GT_ModHandler.chargeElectricItem(aStack, (int)Math.min(Integer.MAX_VALUE, getStoredEU()), (int)Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), false, false), true);
+ }
+
+ /**
+ * Called when trying to discharge Items
+ */
+ public void dischargeItem(ItemStack aStack) {
+ increaseStoredEnergyUnits(GT_ModHandler.dischargeElectricItem(aStack, (int)Math.min(Integer.MAX_VALUE, getEUCapacity() - getStoredEU()), (int)Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), false, false, false), true);
+ }
+
+ @Override
+ public void updateEntity() {
+ super.updateEntity();
+
+ if (!hasValidMetaTileEntity()) {
+ if (mMetaTileEntity == null) return;
+ mMetaTileEntity.setBaseMetaTileEntity(this);
+ }
+
+ mRunningThroughTick = true;
+ long tTime = System.currentTimeMillis();
+
+ for (int tCode = 0; hasValidMetaTileEntity() && tCode >= 0;) {try {switch (tCode) {
+ case 0:
+ tCode++;
+ if (mTickTimer++==0) {
+ oX = xCoord;
+ oY = yCoord;
+ oZ = zCoord;
+ if (isServerSide()) for (byte i = 0; i < 6; i++) if (getCoverIDAtSide(i)!=0) if (!mMetaTileEntity.allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) dropCover(i, i, true);
+
+ worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this);
+
+ mMetaTileEntity.onFirstTick(this);
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ }
+ case 1:
+ tCode++;
+ if (isClientSide()) {
+ if (mColor != oColor) {
+ mMetaTileEntity.onColorChangeClient(oColor = mColor);
+ issueTextureUpdate();
+ }
+
+ if (mLightValue != oLightValueClient) {
+ worldObj.setLightValue (EnumSkyBlock.Block, xCoord , yCoord , zCoord , mLightValue);
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord+1, yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord-1, yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord+1, zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord-1, zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord+1);
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord-1);
+ oLightValueClient = mLightValue;
+ issueTextureUpdate();
+ }
+
+ if (mNeedsUpdate) {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ //worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ mNeedsUpdate = false;
+ }
+ }
+ case 2: case 3: case 4: case 5: case 6: case 7:
+ if (isServerSide() && mTickTimer > 10) {
+ for (byte i = (byte)(tCode-2); i < 6; i++) if (getCoverIDAtSide(i) != 0) {
+ tCode++;
+ GT_CoverBehavior tCover = getCoverBehaviorAtSide(i);
+ int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this);
+ if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) {
+ mCoverData[i] = tCover.doCoverThings(i, getInputRedstoneSignal(i), getCoverIDAtSide(i), mCoverData[i], this, mTickTimer);
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ }
+ }
+
+ }
+ case 8:
+ tCode=9;
+ if (isServerSide()) {
+ if (++mAverageEUInputIndex >= mAverageEUInput.length ) mAverageEUInputIndex = 0;
+ if (++mAverageEUOutputIndex >= mAverageEUOutput.length) mAverageEUOutputIndex = 0;
+
+ mAverageEUInput [mAverageEUInputIndex ] = 0;
+ mAverageEUOutput[mAverageEUOutputIndex] = 0;
+ }
+ case 9:
+ tCode++;
+ mMetaTileEntity.onPreTick(this, mTickTimer);
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ case 10:
+ tCode++;
+ if (isServerSide()) {
+ if (mRedstone != oRedstone || mTickTimer == 10) {
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ oRedstone = mRedstone;
+ issueBlockUpdate();
+ }
+
+ if (xCoord != oX || yCoord != oY || zCoord != oZ) {
+ oX = xCoord;
+ oY = yCoord;
+ oZ = zCoord;
+ issueClientUpdate();
+ clearTileEntityBuffer();
+ }
+
+ if (mFacing != oFacing) {
+ oFacing = mFacing;
+ for (byte i = 0; i < 6; i++) if (getCoverIDAtSide(i)!=0) if (!mMetaTileEntity.allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) dropCover(i, i, true);
+ issueBlockUpdate();
+ }
+
+ if (mTickTimer > 20 && mMetaTileEntity.isElectric()) {
+ mAcceptedAmperes = 0;
+
+ if (getOutputVoltage() != oOutput) {
+ oOutput = getOutputVoltage();
+ }
+
+ if (mMetaTileEntity.isEnetOutput() || mMetaTileEntity.isEnetInput()) {
+ for (byte i = 0; i < 6; i++) {
+ boolean
+ temp = isEnergyInputSide(i);
+ if (temp != mActiveEUInputs[i]) {
+ mActiveEUInputs[i] = temp;
+ }
+ temp = isEnergyOutputSide(i);
+ if (temp != mActiveEUOutputs[i]) {
+ mActiveEUOutputs[i] = temp;
+ }
+ }
+ }
+
+ if (mMetaTileEntity.isEnetOutput() && oOutput > 0) {
+ long tOutputVoltage = Math.max(oOutput, oOutput + (1 << GT_Utility.getTier(oOutput))), tUsableAmperage = Math.min(getOutputAmperage(), (getStoredEU() - mMetaTileEntity.getMinimumStoredEU()) / tOutputVoltage);
+ if (tUsableAmperage > 0) {
+ long tEU = tOutputVoltage * IEnergyConnected.Util.emitEnergyToNetwork(oOutput, tUsableAmperage, this);
+ mAverageEUOutput[mAverageEUOutputIndex] += tEU;
+ decreaseStoredEU(tEU, true);
+ }
+ }
+ if (getEUCapacity() > 0) {
+ if (GregTech_API.sMachineFireExplosions && getRandomNumber(1000) == 0) {
+ Block tBlock = getBlockAtSide((byte)getRandomNumber(6));
+ if (tBlock != null && tBlock instanceof BlockFire) doEnergyExplosion();
+ }
+
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+
+ if (getRandomNumber(1000) == 0) {
+ if((getCoverIDAtSide((byte)1) == 0 && worldObj.getPrecipitationHeight(xCoord , zCoord ) - 2 < yCoord)
+ || (getCoverIDAtSide((byte)2) == 0 && worldObj.getPrecipitationHeight(xCoord , zCoord-1) - 1 < yCoord)
+ || (getCoverIDAtSide((byte)3) == 0 && worldObj.getPrecipitationHeight(xCoord , zCoord+1) - 1 < yCoord)
+ || (getCoverIDAtSide((byte)4) == 0 && worldObj.getPrecipitationHeight(xCoord-1, zCoord ) - 1 < yCoord)
+ || (getCoverIDAtSide((byte)5) == 0 && worldObj.getPrecipitationHeight(xCoord+1, zCoord ) - 1 < yCoord)) {
+ if (GregTech_API.sMachineRainExplosions && worldObj.isRaining() && getBiome().rainfall > 0) {
+ if (getRandomNumber(10)==0) {
+ try{GT_Mod.instance.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather");}catch(Exception e){}
+ doEnergyExplosion();
+ }else setOnFire();
+ }
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ if (GregTech_API.sMachineThunderExplosions && worldObj.isThundering() && getBiome().rainfall > 0 && getRandomNumber(3) == 0) {
+ try{GT_Mod.instance.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather");}catch(Exception e){}
+ doEnergyExplosion();
+ }
+ }
+ }
+ }
+ }
+
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ }
+ case 11:
+ tCode++;
+ if (isServerSide()) {
+ if (mMetaTileEntity.dechargerSlotCount() > 0 && getStoredEU() < getEUCapacity()) {
+ for (int i = mMetaTileEntity.dechargerSlotStartIndex(), k = mMetaTileEntity.dechargerSlotCount()+i; i < k; i++) {
+ if (mMetaTileEntity.mInventory[i] != null && getStoredEU() < getEUCapacity()) {
+ dischargeItem(mMetaTileEntity.mInventory[i]);
+ if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null;
+ mInventoryChanged = true;
+ }
+ }
+ }
+ }
+ case 12:
+ tCode++;
+ if (isServerSide()) {
+ if (mMetaTileEntity.rechargerSlotCount() > 0 && getStoredEU() > 0) {
+ for (int i = mMetaTileEntity.rechargerSlotStartIndex(), k = mMetaTileEntity.rechargerSlotCount()+i; i < k; i++) {
+ if (getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) {
+ chargeItem(mMetaTileEntity.mInventory[i]);
+ if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null;
+ mInventoryChanged = true;
+ }
+ }
+ }
+ }
+ case 13:
+ tCode++;
+ updateStatus();
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ case 14:
+ tCode++;
+ mMetaTileEntity.onPostTick(this, mTickTimer);
+ if (!hasValidMetaTileEntity()) {
+ mRunningThroughTick = false;
+ return;
+ }
+ case 15:
+ tCode++;
+ if (isServerSide()) {
+ if (mTickTimer % 10 == 0) {
+ if (mSendClientData) {
+ NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_TileEntity(xCoord, (short)yCoord, zCoord, mID, mCoverSides[0], mCoverSides[1], mCoverSides[2], mCoverSides[3], mCoverSides[4], mCoverSides[5], oTextureData = (byte)((mFacing&7) | (mActive?8:0) | (mRedstone?16:0) | (mLockUpgrade?32:0)), oUpdateData = hasValidMetaTileEntity()?mMetaTileEntity.getUpdateData():0, oRedstoneData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0)), oColor = mColor), xCoord, zCoord);
+ mSendClientData = false;
+ }
+ }
+
+ if (mTickTimer > 10) {
+ byte tData = (byte)((mFacing&7)|(mActive?8:0)|(mRedstone?16:0)|(mLockUpgrade?32:0));
+ if (tData != oTextureData) sendBlockEvent((byte)0, oTextureData = tData);
+ tData = mMetaTileEntity.getUpdateData();
+ if (tData != oUpdateData) sendBlockEvent((byte)1, oUpdateData = tData);
+ if (mColor != oColor) sendBlockEvent((byte)2, oColor = mColor);
+ tData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0));
+ if (tData != oRedstoneData) sendBlockEvent((byte)3, oRedstoneData = tData);
+ if (mLightValue != oLightValue) {
+ worldObj.setLightValue (EnumSkyBlock.Block, xCoord , yCoord , zCoord , mLightValue);
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord+1, yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord-1, yCoord , zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord+1, zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord-1, zCoord );
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord+1);
+ worldObj.updateLightByType(EnumSkyBlock.Block, xCoord , yCoord , zCoord-1);
+ issueTextureUpdate();
+ sendBlockEvent((byte)7, oLightValue = mLightValue);
+ }
+ }
+
+ if (mNeedsBlockUpdate) {
+ worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockOffset(0, 0, 0));
+ mNeedsBlockUpdate = false;
+ }
+ }
+ default:
+ tCode = -1;
+ break;
+ }} catch (Throwable e) {
+ GT_Log.err.println("Encountered Exception while ticking MetaTileEntity in Step "+(tCode-1)+". The Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }}
+
+ if (isServerSide() && hasValidMetaTileEntity()) {
+ tTime = System.currentTimeMillis() - tTime;
+ if (mTimeStatistics.length > 0) mTimeStatistics[mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length] = (int)tTime;
+ if (tTime > 0 && tTime > GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++<10) System.out.println("WARNING: Possible Lag Source at [" + xCoord + ", " + yCoord + ", " + zCoord + "] in Dimension " + worldObj.provider.dimensionId + " with " + tTime + "ms caused by an instance of " + getMetaTileEntity().getClass());
+ }
+
+ mWorkUpdate = mInventoryChanged = mRunningThroughTick = false;
+ }
+
+ @Override
+ public Packet getDescriptionPacket() {
+ issueClientUpdate();
+ return null;
+ }
+
+ public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
+ issueTextureUpdate();
+ if (mID != aID && aID > 0) {
+ mID = aID;
+ createNewMetatileEntity(mID);
+ }
+
+ mCoverSides[0] = aCover0;
+ mCoverSides[1] = aCover1;
+ mCoverSides[2] = aCover2;
+ mCoverSides[3] = aCover3;
+ mCoverSides[4] = aCover4;
+ mCoverSides[5] = aCover5;
+
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+
+ receiveClientEvent(0, aTextureData);
+ receiveClientEvent(1, aUpdateData);
+ receiveClientEvent(2, aColorData);
+ receiveClientEvent(3, aRedstoneData);
+ }
+
+ @Override
+ public boolean receiveClientEvent(int aEventID, int aValue) {
+ super.receiveClientEvent(aEventID, aValue);
+
+ if (hasValidMetaTileEntity()) {
+ try {
+ mMetaTileEntity.receiveClientEvent((byte)aEventID, (byte)aValue);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while receiving Data from the Server, the Client should've been crashed by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ if (isClientSide()) {
+ issueTextureUpdate();
+ switch(aEventID) {
+ case 0:
+ mFacing = (byte)(aValue& 7);
+ mActive = ((aValue& 8) != 0);
+ mRedstone = ((aValue&16) != 0);
+ //mLockUpgrade = ((aValue&32) != 0);
+ break;
+ case 1:
+ if (hasValidMetaTileEntity()) mMetaTileEntity.onValueUpdate((byte)aValue);
+ break;
+ case 2:
+ if (aValue > 16 || aValue < 0) aValue = 0;
+ mColor = (byte)aValue;
+ break;
+ case 3:
+ mSidedRedstone[0] = (byte)((aValue& 1)>0?15:0);
+ mSidedRedstone[1] = (byte)((aValue& 2)>0?15:0);
+ mSidedRedstone[2] = (byte)((aValue& 4)>0?15:0);
+ mSidedRedstone[3] = (byte)((aValue& 8)>0?15:0);
+ mSidedRedstone[4] = (byte)((aValue&16)>0?15:0);
+ mSidedRedstone[5] = (byte)((aValue&32)>0?15:0);
+ break;
+ case 4:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.doSound((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ case 5:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.startSoundLoop((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ case 6:
+ if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.stopSoundLoop((byte)aValue, xCoord+0.5, yCoord+0.5, zCoord+0.5);
+ break;
+ case 7:
+ mLightValue = (byte)aValue;
+ break;
+ }
+ }
+ return true;
+ }
+
+ public ArrayList<String> getDebugInfo(EntityPlayer aPlayer, int aLogLevel) {
+ ArrayList<String> tList = new ArrayList<String>();
+ if (aLogLevel > 2) {
+ tList.add("Meta-ID: " + mID + (canAccessData()?" valid":" invalid") + (mMetaTileEntity==null?" MetaTileEntity == null!":" "));
+ }
+ if (aLogLevel > 1) {
+ if (mTimeStatistics.length > 0) {
+ double tAverageTime = 0; for (int tTime : mTimeStatistics) tAverageTime += tTime;
+ tList.add("This particular TileEntity has caused an average CPU-load of ~" + (tAverageTime/mTimeStatistics.length) + "ms over the last " + mTimeStatistics.length + " ticks.");
+ }
+ if (mLagWarningCount > 0) {
+ tList.add("This TileEntity has also caused " + (mLagWarningCount>=10?"more than 10":mLagWarningCount) + " Lag Spike Warnings (anything taking longer than " + GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + "ms) on the Server.");
+ }
+ tList.add("Is" + (mMetaTileEntity.isAccessAllowed(aPlayer)?" ":" not ") + "accessible for you");
+ }
+ if (aLogLevel > 0) {
+ if (getSteamCapacity() > 0 && hasSteamEngineUpgrade()) tList.add(getStoredSteam() + " of " + getSteamCapacity() + " Steam");
+ tList.add("Machine is " + (mActive?"active":"inactive"));
+ if (!mHasEnoughEnergy) tList.add("ATTENTION: This Device consumes Energy at a higher Rate than you input. You could insert more to speed up the process.");
+ }
+ return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList);
+ }
+
+ @Override public void issueTextureUpdate() {mNeedsUpdate = true;}
+ @Override public void issueBlockUpdate() {mNeedsBlockUpdate = true;}
+ @Override public void issueClientUpdate() {mSendClientData = true;}
+ @Override public void issueCoverUpdate(byte aSide) {issueClientUpdate();}
+
+ @Override public byte getStrongestRedstone() {return (byte)Math.max(getInternalInputRedstoneSignal((byte)0), Math.max(getInternalInputRedstoneSignal((byte)1), Math.max(getInternalInputRedstoneSignal((byte)2), Math.max(getInternalInputRedstoneSignal((byte)3), Math.max(getInternalInputRedstoneSignal((byte)4), getInternalInputRedstoneSignal((byte)5))))));}
+
+ @Override public boolean getRedstone() {return getRedstone((byte)0)||getRedstone((byte)1)||getRedstone((byte)2)||getRedstone((byte)3)||getRedstone((byte)4)||getRedstone((byte)5);}
+ @Override public boolean getRedstone(byte aSide) {return getInternalInputRedstoneSignal(aSide) > 0;}
+
+ public ITexture getCoverTexture(byte aSide) {return GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));}
+
+ @Override public boolean isGivingInformation() {if (canAccessData()) return mMetaTileEntity.isGivingInformation(); return false;}
+ @Override public boolean isValidFacing(byte aSide) {if (canAccessData()) return mMetaTileEntity.isFacingValid(aSide); return false;}
+ @Override public byte getBackFacing() {return GT_Utility.getOppositeSide(mFacing);}
+ @Override public byte getFrontFacing() {return mFacing;}
+ @Override public void setFrontFacing(byte aFacing) {if (isValidFacing(aFacing)) {mFacing = aFacing; mMetaTileEntity.onFacingChange(); onMachineBlockUpdate();}}
+ @Override public int getSizeInventory() {if (canAccessData()) return mMetaTileEntity.getSizeInventory(); return 0;}
+ @Override public ItemStack getStackInSlot(int aIndex) {if (canAccessData()) return mMetaTileEntity.getStackInSlot(aIndex); return null;}
+ @Override public void setInventorySlotContents(int aIndex, ItemStack aStack) {mInventoryChanged = true; if (canAccessData()) mMetaTileEntity.setInventorySlotContents(aIndex, worldObj.isRemote?aStack:GT_OreDictUnificator.setStack(true, aStack));}
+ @Override public String getInventoryName() {if (canAccessData()) return mMetaTileEntity.getInventoryName(); if (GregTech_API.METATILEENTITIES[mID] != null) return GregTech_API.METATILEENTITIES[mID].getInventoryName(); return "";}
+ @Override public int getInventoryStackLimit() {if (canAccessData()) return mMetaTileEntity.getInventoryStackLimit(); return 64;}
+ @Override public void openInventory() {if (canAccessData()) mMetaTileEntity.onOpenGUI();}
+ @Override public void closeInventory() {if (canAccessData()) mMetaTileEntity.onCloseGUI();}
+ @Override public boolean isUseableByPlayer(EntityPlayer aPlayer) {return canAccessData() && playerOwnsThis(aPlayer, false) && mTickTimer>40 && getTileEntityOffset(0, 0, 0) == this && aPlayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64 && mMetaTileEntity.isAccessAllowed(aPlayer);}
+ @Override public void validate() {super.validate(); mTickTimer = 0;}
+ @Override public void invalidate() {tileEntityInvalid = false; if (canAccessData()) {mMetaTileEntity.onRemoval(); mMetaTileEntity.setBaseMetaTileEntity(null);} super.invalidate();}
+ @Override public void onChunkUnload() {super.onChunkUnload();}
+ @Override public boolean hasCustomInventoryName() {return false;}
+ @Override public ItemStack getStackInSlotOnClosing(int slot) {ItemStack stack = getStackInSlot(slot); if (stack != null) setInventorySlotContents(slot, null); return stack;}
+ @Override public void onMachineBlockUpdate() {if (canAccessData()) mMetaTileEntity.onMachineBlockUpdate();}
+ @Override public int getProgress() {return canAccessData()?mMetaTileEntity.getProgresstime():0;}
+ @Override public int getMaxProgress() {return canAccessData()?mMetaTileEntity.maxProgresstime():0;}
+ @Override public boolean increaseProgress(int aProgressAmountInTicks) {return canAccessData()?mMetaTileEntity.increaseProgress(aProgressAmountInTicks)!=aProgressAmountInTicks:false;}
+ @Override public boolean hasThingsToDo() {return getMaxProgress()>0;}
+ @Override public void enableWorking() {if (!mWorks) mWorkUpdate = true; mWorks = true;}
+ @Override public void disableWorking() {mWorks = false;}
+ @Override public boolean isAllowedToWork() {return mWorks;}
+ @Override public boolean hasWorkJustBeenEnabled() {return mWorkUpdate;}
+ @Override public void setWorkDataValue(byte aValue) {mWorkData = aValue;}
+ @Override public byte getWorkDataValue() {return mWorkData;}
+ @Override public int getMetaTileID() {return mID;}
+ @Override public int setMetaTileID(short aID) {return mID = aID;}
+ @Override public boolean isActive() {return mActive;}
+ @Override public void setActive(boolean aActive) {mActive = aActive;}
+ @Override public long getTimer() {return mTickTimer;}
+ @Override public boolean decreaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooLessEnergy) {if (!canAccessData()) return false; return mHasEnoughEnergy = decreaseStoredEU(aEnergy, aIgnoreTooLessEnergy) || decreaseStoredSteam(aEnergy, false) || (aIgnoreTooLessEnergy && (decreaseStoredSteam(aEnergy, true)));}
+ @Override public boolean increaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooMuchEnergy) {if (!canAccessData()) return false; if (getStoredEU() < getEUCapacity() || aIgnoreTooMuchEnergy) {setStoredEU(mMetaTileEntity.getEUVar() + aEnergy); return true;} return false;}
+ @Override public boolean inputEnergyFrom(byte aSide) {if (aSide == 6) return true; if (isServerSide()) return (aSide>=0&&aSide<6?mActiveEUInputs [aSide]:false)&&!mReleaseEnergy; return isEnergyInputSide (aSide);}
+ @Override public boolean outputsEnergyTo(byte aSide) {if (aSide == 6) return true; if (isServerSide()) return (aSide>=0&&aSide<6?mActiveEUOutputs[aSide]:false)|| mReleaseEnergy; return isEnergyOutputSide(aSide);}
+ @Override public long getOutputAmperage() {if (canAccessData() && mMetaTileEntity.isElectric()) return mMetaTileEntity.maxAmperesOut(); return 0;}
+ @Override public long getOutputVoltage() {if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetOutput()) return mMetaTileEntity.maxEUOutput(); return 0;}
+ @Override public long getInputAmperage() {if (canAccessData() && mMetaTileEntity.isElectric()) return mMetaTileEntity.maxAmperesIn(); return 0;}
+ @Override public long getInputVoltage() {if (canAccessData() && mMetaTileEntity.isElectric()) return mMetaTileEntity.maxEUInput(); return Integer.MAX_VALUE;}
+ @Override public boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy) {if (!canAccessData()) return false; if (mMetaTileEntity.getSteamVar() < getSteamCapacity() || aIgnoreTooMuchEnergy) {setStoredSteam(mMetaTileEntity.getSteamVar() + aEnergy); return true;} return false;}
+ @Override public String[] getDescription() {if (canAccessData()) return mMetaTileEntity.getDescription(); return new String[0];}
+ @Override public boolean isValidSlot(int aIndex) {if (canAccessData()) return mMetaTileEntity.isValidSlot(aIndex); return false;}
+ @Override public long getUniversalEnergyStored() {return Math.max(getStoredEU(), getStoredSteam());}
+ @Override public long getUniversalEnergyCapacity() {return Math.max(getEUCapacity(), getSteamCapacity());}
+ @Override public long getStoredEU() {if (canAccessData()) return Math.min(mMetaTileEntity.getEUVar(), getEUCapacity()); return 0;}
+ @Override public long getEUCapacity() {if (canAccessData()) return mMetaTileEntity.maxEUStore(); return 0;}
+ @Override public long getStoredSteam() {if (canAccessData()) return Math.min(mMetaTileEntity.getSteamVar(), getSteamCapacity()); return 0;}
+ @Override public long getSteamCapacity() {if (canAccessData()) return mMetaTileEntity.maxSteamStore(); return 0;}
+ @Override public ITexture[] getTexture(byte aSide) {ITexture rIcon = getCoverTexture(aSide); if (rIcon != null) return new ITexture[] {rIcon}; if (hasValidMetaTileEntity()) return mMetaTileEntity.getTexture(this, aSide, mFacing, (byte)(mColor-1), mActive, getOutputRedstoneSignal(aSide)>0); return Textures.BlockIcons.ERROR_RENDERING;}
+
+ private boolean isEnergyInputSide(byte aSide) {if (aSide >= 0 && aSide < 6) {if (!getCoverBehaviorAtSide(aSide).letsEnergyIn (aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false; if (isInvalid()||mReleaseEnergy) return false; if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetInput ()) return mMetaTileEntity.isInputFacing (aSide);} return false;}
+ private boolean isEnergyOutputSide(byte aSide) {if (aSide >= 0 && aSide < 6) {if (!getCoverBehaviorAtSide(aSide).letsEnergyOut(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false; if (isInvalid()||mReleaseEnergy) return mReleaseEnergy; if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetOutput()) return mMetaTileEntity.isOutputFacing(aSide);} return false;}
+
+ protected boolean hasValidMetaTileEntity() {return mMetaTileEntity != null && mMetaTileEntity.getBaseMetaTileEntity() == this;}
+ protected boolean canAccessData() {return !isDead && hasValidMetaTileEntity();}
+
+ public boolean setStoredEU (long aEnergy) {if (!canAccessData()) return false; if (aEnergy < 0) aEnergy = 0; mMetaTileEntity.setEUVar (aEnergy); return true;}
+ public boolean setStoredSteam (long aEnergy) {if (!canAccessData()) return false; if (aEnergy < 0) aEnergy = 0; mMetaTileEntity.setSteamVar (aEnergy); return true;}
+ public boolean decreaseStoredEU (long aEnergy, boolean aIgnoreTooLessEnergy) {if (!canAccessData()) {return false;} if (mMetaTileEntity.getEUVar() - aEnergy >= 0 || aIgnoreTooLessEnergy) {setStoredEU(mMetaTileEntity.getEUVar() - aEnergy); if (mMetaTileEntity.getEUVar() < 0) {setStoredEU (0); return false;} return true;} return false;}
+ public boolean decreaseStoredSteam (long aEnergy, boolean aIgnoreTooLessEnergy) {if (!canAccessData()) return false; if (mMetaTileEntity.getSteamVar() - aEnergy >= 0 || aIgnoreTooLessEnergy) {setStoredSteam(mMetaTileEntity.getSteamVar() - aEnergy); if (mMetaTileEntity.getSteamVar() < 0) {setStoredSteam(0); return false;} return true;} return false;}
+
+ public boolean playerOwnsThis(EntityPlayer aPlayer, boolean aCheckPrecicely) {if (!canAccessData()) return false; if (aCheckPrecicely || privateAccess() || mOwnerName.equals("")) if (mOwnerName.equals("")&&isServerSide()) setOwnerName(aPlayer.getDisplayName()); else if (privateAccess() && !aPlayer.getDisplayName().equals("Player") && !mOwnerName.equals("Player") && !mOwnerName.equals(aPlayer.getDisplayName())) return false; return true;}
+ public boolean privateAccess() {if (!canAccessData()) return mLockUpgrade; return mLockUpgrade || mMetaTileEntity.ownerControl();}
+ public void doEnergyExplosion() {if (getUniversalEnergyCapacity() > 0 && getUniversalEnergyStored() >= getUniversalEnergyCapacity()/5) {doExplosion(oOutput*(getUniversalEnergyStored() >= getUniversalEnergyCapacity()?4:getUniversalEnergyStored() >= getUniversalEnergyCapacity()/2?2:1)); GT_Mod.instance.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "electricproblems");}}
+
+ @Override
+ public void doExplosion(long aAmount) {
+ if (canAccessData()) {
+ // This is only for Electric Machines
+ if (GregTech_API.sMachineWireFire && mMetaTileEntity.isElectric()) {
+ try {
+ mReleaseEnergy = true;
+ IEnergyConnected.Util.emitEnergyToNetwork(V[5], Math.max(1, getStoredEU() / V[5]), this);
+ } catch(Exception e) {/* Fun Fact: all these "do nothing" Comments you see in my Code, are just there to let Eclipse shut up about the intended empty Brackets, but I need eclipse to yell at me in some of the regular Cases where I forget to add Code */}
+ }
+ mReleaseEnergy = false;
+ // Normal Explosion Code
+ mMetaTileEntity.onExplosion();
+ mMetaTileEntity.doExplosion(aAmount);
+ }
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops() {
+ ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID);
+ NBTTagCompound tNBT = new NBTTagCompound();
+ if (mRecipeStuff != null && !mRecipeStuff.hasNoTags()) tNBT.setTag("GT.CraftingComponents", mRecipeStuff);
+ if (mMuffler ) tNBT.setBoolean ("mMuffler" , mMuffler);
+ if (mLockUpgrade ) tNBT.setBoolean ("mLockUpgrade" , mLockUpgrade);
+ if (mSteamConverter ) tNBT.setBoolean ("mSteamConverter" , mSteamConverter);
+ if (mColor > 0) tNBT.setByte ("mColor" , mColor);
+ if (mOtherUpgrades > 0) tNBT.setByte ("mOtherUpgrades" , mOtherUpgrades);
+ if (mStrongRedstone > 0) tNBT.setByte ("mStrongRedstone" , mStrongRedstone);
+ for (byte i = 0; i < mCoverSides.length; i++) {
+ if (mCoverSides[i] != 0) {
+ tNBT.setIntArray("mCoverData" , mCoverData);
+ tNBT.setIntArray("mCoverSides" , mCoverSides);
+ break;
+ }
+ }
+ if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT);
+ if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT);
+ return new ArrayList<ItemStack>(Arrays.asList(rStack));
+ }
+
+ public int getUpgradeCount() {
+ return (mMuffler?1:0)+(mLockUpgrade?1:0)+(mSteamConverter?1:0)+mOtherUpgrades;
+ }
+
+ @Override
+ public boolean onRightclick(EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) {
+ if (isClientSide()) {
+ if (getCoverBehaviorAtSide(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) return true;
+ if (!getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false;
+ }
+ if (isServerSide()) {
+ if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) {
+ ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
+ if (tCurrentItem != null) {
+ if (getColorization() >= 0 && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) {
+ tCurrentItem.func_150996_a(Items.bucket);
+ setColorization((byte)(getColorization() >= 16 ? -2 : -1));
+ return true;
+ }
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) {
+ if (mMetaTileEntity.onWrenchRightClick(aSide, GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ), aPlayer, aX, aY, aZ)) {
+ GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
+ setCoverDataAtSide(aSide, getCoverBehaviorAtSide(aSide).onCoverScrewdriverclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ));
+ mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ mInputDisabled = !mInputDisabled;
+ if (mInputDisabled) mOutputDisabled = !mOutputDisabled;
+ GT_Utility.sendChatToPlayer(aPlayer, "Auto-Input: " + (mInputDisabled?"Disabled":"Enabled") + " Auto-Output: " + (mOutputDisabled?"Disabled":"Enabled"));
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(1), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ if (mWorks) disableWorking(); else enableWorking();
+ GT_Utility.sendChatToPlayer(aPlayer, "Machine Processing: " + (isAllowedToWork()?"Enabled":"Disabled"));
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(101), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) {
+ byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ if (GT_ModHandler.useSolderingIron(tCurrentItem, aPlayer)) {
+ mStrongRedstone ^= (1 << tSide);
+ GT_Utility.sendChatToPlayer(aPlayer, "Redstone Output at Side " + tSide + " set to: " + ((mStrongRedstone & (1 << tSide))!=0?"Strong":"Weak"));
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 3.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+
+ if (getCoverIDAtSide(aSide) == 0) {
+ if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) {
+ if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(aSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(aSide, new GT_ItemStack(tCurrentItem))) {
+ setCoverItemAtSide(aSide, tCurrentItem);
+ if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--;
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
+ }
+ return true;
+ }
+ } else {
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) {
+ if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(0), 1.0F, -1, xCoord, yCoord, zCoord);
+ dropCover(aSide, aSide, false);
+ }
+ return true;
+ }
+ }
+ }
+
+ if (getCoverBehaviorAtSide(aSide).onCoverRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ)) return true;
+
+ if (!getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false;
+
+ if (isUpgradable() && aPlayer.inventory.getCurrentItem() != null) {/*
+ if (ItemList.Upgrade_SteamEngine.isStackEqual(aPlayer.inventory.getCurrentItem())) {
+ if (addSteamEngineUpgrade()) {
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(3), 1.0F, -1, xCoord, yCoord, zCoord);
+ if (!aPlayer.capabilities.isCreativeMode) aPlayer.inventory.getCurrentItem().stackSize--;
+ }
+ return true;
+ }*/
+ if (ItemList.Upgrade_Muffler.isStackEqual(aPlayer.inventory.getCurrentItem())) {
+ if (addMufflerUpgrade()) {
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(3), 1.0F, -1, xCoord, yCoord, zCoord);
+ if (!aPlayer.capabilities.isCreativeMode) aPlayer.inventory.getCurrentItem().stackSize--;
+ }
+ return true;
+ }
+ if (ItemList.Upgrade_Lock.isStackEqual(aPlayer.inventory.getCurrentItem())) {
+ if (isUpgradable() && !mLockUpgrade) {
+ mLockUpgrade = true;
+ setOwnerName(aPlayer.getDisplayName());
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(3), 1.0F, -1, xCoord, yCoord, zCoord);
+ if (!aPlayer.capabilities.isCreativeMode) aPlayer.inventory.getCurrentItem().stackSize--;
+ }
+ return true;
+ }
+ }
+ }
+ }
+
+ try {
+ if (hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onLeftclick(EntityPlayer aPlayer) {
+ try {
+ if (aPlayer != null && hasValidMetaTileEntity()) mMetaTileEntity.onLeftclick(this, aPlayer);
+ } catch(Throwable e) {
+ GT_Log.err.println("Encountered Exception while leftclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @Override
+ public boolean isDigitalChest() {
+ if (canAccessData()) return mMetaTileEntity.isDigitalChest();
+ return false;
+ }
+
+ @Override
+ public ItemStack[] getStoredItemData() {
+ if (canAccessData()) return mMetaTileEntity.getStoredItemData();
+ return null;
+ }
+
+ @Override
+ public void setItemCount(int aCount) {
+ if (canAccessData()) mMetaTileEntity.setItemCount(aCount);
+ }
+
+ @Override
+ public int getMaxItemCount() {
+ if (canAccessData()) return mMetaTileEntity.getMaxItemCount();
+ return 0;
+ }
+
+ /**
+ * Can put aStack into Slot
+ */
+ @Override
+ public boolean isItemValidForSlot(int aIndex, ItemStack aStack) {
+ return canAccessData() && mMetaTileEntity.isItemValidForSlot(aIndex, aStack);
+ }
+
+ /**
+ * returns all valid Inventory Slots, no matter which Side (Unless it's covered).
+ * The Side Stuff is done in the following two Functions.
+ */
+ @Override
+ public int[] getAccessibleSlotsFromSide(int aSide) {
+ if (canAccessData() && (getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), -1, this) || getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), -1, this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide);
+ return new int[0];
+ }
+
+ /**
+ * Can put aStack into Slot at Side
+ */
+ @Override
+ public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
+ return canAccessData() && (mRunningThroughTick || !mInputDisabled ) && getCoverBehaviorAtSide((byte)aSide).letsItemsIn ((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), aIndex, this) && mMetaTileEntity.canInsertItem(aIndex, aStack, aSide);
+ }
+
+ /**
+ * Can pull aStack out of Slot from Side
+ */
+ @Override
+ public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) {
+ return canAccessData() && (mRunningThroughTick || !mOutputDisabled) && getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, getCoverIDAtSide((byte)aSide), getCoverDataAtSide((byte)aSide), aIndex, this) && mMetaTileEntity.canExtractItem(aIndex, aStack, aSide);
+ }
+
+ @Override
+ public boolean isUpgradable() {
+ return canAccessData() && getUpgradeCount() < 8;
+ }
+
+ @Override
+ public byte getInternalInputRedstoneSignal(byte aSide) {
+ return (byte)(getCoverBehaviorAtSide(aSide).getRedstoneInput(aSide, getInputRedstoneSignal(aSide), getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)&15);
+ }
+
+ @Override
+ public byte getInputRedstoneSignal(byte aSide) {
+ return (byte)(worldObj.getIndirectPowerLevelTo(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1), aSide)&15);
+ }
+
+ @Override
+ public byte getOutputRedstoneSignal(byte aSide) {
+ return getCoverBehaviorAtSide(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this) ? mSidedRedstone[aSide]: 0;
+// return (byte)(getCoverBehaviorAtSide(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this) || (mRedstone && getCoverBehaviorAtSide(aSide).letsRedstoneGoOut(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this))?mSidedRedstone[aSide]&15:0);
+ }
+
+ @Override
+ public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength) {
+ if (!getCoverBehaviorAtSide(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) setOutputRedstoneSignal(aSide, aStrength);
+ }
+
+ @Override
+ public void setOutputRedstoneSignal(byte aSide, byte aStrength) {
+ aStrength = (byte)Math.min(Math.max(0, aStrength), 15);
+ if (aSide >= 0 && aSide < 6 && mSidedRedstone[aSide] != aStrength) {
+ mSidedRedstone[aSide] = aStrength;
+ issueBlockUpdate();
+ }
+ }
+
+ @Override
+ public boolean isSteamEngineUpgradable() {
+ return isUpgradable()&&!hasSteamEngineUpgrade()&&getSteamCapacity()>0;
+ }
+
+ @Override
+ public boolean addSteamEngineUpgrade() {
+ if (isSteamEngineUpgradable()) {
+ issueBlockUpdate();
+ mSteamConverter = true;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean hasSteamEngineUpgrade() {
+ if (canAccessData() && mMetaTileEntity.isSteampowered()) return true;
+ return mSteamConverter;
+ }
+
+ @Override
+ public boolean hasMufflerUpgrade() {
+ return mMuffler;
+ }
+
+ @Override
+ public boolean isMufflerUpgradable() {
+ return isUpgradable()&&!hasMufflerUpgrade();
+ }
+
+ @Override
+ public boolean addMufflerUpgrade() {
+ if (isMufflerUpgradable()) return mMuffler = true;
+ return false;
+ }
+
+ @Override
+ public boolean hasInventoryBeenModified() {
+ return mInventoryChanged;
+ }
+
+ @Override
+ public void setGenericRedstoneOutput(boolean aOnOff) {
+ mRedstone = aOnOff;
+ }
+
+ @Override
+ public int getErrorDisplayID() {
+ return mDisplayErrorCode;
+ }
+
+ @Override
+ public void setErrorDisplayID(int aErrorID) {
+ mDisplayErrorCode = aErrorID;
+ }
+
+ @Override
+ public IMetaTileEntity getMetaTileEntity() {
+ return hasValidMetaTileEntity()?mMetaTileEntity:null;
+ }
+
+ private final GT_CoverBehavior[] mCoverBehaviors = new GT_CoverBehavior[] {GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior};
+
+ @Override
+ public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) {
+ return aSide >= 0 && aSide < mCoverBehaviors.length ? mCoverBehaviors[aSide] : GregTech_API.sNoBehavior;
+ }
+
+ @Override
+ public void setCoverIDAtSide(byte aSide, int aID) {
+ if (aSide >= 0 && aSide < 6) {
+ mCoverSides[aSide] = aID;
+ mCoverData[aSide] = 0;
+ mCoverBehaviors[aSide] = GregTech_API.getCoverBehavior(aID);
+ issueCoverUpdate(aSide);
+ issueBlockUpdate();
+ }
+ }
+
+ @Override
+ public void setCoverItemAtSide(byte aSide, ItemStack aCover) {
+ GregTech_API.getCoverBehavior(aCover).placeCover(aSide, aCover, this);
+ }
+
+ @Override
+ public int getCoverIDAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) return mCoverSides[aSide]; return 0;
+ }
+
+ @Override
+ public ItemStack getCoverItemAtSide(byte aSide) {
+ return GT_Utility.intToStack(getCoverIDAtSide(aSide));
+ }
+
+ @Override
+ public boolean canPlaceCoverIDAtSide(byte aSide, int aID) {
+ return getCoverIDAtSide(aSide) == 0;
+ }
+
+ @Override
+ public boolean canPlaceCoverItemAtSide(byte aSide, ItemStack aCover) {
+ return getCoverIDAtSide(aSide) == 0;
+ }
+
+ @Override
+ public void setCoverDataAtSide(byte aSide, int aData) {
+ if (aSide >= 0 && aSide < 6) mCoverData[aSide] = aData;
+ }
+
+ @Override
+ public int getCoverDataAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) return mCoverData[aSide];
+ return 0;
+ }
+
+ @Override
+ public void setLightValue(byte aLightValue) {
+ mLightValue = (byte)(aLightValue & 15);
+ }
+
+ public byte getLightValue() {
+ return mLightValue;
+ }
+
+
+ @Override
+ public long getAverageElectricInput() {
+ int rEU = 0;
+ for (int tEU : mAverageEUInput) rEU += tEU;
+ return rEU / mAverageEUInput.length;
+ }
+
+ @Override
+ public long getAverageElectricOutput() {
+ int rEU = 0;
+ for (int tEU : mAverageEUOutput) rEU += tEU;
+ return rEU / mAverageEUOutput.length;
+ }
+
+ @Override
+ public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) {
+ if (getCoverBehaviorAtSide(aSide).onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) || aForced) {
+ ItemStack tStack = getCoverBehaviorAtSide(aSide).getDrop(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this);
+ if (tStack != null) {
+ tStack.setTagCompound(null);
+ EntityItem tEntity = new EntityItem(worldObj, getOffsetX(aDroppedSide, 1) + 0.5, getOffsetY(aDroppedSide, 1) + 0.5, getOffsetZ(aDroppedSide, 1) + 0.5, tStack);
+ tEntity.motionX = 0;
+ tEntity.motionY = 0;
+ tEntity.motionZ = 0;
+ worldObj.spawnEntityInWorld(tEntity);
+ }
+ setCoverIDAtSide(aSide, 0);
+ if (mMetaTileEntity.hasSidedRedstoneOutputBehavior()) {
+ setOutputRedstoneSignal(aSide, (byte) 0);
+ } else {
+ setOutputRedstoneSignal(aSide, (byte)15);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String getOwnerName() {
+ if (GT_Utility.isStringInvalid(mOwnerName)) return "Player";
+ return mOwnerName;
+ }
+
+ @Override
+ public String setOwnerName(String aName) {
+ if (GT_Utility.isStringInvalid(aName)) return mOwnerName = "Player";
+ return mOwnerName = aName;
+ }
+
+ @Override
+ public byte getComparatorValue(byte aSide) {
+ return canAccessData()?mMetaTileEntity.getComparatorValue(aSide):0;
+ }
+
+ @Override
+ public byte getStrongOutputRedstoneSignal(byte aSide) {
+ return aSide>=0&&aSide<6&&(mStrongRedstone & (1 << aSide))!=0?(byte)(mSidedRedstone[aSide]&15):0;
+ }
+
+ @Override
+ public void setStrongOutputRedstoneSignal(byte aSide, byte aStrength) {
+ mStrongRedstone |= (1 << aSide);
+ setOutputRedstoneSignal(aSide, aStrength);
+ }
+
+ @Override
+ public ItemStack decrStackSize(int aIndex, int aAmount) {
+ if (canAccessData()) {
+ mInventoryChanged = true;
+ return mMetaTileEntity.decrStackSize(aIndex, aAmount);
+ }
+ return null;
+ }
+
+ @Override
+ public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ if (!canAccessData() || !mMetaTileEntity.isElectric() || !inputEnergyFrom(aSide) || aAmperage <= 0 || aVoltage <= 0 || getStoredEU() >= getEUCapacity() || mMetaTileEntity.maxAmperesIn() <= mAcceptedAmperes) return 0;
+ if (aVoltage > getInputVoltage()) {
+ doExplosion(aVoltage);
+ return 0;
+ }
+ if (increaseStoredEnergyUnits(aVoltage*(aAmperage=Math.min(aAmperage, Math.min(mMetaTileEntity.maxAmperesIn()-mAcceptedAmperes, 1+((getEUCapacity()-getStoredEU()) / aVoltage)))), true)) {
+ mAverageEUInput[mAverageEUInputIndex] += aVoltage*aAmperage;
+ mAcceptedAmperes += aAmperage;
+ return aAmperage;
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean drainEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ if (!canAccessData() || !mMetaTileEntity.isElectric() || !outputsEnergyTo(aSide) || getStoredEU() - (aVoltage*aAmperage) < mMetaTileEntity.getMinimumStoredEU()) return false;
+ if (decreaseStoredEU(aVoltage*aAmperage, false)) {
+ mAverageEUOutput[mAverageEUOutputIndex] += aVoltage*aAmperage;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean acceptsRotationalEnergy(byte aSide) {
+ if (!canAccessData() || getCoverIDAtSide(aSide) != 0) return false;
+ return mMetaTileEntity.acceptsRotationalEnergy(aSide);
+ }
+
+ @Override
+ public boolean injectRotationalEnergy(byte aSide, long aSpeed, long aEnergy) {
+ if (!canAccessData() || getCoverIDAtSide(aSide) != 0) return false;
+ return mMetaTileEntity.injectRotationalEnergy(aSide, aSpeed, aEnergy);
+ }
+
+ @Override
+ public int fill(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mInputDisabled ) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput ((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid==null?null:aFluid.getFluid(), this)))) return mMetaTileEntity.fill(aSide, aFluid, doFill);
+ return 0;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) {
+ if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), mMetaTileEntity.getFluid()==null?null:mMetaTileEntity.getFluid().getFluid(), this)))) return mMetaTileEntity.drain(aSide, maxDrain, doDrain);
+ return null;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) {
+ if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid==null?null:aFluid.getFluid(), this)))) return mMetaTileEntity.drain(aSide, aFluid, doDrain);
+ return null;
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
+ if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mInputDisabled ) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput ((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid, this)))) return mMetaTileEntity.canFill(aSide, aFluid);
+ return false;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection aSide, Fluid aFluid) {
+ if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), aFluid, this)))) return mMetaTileEntity.canDrain(aSide, aFluid);
+ return false;
+ }
+
+ @Override
+ public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
+ if (canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidIn ((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte)aSide.ordinal()) && getCoverBehaviorAtSide((byte)aSide.ordinal()).letsFluidOut((byte)aSide.ordinal(), getCoverIDAtSide((byte)aSide.ordinal()), getCoverDataAtSide((byte)aSide.ordinal()), null, this)))) return mMetaTileEntity.getTankInfo(aSide);
+ return new FluidTankInfo[] {};
+ }
+
+ public double getOutputEnergyUnitsPerTick() { return oOutput;}
+ public boolean isTeleporterCompatible(ForgeDirection aSide) {return canAccessData() && mMetaTileEntity.isTeleporterCompatible();}
+ public double demandedEnergyUnits() {if (mReleaseEnergy || !canAccessData() || !mMetaTileEntity.isEnetInput()) return 0; return getEUCapacity() - getStoredEU();}
+ public double injectEnergyUnits(ForgeDirection aDirection, double aAmount) {return injectEnergyUnits((byte)aDirection.ordinal(), (int)aAmount, 1)>0?0:aAmount;}
+ public boolean acceptsEnergyFrom(TileEntity aEmitter, ForgeDirection aDirection) {return inputEnergyFrom((byte)aDirection.ordinal());}
+ public boolean emitsEnergyTo(TileEntity aReceiver, ForgeDirection aDirection) {return outputsEnergyTo((byte)aDirection.ordinal());}
+ public double getOfferedEnergy() {return (canAccessData() && getStoredEU() - mMetaTileEntity.getMinimumStoredEU() >= oOutput)?Math.max(0, oOutput):0;}
+ public void drawEnergy(double amount) {mAverageEUOutput[mAverageEUOutputIndex] += amount; decreaseStoredEU((int)amount, true);}
+ public int injectEnergy(ForgeDirection aForgeDirection, int aAmount) {return injectEnergyUnits((byte)aForgeDirection.ordinal(), aAmount, 1)>0?0:aAmount;}
+
+ public int addEnergy(int aEnergy) {
+ if (!canAccessData()) return 0;
+ if (aEnergy > 0)
+ increaseStoredEnergyUnits( aEnergy, true);
+ else
+ decreaseStoredEU(-aEnergy, true);
+ return (int)Math.min(Integer.MAX_VALUE, mMetaTileEntity.getEUVar());
+ }
+
+ public boolean isAddedToEnergyNet() {return false;}
+ public void setStored(int aEU) {if (canAccessData()) setStoredEU(aEU);}
+ public int demandsEnergy() {if (mReleaseEnergy || !canAccessData() || !mMetaTileEntity.isEnetInput()) return 0; return getCapacity() - getStored();}
+ public int getCapacity() {return (int)Math.min(Integer.MAX_VALUE, getEUCapacity());}
+ public int getStored() {return (int)Math.min(Integer.MAX_VALUE, Math.min(getStoredEU(), getCapacity()));}
+ public int getMaxSafeInput() {return (int)Math.min(Integer.MAX_VALUE, getInputVoltage());}
+ public int getMaxEnergyOutput() {if (mReleaseEnergy) return Integer.MAX_VALUE; return getOutput();}
+ public int getOutput() {return (int)Math.min(Integer.MAX_VALUE, oOutput);}
+ public int injectEnergy(Direction aDirection, int aAmount) {return injectEnergyUnits((byte)aDirection.toSideValue(), aAmount, 1)>0?0:aAmount;}
+ public boolean isTeleporterCompatible(Direction aSide) {return canAccessData() && mMetaTileEntity.isTeleporterCompatible();}
+ public boolean acceptsEnergyFrom(TileEntity aReceiver, Direction aDirection) {return inputEnergyFrom((byte)aDirection.toSideValue());}
+ public boolean emitsEnergyTo(TileEntity aReceiver, Direction aDirection) {return outputsEnergyTo((byte)aDirection.toSideValue());}
+
+ @Override
+ public boolean isInvalidTileEntity() {
+ return isInvalid();
+ }
+
+ @Override
+ public boolean addStackToSlot(int aIndex, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return true;
+ if (aIndex < 0 || aIndex >= getSizeInventory()) return false;
+ ItemStack tStack = getStackInSlot(aIndex);
+ if (GT_Utility.isStackInvalid(tStack)) {
+ setInventorySlotContents(aIndex, aStack);
+ return true;
+ }
+ aStack = GT_OreDictUnificator.get(aStack);
+ if (GT_Utility.areStacksEqual(tStack, aStack) && tStack.stackSize + aStack.stackSize <= Math.min(aStack.getMaxStackSize(), getInventoryStackLimit())) {
+ tStack.stackSize+=aStack.stackSize;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) {
+ return addStackToSlot(aIndex, GT_Utility.copyAmount(aAmount, aStack));
+ }
+
+ @Override
+ public void setMetaTileEntity(IMetaTileEntity aMetaTileEntity) {
+ mMetaTileEntity = (MetaTileEntity)aMetaTileEntity;
+ }
+
+ @Override
+ public byte getColorization() {
+ return (byte)(mColor-1);
+ }
+
+ @Override
+ public byte setColorization(byte aColor) {
+ if (aColor > 15 || aColor < -1) aColor = -1;
+ if (canAccessData()) mMetaTileEntity.onColorChangeServer(aColor);
+ return mColor = (byte)(aColor+1);
+ }
+
+ @Override
+ public float getBlastResistance(byte aSide) {
+ return canAccessData()?Math.max(0, getMetaTileEntity().getExplosionResistance(aSide)):10.0F;
+ }
+
+ @Override
+ public boolean isUniversalEnergyStored(long aEnergyAmount) {
+ if (getUniversalEnergyStored() >= aEnergyAmount) return true;
+ mHasEnoughEnergy = false;
+ return false;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ {if (canAccessData()) return getMetaTileEntity().getInfoData(); return new String[]{};}
+ }
+
+ @Override
+ public void markDirty() {
+ super.markDirty();
+ mInventoryChanged = true;
+ }
+
+ @Override
+ public int getLightOpacity() {
+ return mMetaTileEntity == null ? getLightValue() > 0 ? 0 : 255 : mMetaTileEntity.getLightOpacity();
+ }
+
+ @Override
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider) {
+ mMetaTileEntity.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ return mMetaTileEntity.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
+ mMetaTileEntity.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntityUE.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntityUE.java
new file mode 100644
index 0000000000..d18ddeb204
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntityUE.java
@@ -0,0 +1,98 @@
+package gregtech.api.metatileentity;
+
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This file contains all the needed 'implements' of the Interfaces for the Universal Electricity Stuff.
+ *
+ * I am using the BC3 Ratio, since that is a constant in comparison to IC² Energy (1 MJ is always 2,5 EU).
+ */
+public class BaseMetaTileEntityUE extends BaseMetaTileEntity /*implements IUETileEntity*/ {
+ public BaseMetaTileEntityUE() {
+ super();
+ }
+ /*
+ @Override
+ public void updateStatus() {
+ super.updateStatus();
+ }
+
+ @Override
+ public void chargeItem(ItemStack aStack) {
+ super.chargeItem(aStack);
+ float tEnergy = ElectricItemHelper.chargeItem(aStack, (float)(getOfferedEnergy() * (Compatibility.BC3_RATIO * 0.4F)));
+ if (tEnergy > 0) decreaseStoredEU((int)(tEnergy / (Compatibility.BC3_RATIO * 0.4F)) + 1, true);
+ }
+
+ @Override
+ public void dischargeItem(ItemStack aStack) {
+ super.dischargeItem(aStack);
+ float tEnergy = ElectricItemHelper.dischargeItem(aStack, (float)(demandedEnergyUnits() * (Compatibility.BC3_RATIO * 0.4F)));
+ if (tEnergy > 0) increaseStoredEnergyUnits((int)(tEnergy / (Compatibility.BC3_RATIO * 0.4F)), true);
+ }
+
+ @Override
+ public float receiveElectricity(ForgeDirection aSide, ElectricityPack aPacket, boolean doReceive) {
+ if (!getUEConsumingSides().contains(aSide)) return 0;
+ int aInserted = (int)(aPacket.getWatts()/(Compatibility.BC3_RATIO * 0.4F));
+ if (doReceive) return injectEnergyUnits((byte)aSide.ordinal(), aInserted, 1) ? aInserted : 0;
+ return getEUCapacity() - getStoredEU() >= aInserted ? aInserted : 0;
+ }
+
+ @Override
+ public ElectricityPack provideElectricity(ForgeDirection aSide, ElectricityPack aRequested, boolean doProvide) {
+ if (!getUEProducingSides().contains(aSide)) return null;
+ int aExtracted = (int)getOfferedEnergy();
+ if (doProvide) return aRequested.getWatts()/(Compatibility.BC3_RATIO * 0.4F) >= getOfferedEnergy() ? decreaseStoredEU(aExtracted, false) ? new ElectricityPack(aExtracted * (Compatibility.BC3_RATIO * 0.4F), 1) : null : decreaseStoredEU((int)(aRequested.getWatts()/(Compatibility.BC3_RATIO * 0.4F)), false) ? new ElectricityPack((int)(aRequested.getWatts()/(Compatibility.BC3_RATIO * 0.4F)) * (Compatibility.BC3_RATIO * 0.4F), 1) : null;
+ return aRequested.getWatts()/(Compatibility.BC3_RATIO * 0.4F) >= getOfferedEnergy() ? new ElectricityPack(aExtracted * (Compatibility.BC3_RATIO * 0.4F), 1) : new ElectricityPack((int)(aRequested.getWatts()/(Compatibility.BC3_RATIO * 0.4F)) * (Compatibility.BC3_RATIO * 0.4F), 1);
+ }
+
+ @Override
+ public float getRequest(ForgeDirection aSide) {
+ if (!getUEConsumingSides().contains(aSide)) return 0;
+ return (float)(demandedEnergyUnits() * (Compatibility.BC3_RATIO * 0.4F));
+ }
+
+ @Override
+ public float getProvide(ForgeDirection aSide) {
+ if (!getUEProducingSides().contains(aSide)) return 0;
+ return (float)(getOfferedEnergy() * (Compatibility.BC3_RATIO * 0.4F));
+ }
+
+ @Override
+ public float getVoltage() {
+ return (float)(getOfferedEnergy() * (Compatibility.BC3_RATIO * 0.4F));
+ }
+
+ @Override
+ public boolean canConnect(ForgeDirection aSide) {
+ return getUEProducingSides().contains(aSide) || getUEConsumingSides().contains(aSide);
+ }
+
+ private EnumSet<ForgeDirection> getUEConsumingSides() {
+ EnumSet<ForgeDirection> rSides = EnumSet.noneOf(ForgeDirection.class);
+ for (byte i = 0; i < 6; i++) {
+ if (inputEnergyFrom(i)) {
+ Object tTileEntity = getTileEntityAtSide(i);
+ if (tTileEntity != null && tTileEntity instanceof IConductor) {
+ rSides.add(ForgeDirection.getOrientation(i));
+ }
+ }
+ }
+ return rSides;
+ }
+
+ private EnumSet<ForgeDirection> getUEProducingSides() {
+ EnumSet<ForgeDirection> rSides = EnumSet.noneOf(ForgeDirection.class);
+ for (byte i = 0; i < 6; i++) {
+ if (outputsEnergyTo(i)) {
+ Object tTileEntity = getTileEntityAtSide(i);
+ if (tTileEntity != null && tTileEntity instanceof IConductor) {
+ rSides.add(ForgeDirection.getOrientation(i));
+ }
+ }
+ }
+ return rSides;
+ }*/
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java
new file mode 100644
index 0000000000..d8a798d19e
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java
@@ -0,0 +1,227 @@
+package gregtech.api.metatileentity;
+
+import static gregtech.api.enums.GT_Values.GT;
+import static gregtech.api.enums.GT_Values.NW;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
+import gregtech.api.net.GT_Packet_Block_Event;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.IFluidHandler;
+
+/**
+ * The Functions my old TileEntities and my BaseMetaTileEntities have in common.
+ *
+ * Basically everything a TileEntity should have.
+ */
+public abstract class BaseTileEntity extends TileEntity implements IHasWorldObjectAndCoords {
+ /**
+ * If this TileEntity checks for the Chunk to be loaded before returning World based values.
+ * The AdvPump hacks this to false to ensure everything runs properly even when far Chunks are not actively loaded.
+ * But anything else should not cause worfin' Chunks, uhh I mean orphan Chunks.
+ */
+ public boolean ignoreUnloadedChunks = true;
+
+ /**
+ * This Variable checks if this TileEntity is dead, because Minecraft is too stupid to have proper TileEntity unloading.
+ */
+ public boolean isDead = false;
+
+ /**
+ * Buffers adjacent TileEntities for faster access
+ *
+ * "this" means that there is no TileEntity, while "null" means that it doesn't know if there is even a TileEntity and still needs to check that if needed.
+ */
+ private final TileEntity[] mBufferedTileEntities = new TileEntity[6];
+
+ private final void clearNullMarkersFromTileEntityBuffer() {
+ for (int i = 0; i < mBufferedTileEntities.length; i++) if (mBufferedTileEntities[i] == this) mBufferedTileEntities[i] = null;
+ }
+
+ /**
+ * Called automatically when the Coordinates of this TileEntity have been changed
+ */
+ protected final void clearTileEntityBuffer() {
+ for (int i = 0; i < mBufferedTileEntities.length; i++) mBufferedTileEntities[i] = null;
+ }
+
+ @Override public final World getWorld () {return worldObj;}
+ @Override public final int getXCoord() {return xCoord;}
+ @Override public final short getYCoord() {return (short)yCoord;}
+ @Override public final int getZCoord() {return zCoord;}
+ @Override public final int getOffsetX(byte aSide, int aMultiplier) {return xCoord + ForgeDirection.getOrientation(aSide).offsetX * aMultiplier ;}
+ @Override public final short getOffsetY(byte aSide, int aMultiplier) {return (short)(yCoord + ForgeDirection.getOrientation(aSide).offsetY * aMultiplier);}
+ @Override public final int getOffsetZ(byte aSide, int aMultiplier) {return zCoord + ForgeDirection.getOrientation(aSide).offsetZ * aMultiplier ;}
+ @Override public final boolean isServerSide() {return !worldObj.isRemote;}
+ @Override public final boolean isClientSide() {return worldObj.isRemote;}
+ @Override public final boolean openGUI(EntityPlayer aPlayer) {return openGUI(aPlayer, 0);}
+ @Override public final boolean openGUI(EntityPlayer aPlayer, int aID) {if (aPlayer == null) return false; aPlayer.openGui(GT, aID, worldObj, xCoord, yCoord, zCoord); return true;}
+ @Override public final int getRandomNumber(int aRange) {return worldObj.rand.nextInt(aRange);}
+ @Override public final BiomeGenBase getBiome(int aX, int aZ) {return worldObj.getBiomeGenForCoords(aX, aZ);}
+ @Override public final BiomeGenBase getBiome() {return getBiome(xCoord, zCoord);}
+ @Override public final Block getBlockOffset(int aX, int aY, int aZ) {return getBlock(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final Block getBlockAtSide(byte aSide) {return getBlockAtSideAndDistance(aSide, 1);}
+ @Override public final Block getBlockAtSideAndDistance(byte aSide, int aDistance) {return getBlock(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final byte getMetaIDOffset(int aX, int aY, int aZ) {return getMetaID(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final byte getMetaIDAtSide(byte aSide) {return getMetaIDAtSideAndDistance(aSide, 1);}
+ @Override public final byte getMetaIDAtSideAndDistance(byte aSide, int aDistance) {return getMetaID(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final byte getLightLevelOffset(int aX, int aY, int aZ) {return getLightLevel(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final byte getLightLevelAtSide(byte aSide) {return getLightLevelAtSideAndDistance(aSide, 1);}
+ @Override public final byte getLightLevelAtSideAndDistance(byte aSide, int aDistance) {return getLightLevel(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final boolean getOpacityOffset(int aX, int aY, int aZ) {return getOpacity(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final boolean getOpacityAtSide(byte aSide) {return getOpacityAtSideAndDistance(aSide, 1);}
+ @Override public final boolean getOpacityAtSideAndDistance(byte aSide, int aDistance) {return getOpacity(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final boolean getSkyOffset(int aX, int aY, int aZ) {return getSky(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final boolean getSkyAtSide(byte aSide) {return getSkyAtSideAndDistance(aSide, 1);}
+ @Override public final boolean getSkyAtSideAndDistance(byte aSide, int aDistance) {return getSky(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final boolean getAirOffset(int aX, int aY, int aZ) {return getAir(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final boolean getAirAtSide(byte aSide) {return getAirAtSideAndDistance(aSide, 1);}
+ @Override public final boolean getAirAtSideAndDistance(byte aSide, int aDistance) {return getAir(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final TileEntity getTileEntityOffset(int aX, int aY, int aZ) {return getTileEntity(xCoord+aX, yCoord+aY, zCoord+aZ);}
+ @Override public final TileEntity getTileEntityAtSideAndDistance(byte aSide, int aDistance) {if (aDistance == 1) return getTileEntityAtSide(aSide); return getTileEntity(getOffsetX(aSide, aDistance), getOffsetY(aSide, aDistance), getOffsetZ(aSide, aDistance));}
+ @Override public final IInventory getIInventory(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IInventory) return (IInventory)tTileEntity; return null;}
+ @Override public final IInventory getIInventoryOffset(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IInventory) return (IInventory)tTileEntity; return null;}
+ @Override public final IInventory getIInventoryAtSide(byte aSide) {TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IInventory) return (IInventory)tTileEntity; return null;}
+ @Override public final IInventory getIInventoryAtSideAndDistance(byte aSide, int aDistance) {TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IInventory) return (IInventory)tTileEntity; return null;}
+ @Override public final IFluidHandler getITankContainer(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler)tTileEntity; return null;}
+ @Override public final IFluidHandler getITankContainerOffset(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler)tTileEntity; return null;}
+ @Override public final IFluidHandler getITankContainerAtSide(byte aSide) {TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler)tTileEntity; return null;}
+ @Override public final IFluidHandler getITankContainerAtSideAndDistance(byte aSide, int aDistance) {TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler)tTileEntity; return null;}
+ @Override public final IGregTechTileEntity getIGregTechTileEntity(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity)tTileEntity; return null;}
+ @Override public final IGregTechTileEntity getIGregTechTileEntityOffset(int aX, int aY, int aZ) {TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity)tTileEntity; return null;}
+ @Override public final IGregTechTileEntity getIGregTechTileEntityAtSide(byte aSide) {TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity)tTileEntity; return null;}
+ @Override public final IGregTechTileEntity getIGregTechTileEntityAtSideAndDistance(byte aSide, int aDistance) {TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity)tTileEntity; return null;}
+
+ @Override
+ public final Block getBlock(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return Blocks.air;
+ return worldObj.getBlock(aX, aY, aZ);
+ }
+
+ @Override
+ public final byte getMetaID(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return 0;
+ return (byte)worldObj.getBlockMetadata(aX, aY, aZ);
+ }
+
+ @Override
+ public final byte getLightLevel(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return 0;
+ return (byte)(worldObj.getLightBrightness(aX, aY, aZ)*15);
+ }
+
+ @Override
+ public final boolean getSky(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return true;
+ return worldObj.canBlockSeeTheSky(aX, aY, aZ);
+ }
+
+ @Override
+ public final boolean getOpacity(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return false;
+ return GT_Utility.isOpaqueBlock(worldObj, aX, aY, aZ);
+ }
+
+ @Override
+ public final boolean getAir(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return true;
+ return GT_Utility.isBlockAir(worldObj, aX, aY, aZ);
+ }
+
+ @Override
+ public final TileEntity getTileEntity(int aX, int aY, int aZ) {
+ if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return null;
+ return worldObj.getTileEntity(aX, aY, aZ);
+ }
+
+ @Override
+ public final TileEntity getTileEntityAtSide(byte aSide) {
+ if (aSide < 0 || aSide >= 6 || mBufferedTileEntities[aSide] == this) return null;
+ int tX = getOffsetX(aSide, 1), tY = getOffsetY(aSide, 1), tZ = getOffsetZ(aSide, 1);
+ if (crossedChunkBorder(tX, tZ)) {
+ mBufferedTileEntities[aSide] = null;
+ if (ignoreUnloadedChunks && !worldObj.blockExists(tX, tY, tZ)) return null;
+ }
+ if (mBufferedTileEntities[aSide] == null) {
+ mBufferedTileEntities[aSide] = worldObj.getTileEntity(tX, tY, tZ);
+ if (mBufferedTileEntities[aSide] == null) {
+ mBufferedTileEntities[aSide] = this;
+ return null;
+ }
+ return mBufferedTileEntities[aSide];
+ }
+ if (mBufferedTileEntities[aSide].isInvalid()) {
+ mBufferedTileEntities[aSide] = null;
+ return getTileEntityAtSide(aSide);
+ }
+ if (mBufferedTileEntities[aSide].xCoord == tX && mBufferedTileEntities[aSide].yCoord == tY && mBufferedTileEntities[aSide].zCoord == tZ) {
+ return mBufferedTileEntities[aSide];
+ }
+ return null;
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound aNBT) {
+ super.writeToNBT(aNBT);
+ //isDead = true;
+ }
+
+ @Override
+ public boolean isDead() {
+ return isDead || isInvalidTileEntity();
+ }
+
+ @Override
+ public void validate() {
+ clearNullMarkersFromTileEntityBuffer();
+ super.validate();
+ }
+
+ @Override
+ public void invalidate() {
+ clearNullMarkersFromTileEntityBuffer();
+ super.invalidate();
+ }
+
+ @Override
+ public void onChunkUnload() {
+ clearNullMarkersFromTileEntityBuffer();
+ super.onChunkUnload();
+ isDead = true;
+ }
+
+ @Override
+ public void updateEntity() {
+ // Well if the TileEntity gets ticked it is alive.
+ isDead = false;
+ }
+
+ public final void onAdjacentBlockChange(int aX, int aY, int aZ) {
+ clearNullMarkersFromTileEntityBuffer();
+ }
+
+ @Override
+ public final void sendBlockEvent(byte aID, byte aValue) {
+ NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_Block_Event(xCoord, (short)yCoord, zCoord, aID, aValue), xCoord, zCoord);
+ }
+
+ private boolean crossedChunkBorder(int aX, int aZ) {
+ return aX >> 4 != xCoord >> 4 || aZ >> 4 != zCoord >> 4;
+ }
+
+ public final void setOnFire() {
+ GT_Utility.setCoordsOnFire(worldObj, xCoord, yCoord, zCoord, false);
+ }
+
+ public final void setToFire() {
+ worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.fire);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
new file mode 100644
index 0000000000..d82a23b6d7
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
@@ -0,0 +1,534 @@
+package gregtech.api.metatileentity;
+
+import static gregtech.api.enums.GT_Values.GT;
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Extend this Class to add a new MetaPipe
+ * Call the Constructor with the desired ID at the load-phase (not preload and also not postload!)
+ * Implement the newMetaEntity-Method to return a new ready instance of your MetaTileEntity
+ *
+ * Call the Constructor like the following example inside the Load Phase, to register it.
+ * "new GT_MetaTileEntity_E_Furnace(54, "GT_E_Furnace", "Automatic E-Furnace");"
+ */
+public abstract class MetaPipeEntity implements IMetaTileEntity {
+ /**
+ * This variable tells, which directions the Block is connected to. It is a Bitmask.
+ */
+ public byte mConnections = 0;
+
+ /**
+ * For Pipe Rendering
+ */
+ public abstract float getThickNess();
+
+ /**
+ * For Pipe Rendering
+ */
+ public abstract boolean renderInside(byte aSide);
+
+ /**
+ * Only assigned for the MetaTileEntity in the List! Also only used to get the localized Name for the ItemStack and for getInvName.
+ */
+ public String mName;
+
+ public boolean doTickProfilingInThisTick = true;
+
+ /**
+ * accessibility to this Field is no longer given, see below
+ */
+ private IGregTechTileEntity mBaseMetaTileEntity;
+
+ @Override
+ public IGregTechTileEntity getBaseMetaTileEntity() {
+ return mBaseMetaTileEntity;
+ }
+
+ @Override
+ public ItemStack getStackForm(long aAmount) {
+ return new ItemStack(GregTech_API.sBlockMachines, (int)aAmount, getBaseMetaTileEntity().getMetaTileID());
+ }
+
+ /**
+ * The Inventory of the MetaTileEntity. Amount of Slots can be larger than 256. HAYO!
+ */
+ public final ItemStack[] mInventory;
+
+ /**
+ * This registers your Machine at the List.
+ * Use only ID's larger than 2048, because i reserved these ones.
+ * See also the List in the API, as it has a Description containing all the reservations.
+ * @param aID the ID
+ * @example for Constructor overload.
+ *
+ * public GT_MetaTileEntity_EBench(int aID, String mName, String mNameRegional) {
+ * super(aID, mName, mNameRegional);
+ * }
+ */
+ public MetaPipeEntity(int aID, String aBasicName, String aRegionalName, int aInvSlotCount) {
+ if (GregTech_API.sPostloadStarted || !GregTech_API.sPreloadStarted) throw new IllegalAccessError("This Constructor has to be called in the load Phase");
+ if (GregTech_API.METATILEENTITIES[aID] == null) {
+ GregTech_API.METATILEENTITIES[aID] = this;
+ } else {
+ throw new IllegalArgumentException("MetaMachine-Slot Nr. " + aID + " is already occupied!");
+ }
+ mName = aBasicName.replaceAll(" ", "_").toLowerCase();
+ setBaseMetaTileEntity(new BaseMetaPipeEntity());
+ getBaseMetaTileEntity().setMetaTileID((short)aID);
+ GT_LanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName);
+ mInventory = new ItemStack[aInvSlotCount];
+
+ if (GT.isClientSide()) {
+ ItemStack tStack = new ItemStack(GregTech_API.sBlockMachines, 1, aID);
+ tStack.getItem().addInformation(tStack, null, new ArrayList<String>(), true);
+ }
+ }
+
+ @Override
+ public void setBaseMetaTileEntity(IGregTechTileEntity aBaseMetaTileEntity) {
+ if (mBaseMetaTileEntity != null && aBaseMetaTileEntity == null) {
+ mBaseMetaTileEntity.getMetaTileEntity().inValidate();
+ mBaseMetaTileEntity.setMetaTileEntity(null);
+ }
+ mBaseMetaTileEntity = aBaseMetaTileEntity;
+ if (mBaseMetaTileEntity != null) {
+ mBaseMetaTileEntity.setMetaTileEntity(this);
+ }
+ }
+
+ /**
+ * This is the normal Constructor.
+ */
+ public MetaPipeEntity(String aName, int aInvSlotCount) {
+ mInventory = new ItemStack[aInvSlotCount];
+ mName = aName;
+ }
+
+ @Override
+ public void onServerStart() {/*Do nothing*/}
+ @Override
+ public void onWorldSave(File aSaveDirectory) {/*Do nothing*/}
+ @Override
+ public void onWorldLoad(File aSaveDirectory) {/*Do nothing*/}
+ @Override
+ public void onConfigLoad(GT_Config aConfig) {/*Do nothing*/}
+ @Override
+ public void setItemNBT(NBTTagCompound aNBT) {/*Do nothing*/}
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aBlockIconRegister) {/*Do nothing*/}
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID) {return true;}
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {/*Do nothing*/}
+ @Override
+ public boolean onWrenchRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {return false;}
+ @Override
+ public void onExplosion() {/*Do nothing*/}
+ @Override
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {/*Do nothing*/}
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {/*Do nothing*/}
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {/*Do nothing*/}
+ @Override
+ public void inValidate() {/*Do nothing*/}
+ @Override
+ public void onRemoval() {/*Do nothing*/}
+ @Override
+ public void initDefaultModes(NBTTagCompound aNBT) {/*Do nothing*/}
+
+ /**
+ * When a GUI is opened
+ */
+ public void onOpenGUI() {/*Do nothing*/}
+
+ /**
+ * When a GUI is closed
+ */
+ public void onCloseGUI() {/*Do nothing*/}
+
+ /**
+ * a Player rightclicks the Machine
+ * Sneaky rightclicks are not getting passed to this!
+ */
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) {return false;}
+ @Override
+ public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {/*Do nothing*/}
+ @Override
+ public void onValueUpdate(byte aValue) {/*Do nothing*/}
+ @Override
+ public byte getUpdateData() {return 0;}
+
+ @Override
+ public void doSound(byte aIndex, double aX, double aY, double aZ) {/*Do nothing*/}
+ @Override
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) {/*Do nothing*/}
+ @Override
+ public void stopSoundLoop(byte aValue, double aX, double aY, double aZ) {/*Do nothing*/}
+
+ @Override
+ public final void sendSound(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)4, aIndex);}
+ @Override
+ public final void sendLoopStart(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)5, aIndex);}
+ @Override
+ public final void sendLoopEnd(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)6, aIndex);}
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {return false;}
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override
+ public boolean isValidSlot(int aIndex) {return true;}
+ @Override
+ public boolean setStackToZeroInsteadOfNull(int aIndex) {return false;}
+
+ @Override
+ public ArrayList<String> getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, int aLogLevel, ArrayList<String> aList) {
+ return aList;
+ }
+
+ @Override
+ public boolean isLiquidInput(byte aSide) {
+ return true;
+ }
+
+ @Override
+ public boolean isLiquidOutput(byte aSide) {
+ return true;
+ }
+
+ /**
+ * gets the contained Liquid
+ */
+ @Override
+ public FluidStack getFluid() {return null;}
+
+ /**
+ * tries to fill this Tank
+ */
+ @Override
+ public int fill(FluidStack resource, boolean doFill) {return 0;}
+
+ /**
+ * tries to empty this Tank
+ */
+ @Override
+ public FluidStack drain(int maxDrain, boolean doDrain) {return null;}
+
+ /**
+ * Tank pressure
+ */
+ public int getTankPressure() {return 0;}
+
+ /**
+ * Liquid Capacity
+ */
+ @Override
+ public int getCapacity() {return 0;}
+
+ /**
+ * Progress this machine has already made
+ */
+ public int getProgresstime() {return 0;}
+
+ /**
+ * Progress this Machine has to do to produce something
+ */
+ public int maxProgresstime() {return 0;}
+
+ /**
+ * Increases the Progress, returns the overflown Progress.
+ */
+ public int increaseProgress(int aProgress) {return 0;}
+
+ @Override
+ public void onMachineBlockUpdate() {/*Do nothing*/}
+ @Override
+ public void receiveClientEvent(byte aEventID, byte aValue) {/*Do nothing*/}
+ @Override
+ public boolean isSimpleMachine() {return false;}
+
+ @Override
+ public byte getComparatorValue(byte aSide) {
+ return 0;
+ }
+
+ @Override
+ public boolean acceptsRotationalEnergy(byte aSide) {
+ return false;
+ }
+
+ @Override
+ public boolean injectRotationalEnergy(byte aSide, long aSpeed, long aEnergy) {
+ return false;
+ }
+
+ @Override
+ public String getSpecialVoltageToolTip() {return null;}
+
+ @Override
+ public boolean isGivingInformation() {return false;}
+ @Override
+ public String[] getInfoData() {return new String[]{};}
+
+ public boolean isDigitalChest() {return false;}
+ public ItemStack[] getStoredItemData() {return null;}
+ public void setItemCount(int aCount) {/*Do nothing*/}
+ public int getMaxItemCount() {return 0;}
+
+ @Override
+ public int getSizeInventory() {return mInventory.length;}
+ @Override
+ public ItemStack getStackInSlot(int aIndex) {if (aIndex >= 0 && aIndex < mInventory.length) return mInventory[aIndex]; return null;}
+ @Override
+ public void setInventorySlotContents(int aIndex, ItemStack aStack) {if (aIndex >= 0 && aIndex < mInventory.length) mInventory[aIndex] = aStack;}
+ @Override
+ public String getInventoryName() {if (GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) return GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); return "";}
+ @Override
+ public int getInventoryStackLimit() {return 64;}
+ @Override
+ public boolean isItemValidForSlot(int aIndex, ItemStack aStack) {return getBaseMetaTileEntity().isValidSlot(aIndex);}
+
+ @Override
+ public ItemStack decrStackSize(int aIndex, int aAmount) {
+ ItemStack tStack = getStackInSlot(aIndex), rStack = GT_Utility.copy(tStack);
+ if (tStack != null) {
+ if (tStack.stackSize <= aAmount) {
+ if (setStackToZeroInsteadOfNull(aIndex)) tStack.stackSize = 0; else setInventorySlotContents(aIndex, null);
+ } else {
+ rStack = tStack.splitStack(aAmount);
+ if (tStack.stackSize == 0 && !setStackToZeroInsteadOfNull(aIndex)) setInventorySlotContents(aIndex, null);
+ }
+ }
+ return rStack;
+ }
+
+ @Override
+ public int[] getAccessibleSlotsFromSide(int aSide) {
+ ArrayList<Integer> tList = new ArrayList<Integer>();
+ IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
+ boolean tSkip = tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), -2, tTileEntity) || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), -2, tTileEntity);
+ for (int i = 0; i < getSizeInventory(); i++) if (isValidSlot(i) && (tSkip || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), i, tTileEntity) || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), i, tTileEntity))) tList.add(i);
+ int[] rArray = new int[tList.size()];
+ for (int i = 0; i < rArray.length; i++) rArray[i] = tList.get(i);
+ return rArray;
+ }
+
+ @Override
+ public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
+ return isValidSlot(aIndex) && aStack != null && aIndex < mInventory.length && (mInventory[aIndex] == null || GT_Utility.areStacksEqual(aStack, mInventory[aIndex])) && allowPutStack(getBaseMetaTileEntity(), aIndex, (byte)aSide, aStack);
+ }
+
+ @Override
+ public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) {
+ return isValidSlot(aIndex) && aStack != null && aIndex < mInventory.length && allowPullStack(getBaseMetaTileEntity(), aIndex, (byte)aSide, aStack);
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
+ return fill(aSide, new FluidStack(aFluid, 1), false) == 1;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection aSide, Fluid aFluid) {
+ return drain(aSide, new FluidStack(aFluid, 1), false) != null;
+ }
+
+ @Override
+ public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
+ if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {};
+ return new FluidTankInfo[] {getInfo()};
+ }
+
+ public int fill_default(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ return fill(aFluid, doFill);
+ }
+
+ @Override
+ public int fill(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ return fill_default(aSide, aFluid, doFill);
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) {
+ if (getFluid() != null && aFluid != null && getFluid().isFluidEqual(aFluid)) return drain(aFluid.amount, doDrain);
+ return null;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) {
+ return drain(maxDrain, doDrain);
+ }
+
+ @Override
+ public int getFluidAmount() {
+ return 0;
+ }
+
+ @Override
+ public FluidTankInfo getInfo() {
+ return new FluidTankInfo(this);
+ }
+
+ @Override
+ public String getMetaName() {
+ return mName;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int i) {
+ return null;
+ }
+
+ @Override
+ public boolean doTickProfilingMessageDuringThisTick() {
+ return doTickProfilingInThisTick;
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer entityplayer) {
+ return false;
+ }
+
+ @Override
+ public boolean connectsToItemPipe(byte aSide) {
+ return false;
+ }
+
+ @Override
+ public void openInventory() {
+ //
+ }
+
+ @Override
+ public void closeInventory() {
+ //
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return null;
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return null;
+ }
+
+ @Override
+ public float getExplosionResistance(byte aSide) {
+ return 10.0F;
+ }
+
+ @Override
+ public ItemStack[] getRealInventory() {
+ return mInventory;
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public void markDirty() {
+ //
+ }
+
+ @Override
+ public void onColorChangeServer(byte aColor) {
+ //
+ }
+
+ @Override
+ public void onColorChangeClient(byte aColor) {
+ //
+ }
+
+ public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ return 0;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean renderInInventory(Block aBlock, int aMeta, RenderBlocks aRenderer) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer) {
+ return false;
+ }
+
+ @Override
+ public void doExplosion(long aExplosionPower) {
+ float tStrength = aExplosionPower<V[0]?1.0F:aExplosionPower<V[1]?2.0F:aExplosionPower<V[2]?3.0F:aExplosionPower<V[3]?4.0F:aExplosionPower<V[4]?5.0F:aExplosionPower<V[4]*2?6.0F:aExplosionPower<V[5]?7.0F:aExplosionPower<V[6]?8.0F:aExplosionPower<V[7]?9.0F:10.0F;
+ int tX=getBaseMetaTileEntity().getXCoord(), tY=getBaseMetaTileEntity().getYCoord(), tZ=getBaseMetaTileEntity().getZCoord();
+ World tWorld = getBaseMetaTileEntity().getWorld();
+ tWorld.setBlock(tX, tY, tZ, Blocks.air);
+ if (GregTech_API.sMachineExplosions) tWorld.createExplosion(null, tX+0.5, tY+0.5, tZ+0.5, tStrength, true);
+ }
+
+ @Override
+ public int getLightOpacity() {
+ return 0;
+ }
+
+ @Override
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider) {
+ AxisAlignedBB axisalignedbb1 = getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ if (axisalignedbb1 != null && inputAABB.intersectsWith(axisalignedbb1)) outputAABB.add(axisalignedbb1);
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX+1, aY+1, aZ+1);
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
+ //
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ //
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
new file mode 100644
index 0000000000..ab2c3930f5
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
@@ -0,0 +1,721 @@
+package gregtech.api.metatileentity;
+
+import static gregtech.api.enums.GT_Values.GT;
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Extend this Class to add a new MetaMachine
+ * Call the Constructor with the desired ID at the load-phase (not preload and also not postload!)
+ * Implement the newMetaEntity-Method to return a new ready instance of your MetaTileEntity
+ *
+ * Call the Constructor like the following example inside the Load Phase, to register it.
+ * "new GT_MetaTileEntity_E_Furnace(54, "GT_E_Furnace", "Automatic E-Furnace");"
+ */
+public abstract class MetaTileEntity implements IMetaTileEntity {
+ /**
+ * Only assigned for the MetaTileEntity in the List! Also only used to get the localized Name for the ItemStack and for getInvName.
+ */
+ public final String mName;
+
+ public boolean doTickProfilingInThisTick = true;
+
+ /**
+ * accessibility to this Field is no longer given, see below
+ */
+ private IGregTechTileEntity mBaseMetaTileEntity;
+
+ @Override
+ public IGregTechTileEntity getBaseMetaTileEntity() {
+ return mBaseMetaTileEntity;
+ }
+
+ @Override
+ public ItemStack getStackForm(long aAmount) {
+ return new ItemStack(GregTech_API.sBlockMachines, (int)aAmount, getBaseMetaTileEntity().getMetaTileID());
+ }
+
+ public String getLocalName() {
+ return GT_LanguageManager.getTranslation("gt.blockmachines." + mName + ".name");
+ }
+
+ /**
+ * The Inventory of the MetaTileEntity. Amount of Slots can be larger than 256. HAYO!
+ */
+ public final ItemStack[] mInventory;
+
+ /**
+ * This registers your Machine at the List.
+ * Use only ID's larger than 2048, because i reserved these ones.
+ * See also the List in the API, as it has a Description containing all the reservations.
+ * @param aID the ID
+ * @example for Constructor overload.
+ *
+ * public GT_MetaTileEntity_EBench(int aID, String mName, String mNameRegional) {
+ * super(aID, mName, mNameRegional);
+ * }
+ */
+ public MetaTileEntity(int aID, String aBasicName, String aRegionalName, int aInvSlotCount) {
+ if (GregTech_API.sPostloadStarted || !GregTech_API.sPreloadStarted) throw new IllegalAccessError("This Constructor has to be called in the load Phase");
+ if (GregTech_API.METATILEENTITIES[aID] == null) {
+ GregTech_API.METATILEENTITIES[aID] = this;
+ } else {
+ throw new IllegalArgumentException("MetaMachine-Slot Nr. " + aID + " is already occupied!");
+ }
+ mName = aBasicName.replaceAll(" ", "_").toLowerCase();
+ setBaseMetaTileEntity(GregTech_API.constructBaseMetaTileEntity());
+ getBaseMetaTileEntity().setMetaTileID((short)aID);
+ GT_LanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName);
+ mInventory = new ItemStack[aInvSlotCount];
+
+ if (GT.isClientSide()) {
+ ItemStack tStack = new ItemStack(GregTech_API.sBlockMachines, 1, aID);
+ tStack.getItem().addInformation(tStack, null, new ArrayList<String>(), true);
+ }
+ }
+
+ @Override
+ public void setBaseMetaTileEntity(IGregTechTileEntity aBaseMetaTileEntity) {
+ if (mBaseMetaTileEntity != null && aBaseMetaTileEntity == null) {
+ mBaseMetaTileEntity.getMetaTileEntity().inValidate();
+ mBaseMetaTileEntity.setMetaTileEntity(null);
+ }
+ mBaseMetaTileEntity = aBaseMetaTileEntity;
+ if (mBaseMetaTileEntity != null) {
+ mBaseMetaTileEntity.setMetaTileEntity(this);
+ }
+ }
+
+ /**
+ * This is the normal Constructor.
+ */
+ public MetaTileEntity(String aName, int aInvSlotCount) {
+ mInventory = new ItemStack[aInvSlotCount];
+ mName = aName;
+ }
+
+ @Override
+ public void onServerStart() {/*Do nothing*/}
+ @Override
+ public void onWorldSave(File aSaveDirectory) {/*Do nothing*/}
+ @Override
+ public void onWorldLoad(File aSaveDirectory) {/*Do nothing*/}
+ @Override
+ public void onConfigLoad(GT_Config aConfig) {/*Do nothing*/}
+ @Override
+ public void setItemNBT(NBTTagCompound aNBT) {/*Do nothing*/}
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aBlockIconRegister) {/*Do nothing*/}
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aStack) {return true;}
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {/*Do nothing*/}
+ @Override
+ public boolean onWrenchRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {if (getBaseMetaTileEntity().isValidFacing(aWrenchingSide)) {getBaseMetaTileEntity().setFrontFacing(aWrenchingSide); return true;} return false;}
+ @Override
+ public void onExplosion() {/*Do nothing*/}
+ @Override
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {/*Do nothing*/}
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {/*Do nothing*/}
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {/*Do nothing*/}
+ @Override
+ public void inValidate() {/*Do nothing*/}
+ @Override
+ public void onRemoval() {/*Do nothing*/}
+ @Override
+ public void initDefaultModes(NBTTagCompound aNBT) {/*Do nothing*/}
+
+ /**
+ * When a GUI is opened
+ */
+ public void onOpenGUI() {/*Do nothing*/}
+
+ /**
+ * When a GUI is closed
+ */
+ public void onCloseGUI() {/*Do nothing*/}
+
+ /**
+ * a Player rightclicks the Machine
+ * Sneaky rightclicks are not getting passed to this!
+ */
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {return false;}
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) {return onRightclick(aBaseMetaTileEntity, aPlayer);}
+ @Override
+ public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {/*Do nothing*/}
+ @Override
+ public void onValueUpdate(byte aValue) {/*Do nothing*/}
+ @Override
+ public byte getUpdateData() {return 0;}
+
+ @Override
+ public void doSound(byte aIndex, double aX, double aY, double aZ) {/*Do nothing*/}
+ @Override
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) {/*Do nothing*/}
+ @Override
+ public void stopSoundLoop(byte aValue, double aX, double aY, double aZ) {/*Do nothing*/}
+
+ @Override
+ public final void sendSound(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)4, aIndex);}
+ @Override
+ public final void sendLoopStart(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)5, aIndex);}
+ @Override
+ public final void sendLoopEnd(byte aIndex) {if (!getBaseMetaTileEntity().hasMufflerUpgrade()) getBaseMetaTileEntity().sendBlockEvent((byte)6, aIndex);}
+
+ /**
+ * @return true if this Device emits Energy at all
+ */
+ public boolean isElectric() {return true;}
+
+ /**
+ * @return true if this Device emits Energy at all
+ */
+ public boolean isPneumatic() {return false;}
+
+ /**
+ * @return true if this Device emits Energy at all
+ */
+ public boolean isSteampowered() {return false;}
+
+ /**
+ * @return true if this Device emits Energy at all
+ */
+ public boolean isEnetOutput() {return false;}
+
+ /**
+ * @return true if this Device consumes Energy at all
+ */
+ public boolean isEnetInput() {return false;}
+
+ /**
+ * @return the amount of EU, which can be stored in this Device. Default is 0 EU.
+ */
+ public long maxEUStore() {return 0;}
+
+ /**
+ * @return the amount of EU/t, which can be accepted by this Device before it explodes.
+ */
+ public long maxEUInput() {return 0;}
+
+ /**
+ * @return the amount of EU/t, which can be outputted by this Device.
+ */
+ public long maxEUOutput() {return 0;}
+
+ /**
+ * @return the amount of E-net Impulses of the maxEUOutput size, which can be outputted by this Device.
+ * Default is 1 Pulse, this shouldn't be set to smaller Values than 1, as it won't output anything in that Case!
+ */
+ public long maxAmperesOut() {return 1;}
+
+ /**
+ * How many Amperes this Block can suck at max. Surpassing this value won't blow it up.
+ */
+ public long maxAmperesIn() {return 1;}
+
+ /**
+ * @return true if that Side is an Output.
+ */
+ public boolean isOutputFacing(byte aSide) {return false;}
+
+ /**
+ * @return true if that Side is an Input.
+ */
+ public boolean isInputFacing(byte aSide) {return false;}
+
+ /**
+ * @return true if Transformer Upgrades increase Packet Amount.
+ */
+ public boolean isTransformingLowEnergy() {return true;}
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {return false;}
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {return false;}
+ @Override
+ public boolean isValidSlot(int aIndex) {return true;}
+ @Override
+ public boolean setStackToZeroInsteadOfNull(int aIndex) {return false;}
+
+ /**
+ * This is used to set the internal Energy to the given Parameter. I use this for the IDSU.
+ */
+ public void setEUVar(long aEnergy) {
+ ((BaseMetaTileEntity)mBaseMetaTileEntity).mStoredEnergy = aEnergy;
+ }
+
+ /**
+ * This is used to get the internal Energy. I use this for the IDSU.
+ */
+ public long getEUVar() {
+ return ((BaseMetaTileEntity)mBaseMetaTileEntity).mStoredEnergy;
+ }
+
+ /**
+ * This is used to set the internal Steam Energy to the given Parameter.
+ */
+ public void setSteamVar(long aSteam) {
+ ((BaseMetaTileEntity)mBaseMetaTileEntity).mStoredSteam = aSteam;
+ }
+
+ /**
+ * This is used to get the internal Steam Energy.
+ */
+ public long getSteamVar() {
+ return ((BaseMetaTileEntity)mBaseMetaTileEntity).mStoredSteam;
+ }
+
+ /**
+ * @return the amount of Steam, which can be stored in this Device. Default is 0 EU.
+ */
+ public long maxSteamStore() {return 0;}
+
+ /**
+ * @return the amount of EU, which this Device stores before starting to emit Energy.
+ * useful if you don't want to emit stored Energy until a certain Level is reached.
+ */
+ public long getMinimumStoredEU() {
+ return 512;
+ }
+
+ /**
+ * Determines the Tier of the Machine, used for de-charging Tools.
+ */
+ public long getInputTier() {
+ return GT_Utility.getTier(getBaseMetaTileEntity().getInputVoltage());
+ }
+
+ /**
+ * Determines the Tier of the Machine, used for charging Tools.
+ */
+ public long getOutputTier() {
+ return GT_Utility.getTier(getBaseMetaTileEntity().getOutputVoltage());
+ }
+
+ /**
+ * gets the first RechargerSlot
+ */
+ public int rechargerSlotStartIndex() {
+ return 0;
+ }
+
+ /**
+ * gets the amount of RechargerSlots
+ */
+ public int rechargerSlotCount() {
+ return 0;
+ }
+
+ /**
+ * gets the first DechargerSlot
+ */
+ public int dechargerSlotStartIndex() {
+ return 0;
+ }
+
+ /**
+ * gets the amount of DechargerSlots
+ */
+ public int dechargerSlotCount() {
+ return 0;
+ }
+
+ /**
+ * gets if this is protected from other Players per default or not
+ */
+ public boolean ownerControl() {
+ return false;
+ }
+
+ @Override
+ public ArrayList<String> getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, int aLogLevel, ArrayList<String> aList) {
+ return aList;
+ }
+
+ @Override
+ public boolean isLiquidInput(byte aSide) {
+ return true;
+ }
+
+ @Override
+ public boolean isLiquidOutput(byte aSide) {
+ return true;
+ }
+
+ /**
+ * gets the contained Liquid
+ */
+ @Override
+ public FluidStack getFluid() {return null;}
+
+ /**
+ * tries to fill this Tank
+ */
+ @Override
+ public int fill(FluidStack resource, boolean doFill) {return 0;}
+
+ /**
+ * tries to empty this Tank
+ */
+ @Override
+ public FluidStack drain(int maxDrain, boolean doDrain) {return null;}
+
+ /**
+ * Tank pressure
+ */
+ public int getTankPressure() {return 0;}
+
+ /**
+ * Liquid Capacity
+ */
+ @Override
+ public int getCapacity() {return 0;}
+
+ @Override
+ public void onMachineBlockUpdate() {/*Do nothing*/}
+ @Override
+ public void receiveClientEvent(byte aEventID, byte aValue) {/*Do nothing*/}
+ @Override
+ public boolean isSimpleMachine() {return false;}
+
+ /**
+ * If this accepts up to 4 Overclockers
+ */
+ public boolean isOverclockerUpgradable() {return false;}
+
+ /**
+ * If this accepts Transformer Upgrades
+ */
+ public boolean isTransformerUpgradable() {return false;}
+
+ /**
+ * Progress this machine has already made
+ */
+ public int getProgresstime() {return 0;}
+
+ /**
+ * Progress this Machine has to do to produce something
+ */
+ public int maxProgresstime() {return 0;}
+
+ /**
+ * Increases the Progress, returns the overflown Progress.
+ */
+ public int increaseProgress(int aProgress) {return 0;}
+
+ /**
+ * If this TileEntity makes use of Sided Redstone behaviors.
+ * Determines only, if the Output Redstone Array is getting filled with 0 for true, or 15 for false.
+ */
+ public boolean hasSidedRedstoneOutputBehavior() {
+ return false;
+ }
+
+ /**
+ * When the Facing gets changed.
+ */
+ public void onFacingChange() {/*Do nothing*/}
+
+ /**
+ * if the IC2 Teleporter can drain from this.
+ */
+ public boolean isTeleporterCompatible() {
+ return isEnetOutput() && getBaseMetaTileEntity().getOutputVoltage() >= 128 && getBaseMetaTileEntity().getUniversalEnergyCapacity() >= 500000;
+ }
+
+ /**
+ * Gets the Output for the comparator on the given Side
+ */
+ @Override
+ public byte getComparatorValue(byte aSide) {
+ return 0;
+ }
+
+ @Override
+ public boolean acceptsRotationalEnergy(byte aSide) {
+ return false;
+ }
+
+ @Override
+ public boolean injectRotationalEnergy(byte aSide, long aSpeed, long aEnergy) {
+ return false;
+ }
+
+ @Override
+ public String getSpecialVoltageToolTip() {return null;}
+
+ @Override
+ public boolean isGivingInformation() {return false;}
+ @Override
+ public String[] getInfoData() {return new String[]{};}
+
+ public boolean isDigitalChest() {return false;}
+ public ItemStack[] getStoredItemData() {return null;}
+ public void setItemCount(int aCount) {/*Do nothing*/}
+ public int getMaxItemCount() {return 0;}
+
+ @Override
+ public int getSizeInventory() {return mInventory.length;}
+ @Override
+ public ItemStack getStackInSlot(int aIndex) {if (aIndex >= 0 && aIndex < mInventory.length) return mInventory[aIndex]; return null;}
+ @Override
+ public void setInventorySlotContents(int aIndex, ItemStack aStack) {if (aIndex >= 0 && aIndex < mInventory.length) mInventory[aIndex] = aStack;}
+ @Override
+ public String getInventoryName() {if (GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) return GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); return "";}
+ @Override
+ public int getInventoryStackLimit() {return 64;}
+ @Override
+ public boolean isItemValidForSlot(int aIndex, ItemStack aStack) {return getBaseMetaTileEntity().isValidSlot(aIndex);}
+
+ @Override
+ public ItemStack decrStackSize(int aIndex, int aAmount) {
+ ItemStack tStack = getStackInSlot(aIndex), rStack = GT_Utility.copy(tStack);
+ if (tStack != null) {
+ if (tStack.stackSize <= aAmount) {
+ if (setStackToZeroInsteadOfNull(aIndex)) tStack.stackSize = 0; else setInventorySlotContents(aIndex, null);
+ } else {
+ rStack = tStack.splitStack(aAmount);
+ if (tStack.stackSize == 0 && !setStackToZeroInsteadOfNull(aIndex)) setInventorySlotContents(aIndex, null);
+ }
+ }
+ return rStack;
+ }
+
+ @Override
+ public int[] getAccessibleSlotsFromSide(int aSide) {
+ ArrayList<Integer> tList = new ArrayList<Integer>();
+ IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
+ boolean tSkip = tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), -2, tTileEntity) || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), -2, tTileEntity);
+ for (int i = 0; i < getSizeInventory(); i++) if (isValidSlot(i) && (tSkip || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsOut((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), i, tTileEntity) || tTileEntity.getCoverBehaviorAtSide((byte)aSide).letsItemsIn((byte)aSide, tTileEntity.getCoverIDAtSide((byte)aSide), tTileEntity.getCoverDataAtSide((byte)aSide), i, tTileEntity))) tList.add(i);
+ int[] rArray = new int[tList.size()];
+ for (int i = 0; i < rArray.length; i++) rArray[i] = tList.get(i);
+ return rArray;
+ }
+
+ @Override
+ public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
+ return isValidSlot(aIndex) && aStack != null && aIndex < mInventory.length && (mInventory[aIndex] == null || GT_Utility.areStacksEqual(aStack, mInventory[aIndex])) && allowPutStack(getBaseMetaTileEntity(), aIndex, (byte)aSide, aStack);
+ }
+
+ @Override
+ public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) {
+ return isValidSlot(aIndex) && aStack != null && aIndex < mInventory.length && allowPullStack(getBaseMetaTileEntity(), aIndex, (byte)aSide, aStack);
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
+ return fill(aSide, new FluidStack(aFluid, 1), false) == 1;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection aSide, Fluid aFluid) {
+ return drain(aSide, new FluidStack(aFluid, 1), false) != null;
+ }
+
+ @Override
+ public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
+ if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {};
+ return new FluidTankInfo[] {getInfo()};
+ }
+
+ public int fill_default(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ return fill(aFluid, doFill);
+ }
+
+ @Override
+ public int fill(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ if (getBaseMetaTileEntity().hasSteamEngineUpgrade() && GT_ModHandler.isSteam(aFluid) && aFluid.amount > 1) {
+ int tSteam = (int)Math.min(Integer.MAX_VALUE, Math.min(aFluid.amount/2, getBaseMetaTileEntity().getSteamCapacity() - getBaseMetaTileEntity().getStoredSteam()));
+ if (tSteam > 0) {
+ if (doFill) getBaseMetaTileEntity().increaseStoredSteam(tSteam, true);
+ return tSteam*2;
+ }
+ } else {
+ return fill_default(aSide, aFluid, doFill);
+ }
+ return 0;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) {
+ if (getFluid() != null && aFluid != null && getFluid().isFluidEqual(aFluid)) return drain(aFluid.amount, doDrain);
+ return null;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) {
+ return drain(maxDrain, doDrain);
+ }
+
+ @Override
+ public int getFluidAmount() {
+ return 0;
+ }
+
+ @Override
+ public FluidTankInfo getInfo() {
+ return new FluidTankInfo(this);
+ }
+
+ @Override
+ public String getMetaName() {
+ return mName;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int i) {
+ return null;
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public boolean doTickProfilingMessageDuringThisTick() {
+ return doTickProfilingInThisTick;
+ }
+
+ @Override
+ public void markDirty() {
+ //
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer entityplayer) {
+ return false;
+ }
+
+ @Override
+ public void openInventory() {
+ //
+ }
+
+ @Override
+ public void closeInventory() {
+ //
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return null;
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return null;
+ }
+
+ @Override
+ public boolean connectsToItemPipe(byte aSide) {
+ return false;
+ }
+
+ @Override
+ public float getExplosionResistance(byte aSide) {
+ return 10.0F;
+ }
+
+ @Override
+ public ItemStack[] getRealInventory() {
+ return mInventory;
+ }
+
+ @Override
+ public void onColorChangeServer(byte aColor) {
+ //
+ }
+
+ @Override
+ public void onColorChangeClient(byte aColor) {
+ //
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean renderInInventory(Block aBlock, int aMeta, RenderBlocks aRenderer) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer) {
+ return false;
+ }
+
+ @Override
+ public void doExplosion(long aExplosionPower) {
+ float tStrength = aExplosionPower<V[0]?1.0F:aExplosionPower<V[1]?2.0F:aExplosionPower<V[2]?3.0F:aExplosionPower<V[3]?4.0F:aExplosionPower<V[4]?5.0F:aExplosionPower<V[4]*2?6.0F:aExplosionPower<V[5]?7.0F:aExplosionPower<V[6]?8.0F:aExplosionPower<V[7]?9.0F:10.0F;
+ int tX=getBaseMetaTileEntity().getXCoord(), tY=getBaseMetaTileEntity().getYCoord(), tZ=getBaseMetaTileEntity().getZCoord();
+ World tWorld = getBaseMetaTileEntity().getWorld();
+ GT_Utility.sendSoundToPlayers(tWorld, GregTech_API.sSoundList.get(209), 1.0F, -1, tX, tY, tZ);
+ tWorld.setBlock(tX, tY, tZ, Blocks.air);
+ if (GregTech_API.sMachineExplosions) tWorld.createExplosion(null, tX+0.5, tY+0.5, tZ+0.5, tStrength, true);
+ }
+
+ @Override
+ public int getLightOpacity() {
+ return ((BaseMetaTileEntity)getBaseMetaTileEntity()).getLightValue() > 0 ? 0 : 255;
+ }
+
+ @Override
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List<AxisAlignedBB> outputAABB, Entity collider) {
+ AxisAlignedBB axisalignedbb1 = getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ if (axisalignedbb1 != null && inputAABB.intersectsWith(axisalignedbb1)) outputAABB.add(axisalignedbb1);
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX+1, aY+1, aZ+1);
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
+ //
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ //
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/examples/GT_MetaTileEntity_E_Furnace.java b/src/main/java/gregtech/api/metatileentity/examples/GT_MetaTileEntity_E_Furnace.java
new file mode 100644
index 0000000000..a393ae5d20
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/examples/GT_MetaTileEntity_E_Furnace.java
@@ -0,0 +1,56 @@
+package gregtech.api.metatileentity.examples;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+/**
+ * This Example Implementation still works, however I use something completely different in my own Code.
+ */
+public class GT_MetaTileEntity_E_Furnace extends GT_MetaTileEntity_BasicMachine {
+ public GT_MetaTileEntity_E_Furnace(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 1, "Not like using a Commodore 64", 1, 1, "E_Furnace.png", "smelting", new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE));
+ }
+
+ public GT_MetaTileEntity_E_Furnace(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName) {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_E_Furnace(mName, mTier, mDescription, mTextures, mGUIName, mNEIName);
+ }
+
+ @Override
+ public int checkRecipe() {
+ if (null != (mOutputItems[0] = GT_ModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0)))) {
+ mEUt = 4 * (1 << (mTier-1)) * (1 << (mTier-1));
+ mMaxProgresstime = 128 / (1 << (mTier-1));
+ return 2;
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack) && GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(64, aStack), false, null) != null;
+ }
+
+ @Override
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(207), 10, 1.0F, aX, aY, aZ);
+ }
+
+ @Override
+ public void startProcess() {
+ sendLoopStart((byte)1);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
new file mode 100644
index 0000000000..85104f4584
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
@@ -0,0 +1,253 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.VN;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.TextureSet;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable;
+import gregtech.api.interfaces.tileentity.IColoredTileEntity;
+import gregtech.api.interfaces.tileentity.IEnergyConnected;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import ic2.api.energy.tile.IEnergySink;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import cofh.api.energy.IEnergyReceiver;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTileEntityCable {
+ public long mTransferredAmperage = 0, mTransferredAmperageLast20 = 0, mTransferredVoltageLast20 = 0;
+
+ public final float mThickNess;
+ public final Materials mMaterial;
+ public final long mCableLossPerMeter, mAmperage, mVoltage;
+ public final boolean mInsulated, mCanShock;
+ public long mRestRF;
+
+ public GT_MetaPipeEntity_Cable(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) {
+ super(aID, aName, aNameRegional, 0);
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mAmperage = aAmperage;
+ mVoltage = aVoltage;
+ mInsulated = aInsulated;
+ mCanShock = aCanShock;
+ mCableLossPerMeter = aCableLossPerMeter;
+ }
+
+ public GT_MetaPipeEntity_Cable(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) {
+ super(aName, 0);
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mAmperage = aAmperage;
+ mVoltage = aVoltage;
+ mInsulated = aInsulated;
+ mCanShock = aCanShock;
+ mCableLossPerMeter = aCableLossPerMeter;
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return (byte)(mInsulated?9:8);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaPipeEntity_Cable(mName, mThickNess, mMaterial, mCableLossPerMeter, mAmperage, mVoltage, mInsulated, mCanShock);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aConnections, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ if (!mInsulated) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa)};
+ if (aConnected) {
+ float tThickNess = getThickNess();
+ if (tThickNess < 0.37F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), new GT_RenderedTexture(Textures.BlockIcons.INSULATION_TINY , Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ if (tThickNess < 0.49F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), new GT_RenderedTexture(Textures.BlockIcons.INSULATION_SMALL , Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ if (tThickNess < 0.74F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), new GT_RenderedTexture(Textures.BlockIcons.INSULATION_MEDIUM , Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ if (tThickNess < 0.99F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), new GT_RenderedTexture(Textures.BlockIcons.INSULATION_LARGE , Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), new GT_RenderedTexture(Textures.BlockIcons.INSULATION_HUGE , Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ }
+ return new ITexture[] {new GT_RenderedTexture(Textures.BlockIcons.INSULATION_FULL, Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa))};
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) {
+ if (mCanShock && (((BaseMetaPipeEntity)getBaseMetaTileEntity()).mConnections & -128) == 0 && aEntity instanceof EntityLivingBase) GT_Utility.applyElectricityDamage((EntityLivingBase)aEntity, mTransferredVoltageLast20, mTransferredAmperageLast20);
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ if (!mCanShock) return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ return AxisAlignedBB.getBoundingBox(aX+0.125D, aY+0.125D, aZ+0.125D, aX+0.875D, aY+0.875D, aZ+0.875D);
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+ @Override public final boolean renderInside(byte aSide) {return false;}
+ @Override public int getProgresstime() {return (int)mTransferredAmperage*64;}
+ @Override public int maxProgresstime() {return (int)mAmperage*64;}
+
+ @Override
+ public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
+ if (!getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsEnergyIn(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), getBaseMetaTileEntity())) return 0;
+ return transferElectricity(aSide, aVoltage, aAmperage, new ArrayList<TileEntity>(Arrays.asList((TileEntity)getBaseMetaTileEntity())));
+ }
+
+ @Override
+ public long transferElectricity(byte aSide, long aVoltage, long aAmperage, ArrayList<TileEntity> aAlreadyPassedTileEntityList) {
+ long rUsedAmperes = 0;
+ aVoltage -= mCableLossPerMeter;
+ if (aVoltage > 0) for (byte i = 0; i < 6 && aAmperage > rUsedAmperes; i++) if (i != aSide && (mConnections & (1<<i)) != 0 && getBaseMetaTileEntity().getCoverBehaviorAtSide(i).letsEnergyOut(i, getBaseMetaTileEntity().getCoverIDAtSide(i), getBaseMetaTileEntity().getCoverDataAtSide(i), getBaseMetaTileEntity())) {
+ TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(i);
+ if (!aAlreadyPassedTileEntityList.contains(tTileEntity)) {
+ aAlreadyPassedTileEntityList.add(tTileEntity);
+ if (tTileEntity instanceof IEnergyConnected) {
+ if (getBaseMetaTileEntity().getColorization() >= 0) {
+ byte tColor = ((IEnergyConnected)tTileEntity).getColorization();
+ if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) continue;
+ }
+ if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity)tTileEntity).getMetaTileEntity() instanceof IMetaTileEntityCable && ((IGregTechTileEntity)tTileEntity).getCoverBehaviorAtSide(GT_Utility.getOppositeSide(i)).letsEnergyIn(GT_Utility.getOppositeSide(i), ((IGregTechTileEntity)tTileEntity).getCoverIDAtSide(GT_Utility.getOppositeSide(i)), ((IGregTechTileEntity)tTileEntity).getCoverDataAtSide(GT_Utility.getOppositeSide(i)), ((IGregTechTileEntity)tTileEntity))) {
+ if (((IGregTechTileEntity)tTileEntity).getTimer() > 50) rUsedAmperes += ((IMetaTileEntityCable)((IGregTechTileEntity)tTileEntity).getMetaTileEntity()).transferElectricity(GT_Utility.getOppositeSide(i), aVoltage, aAmperage-rUsedAmperes, aAlreadyPassedTileEntityList);
+ } else {
+ rUsedAmperes += ((IEnergyConnected)tTileEntity).injectEnergyUnits(GT_Utility.getOppositeSide(i), aVoltage, aAmperage-rUsedAmperes);
+ }
+// } else if (tTileEntity instanceof IEnergySink) {
+// ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
+// if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)getBaseMetaTileEntity(), tDirection)) {
+// if (((IEnergySink)tTileEntity).demandedEnergyUnits() > 0 && ((IEnergySink)tTileEntity).injectEnergyUnits(tDirection, aVoltage) < aVoltage) rUsedAmperes++;
+// }
+ } else if (tTileEntity instanceof IEnergySink) {
+ ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
+ if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)getBaseMetaTileEntity(), tDirection)) {
+ if (((IEnergySink)tTileEntity).getDemandedEnergy() > 0 && ((IEnergySink)tTileEntity).injectEnergy(tDirection, aVoltage, aVoltage) < aVoltage) rUsedAmperes++;
+ }
+ } else if(GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver){
+ ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
+ int rfOut = (int) (aVoltage * GregTech_API.mEUtoRF / 100);
+ if(((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, rfOut, true)==rfOut){
+ ((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, rfOut, false); rUsedAmperes++;
+ }else if(((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, rfOut, true)>0){
+ if(mRestRF==0){
+ int RFtrans = ((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, (int) rfOut, false);rUsedAmperes++;
+ mRestRF = rfOut - RFtrans;
+ }else{
+ int RFtrans = ((IEnergyReceiver)tTileEntity).receiveEnergy(tDirection, (int) mRestRF, false);
+ mRestRF = mRestRF - RFtrans;
+ }
+ }
+ if(GregTech_API.mRFExplosions && ((IEnergyReceiver)tTileEntity).getMaxEnergyStored(tDirection) < rfOut * 600){
+ if(rfOut > 32 * GregTech_API.mEUtoRF / 100) this.doExplosion(rfOut);
+ }
+ }
+ }
+ }
+ mTransferredAmperage += rUsedAmperes;
+ mTransferredVoltageLast20 = Math.max(mTransferredVoltageLast20, aVoltage);
+ mTransferredAmperageLast20 = Math.max(mTransferredAmperageLast20, mTransferredAmperage);
+ if (aVoltage > mVoltage || mTransferredAmperage > mAmperage) {
+ getBaseMetaTileEntity().setToFire();
+ return aAmperage;
+ }
+ return rUsedAmperes;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ mTransferredAmperage = 0;
+
+ if (aTick % 20 == 0) {
+ mTransferredVoltageLast20 = 0;
+ mTransferredAmperageLast20 = 0;
+ mConnections = 0;
+ for (byte i = 0, j = 0; i < 6; i++) {
+ j = GT_Utility.getOppositeSide(i);
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).alwaysLookConnected(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), aBaseMetaTileEntity) || aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsEnergyIn(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), aBaseMetaTileEntity) || aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsEnergyOut(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), aBaseMetaTileEntity)) {
+ TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(i);
+ if (tTileEntity instanceof IColoredTileEntity) {
+ if (aBaseMetaTileEntity.getColorization() >= 0) {
+ byte tColor = ((IColoredTileEntity)tTileEntity).getColorization();
+ if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) continue;
+ }
+ }
+ if (tTileEntity instanceof IEnergyConnected && (((IEnergyConnected)tTileEntity).inputEnergyFrom(j) || ((IEnergyConnected)tTileEntity).outputsEnergyTo(j))) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity)tTileEntity).getMetaTileEntity() instanceof IMetaTileEntityCable) {
+ if (((IGregTechTileEntity)tTileEntity).getCoverBehaviorAtSide(j).alwaysLookConnected(j, ((IGregTechTileEntity)tTileEntity).getCoverIDAtSide(j), ((IGregTechTileEntity)tTileEntity).getCoverDataAtSide(j), ((IGregTechTileEntity)tTileEntity)) || ((IGregTechTileEntity)tTileEntity).getCoverBehaviorAtSide(j).letsEnergyIn(j, ((IGregTechTileEntity)tTileEntity).getCoverIDAtSide(j), ((IGregTechTileEntity)tTileEntity).getCoverDataAtSide(j), ((IGregTechTileEntity)tTileEntity)) || ((IGregTechTileEntity)tTileEntity).getCoverBehaviorAtSide(j).letsEnergyOut(j, ((IGregTechTileEntity)tTileEntity).getCoverIDAtSide(j), ((IGregTechTileEntity)tTileEntity).getCoverDataAtSide(j), ((IGregTechTileEntity)tTileEntity))) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ }
+ if (tTileEntity instanceof IEnergySink && ((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)aBaseMetaTileEntity, ForgeDirection.getOrientation(j))) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ if(GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver && ((IEnergyReceiver)tTileEntity).canConnectEnergy(ForgeDirection.getOrientation(j))){
+ mConnections |= (1<<i);
+ continue;
+ }
+ /*
+ if (tTileEntity instanceof IEnergyEmitter && ((IEnergyEmitter)tTileEntity).emitsEnergyTo((TileEntity)aBaseMetaTileEntity, ForgeDirection.getOrientation(j))) {
+ mConnections |= (1<<i);
+ continue;
+ }*/
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "Max Voltage: " + EnumChatFormatting.GREEN + mVoltage + " (" + VN[GT_Utility.getTier(mVoltage)] + ")" + EnumChatFormatting.GRAY,
+ "Max Amperage: " + EnumChatFormatting.YELLOW + mAmperage + EnumChatFormatting.GRAY,
+ "Loss/Meter/Ampere: " + EnumChatFormatting.RED + mCableLossPerMeter + EnumChatFormatting.GRAY + " EU-Volt"
+ };
+ }
+
+ @Override
+ public float getThickNess() {
+ return mThickNess;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ //
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ //
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java
new file mode 100644
index 0000000000..cb5c1b2f46
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java
@@ -0,0 +1,343 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.D1;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
+ public FluidStack mFluid;
+ public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0;
+
+ public final float mThickNess;
+ public final Materials mMaterial;
+ public final int mCapacity, mHeatResistance;
+ public final boolean mGasProof;
+
+ public GT_MetaPipeEntity_Fluid(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, int aCapacity, int aHeatResistance, boolean aGasProof) {
+ super(aID, aName, aNameRegional, 0);
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mCapacity = aCapacity;
+ mGasProof = aGasProof;
+ mHeatResistance = aHeatResistance;
+ }
+
+ public GT_MetaPipeEntity_Fluid(String aName, float aThickNess, Materials aMaterial, int aCapacity, int aHeatResistance, boolean aGasProof) {
+ super(aName, 0);
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mCapacity = aCapacity;
+ mGasProof = aGasProof;
+ mHeatResistance = aHeatResistance;
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return mMaterial==null?4:(byte)((mMaterial.contains(SubTag.WOOD) ? 12 : 4) + Math.max(0, Math.min(3, mMaterial.mToolQuality)));
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaPipeEntity_Fluid(mName, mThickNess, mMaterial, mCapacity, mHeatResistance, mGasProof);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aConnections, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ if (aConnected) {
+ float tThickNess = getThickNess();
+ if (tThickNess < 0.37F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.49F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.74F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.99F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ }
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return false;}
+ @Override public final boolean renderInside(byte aSide) {return false;}
+ @Override public int getProgresstime() {return getFluidAmount();}
+ @Override public int maxProgresstime() {return getCapacity();}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound()));
+ aNBT.setByte("mLastReceivedFrom", mLastReceivedFrom);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid"));
+ mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom");
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) {
+ if (mFluid != null && (((BaseMetaPipeEntity)getBaseMetaTileEntity()).mConnections & -128) == 0 && aEntity instanceof EntityLivingBase) {
+ int tTemperature = mFluid.getFluid().getTemperature(mFluid);
+ if (tTemperature > 320) {
+ GT_Utility.applyHeatDamage((EntityLivingBase)aEntity, (tTemperature - 300) / 50.0F);
+ } else if (tTemperature < 260) {
+ GT_Utility.applyFrostDamage((EntityLivingBase)aEntity, (270 - tTemperature) / 25.0F);
+ }
+ }
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ return AxisAlignedBB.getBoundingBox(aX+0.125D, aY+0.125D, aZ+0.125D, aX+0.875D, aY+0.875D, aZ+0.875D);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide() && aTick % 5 == 0) {
+ mLastReceivedFrom &= 63;
+ if (mLastReceivedFrom == 63) {
+ mLastReceivedFrom = 0;
+ }
+
+ if (mFluid != null && mFluid.amount > 0) {
+ int tTemperature = mFluid.getFluid().getTemperature(mFluid);
+ if (tTemperature > mHeatResistance) {
+ if (aBaseMetaTileEntity.getRandomNumber(100) == 0) {
+ aBaseMetaTileEntity.setToFire();
+ return;
+ }
+ aBaseMetaTileEntity.setOnFire();
+ }
+ if (!mGasProof && mFluid.getFluid().isGaseous(mFluid)) {
+ mFluid.amount -= 5;
+ sendSound((byte)9);
+ if (tTemperature > 320) {
+ try {
+ for (EntityLivingBase tLiving : (ArrayList<EntityLivingBase>)getBaseMetaTileEntity().getWorld().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(getBaseMetaTileEntity().getXCoord()-2, getBaseMetaTileEntity().getYCoord()-2, getBaseMetaTileEntity().getZCoord()-2, getBaseMetaTileEntity().getXCoord()+3, getBaseMetaTileEntity().getYCoord()+3, getBaseMetaTileEntity().getZCoord()+3))) {
+ GT_Utility.applyHeatDamage(tLiving, (tTemperature - 300) / 25.0F);
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ } else if (tTemperature < 260) {
+ try {
+ for (EntityLivingBase tLiving : (ArrayList<EntityLivingBase>)getBaseMetaTileEntity().getWorld().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(getBaseMetaTileEntity().getXCoord()-2, getBaseMetaTileEntity().getYCoord()-2, getBaseMetaTileEntity().getZCoord()-2, getBaseMetaTileEntity().getXCoord()+3, getBaseMetaTileEntity().getYCoord()+3, getBaseMetaTileEntity().getZCoord()+3))) {
+ GT_Utility.applyFrostDamage(tLiving, (270 - tTemperature) / 12.5F);
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ }
+ if (mFluid.amount <= 0) mFluid = null;
+ }
+ }
+
+ if (mLastReceivedFrom == oLastReceivedFrom) {
+ HashMap<IFluidHandler, ForgeDirection> tTanks = new HashMap<IFluidHandler, ForgeDirection>();
+
+ mConnections = 0;
+
+ for (byte tSide = 0, i = 0, j = (byte)aBaseMetaTileEntity.getRandomNumber(6); i < 6; i++) {
+ tSide = (byte)((j + i) % 6);
+
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(tSide);
+ if (tTileEntity != null) {
+ if (tTileEntity instanceof IGregTechTileEntity) {
+ if (aBaseMetaTileEntity.getColorization() >= 0) {
+ byte tColor = ((IGregTechTileEntity)tTileEntity).getColorization();
+ if (tColor >= 0 && (tColor & 15) != (aBaseMetaTileEntity.getColorization() & 15)) {
+ continue;
+ }
+ }
+ }
+ FluidTankInfo[] tInfo = tTileEntity.getTankInfo(ForgeDirection.getOrientation(tSide).getOpposite());
+ if (tInfo != null && tInfo.length > 0) {
+ if (tTileEntity instanceof ICoverable && ((ICoverable)tTileEntity).getCoverBehaviorAtSide(GT_Utility.getOppositeSide(tSide)).alwaysLookConnected(GT_Utility.getOppositeSide(tSide), ((ICoverable)tTileEntity).getCoverIDAtSide(GT_Utility.getOppositeSide(tSide)), ((ICoverable)tTileEntity).getCoverDataAtSide(GT_Utility.getOppositeSide(tSide)), ((ICoverable)tTileEntity))) {
+ mConnections |= (1<<tSide);
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).letsFluidIn(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), null, aBaseMetaTileEntity)) {
+ mConnections |= (1<<tSide);
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).letsFluidOut(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), null, aBaseMetaTileEntity)) {
+ mConnections |= (1<<tSide);
+ if (((1<<tSide) & mLastReceivedFrom) == 0) tTanks.put(tTileEntity, ForgeDirection.getOrientation(tSide).getOpposite());
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).alwaysLookConnected(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), aBaseMetaTileEntity)) {
+ mConnections |= (1<<tSide);
+ }
+ }
+ }
+ }
+
+ if (mFluid != null && mFluid.amount > 0) {
+ int tAmount = Math.max(1, Math.min(mCapacity*10, mFluid.amount / 2)), tSuccessfulTankAmount = 0;
+
+ for (Entry<IFluidHandler, ForgeDirection> tEntry : tTanks.entrySet()) if (tEntry.getKey().fill(tEntry.getValue(), drain(tAmount, false), false) > 0) tSuccessfulTankAmount++;
+
+ if (tSuccessfulTankAmount > 0) {
+ if (tAmount >= tSuccessfulTankAmount) {
+ tAmount /= tSuccessfulTankAmount;
+ for (Entry<IFluidHandler, ForgeDirection> tTileEntity : tTanks.entrySet()) {
+ if (mFluid == null || mFluid.amount <= 0) break;
+ int tFilledAmount = tTileEntity.getKey().fill(tTileEntity.getValue(), drain(tAmount, false), false);
+ if (tFilledAmount > 0) tTileEntity.getKey().fill(tTileEntity.getValue(), drain(tFilledAmount, true), true);
+ }
+ } else {
+ for (Entry<IFluidHandler, ForgeDirection> tTileEntity : tTanks.entrySet()) {
+ if (mFluid == null || mFluid.amount <= 0) break;
+ int tFilledAmount = tTileEntity.getKey().fill(tTileEntity.getValue(), drain(mFluid.amount, false), false);
+ if (tFilledAmount > 0) tTileEntity.getKey().fill(tTileEntity.getValue(), drain(tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+
+ mLastReceivedFrom = 0;
+ }
+
+ oLastReceivedFrom = mLastReceivedFrom;
+ }
+ }
+
+ @Override
+ public void doSound(byte aIndex, double aX, double aY, double aZ) {
+ super.doSound(aIndex, aX, aY, aZ);
+ if (aIndex == 9) {
+ GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ);
+ for (byte i = 0; i < 6; i++) for (int l = 0; l < 2; ++l) getBaseMetaTileEntity().getWorld().spawnParticle("largesmoke", aX - 0.5 + Math.random(), aY - 0.5 + Math.random(), aZ - 0.5 + Math.random(), ForgeDirection.getOrientation(i).offsetX / 5.0, ForgeDirection.getOrientation(i).offsetY / 5.0, ForgeDirection.getOrientation(i).offsetZ / 5.0);
+ }
+ }
+
+ @Override
+ public final int getCapacity() {
+ return mCapacity * 20;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public final FluidStack getFluid() {
+ return mFluid;
+ }
+
+ @Override
+ public final int getFluidAmount() {
+ return mFluid != null ? mFluid.amount : 0;
+ }
+
+ @Override
+ public final int fill_default(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ if (aFluid == null || aFluid.getFluid().getID() <= 0) return 0;
+
+ if (mFluid == null || mFluid.getFluid().getID() <= 0) {
+ if(aFluid.amount <= getCapacity()) {
+ if (doFill) {
+ mFluid = aFluid.copy();
+ mLastReceivedFrom |= (1<<aSide.ordinal());
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ mFluid = aFluid.copy();
+ mLastReceivedFrom |= (1<<aSide.ordinal());
+ mFluid.amount = getCapacity();
+ }
+ return getCapacity();
+ }
+
+ if (!mFluid.isFluidEqual(aFluid)) return 0;
+
+ int space = getCapacity() - mFluid.amount;
+ if (aFluid.amount <= space) {
+ if (doFill) {
+ mFluid.amount += aFluid.amount;
+ mLastReceivedFrom |= (1<<aSide.ordinal());
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ mFluid.amount = getCapacity();
+ mLastReceivedFrom |= (1<<aSide.ordinal());
+ }
+ return space;
+ }
+
+ @Override
+ public final FluidStack drain(int maxDrain, boolean doDrain) {
+ if (mFluid == null) return null;
+ if (mFluid.amount <= 0) {
+ mFluid = null;
+ return null;
+ }
+
+ int used = maxDrain;
+ if (mFluid.amount < used)
+ used = mFluid.amount;
+
+ if (doDrain) {
+ mFluid.amount -= used;
+ }
+
+ FluidStack drained = mFluid.copy();
+ drained.amount = used;
+
+ if (mFluid.amount <= 0) {
+ mFluid = null;
+ }
+
+ return drained;
+ }
+
+ @Override
+ public int getTankPressure() {
+ return (mFluid==null?0:mFluid.amount) - (getCapacity()/2);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ EnumChatFormatting.BLUE + "Fluid Capacity: " + (mCapacity*20) + "L/sec" + EnumChatFormatting.GRAY,
+ EnumChatFormatting.RED + "Heat Limit: " + mHeatResistance + " K" + EnumChatFormatting.GRAY
+ };
+ }
+
+ @Override
+ public float getThickNess() {
+ return mThickNess;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java
new file mode 100644
index 0000000000..a1ec9af85e
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java
@@ -0,0 +1,59 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.RA;
+import gregtech.api.enums.*;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaPipeEntity_Frame extends MetaPipeEntity {
+ public final Materials mMaterial;
+
+ public GT_MetaPipeEntity_Frame(int aID, String aName, String aNameRegional, Materials aMaterial) {
+ super(aID, aName, aNameRegional, 0);
+ mMaterial = aMaterial;
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.frameGt, aMaterial, getStackForm(1));
+ GT_ModHandler.addCraftingRecipe(getStackForm(2), RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] {"SSS", "SwS", "SSS", 'S', OrePrefixes.stick.get(mMaterial)});
+ RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 4), ItemList.Circuit_Integrated.getWithDamage(0, 4), getStackForm(1), 64, 8);
+ }
+
+ public GT_MetaPipeEntity_Frame(String aName, Materials aMaterial) {
+ super(aName, 0);
+ mMaterial = aMaterial;
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return mMaterial==null?4:(byte)((mMaterial.contains(SubTag.WOOD) ? 12 : 4) + Math.max(0, Math.min(3, mMaterial.mToolQuality)));
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaPipeEntity_Frame(mName, mMaterial);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aConnections, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ }
+
+ @Override public String[] getDescription() {return new String[] {"Just something you can put a Cover or CFoam on."};}
+
+ @Override public final boolean isSimpleMachine() {return true;}
+ @Override public final boolean isFacingValid(byte aFacing) {return false;}
+ @Override public final boolean isValidSlot(int aIndex) {return false;}
+ @Override public final boolean renderInside(byte aSide) {return true;}
+ @Override public final float getThickNess() {return 1.0F;}
+ @Override public final void saveNBTData(NBTTagCompound aNBT) {/*Do nothing*/}
+ @Override public final void loadNBTData(NBTTagCompound aNBT) {/*Do nothing*/}
+ @Override public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return false;}
+ @Override public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return false;}
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java
new file mode 100644
index 0000000000..59ff78e372
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java
@@ -0,0 +1,269 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.*;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.tileentity.TileEntityDispenser;
+import net.minecraft.tileentity.TileEntityHopper;
+
+public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileEntityItemPipe {
+ public int mTransferredItems = 0;
+ public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0;
+ public boolean mIsRestrictive = false;
+
+ public final float mThickNess;
+ public final Materials mMaterial;
+ public final int mStepSize;
+
+ public GT_MetaPipeEntity_Item(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, int aInvSlotCount, int aStepSize, boolean aIsRestrictive) {
+ super(aID, aName, aNameRegional, aInvSlotCount);
+ mIsRestrictive = aIsRestrictive;
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mStepSize = aStepSize;
+ }
+
+ public GT_MetaPipeEntity_Item(String aName, float aThickNess, Materials aMaterial, int aInvSlotCount, int aStepSize, boolean aIsRestrictive) {
+ super(aName, aInvSlotCount);
+ mIsRestrictive = aIsRestrictive;
+ mThickNess = aThickNess;
+ mMaterial = aMaterial;
+ mStepSize = aStepSize;
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return mMaterial==null?4:(byte)((mMaterial.contains(SubTag.WOOD) ? 12 : 4) + Math.max(0, Math.min(3, mMaterial.mToolQuality)));
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaPipeEntity_Item(mName, mThickNess, mMaterial, mInventory.length, mStepSize, mIsRestrictive);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aConnections, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ if (mIsRestrictive) {
+ if (aConnected) {
+ float tThickNess = getThickNess();
+ if (tThickNess < 0.37F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ if (tThickNess < 0.49F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ if (tThickNess < 0.74F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ if (tThickNess < 0.99F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ }
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.PIPE_RESTRICTOR)};
+ }
+ if (aConnected) {
+ float tThickNess = getThickNess();
+ if (tThickNess < 0.37F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.49F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.74F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ if (tThickNess < 0.99F) return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ }
+ return new ITexture[] {new GT_RenderedTexture(mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex ], Dyes.getModulation(aColorIndex, mMaterial.mRGBa))};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+ @Override public final boolean renderInside(byte aSide) {return false;}
+ @Override public int getProgresstime() {return getPipeContent()*64;}
+ @Override public int maxProgresstime() {return getMaxPipeCapacity()*64;}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setByte("mLastReceivedFrom", mLastReceivedFrom);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom");
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide() && aTick % 10 == 0) {
+ mConnections = 0;
+ if (aTick % 20 == 0) mTransferredItems = 0;
+
+ for (byte i = 0; i < 6; i++) {
+ TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(i);
+ if (tTileEntity != null) {
+ boolean temp = GT_Utility.isConnectableNonInventoryPipe(tTileEntity, GT_Utility.getOppositeSide(i));
+ if (tTileEntity instanceof IGregTechTileEntity) {
+ temp = true;
+ if (((IGregTechTileEntity)tTileEntity).getMetaTileEntity() == null) continue;
+ if (aBaseMetaTileEntity.getColorization() >= 0) {
+ byte tColor = ((IGregTechTileEntity)tTileEntity).getColorization();
+ if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) {
+ continue;
+ }
+ }
+ if (((IGregTechTileEntity)tTileEntity).getMetaTileEntity().connectsToItemPipe(GT_Utility.getOppositeSide(i))) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ }
+ if (tTileEntity instanceof IInventory) {
+ temp = true;
+ if (((IInventory)tTileEntity).getSizeInventory() <= 0) {
+ continue;
+ }
+ }
+ if (tTileEntity instanceof ISidedInventory) {
+ temp = true;
+ int[] tSlots = ((ISidedInventory)tTileEntity).getAccessibleSlotsFromSide(GT_Utility.getOppositeSide(i));
+ if (tSlots == null || tSlots.length <= 0) {
+ continue;
+ }
+ }
+ if (temp) {
+ if (tTileEntity instanceof ICoverable && ((ICoverable)tTileEntity).getCoverBehaviorAtSide(GT_Utility.getOppositeSide(i)).alwaysLookConnected(GT_Utility.getOppositeSide(i), ((ICoverable)tTileEntity).getCoverIDAtSide(GT_Utility.getOppositeSide(i)), ((ICoverable)tTileEntity).getCoverDataAtSide(GT_Utility.getOppositeSide(i)), ((ICoverable)tTileEntity))) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).alwaysLookConnected(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), aBaseMetaTileEntity)) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsIn(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -1, aBaseMetaTileEntity)) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsOut(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -1, aBaseMetaTileEntity)) {
+ mConnections |= (1<<i);
+ continue;
+ }
+ }
+ }
+ }
+
+ if (oLastReceivedFrom == mLastReceivedFrom) {
+ doTickProfilingInThisTick = false;
+
+ ArrayList<IMetaTileEntityItemPipe> tPipeList = new ArrayList<IMetaTileEntityItemPipe>();
+
+ for (boolean temp = true; temp && !isInventoryEmpty() && pipeCapacityCheck();) {
+ temp = false;
+ tPipeList.clear();
+ for (IMetaTileEntityItemPipe tTileEntity : GT_Utility.sortMapByValuesAcending(IMetaTileEntityItemPipe.Util.scanPipes(this, new HashMap<IMetaTileEntityItemPipe, Long>(), 0, false, false)).keySet()) {
+ if (temp) break;
+ tPipeList.add(tTileEntity);
+ while (!temp && !isInventoryEmpty() && tTileEntity.sendItemStack(aBaseMetaTileEntity)) for (IMetaTileEntityItemPipe tPipe : tPipeList) if (!tPipe.incrementTransferCounter(1)) temp = true;
+ }
+ }
+ }
+
+ if (isInventoryEmpty()) mLastReceivedFrom = 6;
+ oLastReceivedFrom = mLastReceivedFrom;
+ }
+ }
+
+ @Override
+ public boolean incrementTransferCounter(int aIncrement) {
+ mTransferredItems += aIncrement;
+ return pipeCapacityCheck();
+ }
+
+ @Override
+ public boolean sendItemStack(Object aSender) {
+ if (pipeCapacityCheck()) {
+ byte tOffset = (byte)getBaseMetaTileEntity().getRandomNumber(6), tSide = 0;
+ for (byte i = 0; i < 6; i++) {
+ tSide = (byte)((i+tOffset)%6);
+ if (isInventoryEmpty() || (tSide != mLastReceivedFrom || aSender != getBaseMetaTileEntity())) {
+ if (insertItemStackIntoTileEntity(aSender, tSide)) return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean insertItemStackIntoTileEntity(Object aSender, byte aSide) {
+ if (getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsItemsOut(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), -1, getBaseMetaTileEntity())) {
+ TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(aSide);
+ if (tInventory != null && !(tInventory instanceof BaseMetaPipeEntity)) {
+ if ((!(tInventory instanceof TileEntityHopper) && !(tInventory instanceof TileEntityDispenser)) || getBaseMetaTileEntity().getMetaIDAtSide(aSide) != GT_Utility.getOppositeSide(aSide)) {
+ return GT_Utility.moveOneItemStack(aSender, tInventory, (byte)6, GT_Utility.getOppositeSide(aSide), null, false, (byte)64, (byte)1, (byte)64, (byte)1) > 0;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean pipeCapacityCheck() {
+ return mTransferredItems <= 0 || getPipeContent() < getMaxPipeCapacity();
+ }
+
+ private int getPipeContent() {
+ return mTransferredItems;
+ }
+
+ private int getMaxPipeCapacity() {
+ return Math.max(1, getPipeCapacity());
+ }
+
+ /**
+ * Amount of ItemStacks this Pipe can conduct per Second.
+ */
+ public int getPipeCapacity() {
+ return mInventory.length;
+ }
+
+ @Override
+ public int getStepSize() {
+ return mStepSize;
+ }
+
+ @Override
+ public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) {
+ return true;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ if (isInventoryEmpty()) mLastReceivedFrom = aSide;
+ return mLastReceivedFrom == aSide && mInventory[aIndex] == null;
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {"Item Capacity: "+getMaxPipeCapacity()+" Stacks/sec", "Routing Value: " + mStepSize};
+ }
+
+ private boolean isInventoryEmpty() {
+ for (ItemStack tStack : mInventory) if (tStack != null) return false;
+ return true;
+ }
+
+ @Override
+ public float getThickNess() {
+ return mThickNess;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java
new file mode 100644
index 0000000000..72df4d7cdb
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java
@@ -0,0 +1,213 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import ic2.api.item.IElectricItem;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.*;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public class GT_MetaTileEntity_BasicBatteryBuffer extends GT_MetaTileEntity_TieredMachineBlock {
+ public boolean mCharge = false, mDecharge = false;
+ public int mBatteryCount = 0, mChargeableCount = 0;
+
+ public GT_MetaTileEntity_BasicBatteryBuffer(int aID, String aName, String aNameRegional, int aTier, String aDescription, int aSlotCount) {
+ super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicBatteryBuffer(String aName, int aTier, String aDescription, ITexture[][][] aTextures, int aSlotCount) {
+ super(aName, aTier, aSlotCount, aDescription, aTextures);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {mDescription, mInventory.length + " Slots"};
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[2][17][];
+ for (byte i = -1; i < 16; i++) {
+ rTextures[ 0][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1]};
+ rTextures[ 1][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], mInventory.length > 4 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] : Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ }
+ return rTextures;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return mTextures[aSide == aFacing ? 1 : 0][aColorIndex+1];
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_BasicBatteryBuffer(mName, mTier, mDescription, mTextures, mInventory.length);
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isElectric() {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return aSide!=getBaseMetaTileEntity().getFrontFacing();}
+ @Override public boolean isOutputFacing(byte aSide) {return aSide==getBaseMetaTileEntity().getFrontFacing();}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return V[mTier]*16*mInventory.length;}
+ @Override public long maxEUStore() {return V[mTier]*64*mInventory.length;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxEUOutput() {return V[mTier];}
+ @Override public long maxAmperesIn() {return mChargeableCount * 2;}
+ @Override public long maxAmperesOut() {return mBatteryCount;}
+ @Override public int rechargerSlotStartIndex() {return 0;}
+ @Override public int dechargerSlotStartIndex() {return 0;}
+ @Override public int rechargerSlotCount() {return mCharge?mInventory.length:0;}
+ @Override public int dechargerSlotCount() {return mDecharge?mInventory.length:0;}
+ @Override public int getProgresstime() {return (int)getBaseMetaTileEntity().getUniversalEnergyStored();}
+ @Override public int maxProgresstime() {return (int)getBaseMetaTileEntity().getUniversalEnergyCapacity();}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ //
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ //
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mInventory.length) {
+ case 1: return new GT_Container_1by1(aPlayerInventory, aBaseMetaTileEntity);
+ case 4: return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity);
+ case 9: return new GT_Container_3by3(aPlayerInventory, aBaseMetaTileEntity);
+ case 16: return new GT_Container_4by4(aPlayerInventory, aBaseMetaTileEntity);
+ }
+ return new GT_Container_1by1(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mInventory.length) {
+ case 1: return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ case 4: return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ case 9: return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ case 16: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ }
+ return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3;
+ mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3;
+ mBatteryCount = 0;
+ mChargeableCount = 0;
+ for (ItemStack tStack : mInventory) if (GT_ModHandler.isElectricItem(tStack, mTier)) {
+ if (GT_ModHandler.isChargerItem(tStack)) mBatteryCount++;
+ mChargeableCount++;
+ }
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ if(GT_ModHandler.isElectricItem(aStack)&&aStack.getUnlocalizedName().startsWith("gt.metaitem.01.")){
+ String name = aStack.getUnlocalizedName();
+ if(name.equals("gt.metaitem.01.32510")||
+ name.equals("gt.metaitem.01.32511")||
+ name.equals("gt.metaitem.01.32520")||
+ name.equals("gt.metaitem.01.32521")||
+ name.equals("gt.metaitem.01.32530")||
+ name.equals("gt.metaitem.01.32531")){
+ return true;}
+ }
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ if(!GT_Utility.isStackValid(aStack)){
+ return false;
+ }
+ if(GT_ModHandler.isElectricItem(aStack, this.mTier)){
+ return true;
+ }
+ return false;
+ }
+
+ public long[] getStoredEnergy(){
+ long tScale = getBaseMetaTileEntity().getEUCapacity();
+ long tStored = getBaseMetaTileEntity().getStoredEU();
+ if(mInventory!=null){
+ for(ItemStack aStack : mInventory){
+ if (GT_ModHandler.isElectricItem(aStack)) {
+
+ if(aStack.getItem() instanceof GT_MetaBase_Item){
+ Long[] stats = ((GT_MetaBase_Item)aStack.getItem()).getElectricStats(aStack);
+ if(stats!=null){
+ tScale = tScale + stats[0];
+ tStored = tStored + ((GT_MetaBase_Item)aStack.getItem()).getRealCharge(aStack);
+ }
+ }else if(aStack.getItem() instanceof IElectricItem){
+ tStored = tStored + (long)ic2.api.item.ElectricItem.manager.getCharge(aStack);
+ tScale = tScale + (long)((IElectricItem)aStack.getItem()).getMaxCharge(aStack);
+ }
+ }
+ }
+
+ }
+ return new long[] {tStored,tScale};
+ }
+
+ private long count=0;
+ private long mStored=0;
+ private long mMax=0;
+
+ @Override
+ public String[] getInfoData() {
+ count++;
+ if(mMax==0||count%20==0){
+ long[] tmp = getStoredEnergy();
+ mStored=tmp[0];
+ mMax=tmp[1];
+ }
+
+ return new String[] {
+ getLocalName(),
+ "Stored Items:",
+ GT_Utility.formatNumbers(mStored)+" EU /",
+ GT_Utility.formatNumbers(mMax)+" EU"};
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java
new file mode 100644
index 0000000000..97d189170e
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java
@@ -0,0 +1,167 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Collection;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract class GT_MetaTileEntity_BasicGenerator extends GT_MetaTileEntity_BasicTank {
+ public GT_MetaTileEntity_BasicGenerator(int aID, String aName, String aNameRegional, int aTier, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_BasicGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[10][17][];
+ for (byte i = -1; i < 16; i++) {
+ rTextures[ 0][i+1] = getFront(i);
+ rTextures[ 1][i+1] = getBack(i);
+ rTextures[ 2][i+1] = getBottom(i);
+ rTextures[ 3][i+1] = getTop(i);
+ rTextures[ 4][i+1] = getSides(i);
+ rTextures[ 5][i+1] = getFrontActive(i);
+ rTextures[ 6][i+1] = getBackActive(i);
+ rTextures[ 7][i+1] = getBottomActive(i);
+ rTextures[ 8][i+1] = getTopActive(i);
+ rTextures[ 9][i+1] = getSidesActive(i);
+ }
+ return rTextures;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return mTextures[(aActive?5:0)+(aSide==aFacing?0:aSide==GT_Utility.getOppositeSide(aFacing)?1:aSide==0?2:aSide==1?3:4)][aColorIndex+1];
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {mDescription, "Fuel Efficiency: " + getEfficiency() + "%"};
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ public ITexture[] getFront(byte aColor) {return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};}
+ public ITexture[] getBack(byte aColor) {return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};}
+ public ITexture[] getBottom(byte aColor) {return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};}
+ public ITexture[] getTop(byte aColor) {return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};}
+ public ITexture[] getSides(byte aColor) {return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};}
+
+ public ITexture[] getFrontActive(byte aColor) {return getFront(aColor);}
+ public ITexture[] getBackActive(byte aColor) {return getBack(aColor);}
+ public ITexture[] getBottomActive(byte aColor) {return getBottom(aColor);}
+ public ITexture[] getTopActive(byte aColor) {return getTop(aColor);}
+ public ITexture[] getSidesActive(byte aColor) {return getSides(aColor);}
+
+ @Override public boolean isFacingValid(byte aSide) {return aSide > 1;}
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return aIndex < 2;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isOutputFacing(byte aSide) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public long maxEUOutput() {return getBaseMetaTileEntity().isAllowedToWork()?V[mTier]:0;}
+ @Override public long maxEUStore() {return Math.max(getEUVar(), V[mTier] * 20 + getMinimumStoredEU());}
+
+ @Override public boolean doesFillContainers() {return getBaseMetaTileEntity().isAllowedToWork();}
+ @Override public boolean doesEmptyContainers() {return getBaseMetaTileEntity().isAllowedToWork();}
+ @Override public boolean canTankBeFilled() {return getBaseMetaTileEntity().isAllowedToWork();}
+ @Override public boolean canTankBeEmptied() {return getBaseMetaTileEntity().isAllowedToWork();}
+ @Override public boolean displaysItemStack() {return true;}
+ @Override public boolean displaysStackSize() {return false;}
+ @Override public boolean isFluidInputAllowed(FluidStack aFluid) {return getFuelValue(aFluid) > 0;}
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && aTick%10==0) {
+ if (mFluid == null) {
+ if (aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() + getMinimumStoredEU()) {
+ mInventory[getStackDisplaySlot()] = null;
+ } else {
+ if (mInventory[getStackDisplaySlot()] == null) mInventory[getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1);
+ mInventory[getStackDisplaySlot()].setStackDisplayName("Generating: " + (aBaseMetaTileEntity.getUniversalEnergyStored() - getMinimumStoredEU()) + " EU");
+ }
+ } else {
+ int tFuelValue = getFuelValue(mFluid), tConsumed = consumedFluidPerOperation(mFluid);
+ if (tFuelValue > 0 && tConsumed > 0 && mFluid.amount > tConsumed) {
+ long tFluidAmountToUse = Math.min(mFluid.amount / tConsumed, (maxEUOutput() * 20 + getMinimumStoredEU() - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue);
+ if (tFluidAmountToUse > 0 && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) mFluid.amount -= tFluidAmountToUse * tConsumed;
+ }
+ }
+ if (mInventory[getInputSlot()] != null && aBaseMetaTileEntity.getUniversalEnergyStored() < (maxEUOutput() * 20 + getMinimumStoredEU()) && GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true) == null) {
+ int tFuelValue = getFuelValue(mInventory[getInputSlot()]);
+ if (tFuelValue > 0) {
+ ItemStack tEmptyContainer = getEmptyContainer(mInventory[getInputSlot()]);
+ if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tEmptyContainer)) {
+ aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true);
+ aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1);
+ }
+ }
+ }
+ }
+
+ if (aBaseMetaTileEntity.isServerSide()) aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU());
+ }
+
+ public abstract GT_Recipe_Map getRecipes();
+
+ public abstract int getEfficiency();
+
+ public int consumedFluidPerOperation(FluidStack aLiquid) {
+ return 1;
+ }
+
+ public int getFuelValue(FluidStack aLiquid) {
+ if (aLiquid == null || getRecipes() == null) return 0;
+ FluidStack tLiquid;
+ Collection<GT_Recipe> tRecipeList = getRecipes().mRecipeList;
+ if (tRecipeList != null) for (GT_Recipe tFuel : tRecipeList) if ((tLiquid = GT_Utility.getFluidForFilledItem(tFuel.getRepresentativeInput(0), true)) != null) if (aLiquid.isFluidEqual(tLiquid)) return (int)(((long)tFuel.mSpecialValue * getEfficiency() * consumedFluidPerOperation(tLiquid)) / 100);
+ return 0;
+ }
+
+ public int getFuelValue(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack) || getRecipes() == null) return 0;
+ GT_Recipe tFuel = getRecipes().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack);
+ if (tFuel != null) return (int)((tFuel.mSpecialValue * 1000L * getEfficiency()) / 100);
+ return 0;
+ }
+
+ public ItemStack getEmptyContainer(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack) || getRecipes() == null) return null;
+ GT_Recipe tFuel = getRecipes().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack);
+ if (tFuel != null) return GT_Utility.copy(tFuel.getOutput(0));
+ return GT_Utility.getContainerItem(aStack, true);
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack) && (getFuelValue(aStack) > 0 || getFuelValue(GT_Utility.getFluidForFilledItem(aStack, true)) > 0);
+ }
+
+ @Override
+ public int getCapacity() {
+ return 16000;
+ }
+
+ @Override
+ public int getTankPressure() {
+ return -100;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java
new file mode 100644
index 0000000000..b74310f8d8
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java
@@ -0,0 +1,99 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_BasicHull extends GT_MetaTileEntity_BasicTank {
+ public GT_MetaTileEntity_BasicHull(int aID, String aName, String aNameRegional, int aTier, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aTier, 1, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_BasicHull(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_BasicHull(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_BasicHull(mName, mTier, mInventory.length, mDescription, mTextures);
+ }
+
+ @Override public boolean isElectric() {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return !isOutputFacing(aSide);}
+ @Override public boolean isOutputFacing(byte aSide) {return aSide == getBaseMetaTileEntity().getFrontFacing();}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUStore() {return 512+V[mTier]*50;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxEUOutput() {return V[mTier];}
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+ @Override public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return true;}
+ @Override public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return true;}
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ return mTextures[Math.min(2, aSide) + (aSide==aFacing?3:0)][aColorIndex+1];
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[6][17][];
+ for (byte i = -1; i < 16; i++) {
+ rTextures[ 0][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1]};
+ rTextures[ 1][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1]};
+ rTextures[ 2][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1]};
+ rTextures[ 3][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ rTextures[ 4][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ rTextures[ 5][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ }
+ return rTextures;
+ }
+
+ @Override
+ public boolean doesFillContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean doesEmptyContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean canTankBeFilled() {
+ return true;
+ }
+
+ @Override
+ public boolean canTankBeEmptied() {
+ return true;
+ }
+
+ @Override
+ public boolean displaysItemStack() {
+ return false;
+ }
+
+ @Override
+ public boolean displaysStackSize() {
+ return false;
+ }
+
+ @Override
+ public int getCapacity() {
+ return (mTier + 1) * 1000;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java
new file mode 100644
index 0000000000..948e63124f
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java
@@ -0,0 +1,32 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+
+public abstract class GT_MetaTileEntity_BasicHull_NonElectric extends GT_MetaTileEntity_BasicHull {
+ public GT_MetaTileEntity_BasicHull_NonElectric(int aID, String aName, String aNameRegional, int aTier, String aDescription) {
+ super(aID, aName, aNameRegional, aTier, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicHull_NonElectric(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 1, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aConnections, byte aColorIndex, boolean aConnected, boolean aRedstone) {
+ return mTextures[Math.min(2, aSide)][aColorIndex+1];
+ }
+
+ @Override public boolean isElectric() {return false;}
+ @Override public boolean isEnetInput() {return false;}
+ @Override public boolean isEnetOutput() {return false;}
+ @Override public boolean isInputFacing(byte aSide) {return false;}
+ @Override public boolean isOutputFacing(byte aSide) {return false;}
+ @Override public long getMinimumStoredEU() {return 0;}
+ @Override public long maxEUStore() {return 0;}
+ @Override public long maxEUInput() {return 0;}
+ @Override public long maxEUOutput() {return 0;}
+
+ @Override
+ public abstract ITexture[][][] getTextureSet(ITexture[] aTextures);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
new file mode 100644
index 0000000000..b0cba5024c
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
@@ -0,0 +1,602 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_BasicMachine;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Arrays;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_BasicTank {
+ public boolean mAllowInputFromOutputSide = false, mFluidTransfer = false, mItemTransfer = false, mHasBeenUpdated = false, mStuttering = false, mCharge = false, mDecharge = false;
+ public int mMainFacing = -1, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mOutputBlocked = 0;
+ public FluidStack mOutputFluid;
+ private FluidStack mFluidOut;
+ public String mGUIName = "", mNEIName = "";
+
+ public final ItemStack[] mOutputItems;
+ public final int mInputSlotCount, mAmperage;
+
+ private static final int OTHER_SLOT_COUNT = 4;
+
+ /**
+ * @param aOverlays
+ * 0 = SideFacingActive
+ * 1 = SideFacingInactive
+ * 2 = FrontFacingActive
+ * 3 = FrontFacingInactive
+ * 4 = TopFacingActive
+ * 5 = TopFacingInactive
+ * 6 = BottomFacingActive
+ * 7 = BottomFacingInactive
+ * ----- Not all Array Elements have to be initialised, you can also just use 8 Parameters for the Default Pipe Texture Overlays -----
+ * 8 = BottomFacingPipeActive
+ * 9 = BottomFacingPipeInactive
+ * 10 = TopFacingPipeActive
+ * 11 = TopFacingPipeInactive
+ * 12 = SideFacingPipeActive
+ * 13 = SideFacingPipeInactive
+ */
+ public GT_MetaTileEntity_BasicMachine(int aID, String aName, String aNameRegional, int aTier, int aAmperage, String aDescription, int aInputSlotCount, int aOutputSlotCount, String aGUIName, String aNEIName, ITexture... aOverlays) {
+ super(aID, aName, aNameRegional, aTier, OTHER_SLOT_COUNT+aInputSlotCount+aOutputSlotCount+1, aDescription, aOverlays);
+ mInputSlotCount = Math.max(0, aInputSlotCount);
+ mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)];
+ mAmperage = aAmperage;
+ mGUIName = aGUIName;
+ mNEIName = aNEIName;
+ }
+
+ public GT_MetaTileEntity_BasicMachine(String aName, int aTier, int aAmperage, String aDescription, ITexture[][][] aTextures, int aInputSlotCount, int aOutputSlotCount, String aGUIName, String aNEIName) {
+ super(aName, aTier, OTHER_SLOT_COUNT+aInputSlotCount+aOutputSlotCount+1, aDescription, aTextures);
+ mInputSlotCount = Math.max(0, aInputSlotCount);
+ mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)];
+ mAmperage = aAmperage;
+ mGUIName = aGUIName;
+ mNEIName = aNEIName;
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[14][17][];
+ aTextures = Arrays.copyOf(aTextures, 14);
+
+ for (int i = 0; i < aTextures.length; i++) if (aTextures[i] != null) for (byte c = -1; c < 16; c++) {
+ if (rTextures[ i][c+1] == null) rTextures[ i][c+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][c+1], aTextures[i]};
+ }
+
+ for (byte c = -1; c < 16; c++) {
+ if (rTextures[ 0][c+1] == null) rTextures[ 0][c+1] = getSideFacingActive(c);
+ if (rTextures[ 1][c+1] == null) rTextures[ 1][c+1] = getSideFacingInactive(c);
+ if (rTextures[ 2][c+1] == null) rTextures[ 2][c+1] = getFrontFacingActive(c);
+ if (rTextures[ 3][c+1] == null) rTextures[ 3][c+1] = getFrontFacingInactive(c);
+ if (rTextures[ 4][c+1] == null) rTextures[ 4][c+1] = getTopFacingActive(c);
+ if (rTextures[ 5][c+1] == null) rTextures[ 5][c+1] = getTopFacingInactive(c);
+ if (rTextures[ 6][c+1] == null) rTextures[ 6][c+1] = getBottomFacingActive(c);
+ if (rTextures[ 7][c+1] == null) rTextures[ 7][c+1] = getBottomFacingInactive(c);
+ if (rTextures[ 8][c+1] == null) rTextures[ 8][c+1] = getBottomFacingPipeActive(c);
+ if (rTextures[ 9][c+1] == null) rTextures[ 9][c+1] = getBottomFacingPipeInactive(c);
+ if (rTextures[10][c+1] == null) rTextures[10][c+1] = getTopFacingPipeActive(c);
+ if (rTextures[11][c+1] == null) rTextures[11][c+1] = getTopFacingPipeInactive(c);
+ if (rTextures[12][c+1] == null) rTextures[12][c+1] = getSideFacingPipeActive(c);
+ if (rTextures[13][c+1] == null) rTextures[13][c+1] = getSideFacingPipeInactive(c);
+ }
+ return rTextures;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return mTextures[mMainFacing<2?aSide==aFacing?aActive?2:3:aSide==0?aActive?6:7:aSide==1?aActive?4:5:aActive?0:1:aSide==mMainFacing?aActive?2:3:(showPipeFacing()&&aSide==aFacing)?aSide==0?aActive?8:9:aSide==1?aActive?10:11:aActive?12:13:aSide==0?aActive?6:7:aSide==1?aActive?4:5:aActive?0:1][aColorIndex+1];
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isOverclockerUpgradable() {return false;}
+ @Override public boolean isTransformerUpgradable() {return false;}
+ @Override public boolean isElectric() {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return aIndex > 0 && super.isValidSlot(aIndex) && aIndex != OTHER_SLOT_COUNT+mInputSlotCount+mOutputItems.length;}
+ @Override public boolean isFacingValid(byte aFacing) {return mMainFacing > 1 || aFacing > 1;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return aSide!=mMainFacing;}
+ @Override public boolean isOutputFacing(byte aSide) {return false;}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public boolean isLiquidInput(byte aSide) {return aSide!=mMainFacing && (mAllowInputFromOutputSide || aSide != getBaseMetaTileEntity().getFrontFacing());}
+ @Override public boolean isLiquidOutput(byte aSide) {return aSide!=mMainFacing;}
+ @Override public long getMinimumStoredEU() {return V[mTier]*16;}
+ @Override public long maxEUStore() {return V[mTier]*64;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxSteamStore() {return maxEUStore();}
+ @Override public long maxAmperesIn() {return (mEUt * 2) / V[mTier] + 1;}
+ @Override public int getInputSlot() {return OTHER_SLOT_COUNT;}
+ @Override public int getOutputSlot() {return OTHER_SLOT_COUNT+mInputSlotCount;}
+ @Override public int getStackDisplaySlot() {return 2;}
+ @Override public int rechargerSlotStartIndex() {return 1;}
+ @Override public int dechargerSlotStartIndex() {return 1;}
+ @Override public int rechargerSlotCount() {return mCharge?1:0;}
+ @Override public int dechargerSlotCount() {return mDecharge?1:0;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public int getProgresstime() {return mProgresstime;}
+ @Override public int maxProgresstime() {return mMaxProgresstime;}
+ @Override public int increaseProgress(int aProgress) {mProgresstime += aProgress; return mMaxProgresstime-mProgresstime;}
+ @Override public boolean isFluidInputAllowed(FluidStack aFluid) {return getFillableStack() != null || (getRecipeList() != null && getRecipeList().containsInput(aFluid));}
+ @Override public boolean isFluidChangingAllowed() {return true;}
+ @Override public boolean doesFillContainers() {return false;}
+ @Override public boolean doesEmptyContainers() {return false;}
+ @Override public boolean canTankBeFilled() {return true;}
+ @Override public boolean canTankBeEmptied() {return true;}
+ @Override public boolean displaysItemStack() {return true;}
+ @Override public boolean displaysStackSize() {return true;}
+ @Override public FluidStack getDisplayedFluid() {return displaysOutputFluid()?getDrainableStack():null;}
+ @Override public FluidStack getDrainableStack() {return mFluidOut;}
+ @Override public FluidStack setDrainableStack(FluidStack aFluid){mFluidOut = aFluid; return mFluidOut;}
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_BasicMachine(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), mGUIName, GT_Utility.isStringValid(mNEIName) ? mNEIName : getRecipeList() != null ? getRecipeList().mUnlocalizedName : "");
+ }
+
+ @Override
+ public void initDefaultModes(NBTTagCompound aNBT) {
+ mMainFacing = -1;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("mFluidTransfer", mFluidTransfer);
+ aNBT.setBoolean("mItemTransfer", mItemTransfer);
+ aNBT.setBoolean("mHasBeenUpdated", mHasBeenUpdated);
+ aNBT.setBoolean("mAllowInputFromOutputSide", mAllowInputFromOutputSide);
+ aNBT.setInteger("mEUt", mEUt);
+ aNBT.setInteger("mMainFacing", mMainFacing);
+ aNBT.setInteger("mProgresstime", mProgresstime);
+ aNBT.setInteger("mMaxProgresstime", mMaxProgresstime);
+ if (mOutputFluid != null) aNBT.setTag("mOutputFluid", mOutputFluid.writeToNBT(new NBTTagCompound()));
+ if (mFluidOut != null) aNBT.setTag("mFluidOut", mFluidOut.writeToNBT(new NBTTagCompound()));
+
+ for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null) aNBT.setTag("mOutputItem"+i, mOutputItems[i].writeToNBT(new NBTTagCompound()));
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mFluidTransfer = aNBT.getBoolean("mFluidTransfer");
+ mItemTransfer = aNBT.getBoolean("mItemTransfer");
+ mHasBeenUpdated = aNBT.getBoolean("mHasBeenUpdated");
+ mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide");
+ mEUt = aNBT.getInteger("mEUt");
+ mMainFacing = aNBT.getInteger("mMainFacing");
+ mProgresstime = aNBT.getInteger("mProgresstime");
+ mMaxProgresstime = aNBT.getInteger("mMaxProgresstime");
+ mOutputFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mOutputFluid"));
+ mFluidOut = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluidOut"));
+
+ for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem"+i);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+
+ if (aBaseMetaTileEntity.isServerSide()) {
+ mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3;
+ mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3;
+
+ doDisplayThings();
+
+ boolean tSucceeded = false;
+
+ if (mMaxProgresstime > 0 && (mProgresstime >= 0 || aBaseMetaTileEntity.isAllowedToWork())) {
+ aBaseMetaTileEntity.setActive(true);
+ if (mProgresstime < 0 || drainEnergyForProcess(mEUt)) {
+ if (++mProgresstime>=mMaxProgresstime) {
+ for (int i = 0; i < mOutputItems.length; i++) for (int j = 0; j < mOutputItems.length; j++) if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot()+((j+i)%mOutputItems.length), mOutputItems[i])) break;
+ if (mOutputFluid != null) if (getDrainableStack() == null) setDrainableStack(mOutputFluid.copy()); else if (mOutputFluid.isFluidEqual(getDrainableStack())) getDrainableStack().amount += mOutputFluid.amount;
+ for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = null;
+ mOutputFluid = null;
+ mEUt = 0;
+ mProgresstime = 0;
+ mMaxProgresstime = 0;
+ mStuttering = false;
+ tSucceeded = true;
+ endProcess();
+ }
+ if (mProgresstime > 5) mStuttering = false;
+ } else {
+ if (!mStuttering) {
+ stutterProcess();
+ if (canHaveInsufficientEnergy()) mProgresstime = -100;
+ mStuttering = true;
+ }
+ }
+ } else {
+ aBaseMetaTileEntity.setActive(false);
+ }
+
+ boolean tRemovedOutputFluid = false;
+
+ if (doesAutoOutputFluids() && getDrainableStack() != null && aBaseMetaTileEntity.getFrontFacing() != mMainFacing && (tSucceeded || aTick%20 == 0)) {
+ IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing());
+ if (tTank != null) {
+ FluidStack tDrained = drain(1000, false);
+ if (tDrained != null) {
+ int tFilledAmount = tTank.fill(ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()), tDrained, false);
+ if (tFilledAmount > 0) tTank.fill(ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()), drain(tFilledAmount, true), true);
+ }
+ }
+ if (getDrainableStack() == null) tRemovedOutputFluid = true;
+ }
+
+ if (doesAutoOutput() && !isOutputEmpty() && aBaseMetaTileEntity.getFrontFacing() != mMainFacing && (tSucceeded || mOutputBlocked%300 == 1 || aBaseMetaTileEntity.hasInventoryBeenModified() || aTick%600 == 0)) {
+ TileEntity tTileEntity2 = aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing());
+ for (int i = 0, tCosts = 1; i < mOutputItems.length && tCosts > 0 && aBaseMetaTileEntity.isUniversalEnergyStored(128); i++) {
+ tCosts = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, tTileEntity2, aBaseMetaTileEntity.getFrontFacing(), aBaseMetaTileEntity.getBackFacing(), null, false, (byte)64, (byte)1, (byte)64, (byte)1);
+ if (tCosts > 0) aBaseMetaTileEntity.decreaseStoredEnergyUnits(tCosts, true);
+ }
+ }
+
+ if (mOutputBlocked != 0) if (isOutputEmpty()) mOutputBlocked = 0; else mOutputBlocked++;
+
+ if (allowToCheckRecipe()) {
+ if (mMaxProgresstime <= 0 && aBaseMetaTileEntity.isAllowedToWork() && (tRemovedOutputFluid || tSucceeded || aBaseMetaTileEntity.hasInventoryBeenModified() || aTick%600 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) && hasEnoughEnergyToCheckRecipe()) {
+ if (checkRecipe() == 2) {
+ if (mInventory[3] != null && mInventory[3].stackSize <= 0) mInventory[3] = null;
+ for (int i=getInputSlot() , j=i+mInputSlotCount ; i<j; i++) if (mInventory[i]!=null&&mInventory[i].stackSize<=0) mInventory[i]=null;
+ for (int i=0; i<mOutputItems.length; i++) {
+ mOutputItems[i] = GT_Utility.copy(mOutputItems[i]);
+ if (mOutputItems[i]!=null&&mOutputItems[i].stackSize>64) mOutputItems[i].stackSize=64;
+ mOutputItems[i] = GT_OreDictUnificator.get(true, mOutputItems[i]);
+ }
+ if (mFluid != null && mFluid.amount <= 0) mFluid = null;
+ mMaxProgresstime = Math.max(1, mMaxProgresstime);
+ if (GT_Utility.isDebugItem(mInventory[dechargerSlotStartIndex()])) {
+ mEUt = mMaxProgresstime = 1;
+ }
+ startProcess();
+ } else {
+ mMaxProgresstime = 0;
+ for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = null;
+ mOutputFluid = null;
+ }
+ }
+ } else {
+ if (!mStuttering) {
+ stutterProcess();
+ mStuttering = true;
+ }
+ }
+ }
+ }
+
+ protected void doDisplayThings() {
+ if (mMainFacing < 2 && getBaseMetaTileEntity().getFrontFacing() > 1) {
+ mMainFacing = getBaseMetaTileEntity().getFrontFacing();
+ }
+ if (mMainFacing >= 2 && !mHasBeenUpdated) {
+ mHasBeenUpdated = true;
+ getBaseMetaTileEntity().setFrontFacing(getBaseMetaTileEntity().getBackFacing());
+ }
+
+ if (displaysInputFluid()) {
+ int tDisplayStackSlot = OTHER_SLOT_COUNT+mInputSlotCount+mOutputItems.length;
+ if (getFillableStack() == null) {
+ if (ItemList.Display_Fluid.isStackEqual(mInventory[tDisplayStackSlot], true, true)) mInventory[tDisplayStackSlot] = null;
+ } else {
+ mInventory[tDisplayStackSlot] = GT_Utility.getFluidDisplayStack(getFillableStack(), displaysStackSize());
+ }
+ }
+ }
+
+ protected boolean hasEnoughEnergyToCheckRecipe() {
+ return getBaseMetaTileEntity().isUniversalEnergyStored(getMinimumStoredEU() / 2);
+ }
+
+ protected boolean drainEnergyForProcess(long aEUt) {
+ return getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEUt, false);
+ }
+
+ protected void calculateOverclockedNess(GT_Recipe aRecipe) {
+ calculateOverclockedNess(aRecipe.mEUt, aRecipe.mDuration);
+ }
+
+ protected void calculateOverclockedNess(int aEUt, int aDuration) {
+ if (aEUt <= 16) {
+ mEUt = aEUt * (1 << (mTier-1)) * (1 << (mTier-1));
+ mMaxProgresstime = aDuration / (1 << (mTier-1));
+ } else {
+ mEUt = aEUt;
+ mMaxProgresstime = aDuration;
+ while (mEUt <= V[mTier-1] * mAmperage) {
+ mEUt *= 4;
+ mMaxProgresstime /= 2;
+ }
+ }
+ }
+
+ protected ItemStack getSpecialSlot() {
+ return mInventory[3];
+ }
+
+ protected ItemStack getOutputAt(int aIndex) {
+ return mInventory[getOutputSlot()+aIndex];
+ }
+
+ protected ItemStack[] getAllOutputs() {
+ ItemStack[] rOutputs = new ItemStack[mOutputItems.length];
+ for (int i = 0; i < mOutputItems.length; i++) rOutputs[i] = getOutputAt(i);
+ return rOutputs;
+ }
+
+ protected boolean canOutput(GT_Recipe aRecipe) {
+ return aRecipe != null && (aRecipe.mNeedsEmptyOutput ? isOutputEmpty() && getDrainableStack() == null : canOutput(aRecipe.getFluidOutput(0)) && canOutput(aRecipe.mOutputs));
+ }
+
+ protected boolean canOutput(ItemStack... aOutputs) {
+ if (aOutputs == null) return true;
+ ItemStack[] tOutputSlots = getAllOutputs();
+ for (int i = 0; i < tOutputSlots.length && i < aOutputs.length; i++) if (tOutputSlots[i] != null && aOutputs[i] != null && (!GT_Utility.areStacksEqual(tOutputSlots[i], aOutputs[i], false) || tOutputSlots[i].stackSize + aOutputs[i].stackSize > tOutputSlots[i].getMaxStackSize())) {
+ mOutputBlocked++;
+ return false;
+ }
+ return true;
+ }
+
+ protected boolean canOutput(FluidStack aOutput) {
+ return getDrainableStack() == null || aOutput == null || (getDrainableStack().isFluidEqual(aOutput) && (getDrainableStack().amount <= 0 || getDrainableStack().amount + aOutput.amount <= getCapacity()));
+ }
+
+ protected ItemStack getInputAt(int aIndex) {
+ return mInventory[getInputSlot()+aIndex];
+ }
+
+ protected ItemStack[] getAllInputs() {
+ ItemStack[] rInputs = new ItemStack[mInputSlotCount];
+ for (int i = 0; i < mInputSlotCount; i++) rInputs[i] = getInputAt(i);
+ return rInputs;
+ }
+
+ protected boolean isOutputEmpty() {
+ boolean rIsEmpty = true;
+ for (ItemStack tOutputSlotContent : getAllOutputs()) if (tOutputSlotContent != null) rIsEmpty = false;
+ return rIsEmpty;
+ }
+
+ protected boolean displaysInputFluid() {
+ return true;
+ }
+
+ protected boolean displaysOutputFluid() {
+ return true;
+ }
+
+ @Override
+ public void onValueUpdate(byte aValue) {
+ mMainFacing = aValue;
+ }
+
+ @Override
+ public byte getUpdateData() {
+ return (byte)mMainFacing;
+ }
+
+ @Override
+ public void doSound(byte aIndex, double aX, double aY, double aZ) {
+ super.doSound(aIndex, aX, aY, aZ);
+ if (aIndex == 8) GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(210), 100, 1.0F, aX, aY, aZ);
+ }
+
+ public boolean doesAutoOutput() {
+ return mItemTransfer;
+ }
+
+ public boolean doesAutoOutputFluids() {
+ return mFluidTransfer;
+ }
+
+ public boolean allowToCheckRecipe() {
+ return true;
+ }
+
+ public boolean showPipeFacing() {
+ return true;
+ }
+
+ /** Called whenever the Machine successfully started a Process, useful for Sound Effects */
+ public void startProcess() {
+ //
+ }
+
+ /** Called whenever the Machine successfully finished a Process, useful for Sound Effects */
+ public void endProcess() {
+ //
+ }
+
+ /** Called whenever the Machine aborted a Process, useful for Sound Effects */
+ public void abortProcess() {
+ //
+ }
+
+ /** Called whenever the Machine aborted a Process but still works on it, useful for Sound Effects */
+ public void stutterProcess() {
+ if (useStandardStutterSound()) sendSound((byte)8);
+ }
+
+ /** If this Machine can have the Insufficient Energy Line Problem */
+ public boolean canHaveInsufficientEnergy() {
+ return true;
+ }
+
+ public boolean useStandardStutterSound() {
+ return true;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ return new String[] {
+ mNEIName,
+ "Progress:", (mProgresstime/20)+" secs",
+ (mMaxProgresstime/20)+" secs",
+ "Stored Energy:",
+ getBaseMetaTileEntity().getStoredEU()+"EU",
+ getBaseMetaTileEntity().getEUCapacity()+"EU"};
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aSide == getBaseMetaTileEntity().getFrontFacing() || aSide == mMainFacing) {
+ mAllowInputFromOutputSide = !mAllowInputFromOutputSide;
+ GT_Utility.sendChatToPlayer(aPlayer, mAllowInputFromOutputSide?"Input from Output Side allowed":"Input from Output Side forbidden");
+ }
+ }
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID) {
+ return (aSide!=mMainFacing||GregTech_API.getCoverBehavior(aCoverID.toStack()).isGUIClickable(aSide, GT_Utility.stackToInt(aCoverID.toStack()), 0, getBaseMetaTileEntity()));
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide!=mMainFacing&&aIndex>=getOutputSlot()&&aIndex<getOutputSlot()+mOutputItems.length;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ if (aSide==mMainFacing||aIndex<getInputSlot()||aIndex>=getInputSlot()+mInputSlotCount||(!mAllowInputFromOutputSide&&aSide==aBaseMetaTileEntity.getFrontFacing())) return false;
+ for (int i=getInputSlot(), j=i+mInputSlotCount; i<j; i++) if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(aStack), mInventory[i])) return i==aIndex;
+ return true;
+ }
+
+ /** @return the Recipe List which is used for this Machine, this is a useful Default Handler */
+ public GT_Recipe_Map getRecipeList() {
+ return null;
+ }
+
+ /** return values for checkRecipe() */
+ protected static final int
+ DID_NOT_FIND_RECIPE = 0,
+ FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1,
+ FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2;
+
+ /** Contains the Recipe which has been previously used, or null if there was no previous Recipe, which could have been buffered */
+ protected GT_Recipe mLastRecipe = null;
+
+ /**
+ * Override this to check the Recipes yourself, super calls to this could be useful if you just want to add a special case
+ *
+ * I thought about Enum too, but Enum doesn't add support for people adding other return Systems.
+ *
+ * Funny how Eclipse marks the word Enum as not correctly spelled.
+ *
+ * @return see constants above
+ */
+ public int checkRecipe() {
+ GT_Recipe_Map tMap = getRecipeList();
+ if (tMap == null) return DID_NOT_FIND_RECIPE;
+ GT_Recipe tRecipe = tMap.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, V[mTier], new FluidStack[] {getFillableStack()}, getSpecialSlot(), getAllInputs());
+ if (tRecipe == null) return DID_NOT_FIND_RECIPE;
+ if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe;
+ if (!canOutput(tRecipe)) {mOutputBlocked++; return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS;}
+ if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] {getFillableStack()}, getAllInputs())) return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS;
+
+ for (int i = 0; i < mOutputItems.length; i++) if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) mOutputItems[i] = tRecipe.getOutput(i);
+ mOutputFluid = tRecipe.getFluidOutput(0);
+ calculateOverclockedNess(tRecipe);
+ return FOUND_AND_SUCCESSFULLY_USED_RECIPE;
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1]};
+ }
+
+ public ITexture[] getBottomFacingPipeActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getBottomFacingPipeInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeActive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeInactive(byte aColor) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor+1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java
new file mode 100644
index 0000000000..3d923db52c
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java
@@ -0,0 +1,187 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.D1;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileEntity_BasicMachine {
+ public GT_MetaTileEntity_BasicMachine_Bronze(int aID, String aName, String aNameRegional, String aDescription, int aInputSlotCount, int aOutputSlotCount, boolean aBricked) {
+ super(aID, aName, aNameRegional, aBricked?1:0, 0, aDescription, aInputSlotCount, aOutputSlotCount, "", "");
+ }
+
+ public GT_MetaTileEntity_BasicMachine_Bronze(String aName, String aDescription, ITexture[][][] aTextures, int aInputSlotCount, int aOutputSlotCount, boolean aBricked) {
+ super(aName, aBricked?1:0, 0, aDescription, aTextures, aInputSlotCount, aOutputSlotCount, "", "");
+ }
+ /*
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_BasicMachine_Bronze(mTier, mDescription, mTextures);
+ }
+ */
+ public boolean mNeedsSteamVenting = false;
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("mNeedsSteamVenting", mNeedsSteamVenting);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mNeedsSteamVenting = aNBT.getBoolean("mNeedsSteamVenting");
+ }
+
+ @Override public boolean isElectric() {return false;}
+ @Override public boolean isEnetInput() {return false;}
+ @Override public boolean isInputFacing(byte aSide) {return false;}
+ @Override public long maxEUStore() {return 0;}
+ @Override public long maxEUInput() {return 0;}
+ @Override public int rechargerSlotCount() {return 0;}
+ @Override public int dechargerSlotCount() {return 0;}
+
+ @Override public boolean isSteampowered() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return super.isFacingValid(aFacing) && aFacing != mMainFacing;}
+ @Override public long getMinimumStoredEU() {return 1000;}
+ @Override public long maxSteamStore() {return 16000;}
+ @Override public boolean isLiquidInput (byte aSide) {return aSide != mMainFacing;}
+ @Override public boolean isLiquidOutput(byte aSide) {return aSide != mMainFacing;}
+
+ @Override
+ public boolean doesAutoOutput() {
+ return false;
+ }
+
+ @Override
+ public boolean allowToCheckRecipe() {
+ if (mNeedsSteamVenting && getBaseMetaTileEntity().getCoverIDAtSide(getBaseMetaTileEntity().getFrontFacing()) == 0 && !GT_Utility.hasBlockHitBox(getBaseMetaTileEntity().getWorld(), getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1))) {
+ sendSound((byte)9);
+ mNeedsSteamVenting = false;
+ try {
+ for (EntityLivingBase tLiving : (ArrayList<EntityLivingBase>)getBaseMetaTileEntity().getWorld().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1), getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1)+1, getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1)+1, getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1)+1))) {
+ GT_Utility.applyHeatDamage(tLiving, getSteamDamage());
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ }
+ return !mNeedsSteamVenting;
+ }
+
+ @Override
+ public void endProcess() {
+ if (isSteampowered()) mNeedsSteamVenting = true;
+ }
+
+ @Override
+ public void doSound(byte aIndex, double aX, double aY, double aZ) {
+ super.doSound(aIndex, aX, aY, aZ);
+ if (aIndex == 9) {
+ GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ);
+ for (int l = 0; l < 8; ++l) getBaseMetaTileEntity().getWorld().spawnParticle("largesmoke", aX - 0.5 + Math.random(), aY - 0.5 + Math.random(), aZ - 0.5 + Math.random(), ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0);
+ }
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return false;
+ }
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID) {
+ return GregTech_API.getCoverBehavior(aCoverID.toStack()).isSimpleCover() && super.allowCoverOnSide(aSide, aCoverID);
+ }
+
+ public float getSteamDamage() {
+ return 6.0F;
+ }
+
+ @Override
+ public ITexture[] getSideFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getSideFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getFrontFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getFrontFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getTopFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP:Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getTopFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP:Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTopFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP:Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTopFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP:Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getSideFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getSideFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE:Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
new file mode 100644
index 0000000000..30272cee80
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
@@ -0,0 +1,319 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.enums.*;
+import gregtech.api.gui.GT_Container_BasicMachine;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Random;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_BasicMachine {
+ public static enum X {PUMP, WIRE, WIRE4, HULL, PIPE, GLASS, PLATE, MOTOR, ROTOR, SENSOR, PISTON, CIRCUIT, EMITTER, CONVEYOR, ROBOT_ARM, COIL_HEATING, COIL_ELECTRIC, STICK_MAGNETIC, STICK_DISTILLATION, BETTER_CIRCUIT, FIELD_GENERATOR, COIL_HEATING_DOUBLE, STICK_ELECTROMAGNETIC;}
+
+ private final GT_Recipe_Map mRecipes;
+ private final int mTankCapacity, mSpecialEffect;
+ private final String mSound;
+ private final boolean mSharedTank, mRequiresFluidForFiltering;
+ private final byte mGUIParameterA, mGUIParameterB;
+
+ public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, String aDescription, GT_Recipe_Map aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, int aGUIParameterA, int aGUIParameterB, String aGUIName, String aSound, boolean aSharedTank, boolean aRequiresFluidForFiltering, int aSpecialEffect, String aOverlays, Object[] aRecipe) {
+ super(aID, aName, aNameRegional, aTier, aRecipes.mAmperage, aDescription, aInputSlots, aOutputSlots, aGUIName, aRecipes.mNEIName, new ITexture[] {new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_SIDE_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_SIDE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_FRONT_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_FRONT")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_TOP_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_TOP")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_BOTTOM_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/" + aOverlays.toLowerCase() + "/OVERLAY_BOTTOM"))});
+ mSharedTank = aSharedTank;
+ mTankCapacity = aTankCapacity;
+ mSpecialEffect = aSpecialEffect;
+ mRequiresFluidForFiltering = aRequiresFluidForFiltering;
+ mRecipes = aRecipes;
+ mSound = aSound;
+ mGUIParameterA = (byte)aGUIParameterA;
+ mGUIParameterB = (byte)aGUIParameterB;
+
+ if (aRecipe != null) {
+ for (int i = 3; i < aRecipe.length; i++) {
+ if (aRecipe[i] == X.CIRCUIT) {aRecipe[i] = Tier.ELECTRIC[mTier].mManagingObject; continue;}
+ if (aRecipe[i] == X.BETTER_CIRCUIT) {aRecipe[i] = Tier.ELECTRIC[mTier].mBetterManagingObject; continue;}
+ if (aRecipe[i] == X.HULL) {aRecipe[i] = Tier.ELECTRIC[mTier].mHullObject; continue;}
+ if (aRecipe[i] == X.WIRE) {aRecipe[i] = Tier.ELECTRIC[mTier].mConductingObject; continue;}
+ if (aRecipe[i] == X.WIRE4) {aRecipe[i] = Tier.ELECTRIC[mTier].mLargerConductingObject; continue;}
+
+ if (aRecipe[i] == X.GLASS) {switch(mTier) {
+ default: aRecipe[i] = new ItemStack(Blocks.glass, 1, W); break;
+ }continue;}
+
+ if (aRecipe[i] == X.PLATE) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.plate.get(Materials.Steel); break;
+ case 2: aRecipe[i] = OrePrefixes.plate.get(Materials.Aluminium); break;
+ case 3: aRecipe[i] = OrePrefixes.plate.get(Materials.StainlessSteel); break;
+ case 4: aRecipe[i] = OrePrefixes.plate.get(Materials.Titanium); break;
+ default: aRecipe[i] = OrePrefixes.plate.get(Materials.TungstenSteel); break;
+ }continue;}
+
+ if (aRecipe[i] == X.PIPE) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.pipeMedium.get(Materials.Bronze); break;
+ case 2: aRecipe[i] = OrePrefixes.pipeMedium.get(Materials.Steel); break;
+ case 3: aRecipe[i] = OrePrefixes.pipeMedium.get(Materials.StainlessSteel); break;
+ case 4: aRecipe[i] = OrePrefixes.pipeMedium.get(Materials.Titanium); break;
+ default: aRecipe[i] = OrePrefixes.pipeMedium.get(Materials.TungstenSteel); break;
+ }continue;}
+
+ if (aRecipe[i] == X.COIL_HEATING) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.AnyCopper); break;
+ case 2: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.Cupronickel); break;
+ case 3: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.Kanthal); break;
+ case 4: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.Nichrome); break;
+ default: aRecipe[i] = OrePrefixes.wireGt08.get(Materials.Nichrome); break;
+ }continue;}
+
+ if (aRecipe[i] == X.COIL_HEATING_DOUBLE) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.wireGt04.get(Materials.AnyCopper); break;
+ case 2: aRecipe[i] = OrePrefixes.wireGt04.get(Materials.Cupronickel); break;
+ case 3: aRecipe[i] = OrePrefixes.wireGt04.get(Materials.Kanthal); break;
+ case 4: aRecipe[i] = OrePrefixes.wireGt04.get(Materials.Nichrome); break;
+ default: aRecipe[i] = OrePrefixes.wireGt16.get(Materials.Nichrome); break;
+ }continue;}
+
+ if (aRecipe[i] == X.STICK_DISTILLATION) {switch(mTier) {
+ default: aRecipe[i] = OrePrefixes.stick.get(Materials.Blaze); break;
+ }continue;}
+
+ if (aRecipe[i] == X.STICK_MAGNETIC) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.stick.get(Materials.IronMagnetic); break;
+ case 2: case 3: aRecipe[i] = OrePrefixes.stick.get(Materials.SteelMagnetic); break;
+ default: aRecipe[i] = OrePrefixes.stick.get(Materials.NeodymiumMagnetic); break;
+ }continue;}
+
+ if (aRecipe[i] == X.STICK_ELECTROMAGNETIC) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.stick.get(Materials.AnyIron); break;
+ case 2: case 3: aRecipe[i] = OrePrefixes.stick.get(Materials.Steel); break;
+ case 4: aRecipe[i] = OrePrefixes.stick.get(Materials.Neodymium); break;
+ default: aRecipe[i] = OrePrefixes.stick.get(Materials.VanadiumGallium); break;
+ }continue;}
+
+ if (aRecipe[i] == X.COIL_ELECTRIC) {switch(mTier) {
+ case 0: aRecipe[i] = OrePrefixes.wireGt01.get(Materials.Tin); break;
+ case 1: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.Tin); break;
+ case 2: aRecipe[i] = OrePrefixes.wireGt02.get(Materials.AnyCopper); break;
+ case 3: aRecipe[i] = OrePrefixes.wireGt04.get(Materials.AnyCopper); break;
+ case 4: aRecipe[i] = OrePrefixes.wireGt08.get(Materials.AnnealedCopper); break;
+ default: aRecipe[i] = OrePrefixes.wireGt16.get(Materials.AnnealedCopper); break;
+ }continue;}
+
+ if (aRecipe[i] == X.ROBOT_ARM) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Robot_Arm_LV; break;
+ case 2: aRecipe[i] = ItemList.Robot_Arm_MV; break;
+ case 3: aRecipe[i] = ItemList.Robot_Arm_HV; break;
+ case 4: aRecipe[i] = ItemList.Robot_Arm_EV; break;
+ case 5: aRecipe[i] = ItemList.Robot_Arm_IV; break;
+ case 6: aRecipe[i] = ItemList.Robot_Arm_LuV; break;
+ case 7: aRecipe[i] = ItemList.Robot_Arm_ZPM; break;
+ default: aRecipe[i] = ItemList.Robot_Arm_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.PUMP) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Electric_Pump_LV; break;
+ case 2: aRecipe[i] = ItemList.Electric_Pump_MV; break;
+ case 3: aRecipe[i] = ItemList.Electric_Pump_HV; break;
+ case 4: aRecipe[i] = ItemList.Electric_Pump_EV; break;
+ case 5: aRecipe[i] = ItemList.Electric_Pump_IV; break;
+ case 6: aRecipe[i] = ItemList.Electric_Pump_LuV; break;
+ case 7: aRecipe[i] = ItemList.Electric_Pump_ZPM; break;
+ default: aRecipe[i] = ItemList.Electric_Pump_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.ROTOR) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = OrePrefixes.rotor.get(Materials.Tin); break;
+ case 2: aRecipe[i] = OrePrefixes.rotor.get(Materials.Bronze); break;
+ case 3: aRecipe[i] = OrePrefixes.rotor.get(Materials.Steel); break;
+ case 4: aRecipe[i] = OrePrefixes.rotor.get(Materials.StainlessSteel); break;
+ case 5: aRecipe[i] = OrePrefixes.rotor.get(Materials.TungstenSteel); break;
+ case 6: aRecipe[i] = OrePrefixes.rotor.get(Materials.TungstenSteel); break;
+ case 7: aRecipe[i] = OrePrefixes.rotor.get(Materials.TungstenSteel); break;
+ default: aRecipe[i] = OrePrefixes.rotor.get(Materials.TungstenSteel); break;
+ }continue;}
+
+ if (aRecipe[i] == X.MOTOR) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Electric_Motor_LV; break;
+ case 2: aRecipe[i] = ItemList.Electric_Motor_MV; break;
+ case 3: aRecipe[i] = ItemList.Electric_Motor_HV; break;
+ case 4: aRecipe[i] = ItemList.Electric_Motor_EV; break;
+ case 5: aRecipe[i] = ItemList.Electric_Motor_IV; break;
+ case 6: aRecipe[i] = ItemList.Electric_Motor_LuV; break;
+ case 7: aRecipe[i] = ItemList.Electric_Motor_ZPM; break;
+ default: aRecipe[i] = ItemList.Electric_Motor_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.PISTON) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Electric_Piston_LV; break;
+ case 2: aRecipe[i] = ItemList.Electric_Piston_MV; break;
+ case 3: aRecipe[i] = ItemList.Electric_Piston_HV; break;
+ case 4: aRecipe[i] = ItemList.Electric_Piston_EV; break;
+ case 5: aRecipe[i] = ItemList.Electric_Piston_IV; break;
+ case 6: aRecipe[i] = ItemList.Electric_Piston_LuV; break;
+ case 7: aRecipe[i] = ItemList.Electric_Piston_ZPM; break;
+ default: aRecipe[i] = ItemList.Electric_Piston_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.CONVEYOR) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Conveyor_Module_LV; break;
+ case 2: aRecipe[i] = ItemList.Conveyor_Module_MV; break;
+ case 3: aRecipe[i] = ItemList.Conveyor_Module_HV; break;
+ case 4: aRecipe[i] = ItemList.Conveyor_Module_EV; break;
+ case 5: aRecipe[i] = ItemList.Conveyor_Module_IV; break;
+ case 6: aRecipe[i] = ItemList.Conveyor_Module_LuV; break;
+ case 7: aRecipe[i] = ItemList.Conveyor_Module_ZPM; break;
+ default: aRecipe[i] = ItemList.Conveyor_Module_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.EMITTER) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Emitter_LV; break;
+ case 2: aRecipe[i] = ItemList.Emitter_MV; break;
+ case 3: aRecipe[i] = ItemList.Emitter_HV; break;
+ case 4: aRecipe[i] = ItemList.Emitter_EV; break;
+ case 5: aRecipe[i] = ItemList.Emitter_IV; break;
+ case 6: aRecipe[i] = ItemList.Emitter_LuV; break;
+ case 7: aRecipe[i] = ItemList.Emitter_ZPM; break;
+ default: aRecipe[i] = ItemList.Emitter_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.SENSOR) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Sensor_LV; break;
+ case 2: aRecipe[i] = ItemList.Sensor_MV; break;
+ case 3: aRecipe[i] = ItemList.Sensor_HV; break;
+ case 4: aRecipe[i] = ItemList.Sensor_EV; break;
+ case 5: aRecipe[i] = ItemList.Sensor_IV; break;
+ case 6: aRecipe[i] = ItemList.Sensor_LuV; break;
+ case 7: aRecipe[i] = ItemList.Sensor_ZPM; break;
+ default: aRecipe[i] = ItemList.Sensor_UV; break;
+ }continue;}
+
+ if (aRecipe[i] == X.FIELD_GENERATOR) {switch(mTier) {
+ case 0: case 1: aRecipe[i] = ItemList.Field_Generator_LV; break;
+ case 2: aRecipe[i] = ItemList.Field_Generator_MV; break;
+ case 3: aRecipe[i] = ItemList.Field_Generator_HV; break;
+ case 4: aRecipe[i] = ItemList.Field_Generator_EV; break;
+ case 5: aRecipe[i] = ItemList.Field_Generator_IV; break;
+ case 6: aRecipe[i] = ItemList.Field_Generator_LuV; break;
+ case 7: aRecipe[i] = ItemList.Field_Generator_ZPM; break;
+ default: aRecipe[i] = ItemList.Field_Generator_UV; break;
+ }continue;}
+
+ if (aRecipe[i] instanceof X) throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + mTier);
+ }
+
+ if (!GT_ModHandler.addCraftingRecipe(getStackForm(1), RecipeBits.DISMANTLEABLE | RecipeBits.BUFFERED | RecipeBits.NOT_REMOVABLE | RecipeBits.REVERSIBLE, aRecipe)) {
+ throw new IllegalArgumentException("INVALID CRAFTING RECIPE FOR: " + getStackForm(1).getDisplayName());
+ }
+ }
+ }
+
+ public GT_MetaTileEntity_BasicMachine_GT_Recipe(String aName, int aTier, String aDescription, GT_Recipe_Map aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, int aAmperage, int aGUIParameterA, int aGUIParameterB, ITexture[][][] aTextures, String aGUIName, String aNEIName, String aSound, boolean aSharedTank, boolean aRequiresFluidForFiltering, int aSpecialEffect) {
+ super(aName, aTier, aAmperage, aDescription, aTextures, aInputSlots, aOutputSlots, aGUIName, aNEIName);
+ mSharedTank = aSharedTank;
+ mTankCapacity = aTankCapacity;
+ mSpecialEffect = aSpecialEffect;
+ mRequiresFluidForFiltering = aRequiresFluidForFiltering;
+ mRecipes = aRecipes;
+ mSound = aSound;
+ mGUIParameterA = (byte)aGUIParameterA;
+ mGUIParameterB = (byte)aGUIParameterB;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_BasicMachine_GT_Recipe(mName, mTier, mDescription, mRecipes, mInputSlotCount, mOutputItems==null?0:mOutputItems.length, mTankCapacity, mAmperage, mGUIParameterA, mGUIParameterB, mTextures, mGUIName, mNEIName, mSound, mSharedTank, mRequiresFluidForFiltering, mSpecialEffect);
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_BasicMachine(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), mGUIName, GT_Utility.isStringValid(mNEIName) ? mNEIName : getRecipeList() != null ? getRecipeList().mUnlocalizedName : "", mGUIParameterA, mGUIParameterB);
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) return false;
+ if (mInventory[aIndex] != null) return true;
+ switch (mInputSlotCount) {
+ case 0: return false;
+ case 1: return getFillableStack() == null ? !mRequiresFluidForFiltering && getRecipeList().containsInput(aStack) : null!=getRecipeList().findRecipe(getBaseMetaTileEntity(), mLastRecipe, true, V[mTier], new FluidStack[] {getFillableStack()}, getSpecialSlot(), new ItemStack[] {aStack});
+ case 2: return (!mRequiresFluidForFiltering || getFillableStack() != null) && (((getInputAt(0)!=null&&getInputAt(1)!=null) || (getInputAt(0)==null&&getInputAt(1)==null?getRecipeList().containsInput(aStack):null!=getRecipeList().findRecipe(getBaseMetaTileEntity(), mLastRecipe, true, V[mTier], new FluidStack[] {getFillableStack()}, getSpecialSlot(), aIndex == getInputSlot() ? new ItemStack[] {aStack, getInputAt(1)} : new ItemStack[] {getInputAt(0), aStack}))));
+ default: return getRecipeList().containsInput(aStack);
+ }
+ }
+
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) {
+ switch (mSpecialEffect) {
+ case 0:
+ break;
+ case 1:
+ if (aBaseMetaTileEntity.getFrontFacing() != 1 && aBaseMetaTileEntity.getCoverIDAtSide((byte)1) == 0 && !aBaseMetaTileEntity.getOpacityAtSide((byte)1)) {
+ Random tRandom = aBaseMetaTileEntity.getWorld().rand;
+ aBaseMetaTileEntity.getWorld().spawnParticle("smoke", aBaseMetaTileEntity.getXCoord() + 0.8F -tRandom.nextFloat()*0.6F, aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat()*0.2F, aBaseMetaTileEntity.getZCoord() + 0.8F -tRandom.nextFloat()*0.6F, 0.0D, 0.0D, 0.0D);
+ }
+ break;
+ }
+ }
+ }
+
+ @Override
+ public GT_Recipe_Map getRecipeList() {
+ return mRecipes;
+ }
+
+ @Override
+ public int getCapacity() {
+ return mTankCapacity;
+ }
+
+ @Override
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1 && GT_Utility.isStringValid(mSound)) GT_Utility.doSoundAtClient(mSound, 100, 1.0F, aX, aY, aZ);
+ }
+
+ @Override
+ public void startProcess() {
+ if (GT_Utility.isStringValid(mSound)) sendLoopStart((byte)1);
+ }
+
+ @Override
+ public FluidStack getFillableStack() {
+ return mSharedTank ? getDrainableStack() : super.getFillableStack();
+ }
+
+ @Override
+ public FluidStack setFillableStack(FluidStack aFluid) {
+ return mSharedTank ? setDrainableStack(aFluid) : super.setFillableStack(aFluid);
+ }
+
+ @Override
+ protected boolean displaysOutputFluid() {
+ return !mSharedTank;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java
new file mode 100644
index 0000000000..a9a172bb17
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java
@@ -0,0 +1,103 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.objects.GT_RenderedTexture;
+
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public abstract class GT_MetaTileEntity_BasicMachine_Steel extends GT_MetaTileEntity_BasicMachine_Bronze {
+ public GT_MetaTileEntity_BasicMachine_Steel(int aID, String aName, String aNameRegional, String aDescription, int aInputSlotCount, int aOutputSlotCount, boolean aBricked) {
+ super(aID, aName, aNameRegional, aDescription, aInputSlotCount, aOutputSlotCount, aBricked);
+ }
+
+ public GT_MetaTileEntity_BasicMachine_Steel(String aName, String aDescription, ITexture[][][] aTextures, int aInputSlotCount, int aOutputSlotCount, boolean aBricked) {
+ super(aName, aDescription, aTextures, aInputSlotCount, aOutputSlotCount, aBricked);
+ }
+ /*
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_BasicMachine_Steel(mTier, mDescription, mTextures);
+ }
+ */
+ @Override
+ public float getSteamDamage() {
+ return 12.0F;
+ }
+
+ @Override
+ public ITexture[] getSideFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getSideFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getFrontFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getFrontFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getTopFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_TOP:Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getTopFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_TOP:Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa))};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getBottomFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM:Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTopFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_TOP:Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTopFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_TOP:Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getSideFacingPipeActive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getSideFacingPipeInactive(byte aColor) {
+ return new ITexture[] {new GT_RenderedTexture(mTier==1?Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE:Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java
new file mode 100644
index 0000000000..594411c3dd
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java
@@ -0,0 +1,206 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.gui.GT_Container_BasicTank;
+import gregtech.api.gui.GT_GUIContainer_BasicTank;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.FluidStack;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my generic Tanks. Filling and emptying behavior have to be implemented manually
+ */
+public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_TieredMachineBlock {
+
+ public FluidStack mFluid;
+
+ /**
+ * @param aInvSlotCount should be 3
+ */
+ public GT_MetaTileEntity_BasicTank(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_BasicTank(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return aIndex != getStackDisplaySlot();}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound()));
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid"));
+ }
+
+ public abstract boolean doesFillContainers();
+ public abstract boolean doesEmptyContainers();
+ public abstract boolean canTankBeFilled();
+ public abstract boolean canTankBeEmptied();
+ public abstract boolean displaysItemStack();
+ public abstract boolean displaysStackSize();
+ public int getInputSlot() {return 0;}
+ public int getOutputSlot() {return 1;}
+ public int getStackDisplaySlot() {return 2;}
+
+ public boolean isFluidInputAllowed(FluidStack aFluid) {return true;}
+ public boolean isFluidChangingAllowed() {return true;}
+
+ public FluidStack getFillableStack() {return mFluid;}
+ public FluidStack setFillableStack(FluidStack aFluid) {mFluid = aFluid; return mFluid;}
+ public FluidStack getDrainableStack() {return mFluid;}
+ public FluidStack setDrainableStack(FluidStack aFluid) {mFluid = aFluid; return mFluid;}
+ public FluidStack getDisplayedFluid() {return getDrainableStack();}
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_BasicTank(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_BasicTank(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ }
+
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0) setFillableStack(null);
+
+ if (displaysItemStack() && getStackDisplaySlot() >= 0 && getStackDisplaySlot() < mInventory.length) {
+ if (getDisplayedFluid() == null) {
+ if (ItemList.Display_Fluid.isStackEqual(mInventory[getStackDisplaySlot()], true, true)) mInventory[getStackDisplaySlot()] = null;
+ } else {
+ mInventory[getStackDisplaySlot()] = GT_Utility.getFluidDisplayStack(getDisplayedFluid(), displaysStackSize());
+ }
+ }
+
+ if (doesEmptyContainers()) {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true);
+ if (tFluid != null && isFluidInputAllowed(tFluid)) {
+ if (getFillableStack() == null) {
+ if (isFluidInputAllowed(tFluid) && tFluid.amount <= getCapacity()) {
+ if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), GT_Utility.getContainerItem(mInventory[getInputSlot()], true), 1)) {
+ setFillableStack(tFluid.copy());
+ aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1);
+ }
+ }
+ } else {
+ if (tFluid.isFluidEqual(getFillableStack()) && tFluid.amount + getFillableStack().amount <= getCapacity()) {
+ if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), GT_Utility.getContainerItem(mInventory[getInputSlot()], true), 1)) {
+ getFillableStack().amount+=tFluid.amount;
+ aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1);
+ }
+ }
+ }
+ }
+ }
+
+ if (doesFillContainers()) {
+ ItemStack tOutput = GT_Utility.fillFluidContainer(getDrainableStack(), mInventory[getInputSlot()], false, true);
+ if (tOutput != null && aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tOutput, 1)) {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(tOutput, true);
+ aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1);
+ if (tFluid != null) getDrainableStack().amount -= tFluid.amount;
+ if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) setDrainableStack(null);
+ }
+ }
+ }
+ }
+
+ @Override
+ public FluidStack getFluid() {
+ return getDrainableStack();
+ }
+
+ @Override
+ public int getFluidAmount() {
+ return getDrainableStack() != null ? getDrainableStack().amount : 0;
+ }
+
+ @Override
+ public int fill(FluidStack aFluid, boolean doFill) {
+ if (aFluid == null || aFluid.getFluid().getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0;
+
+ if (getFillableStack() == null || getFillableStack().getFluid().getID() <= 0) {
+ if(aFluid.amount <= getCapacity()) {
+ if (doFill) {
+ setFillableStack(aFluid.copy());
+ getBaseMetaTileEntity().markDirty();
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ setFillableStack(aFluid.copy());
+ getFillableStack().amount = getCapacity();
+ getBaseMetaTileEntity().markDirty();
+ }
+ return getCapacity();
+ }
+
+ if (!getFillableStack().isFluidEqual(aFluid))
+ return 0;
+
+ int space = getCapacity() - getFillableStack().amount;
+ if (aFluid.amount <= space) {
+ if (doFill) {
+ getFillableStack().amount += aFluid.amount;
+ getBaseMetaTileEntity().markDirty();
+ }
+ return aFluid.amount;
+ }
+ if (doFill)
+ getFillableStack().amount = getCapacity();
+ return space;
+ }
+
+ @Override
+ public FluidStack drain(int maxDrain, boolean doDrain) {
+ if (getDrainableStack() == null || !canTankBeEmptied()) return null;
+ if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) {
+ setDrainableStack(null);
+ getBaseMetaTileEntity().markDirty();
+ return null;
+ }
+
+ int used = maxDrain;
+ if (getDrainableStack().amount < used)
+ used = getDrainableStack().amount;
+
+ if (doDrain) {
+ getDrainableStack().amount -= used;
+ getBaseMetaTileEntity().markDirty();
+ }
+
+ FluidStack drained = getDrainableStack().copy();
+ drained.amount = used;
+
+ if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) {
+ setDrainableStack(null);
+ getBaseMetaTileEntity().markDirty();
+ }
+
+ return drained;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aIndex==getOutputSlot();
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aIndex==getInputSlot();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java
new file mode 100644
index 0000000000..e6d5fe7386
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java
@@ -0,0 +1,172 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public abstract class GT_MetaTileEntity_Buffer extends GT_MetaTileEntity_TieredMachineBlock {
+ public boolean bOutput = false, bRedstoneIfFull = false, bInvert = false;
+ public int mSuccess = 0, mTargetStackSize = 0;
+
+ public GT_MetaTileEntity_Buffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription) {
+ super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription);
+ }
+
+ public GT_MetaTileEntity_Buffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[6][17][];
+ ITexture tIcon = getOverlayIcon(), tOut = new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT), tUp = new GT_RenderedTexture(Textures.BlockIcons.ARROW_UP), tDown = new GT_RenderedTexture(Textures.BlockIcons.ARROW_DOWN), tLeft = new GT_RenderedTexture(Textures.BlockIcons.ARROW_LEFT), tRight = new GT_RenderedTexture(Textures.BlockIcons.ARROW_RIGHT);
+ for (byte i = -1; i < 16; i++) {
+ rTextures[ 0][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], tOut };
+ rTextures[ 1][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], tRight , tIcon };
+ rTextures[ 2][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], tDown , tIcon };
+ rTextures[ 3][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], tLeft , tIcon };
+ rTextures[ 4][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], tUp , tIcon };
+ rTextures[ 5][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1] , tIcon };
+ }
+ return rTextures;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ if (aSide == aFacing) return mTextures[5][aColorIndex+1];
+ if (GT_Utility.getOppositeSide(aSide) == aFacing) return mTextures[0][aColorIndex+1];
+ switch (aFacing) {
+ case 0:
+ return mTextures[4][aColorIndex+1];
+ case 1:
+ return mTextures[2][aColorIndex+1];
+ case 2: switch (aSide) {
+ case 0: return mTextures[2][aColorIndex+1];
+ case 1: return mTextures[2][aColorIndex+1];
+ case 4: return mTextures[1][aColorIndex+1];
+ case 5: return mTextures[3][aColorIndex+1];
+ }
+ case 3: switch (aSide) {
+ case 0: return mTextures[4][aColorIndex+1];
+ case 1: return mTextures[4][aColorIndex+1];
+ case 4: return mTextures[3][aColorIndex+1];
+ case 5: return mTextures[1][aColorIndex+1];
+ }
+ case 4: switch (aSide) {
+ case 0: return mTextures[3][aColorIndex+1];
+ case 1: return mTextures[1][aColorIndex+1];
+ case 2: return mTextures[3][aColorIndex+1];
+ case 3: return mTextures[1][aColorIndex+1];
+ }
+ case 5: switch (aSide) {
+ case 0: return mTextures[1][aColorIndex+1];
+ case 1: return mTextures[3][aColorIndex+1];
+ case 2: return mTextures[1][aColorIndex+1];
+ case 3: return mTextures[3][aColorIndex+1];
+ }
+ }
+ return mTextures[5][aColorIndex+1];
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isValidSlot(int aIndex) {return aIndex<mInventory.length-1;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return !isOutputFacing(aSide);}
+ @Override public boolean isOutputFacing(byte aSide) {return getBaseMetaTileEntity().getBackFacing() == aSide;}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUStore() {return 512+V[mTier]*50;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxEUOutput() {return bOutput?V[mTier]:0;}
+ @Override public long maxAmperesIn() {return 2;}
+ @Override public long maxAmperesOut() {return 2;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+ public abstract ITexture getOverlayIcon();
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setBoolean("bInvert", bInvert);
+ aNBT.setBoolean("bOutput", bOutput);
+ aNBT.setBoolean("bRedstoneIfFull", bRedstoneIfFull);
+ aNBT.setInteger("mTargetStackSize", mTargetStackSize);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ bInvert = aNBT.getBoolean("bInvert");
+ bOutput = aNBT.getBoolean("bOutput");
+ bRedstoneIfFull = aNBT.getBoolean("bRedstoneIfFull");
+ mTargetStackSize = aNBT.getInteger("mTargetStackSize");
+ }
+
+ @Override
+ public void setItemNBT(NBTTagCompound aNBT) {
+ super.setItemNBT(aNBT);
+ if (mTargetStackSize > 0) aNBT.setInteger("mTargetStackSize", mTargetStackSize);
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aSide == getBaseMetaTileEntity().getBackFacing()) {
+ mTargetStackSize=(byte)((mTargetStackSize+1)%65);
+ if (mTargetStackSize == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Do not regulate Item Stack Size");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Regulate Item Stack Size to: " + mTargetStackSize);
+ }
+ }
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()) && (aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified() || aTimer%200 == 0 || mSuccess > 0)) {
+ mSuccess--;
+ moveItems(aBaseMetaTileEntity, aTimer);
+ aBaseMetaTileEntity.setGenericRedstoneOutput(bInvert);
+ if (bRedstoneIfFull) {
+ aBaseMetaTileEntity.setGenericRedstoneOutput(!bInvert);
+ for (int i = 0; i < mInventory.length; i++) if (isValidSlot(i)) {
+ if (mInventory[i] == null) {
+ aBaseMetaTileEntity.setGenericRedstoneOutput(bInvert);
+ aBaseMetaTileEntity.decreaseStoredEnergyUnits(1, true);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ int tCost = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getBackFacing()), aBaseMetaTileEntity.getBackFacing(), aBaseMetaTileEntity.getFrontFacing(), null, false, mTargetStackSize==0?64:(byte)mTargetStackSize, mTargetStackSize==0?1:(byte)mTargetStackSize, (byte)64, (byte)1);
+ if (tCost > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ mSuccess = 50;
+ aBaseMetaTileEntity.decreaseStoredEnergyUnits(Math.abs(tCost), true);
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide != aBaseMetaTileEntity.getBackFacing();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java
new file mode 100644
index 0000000000..709f3d4f7a
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java
@@ -0,0 +1,89 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.nbt.NBTTagCompound;
+
+public abstract class GT_MetaTileEntity_Hatch extends GT_MetaTileEntity_BasicTank {
+
+ public byte mMachineBlock = 0;
+
+ public static int getSlots(int aTier)
+ {
+ return aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 9 : 16;
+ }
+
+ public GT_MetaTileEntity_Hatch(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ return new ITexture[0][0][0];
+ }
+
+ public abstract ITexture[] getTexturesActive(ITexture aBaseTexture);
+ public abstract ITexture[] getTexturesInactive(ITexture aBaseTexture);
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return aSide != aFacing ? mMachineBlock != 0 ? new ITexture[] {Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]} : new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]} : mMachineBlock != 0 ? aActive ? getTexturesActive(Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]) : getTexturesInactive(Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]) : aActive ? getTexturesActive(Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]) : getTexturesInactive(Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setByte("mMachineBlock", mMachineBlock);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mMachineBlock = aNBT.getByte("mMachineBlock");
+ }
+
+ @Override
+ public final void onValueUpdate(byte aValue) {
+ mMachineBlock = (byte)(aValue & 127);
+ }
+
+ @Override
+ public final byte getUpdateData() {
+ return (byte)(mMachineBlock & 127);
+ }
+
+ @Override
+ public boolean doesFillContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean doesEmptyContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean canTankBeFilled() {
+ return false;
+ }
+
+ @Override
+ public boolean canTankBeEmptied() {
+ return false;
+ }
+
+ @Override
+ public boolean displaysItemStack() {
+ return false;
+ }
+
+ @Override
+ public boolean displaysStackSize() {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java
new file mode 100644
index 0000000000..caeec17bb1
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java
@@ -0,0 +1,54 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_Dynamo extends GT_MetaTileEntity_Hatch {
+ public GT_MetaTileEntity_Hatch_Dynamo(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 0, "Generating electric Energy from Multiblocks");
+ }
+
+ public GT_MetaTileEntity_Hatch_Dynamo(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier]};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier]};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isOutputFacing(byte aSide) {return aSide==getBaseMetaTileEntity().getFrontFacing();}
+ @Override public boolean isValidSlot(int aIndex) {return false;}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUOutput() {return V[mTier];}
+ @Override public long maxEUStore() {return 512+V[mTier+1]*2;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Dynamo(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java
new file mode 100644
index 0000000000..571fbe0135
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java
@@ -0,0 +1,55 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_Energy extends GT_MetaTileEntity_Hatch {
+ public GT_MetaTileEntity_Hatch_Energy(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 0, "Energy Injector for Multiblocks");
+ }
+
+ public GT_MetaTileEntity_Hatch_Energy(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier]};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier]};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return aSide==getBaseMetaTileEntity().getFrontFacing();}
+ @Override public boolean isValidSlot(int aIndex) {return false;}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxEUStore() {return 512+V[mTier]*8;}
+ @Override public long maxAmperesIn() {return 2;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Energy(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java
new file mode 100644
index 0000000000..64f2aaad99
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java
@@ -0,0 +1,86 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_Hatch_Input extends GT_MetaTileEntity_Hatch {
+ public GT_Recipe_Map mRecipeMap = null;
+
+ public GT_MetaTileEntity_Hatch_Input(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "Fluid Input for Multiblocks (" + 8000 * (aTier + 1) + "L)");
+ }
+
+ public GT_MetaTileEntity_Hatch_Input(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Input(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override public boolean doesFillContainers() {return true;}
+ @Override public boolean doesEmptyContainers() {return true;}
+ @Override public boolean canTankBeFilled() {return true;}
+ @Override public boolean canTankBeEmptied() {return true;}
+ @Override public boolean displaysItemStack() {return true;}
+ @Override public boolean displaysStackSize() {return false;}
+
+ public void updateSlots() {
+ if (mInventory[getInputSlot()] != null && mInventory[getInputSlot()].stackSize <= 0) mInventory[getInputSlot()] = null;
+ }
+
+ @Override
+ public boolean isFluidInputAllowed(FluidStack aFluid) {
+ return mRecipeMap == null || mRecipeMap.containsInput(aFluid);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0 && (mRecipeMap == null || mRecipeMap.containsInput(aStack) || mRecipeMap.containsInput(GT_Utility.getFluidForFilledItem(aStack, true)));
+ }
+
+ @Override
+ public int getCapacity() {
+ return 8000 * (mTier + 1);
+ }
+
+ @Override
+ public int getTankPressure() {
+ return -100;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
new file mode 100644
index 0000000000..ac66ea6ce0
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
@@ -0,0 +1,101 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.*;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch {
+ public GT_Recipe_Map mRecipeMap = null;
+
+ public GT_MetaTileEntity_Hatch_InputBus(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Item Input for Multiblocks (" + getSlots(aTier) + " slot" + (getSlots(aTier) >= 2 ? "s" : "") + ")");
+ }
+
+ public GT_MetaTileEntity_Hatch_InputBus(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aTier<1?1:aTier==1?4:aTier==2?9:16, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_InputBus(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mTier) {
+ case 0: return new GT_Container_1by1(aPlayerInventory, aBaseMetaTileEntity);
+ case 1: return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity);
+ case 2: return new GT_Container_3by3(aPlayerInventory, aBaseMetaTileEntity);
+ default: return new GT_Container_4by4(aPlayerInventory, aBaseMetaTileEntity);
+ }
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mInventory.length) {
+ case 1: return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, "Input Bus");
+ case 4: return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, "Input Bus");
+ case 9: return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, "Input Bus");
+ case 16: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Input Bus");
+ default: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Input Bus");
+ }
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ fillStacksIntoFirstSlots();
+ }
+ }
+
+ public void updateSlots() {
+ for (int i = 0; i < mInventory.length; i++) if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null;
+ fillStacksIntoFirstSlots();
+ }
+
+ protected void fillStacksIntoFirstSlots() {
+ for (int i = 0; i < mInventory.length; i++) for (int j = i + 1; j < mInventory.length; j++) if (mInventory[j] != null && (mInventory[i] == null || GT_Utility.areStacksEqual(mInventory[i], mInventory[j]))) {
+ GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte)64, (byte)1, (byte)64, (byte)1);
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == getBaseMetaTileEntity().getFrontFacing() && (mRecipeMap == null || mRecipeMap.containsInput(aStack));
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java
new file mode 100644
index 0000000000..cd04a07d41
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java
@@ -0,0 +1,108 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_MaintenanceHatch;
+import gregtech.api.gui.GT_GUIContainer_MaintenanceHatch;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Hatch_Maintenance extends GT_MetaTileEntity_Hatch {
+ public boolean mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, mSolderingTool = false, mCrowbar = false;
+
+ public GT_MetaTileEntity_Hatch_Maintenance(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 1, "For maintaining Multiblocks");
+ }
+
+ public GT_MetaTileEntity_Hatch_Maintenance(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 1, aDescription, aTextures);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {mDescription, "Cannot be shared between Multiblocks!"};
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_MAINTENANCE)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_MAINTENANCE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_DUCTTAPE)};
+ }
+
+ @Override
+ public void initDefaultModes(NBTTagCompound aNBT) {
+ getBaseMetaTileEntity().setActive(true);
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return false;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ if (aSide == aBaseMetaTileEntity.getFrontFacing()) aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_MaintenanceHatch(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_MaintenanceHatch(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (aStack == null || aPlayer == null) return;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sWrenchList ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mWrench = true;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sScrewdriverList ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mScrewdriver = true;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sSoftHammerList ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mSoftHammer = true;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sHardHammerList ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mHardHammer = true;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sCrowbarList ) && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mCrowbar = true;
+ if (GT_ModHandler.useSolderingIron(aStack, aPlayer)) mSolderingTool = true;
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aStack, "craftingDuctTape")) {
+ mWrench = mScrewdriver = mSoftHammer = mHardHammer = mCrowbar = mSolderingTool = true;
+ getBaseMetaTileEntity().setActive(false);
+ aStack.stackSize--;
+ }
+ if(mSolderingTool&&aPlayer instanceof EntityPlayerMP){
+ EntityPlayerMP tPlayer = (EntityPlayerMP) aPlayer;
+ try{GT_Mod.instance.achievements.issueAchievement( tPlayer, "maintainance");}catch(Exception e){}
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java
new file mode 100644
index 0000000000..de3b9968ac
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java
@@ -0,0 +1,58 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_Muffler extends GT_MetaTileEntity_Hatch {
+ public GT_MetaTileEntity_Hatch_Muffler(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 0, "Outputs the Pollution (Pollution might come later)");
+ }
+
+ public GT_MetaTileEntity_Hatch_Muffler(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {mDescription, "DO NOT OBSTRUCT THE OUTPUT!"};
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_MUFFLER)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_MUFFLER)};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return false;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Muffler(mName, mTier, mDescription, mTextures);
+ }
+
+ public boolean polluteEnvironment() {
+ return (mTier > 1 && getBaseMetaTileEntity().getRandomNumber(mTier) != 0) || getBaseMetaTileEntity().getAirAtSide(getBaseMetaTileEntity().getFrontFacing());
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
new file mode 100644
index 0000000000..ecf6627a09
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
@@ -0,0 +1,141 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch {
+ public byte mMode = 0;
+
+ public GT_MetaTileEntity_Hatch_Output(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "Fluid Output for Multiblocks (" + 8000 * (aTier + 1) + "L) (Screwdriver for output type)");
+ }
+
+ public GT_MetaTileEntity_Hatch_Output(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isLiquidInput(byte aSide) {return false;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Output(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork()) {
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing());
+ if (tTileEntity != null) {
+ for (boolean temp = true; temp && mFluid != null;) {
+ temp = false;
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()), Math.max(1, mFluid.amount), false);
+ if (tDrained != null) {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()), tDrained, false);
+ if (tFilledAmount > 0) {
+ temp = true;
+ tTileEntity.fill(ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setByte("mMode", mMode);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mMode = aNBT.getByte("mMode");
+ }
+
+ @Override public boolean doesFillContainers() {return true;}
+ @Override public boolean doesEmptyContainers() {return true;}
+ @Override public boolean canTankBeFilled() {return true;}
+ @Override public boolean canTankBeEmptied() {return true;}
+ @Override public boolean displaysItemStack() {return true;}
+ @Override public boolean displaysStackSize() {return false;}
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0;
+ }
+
+ @Override
+ public int getCapacity() {
+ return 8000 * (mTier + 1);
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (!getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), getBaseMetaTileEntity())) return;
+ mMode = (byte)((mMode + 1) % 8);
+ switch (mMode) {
+ case 0: GT_Utility.sendChatToPlayer(aPlayer, "Outputs Liquids, Steam and Items"); break;
+ case 1: GT_Utility.sendChatToPlayer(aPlayer, "Outputs Steam and Items"); break;
+ case 2: GT_Utility.sendChatToPlayer(aPlayer, "Outputs Steam and Liquids"); break;
+ case 3: GT_Utility.sendChatToPlayer(aPlayer, "Outputs Steam"); break;
+ case 4: GT_Utility.sendChatToPlayer(aPlayer, "Outputs Liquids and Items"); break;
+ case 5: GT_Utility.sendChatToPlayer(aPlayer, "Outputs only Items"); break;
+ case 6: GT_Utility.sendChatToPlayer(aPlayer, "Outputs only Liquids"); break;
+ case 7: GT_Utility.sendChatToPlayer(aPlayer, "Outputs nothing"); break;
+ }
+ }
+
+ public boolean outputsSteam() {
+ return mMode < 4;
+ }
+
+ public boolean outputsLiquids() {
+ return mMode % 2 == 0;
+ }
+
+ public boolean outputsItems() {
+ return mMode % 4 < 2;
+ }
+
+ @Override
+ public int getTankPressure() {
+ return +100;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java
new file mode 100644
index 0000000000..8baff8d4f4
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java
@@ -0,0 +1,79 @@
+package gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.*;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_OutputBus extends GT_MetaTileEntity_Hatch {
+ public GT_MetaTileEntity_Hatch_OutputBus(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Item Output for Multiblocks (" + getSlots(aTier) + " slot" + (getSlots(aTier) >= 2 ? "s" : "") + ")");
+ }
+
+ public GT_MetaTileEntity_Hatch_OutputBus(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aTier<1?1:aTier==1?4:aTier==2?9:16, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_OutputBus(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mTier) {
+ case 0: return new GT_Container_1by1(aPlayerInventory, aBaseMetaTileEntity);
+ case 1: return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity);
+ case 2: return new GT_Container_3by3(aPlayerInventory, aBaseMetaTileEntity);
+ default: return new GT_Container_4by4(aPlayerInventory, aBaseMetaTileEntity);
+ }
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ switch (mTier) {
+ case 0: return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, "Output Bus");
+ case 1: return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, "Output Bus");
+ case 2: return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, "Output Bus");
+ case 3: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Output Bus");
+ default: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Output Bus");
+ }
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing();
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
new file mode 100644
index 0000000000..1cb3c89a84
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -0,0 +1,729 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import gregtech.common.tools.GT_Tool_Turbine;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
+
+ public boolean mMachine = false, mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, mSolderingTool = false, mCrowbar = false, mRunningOnLoad = false;
+ public int mPollution = 0, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mEfficiencyIncrease = 0, mUpdate = 0, mStartUpCheck = 100, mRuntime = 0, mEfficiency = 0;
+ public ItemStack[] mOutputItems = null;
+ public FluidStack[] mOutputFluids = null;
+ public static boolean disableMaintenance;
+
+ public ArrayList<GT_MetaTileEntity_Hatch_Input> mInputHatches = new ArrayList<GT_MetaTileEntity_Hatch_Input>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Output> mOutputHatches = new ArrayList<GT_MetaTileEntity_Hatch_Output>();
+ public ArrayList<GT_MetaTileEntity_Hatch_InputBus> mInputBusses = new ArrayList<GT_MetaTileEntity_Hatch_InputBus>();
+ public ArrayList<GT_MetaTileEntity_Hatch_OutputBus> mOutputBusses = new ArrayList<GT_MetaTileEntity_Hatch_OutputBus>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Dynamo> mDynamoHatches = new ArrayList<GT_MetaTileEntity_Hatch_Dynamo>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Muffler> mMufflerHatches = new ArrayList<GT_MetaTileEntity_Hatch_Muffler>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Energy> mEnergyHatches = new ArrayList<GT_MetaTileEntity_Hatch_Energy>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Maintenance> mMaintenanceHatches = new ArrayList<GT_MetaTileEntity_Hatch_Maintenance>();
+
+ public GT_MetaTileEntity_MultiBlockBase(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional, 2);
+ this.disableMaintenance = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false);
+ }
+
+ public GT_MetaTileEntity_MultiBlockBase(String aName) {
+ super(aName, 2);
+ this.disableMaintenance = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false);
+ }
+
+ @Override
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID) {
+ return aSide != getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return aIndex > 0;}
+ @Override public int getProgresstime() {return mProgresstime;}
+ @Override public int maxProgresstime() {return mMaxProgresstime;}
+ @Override public int increaseProgress(int aProgress) {return aProgress;}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setInteger("mEUt", mEUt);
+ aNBT.setInteger("mProgresstime", mProgresstime);
+ aNBT.setInteger("mMaxProgresstime", mMaxProgresstime);
+ aNBT.setInteger("mEfficiencyIncrease", mEfficiencyIncrease);
+ aNBT.setInteger("mEfficiency", mEfficiency);
+ aNBT.setInteger("mPollution", mPollution);
+ aNBT.setInteger("mRuntime", mRuntime);
+
+ if (mOutputItems != null) for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null) {
+ NBTTagCompound tNBT = new NBTTagCompound();
+ mOutputItems[i].writeToNBT(tNBT);
+ aNBT.setTag("mOutputItem"+i, tNBT);
+ }
+ if (mOutputFluids != null) for (int i = 0; i < mOutputFluids.length; i++) if (mOutputFluids[i] != null) {
+ NBTTagCompound tNBT = new NBTTagCompound();
+ mOutputFluids[i].writeToNBT(tNBT);
+ aNBT.setTag("mOutputFluids"+i, tNBT);
+ }
+
+ aNBT.setBoolean("mWrench", mWrench);
+ aNBT.setBoolean("mScrewdriver", mScrewdriver);
+ aNBT.setBoolean("mSoftHammer", mSoftHammer);
+ aNBT.setBoolean("mHardHammer", mHardHammer);
+ aNBT.setBoolean("mSolderingTool", mSolderingTool);
+ aNBT.setBoolean("mCrowbar", mCrowbar);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ mEUt = aNBT.getInteger("mEUt");
+ mProgresstime = aNBT.getInteger("mProgresstime");
+ mMaxProgresstime = aNBT.getInteger("mMaxProgresstime");
+ if(mMaxProgresstime>0)mRunningOnLoad=true;
+ mEfficiencyIncrease = aNBT.getInteger("mEfficiencyIncrease");
+ mEfficiency = aNBT.getInteger("mEfficiency");
+ mPollution = aNBT.getInteger("mPollution");
+ mRuntime = aNBT.getInteger("mRuntime");
+ mOutputItems = new ItemStack[getAmountOfOutputs()];
+ for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i);
+ mOutputFluids = new FluidStack[getAmountOfOutputs()];
+ for (int i = 0; i < mOutputFluids.length; i++) mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i);
+ mWrench = aNBT.getBoolean("mWrench");
+ mScrewdriver = aNBT.getBoolean("mScrewdriver");
+ mSoftHammer = aNBT.getBoolean("mSoftHammer");
+ mHardHammer = aNBT.getBoolean("mHardHammer");
+ mSolderingTool = aNBT.getBoolean("mSolderingTool");
+ mCrowbar = aNBT.getBoolean("mCrowbar");
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_MultiMachine(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "MultiblockDisplay.png");
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return 2;
+ }
+
+ @Override
+ public void onMachineBlockUpdate() {
+ mUpdate = 50;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (mEfficiency < 0) mEfficiency = 0;
+ if (--mUpdate==0 || --mStartUpCheck==0) {
+ mInputHatches.clear();
+ mInputBusses.clear();
+ mOutputHatches.clear();
+ mOutputBusses.clear();
+ mDynamoHatches.clear();
+ mEnergyHatches.clear();
+ mMufflerHatches.clear();
+ mMaintenanceHatches.clear();
+ mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]);
+ }
+ if (mStartUpCheck < 0) {
+ if (mMachine) {
+ for (GT_MetaTileEntity_Hatch_Maintenance tHatch : mMaintenanceHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ if(!this.disableMaintenance){
+ if (tHatch.mWrench) mWrench = true;
+ if (tHatch.mScrewdriver) mScrewdriver = true;
+ if (tHatch.mSoftHammer) mSoftHammer = true;
+ if (tHatch.mHardHammer) mHardHammer = true;
+ if (tHatch.mSolderingTool) mSolderingTool = true;
+ if (tHatch.mCrowbar) mCrowbar = true;}else{
+ mWrench = true;
+ mScrewdriver = true;
+ mSoftHammer = true;
+ mHardHammer = true;
+ mSolderingTool = true;
+ mCrowbar = true;
+ }
+
+ tHatch.mWrench = false;
+ tHatch.mScrewdriver = false;
+ tHatch.mSoftHammer = false;
+ tHatch.mHardHammer = false;
+ tHatch.mSolderingTool = false;
+ tHatch.mCrowbar = false;
+ }
+ }
+ if (getRepairStatus() > 0) {
+ if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) {
+ if (onRunningTick(mInventory[1])) {
+ if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) {
+ stopMachine();
+ }
+ if (mMaxProgresstime > 0 && ++mProgresstime>=mMaxProgresstime) {
+ if (mOutputItems != null) for (ItemStack tStack : mOutputItems) if (tStack != null) {
+ try{GT_Mod.instance.achievements.issueAchivementHatch(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), tStack);}catch(Exception e){}
+ addOutput(tStack);}
+ if (mOutputFluids != null&&mOutputFluids.length==1) {for (FluidStack tStack : mOutputFluids) if (tStack != null) {addOutput(tStack);}}
+ else if(mOutputFluids!=null&&mOutputFluids.length>1){
+ addFluidOutputs(mOutputFluids);}
+ mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)));
+ mOutputItems = null;
+ mProgresstime = 0;
+ mMaxProgresstime = 0;
+ mEfficiencyIncrease = 0;
+ if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(mInventory[1]);
+ if(mOutputFluids!=null&&mOutputFluids.length>0){
+ if(mOutputFluids.length>1){GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "oilplant");}
+ }
+ }
+ }
+ } else {
+ if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified()) {
+
+ if (aBaseMetaTileEntity.isAllowedToWork()) {
+ checkRecipe(mInventory[1]);}
+ if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000);
+ }
+ }
+ } else {
+ stopMachine();
+ }
+ } else {
+ stopMachine();
+ }
+ }
+ aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID()&~127)|(mWrench?0:1)|(mScrewdriver?0:2)|(mSoftHammer?0:4)|(mHardHammer?0:8)|(mSolderingTool?0:16)|(mCrowbar?0:32)|(mMachine?0:64));
+ aBaseMetaTileEntity.setActive(mMaxProgresstime>0);
+ }
+ }
+
+ public boolean polluteEnvironment(int aPollutionLevel) {
+ mPollution += aPollutionLevel;
+ for (GT_MetaTileEntity_Hatch_Muffler tHatch : mMufflerHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ if (mPollution >= 10000) {
+ if (tHatch.polluteEnvironment()) {
+ mPollution -= 10000;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ return mPollution < 10000;
+ }
+
+ /**
+ * Called every tick the Machine runs
+ */
+ public boolean onRunningTick(ItemStack aStack) {
+ if (mEUt > 0) {
+ addEnergyOutput(((long)mEUt * mEfficiency) / 10000);
+ return true;
+ }
+ if (mEUt < 0) {
+ if (!drainEnergyInput(((long)-mEUt * 10000) / Math.max(1000, mEfficiency))) {
+ stopMachine();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Checks if this is a Correct Machine Part for this kind of Machine (Turbine Rotor for example)
+ */
+ public abstract boolean isCorrectMachinePart(ItemStack aStack);
+
+ /**
+ * Checks the Recipe
+ */
+ public abstract boolean checkRecipe(ItemStack aStack);
+
+ /**
+ * Checks the Machine. You have to assign the MetaTileEntities for the Hatches here.
+ */
+ public abstract boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack);
+
+ /**
+ * Gets the maximum Efficiency that spare Part can get (0 - 10000)
+ */
+ public abstract int getMaxEfficiency(ItemStack aStack);
+
+ /**
+ * Gets the pollution this Device outputs to a Muffler per tick (10000 = one Pullution Block)
+ */
+ public abstract int getPollutionPerTick(ItemStack aStack);
+
+ /**
+ * Gets the damage to the ItemStack, usually 0 or 1.
+ */
+ public abstract int getDamageToComponent(ItemStack aStack);
+
+ /**
+ * Gets the Amount of possibly outputted Items for loading the Output Stack Array from NBT.
+ * This should be the largest Amount that can ever happen legitimately.
+ */
+ public abstract int getAmountOfOutputs();
+
+ /**
+ * If it explodes when the Component has to be replaced.
+ */
+ public abstract boolean explodesOnComponentBreak(ItemStack aStack);
+
+ public void stopMachine() {
+ mOutputItems = null;
+ mEUt = 0;
+ mEfficiency = 0;
+ mProgresstime = 0;
+ mMaxProgresstime = 0;
+ mEfficiencyIncrease = 0;
+ getBaseMetaTileEntity().disableWorking();
+ }
+
+ public int getRepairStatus() {
+ return (mWrench?1:0) + (mScrewdriver?1:0) + (mSoftHammer?1:0) + (mHardHammer?1:0) + (mSolderingTool?1:0) + (mCrowbar?1:0);
+ }
+
+ public int getIdealStatus() {
+ return 6;
+ }
+
+ public static boolean isValidMetaTileEntity(MetaTileEntity aMetaTileEntity) {
+ return aMetaTileEntity.getBaseMetaTileEntity() != null && aMetaTileEntity.getBaseMetaTileEntity().getMetaTileEntity() == aMetaTileEntity && !aMetaTileEntity.getBaseMetaTileEntity().isDead();
+ }
+
+ public boolean doRandomMaintenanceDamage() {
+ if (!isCorrectMachinePart(mInventory[1]) || getRepairStatus() == 0) {
+ stopMachine();
+ return false;
+ }
+ if (mRuntime++>1000) {
+ mRuntime = 0;
+ if (getBaseMetaTileEntity().getRandomNumber(6000) == 0) {
+ switch (getBaseMetaTileEntity().getRandomNumber(6)) {
+ case 0: mWrench = false; break;
+ case 1: mScrewdriver = false; break;
+ case 2: mSoftHammer = false; break;
+ case 3: mHardHammer = false; break;
+ case 4: mSolderingTool = false; break;
+ case 5: mCrowbar = false; break;
+ }
+ }
+ if (mInventory[1] != null && getBaseMetaTileEntity().getRandomNumber(2) == 0 &&!mInventory[1].getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.")) {
+ if(mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01){
+ NBTTagCompound tNBT = mInventory[1].getTagCompound();
+ if (tNBT != null)
+ {
+ NBTTagCompound tNBT2 = tNBT.getCompoundTag("GT.CraftingComponents");
+ if (!tNBT.getBoolean("mDis"))
+ {
+ tNBT2 = new NBTTagCompound();
+ Materials tMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(mInventory[1]);
+ ItemStack tTurbine = GT_OreDictUnificator.get(OrePrefixes.turbineBlade, tMaterial, 1);
+ int i = mInventory[1].getItemDamage();
+ if(i == 170){
+ ItemStack tStack = GT_Utility.copyAmount(1, tTurbine);
+ tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound()));
+ tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong,Materials.Magnalium,1);
+ tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound()));
+ }else if(i == 172){
+ ItemStack tStack = GT_Utility.copyAmount(1, tTurbine);
+ tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound()));
+ tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong,Materials.Titanium,1);
+ tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound()));
+ }else if(i == 174){
+ ItemStack tStack = GT_Utility.copyAmount(2, tTurbine);
+ tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound()));
+ tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong,Materials.TungstenSteel,1);
+ tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound()));
+ }else if(i == 176){
+ ItemStack tStack = GT_Utility.copyAmount(2, tTurbine);
+ tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound()));
+ tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound()));
+ tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong,Materials.Americium,1);
+ tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound()));
+ }
+ tNBT.setTag("GT.CraftingComponents", tNBT2);
+ tNBT.setBoolean("mDis", true);
+ mInventory[1].setTagCompound(tNBT);
+
+ }
+ }
+
+ ((GT_MetaGenerated_Tool)mInventory[1].getItem()).doDamage(mInventory[1], (long) Math.min(mEUt/5, Math.pow(mEUt, 0.7)));
+ if(mInventory[1].stackSize==0)mInventory[1]=null;
+ }
+ }
+ }
+ return true;
+ }
+
+ public void explodeMultiblock() {
+ mInventory[1] = null;
+ for (MetaTileEntity tTileEntity : mInputBusses) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mOutputBusses) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mInputHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mOutputHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mDynamoHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mMufflerHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mEnergyHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ for (MetaTileEntity tTileEntity : mMaintenanceHatches) tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]);
+ getBaseMetaTileEntity().doExplosion(V[8]);
+ }
+
+ public boolean addEnergyOutput(long aEU) {
+ if (aEU <= 0) return true;
+ for (GT_MetaTileEntity_Hatch_Dynamo tHatch : mDynamoHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ if (tHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(aEU, false)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public long getMaxInputVoltage() {
+ long rVoltage = 0;
+ for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) if (isValidMetaTileEntity(tHatch)) rVoltage += tHatch.getBaseMetaTileEntity().getInputVoltage();
+ return rVoltage;
+ }
+
+ public boolean drainEnergyInput(long aEU) {
+ if (aEU <= 0) return true;
+ for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) if (isValidMetaTileEntity(tHatch)) {
+ if (tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEU, false)) return true;
+ }
+ return false;
+ }
+
+ public boolean addOutput(FluidStack aLiquid) {
+ if (aLiquid == null) return false;
+ FluidStack tLiquid = aLiquid.copy();
+ for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) {
+ if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid)?tHatch.outputsSteam():tHatch.outputsLiquids()) {
+ int tAmount = tHatch.fill(tLiquid, false);
+ if (tAmount >= tLiquid.amount) {
+ return tHatch.fill(tLiquid, true) >= tLiquid.amount;
+ }else if(tAmount>0){
+ tLiquid.amount = tLiquid.amount - tHatch.fill(tLiquid, true);
+ }
+ }
+ }
+ return false;
+ }
+
+ private void addFluidOutputs(FluidStack[] mOutputFluids2) {
+ for(int i=0;i<mOutputFluids2.length;i++){
+ if(mOutputHatches.size()>i&&mOutputHatches.get(i)!=null&&mOutputFluids2[i]!=null&&isValidMetaTileEntity(mOutputHatches.get(i))){
+ mOutputHatches.get(i).fill(mOutputFluids2[i], true);
+ }
+ }
+
+ }
+
+ public boolean depleteInput(FluidStack aLiquid) {
+ if (aLiquid == null) return false;
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ FluidStack tLiquid = tHatch.getFluid();
+ if (tLiquid != null && tLiquid.isFluidEqual(aLiquid)) {
+ tLiquid = tHatch.drain(aLiquid.amount, false);
+ if (tLiquid != null && tLiquid.amount >= aLiquid.amount) {
+ tLiquid = tHatch.drain(aLiquid.amount, true);
+ return tLiquid != null && tLiquid.amount >= aLiquid.amount;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean addOutput(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ aStack = GT_Utility.copy(aStack);
+// FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true);
+// if (aLiquid == null) {
+ for (GT_MetaTileEntity_Hatch_OutputBus tHatch : mOutputBusses) {
+ if (isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getSizeInventory() - 1; i >= 0; i--) {
+ if (tHatch.getBaseMetaTileEntity().addStackToSlot(i, aStack)) return true;
+ }
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) {
+ if (isValidMetaTileEntity(tHatch) && tHatch.outputsItems()) {
+ if (tHatch.getBaseMetaTileEntity().addStackToSlot(1, aStack)) return true;
+ }
+ }
+// }else {
+// for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) {
+// if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid)?tHatch.outputsSteam():tHatch.outputsLiquids()) {
+// int tAmount = tHatch.fill(aLiquid, false);
+// if (tAmount >= aLiquid.amount) {
+// return tHatch.fill(aLiquid, true) >= aLiquid.amount;
+// }
+// }
+// }
+// }
+ return false;
+ }
+
+ public boolean depleteInput(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true);
+ if (aLiquid != null) return depleteInput(aLiquid);
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ if (GT_Utility.areStacksEqual(aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(0))) {
+ if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) {
+ tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize);
+ return true;
+ }
+ }
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_InputBus tHatch : mInputBusses) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) {
+ if (GT_Utility.areStacksEqual(aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(i))) {
+ if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) {
+ tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize);
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public ArrayList<ItemStack> getStoredOutputs() {
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(1));
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_OutputBus tHatch : mOutputBusses) {
+ if (isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) {
+ rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i));
+ }
+ }
+ }
+ return rList;
+ }
+
+ public ArrayList<FluidStack> getStoredFluids() {
+ ArrayList<FluidStack> rList = new ArrayList<FluidStack>();
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch) && tHatch.getFillableStack() != null) {
+ rList.add(tHatch.getFillableStack());
+ }
+ }
+ return rList;
+ }
+
+ public ArrayList<ItemStack> getStoredInputs() {
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch) && tHatch.getBaseMetaTileEntity().getStackInSlot(0) != null) {
+ rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(0));
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_InputBus tHatch : mInputBusses) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) {
+ if (tHatch.getBaseMetaTileEntity().getStackInSlot(i) != null) rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i));
+ }
+ }
+ }
+ return rList;
+ }
+
+ public GT_Recipe_Map getRecipeMap() {
+ return null;
+ }
+
+ public void updateSlots() {
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) if (isValidMetaTileEntity(tHatch)) tHatch.updateSlots();
+ for (GT_MetaTileEntity_Hatch_InputBus tHatch : mInputBusses) if (isValidMetaTileEntity(tHatch)) tHatch.updateSlots();
+ }
+
+ public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) return mInputHatches.add((GT_MetaTileEntity_Hatch_Input)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance)aMetaTileEntity);
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler)aMetaTileEntity);
+ return false;
+ }
+
+ public boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) {
+ return false;}
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ ((GT_MetaTileEntity_Hatch_Input)aMetaTileEntity).mRecipeMap = getRecipeMap();
+ return mInputHatches.add((GT_MetaTileEntity_Hatch_Input)aMetaTileEntity);
+ }
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ ((GT_MetaTileEntity_Hatch_InputBus)aMetaTileEntity).mRecipeMap = getRecipeMap();
+ return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output)aMetaTileEntity);
+ }
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus)aMetaTileEntity);
+ }
+ return false;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ return new String[] {"Progress:", (mProgresstime/20)+"secs", (mMaxProgresstime/20)+"secs", "Efficiency:", (mEfficiency/100.0F)+"%", "Problems:", ""+(getIdealStatus() - getRepairStatus())};
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java
new file mode 100644
index 0000000000..daffadecfe
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java
@@ -0,0 +1,65 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.GT;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.metatileentity.MetaTileEntity;
+
+public abstract class GT_MetaTileEntity_TieredMachineBlock extends MetaTileEntity {
+ /**
+ * Value between [0 - 9] to describe the Tier of this Machine.
+ */
+ public final byte mTier;
+
+ /**
+ * A simple Description.
+ */
+ public final String mDescription;
+
+ /**
+ * Contains all Textures used by this Block.
+ */
+ public final ITexture[][][] mTextures;
+
+ public GT_MetaTileEntity_TieredMachineBlock(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, ITexture... aTextures) {
+ super(aID, aName, aNameRegional, aInvSlotCount);
+ mTier = (byte)Math.max(0, Math.min(aTier, 9));
+ mDescription = aDescription;
+
+ // must always be the last call!
+ if (GT.isClientSide()) mTextures = getTextureSet(aTextures); else mTextures = null;
+ }
+
+ public GT_MetaTileEntity_TieredMachineBlock(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aInvSlotCount);
+ mTier = (byte)aTier;
+ mDescription = aDescription;
+ mTextures = aTextures;
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return (byte)(Math.min(3, mTier<=0?0:1+((mTier-1) / 4)));
+ }
+
+ @Override
+ public long getInputTier() {
+ return mTier;
+ }
+
+ @Override
+ public long getOutputTier() {
+ return mTier;
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {mDescription};
+ }
+
+ /**
+ * Used Client Side to get a Texture Set for this Block.
+ * Called after setting the Tier and the Description so that those two are accessible.
+ * @param aTextures is the optional Array you can give to the Constructor.
+ */
+ public abstract ITexture[][][] getTextureSet(ITexture[] aTextures);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java
new file mode 100644
index 0000000000..c0d8a4bade
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java
@@ -0,0 +1,144 @@
+package gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+import cofh.api.energy.IEnergyProvider;
+import cofh.api.energy.IEnergyStorage;
+import crazypants.enderio.machine.capbank.TileCapBank;
+import crazypants.enderio.machine.capbank.network.ICapBankNetwork;
+import crazypants.enderio.power.IPowerContainer;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import ic2.api.energy.tile.IEnergySource;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the main construct for my Basic Machines such as the Automatic Extractor
+ * Extend this class to make a simple Machine
+ */
+public class GT_MetaTileEntity_Transformer extends GT_MetaTileEntity_TieredMachineBlock {
+ public GT_MetaTileEntity_Transformer(int aID, String aName, String aNameRegional, int aTier, String aDescription) {
+ super(aID, aName, aNameRegional, aTier, 0, aDescription);
+ }
+
+ public GT_MetaTileEntity_Transformer(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[12][17][];
+ for (byte i = -1; i < 16; i++) {
+ rTextures[ 0][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ rTextures[ 1][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ rTextures[ 2][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier]};
+ rTextures[ 3][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier]};
+ rTextures[ 4][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier]};
+ rTextures[ 5][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier]};
+ rTextures[ 6][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier]};
+ rTextures[ 7][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier]};
+ rTextures[ 8][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier]};
+ rTextures[ 9][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier]};
+ rTextures[10][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier]};
+ rTextures[11][i+1] = new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][i+1], Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier]};
+ }
+ return rTextures;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return mTextures[Math.min(2,aSide)+(aSide==aFacing?3:0)+(aActive?0:6)][aColorIndex+1];
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Transformer(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isEnetOutput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return getBaseMetaTileEntity().isAllowedToWork()?aSide==getBaseMetaTileEntity().getFrontFacing():aSide!=getBaseMetaTileEntity().getFrontFacing();}
+ @Override public boolean isOutputFacing(byte aSide) {return !isInputFacing(aSide);}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUStore() {return 512+V[mTier+1]*2;}
+ @Override public long maxEUInput() {return V[getBaseMetaTileEntity().isAllowedToWork()?mTier+1:mTier];}
+ @Override public long maxEUOutput() {return V[getBaseMetaTileEntity().isAllowedToWork()?mTier:mTier+1];}
+ @Override public long maxAmperesOut() {return getBaseMetaTileEntity().isAllowedToWork()?V[mTier+1]/V[mTier]:1;}
+ @Override public long maxAmperesIn() {return getBaseMetaTileEntity().isAllowedToWork()?1:V[mTier+1]/V[mTier];}
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork());
+ for (byte i = 0; i < 6 && aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity(); i++) if (aBaseMetaTileEntity.inputEnergyFrom(i)) {
+ TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(i);
+ if (tTileEntity instanceof IEnergySource && ((IEnergySource)tTileEntity).emitsEnergyTo((TileEntity)aBaseMetaTileEntity, ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)))) {
+ long tEU = Math.min(maxEUInput(), (long)((IEnergySource)tTileEntity).getOfferedEnergy());
+ ((IEnergySource)tTileEntity).drawEnergy(tEU);
+ aBaseMetaTileEntity.injectEnergyUnits((byte)6, tEU, 1);
+ }else if (GregTech_API.mInputRF && tTileEntity instanceof IEnergyProvider&& ((IEnergyProvider)tTileEntity).extractEnergy(ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)),1,true)==1) {
+ long tEU = (long)((IEnergyProvider)tTileEntity).extractEnergy(ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)),(int) maxEUInput()* 100 / GregTech_API.mRFtoEU ,false);
+ tEU = tEU * GregTech_API.mRFtoEU / 100;
+ aBaseMetaTileEntity.injectEnergyUnits((byte)6, Math.min(tEU,maxEUInput()), 1);
+ }else if (GregTech_API.mInputRF && tTileEntity instanceof IEnergyStorage&& ((IEnergyStorage)tTileEntity).extractEnergy(1,true)==1) {
+ long tEU = (long)((IEnergyStorage)tTileEntity).extractEnergy((int) maxEUInput()* 100 / GregTech_API.mRFtoEU ,false);
+ tEU = tEU * GregTech_API.mRFtoEU / 100;
+ aBaseMetaTileEntity.injectEnergyUnits((byte)6, Math.min(tEU,maxEUInput()), 1);
+ }else if (GregTech_API.mInputRF && GregTech_API.meIOLoaded && tTileEntity instanceof IPowerContainer && ((IPowerContainer)tTileEntity).getEnergyStored()>0) {
+ int storedRF = ((IPowerContainer)tTileEntity).getEnergyStored();
+ int extractRF = (int) maxEUInput()* 100 / GregTech_API.mRFtoEU;
+ long tEU =0;
+ if(tTileEntity instanceof TileCapBank){
+ ICapBankNetwork network = ((TileCapBank)tTileEntity).getNetwork();
+ if(network!=null&&network.getEnergyStoredL()>0){
+ tEU = Math.min((Math.min(Math.min(network.getEnergyStoredL(), storedRF-extractRF),network.getMaxOutput())) * GregTech_API.mRFtoEU / 100,maxEUInput());
+ network.addEnergy((int) -(tEU * 100 / GregTech_API.mRFtoEU));
+ }
+ }else{
+ if(storedRF>extractRF){
+ ((IPowerContainer)tTileEntity).setEnergyStored(storedRF-extractRF);
+ tEU = maxEUInput();
+ }else{
+ ((IPowerContainer)tTileEntity).setEnergyStored(0);
+ tEU = storedRF * GregTech_API.mRFtoEU / 100 ;
+ }
+ }
+ aBaseMetaTileEntity.injectEnergyUnits((byte)6, Math.min(tEU,maxEUInput()), 1);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ //
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ //
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/GT_Packet.java b/src/main/java/gregtech/api/net/GT_Packet.java
new file mode 100644
index 0000000000..79e2e98695
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet.java
@@ -0,0 +1,29 @@
+package gregtech.api.net;
+
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+
+public abstract class GT_Packet {
+ public GT_Packet(boolean aIsReference) {
+ //
+ }
+
+ /**
+ * I use constant IDs instead of Dynamic ones, since that is much more fail safe
+ * @return a Packet ID for this Class
+ */
+ public abstract byte getPacketID();
+
+ /**
+ * @return encoded byte Stream
+ */
+ public abstract byte[] encode();
+
+ /**
+ * @return encoded byte Stream
+ */
+ public abstract GT_Packet decode(ByteArrayDataInput aData);
+
+ public abstract void process(IBlockAccess aWorld);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java
new file mode 100644
index 0000000000..95932d581c
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java
@@ -0,0 +1,59 @@
+package gregtech.api.net;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+
+/**
+ * Used to transfer Block Events in a much better fashion
+ */
+public class GT_Packet_Block_Event extends GT_Packet {
+ private int mX, mZ;
+ private short mY;
+ private byte mID, mValue;
+
+ public GT_Packet_Block_Event() {
+ super(true);
+ }
+
+ public GT_Packet_Block_Event(int aX, short aY, int aZ, byte aID, byte aValue) {
+ super(false);
+ mX = aX;
+ mY = aY;
+ mZ = aZ;
+ mID = aID;
+ mValue = aValue;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(10);
+ tOut.writeInt(mX);
+ tOut.writeShort(mY);
+ tOut.writeInt(mZ);
+ tOut.writeByte(mID);
+ tOut.writeByte(mValue);
+ return tOut.toByteArray();
+ }
+
+ @Override
+ public GT_Packet decode(ByteArrayDataInput aData) {
+ return new GT_Packet_Block_Event(aData.readInt(), aData.readShort(), aData.readInt(), aData.readByte(), aData.readByte());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (aWorld != null) {
+ TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ if (tTileEntity != null) tTileEntity.receiveClientEvent(mID, mValue);
+ }
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 2;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/GT_Packet_Sound.java b/src/main/java/gregtech/api/net/GT_Packet_Sound.java
new file mode 100644
index 0000000000..74e48bb38e
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_Sound.java
@@ -0,0 +1,56 @@
+package gregtech.api.net;
+
+import gregtech.api.util.GT_Utility;
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+
+public class GT_Packet_Sound extends GT_Packet {
+ private int mX, mZ;
+ private short mY;
+ private String mSoundName;
+ private float mSoundStrength, mSoundPitch;
+
+ public GT_Packet_Sound() {
+ super(true);
+ }
+
+ public GT_Packet_Sound(String aSoundName, float aSoundStrength, float aSoundPitch, int aX, short aY, int aZ) {
+ super(false);
+ mX = aX;
+ mY = aY;
+ mZ = aZ;
+ mSoundName = aSoundName;
+ mSoundStrength = aSoundStrength;
+ mSoundPitch = aSoundPitch;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(10);
+ tOut.writeUTF(mSoundName);
+ tOut.writeFloat(mSoundStrength);
+ tOut.writeFloat(mSoundPitch);
+ tOut.writeInt(mX);
+ tOut.writeShort(mY);
+ tOut.writeInt(mZ);
+ return tOut.toByteArray();
+ }
+
+ @Override
+ public GT_Packet decode(ByteArrayDataInput aData) {
+ return new GT_Packet_Sound(aData.readUTF(), aData.readFloat(), aData.readFloat(), aData.readInt(), aData.readShort(), aData.readInt());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ GT_Utility.doSoundAtClient(mSoundName, 1, mSoundStrength, mSoundPitch, mX, mY, mZ);
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 1;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
new file mode 100644
index 0000000000..a5d8424414
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
@@ -0,0 +1,83 @@
+package gregtech.api.net;
+
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+
+public class GT_Packet_TileEntity extends GT_Packet {
+ private int mX, mZ, mC0, mC1, mC2, mC3, mC4, mC5;
+ private short mY, mID;
+ private byte mTexture, mUpdate, mRedstone, mColor;
+
+ public GT_Packet_TileEntity() {
+ super(true);
+ }
+
+ public GT_Packet_TileEntity(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, int aC5, byte aTexture, byte aUpdate, byte aRedstone, byte aColor) {
+ super(false);
+ mX = aX;
+ mY = aY;
+ mZ = aZ;
+ mC0 = aC0;
+ mC1 = aC1;
+ mC2 = aC2;
+ mC3 = aC3;
+ mC4 = aC4;
+ mC5 = aC5;
+ mID = aID;
+ mTexture = aTexture;
+ mUpdate = aUpdate;
+ mRedstone = aRedstone;
+ mColor = aColor;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(40);
+
+ tOut.writeInt(mX);
+ tOut.writeShort(mY);
+ tOut.writeInt(mZ);
+ tOut.writeShort(mID);
+
+ tOut.writeInt(mC0);
+ tOut.writeInt(mC1);
+ tOut.writeInt(mC2);
+ tOut.writeInt(mC3);
+ tOut.writeInt(mC4);
+ tOut.writeInt(mC5);
+
+ tOut.writeByte(mTexture);
+ tOut.writeByte(mUpdate);
+ tOut.writeByte(mRedstone);
+ tOut.writeByte(mColor);
+
+ return tOut.toByteArray();
+ }
+
+ @Override
+ public GT_Packet decode(ByteArrayDataInput aData) {
+ return new GT_Packet_TileEntity(aData.readInt(), aData.readShort(), aData.readInt(), aData.readShort(), aData.readInt(), aData.readInt(), aData.readInt(), aData.readInt(), aData.readInt(), aData.readInt(), aData.readByte(), aData.readByte(), aData.readByte(), aData.readByte());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (aWorld != null) {
+ TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ if (tTileEntity != null) {
+ if (tTileEntity instanceof BaseMetaTileEntity) ((BaseMetaTileEntity)tTileEntity).receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor);
+ else if (tTileEntity instanceof BaseMetaPipeEntity) ((BaseMetaPipeEntity)tTileEntity).receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor);
+ }
+ }
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 0;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/IGT_NetworkHandler.java b/src/main/java/gregtech/api/net/IGT_NetworkHandler.java
new file mode 100644
index 0000000000..db27888229
--- /dev/null
+++ b/src/main/java/gregtech/api/net/IGT_NetworkHandler.java
@@ -0,0 +1,12 @@
+package gregtech.api.net;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.world.World;
+import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
+
+public interface IGT_NetworkHandler {
+ public void sendToPlayer(GT_Packet aPacket, EntityPlayerMP aPlayer);
+ public void sendToAllAround(GT_Packet aPacket, TargetPoint aPosition);
+ public void sendToServer(GT_Packet aPacket);
+ public void sendPacketToAllPlayersInRange(World aWorld, GT_Packet aPacket, int aX, int aZ);
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/ElementStack.java b/src/main/java/gregtech/api/objects/ElementStack.java
new file mode 100644
index 0000000000..38443dffaf
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/ElementStack.java
@@ -0,0 +1,41 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Element;
+
+public class ElementStack implements Cloneable {
+ public int mAmount;
+ public Element mElement;
+
+ public ElementStack(Element aElement, int aAmount) {
+ mElement = aElement==null?Element._NULL:aElement;
+ mAmount = aAmount;
+ }
+
+ public ElementStack copy(int aAmount) {
+ return new ElementStack(mElement, aAmount);
+ }
+
+ @Override
+ public ElementStack clone() {
+ return new ElementStack(mElement, mAmount);
+ }
+
+ @Override
+ public boolean equals(Object aObject) {
+ if (aObject == this) return true;
+ if (aObject == null) return false;
+ if (aObject instanceof Element) return aObject == mElement;
+ if (aObject instanceof ElementStack) return ((ElementStack)aObject).mElement == mElement && (mAmount < 0 || ((ElementStack)aObject).mAmount < 0 || ((ElementStack)aObject).mAmount == mAmount);
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return mElement.toString()+mAmount;
+ }
+
+ @Override
+ public int hashCode() {
+ return mElement.hashCode();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_ArrayList.java b/src/main/java/gregtech/api/objects/GT_ArrayList.java
new file mode 100644
index 0000000000..a6c0750217
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_ArrayList.java
@@ -0,0 +1,59 @@
+package gregtech.api.objects;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+public class GT_ArrayList<E> extends ArrayList<E> {
+ private static final long serialVersionUID = 1L;
+
+ private final boolean mAllowNulls;
+
+ public GT_ArrayList(boolean aAllowNulls, int aCapacity) {
+ super(aCapacity);
+ mAllowNulls = aAllowNulls;
+ }
+
+ public GT_ArrayList(boolean aAllowNulls, E... aArray) {
+ super(Arrays.asList(aArray));
+ mAllowNulls = aAllowNulls;
+ if (!mAllowNulls) for (int i = 0; i < size(); i++) if (get(i) == null) remove(i--);
+ }
+
+ public GT_ArrayList(boolean aAllowNulls, Collection<? extends E> aList) {
+ super(aList);
+ mAllowNulls = aAllowNulls;
+ if (!mAllowNulls) for (int i = 0; i < size(); i++) if (get(i) == null) remove(i--);
+ }
+
+ @Override
+ public E set(int aIndex, E aElement) {
+ if (mAllowNulls || aElement != null) return super.set(aIndex, aElement);
+ return null;
+ }
+
+ @Override
+ public boolean add(E aElement) {
+ if (mAllowNulls || aElement != null) return super.add(aElement);
+ return false;
+ }
+
+ @Override
+ public void add(int aIndex, E aElement) {
+ if (mAllowNulls || aElement != null) super.add(aIndex, aElement);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends E> aList) {
+ boolean rReturn = super.addAll(aList);
+ if (!mAllowNulls) for (int i = 0; i < size(); i++) if (get(i) == null) remove(i--);
+ return rReturn;
+ }
+
+ @Override
+ public boolean addAll(int aIndex, Collection<? extends E> aList) {
+ boolean rReturn = super.addAll(aIndex, aList);
+ if (!mAllowNulls) for (int i = 0; i < size(); i++) if (get(i) == null) remove(i--);
+ return rReturn;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
new file mode 100644
index 0000000000..ffbbe09ec6
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
@@ -0,0 +1,96 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.interfaces.ITexture;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+
+public class GT_CopiedBlockTexture implements ITexture {
+ private final Block mBlock;
+ private final byte mSide, mMeta;
+
+ /**
+ * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!!
+ *
+ * Just set this variable to another different Array instead.
+ * Otherwise some colored things will get Problems.
+ */
+ public short[] mRGBa;
+
+ private final boolean mAllowAlpha;
+
+ public GT_CopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) {
+ if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedBlockTexture");
+ mBlock = aBlock;
+ mRGBa = aRGBa;
+ mSide = (byte)aSide;
+ mMeta = (byte)aMeta;
+ mAllowAlpha = aAllowAlpha;
+ }
+
+ public GT_CopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa) {
+ this(aBlock, aSide, aMeta, aRGBa, true);
+ }
+
+ public GT_CopiedBlockTexture(Block aBlock, int aSide, int aMeta) {
+ this(aBlock, aSide, aMeta, Dyes._NULL.mRGBa);
+ }
+
+ private IIcon getIcon(int aSide) {
+ if (mSide == 6) return mBlock.getIcon(aSide, mMeta);
+ return mBlock.getIcon(mSide, mMeta);
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(5);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+// aRenderer.flipTexture = !aRenderer.flipTexture;
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon);
+// aRenderer.flipTexture = !aRenderer.flipTexture;
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(4);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon);
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(1);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 1.0F), (int)(mRGBa[1] * 1.0F), (int)(mRGBa[2] * 1.0F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon);
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(0);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.5F), (int)(mRGBa[1] * 0.5F), (int)(mRGBa[2] * 0.5F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon);
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(3);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon);
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ IIcon aIcon = getIcon(2);
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+// aRenderer.flipTexture = !aRenderer.flipTexture;
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon);
+// aRenderer.flipTexture = !aRenderer.flipTexture;
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return mBlock != null;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_Cover_Default.java b/src/main/java/gregtech/api/objects/GT_Cover_Default.java
new file mode 100644
index 0000000000..b317e0e523
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_Cover_Default.java
@@ -0,0 +1,68 @@
+package gregtech.api.objects;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_Default extends GT_CoverBehavior {
+ /**
+ * This is the Dummy, if there is a generic Cover without behavior
+ */
+ public GT_Cover_Default() {
+ super();
+ }
+
+ @Override
+ public boolean isSimpleCover() {
+ return true;
+ }
+
+ @Override
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ aCoverVariable=((aCoverVariable+1)&15);
+ GT_Utility.sendChatToPlayer(aPlayer, ((aCoverVariable & 1) != 0?"Redstone ":"") + ((aCoverVariable & 2) != 0?"Energy ":"") + ((aCoverVariable & 4) != 0?"Fluids ":"") + ((aCoverVariable & 8) != 0?"Items ":""));
+ return aCoverVariable;
+ }
+
+ @Override
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 1) != 0;
+ }
+
+ @Override
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 1) != 0;
+ }
+
+ @Override
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 2) != 0;
+ }
+
+ @Override
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 2) != 0;
+ }
+
+ @Override
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return (aCoverVariable & 4) != 0;
+ }
+
+ @Override
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return (aCoverVariable & 4) != 0;
+ }
+
+ @Override
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return (aCoverVariable & 8) != 0;
+ }
+
+ @Override
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return (aCoverVariable & 8) != 0;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_Cover_None.java b/src/main/java/gregtech/api/objects/GT_Cover_None.java
new file mode 100644
index 0000000000..89a0e17ded
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_Cover_None.java
@@ -0,0 +1,89 @@
+package gregtech.api.objects;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_None extends GT_CoverBehavior {
+
+ /**
+ * This is the Dummy, if there is no Cover
+ */
+ public GT_Cover_None() {}
+
+ @Override
+ public float getBlastProofLevel(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 10.0F;
+ }
+
+ @Override
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean isGUIClickable(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ @Override
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return false;
+ }
+
+ @Override
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced) {
+ return true;
+ }
+
+ @Override
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ return 0;
+ }
+
+ @Override
+ public boolean isSimpleCover() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_Fluid.java b/src/main/java/gregtech/api/objects/GT_Fluid.java
new file mode 100644
index 0000000000..8e7a71c972
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_Fluid.java
@@ -0,0 +1,28 @@
+package gregtech.api.objects;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_BLOCK;
+import gregtech.api.GregTech_API;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Fluid extends Fluid implements Runnable {
+ private final short[] mRGBa;
+
+ public final String mTextureName;
+
+ public GT_Fluid(String aName, String aTextureName, short[] aRGBa) {
+ super(aName);
+ mRGBa = aRGBa;
+ mTextureName = aTextureName;
+ GregTech_API.sGTBlockIconload.add(this);
+ }
+
+ @Override
+ public int getColor() {
+ return (Math.max(0, Math.min(255, mRGBa[0])) << 16) | (Math.max(0, Math.min(255, mRGBa[1])) << 8) | Math.max(0, Math.min(255, mRGBa[2]));
+ }
+
+ @Override
+ public void run() {
+ setIcons(GregTech_API.sBlockIcons.registerIcon(RES_PATH_BLOCK + "fluids/fluid." + mTextureName));
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_FluidStack.java b/src/main/java/gregtech/api/objects/GT_FluidStack.java
new file mode 100644
index 0000000000..ac54003d35
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_FluidStack.java
@@ -0,0 +1,55 @@
+package gregtech.api.objects;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+
+import net.minecraftforge.common.ForgeVersion;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+/**
+ * Because Forge fucked this one up royally.
+ */
+public class GT_FluidStack extends FluidStack {
+ private static final Collection<GT_FluidStack> sAllFluidStacks = new ArrayList<GT_FluidStack>(5000);
+ private Fluid mFluid;
+ private static boolean lock=false;
+
+ public GT_FluidStack(Fluid aFluid, int aAmount) {
+ super(aFluid, aAmount);
+ mFluid = aFluid;
+ sAllFluidStacks.add(this);
+ }
+
+ public GT_FluidStack(FluidStack aFluid) {
+ this(aFluid.getFluid(), aFluid.amount);
+ }
+
+ public static void fixAllThoseFuckingFluidIDs() {
+ if(ForgeVersion.getBuildVersion()<1355){
+ while(lock){try {Thread.sleep(1);} catch (InterruptedException e) {}}
+ lock=true;
+ for (GT_FluidStack tFluid : sAllFluidStacks) tFluid.fixFluidIDForFucksSake();
+ for (Map<Fluid, ?> tMap : GregTech_API.sFluidMappings) try {GT_Utility.reMap(tMap);} catch(Throwable e) {e.printStackTrace(GT_Log.err);}
+ lock=false;}
+ }
+
+ public void fixFluidIDForFucksSake() {
+ if(ForgeVersion.getBuildVersion()<1355){
+ int fluidID;
+ try {fluidID = this.getFluid().getID();} catch(Throwable e){System.err.println(e);}
+ try {fluidID = mFluid.getID();} catch(Throwable e) {fluidID = -1;}}
+ }
+
+ @Override
+ public FluidStack copy() {
+ if(ForgeVersion.getBuildVersion()<1355){
+ fixFluidIDForFucksSake();}
+ return new GT_FluidStack(this);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_HashSet.java b/src/main/java/gregtech/api/objects/GT_HashSet.java
new file mode 100644
index 0000000000..5a88307639
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_HashSet.java
@@ -0,0 +1,81 @@
+package gregtech.api.objects;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Utility;
+
+import java.util.*;
+
+import net.minecraft.item.ItemStack;
+
+public class GT_HashSet<E extends GT_ItemStack> extends AbstractSet<E> {
+ private transient HashMap<GT_ItemStack, Object> map;
+ private static final Object OBJECT = new Object();
+
+ public GT_HashSet() {
+ map = new HashMap<GT_ItemStack, Object>();
+ GregTech_API.sItemStackMappings.add(map);
+ }
+
+ public GT_HashSet(Collection<? extends E> c) {
+ map = new HashMap<GT_ItemStack, Object>(Math.max((int) (c.size()/.75f) + 1, 16));
+ addAll(c);
+ GregTech_API.sItemStackMappings.add(map);
+ }
+
+ public GT_HashSet(int initialCapacity, float loadFactor) {
+ map = new HashMap<GT_ItemStack, Object>(initialCapacity, loadFactor);
+ GregTech_API.sItemStackMappings.add(map);
+ }
+
+ public GT_HashSet(int initialCapacity) {
+ map = new HashMap<GT_ItemStack, Object>(initialCapacity);
+ GregTech_API.sItemStackMappings.add(map);
+ }
+
+ GT_HashSet(int initialCapacity, float loadFactor, boolean dummy) {
+ map = new LinkedHashMap<GT_ItemStack, Object>(initialCapacity, loadFactor);
+ GregTech_API.sItemStackMappings.add(map);
+ }
+
+ public HashMap getMap(){return map;}
+
+ @Override
+ public Iterator<E> iterator() {
+ return (Iterator<E>)map.keySet().iterator();
+ }
+
+ @Override
+ public int size() {
+ return map.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return map.containsKey(o);
+ }
+
+ public boolean add(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ return map.put(new GT_ItemStack(aStack), OBJECT)==null;
+ }
+
+ @Override
+ public boolean add(E e) {
+ return map.put(e, OBJECT)==null;
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ return map.remove(o)==OBJECT;
+ }
+
+ @Override
+ public void clear() {
+ map.clear();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_ItemStack.java b/src/main/java/gregtech/api/objects/GT_ItemStack.java
new file mode 100644
index 0000000000..8881d276c8
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_ItemStack.java
@@ -0,0 +1,52 @@
+package gregtech.api.objects;
+
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class GT_ItemStack {
+ public final Item mItem;
+ public final byte mStackSize;
+ public final short mMetaData;
+
+ public GT_ItemStack(Item aItem, long aStackSize, long aMetaData) {
+ mItem = aItem;
+ mStackSize = (byte)aStackSize;
+ mMetaData = (short)aMetaData;
+ }
+
+ public GT_ItemStack(ItemStack aStack) {
+ this(aStack==null?null:aStack.getItem(), aStack==null?0:aStack.stackSize, aStack==null?0:Items.feather.getDamage(aStack));
+ }
+
+ public GT_ItemStack(int aHashCode) {
+ this(GT_Utility.intToStack(aHashCode));
+ }
+
+ public ItemStack toStack() {
+ if (mItem == null) return null;
+ return new ItemStack(mItem, 1, mMetaData);
+ }
+
+ public boolean isStackEqual(ItemStack aStack) {
+ return GT_Utility.areStacksEqual(toStack(), aStack);
+ }
+
+ public boolean isStackEqual(GT_ItemStack aStack) {
+ return GT_Utility.areStacksEqual(toStack(), aStack.toStack());
+ }
+
+ @Override
+ public boolean equals(Object aStack) {
+ if (aStack == this) return true;
+ if (aStack instanceof GT_ItemStack) {
+ return ((GT_ItemStack)aStack).mItem == mItem && ((GT_ItemStack)aStack).mMetaData == mMetaData;}
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return GT_Utility.stackToInt(toStack());
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_MultiTexture.java b/src/main/java/gregtech/api/objects/GT_MultiTexture.java
new file mode 100644
index 0000000000..295e51112c
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_MultiTexture.java
@@ -0,0 +1,53 @@
+package gregtech.api.objects;
+
+import gregtech.api.interfaces.ITexture;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+
+/**
+ * Lets Multiple ITextures Render overlay over each other.
+ *
+ * I should have done this much earlier...
+ */
+public class GT_MultiTexture implements ITexture {
+ private final ITexture[] mTextures;
+
+ public GT_MultiTexture(ITexture... aTextures) {
+ mTextures = aTextures;
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ for (ITexture tTexture : mTextures) if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java
new file mode 100644
index 0000000000..356d68793c
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java
@@ -0,0 +1,140 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.interfaces.IColorModulationContainer;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+
+public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
+ private final IIconContainer mIconContainer;
+
+ /**
+ * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!!
+ *
+ * Just set this variable to another different Array instead.
+ * Otherwise some colored things will get Problems.
+ */
+ public short[] mRGBa;
+
+ private final boolean mAllowAlpha;
+
+ public GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) {
+ if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture");
+ mIconContainer = aIcon;
+ mAllowAlpha = aAllowAlpha;
+ mRGBa = aRGBa;
+ }
+
+ public GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa) {
+ this(aIcon, aRGBa, true);
+ }
+
+ public GT_RenderedTexture(IIconContainer aIcon) {
+ this(aIcon, Dyes._NULL.mRGBa);
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (mIconContainer.getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(153, 153, 153, 255);
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (mIconContainer.getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(153, 153, 153, 255);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 1.0F), (int)(mRGBa[1] * 1.0F), (int)(mRGBa[2] * 1.0F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (mIconContainer.getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(255, 255, 255, 255);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.5F), (int)(mRGBa[1] * 0.5F), (int)(mRGBa[2] * 0.5F), mAllowAlpha?255-mRGBa[3]:255);
+ IIcon aIcon = mIconContainer.getIcon();
+
+ double d3 = aIcon.getInterpolatedU(aRenderer.renderMaxX * 16.0D);
+ double d4 = aIcon.getInterpolatedU(aRenderer.renderMinX * 16.0D);
+ double d5 = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
+ double d6 = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
+
+ if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
+ d3 = aIcon.getMaxU();
+ d4 = aIcon.getMinU();
+ }
+
+ if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
+ d5 = aIcon.getMinV();
+ d6 = aIcon.getMaxV();
+ }
+
+ double d11 = aX + aRenderer.renderMinX;
+ double d12 = aX + aRenderer.renderMaxX;
+ double d13 = aY + aRenderer.renderMinY;
+ double d14 = aZ + aRenderer.renderMinZ;
+ double d15 = aZ + aRenderer.renderMaxZ;
+
+ Tessellator.instance.addVertexWithUV(d11, d13, d15, d3, d6);
+ Tessellator.instance.addVertexWithUV(d11, d13, d14, d3, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d14, d4, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d15, d4, d6);
+
+ if ((aIcon = mIconContainer.getOverlayIcon()) != null) {
+ Tessellator.instance.setColorRGBA(128, 128, 128, 255);
+
+ Tessellator.instance.addVertexWithUV(d11, d13, d15, d3, d6);
+ Tessellator.instance.addVertexWithUV(d11, d13, d14, d3, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d14, d4, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d15, d4, d6);
+ }
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (mIconContainer.getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(204, 204, 204, 255);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (mIconContainer.getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(204, 204, 204, 255);
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ }
+ }
+
+ @Override
+ public short[] getRGBA() {
+ return mRGBa;
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return mIconContainer != null;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/GT_SidedTexture.java b/src/main/java/gregtech/api/objects/GT_SidedTexture.java
new file mode 100644
index 0000000000..183d5b8415
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_SidedTexture.java
@@ -0,0 +1,169 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.interfaces.IColorModulationContainer;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+
+public class GT_SidedTexture implements ITexture, IColorModulationContainer {
+ private final IIconContainer[] mIconContainer;
+
+ /**
+ * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!!
+ *
+ * Just set this variable to another different Array instead.
+ * Otherwise some colored things will get Problems.
+ */
+ public short[] mRGBa;
+
+ private final boolean mAllowAlpha;
+
+ public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa, boolean aAllowAlpha) {
+ if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture");
+ mIconContainer = new IIconContainer[] {aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5};
+ mAllowAlpha = aAllowAlpha;
+ mRGBa = aRGBa;
+ }
+
+ public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa) {
+ this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, aRGBa, true);
+ }
+
+ public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, IIconContainer aIcon4, IIconContainer aIcon5) {
+ this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, Dyes._NULL.mRGBa);
+ }
+
+ public GT_SidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides, short[] aRGBa) {
+ this(aBottom, aTop, aSides, aSides, aSides, aSides, aRGBa);
+ }
+
+ public GT_SidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides) {
+ this(aBottom, aTop, aSides, Dyes._NULL.mRGBa);
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer[5].getIcon());
+ if (mIconContainer[5].getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(153, 153, 153, 255);
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer[5].getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.6F), (int)(mRGBa[1] * 0.6F), (int)(mRGBa[2] * 0.6F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer[4].getIcon());
+ if (mIconContainer[4].getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(153, 153, 153, 255);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer[4].getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 1.0F), (int)(mRGBa[1] * 1.0F), (int)(mRGBa[2] * 1.0F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer[1].getIcon());
+ if (mIconContainer[1].getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(255, 255, 255, 255);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer[1].getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.5F), (int)(mRGBa[1] * 0.5F), (int)(mRGBa[2] * 0.5F), mAllowAlpha?255-mRGBa[3]:255);
+ IIcon aIcon = mIconContainer[0].getIcon();
+
+ double d3 = aIcon.getInterpolatedU(aRenderer.renderMaxX * 16.0D);
+ double d4 = aIcon.getInterpolatedU(aRenderer.renderMinX * 16.0D);
+ double d5 = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
+ double d6 = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
+
+ if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
+ d3 = aIcon.getMaxU();
+ d4 = aIcon.getMinU();
+ }
+
+ if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
+ d5 = aIcon.getMinV();
+ d6 = aIcon.getMaxV();
+ }
+
+ double d11 = aX + aRenderer.renderMinX;
+ double d12 = aX + aRenderer.renderMaxX;
+ double d13 = aY + aRenderer.renderMinY;
+ double d14 = aZ + aRenderer.renderMinZ;
+ double d15 = aZ + aRenderer.renderMaxZ;
+
+ Tessellator.instance.addVertexWithUV(d11, d13, d15, d3, d6);
+ Tessellator.instance.addVertexWithUV(d11, d13, d14, d3, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d14, d4, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d15, d4, d6);
+
+ if ((aIcon = mIconContainer[0].getOverlayIcon()) != null) {
+ Tessellator.instance.setColorRGBA(128, 128, 128, 255);
+
+ d3 = aIcon.getInterpolatedU(aRenderer.renderMaxX * 16.0D);
+ d4 = aIcon.getInterpolatedU(aRenderer.renderMinX * 16.0D);
+ d5 = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
+ d6 = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
+
+ if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
+ d3 = aIcon.getMaxU();
+ d4 = aIcon.getMinU();
+ }
+
+ if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
+ d5 = aIcon.getMinV();
+ d6 = aIcon.getMaxV();
+ }
+
+ d11 = aX + aRenderer.renderMinX;
+ d12 = aX + aRenderer.renderMaxX;
+ d13 = aY + aRenderer.renderMinY;
+ d14 = aZ + aRenderer.renderMinZ;
+ d15 = aZ + aRenderer.renderMaxZ;
+
+ Tessellator.instance.addVertexWithUV(d11, d13, d15, d3, d6);
+ Tessellator.instance.addVertexWithUV(d11, d13, d14, d3, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d14, d4, d5);
+ Tessellator.instance.addVertexWithUV(d12, d13, d15, d4, d6);
+ }
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer[3].getIcon());
+ if (mIconContainer[3].getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(204, 204, 204, 255);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer[3].getOverlayIcon());
+ }
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ Tessellator.instance.setColorRGBA((int)(mRGBa[0] * 0.8F), (int)(mRGBa[1] * 0.8F), (int)(mRGBa[2] * 0.8F), mAllowAlpha?255-mRGBa[3]:255);
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer[2].getIcon());
+ if (mIconContainer[2].getOverlayIcon() != null) {
+ Tessellator.instance.setColorRGBA(204, 204, 204, 255);
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer[2].getOverlayIcon());
+ }
+ }
+
+ @Override
+ public short[] getRGBA() {
+ return mRGBa;
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return mIconContainer != null && mIconContainer[0] != null && mIconContainer[1] != null && mIconContainer[2] != null && mIconContainer[3] != null && mIconContainer[4] != null && mIconContainer[5] != null;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/ItemData.java b/src/main/java/gregtech/api/objects/ItemData.java
new file mode 100644
index 0000000000..e0f1f32fd8
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/ItemData.java
@@ -0,0 +1,116 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+
+import java.util.*;
+
+import net.minecraft.item.ItemStack;
+
+public class ItemData {
+ private static final MaterialStack[] EMPTY_MATERIALSTACK_ARRAY = new MaterialStack[0];
+
+ public final List<Object> mExtraData = new GT_ArrayList<Object>(false, 1);
+
+ public boolean mBlackListed = false;
+ public ItemStack mUnificationTarget = null;
+
+ public final OrePrefixes mPrefix;
+ public final MaterialStack mMaterial;
+ public final MaterialStack[] mByProducts;
+
+ public ItemData(OrePrefixes aPrefix, Materials aMaterial, boolean aBlackListed) {
+ mPrefix = aPrefix;
+ mMaterial = aMaterial==null?null:new MaterialStack(aMaterial, aPrefix.mMaterialAmount);
+ mBlackListed = aBlackListed;
+ mByProducts = aPrefix.mSecondaryMaterial==null||aPrefix.mSecondaryMaterial.mMaterial==null?EMPTY_MATERIALSTACK_ARRAY:new MaterialStack[] {aPrefix.mSecondaryMaterial.clone()};
+ }
+
+ public ItemData(OrePrefixes aPrefix, Materials aMaterial) {
+ this(aPrefix, aMaterial, false);
+ }
+
+ public ItemData(MaterialStack aMaterial, MaterialStack... aByProducts) {
+ mPrefix = null;
+ mMaterial = aMaterial.mMaterial==null?null:aMaterial.clone();
+ mBlackListed = true;
+ if (aByProducts == null) {
+ mByProducts = EMPTY_MATERIALSTACK_ARRAY;
+ } else {
+ MaterialStack[] tByProducts = aByProducts.length<1?EMPTY_MATERIALSTACK_ARRAY:new MaterialStack[aByProducts.length];
+ int j = 0;
+ for (int i = 0; i < aByProducts.length; i++) if (aByProducts[i] != null && aByProducts[i].mMaterial != null) tByProducts[j++] = aByProducts[i].clone();
+ mByProducts = j>0?new MaterialStack[j]:EMPTY_MATERIALSTACK_ARRAY;
+ for (int i = 0; i < mByProducts.length; i++) mByProducts[i] = tByProducts[i];
+ }
+ }
+
+ public ItemData(Materials aMaterial, long aAmount, MaterialStack... aByProducts) {
+ this(new MaterialStack(aMaterial, aAmount), aByProducts);
+ }
+
+ public ItemData(Materials aMaterial, long aAmount, Materials aByProduct, long aByProductAmount) {
+ this(new MaterialStack(aMaterial, aAmount), new MaterialStack(aByProduct, aByProductAmount));
+ }
+
+ public ItemData(ItemData... aData) {
+ mPrefix = null;
+ mBlackListed = true;
+
+ ArrayList<MaterialStack> aList = new ArrayList<MaterialStack>(), rList = new ArrayList<MaterialStack>();
+
+ for (ItemData tData : aData) if (tData != null) {
+ if (tData.hasValidMaterialData() && tData.mMaterial.mAmount > 0) aList.add(tData.mMaterial.clone());
+ for (MaterialStack tMaterial : tData.mByProducts) if (tMaterial.mAmount > 0) aList.add(tMaterial.clone());
+ }
+
+ for (MaterialStack aMaterial : aList) {
+ boolean temp = true;
+ for (MaterialStack tMaterial : rList) if (aMaterial.mMaterial == tMaterial.mMaterial) {
+ tMaterial.mAmount += aMaterial.mAmount;
+ temp = false; break;
+ }
+ if (temp) rList.add(aMaterial.clone());
+ }
+
+ Collections.sort(rList, new Comparator<MaterialStack>() {@Override public int compare(MaterialStack a, MaterialStack b) {return a.mAmount == b.mAmount ? 0 : a.mAmount > b.mAmount ? -1 : +1;}});
+
+ if (rList.isEmpty()) {
+ mMaterial = null;
+ } else {
+ mMaterial = rList.get(0);
+ rList.remove(0);
+ }
+
+ mByProducts = rList.toArray(new MaterialStack[rList.size()]);
+ }
+
+ public boolean hasValidPrefixMaterialData() {
+ return mPrefix != null && mMaterial != null && mMaterial.mMaterial != null;
+ }
+
+ public boolean hasValidPrefixData() {
+ return mPrefix != null;
+ }
+
+ public boolean hasValidMaterialData() {
+ return mMaterial != null && mMaterial.mMaterial != null;
+ }
+
+ public ArrayList<MaterialStack> getAllMaterialStacks() {
+ ArrayList<MaterialStack> rList = new ArrayList();
+ if (hasValidMaterialData()) rList.add(mMaterial);
+ rList.addAll(Arrays.asList(mByProducts));
+ return rList;
+ }
+
+ public MaterialStack getByProduct(int aIndex) {
+ return aIndex>=0&&aIndex<mByProducts.length?mByProducts[aIndex]:null;
+ }
+
+ @Override
+ public String toString() {
+ if (mPrefix == null || mMaterial == null || mMaterial.mMaterial == null) return "";
+ return mPrefix.name() + mMaterial.mMaterial.name();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/objects/MaterialStack.java b/src/main/java/gregtech/api/objects/MaterialStack.java
new file mode 100644
index 0000000000..3d9479eb0b
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/MaterialStack.java
@@ -0,0 +1,41 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Materials;
+
+public class MaterialStack implements Cloneable {
+ public long mAmount;
+ public Materials mMaterial;
+
+ public MaterialStack(Materials aMaterial, long aAmount) {
+ mMaterial = aMaterial==null?Materials._NULL:aMaterial;
+ mAmount = aAmount;
+ }
+
+ public MaterialStack copy(long aAmount) {
+ return new MaterialStack(mMaterial, aAmount);
+ }
+
+ @Override
+ public MaterialStack clone() {
+ return new MaterialStack(mMaterial, mAmount);
+ }
+
+ @Override
+ public boolean equals(Object aObject) {
+ if (aObject == this) return true;
+ if (aObject == null) return false;
+ if (aObject instanceof Materials) return aObject == mMaterial;
+ if (aObject instanceof MaterialStack) return ((MaterialStack)aObject).mMaterial == mMaterial && (mAmount < 0 || ((MaterialStack)aObject).mAmount < 0 || ((MaterialStack)aObject).mAmount == mAmount);
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return (mMaterial.mMaterialList.size() > 1 && mAmount > 1 ? "(" : "") + mMaterial.getToolTip(true) + (mMaterial.mMaterialList.size() > 1 && mAmount > 1 ? ")" : "") + (mAmount > 1 ? mAmount : "");
+ }
+
+ @Override
+ public int hashCode() {
+ return mMaterial.hashCode();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java b/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java
new file mode 100644
index 0000000000..deed269adf
--- /dev/null
+++ b/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java
@@ -0,0 +1,38 @@
+package gregtech.api.threads;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable;
+
+import java.util.ArrayList;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.ChunkPosition;
+import net.minecraft.world.World;
+
+public class GT_Runnable_MachineBlockUpdate implements Runnable {
+ private final int mX, mY, mZ;
+ private final World mWorld;
+
+ public GT_Runnable_MachineBlockUpdate(World aWorld, int aX, int aY, int aZ) {
+ mWorld = aWorld; mX = aX; mY = aY; mZ = aZ;
+ }
+
+ @Override
+ public void run() {
+ try {stepToUpdateMachine(mWorld, mX, mY, mZ, new ArrayList<ChunkPosition>());} catch(Throwable e) {/**/}
+ }
+
+ private static void stepToUpdateMachine(World aWorld, int aX, int aY, int aZ, ArrayList<ChunkPosition> aList) {
+ aList.add(new ChunkPosition(aX, aY, aZ));
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (tTileEntity != null && tTileEntity instanceof IMachineBlockUpdateable) ((IMachineBlockUpdateable)tTileEntity).onMachineBlockUpdate();
+ if (aList.size() < 5 || (tTileEntity != null && tTileEntity instanceof IMachineBlockUpdateable) || GregTech_API.isMachineBlock(aWorld.getBlock(aX, aY, aZ), aWorld.getBlockMetadata(aX, aY, aZ))) {
+ if (!aList.contains(new ChunkPosition(aX + 1, aY, aZ))) stepToUpdateMachine(aWorld, aX + 1, aY, aZ, aList);
+ if (!aList.contains(new ChunkPosition(aX - 1, aY, aZ))) stepToUpdateMachine(aWorld, aX - 1, aY, aZ, aList);
+ if (!aList.contains(new ChunkPosition(aX, aY + 1, aZ))) stepToUpdateMachine(aWorld, aX, aY + 1, aZ, aList);
+ if (!aList.contains(new ChunkPosition(aX, aY - 1, aZ))) stepToUpdateMachine(aWorld, aX, aY - 1, aZ, aList);
+ if (!aList.contains(new ChunkPosition(aX, aY, aZ + 1))) stepToUpdateMachine(aWorld, aX, aY, aZ + 1, aList);
+ if (!aList.contains(new ChunkPosition(aX, aY, aZ - 1))) stepToUpdateMachine(aWorld, aX, aY, aZ - 1, aList);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java b/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java
new file mode 100644
index 0000000000..aaa8b84028
--- /dev/null
+++ b/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java
@@ -0,0 +1,26 @@
+package gregtech.api.threads;
+
+import gregtech.api.util.GT_PlayedSound;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.world.World;
+
+public class GT_Runnable_Sound implements Runnable {
+ private final int mX, mY, mZ, mTimeUntilNextSound;
+ private final World mWorld;
+ private final String mSoundName;
+ private final float mSoundStrength, mSoundModulation;
+
+ public GT_Runnable_Sound(World aWorld, int aX, int aY, int aZ, int aTimeUntilNextSound, String aSoundName, float aSoundStrength, float aSoundModulation) {
+ mWorld = aWorld; mX = aX; mY = aY; mZ = aZ; mTimeUntilNextSound = aTimeUntilNextSound; mSoundName = aSoundName; mSoundStrength = aSoundStrength; mSoundModulation = aSoundModulation;
+ }
+
+ @Override
+ public void run() {
+ try {
+ GT_PlayedSound tSound;
+ if (GT_Utility.sPlayedSoundMap.keySet().contains(tSound = new GT_PlayedSound(mSoundName, mX, mY, mZ))) return;
+ mWorld.playSound(mX, mY, mZ, mSoundName, mSoundStrength, mSoundModulation, false);
+ GT_Utility.sPlayedSoundMap.put(tSound, mTimeUntilNextSound);
+ } catch(Throwable e) {/**/}
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_BaseCrop.java b/src/main/java/gregtech/api/util/GT_BaseCrop.java
new file mode 100644
index 0000000000..e7cef2c598
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_BaseCrop.java
@@ -0,0 +1,129 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+import gregtech.api.enums.ConfigCategories;
+import ic2.api.crops.CropCard;
+import ic2.api.crops.Crops;
+import ic2.api.crops.ICropTile;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+
+public class GT_BaseCrop extends CropCard {
+ private String mName = E, mDiscoveredBy = "Gregorius Techneticies", mAttributes[];
+ private int mTier = 0, mMaxSize = 0, mAfterHarvestSize = 0, mHarvestSize = 0, mStats[] = new int[5];
+ private ItemStack mDrop = null, mSpecialDrops[] = null;
+
+ public static ArrayList<GT_BaseCrop> sCropList = new ArrayList<GT_BaseCrop>();
+
+ /**
+ * To create new Crops
+ * @param aID Default ID
+ * @param aCropName Name of the Crop
+ * @param aDiscoveredBy The one who discovered the Crop
+ * @param aDrop The Item which is dropped by the Crop. must be != null
+ * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only
+ * @param aTier tier of the Crop. forced to be >= 1
+ * @param aMaxSize maximum Size of the Crop. forced to be >= 3
+ * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300
+ * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size
+ */
+ public GT_BaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aDrop, ItemStack[] aSpecialDrops, ItemStack aBaseSeed, int aTier, int aMaxSize, int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, int aStatColor, int aStatWeed, String[] aAttributes) {
+ mName = aCropName;
+ aID = GT_Config.addIDConfig(ConfigCategories.IDs.crops, mName.replaceAll(" ", "_"), aID);
+ if (aDiscoveredBy != null && !aDiscoveredBy.equals(E)) mDiscoveredBy = aDiscoveredBy;
+ if (aDrop != null && aID > 0 && aID < 256) {
+ mDrop = GT_Utility.copy(aDrop);
+ mSpecialDrops = aSpecialDrops;
+ mTier = Math.max(1, aTier);
+ mMaxSize = Math.max(3, aMaxSize);
+// mGrowthSpeed = aGrowthSpeed>0?aGrowthSpeed:mTier*300;
+ mHarvestSize = Math.min(Math.max(aHarvestSize, 2), mMaxSize);
+ mAfterHarvestSize = Math.min(Math.max(aAfterHarvestSize, 1), mMaxSize-1);
+ mStats[0] = aStatChemical;
+ mStats[1] = aStatFood;
+ mStats[2] = aStatDefensive;
+ mStats[3] = aStatColor;
+ mStats[4] = aStatWeed;
+ mAttributes = aAttributes;
+ if (!Crops.instance.registerCrop(this, aID)) throw new GT_ItsNotMyFaultException("Make sure the Crop ID is valid!");
+ if (aBaseSeed != null) Crops.instance.registerBaseSeed(aBaseSeed, aID, 1, 1, 1, 1);
+ sCropList.add(this);
+ }
+ }
+
+ @Override
+ public byte getSizeAfterHarvest(ICropTile crop) {
+ return (byte)mAfterHarvestSize;
+ }
+
+ @Override
+ public String[] attributes() {
+ return mAttributes;
+ }
+
+ @Override
+ public String discoveredBy() {
+ return mDiscoveredBy;
+ }
+
+ @Override
+ public final boolean canGrow(ICropTile aCrop) {
+ return aCrop.getSize() < maxSize();
+ }
+
+ @Override
+ public final boolean canBeHarvested(ICropTile aCrop) {
+ return aCrop.getSize() >= mHarvestSize;
+ }
+
+ @Override
+ public boolean canCross(ICropTile aCrop) {
+ return aCrop.getSize() + 2 > maxSize();
+ }
+
+ @Override
+ public int stat(int n) {
+ if (n < 0 || n >= mStats.length) return 0;
+ return mStats[n];
+ }
+
+ @Override
+ public String name() {
+ return mName;
+ }
+
+ @Override
+ public int tier() {
+ return mTier;
+ }
+
+ @Override
+ public int maxSize() {
+ return mMaxSize;
+ }
+
+ @Override
+ public ItemStack getGain(ICropTile aCrop) {
+ int tDrop = 0;
+ if (mSpecialDrops != null && (tDrop = new Random().nextInt(mSpecialDrops.length+4)) < mSpecialDrops.length && mSpecialDrops[tDrop] != null) {
+ return GT_Utility.copy(mSpecialDrops[tDrop]);
+ }
+ return GT_Utility.copy(mDrop);
+ }
+
+ @Override
+ public boolean rightclick(ICropTile aCrop, EntityPlayer aPlayer) {
+ if (!canBeHarvested(aCrop)) return false;
+ return aCrop.harvest(aPlayer==null?false:aPlayer instanceof EntityPlayerMP);
+ }
+
+ @Override
+ public int getOptimalHavestSize(ICropTile crop) {
+ return maxSize();
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java
new file mode 100644
index 0000000000..6cda3c202f
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java
@@ -0,0 +1,178 @@
+package gregtech.api.util;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+/**
+ * Redstone Circuit Control Code
+ *
+ * This should make everything possible what a Redstone Computer or BuildCraft Gate could do.
+ * It is intended to use this similar to BC-Gates (for acquiring Data) and RP Logic Gates.
+ * You could write an extremely specified and complex Logic Gate, which works only for you Setup, like
+ * with ComputerCraft, but you would have to write an extra Mod to add that, as it doesn't work Ingame.
+ *
+ * One can make use of the fact, that ItemStacks can be stored as Integer, so that you can scan
+ * Inventories for specific Items using that. Luckily the Buttons in the GUI enable Copy/Paste of
+ * ItemID+MetaData to Integer, including the WildCard Damage Value when you use rightclick to place it.
+ * You just need to use @GT_Utility.stackToInt(ItemStack aStack) to get it.
+ *
+ * All Functions run usually in a seperate try/catch Block, so that failed Logic won't crash the TileEntity.
+ */
+public abstract class GT_CircuitryBehavior {
+ /**
+ * @param aIndex 0 - 1023 are my own Indices, so use other Numbers!
+ */
+ public GT_CircuitryBehavior(int aIndex) {
+ GregTech_API.sCircuitryBehaviors.put(aIndex, this);
+ }
+
+ /**
+ * Initializes the Parameters of this Circuit, all Parameters have been set to 0 right before calling this
+ * @param aCircuitData, The Data Storage you can use (8 Slots)
+ * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself
+ */
+ public abstract void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock);
+
+ /**
+ * Validates the Parameters of this Circuit when a value has been changed by the GUI
+ * Also called right after @initParameters and when the Chunk reloads
+ * @param aCircuitData, The Data Storage you can use (8 Slots and only the first 4 are User definable)
+ * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself
+ */
+ public abstract void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock);
+
+ /**
+ * Called every tick if the Block has enough Energy and if the Block is Active
+ * @param aCircuitData, The Data Storage you can use (8 Slots)
+ * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself
+ */
+ public abstract void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock);
+
+ /**
+ * If the ItemStack should be displayed. Parameters are between 0 and 3.
+ */
+ public abstract boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex);
+
+ /*****************
+ * GUI Functions *
+ *****************/
+
+ /**
+ * The Name of the Gate for the GUI
+ */
+ @SideOnly(Side.CLIENT)
+ public abstract String getName();
+
+ /**
+ * The Description of the Gate for the GUI
+ */
+ @SideOnly(Side.CLIENT)
+ public abstract String getDescription();
+
+ /**
+ * The Description of the Data Field for the GUI
+ */
+ @SideOnly(Side.CLIENT)
+ public abstract String getDataDescription(int[] aCircuitData, int aCircuitDataIndex);
+
+ /**
+ * How the Integer should be displayed in the GUI.
+ * null means, that it just displays as regular Number.
+ */
+ @SideOnly(Side.CLIENT)
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) {
+ return null;
+ }
+
+
+ /****************************
+ * Useful Utility Functions *
+ ****************************/
+
+ /**
+ * returns if there is Redstone applied to any of the valid Inputs (OR)
+ */
+ public static final boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * returns if there is Redstone applied to all the valid Inputs (AND)
+ */
+ public static final boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ if (aRedstoneCircuitBlock.getInputRedstone(i) == 0) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * returns if there is Redstone applied to exactly one of the valid Inputs (XOR)
+ */
+ public static final boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ int tRedstoneAmount = 0;
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) {
+ tRedstoneAmount++;
+ }
+ }
+ }
+ return tRedstoneAmount == 1;
+ }
+
+ /**
+ * returns the strongest incoming RS-Power
+ */
+ public static final byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ byte tRedstoneAmount = 0;
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ tRedstoneAmount = (byte)Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ }
+ }
+ return tRedstoneAmount;
+ }
+
+ /**
+ * returns the weakest incoming non-zero RS-Power
+ */
+ public static final byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0;
+ byte tRedstoneAmount = 15;
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ if (aRedstoneCircuitBlock.getInputRedstone(i) > 0)
+ tRedstoneAmount = (byte)Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ }
+ }
+ return tRedstoneAmount;
+ }
+
+ /**
+ * returns the weakest incoming RS-Power
+ */
+ public static final byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0;
+ byte tRedstoneAmount = 15;
+ for (byte i = 0; i < 6; i++) {
+ if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) {
+ tRedstoneAmount = (byte)Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ }
+ }
+ return tRedstoneAmount;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_Config.java b/src/main/java/gregtech/api/util/GT_Config.java
new file mode 100644
index 0000000000..9ad2ebab50
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Config.java
@@ -0,0 +1,86 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+import static gregtech.api.enums.GT_Values.F;
+import gregtech.api.GregTech_API;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.common.config.Property;
+
+public class GT_Config implements Runnable {
+ public static boolean troll = F;
+
+ public static Configuration sConfigFileIDs;
+
+ public static int addIDConfig(Object aCategory, String aName, int aDefault) {
+ if (GT_Utility.isStringInvalid(aName)) return aDefault;
+ Property tProperty = sConfigFileIDs.get(aCategory.toString().replaceAll("\\|", "."), aName.replaceAll("\\|", "."), aDefault);
+ int rResult = tProperty.getInt(aDefault);
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sConfigFileIDs.save();
+ return rResult;
+ }
+
+ public final Configuration mConfig;
+
+ public GT_Config(Configuration aConfig) {
+ mConfig = aConfig;
+ mConfig.load();
+ mConfig.save();
+ GregTech_API.sAfterGTPreload.add(this); // in case of crash on startup
+ GregTech_API.sAfterGTLoad.add(this); // in case of crash on startup
+ GregTech_API.sAfterGTPostload.add(this);
+ }
+
+ public static String getStackConfigName(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return E;
+ Object rName = GT_OreDictUnificator.getAssociation(aStack);
+ if (rName != null) return rName.toString();
+ try {if (GT_Utility.isStringValid(rName = aStack.getUnlocalizedName())) return rName.toString();} catch (Throwable e) {/*Do nothing*/}
+ String sName = aStack.getItem().toString();
+ String[] tmp = sName.split("@");
+ if(tmp.length>0)sName=tmp[0];
+ return sName + "." + aStack.getItemDamage();
+ }
+
+ public boolean get(Object aCategory, ItemStack aStack, boolean aDefault) {
+ String aName = getStackConfigName(aStack);
+ return get(aCategory, aName , aDefault);
+ }
+
+ public boolean get(Object aCategory, String aName, boolean aDefault) {
+ if (GT_Utility.isStringInvalid(aName)) return aDefault;
+ Property tProperty = mConfig.get(aCategory.toString().replaceAll("\\|", "_"), (aName+"_"+aDefault).replaceAll("\\|", "_"), aDefault);
+ boolean rResult = tProperty.getBoolean(aDefault);
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save();
+ return rResult;
+ }
+
+ public int get(Object aCategory, ItemStack aStack, int aDefault) {
+ return get(aCategory, getStackConfigName(aStack), aDefault);
+ }
+
+ public int get(Object aCategory, String aName, int aDefault) {
+ if (GT_Utility.isStringInvalid(aName)) return aDefault;
+ Property tProperty = mConfig.get(aCategory.toString().replaceAll("\\|", "_"), (aName+"_"+aDefault).replaceAll("\\|", "_"), aDefault);
+ int rResult = tProperty.getInt(aDefault);
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save();
+ return rResult;
+ }
+
+ public double get(Object aCategory, ItemStack aStack, double aDefault) {
+ return get(aCategory, getStackConfigName(aStack), aDefault);
+ }
+
+ public double get(Object aCategory, String aName, double aDefault) {
+ if (GT_Utility.isStringInvalid(aName)) return aDefault;
+ Property tProperty = mConfig.get(aCategory.toString().replaceAll("\\|", "_"), (aName+"_"+aDefault).replaceAll("\\|", "_"), aDefault);
+ double rResult = tProperty.getDouble(aDefault);
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save();
+ return rResult;
+ }
+
+ @Override
+ public void run() {
+ mConfig.save();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java
new file mode 100644
index 0000000000..cfc75f36b8
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_CoverBehavior.java
@@ -0,0 +1,217 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.objects.GT_ItemStack;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+/**
+ * For Covers with a special behavior.
+ */
+public abstract class GT_CoverBehavior {
+ /**
+ * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time.
+ */
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ return aCoverVariable;
+ }
+
+ /**
+ * Called when someone rightclicks this Cover.
+ *
+ * return true, if something actually happens.
+ */
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return false;
+ }
+
+ /**
+ * Called when someone rightclicks this Cover Client Side
+ *
+ * return true, if something actually happens.
+ */
+ public boolean onCoverRightclickClient(byte aSide, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return false;
+ }
+
+ /**
+ * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case.
+ *
+ * return the new Value of the Cover Variable
+ */
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return aCoverVariable;
+ }
+
+ /**
+ * Checks if the Cover can be placed on this.
+ */
+ public boolean isCoverPlaceable(byte aSide, GT_ItemStack aStack, ICoverable aTileEntity) {
+ return true;
+ }
+
+ /**
+ * Removes the Cover if this returns true, or if aForced is true.
+ * Doesn't get called when the Machine Block is getting broken, only if you break the Cover away from the Machine.
+ */
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced) {
+ return true;
+ }
+
+ /**
+ * Gives a small Text for the status of the Cover.
+ */
+ public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return E;
+ }
+
+ /**
+ * How Blast Proof the Cover is. 30 is normal.
+ */
+ public float getBlastProofLevel(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 10.0F;
+ }
+
+ /**
+ * If it lets RS-Signals into the Block
+ *
+ * This is just Informative so that Machines know if their Redstone Input is blocked or not
+ */
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets RS-Signals out of the Block
+ */
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Fibre-Signals into the Block
+ *
+ * This is just Informative so that Machines know if their Redstone Input is blocked or not
+ */
+ public boolean letsFibreGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Fibre-Signals out of the Block
+ */
+ public boolean letsFibreGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Energy into the Block
+ */
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Energy out of the Block
+ */
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not.
+ */
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not.
+ */
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each Slot).
+ */
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each Slot).
+ */
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * If it lets you rightclick the Machine normally
+ */
+ public boolean isGUIClickable(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * Needs to return true for Covers, which have a Redstone Output on their Facing.
+ */
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * if this Cover should let Pipe Connections look connected even if it is not the case.
+ */
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return false;
+ }
+
+ /**
+ * Called to determine the incoming Redstone Signal of a Machine.
+ * Returns the original Redstone per default.
+ * The Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0.
+ */
+ public byte getRedstoneInput(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return letsRedstoneGoIn(aSide, aCoverID, aCoverVariable, aTileEntity)?aInputRedstone:0;
+ }
+
+ /**
+ * Gets the Tick Rate for doCoverThings of the Cover
+ *
+ * 0 = No Ticks! Yes, 0 is Default, you have to override this
+ */
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 0;
+ }
+
+ /**
+ * If this is a simple Cover, which can also be used on Bronze Machines and similar.
+ */
+ public boolean isSimpleCover() {
+ return false;
+ }
+
+ /**
+ * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then).
+ */
+ public byte getLensColor(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return -1;
+ }
+
+ /**
+ * @return the ItemStack dropped by this Cover
+ */
+ public ItemStack getDrop(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return GT_OreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(aSide));
+ }
+
+ /**
+ * @return sets the Cover upon placement.
+ */
+ public void placeCover(byte aSide, ItemStack aCover, ICoverable aTileEntity) {
+ aTileEntity.setCoverIDAtSide(aSide, GT_Utility.stackToInt(aCover));
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_CreativeTab.java b/src/main/java/gregtech/api/util/GT_CreativeTab.java
new file mode 100644
index 0000000000..d789fdc8a5
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_CreativeTab.java
@@ -0,0 +1,24 @@
+package gregtech.api.util;
+
+import gregtech.api.enums.ItemList;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class GT_CreativeTab extends CreativeTabs {
+ public GT_CreativeTab(String aName, String aLocalName) {
+ super("GregTech." + aName);
+ GT_LanguageManager.addStringLocalization("itemGroup.GregTech." + aName, aLocalName);
+ }
+
+ @Override
+ public ItemStack getIconItemStack() {
+ return ItemList.Tool_Cheat.get(1, new ItemStack(Blocks.iron_block, 1));
+ }
+
+ @Override
+ public Item getTabIconItem() {
+ return ItemList.Circuit_Integrated.getItem();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_FoodStat.java b/src/main/java/gregtech/api/util/GT_FoodStat.java
new file mode 100644
index 0000000000..a2134290cf
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_FoodStat.java
@@ -0,0 +1,102 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.F;
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.interfaces.IFoodStat;
+import gregtech.api.items.GT_MetaBase_Item;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.PotionEffect;
+
+public class GT_FoodStat implements IFoodStat {
+ private final int mFoodLevel;
+ private final int[] mPotionEffects;
+ private final float mSaturation;
+ private final EnumAction mAction;
+ private final ItemStack mEmptyContainer;
+ private final boolean mAlwaysEdible, mInvisibleParticles, mIsRotten;
+ private boolean mExplosive = F, mMilk = F;
+
+ /**
+ * @param aFoodLevel Amount of Food in Half Bacon [0 - 20]
+ * @param aSaturation Amount of Saturation [0.0F - 1.0F]
+ * @param aAction The Action to be used. If this is null, it uses the Eating Action
+ * @param aEmptyContainer An empty Container (Optional)
+ * @param aAlwaysEdible If this Item is always edible, like Golden Apples or Potions
+ * @param aInvisibleParticles If the Particles of the Potion Effects are invisible
+ * @param aPotionEffects An Array of Potion Effects with %4==0 Elements as follows
+ * ID of a Potion Effect. 0 for none
+ * Duration of the Potion in Ticks
+ * Level of the Effect. [0, 1, 2] are for [I, II, III]
+ * The likelihood that this Potion Effect takes place upon being eaten [1 - 100]
+ */
+ public GT_FoodStat(int aFoodLevel, float aSaturation, EnumAction aAction, ItemStack aEmptyContainer, boolean aAlwaysEdible, boolean aInvisibleParticles, boolean aIsRotten, int... aPotionEffects) {
+ mFoodLevel = aFoodLevel;
+ mSaturation = aSaturation;
+ mAction = aAction==null?EnumAction.eat:aAction;
+ mPotionEffects = aPotionEffects;
+ mEmptyContainer = GT_Utility.copy(aEmptyContainer);
+ mInvisibleParticles = aInvisibleParticles;
+ mAlwaysEdible = aAlwaysEdible;
+ mIsRotten = aIsRotten;
+ }
+
+ public GT_FoodStat setExplosive() {
+ mExplosive = true;
+ return this;
+ }
+
+ public GT_FoodStat setMilk() {
+ mMilk = true;
+ return this;
+ }
+
+ @Override
+ public int getFoodLevel(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ return mFoodLevel;
+ }
+
+ @Override
+ public float getSaturation(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ return mSaturation;
+ }
+
+ @Override
+ public void onEaten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ aStack.stackSize--;
+ ItemStack tStack = GT_OreDictUnificator.get(GT_Utility.copy(mEmptyContainer));
+ if (tStack != null && !aPlayer.inventory.addItemStackToInventory(tStack)) aPlayer.dropPlayerItemWithRandomChoice(tStack, true);
+ aPlayer.worldObj.playSoundAtEntity(aPlayer, "random.burp", 0.5F, aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F);
+ if (!aPlayer.worldObj.isRemote) {
+ if (mMilk) {
+ aPlayer.curePotionEffects(new ItemStack(Items.milk_bucket, 1, 0));
+ }
+ for (int i = 3; i < mPotionEffects.length; i+=4) {
+ if (aPlayer.worldObj.rand.nextInt(100) < mPotionEffects[i]) {
+ aPlayer.addPotionEffect(new PotionEffect(mPotionEffects[i-3], mPotionEffects[i-2], mPotionEffects[i-1], mInvisibleParticles));
+ }
+ }
+ if (mExplosive) {
+ aPlayer.worldObj.newExplosion(aPlayer, aPlayer.posX, aPlayer.posY, aPlayer.posZ, 4, true, true);
+ aPlayer.attackEntityFrom(GT_DamageSources.getExplodingDamage(), Float.MAX_VALUE);
+ }
+ }
+ }
+
+ @Override
+ public EnumAction getFoodAction(GT_MetaBase_Item aItem, ItemStack aStack) {
+ return mAction;
+ }
+
+ @Override
+ public boolean alwaysEdible(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ return mAlwaysEdible;
+ }
+
+ @Override
+ public boolean isRotten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ return mIsRotten;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java b/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java
new file mode 100644
index 0000000000..8511f76c49
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java
@@ -0,0 +1,12 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.T;
+import ic2.api.item.IBoxable;
+import net.minecraft.item.ItemStack;
+
+public class GT_IBoxableWrapper implements IBoxable {
+ @Override
+ public boolean canBeStoredInToolbox(ItemStack itemstack) {
+ return T;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java b/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java
new file mode 100644
index 0000000000..0c15970429
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java
@@ -0,0 +1,16 @@
+package gregtech.api.util;
+
+public class GT_ItsNotMyFaultException extends RuntimeException {
+ private static final long serialVersionUID = -8752778866486460495L;
+
+ private String mError;
+
+ public GT_ItsNotMyFaultException(String aError) {
+ mError = aError;
+ }
+
+ @Override
+ public String toString() {
+ return "The GregTech-Addon has a Problem.\nIT'S NOT MY FAULT!!! Below is how to fix it.\n" + mError + "\nDO NOT COME TO ME WITH THIS CRASH. YOU CAUSED IT YOURSELF, AND I TOLD YOU HOW TO FIX IT!!!";
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java
new file mode 100644
index 0000000000..b419b7100f
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java
@@ -0,0 +1,95 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+import gregtech.api.GregTech_API;
+
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.common.config.Property;
+import cpw.mods.fml.common.registry.LanguageRegistry;
+
+public class GT_LanguageManager {
+ public static Configuration sEnglishFile;
+
+ public static final HashMap<String, String> TEMPMAP = new HashMap<String, String>(), BUFFERMAP = new HashMap<String, String>();
+
+ public static String addStringLocalization(String aKey, String aEnglish) {
+ return addStringLocalization(aKey, aEnglish, true);
+ }
+
+ public static String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) {
+ if (aKey == null) return E;
+ if (aWriteIntoLangFile) aEnglish = writeToLangFile(aKey, aEnglish);
+ TEMPMAP.put(aKey.trim(), aEnglish);
+ LanguageRegistry.instance().injectLanguage("en_US", TEMPMAP);
+ TEMPMAP.clear();
+ return aEnglish;
+ }
+
+ private static synchronized String writeToLangFile(String aKey, String aEnglish) {
+ if (aKey == null) return E;
+ if (sEnglishFile == null) {
+ BUFFERMAP.put(aKey.trim(), aEnglish);
+ } else {
+ if (!BUFFERMAP.isEmpty()) {
+ for (Entry<String, String> tEntry : BUFFERMAP.entrySet()) {
+ Property tProperty = sEnglishFile.get("LanguageFile", tEntry.getKey(), tEntry.getValue());
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sEnglishFile.save();
+ }
+ BUFFERMAP.clear();
+ }
+ Property tProperty = sEnglishFile.get("LanguageFile", aKey.trim(), aEnglish);
+ if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sEnglishFile.save();
+ if (sEnglishFile.get("EnableLangFile", "UseThisFileAsLanguageFile", false).getBoolean(false)) aEnglish = tProperty.getString();
+ }
+ return aEnglish;
+ }
+
+ public static String getTranslation(String aKey) {
+ if (aKey == null) return E;
+ String tTrimmedKey = aKey.trim(), rTranslation = LanguageRegistry.instance().getStringLocalization(tTrimmedKey);
+ if (GT_Utility.isStringInvalid(rTranslation)) {
+ rTranslation = StatCollector.translateToLocal(tTrimmedKey);
+ if (GT_Utility.isStringInvalid(rTranslation) || tTrimmedKey.equals(rTranslation)) {
+ if (aKey.endsWith(".name")) {
+ rTranslation = StatCollector.translateToLocal(tTrimmedKey.substring(0, tTrimmedKey.length() - 5));
+ if (GT_Utility.isStringInvalid(rTranslation) || tTrimmedKey.substring(0, tTrimmedKey.length() - 5).equals(rTranslation)) {
+ return aKey;
+ }
+ } else {
+ rTranslation = StatCollector.translateToLocal(tTrimmedKey + ".name");
+ if (GT_Utility.isStringInvalid(rTranslation) || (tTrimmedKey + ".name").equals(rTranslation)) {
+ return aKey;
+ }
+ }
+ }
+ }
+ return rTranslation;
+ }
+
+ public static String getTranslation(String aKey, String aSeperator) {
+ if (aKey == null) return E;
+ String rTranslation = E;
+ for (String tString : aKey.split(aSeperator)) {
+ rTranslation += getTranslation(tString);
+ }
+ return rTranslation;
+ }
+
+ public static String getTranslateableItemStackName(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return "null";
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT != null && tNBT.hasKey("display")) {
+ String tName = tNBT.getCompoundTag("display").getString("Name");
+ if (GT_Utility.isStringValid(tName)) {
+ return tName;
+ }
+ }
+ return aStack.getUnlocalizedName() + ".name";
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_Log.java b/src/main/java/gregtech/api/util/GT_Log.java
new file mode 100644
index 0000000000..06a009175c
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Log.java
@@ -0,0 +1,35 @@
+package gregtech.api.util;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Just a simple Logging Function. If on Server, then this will point to System.out and System.err
+ */
+public class GT_Log {
+ public static PrintStream out = System.out;
+ public static PrintStream err = System.err;
+ public static PrintStream ore = new LogBuffer();
+ public static PrintStream pal = null;
+ public static File mLogFile;
+ public static File mOreDictLogFile;
+ public static File mPlayerActivityLogFile;
+
+ public static class LogBuffer extends PrintStream {
+ public final List<String> mBufferedOreDictLog = new ArrayList<String>();
+
+ public LogBuffer() {
+ super(new OutputStream() {@Override public void write(int arg0) {/*Do nothing*/}});
+ }
+
+ @Override
+ public void println(String aString) {
+ mBufferedOreDictLog.add(aString);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java
new file mode 100644
index 0000000000..b657c8ee3f
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_ModHandler.java
@@ -0,0 +1,1730 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.*;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.*;
+import gregtech.api.interfaces.IDamagableItem;
+import gregtech.api.interfaces.IItemContainer;
+import gregtech.api.interfaces.internal.IGT_CraftingRecipe;
+import gregtech.api.objects.GT_HashSet;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
+import ic2.api.item.IBoxable;
+import ic2.api.item.IC2Items;
+import ic2.api.item.IElectricItem;
+import ic2.api.reactor.IReactorComponent;
+import ic2.api.recipe.IRecipeInput;
+import ic2.api.recipe.RecipeInputItemStack;
+import ic2.api.recipe.RecipeOutput;
+import ic2.core.AdvRecipe;
+
+import java.util.*;
+import java.util.Map.Entry;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.InventoryCrafting;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.*;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntityFurnace;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
+import net.minecraftforge.oredict.ShapedOreRecipe;
+import net.minecraftforge.oredict.ShapelessOreRecipe;
+import cpw.mods.fml.common.event.FMLInterModComms;
+import cpw.mods.fml.common.registry.GameRegistry;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the Interface I use for interacting with other Mods.
+ *
+ * Due to the many imports, this File can cause compile Problems if not all the APIs are installed
+ */
+public class GT_ModHandler {
+ public static volatile int VERSION = 508;
+
+ /**
+ * Returns if that Liquid is Water or Distilled Water
+ */
+ public static boolean isWater(FluidStack aFluid) {
+ if (aFluid == null) return F;
+ return aFluid.isFluidEqual(getWater(1)) || aFluid.isFluidEqual(getDistilledWater(1));
+ }
+
+ /**
+ * Returns a Liquid Stack with given amount of Water.
+ */
+ public static FluidStack getWater(long aAmount) {
+ return FluidRegistry.getFluidStack("water", (int)aAmount);
+ }
+
+ /**
+ * Returns a Liquid Stack with given amount of distilled Water.
+ */
+ public static FluidStack getDistilledWater(long aAmount) {
+ return FluidRegistry.getFluidStack("ic2distilledwater", (int)aAmount);
+ }
+
+ /**
+ * Returns if that Liquid is Lava
+ */
+ public static boolean isLava(FluidStack aFluid) {
+ if (aFluid == null) return F;
+ return aFluid.isFluidEqual(getLava(1));
+ }
+
+ /**
+ * Returns a Liquid Stack with given amount of Lava.
+ */
+ public static FluidStack getLava(long aAmount) {
+ return FluidRegistry.getFluidStack("lava", (int)aAmount);
+ }
+
+ /**
+ * Returns if that Liquid is Steam
+ */
+ public static boolean isSteam(FluidStack aFluid) {
+ if (aFluid == null) return F;
+ return aFluid.isFluidEqual(getSteam(1));
+ }
+
+ /**
+ * Returns a Liquid Stack with given amount of Steam.
+ */
+ public static FluidStack getSteam(long aAmount) {
+ return FluidRegistry.getFluidStack("steam", (int)aAmount);
+ }
+
+ /**
+ * Returns if that Liquid is Milk
+ */
+ public static boolean isMilk(FluidStack aFluid) {
+ if (aFluid == null) return F;
+ return aFluid.isFluidEqual(getMilk(1));
+ }
+
+ /**
+ * Returns a Liquid Stack with given amount of Milk.
+ */
+ public static FluidStack getMilk(long aAmount) {
+ return FluidRegistry.getFluidStack("milk", (int)aAmount);
+ }
+
+ public static ItemStack getEmptyFuelCan(long aAmount) {
+ return ItemList.IC2_Fuel_Can_Empty.get(aAmount);
+ }
+
+ public static ItemStack getEmptyCell(long aAmount) {
+ return ItemList.Cell_Empty.get(aAmount);
+ }
+
+ public static ItemStack getAirCell(long aAmount) {
+ return ItemList.Cell_Air.get(aAmount);
+ }
+
+ public static ItemStack getWaterCell(long aAmount) {
+ return ItemList.Cell_Water.get(aAmount);
+ }
+
+ public static ItemStack getLavaCell(long aAmount) {
+ return ItemList.Cell_Lava.get(aAmount);
+ }
+
+ /**
+ * @param aValue the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it properly, stupid Mojang...
+ */
+ public static ItemStack setFuelValue(ItemStack aStack, short aValue) {
+ aStack.setTagCompound(GT_Utility.getNBTContainingShort(aStack.getTagCompound(), "GT.ItemFuelValue", aValue));
+ return aStack;
+ }
+
+ /**
+ * @return the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it properly, stupid Mojang...
+ */
+ public static short getFuelValue(ItemStack aStack) {
+ return (short)TileEntityFurnace.getItemBurnTime(aStack);
+ }
+
+ /**
+ * @param aValue Fuel value in EU
+ */
+ public static ItemStack getFuelCan(int aValue) {
+ if (aValue < 5) return ItemList.IC2_Fuel_Can_Empty.get(1);
+ ItemStack rFuelCanStack = ItemList.IC2_Fuel_Can_Filled.get(1);
+ if (rFuelCanStack == null) return null;
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setInteger("value", aValue/5);
+ rFuelCanStack.setTagCompound(tNBT);
+ return rFuelCanStack;
+ }
+
+ /**
+ * @param aFuelCan the Item you want to check
+ * @return the exact Value in EU the Fuel Can is worth if its even a Fuel Can.
+ */
+ public static int getFuelCanValue(ItemStack aFuelCan) {
+ if (GT_Utility.isStackInvalid(aFuelCan) || !ItemList.IC2_Fuel_Can_Filled.isStackEqual(aFuelCan, F, T)) return 0;
+ NBTTagCompound tNBT = aFuelCan.getTagCompound();
+ return tNBT==null?0:tNBT.getInteger("value")*5;
+ }
+
+ private static final Map<String, ItemStack> sIC2ItemMap = new HashMap<String, ItemStack>();
+
+ /**
+ * Gets an Item from IndustrialCraft, and returns a Replacement Item if not possible
+ */
+ public static ItemStack getIC2Item(String aItem, long aAmount, ItemStack aReplacement) {
+ if (GT_Utility.isStringInvalid(aItem) || !GregTech_API.sPreloadStarted) return null;
+ //if (D1) GT_Log.out.println("Requested the Item '" + aItem + "' from the IC2-API");
+ if (!sIC2ItemMap.containsKey(aItem)) try {ItemStack tStack = IC2Items.getItem(aItem); sIC2ItemMap.put(aItem, tStack); if (tStack == null && D1) GT_Log.err.println(aItem + " is not found in the IC2 Items!");} catch (Throwable e) {/*Do nothing*/}
+ return GT_Utility.copyAmount(aAmount, sIC2ItemMap.get(aItem), aReplacement);
+ }
+
+ /**
+ * Gets an Item from IndustrialCraft, but the Damage Value can be specified, and returns a Replacement Item with the same Damage if not possible
+ */
+ public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta, ItemStack aReplacement) {
+ ItemStack rStack = getIC2Item(aItem, aAmount, aReplacement);
+ if (rStack == null) return null;
+ Items.feather.setDamage(rStack, aMeta);
+ return rStack;
+ }
+
+ /**
+ * Gets an Item from IndustrialCraft, but the Damage Value can be specified
+ */
+ public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta) {
+ return getIC2Item(aItem, aAmount, aMeta, null);
+ }
+
+ /**
+ * Gets an Item from IndustrialCraft
+ */
+ public static ItemStack getIC2Item(String aItem, long aAmount) {
+ return getIC2Item(aItem, aAmount, null);
+ }
+
+ /**
+ * Gets an Item from RailCraft
+ */
+ public static ItemStack getModItem(String aModID, String aItem, long aAmount) {
+ return getModItem(aModID, aItem, aAmount, null);
+ }
+
+ /**
+ * Gets an Item from RailCraft, and returns a Replacement Item if not possible
+ */
+ public static ItemStack getModItem(String aModID, String aItem, long aAmount, ItemStack aReplacement) {
+ if (GT_Utility.isStringInvalid(aItem) || !GregTech_API.sPreloadStarted) return null;
+ return GT_Utility.copyAmount(aAmount, GameRegistry.findItemStack(aModID, aItem, (int)aAmount), aReplacement);
+ }
+
+ /**
+ * Gets an Item from RailCraft, but the Damage Value can be specified
+ */
+ public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta) {
+ ItemStack rStack = getModItem(aModID, aItem, aAmount);
+ if (rStack == null) return null;
+ Items.feather.setDamage(rStack, aMeta);
+ return rStack;
+ }
+
+ /**
+ * Gets an Item from RailCraft, but the Damage Value can be specified, and returns a Replacement Item with the same Damage if not possible
+ */
+ public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta, ItemStack aReplacement) {
+ ItemStack rStack = getModItem(aModID, aItem, aAmount, aReplacement);
+ if (rStack == null) return null;
+ Items.feather.setDamage(rStack, aMeta);
+ return rStack;
+ }
+
+ /**
+ * OUT OF ORDER
+ */
+ public static boolean getModeKeyDown(EntityPlayer aPlayer) {
+ return F;
+ }
+
+ /**
+ * OUT OF ORDER
+ */
+ public static boolean getBoostKeyDown(EntityPlayer aPlayer) {
+ return F;
+ }
+
+ /**
+ * OUT OF ORDER
+ */
+ public static boolean getJumpKeyDown(EntityPlayer aPlayer) {
+ return F;
+ }
+
+ /**
+ * Adds a Valuable Ore to the Miner
+ */
+ public static boolean addValuableOre(Block aBlock, int aMeta, int aValue) {
+ if (aValue <= 0) return F;
+ try {
+ Class.forName("ic2.core.IC2").getMethod("addValuableOre", IRecipeInput.class, int.class).invoke(null, new RecipeInputItemStack(new ItemStack(aBlock, 1, aMeta)), aValue);
+ } catch (Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Adds a Scrapbox Drop. Fails at April first for the "suddenly Hoes"-Feature of IC2
+ */
+ public static boolean addScrapboxDrop(float aChance, ItemStack aOutput) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aOutput == null || aChance <= 0) return F;
+ aOutput.stackSize = 1;
+ if (GT_Config.troll && !GT_Utility.areStacksEqual(aOutput, new ItemStack(Items.wooden_hoe, 1, 0))) return F;
+ aChance = (float)GregTech_API.sRecipeFile.get(ConfigCategories.Machines.scrapboxdrops, aOutput, aChance);
+ if (aChance <= 0) return F;
+ try {
+ GT_Utility.callMethod(GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", T, T), "addDrop", T, F, T, GT_Utility.copy(aOutput), aChance);
+ GT_Utility.callMethod(GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", T, T), "addRecipe", T, T, F, GT_Utility.copy(aOutput), aChance);
+ } catch (Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Adds an Item to the Recycler Blacklist
+ */
+ public static boolean addToRecyclerBlackList(ItemStack aRecycledStack) {
+ if (aRecycledStack == null) return F;
+ try {
+ ic2.api.recipe.Recipes.recyclerBlacklist.add(new RecipeInputItemStack(aRecycledStack));
+ } catch (Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Just simple Furnace smelting. Unbelievable how Minecraft fails at making a simple ItemStack->ItemStack mapping...
+ */
+ public static boolean addSmeltingRecipe(ItemStack aInput, ItemStack aOutput) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aInput == null || aOutput == null || GT_Utility.getContainerItem(aInput, F) != null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.smelting, aInput, T)) return F;
+ FurnaceRecipes.smelting().func_151394_a(aInput, GT_Utility.copy(aOutput), 0.0F);
+ return T;
+ }
+
+ /**
+ * Adds to Furnace AND Alloysmelter AND Induction Smelter
+ */
+ public static boolean addSmeltingAndAlloySmeltingRecipe(ItemStack aInput, ItemStack aOutput) {
+ if (aInput == null || aOutput == null) return F;
+ boolean temp = F;
+ if (aInput.stackSize == 1 && addSmeltingRecipe(aInput, aOutput)) temp = T;
+ if (RA.addAlloySmelterRecipe(aInput, OrePrefixes.ingot.contains(aOutput)?ItemList.Shape_Mold_Ingot.get(0):OrePrefixes.block.contains(aOutput)?ItemList.Shape_Mold_Block.get(0):OrePrefixes.nugget.contains(aOutput)?ItemList.Shape_Mold_Nugget.get(0):null, aOutput, 130, 3)) temp = T;
+ if (addInductionSmelterRecipe(aInput, null, aOutput, null, aOutput.stackSize*1600, 0)) temp = T;
+ return temp;
+ }
+
+ /**
+ * LiquidTransposer Recipe for both directions
+ */
+ public static boolean addLiquidTransposerRecipe(ItemStack aEmptyContainer, FluidStack aLiquid, ItemStack aFullContainer, int aMJ) {
+ aFullContainer = GT_OreDictUnificator.get(T, aFullContainer);
+ if (aEmptyContainer == null || aFullContainer == null || aLiquid == null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.liquidtransposer, aFullContainer, T)) return F;
+ try {
+ ThermalExpansion.addTransposerFill(aMJ*10, aEmptyContainer, aFullContainer, aLiquid, T);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * LiquidTransposer Recipe for filling Containers
+ */
+ public static boolean addLiquidTransposerFillRecipe(ItemStack aEmptyContainer, FluidStack aLiquid, ItemStack aFullContainer, int aMJ) {
+ aFullContainer = GT_OreDictUnificator.get(T, aFullContainer);
+ if (aEmptyContainer == null || aFullContainer == null || aLiquid == null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.liquidtransposerfilling, aFullContainer, T)) return F;
+ try {
+ ThermalExpansion.addTransposerFill(aMJ*10, aEmptyContainer, aFullContainer, aLiquid, F);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * LiquidTransposer Recipe for emptying Containers
+ */
+ public static boolean addLiquidTransposerEmptyRecipe(ItemStack aFullContainer, FluidStack aLiquid, ItemStack aEmptyContainer, int aMJ) {
+ aEmptyContainer = GT_OreDictUnificator.get(T, aEmptyContainer);
+ if (aFullContainer == null || aEmptyContainer == null || aLiquid == null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.liquidtransposeremptying, aFullContainer, T)) return F;
+ try {
+ ThermalExpansion.addTransposerExtract(aMJ*10, aFullContainer, aEmptyContainer, aLiquid, 100, F);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * IC2-Extractor Recipe. Overloads old Recipes automatically
+ */
+ public static boolean addExtractionRecipe(ItemStack aInput, ItemStack aOutput) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aInput == null || aOutput == null) return F;
+ GT_Utility.removeSimpleIC2MachineRecipe(aInput, getExtractorRecipeList(), null);
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.extractor, aInput, T)) return F;
+ GT_Utility.addSimpleIC2MachineRecipe(aInput, getExtractorRecipeList(), null, aOutput);
+ return T;
+ }
+
+ /**
+ * RC-BlastFurnace Recipes
+ */
+ public static boolean addRCBlastFurnaceRecipe(ItemStack aInput, ItemStack aOutput, int aTime) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aInput == null || aOutput == null || aTime <= 0) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.rcblastfurnace, aInput, T)) return F;
+ aInput = GT_Utility.copy(aInput);
+ aOutput = GT_Utility.copy(aOutput);
+ try {
+ mods.railcraft.api.crafting.RailcraftCraftingManager.blastFurnace.addRecipe(aInput, T, F, aTime, aOutput);
+ } catch (Throwable e) {
+ return F;
+ }
+ return T;
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1) {
+ return addPulverisationRecipe(aInput, aOutput1, null, 0, F);
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2) {
+ return addPulverisationRecipe(aInput, aOutput1, aOutput2, 100, F);
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance) {
+ return addPulverisationRecipe(aInput, aOutput1, aOutput2, aChance, F);
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, boolean aOverwrite) {
+ return addPulverisationRecipe(aInput, aOutput1, null, 0, aOverwrite);
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, boolean aOverwrite) {
+ return addPulverisationRecipe(aInput, aOutput1, aOutput2, 100, aOverwrite);
+ }
+
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance, boolean aOverwrite) {
+ return addPulverisationRecipe(aInput, aOutput1, aOutput2, aChance, null, 0, aOverwrite);
+ }
+
+ /**
+ * Adds Several Pulverizer-Type Recipes.
+ */
+ public static boolean addPulverisationRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance2, ItemStack aOutput3, int aChance3, boolean aOverwrite) {
+ aOutput1 = GT_OreDictUnificator.get(T, aOutput1);
+ aOutput2 = GT_OreDictUnificator.get(T, aOutput2);
+ if (GT_Utility.isStackInvalid(aInput) || GT_Utility.isStackInvalid(aOutput1)) return F;
+ GT_Utility.removeSimpleIC2MachineRecipe(aInput, getMaceratorRecipeList(), null);
+
+ if (GT_Utility.getContainerItem(aInput, F) == null) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Machines.maceration, aInput, T)) {
+ GT_Utility.addSimpleIC2MachineRecipe(aInput, getMaceratorRecipeList(), null, aOutput1);
+ }
+
+ RA.addPulveriserRecipe(aInput, new ItemStack[] {aOutput1, aOutput2, aOutput3}, new int[] {10000, aChance2<=0?1000:100*aChance2, aChance3<=0?1000:100*aChance3}, 400, 2);
+
+ if (!OrePrefixes.log.contains(aInput)) {
+ if (Materials.Wood.contains(aOutput1)) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Machines.pulverization, aInput, T)) {
+ if (aOutput2 == null)
+ ThermalExpansion.addSawmillRecipe(32000, GT_Utility.copy(aInput), GT_Utility.copy(aOutput1));
+ else
+ ThermalExpansion.addSawmillRecipe(32000, GT_Utility.copy(aInput), GT_Utility.copy(aOutput1), GT_Utility.copy(aOutput2), aChance2<=0?10:aChance2);
+ }
+ } else {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Machines.rockcrushing, aInput, T)) {
+ try {
+ if (GT_Utility.getBlockFromStack(aInput) != Blocks.obsidian && GT_Utility.getBlockFromStack(aInput) != Blocks.gravel) {
+ mods.railcraft.api.crafting.IRockCrusherRecipe tRecipe = mods.railcraft.api.crafting.RailcraftCraftingManager.rockCrusher.createNewRecipe(GT_Utility.copyAmount(1, aInput), aInput.getItemDamage() != W, F);
+ tRecipe.addOutput(GT_Utility.copy(aOutput1), 1.0F/aInput.stackSize);
+ if (aOutput2 != null) tRecipe.addOutput(GT_Utility.copy(aOutput2), (0.01F*(aChance2<=0?10:aChance2))/aInput.stackSize);
+ if (aOutput3 != null) tRecipe.addOutput(GT_Utility.copy(aOutput3), (0.01F*(aChance3<=0?10:aChance3))/aInput.stackSize);
+ }
+ } catch(Throwable e) {/*Do nothing*/}
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Machines.pulverization, aInput, T)) {
+ if (aOutput2 == null)
+ ThermalExpansion.addPulverizerRecipe(32000, GT_Utility.copy(aInput), GT_Utility.copy(aOutput1));
+ else
+ ThermalExpansion.addPulverizerRecipe(32000, GT_Utility.copy(aInput), GT_Utility.copy(aOutput1), GT_Utility.copy(aOutput2), aChance2<=0?10:aChance2);
+ }
+ }
+ }
+ }
+ return T;
+ }
+
+ /**
+ * Adds a Recipe to the Sawmills of GregTech and ThermalCraft
+ */
+ public static boolean addSawmillRecipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2) {
+ aOutput1 = GT_OreDictUnificator.get(T, aOutput1);
+ aOutput2 = GT_OreDictUnificator.get(T, aOutput2);
+ if (aInput1 == null || aOutput1 == null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.sawmill, aInput1, T)) return F;
+ try {
+ ThermalExpansion.addSawmillRecipe(1600, aInput1, aOutput1, aOutput2, 100);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Induction Smelter Recipes and Alloy Smelter Recipes
+ */
+ public static boolean addAlloySmelterRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt, boolean aAllowSecondaryInputEmpty) {
+ if (aInput1 == null || (aInput2 == null && !aAllowSecondaryInputEmpty) || aOutput1 == null) return F;
+ aOutput1 = GT_OreDictUnificator.get(T, aOutput1);
+ boolean temp = F;
+ if (RA.addAlloySmelterRecipe(aInput1, aInput2, aOutput1, aDuration, aEUt)) temp = T;
+ if (addInductionSmelterRecipe(aInput1, aInput2, aOutput1, null, aDuration * aEUt * 2, 0)) temp = T;
+ return temp;
+ }
+
+ /**
+ * Induction Smelter Recipes for TE
+ */
+ public static boolean addInductionSmelterRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, int aEnergy, int aChance) {
+ aOutput1 = GT_OreDictUnificator.get(T, aOutput1);
+ aOutput2 = GT_OreDictUnificator.get(T, aOutput2);
+ if (aInput1 == null || aOutput1 == null || GT_Utility.getContainerItem(aInput1, F) != null) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.inductionsmelter, aInput2==null?aInput1:aOutput1, T)) return F;
+ try {
+ ThermalExpansion.addSmelterRecipe(aEnergy*10, GT_Utility.copy(aInput1), aInput2==null?new ItemStack(Blocks.sand, 1, 0):aInput2, aOutput1, aOutput2, aChance);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Smelts Ores to Ingots
+ */
+ public static boolean addOreToIngotSmeltingRecipe(ItemStack aInput, ItemStack aOutput) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aInput == null || aOutput == null) return F;
+ FurnaceRecipes.smelting().func_151394_a(aInput, GT_Utility.copy(aOutput), 0.0F);
+ return T;
+ }
+
+ private static Map<IRecipeInput, RecipeOutput> sExtractorRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+ private static Map<IRecipeInput, RecipeOutput> sMaceratorRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+ private static Map<IRecipeInput, RecipeOutput> sCompressorRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+ private static Map<IRecipeInput, RecipeOutput> sOreWashingRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+ private static Map<IRecipeInput, RecipeOutput> sThermalCentrifugeRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+ private static Map<IRecipeInput, RecipeOutput> sMassfabRecipes = new HashMap<IRecipeInput, RecipeOutput>();
+
+ public static Map<IRecipeInput, RecipeOutput> getExtractorRecipeList() {
+ try {
+ return ic2.api.recipe.Recipes.extractor.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sExtractorRecipes;
+ }
+
+ public static Map<IRecipeInput, RecipeOutput> getCompressorRecipeList() {
+ try {
+ return ic2.api.recipe.Recipes.compressor.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sCompressorRecipes;
+ }
+
+ public static Map<IRecipeInput, RecipeOutput> getMaceratorRecipeList() {
+ try {
+ return ic2.api.recipe.Recipes.macerator.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sMaceratorRecipes;
+ }
+
+ public static Map<IRecipeInput, RecipeOutput> getThermalCentrifugeRecipeList() {
+ try {
+ return ic2.api.recipe.Recipes.centrifuge.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sThermalCentrifugeRecipes;
+ }
+
+ public static Map<IRecipeInput, RecipeOutput> getOreWashingRecipeList() {
+ try {
+ return ic2.api.recipe.Recipes.oreWashing.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sOreWashingRecipes;
+ }
+
+ public static Map<IRecipeInput, RecipeOutput> getMassFabricatorList() {
+ try {
+ return ic2.api.recipe.Recipes.matterAmplifier.getRecipes();
+ } catch(Throwable e) {/*Do nothing*/}
+ return sMassfabRecipes;
+ }
+
+ /**
+ * IC2-ThermalCentrifuge Recipe. Overloads old Recipes automatically
+ */
+ public static boolean addThermalCentrifugeRecipe(ItemStack aInput, int aHeat, Object... aOutput) {
+ if (aInput == null || aOutput == null || aOutput.length <= 0 || aOutput[0] == null) return F;
+ GT_Utility.removeSimpleIC2MachineRecipe(aInput, getThermalCentrifugeRecipeList(), null);
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.thermalcentrifuge, aInput, T)) return F;
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setInteger("minHeat", aHeat);
+ GT_Utility.addSimpleIC2MachineRecipe(aInput, getThermalCentrifugeRecipeList(), tNBT, aOutput);
+ return T;
+ }
+
+ /**
+ * IC2-OreWasher Recipe. Overloads old Recipes automatically
+ */
+ public static boolean addOreWasherRecipe(ItemStack aInput, int aWaterAmount, Object... aOutput) {
+ if (aInput == null || aOutput == null || aOutput.length <= 0 || aOutput[0] == null) return F;
+ GT_Utility.removeSimpleIC2MachineRecipe(aInput, getOreWashingRecipeList(), null);
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.orewashing, aInput, T)) return F;
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setInteger("amount", aWaterAmount);
+ GT_Utility.addSimpleIC2MachineRecipe(aInput, getOreWashingRecipeList(), tNBT, aOutput);
+ return T;
+ }
+
+ /**
+ * IC2-Compressor Recipe. Overloads old Recipes automatically
+ */
+ public static boolean addCompressionRecipe(ItemStack aInput, ItemStack aOutput) {
+ aOutput = GT_OreDictUnificator.get(T, aOutput);
+ if (aInput == null || aOutput == null) return F;
+ GT_Utility.removeSimpleIC2MachineRecipe(aInput, getCompressorRecipeList(), null);
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.compression, aInput, T)) return F;
+ GT_Utility.addSimpleIC2MachineRecipe(aInput, getCompressorRecipeList(), null, aOutput);
+ return T;
+ }
+
+ /**
+ * @param aValue Scrap = 5000, Scrapbox = 45000, Diamond Dust 125000
+ */
+ public static boolean addIC2MatterAmplifier(ItemStack aAmplifier, int aValue) {
+ if (aAmplifier == null || aValue <= 0) return F;
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Machines.massfabamplifier, aAmplifier, T)) return F;
+ try {
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setInteger("amplification", aValue);
+ GT_Utility.callMethod(ic2.api.recipe.Recipes.matterAmplifier, "addRecipe", F, F, F, aAmplifier, tNBT);
+ } catch(Throwable e) {/*Do nothing*/}
+ return T;
+ }
+
+ /**
+ * Rolling Machine Crafting Recipe
+ */
+ public static boolean addRollingMachineRecipe(ItemStack aResult, Object[] aRecipe) {
+ aResult = GT_OreDictUnificator.get(T, aResult);
+ if (aResult == null || aRecipe == null || aResult.stackSize <= 0) return F;
+ try {
+ mods.railcraft.api.crafting.RailcraftCraftingManager.rollingMachine.getRecipeList().add(new ShapedOreRecipe(GT_Utility.copy(aResult), aRecipe));
+ } catch(Throwable e) {
+ return addCraftingRecipe(GT_Utility.copy(aResult), aRecipe);
+ }
+ return T;
+ }
+
+ private static boolean sBufferCraftingRecipes = T;
+ private static final List<IRecipe> sAllRecipeList = Collections.synchronizedList(new ArrayList<IRecipe>(5000)), sBufferRecipeList = new ArrayList<IRecipe>(1000);
+ public static final List<IRecipe> sSingleNonBlockDamagableRecipeList = new ArrayList<IRecipe>(1000);
+
+ public static void stopBufferingCraftingRecipes() {
+ sBufferCraftingRecipes = F;
+ for (IRecipe tRecipe : sBufferRecipeList) GameRegistry.addRecipe(tRecipe);
+ sBufferRecipeList.clear();
+ }
+
+ public static class RecipeBits {
+ /** Mirrors the Recipe */
+ public static long MIRRORED = B[0];
+ /** Buffers the Recipe for later addition. This makes things more efficient. */
+ public static long BUFFERED = B[1];
+ /** This is a special Tag I used for crafting Coins up and down. */
+ public static long KEEPNBT = B[2];
+ /** Makes the Recipe Reverse Craftable in the Disassembler. */
+ public static long DISMANTLEABLE = B[3];
+ /** Prevents the Recipe from accidentally getting removed by my own Handlers. */
+ public static long NOT_REMOVABLE = B[4];
+ /** Reverses the Output of the Recipe for smelting and pulverising. */
+ public static long REVERSIBLE = B[5];
+ /** Removes all Recipes with the same Output Item regardless of NBT, unless another Recipe Deletion Bit is added too. */
+ public static long DELETE_ALL_OTHER_RECIPES = B[6];
+ /** Removes all Recipes with the same Output Item limited to the same NBT. */
+ public static long DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT = B[7];
+ /** Removes all Recipes with the same Output Item limited to Shaped Recipes. */
+ public static long DELETE_ALL_OTHER_SHAPED_RECIPES = B[8];
+ /** Removes all Recipes with the same Output Item limited to native Recipe Handlers. */
+ public static long DELETE_ALL_OTHER_NATIVE_RECIPES = B[9];
+ /** Disables the check for colliding Recipes. */
+ public static long DO_NOT_CHECK_FOR_COLLISIONS = B[10];
+ /** Only adds the Recipe if there is another Recipe having that Output */
+ public static long ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT = B[11];
+ /** Only adds the Recipe if it has an Output */
+ public static long ONLY_ADD_IF_RESULT_IS_NOT_NULL = B[12];
+ }
+
+ /**
+ * Shapeless Crafting Recipes. Deletes conflicting Recipes too.
+ */
+ public static boolean addCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object[] aRecipe) {
+ return addCraftingRecipe(aResult, aEnchantmentsAdded, aEnchantmentLevelsAdded, F, T, F, F, F, F, F, F, F, F, F, F, T, aRecipe);
+ }
+
+ /**
+ * Regular Crafting Recipes. Deletes conflicting Recipes too.
+ *
+ * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" on them.
+ *
+ * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String.
+ *
+ * Lowercase Letters are reserved for Tools. They are as follows:
+ *
+ * 'b' ToolDictNames.craftingToolBlade
+ * 'c' ToolDictNames.craftingToolCrowbar,
+ * 'd' ToolDictNames.craftingToolScrewdriver,
+ * 'f' ToolDictNames.craftingToolFile,
+ * 'h' ToolDictNames.craftingToolHardHammer,
+ * 'i' ToolDictNames.craftingToolSolderingIron,
+ * 'j' ToolDictNames.craftingToolSolderingMetal,
+ * 'k' ToolDictNames.craftingToolKnive
+ * 'm' ToolDictNames.craftingToolMortar,
+ * 'p' ToolDictNames.craftingToolDrawplate,
+ * 'r' ToolDictNames.craftingToolSoftHammer,
+ * 's' ToolDictNames.craftingToolSaw,
+ * 'w' ToolDictNames.craftingToolWrench,
+ * 'x' ToolDictNames.craftingToolWireCutter,
+ */
+ public static boolean addCraftingRecipe(ItemStack aResult, Object[] aRecipe) {
+ return addCraftingRecipe(aResult, 0, aRecipe);
+ }
+
+ /**
+ * Regular Crafting Recipes. Deletes conflicting Recipes too.
+ *
+ * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" on them.
+ *
+ * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String.
+ *
+ * Lowercase Letters are reserved for Tools. They are as follows:
+ *
+ * 'b' ToolDictNames.craftingToolBlade
+ * 'c' ToolDictNames.craftingToolCrowbar,
+ * 'd' ToolDictNames.craftingToolScrewdriver,
+ * 'f' ToolDictNames.craftingToolFile,
+ * 'h' ToolDictNames.craftingToolHardHammer,
+ * 'i' ToolDictNames.craftingToolSolderingIron,
+ * 'j' ToolDictNames.craftingToolSolderingMetal,
+ * 'k' ToolDictNames.craftingToolKnive
+ * 'm' ToolDictNames.craftingToolMortar,
+ * 'p' ToolDictNames.craftingToolDrawplate,
+ * 'r' ToolDictNames.craftingToolSoftHammer,
+ * 's' ToolDictNames.craftingToolSaw,
+ * 'w' ToolDictNames.craftingToolWrench,
+ * 'x' ToolDictNames.craftingToolWireCutter,
+ */
+ public static boolean addCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) {
+ return addCraftingRecipe(aResult, new Enchantment[0], new int[0], (aBitMask & RecipeBits.MIRRORED) != 0, (aBitMask & RecipeBits.BUFFERED) != 0, (aBitMask & RecipeBits.KEEPNBT) != 0, (aBitMask & RecipeBits.DISMANTLEABLE) != 0, (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, (aBitMask & RecipeBits.REVERSIBLE) != 0, (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES) != 0, (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT) != 0, (aBitMask & RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES) != 0, (aBitMask & RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES) != 0, (aBitMask & RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS) == 0, (aBitMask & RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT) != 0, (aBitMask & RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL) != 0, aRecipe);
+ }
+
+ /**
+ * Internal realisation of the Crafting Recipe adding Process.
+ */
+ private static boolean addCraftingRecipe(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, Object[] aRecipe) {
+ aResult = GT_OreDictUnificator.get(T, aResult);
+ if (aOnlyAddIfResultIsNotNull && aResult == null) return F;
+ if (aResult != null && Items.feather.getDamage(aResult) == W) Items.feather.setDamage(aResult, 0);
+ if (aRecipe == null || aRecipe.length <= 0) return F;
+
+ boolean tThereWasARecipe = F;
+
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] instanceof IItemContainer)
+ aRecipe[i] = ((IItemContainer)aRecipe[i]).get(1);
+ else if (aRecipe[i] instanceof Enum)
+ aRecipe[i] = ((Enum)aRecipe[i]).name();
+ else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack || aRecipe[i] instanceof ItemData || aRecipe[i] instanceof String || aRecipe[i] instanceof Character))
+ aRecipe[i] = aRecipe[i].toString();
+ }
+
+ try {
+ String shape = E;
+ int idx = 0;
+ if (aRecipe[idx] instanceof Boolean) {
+ throw new IllegalArgumentException();
+ }
+
+ ArrayList<Object> tRecipeList = new ArrayList<Object>(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 'b': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolBlade .name()); break;
+ case 'c': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolCrowbar .name()); break;
+ case 'd': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolScrewdriver .name()); break;
+ case 'f': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolFile .name()); break;
+ case 'h': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolHardHammer .name()); break;
+ case 'i': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolSolderingIron .name()); break;
+ case 'j': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolSolderingMetal .name()); break;
+ case 'k': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolKnife .name()); break;
+ case 'm': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolMortar .name()); break;
+ case 'p': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolDrawplate .name()); break;
+ case 'r': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolSoftHammer .name()); break;
+ case 's': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolSaw .name()); break;
+ case 'w': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolWrench .name()); break;
+ case 'x': tRecipeList.add(c); tRecipeList.add(ToolDictNames.craftingToolWireCutter .name()); break;
+ }
+ }
+ }
+
+ aRecipe = tRecipeList.toArray();
+
+ if (aRecipe[idx] instanceof Boolean) {
+ idx++;
+ }
+ HashMap<Character, ItemStack> tItemStackMap = new HashMap<Character, ItemStack>();
+ HashMap<Character, ItemData> tItemDataMap = new HashMap<Character, ItemData>();
+ tItemStackMap.put(' ', null);
+
+ boolean tRemoveRecipe = T;
+
+ for (; idx < aRecipe.length; idx += 2) {
+ if (aRecipe[idx] == null || aRecipe[idx + 1] == null) {
+ if (D1) {
+ GT_Log.err.println("WARNING: Missing Item for shaped Recipe: " + (aResult==null?"null":aResult.getDisplayName()));
+ for (Object tContent : aRecipe) GT_Log.err.println(tContent);
+ }
+ return F;
+ }
+ Character chr = (Character)aRecipe[idx];
+ Object in = aRecipe[idx + 1];
+ if (in instanceof ItemStack) {
+ tItemStackMap.put(chr, GT_Utility.copy((ItemStack)in));
+ tItemDataMap.put(chr, GT_OreDictUnificator.getItemData((ItemStack)in));
+ } else if (in instanceof ItemData) {
+ String tString = in.toString();
+ if (tString.equals("plankWood")) {
+ tItemDataMap.put(chr, new ItemData(Materials.Wood, M));
+ } else if (tString.equals("stoneNetherrack")) {
+ tItemDataMap.put(chr, new ItemData(Materials.Netherrack, M));
+ } else if (tString.equals("stoneObsidian")) {
+ tItemDataMap.put(chr, new ItemData(Materials.Obsidian, M));
+ } else if (tString.equals("stoneEndstone")) {
+ tItemDataMap.put(chr, new ItemData(Materials.Endstone, M));
+ } else {
+ tItemDataMap.put(chr, (ItemData)in);
+ }
+ ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1);
+ if (tStack == null) tRemoveRecipe = F; else tItemStackMap.put(chr, tStack);
+ in = aRecipe[idx + 1] = in.toString();
+ } else if (in instanceof String) {
+ if (in.equals(OreDictNames.craftingChest .toString())) tItemDataMap.put(chr, new ItemData(Materials.Wood, M * 8));
+ else if (in.equals(OreDictNames.craftingBook .toString())) tItemDataMap.put(chr, new ItemData(Materials.Paper, M * 3));
+ else if (in.equals(OreDictNames.craftingPiston .toString())) tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 4, Materials.Wood, M * 3));
+ else if (in.equals(OreDictNames.craftingFurnace .toString())) tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 8));
+ else if (in.equals(OreDictNames.craftingIndustrialDiamond .toString())) tItemDataMap.put(chr, new ItemData(Materials.Diamond, M));
+ else if (in.equals(OreDictNames.craftingAnvil .toString())) tItemDataMap.put(chr, new ItemData(Materials.Iron, M * 10));
+ ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1);
+ if (tStack == null) tRemoveRecipe = F; else tItemStackMap.put(chr, tStack);
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ if (aReversible && aResult != null) {
+ ItemData[] tData = new ItemData[9];
+ int x = -1;
+ for (char chr : shape.toCharArray()) tData[++x] = tItemDataMap.get(chr);
+ if (GT_Utility.arrayContainsNonNull(tData)) GT_OreDictUnificator.addItemData(aResult, new ItemData(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 && Items.feather.getDamage(tRecipe[x]) == W) Items.feather.setDamage(tRecipe[x], 0);
+ }
+ tThereWasARecipe = removeRecipe(tRecipe) != null || tThereWasARecipe;
+ }
+ } catch(Throwable e) {e.printStackTrace(GT_Log.err);}
+
+ if (aResult == null || aResult.stackSize <= 0) return F;
+
+ if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT || aRemoveAllOtherShapedsWithSameOutput || aRemoveAllOtherNativeRecipes)
+ tThereWasARecipe = removeRecipeByOutput(aResult, !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, aRemoveAllOtherShapedsWithSameOutput, aRemoveAllOtherNativeRecipes) || tThereWasARecipe;
+
+ if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tThereWasARecipe) {
+ ArrayList<IRecipe> tList = (ArrayList<IRecipe>)CraftingManager.getInstance().getRecipeList();
+ for (int i = 0; i < tList.size() && !tThereWasARecipe; i++) {
+ IRecipe tRecipe = tList.get(i);
+ if (sSpecialRecipeClasses.contains(tRecipe.getClass().getName())) continue;
+ if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tRecipe.getRecipeOutput()), aResult, T)) {
+ tList.remove(i--);
+ tThereWasARecipe = T;
+ }
+ }
+ }
+
+ if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) Items.feather.setDamage(aResult, 0);
+
+ GT_Utility.updateItemStack(aResult);
+
+ if (tThereWasARecipe || !aOnlyAddIfThereIsAnyRecipeOutputtingThis) {
+ if (sBufferCraftingRecipes && aBuffered)
+ sBufferRecipeList.add(new GT_Shaped_Recipe(GT_Utility.copy(aResult), aDismantleable, aRemovable, aKeepNBT, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe).setMirrored(aMirrored));
+ else
+ GameRegistry.addRecipe(new GT_Shaped_Recipe(GT_Utility.copy(aResult), aDismantleable, aRemovable, aKeepNBT, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe).setMirrored(aMirrored));
+ }
+ return T;
+ }
+
+ /**
+ * Shapeless Crafting Recipes. Deletes conflicting Recipes too.
+ */
+ public static boolean addShapelessEnchantingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object[] aRecipe) {
+ return addShapelessCraftingRecipe(aResult, aEnchantmentsAdded, aEnchantmentLevelsAdded, T, F, F, F, aRecipe);
+ }
+
+ /**
+ * Shapeless Crafting Recipes. Deletes conflicting Recipes too.
+ */
+ public static boolean addShapelessCraftingRecipe(ItemStack aResult, Object[] aRecipe) {
+ return addShapelessCraftingRecipe(aResult, RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED, aRecipe);
+ }
+
+ /**
+ * Shapeless Crafting Recipes. Deletes conflicting Recipes too.
+ */
+ public static boolean addShapelessCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) {
+ return addShapelessCraftingRecipe(aResult, new Enchantment[0], new int[0], (aBitMask & RecipeBits.BUFFERED) != 0, (aBitMask & RecipeBits.KEEPNBT) != 0, (aBitMask & RecipeBits.DISMANTLEABLE) != 0, (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, aRecipe);
+ }
+
+ /**
+ * Shapeless Crafting Recipes. Deletes conflicting Recipes too.
+ */
+ private static boolean addShapelessCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, boolean aRemovable, Object[] aRecipe) {
+ aResult = GT_OreDictUnificator.get(T, aResult);
+ if (aRecipe == null || aRecipe.length <= 0) return F;
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] instanceof IItemContainer)
+ aRecipe[i] = ((IItemContainer)aRecipe[i]).get(1);
+ else if (aRecipe[i] instanceof Enum)
+ aRecipe[i] = ((Enum)aRecipe[i]).name();
+ else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack || aRecipe[i] instanceof String || aRecipe[i] instanceof Character))
+ aRecipe[i] = aRecipe[i].toString();
+ }
+ try {
+ ItemStack[] tRecipe = new ItemStack[9];
+ int i = 0;
+ for (Object tObject : aRecipe) {
+ if (tObject == null) {
+ if (D1) GT_Log.err.println("WARNING: Missing Item for shapeless Recipe: " + (aResult==null?"null":aResult.getDisplayName()));
+ for (Object tContent : aRecipe) GT_Log.err.println(tContent);
+ return F;
+ }
+ if (tObject instanceof ItemStack) {
+ tRecipe[i] = (ItemStack)tObject;
+ } else if (tObject instanceof String) {
+ tRecipe[i] = GT_OreDictUnificator.getFirstOre(tObject, 1);
+ if (tRecipe[i] == null) break;
+ } else if (tObject instanceof Boolean) {
+ //
+ } else {
+ throw new IllegalArgumentException();
+ }
+ i++;
+ }
+ removeRecipe(tRecipe);
+ } catch(Throwable e) {e.printStackTrace(GT_Log.err);}
+
+ if (aResult == null || aResult.stackSize <= 0) return F;
+
+ if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) Items.feather.setDamage(aResult, 0);
+
+ GT_Utility.updateItemStack(aResult);
+
+ if (sBufferCraftingRecipes && aBuffered)
+ sBufferRecipeList.add(new GT_Shapeless_Recipe(GT_Utility.copy(aResult), aDismantleable, aRemovable, aKeepNBT, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe));
+ else
+ GameRegistry.addRecipe(new GT_Shapeless_Recipe(GT_Utility.copy(aResult), aDismantleable, aRemovable, aKeepNBT, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe));
+ return T;
+ }
+
+ /**
+ * Removes a Smelting Recipe
+ */
+ public static boolean removeFurnaceSmelting(ItemStack aInput) {
+ if (aInput != null) {
+ for (Object tInput : FurnaceRecipes.smelting().getSmeltingList().keySet()) {
+ if (GT_Utility.isStackValid(tInput) && GT_Utility.areStacksEqual(aInput, (ItemStack)tInput, T)) {
+ FurnaceRecipes.smelting().getSmeltingList().remove(tInput);
+ return T;
+ }
+ }
+ }
+ return F;
+ }
+
+ /**
+ * Removes a Crafting Recipe and gives you the former output of it.
+ * @param aRecipe The content of the Crafting Grid as ItemStackArray with length 9
+ * @return the output of the old Recipe or null if there was nothing.
+ */
+ public static ItemStack removeRecipe(ItemStack... aRecipe) {
+ if (aRecipe == null) return null;
+ boolean temp = F;
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] != null) {
+ temp = T;
+ break;
+ }
+ }
+ if (!temp) return null;
+ ItemStack rReturn = null;
+ InventoryCrafting aCrafting = new InventoryCrafting(new Container() {@Override public boolean canInteractWith(EntityPlayer var1) {return F;}}, 3, 3);
+ for (int i = 0; i < aRecipe.length && i < 9; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]);
+ ArrayList<IRecipe> tList = (ArrayList<IRecipe>)CraftingManager.getInstance().getRecipeList();
+ for (int i = 0; i < tList.size(); i++) {try {for (; i < tList.size(); i++) {
+ if ((!(tList.get(i) instanceof IGT_CraftingRecipe) || ((IGT_CraftingRecipe)tList.get(i)).isRemovable()) && tList.get(i).matches(aCrafting, DW)) {
+ rReturn = tList.get(i).getCraftingResult(aCrafting);
+ if (rReturn != null) tList.remove(i--);
+ }
+ }} catch(Throwable e) {e.printStackTrace(GT_Log.err);}}
+ return rReturn;
+ }
+
+ public static boolean removeRecipeByOutput(ItemStack aOutput) {
+ return removeRecipeByOutput(aOutput, T, F, F);
+ }
+
+ public static Collection<String> sNativeRecipeClasses = new HashSet<String>(), sSpecialRecipeClasses = new HashSet<String>();
+
+ static {
+ sNativeRecipeClasses.add(ShapedRecipes.class.getName());
+ sNativeRecipeClasses.add(ShapedOreRecipe.class.getName());
+ sNativeRecipeClasses.add(GT_Shaped_Recipe.class.getName());
+ sNativeRecipeClasses.add(ShapelessRecipes.class.getName());
+ sNativeRecipeClasses.add(ShapelessOreRecipe.class.getName());
+ sNativeRecipeClasses.add(GT_Shapeless_Recipe.class.getName());
+ sNativeRecipeClasses.add(ic2.core.AdvRecipe.class.getName());
+ sNativeRecipeClasses.add(ic2.core.AdvShapelessRecipe.class.getName());
+ sNativeRecipeClasses.add("appeng.recipes.game.ShapedRecipe");
+ sNativeRecipeClasses.add("appeng.recipes.game.ShapelessRecipe");
+ sNativeRecipeClasses.add("forestry.core.utils.ShapedRecipeCustom");
+
+ // Recipe Classes, which should never be removed.
+ sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeFireworks.class.getName());
+ sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesArmorDyes.class.getName());
+ sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeBookCloning.class.getName());
+ sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapCloning.class.getName());
+ sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapExtending.class.getName());
+ sSpecialRecipeClasses.add("jds.bibliocraft.BiblioSpecialRecipes");
+ sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQBlockRecipe");
+ sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQuantumComputerRecipe");
+ sSpecialRecipeClasses.add("dan200.qcraft.shared.QBlockRecipe");
+ sSpecialRecipeClasses.add("appeng.recipes.game.FacadeRecipe");
+ sSpecialRecipeClasses.add("appeng.recipes.game.DisassembleRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.carts.LocomotivePaintingRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RotorRepairRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTableCopyRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTicketCopyRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.TankCartFilterRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.emblems.LocomotiveEmblemRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostColorRecipe");
+ sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostEmblemRecipe");
+ sSpecialRecipeClasses.add("mods.immibis.redlogic.interaction.RecipeDyeLumarButton");
+ sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesRobeArmorDyes");
+ sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesVoidRobeArmorDyes");
+ sSpecialRecipeClasses.add("thaumcraft.common.lib.crafting.ShapelessNBTOreRecipe");
+ sSpecialRecipeClasses.add("twilightforest.item.TFMapCloningRecipe");
+ sSpecialRecipeClasses.add("forestry.lepidopterology.MatingRecipe");
+ sSpecialRecipeClasses.add("micdoodle8.mods.galacticraft.planets.asteroids.recipe.CanisterRecipes");
+ sSpecialRecipeClasses.add("shedar.mods.ic2.nuclearcontrol.StorageArrayRecipe");
+ }
+
+ /**
+ * Removes a Crafting Recipe.
+ * @param aOutput The output of the Recipe.
+ * @return if it has removed at least one Recipe.
+ */
+ public static boolean removeRecipeByOutput(ItemStack aOutput, boolean aIgnoreNBT, boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) {
+ if (aOutput == null) return F;
+ boolean rReturn = F;
+ ArrayList<IRecipe> tList = (ArrayList<IRecipe>)CraftingManager.getInstance().getRecipeList();
+ aOutput = GT_OreDictUnificator.get(aOutput);
+ for (int i = 0; i < tList.size(); i++) {
+ IRecipe tRecipe = tList.get(i);
+ if (aNotRemoveShapelessRecipes && (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) continue;
+ if (aOnlyRemoveNativeHandlers) {
+ if (!sNativeRecipeClasses.contains(tRecipe.getClass().getName())) continue;
+ } else {
+ if (sSpecialRecipeClasses.contains(tRecipe.getClass().getName())) continue;
+ }
+ ItemStack tStack = tRecipe.getRecipeOutput();
+ if ((!(tRecipe instanceof IGT_CraftingRecipe) || ((IGT_CraftingRecipe)tRecipe).isRemovable()) && GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tStack), aOutput, aIgnoreNBT)) {
+ tList.remove(i--);
+ rReturn = T;
+ }
+ }
+ return rReturn;
+ }
+
+ /**
+ * Checks all Crafting Handlers for Recipe Output
+ * Used for the Autocrafting Table
+ */
+ public static ItemStack getAllRecipeOutput(World aWorld, ItemStack... aRecipe) {
+ if (aRecipe == null || aRecipe.length == 0) return null;
+
+ if (aWorld == null) aWorld = DW;
+
+ boolean temp = F;
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] != null) {
+ temp = T;
+ break;
+ }
+ }
+ if (!temp) return null;
+ InventoryCrafting aCrafting = new InventoryCrafting(new Container() {@Override public boolean canInteractWith(EntityPlayer var1) {return F;}}, 3, 3);
+ for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]);
+ List<IRecipe> tList = CraftingManager.getInstance().getRecipeList();
+ synchronized(sAllRecipeList) {
+ if (sAllRecipeList.size() != tList.size()) {
+ sAllRecipeList.clear();
+ sAllRecipeList.addAll(tList);
+ }
+ for (int i = 0, j = sAllRecipeList.size(); i < j; i++) {
+ IRecipe tRecipe = sAllRecipeList.get(i);
+ if (tRecipe.matches(aCrafting, aWorld)) {
+ if (i > 10) {
+ sAllRecipeList.remove(i);
+ sAllRecipeList.add(i-10, tRecipe);
+ }
+ return tRecipe.getCraftingResult(aCrafting);
+ }
+ }
+ }
+
+ int tIndex = 0;
+ ItemStack tStack1 = null, tStack2 = null;
+ for (int i = 0, j = aCrafting.getSizeInventory(); i < j; i++) {
+ ItemStack tStack = aCrafting.getStackInSlot(i);
+ if (tStack != null) {
+ if (tIndex == 0) tStack1 = tStack;
+ if (tIndex == 1) tStack2 = tStack;
+ tIndex++;
+ }
+ }
+
+ if (tIndex == 2) {
+ assert tStack1 != null && tStack2 != null;
+ if (tStack1.getItem() == tStack2.getItem() && tStack1.stackSize == 1 && tStack2.stackSize == 1 && tStack1.getItem().isRepairable()) {
+ int tNewDamage = tStack1.getMaxDamage() + tStack1.getItemDamage() - tStack2.getItemDamage() + tStack1.getMaxDamage() / 20;
+ return new ItemStack(tStack1.getItem(), 1, tNewDamage<0?0:tNewDamage);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Gives you a copy of the Output from a Crafting Recipe
+ * Used for Recipe Detection.
+ */
+ public static ItemStack getRecipeOutput(ItemStack... aRecipe) {
+ return getRecipeOutput(F, aRecipe);
+ }
+
+ /**
+ * Gives you a copy of the Output from a Crafting Recipe
+ * Used for Recipe Detection.
+ */
+ public static ItemStack getRecipeOutput(boolean aUncopiedStack, ItemStack... aRecipe) {
+ if (aRecipe == null) return null;
+ boolean temp = F;
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] != null) {
+ temp = T;
+ break;
+ }
+ }
+ if (!temp) return null;
+ InventoryCrafting aCrafting = new InventoryCrafting(new Container() {@Override public boolean canInteractWith(EntityPlayer var1) {return F;}}, 3, 3);
+ for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]);
+ ArrayList<IRecipe> tList = (ArrayList<IRecipe>)CraftingManager.getInstance().getRecipeList();
+ for (int i = 0; i < tList.size(); i++) {temp = F;
+ try {
+ temp = tList.get(i).matches(aCrafting, DW);
+ } catch(Throwable e) {e.printStackTrace(GT_Log.err);}
+ if (temp) {
+ ItemStack tOutput = aUncopiedStack?tList.get(i).getRecipeOutput():tList.get(i).getCraftingResult(aCrafting);
+ if (tOutput == null || tOutput.stackSize <= 0) {
+ // Seriously, who would ever do that shit?
+ if (!GregTech_API.sPostloadFinished) throw new GT_ItsNotMyFaultException("Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that.");
+ } else {
+ if (aUncopiedStack) return tOutput;
+ return GT_Utility.copy(tOutput);
+ }
+ }
+ }
+ return null;
+ }
+
+ public static GT_HashSet<GT_ItemStack> sNonReplaceableItems = new GT_HashSet<GT_ItemStack>();
+
+ /**
+ * Gives you a list of the Outputs from a Crafting Recipe
+ * If you have multiple Mods, which add Bronze Armor for example
+ * This also removes old Recipes from the List.
+ */
+ public static ArrayList<ItemStack> getVanillyToolRecipeOutputs(ItemStack... aRecipe) {
+ if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished) sSingleNonBlockDamagableRecipeList.clear();
+ if (sSingleNonBlockDamagableRecipeList.isEmpty()) {
+ for (IRecipe tRecipe : (ArrayList<IRecipe>)CraftingManager.getInstance().getRecipeList()) {
+ ItemStack tStack = tRecipe.getRecipeOutput();
+ if (GT_Utility.isStackValid(tStack) && tStack.getMaxStackSize() == 1 && tStack.getMaxDamage() > 0 && !(tStack.getItem() instanceof ItemBlock) && !(tStack.getItem() instanceof IReactorComponent) && !isElectricItem(tStack) && !GT_Utility.isStackInList(tStack, sNonReplaceableItems)) {
+ if (!(tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) {
+ if (tRecipe instanceof ShapedOreRecipe) {
+ boolean temp = T;
+ for (Object tObject : ((ShapedOreRecipe)tRecipe).getInput()) if (tObject != null) {
+ if (tObject instanceof ItemStack && (((ItemStack)tObject).getItem() == null || ((ItemStack)tObject).getMaxStackSize() < 2 || ((ItemStack)tObject).getMaxDamage() > 0 || ((ItemStack)tObject).getItem() instanceof ItemBlock)) {
+ temp = F;
+ break;
+ }
+ if (tObject instanceof List && ((List)tObject).isEmpty()) {
+ temp = F;
+ break;
+ }
+ }
+ if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe);
+ } else if (tRecipe instanceof ShapedRecipes) {
+ boolean temp = T;
+ for (ItemStack tObject : ((ShapedRecipes)tRecipe).recipeItems) {
+ if (tObject != null && (tObject.getItem() == null || tObject.getMaxStackSize() < 2 || tObject.getMaxDamage() > 0 || tObject.getItem() instanceof ItemBlock)) {
+ temp = F;
+ break;
+ }
+ }
+ if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe);
+ } else {
+ sSingleNonBlockDamagableRecipeList.add(tRecipe);
+ }
+ }
+ }
+ }
+ GT_Log.out.println("GT_Mod: Created a List of Tool Recipes containing " + sSingleNonBlockDamagableRecipeList.size() + " Recipes for recycling." + (sSingleNonBlockDamagableRecipeList.size()>1024?" Scanning all these Recipes is the reason for the startup Lag you receive right now.":E));
+ }
+ ArrayList<ItemStack> rList = getRecipeOutputs(sSingleNonBlockDamagableRecipeList, T, aRecipe);
+ if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished) sSingleNonBlockDamagableRecipeList.clear();
+ return rList;
+ }
+
+ /**
+ * Gives you a list of the Outputs from a Crafting Recipe
+ * If you have multiple Mods, which add Bronze Armor for example
+ */
+ public static ArrayList<ItemStack> getRecipeOutputs(ItemStack... aRecipe) {
+ return getRecipeOutputs(CraftingManager.getInstance().getRecipeList(), F, aRecipe);
+ }
+
+ /**
+ * Gives you a list of the Outputs from a Crafting Recipe
+ * If you have multiple Mods, which add Bronze Armor for example
+ */
+ public static ArrayList<ItemStack> getRecipeOutputs(List<IRecipe> aList, boolean aDeleteFromList, ItemStack... aRecipe) {
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ if (aRecipe == null) return rList;
+ boolean temp = F;
+ for (byte i = 0; i < aRecipe.length; i++) {
+ if (aRecipe[i] != null) {
+ temp = T;
+ break;
+ }
+ }
+ if (!temp) return rList;
+ InventoryCrafting aCrafting = new InventoryCrafting(new Container() {@Override
+ public boolean canInteractWith(EntityPlayer var1) {return F;}}, 3, 3);
+ for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]);
+ for (int i = 0; i < aList.size(); i++) {
+ temp = F;
+ try {
+ temp = aList.get(i).matches(aCrafting, DW);
+ } catch(Throwable e) {e.printStackTrace(GT_Log.err);}
+ if (temp) {
+ ItemStack tOutput = aList.get(i).getCraftingResult(aCrafting);
+ if (tOutput == null || tOutput.stackSize <= 0) {
+ // Seriously, who would ever do that shit?
+ if (!GregTech_API.sPostloadFinished) throw new GT_ItsNotMyFaultException("Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that.");
+ } else {
+ rList.add(GT_Utility.copy(tOutput));
+ if (aDeleteFromList) aList.remove(i--);
+ }
+ }
+ }
+ return rList;
+ }
+
+ /**
+ * Used in my own Macerator. Decreases StackSize of the Input if wanted.
+ */
+ public static ItemStack getMaceratorOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) {
+ return GT_Utility.copy(getMachineOutput(aInput, getMaceratorRecipeList(), aRemoveInput, new NBTTagCompound(), aOutputSlot)[0]);
+ }
+
+ /**
+ * Used in my own Extractor. Decreases StackSize of the Input if wanted.
+ */
+ public static ItemStack getExtractorOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) {
+ return GT_Utility.copy(getMachineOutput(aInput, getExtractorRecipeList(), aRemoveInput, new NBTTagCompound(), aOutputSlot)[0]);
+ }
+
+ /**
+ * Used in my own Compressor. Decreases StackSize of the Input if wanted.
+ */
+ public static ItemStack getCompressorOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) {
+ return GT_Utility.copy(getMachineOutput(aInput, getCompressorRecipeList(), aRemoveInput, new NBTTagCompound(), aOutputSlot)[0]);
+ }
+
+ /**
+ * Used in my own Furnace.
+ */
+ public static ItemStack getSmeltingOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) {
+ if (aInput == null || aInput.stackSize < 1) return null;
+ ItemStack rStack = GT_OreDictUnificator.get(FurnaceRecipes.smelting().getSmeltingResult(aInput));
+ if (rStack != null && (aOutputSlot == null || (GT_Utility.areStacksEqual(rStack, aOutputSlot) && rStack.stackSize + aOutputSlot.stackSize <= aOutputSlot.getMaxStackSize()))) {
+ if (aRemoveInput) aInput.stackSize--;
+ return rStack;
+ }
+ return null;
+ }
+
+ /**
+ * Used in my own Machines. Decreases StackSize of the Input if wanted.
+ *
+ * Checks also if there is enough Space in the Output Slots.
+ */
+ public static ItemStack[] getMachineOutput(ItemStack aInput, Map<IRecipeInput, RecipeOutput> aRecipeList, boolean aRemoveInput, NBTTagCompound rRecipeMetaData, ItemStack... aOutputSlots) {
+ if (aOutputSlots == null || aOutputSlots.length <= 0) return new ItemStack[0];
+ if (aInput == null) return new ItemStack[aOutputSlots.length];
+ try {
+ for (Entry<IRecipeInput, RecipeOutput> tEntry : aRecipeList.entrySet()) {
+ if (tEntry.getKey().matches(aInput)) {
+ if (tEntry.getKey().getAmount() <= aInput.stackSize) {
+ ItemStack[] tList = (ItemStack[])tEntry.getValue().items.toArray();
+ if (tList.length == 0) break;
+ ItemStack[] rList = new ItemStack[aOutputSlots.length];
+ rRecipeMetaData.setTag("return", tEntry.getValue().metadata);
+ for (byte i = 0; i < aOutputSlots.length && i < tList.length; i++) {
+ if (tList[i] != null) {
+ if (aOutputSlots[i] == null || (GT_Utility.areStacksEqual(tList[i], aOutputSlots[i]) && tList[i].stackSize + aOutputSlots[i].stackSize <= aOutputSlots[i].getMaxStackSize())) {
+ rList[i] = GT_Utility.copy(tList[i]);
+ } else {
+ return new ItemStack[aOutputSlots.length];
+ }
+ }
+ }
+
+ if (aRemoveInput) aInput.stackSize-=tEntry.getKey().getAmount();
+ return rList;
+ }
+ break;
+ }
+ }
+ } catch(Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return new ItemStack[aOutputSlots.length];
+ }
+
+ /**
+ * Used in my own Recycler.
+ *
+ * Only produces Scrap if aScrapChance == 0. aScrapChance is usually the random Number I give to the Function
+ * If you directly insert 0 as aScrapChance then you can check if its Recycler-Blacklisted or similar
+ */
+ public static ItemStack getRecyclerOutput(ItemStack aInput, int aScrapChance) {
+ if (aInput == null || aScrapChance != 0) return null;
+ try {
+ if (ic2.api.recipe.Recipes.recyclerWhitelist.isEmpty()) return ic2.api.recipe.Recipes.recyclerBlacklist.contains(aInput)?null:ItemList.IC2_Scrap.get(1);
+ return ic2.api.recipe.Recipes.recyclerWhitelist.contains(aInput)?ItemList.IC2_Scrap.get(1):null;
+ } catch (Throwable e) {/*Do nothing*/}
+ try {
+ return ic2.api.recipe.Recipes.recyclerBlacklist.contains(aInput)?null:ItemList.IC2_Scrap.get(1);
+ } catch (Throwable e) {/*Do nothing*/}
+ return null;
+ }
+
+ /**
+ * For the Scrapboxinator
+ */
+ public static ItemStack getRandomScrapboxDrop() {
+ return ic2.api.recipe.Recipes.scrapboxDrops.getDrop(ItemList.IC2_Scrapbox.get(1), F);
+ }
+
+ /**
+ * Charges an Electric Item. Only if it's a valid Electric Item of course.
+ * This forces the Usage of proper Voltages (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit.
+ * If aTier is Integer.MAX_VALUE it will ignore Tier based Limitations.
+ * @return the actually used Energy.
+ */
+ public static int chargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, boolean aSimulate) {
+ try {
+ if (isElectricItem(aStack)) {
+ int tTier = ((ic2.api.item.IElectricItem)aStack.getItem()).getTier(aStack);
+ if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) {
+ if (!aIgnoreLimit && tTier >= 0) aCharge = (int)Math.min(aCharge, V[Math.max(0, Math.min(V.length-1, tTier))]);
+ if (aCharge > 0) {
+ int rCharge = (int)Math.max(0.0, ic2.api.item.ElectricItem.manager.charge(aStack, aCharge, tTier, T, aSimulate));
+ return rCharge + (rCharge * 4 > aTier ? aTier : 0);
+ }
+ }
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+ return 0;
+ }
+
+ /**
+ * Discharges an Electric Item. Only if it's a valid Electric Item for that of course.
+ * This forces the Usage of proper Voltages (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit.
+ * If aTier is Integer.MAX_VALUE it will ignore Tier based Limitations.
+ * @return the Energy got from the Item.
+ */
+ public static int dischargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, boolean aSimulate, boolean aIgnoreDischargability) {
+ try {
+// if (isElectricItem(aStack) && (aIgnoreDischargability || ((ic2.api.item.IElectricItem)aStack.getItem()).canProvideEnergy(aStack))) {
+ if (isElectricItem(aStack)) {
+ int tTier = ((ic2.api.item.IElectricItem)aStack.getItem()).getTier(aStack);
+ if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) {
+ if (!aIgnoreLimit && tTier >= 0) aCharge = (int)Math.min(aCharge, V[Math.max(0, Math.min(V.length-1, tTier))]);
+ if (aCharge > 0) {
+// int rCharge = Math.max(0, ic2.api.item.ElectricItem.manager.discharge(aStack, aCharge + (aCharge * 4 > aTier ? aTier : 0), tTier, T, aSimulate));
+ int rCharge = (int)Math.max(0, ic2.api.item.ElectricItem.manager.discharge(aStack, aCharge + (aCharge * 4 > aTier ? aTier : 0), tTier, T, !aIgnoreDischargability, aSimulate));
+ return rCharge - (rCharge * 4 > aTier ? aTier : 0);
+ }
+ }
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+ return 0;
+ }
+
+ /**
+ * Uses an Electric Item. Only if it's a valid Electric Item for that of course.
+ * @return if the action was successful
+ */
+ public static boolean canUseElectricItem(ItemStack aStack, int aCharge) {
+ try {
+ if (isElectricItem(aStack)) {
+ return ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge);
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+ return F;
+ }
+
+ /**
+ * Uses an Electric Item. Only if it's a valid Electric Item for that of course.
+ * @return if the action was successful
+ */
+ public static boolean useElectricItem(ItemStack aStack, int aCharge, EntityPlayer aPlayer) {
+ try {
+ if (isElectricItem(aStack)) {
+ ic2.api.item.ElectricItem.manager.use(aStack, 0, aPlayer);
+ if (ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge)) {
+ return ic2.api.item.ElectricItem.manager.use(aStack, aCharge, aPlayer);
+ }
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+ return F;
+ }
+
+ /**
+ * Uses an Item. Tries to discharge in case of Electric Items
+ */
+ public static boolean damageOrDechargeItem(ItemStack aStack, int aDamage, int aDecharge, EntityLivingBase aPlayer) {
+ if (GT_Utility.isStackInvalid(aStack) || (aStack.getMaxStackSize() <= 1 && aStack.stackSize > 1)) return F;
+ if (aPlayer != null && aPlayer instanceof EntityPlayer && ((EntityPlayer)aPlayer).capabilities.isCreativeMode) return T;
+ if (aStack.getItem() instanceof IDamagableItem) {
+ return ((IDamagableItem)aStack.getItem()).doDamageToItem(aStack, aDamage);
+ } else if (GT_ModHandler.isElectricItem(aStack)) {
+ if (canUseElectricItem(aStack, aDecharge)) {
+ if (aPlayer != null && aPlayer instanceof EntityPlayer) {
+ return GT_ModHandler.useElectricItem(aStack, aDecharge, (EntityPlayer)aPlayer);
+ }
+ return GT_ModHandler.dischargeElectricItem(aStack, aDecharge, Integer.MAX_VALUE, T, F, T) >= aDecharge;
+ }
+ } else if (aStack.getItem().isDamageable()) {
+ if (aPlayer == null) {
+ aStack.setItemDamage(aStack.getItemDamage() + aDamage);
+ } else {
+ aStack.damageItem(aDamage, aPlayer);
+ }
+ if (aStack.getItemDamage() >= aStack.getMaxDamage()) {
+ aStack.setItemDamage(aStack.getMaxDamage()+1);
+ ItemStack tStack = GT_Utility.getContainerItem(aStack, T);
+ if (tStack != null) {
+ aStack.func_150996_a(tStack.getItem());
+ aStack.setItemDamage(tStack.getItemDamage());
+ aStack.stackSize = tStack.stackSize;
+ aStack.setTagCompound(tStack.getTagCompound());
+ }
+ }
+ return T;
+ }
+ return F;
+ }
+
+ /**
+ * Uses a Soldering Iron
+ */
+ public static boolean useSolderingIron(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (aPlayer == null || aStack == null) return F;
+ if (GT_Utility.isStackInList(aStack, GregTech_API.sSolderingToolList)) {
+ if (aPlayer instanceof EntityPlayer) {
+ EntityPlayer tPlayer = (EntityPlayer)aPlayer;
+ if (tPlayer.capabilities.isCreativeMode) return T;
+ if(isElectricItem(aStack)&&ic2.api.item.ElectricItem.manager.getCharge(aStack)>1000.0d){
+ for (int i = 0; i < tPlayer.inventory.mainInventory.length; i++) {
+ if (GT_Utility.isStackInList(tPlayer.inventory.mainInventory[i], GregTech_API.sSolderingMetalList)) {
+ if(tPlayer.inventory.mainInventory[i].stackSize<1)return false;
+ if(tPlayer.inventory.mainInventory[i].stackSize==1){tPlayer.inventory.mainInventory[i]=null;}else{
+ tPlayer.inventory.mainInventory[i].stackSize--;}
+
+ if (tPlayer.inventoryContainer != null) tPlayer.inventoryContainer.detectAndSendChanges();
+ if (canUseElectricItem(aStack, 10000)) {
+ return GT_ModHandler.useElectricItem(aStack, 10000, (EntityPlayer)aPlayer);
+ }
+ GT_ModHandler.useElectricItem(aStack, (int) ic2.api.item.ElectricItem.manager.getCharge(aStack), (EntityPlayer)aPlayer);
+ return false;
+ }
+ }
+ }
+ } else {
+ damageOrDechargeItem(aStack, 1, 1000, aPlayer);
+ return T;
+ }
+ }
+ return F;
+ }
+
+ /**
+ * Is this an electric Item, which can charge other Items?
+ */
+ public static boolean isChargerItem(ItemStack aStack) {
+ try {
+ if (isElectricItem(aStack)) {
+ return ((ic2.api.item.IElectricItem)aStack.getItem()).canProvideEnergy(aStack);
+ }
+ } catch (Throwable e) {/*Do nothing*/}
+ return F;
+ }
+
+ /**
+ * Is this an electric Item?
+ */
+ public static boolean isElectricItem(ItemStack aStack) {
+ try {
+ return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem && ((IElectricItem)aStack.getItem()).getTier(aStack) < Integer.MAX_VALUE;
+ } catch (Throwable e) {/*Do nothing*/}
+ return F;
+ }
+
+ public static boolean isElectricItem(ItemStack aStack, byte aTier) {
+ try {
+ return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem && ((IElectricItem)aStack.getItem()).getTier(aStack) == aTier;
+ } catch (Throwable e) {/*Do nothing*/}
+ return F;
+ }
+
+ public static Object sBoxableWrapper = GT_Utility.callConstructor("gregtechmod.api.util.GT_IBoxableWrapper", 0, null, F);
+
+ public static void registerBoxableItemToToolBox(ItemStack aStack) {
+ if (aStack != null) registerBoxableItemToToolBox(aStack.getItem());
+ }
+
+ public static void registerBoxableItemToToolBox(Item aItem) {
+ if (aItem != null && sBoxableWrapper != null) {
+ try {
+ ic2.api.item.ItemWrapper.registerBoxable(aItem, (IBoxable)sBoxableWrapper);
+ } catch(Throwable e) {/*Do nothing*/}
+ }
+ }
+
+ public static int getCapsuleCellContainerCountMultipliedWithStackSize(ItemStack... aStacks) {
+ int rAmount = 0;
+ for (ItemStack tStack : aStacks) if (tStack != null) rAmount += getCapsuleCellContainerCount(tStack) * tStack.stackSize;
+ return rAmount;
+ }
+
+ public static int getCapsuleCellContainerCount(ItemStack aStack) {
+ if (aStack == null) return 0;
+ return GT_Utility.areStacksEqual(GT_Utility.getContainerForFilledItem(aStack, T), ItemList.Cell_Empty.get(1)) || OrePrefixes.cell.contains(aStack) || OrePrefixes.cellPlasma.contains(aStack) || GT_Utility.areStacksEqual(aStack, getIC2Item("waterCell", 1, W)) ? 1 : 0;
+ }
+
+ /**
+ * Copy of the original Helper Class of Thermal Expansion, just to make sure it works even when other Mods include TE-APIs
+ */
+ public static class ThermalExpansion {
+ public static void addFurnaceRecipe(int energy, ItemStack input, ItemStack output) {
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("output", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ output.writeToNBT(toSend.getCompoundTag("output"));
+ FMLInterModComms.sendMessage("ThermalExpansion", "FurnaceRecipe", toSend);
+ }
+
+ public static void addPulverizerRecipe(int energy, ItemStack input, ItemStack primaryOutput) {
+ addPulverizerRecipe(energy, input, primaryOutput, null, 0);
+ }
+
+ public static void addPulverizerRecipe(int energy, ItemStack input, ItemStack primaryOutput, ItemStack secondaryOutput) {
+ addPulverizerRecipe(energy, input, primaryOutput, secondaryOutput, 100);
+ }
+
+ public static void addPulverizerRecipe(int energy, ItemStack input, ItemStack primaryOutput, ItemStack secondaryOutput, int secondaryChance) {
+ if (input == null || primaryOutput == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("primaryOutput", new NBTTagCompound());
+ toSend.setTag("secondaryOutput", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ primaryOutput.writeToNBT(toSend.getCompoundTag("primaryOutput"));
+ if (secondaryOutput != null) secondaryOutput.writeToNBT(toSend.getCompoundTag("secondaryOutput"));
+ toSend.setInteger("secondaryChance", secondaryChance);
+ FMLInterModComms.sendMessage("ThermalExpansion", "PulverizerRecipe", toSend);
+ }
+
+ public static void addSawmillRecipe(int energy, ItemStack input, ItemStack primaryOutput) {
+ addSawmillRecipe(energy, input, primaryOutput, null, 0);
+ }
+
+ public static void addSawmillRecipe(int energy, ItemStack input, ItemStack primaryOutput, ItemStack secondaryOutput) {
+ addSawmillRecipe(energy, input, primaryOutput, secondaryOutput, 100);
+ }
+
+ public static void addSawmillRecipe(int energy, ItemStack input, ItemStack primaryOutput, ItemStack secondaryOutput, int secondaryChance) {
+ if (input == null || primaryOutput == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("primaryOutput", new NBTTagCompound());
+ toSend.setTag("secondaryOutput", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ primaryOutput.writeToNBT(toSend.getCompoundTag("primaryOutput"));
+ if (secondaryOutput != null) secondaryOutput.writeToNBT(toSend.getCompoundTag("secondaryOutput"));
+ toSend.setInteger("secondaryChance", secondaryChance);
+ FMLInterModComms.sendMessage("ThermalExpansion", "SawmillRecipe", toSend);
+ }
+
+ public static void addSmelterRecipe(int energy, ItemStack primaryInput, ItemStack secondaryInput, ItemStack primaryOutput) {
+ addSmelterRecipe(energy, primaryInput, secondaryInput, primaryOutput, null, 0);
+ }
+
+ public static void addSmelterRecipe(int energy, ItemStack primaryInput, ItemStack secondaryInput, ItemStack primaryOutput, ItemStack secondaryOutput) {
+ addSmelterRecipe(energy, primaryInput, secondaryInput, primaryOutput, secondaryOutput, 100);
+ }
+
+ public static void addSmelterRecipe(int energy, ItemStack primaryInput, ItemStack secondaryInput, ItemStack primaryOutput, ItemStack secondaryOutput, int secondaryChance) {
+ if (primaryInput == null || secondaryInput == null || primaryOutput == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("primaryInput", new NBTTagCompound());
+ toSend.setTag("secondaryInput", new NBTTagCompound());
+ toSend.setTag("primaryOutput", new NBTTagCompound());
+ toSend.setTag("secondaryOutput", new NBTTagCompound());
+ primaryInput.writeToNBT(toSend.getCompoundTag("primaryInput"));
+ secondaryInput.writeToNBT(toSend.getCompoundTag("secondaryInput"));
+ primaryOutput.writeToNBT(toSend.getCompoundTag("primaryOutput"));
+ if (secondaryOutput != null) secondaryOutput.writeToNBT(toSend.getCompoundTag("secondaryOutput"));
+ toSend.setInteger("secondaryChance", secondaryChance);
+ FMLInterModComms.sendMessage("ThermalExpansion", "SmelterRecipe", toSend);
+ }
+
+ public static void addSmelterBlastOre(Materials aMaterial) {
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setString("oreType", aMaterial.toString());
+ FMLInterModComms.sendMessage("ThermalExpansion", "SmelterBlastOreType", toSend);
+ }
+
+ public static void addCrucibleRecipe(int energy, ItemStack input, FluidStack output) {
+ if (input == null || output == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("output", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ output.writeToNBT(toSend.getCompoundTag("output"));
+ FMLInterModComms.sendMessage("ThermalExpansion", "CrucibleRecipe", toSend);
+ }
+
+ public static void addTransposerFill(int energy, ItemStack input, ItemStack output, FluidStack fluid, boolean reversible) {
+ if (input == null || output == null || fluid == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("output", new NBTTagCompound());
+ toSend.setTag("fluid", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ output.writeToNBT(toSend.getCompoundTag("output"));
+ toSend.setBoolean("reversible", reversible);
+ fluid.writeToNBT(toSend.getCompoundTag("fluid"));
+ FMLInterModComms.sendMessage("ThermalExpansion", "TransposerFillRecipe", toSend);
+ }
+
+ public static void addTransposerExtract(int energy, ItemStack input, ItemStack output, FluidStack fluid, int chance, boolean reversible) {
+ if (input == null || output == null || fluid == null) return;
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setInteger("energy", energy);
+ toSend.setTag("input", new NBTTagCompound());
+ toSend.setTag("output", new NBTTagCompound());
+ toSend.setTag("fluid", new NBTTagCompound());
+ input.writeToNBT(toSend.getCompoundTag("input"));
+ output.writeToNBT(toSend.getCompoundTag("output"));
+ toSend.setBoolean("reversible", reversible);
+ toSend.setInteger("chance", chance);
+ fluid.writeToNBT(toSend.getCompoundTag("fluid"));
+ FMLInterModComms.sendMessage("ThermalExpansion", "TransposerExtractRecipe", toSend);
+ }
+
+ public static void addMagmaticFuel(String fluidName, int energy) {
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setString("fluidName", fluidName);
+ toSend.setInteger("energy", energy);
+ FMLInterModComms.sendMessage("ThermalExpansion", "MagmaticFuel", toSend);
+ }
+
+ public static void addCompressionFuel(String fluidName, int energy) {
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setString("fluidName", fluidName);
+ toSend.setInteger("energy", energy);
+ FMLInterModComms.sendMessage("ThermalExpansion", "CompressionFuel", toSend);
+ }
+
+ public static void addCoolant(String fluidName, int energy) {
+ NBTTagCompound toSend = new NBTTagCompound();
+ toSend.setString("fluidName", fluidName);
+ toSend.setInteger("energy", energy);
+ FMLInterModComms.sendMessage("ThermalExpansion", "Coolant", toSend);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
new file mode 100644
index 0000000000..6425e5b89d
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
@@ -0,0 +1,332 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+import static gregtech.api.enums.GT_Values.M;
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.objects.GT_HashSet;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This is the Core of my OreDict Unification Code
+ *
+ * If you just want to use this to unificate your Items, then use the Function in the GregTech_API File
+ *
+ * P.S. It is intended to be named "Unificator" and not "Unifier", because that sounds more awesome.
+ */
+public class GT_OreDictUnificator {
+ public static volatile int VERSION = 508;
+
+ private static final HashMap<String, ItemStack> sName2StackMap = new HashMap<String, ItemStack>();
+ private static final HashMap<GT_ItemStack, ItemData> sItemStack2DataMap = new HashMap<GT_ItemStack, ItemData>();
+ private static final GT_HashSet<GT_ItemStack> sNoUnificationList = new GT_HashSet<GT_ItemStack>();
+
+ private static int isRegisteringOre = 0, isAddingOre = 0;
+
+ static {
+ GregTech_API.sItemStackMappings.add(sItemStack2DataMap);
+ }
+
+ /**
+ * The Blacklist just prevents the Item from being unificated into something else.
+ * Useful if you have things like the Industrial Diamond, which is better than regular Diamond, but also usable in absolutely all Diamond Recipes.
+ */
+ public static void addToBlacklist(ItemStack aStack) {
+ if (GT_Utility.isStackValid(aStack) && !GT_Utility.isStackInList(aStack, sNoUnificationList)) sNoUnificationList.add(aStack);
+ }
+
+ public static boolean isBlacklisted(ItemStack aStack) {
+ return GT_Utility.isStackInList(aStack, sNoUnificationList);
+ }
+
+ public static void add(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) {
+ set(aPrefix, aMaterial, aStack, false, false);
+ }
+
+ public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) {
+ set(aPrefix, aMaterial, aStack, true, false);
+ }
+
+ public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, boolean aOverwrite, boolean aAlreadyRegistered) {
+ if (aMaterial == null || aPrefix == null || GT_Utility.isStackInvalid(aStack) || Items.feather.getDamage(aStack) == W) return;
+ isAddingOre++;
+ aStack = GT_Utility.copyAmount(1, aStack);
+ if (!aAlreadyRegistered) registerOre(aPrefix.get(aMaterial), aStack);
+ addAssociation(aPrefix, aMaterial, aStack, isBlacklisted(aStack));
+ if (aOverwrite || GT_Utility.isStackInvalid(sName2StackMap.get(aPrefix.get(aMaterial).toString()))) sName2StackMap.put(aPrefix.get(aMaterial).toString(), aStack);
+ isAddingOre--;
+ }
+
+ public static ItemStack getFirstOre(Object aName, long aAmount) {
+ if (GT_Utility.isStringInvalid(aName)) return null;
+ ItemStack tStack = sName2StackMap.get(aName.toString());
+ if (GT_Utility.isStackValid(tStack)) return GT_Utility.copyAmount(aAmount, tStack);
+ return GT_Utility.copyAmount(aAmount, getOres(aName).toArray());
+ }
+
+ public static ItemStack get(Object aName, long aAmount) {
+ return get(aName, null, aAmount, true, true);
+ }
+
+ public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount) {
+ return get(aName, aReplacement, aAmount, true, true);
+ }
+
+ public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, long aAmount) {
+ return get(aPrefix, aMaterial, null, aAmount);
+ }
+
+ public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, ItemStack aReplacement, long aAmount) {
+ return get(aPrefix.get(aMaterial), aReplacement, aAmount, false, true);
+ }
+
+ public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount, boolean aMentionPossibleTypos, boolean aNoInvalidAmounts) {
+ if (aNoInvalidAmounts && aAmount < 1) return null;
+ if (!sName2StackMap.containsKey(aName.toString()) && aMentionPossibleTypos) GT_Log.err.println("Unknown Key for Unification, Typo? " + aName);
+ return GT_Utility.copyAmount(aAmount, sName2StackMap.get(aName.toString()), getFirstOre(aName, aAmount), aReplacement);
+ }
+
+ public static ItemStack[] setStackArray(boolean aUseBlackList, ItemStack... aStacks) {
+ for (int i = 0; i < aStacks.length; i++) aStacks[i] = get(aUseBlackList, GT_Utility.copy(aStacks[i]));
+ return aStacks;
+ }
+
+ public static ItemStack[] getStackArray(boolean aUseBlackList, Object... aStacks) {
+ ItemStack[] rStacks = new ItemStack[aStacks.length];
+ for (int i = 0; i < aStacks.length; i++) rStacks[i] = get(aUseBlackList, GT_Utility.copy(aStacks[i]));
+ return rStacks;
+ }
+
+ public static ItemStack setStack(ItemStack aStack) {
+ return setStack(true, aStack);
+ }
+
+ public static ItemStack setStack(boolean aUseBlackList, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return aStack;
+ ItemStack tStack = get(aUseBlackList, aStack);
+ if (GT_Utility.areStacksEqual(aStack, tStack)) return aStack;
+ aStack.func_150996_a(tStack.getItem());
+ Items.feather.setDamage(aStack, Items.feather.getDamage(tStack));
+ return aStack;
+ }
+
+ public static ItemStack get(ItemStack aStack) {
+ return get(true, aStack);
+ }
+
+ public static ItemStack get(boolean aUseBlackList, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return null;
+ ItemData tPrefixMaterial = getAssociation(aStack);
+ ItemStack rStack = null;
+ if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() || (aUseBlackList && tPrefixMaterial.mBlackListed)) return GT_Utility.copy(aStack);
+ if (aUseBlackList && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) {tPrefixMaterial.mBlackListed = true; return GT_Utility.copy(aStack);}
+ if (tPrefixMaterial.mUnificationTarget == null) tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString());
+ rStack = tPrefixMaterial.mUnificationTarget;
+ if (GT_Utility.isStackInvalid(rStack)) return GT_Utility.copy(aStack);
+ assert rStack != null;
+ rStack.setTagCompound(aStack.getTagCompound());
+ return GT_Utility.copyAmount(aStack.stackSize, rStack);
+ }
+
+ public static void addItemData(ItemStack aStack, ItemData aData) {
+ if (GT_Utility.isStackValid(aStack) && getItemData(aStack) == null && aData != null) setItemData(aStack, aData);
+ }
+
+ private static boolean mRunThroughTheList = true;
+
+ public static void setItemData(ItemStack aStack, ItemData aData) {
+ if (GT_Utility.isStackInvalid(aStack) || aData == null) return;
+ ItemData tData = getItemData(aStack);
+ if (tData == null || !tData.hasValidPrefixMaterialData()) {
+ if (tData != null) for (Object tObject : tData.mExtraData) if (!aData.mExtraData.contains(tObject)) aData.mExtraData.add(tObject);
+ if (aStack.stackSize > 1) {
+ if (aData.mMaterial != null) aData.mMaterial.mAmount /= aStack.stackSize;
+ for (MaterialStack tMaterial : aData.mByProducts) tMaterial.mAmount /= aStack.stackSize;
+ aStack = GT_Utility.copyAmount(1, aStack);
+ }
+ sItemStack2DataMap.put(new GT_ItemStack(aStack), aData);
+ if (aData.hasValidMaterialData()) {
+ long tValidMaterialAmount = aData.mMaterial.mMaterial.contains(SubTag.NO_RECYCLING)?0:aData.mMaterial.mAmount>=0?aData.mMaterial.mAmount:M;
+ for (MaterialStack tMaterial : aData.mByProducts) tValidMaterialAmount += tMaterial.mMaterial.contains(SubTag.NO_RECYCLING)?0:tMaterial.mAmount>=0?tMaterial.mAmount:M;
+ if (tValidMaterialAmount < M) GT_ModHandler.addToRecyclerBlackList(aStack);
+ }
+ if (mRunThroughTheList) {
+ if (GregTech_API.sLoadStarted) {
+ mRunThroughTheList = false;
+ for (Entry<GT_ItemStack, ItemData> tEntry : sItemStack2DataMap.entrySet()) if (!tEntry.getValue().hasValidPrefixData() || tEntry.getValue().mPrefix.mAllowNormalRecycling) GT_RecipeRegistrator.registerMaterialRecycling(tEntry.getKey().toStack(), tEntry.getValue());
+ }
+ } else {
+ if (!aData.hasValidPrefixData() || aData.mPrefix.mAllowNormalRecycling) GT_RecipeRegistrator.registerMaterialRecycling(aStack, aData);
+ }
+ } else {
+ for (Object tObject : aData.mExtraData) if (!tData.mExtraData.contains(tObject)) tData.mExtraData.add(tObject);
+ }
+ }
+
+ public static void addAssociation(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, boolean aBlackListed) {
+ if (aPrefix == null || aMaterial == null || GT_Utility.isStackInvalid(aStack)) return;
+ if (Items.feather.getDamage(aStack) == W) for (byte i = 0; i < 16; i++) setItemData(GT_Utility.copyAmountAndMetaData(1, i, aStack), new ItemData(aPrefix, aMaterial, aBlackListed));
+ setItemData(aStack, new ItemData(aPrefix, aMaterial, aBlackListed));
+ }
+
+ public static ItemData getItemData(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return null;
+ ItemData rData = sItemStack2DataMap.get(new GT_ItemStack(aStack));
+ if (rData == null) rData = sItemStack2DataMap.get(new GT_ItemStack(GT_Utility.copyMetaData(W, aStack)));
+ return rData;
+ }
+
+ public static ItemData getAssociation(ItemStack aStack) {
+ ItemData rData = getItemData(aStack);
+ return rData != null && rData.hasValidPrefixMaterialData() ? rData : null;
+ }
+
+ public static boolean isItemStackInstanceOf(ItemStack aStack, Object aName) {
+ if (GT_Utility.isStringInvalid(aName) || GT_Utility.isStackInvalid(aStack)) return false;
+ for (ItemStack tOreStack : getOres(aName.toString())) if (GT_Utility.areStacksEqual(tOreStack, aStack, true)) return true;
+ return false;
+ }
+
+ public static boolean isItemStackDye(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ for (Dyes tDye : Dyes.VALUES) if (isItemStackInstanceOf(aStack, tDye.toString())) return true;
+ return false;
+ }
+
+ public static boolean registerOre(OrePrefixes aPrefix, Object aMaterial, ItemStack aStack) {
+ return registerOre(aPrefix.get(aMaterial), aStack);
+ }
+
+ public static boolean registerOre(Object aName, ItemStack aStack) {
+ if (aName == null || GT_Utility.isStackInvalid(aStack)) return false;
+ String tName = aName.toString();
+ if (GT_Utility.isStringInvalid(tName)) return false;
+ ArrayList<ItemStack> tList = getOres(tName);
+ for (int i = 0; i < tList.size(); i++) if (GT_Utility.areStacksEqual(tList.get(i), aStack, true)) return false;
+ isRegisteringOre++;
+ OreDictionary.registerOre(tName, GT_Utility.copyAmount(1, aStack));
+ isRegisteringOre--;
+ return true;
+ }
+
+ public static boolean isRegisteringOres() {
+ return isRegisteringOre > 0;
+ }
+
+ public static boolean isAddingOres() {
+ return isAddingOre > 0;
+ }
+
+ public static void resetUnificationEntries() {
+ for (ItemData tPrefixMaterial : sItemStack2DataMap.values()) tPrefixMaterial.mUnificationTarget = null;
+ }
+
+ public static ItemStack getGem(MaterialStack aMaterial) {
+ return aMaterial==null?null:getGem(aMaterial.mMaterial, aMaterial.mAmount);
+ }
+
+ public static ItemStack getGem(Materials aMaterial, OrePrefixes aPrefix) {
+ return aMaterial==null?null:getGem(aMaterial, aPrefix.mMaterialAmount);
+ }
+
+ public static ItemStack getGem(Materials aMaterial, long aMaterialAmount) {
+ ItemStack rStack = null;
+ if ( (( aMaterialAmount >= M ) || aMaterialAmount >= M * 32)) rStack = get(OrePrefixes.gem , aMaterial, aMaterialAmount / M );
+ if (rStack == null && (((aMaterialAmount * 2) % M == 0) || aMaterialAmount >= M * 16)) rStack = get(OrePrefixes.gemFlawed , aMaterial, (aMaterialAmount * 2) / M );
+ if (rStack == null && (((aMaterialAmount * 4) >= M ) )) rStack = get(OrePrefixes.gemChipped , aMaterial, (aMaterialAmount * 4) / M );
+ return rStack;
+ }
+
+ public static ItemStack getDust(MaterialStack aMaterial) {
+ return aMaterial==null?null:getDust(aMaterial.mMaterial, aMaterial.mAmount);
+ }
+
+ public static ItemStack getDust(Materials aMaterial, OrePrefixes aPrefix) {
+ return aMaterial==null?null:getDust(aMaterial, aPrefix.mMaterialAmount);
+ }
+
+ public static ItemStack getDust(Materials aMaterial, long aMaterialAmount) {
+ if (aMaterialAmount <= 0) return null;
+ ItemStack rStack = null;
+ if ( (( aMaterialAmount % M == 0) || aMaterialAmount >= M * 16)) rStack = get(OrePrefixes.dust , aMaterial, aMaterialAmount / M );
+ if (rStack == null && (((aMaterialAmount * 4) % M == 0) || aMaterialAmount >= M * 8)) rStack = get(OrePrefixes.dustSmall , aMaterial, (aMaterialAmount * 4) / M );
+ if (rStack == null && (((aMaterialAmount * 9) >= M ) )) rStack = get(OrePrefixes.dustTiny , aMaterial, (aMaterialAmount * 9) / M );
+ return rStack;
+ }
+
+ public static ItemStack getIngot(MaterialStack aMaterial) {
+ return aMaterial==null?null:getIngot(aMaterial.mMaterial, aMaterial.mAmount);
+ }
+
+ public static ItemStack getIngot(Materials aMaterial, OrePrefixes aPrefix) {
+ return aMaterial==null?null:getIngot(aMaterial, aPrefix.mMaterialAmount);
+ }
+
+ public static ItemStack getIngot(Materials aMaterial, long aMaterialAmount) {
+ if (aMaterialAmount <= 0) return null;
+ ItemStack rStack = null;
+ if ( (( aMaterialAmount % (M *9) == 0 && aMaterialAmount / (M * 9) > 1) || aMaterialAmount >= M * 72)) rStack = get(OrePrefixes.block , aMaterial, aMaterialAmount / (M * 9));
+ if (rStack == null && (( aMaterialAmount % M == 0 ) || aMaterialAmount >= M * 8)) rStack = get(OrePrefixes.ingot , aMaterial, aMaterialAmount / M );
+ if (rStack == null && (((aMaterialAmount * 9) >= M ) )) rStack = get(OrePrefixes.nugget , aMaterial, (aMaterialAmount * 9) / M );
+ return rStack;
+ }
+
+ public static ItemStack getIngotOrDust(Materials aMaterial, long aMaterialAmount) {
+ if (aMaterialAmount <= 0) return null;
+ ItemStack rStack = getIngot(aMaterial, aMaterialAmount);
+ if (rStack == null) rStack = getDust(aMaterial, aMaterialAmount);
+ return rStack;
+ }
+
+ public static ItemStack getIngotOrDust(MaterialStack aMaterial) {
+ ItemStack rStack = getIngot(aMaterial);
+ if (rStack == null) rStack = getDust(aMaterial);
+ return rStack;
+ }
+
+ public static ItemStack getDustOrIngot(Materials aMaterial, long aMaterialAmount) {
+ if (aMaterialAmount <= 0) return null;
+ ItemStack rStack = getDust(aMaterial, aMaterialAmount);
+ if (rStack == null) rStack = getIngot(aMaterial, aMaterialAmount);
+ return rStack;
+ }
+
+ public static ItemStack getDustOrIngot(MaterialStack aMaterial) {
+ ItemStack rStack = getDust(aMaterial);
+ if (rStack == null) rStack = getIngot(aMaterial);
+ return rStack;
+ }
+
+ /**
+ * @return a Copy of the OreDictionary.getOres() List
+ */
+ public static ArrayList<ItemStack> getOres(OrePrefixes aPrefix, Object aMaterial) {
+ return getOres(aPrefix.get(aMaterial));
+ }
+
+ /**
+ * @return a Copy of the OreDictionary.getOres() List
+ */
+ public static ArrayList<ItemStack> getOres(Object aOreName) {
+ String aName = aOreName==null?E:aOreName.toString();
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ if (GT_Utility.isStringValid(aName)) rList.addAll(OreDictionary.getOres(aName));
+ return rList;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_PlayedSound.java b/src/main/java/gregtech/api/util/GT_PlayedSound.java
new file mode 100644
index 0000000000..fa9869397b
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_PlayedSound.java
@@ -0,0 +1,28 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.E;
+
+public class GT_PlayedSound {
+ public final String mSoundName;
+ public final int mX, mY, mZ;
+
+ public GT_PlayedSound(String aSoundName, double aX, double aY, double aZ) {
+ mSoundName = aSoundName==null?E:aSoundName;
+ mX = (int)aX;
+ mY = (int)aY;
+ mZ = (int)aZ;
+ }
+
+ @Override
+ public boolean equals(Object aObject) {
+ if (aObject != null && aObject instanceof GT_PlayedSound) {
+ return ((GT_PlayedSound)aObject).mX == mX && ((GT_PlayedSound)aObject).mY == mY && ((GT_PlayedSound)aObject).mZ == mZ && ((GT_PlayedSound)aObject).mSoundName.equals(mSoundName);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return mX+mY+mZ+mSoundName.hashCode();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
new file mode 100644
index 0000000000..130a63d7b6
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -0,0 +1,1046 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.*;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
+import gregtech.api.objects.GT_FluidStack;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+
+import java.util.*;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntityFurnace;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * This File contains the functions used for Recipes. Please do not include this File AT ALL in your Moddownload as it ruins compatibility
+ * This is just the Core of my Recipe System, if you just want to GET the Recipes I add, then you can access this File.
+ * Do NOT add Recipes using the Constructors inside this Class, The GregTech_API File calls the correct Functions for these Constructors.
+ *
+ * I know this File causes some Errors, because of missing Main Functions, but if you just need to compile Stuff, then remove said erroreous Functions.
+ */
+public class GT_Recipe {
+ public static volatile int VERSION = 508;
+
+ public static class GT_Recipe_Map {
+ /** Contains all Recipe Maps */
+ public static final Collection<GT_Recipe_Map> sMappings = new ArrayList<GT_Recipe_Map>();
+
+ public static final GT_Recipe_Map sOreWasherRecipes = new GT_Recipe_Map_OreWasher (new HashSet<GT_Recipe>( 0), "ic.recipe.orewasher" , "Ore Washer" , "ic2.blockOreWashingPlant" , RES_PATH_GUI+"basicmachines/OreWasher" , 1, 3, 1, 1, 1, E , 1, E , T, F);
+ public static final GT_Recipe_Map sThermalCentrifugeRecipes = new GT_Recipe_Map_ThermalCentrifuge (new HashSet<GT_Recipe>( 0), "ic.recipe.thermalcentrifuge" , "Thermal Centrifuge" , "ic2.blockCentrifuge" , RES_PATH_GUI+"basicmachines/ThermalCentrifuge" , 1, 3, 1, 0, 2, E , 1, E , T, F);
+ public static final GT_Recipe_Map sCompressorRecipes = new GT_Recipe_Map_Compressor (new HashSet<GT_Recipe>( 0), "ic.recipe.compressor" , "Compressor" , "ic2.compressor" , RES_PATH_GUI+"basicmachines/Compressor" , 1, 1, 1, 0, 1, E , 1, E , T, F);
+ public static final GT_Recipe_Map sExtractorRecipes = new GT_Recipe_Map_Extractor (new HashSet<GT_Recipe>( 0), "ic.recipe.extractor" , "Extractor" , "ic2.extractor" , RES_PATH_GUI+"basicmachines/Extractor" , 1, 1, 1, 0, 1, E , 1, E , T, F);
+ public static final GT_Recipe_Map sRecyclerRecipes = new GT_Recipe_Map_Recycler (new HashSet<GT_Recipe>( 0), "ic.recipe.recycler" , "Recycler" , "ic2.recycler" , RES_PATH_GUI+"basicmachines/Recycler" , 1, 1, 1, 0, 1, E , 1, E , T, F);
+ public static final GT_Recipe_Map sFurnaceRecipes = new GT_Recipe_Map_Furnace (new HashSet<GT_Recipe>( 0), "mc.recipe.furnace" , "Furnace" , "smelting" , RES_PATH_GUI+"basicmachines/E_Furnace" , 1, 1, 1, 0, 1, E , 1, E , T, F);
+ public static final GT_Recipe_Map sMicrowaveRecipes = new GT_Recipe_Map_Microwave (new HashSet<GT_Recipe>( 0), "gt.recipe.microwave" , "Microwave" , "smelting" , RES_PATH_GUI+"basicmachines/E_Furnace" , 1, 1, 1, 0, 1, E , 1, E , T, F);
+
+ public static final GT_Recipe_Map sScannerFakeRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 3), "gt.recipe.scanner" , "Scanner" , null , RES_PATH_GUI+"basicmachines/Scanner" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sRockBreakerFakeRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 3), "gt.recipe.rockbreaker" , "Rock Breaker" , null , RES_PATH_GUI+"basicmachines/RockBreaker" , 1, 1, 0, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sByProductList = new GT_Recipe_Map (new HashSet<GT_Recipe>( 1000), "gt.recipe.byproductlist" , "Ore Byproduct List" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 6, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sRepicatorFakeRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.replicator" , "Replicator" , null , RES_PATH_GUI+"basicmachines/Replicator" , 0, 1, 0, 1, 1, E , 1, E , T, T);
+
+ public static final GT_Recipe_Map sPlasmaArcFurnaceRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>(10000), "gt.recipe.plasmaarcfurnace" , "Plasma Arc Furnace" , null , RES_PATH_GUI+"basicmachines/PlasmaArcFurnace" , 1, 4, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sArcFurnaceRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>(10000), "gt.recipe.arcfurnace" , "Arc Furnace" , null , RES_PATH_GUI+"basicmachines/ArcFurnace" , 1, 4, 1, 1, 3, E , 1, E , T, T);
+ public static final GT_Recipe_Map sPrinterRecipes = new GT_Recipe_Map_Printer (new HashSet<GT_Recipe>( 100), "gt.recipe.printer" , "Printer" , null , RES_PATH_GUI+"basicmachines/Printer" , 1, 1, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sSifterRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.sifter" , "Sifter" , null , RES_PATH_GUI+"basicmachines/Sifter" , 1, 9, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sPressRecipes = new GT_Recipe_Map_FormingPress (new HashSet<GT_Recipe>( 100), "gt.recipe.press" , "Forming Press" , null , RES_PATH_GUI+"basicmachines/Press" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sLaserEngraverRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.laserengraver" , "Precision Laser Engraver" , null , RES_PATH_GUI+"basicmachines/LaserEngraver" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sMixerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.mixer" , "Mixer" , null , RES_PATH_GUI+"basicmachines/Mixer" , 4, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sAutoclaveRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.autoclave" , "Autoclave" , null , RES_PATH_GUI+"basicmachines/Autoclave" , 1, 1, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sElectroMagneticSeparatorRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 50), "gt.recipe.electromagneticseparator" , "Electromagnetic Separator" , null , RES_PATH_GUI+"basicmachines/ElectromagneticSeparator" , 1, 3, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sPolarizerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.polarizer" , "Electromagnetic Polarizer" , null , RES_PATH_GUI+"basicmachines/Polarizer" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sMaceratorRecipes = new GT_Recipe_Map_Macerator (new HashSet<GT_Recipe>(10000), "gt.recipe.macerator" , "Pulverization" , null , RES_PATH_GUI+"basicmachines/Macerator4" , 1, 4, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sChemicalBathRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.chemicalbath" , "Chemical Bath" , null , RES_PATH_GUI+"basicmachines/ChemicalBath" , 1, 3, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFluidCannerRecipes = new GT_Recipe_Map_FluidCanner (new HashSet<GT_Recipe>( 100), "gt.recipe.fluidcanner" , "Fluid Canning Machine" , null , RES_PATH_GUI+"basicmachines/FluidCannerNEI" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sBrewingRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.brewer" , "Brewing Machine" , null , RES_PATH_GUI+"basicmachines/PotionBrewer" , 1, 0, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFluidHeaterRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.fluidheater" , "Fluid Heater" , null , RES_PATH_GUI+"basicmachines/FluidHeater" , 1, 0, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sDistilleryRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.distillery" , "Distillery" , null , RES_PATH_GUI+"basicmachines/Distillery" , 1, 0, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFermentingRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.fermenter" , "Fermenter" , null , RES_PATH_GUI+"basicmachines/Fermenter" , 0, 0, 0, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFluidSolidficationRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.fluidsolidifier" , "Fluid Solidifier" , null , RES_PATH_GUI+"basicmachines/FluidSolidifier" , 1, 1, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFluidExtractionRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.fluidextractor" , "Fluid Extractor" , null , RES_PATH_GUI+"basicmachines/FluidExtractor" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sBoxinatorRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 2500), "gt.recipe.packager" , "Packager" , null , RES_PATH_GUI+"basicmachines/Packager" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sUnboxinatorRecipes = new GT_Recipe_Map_Unboxinator (new HashSet<GT_Recipe>( 2500), "gt.recipe.unpackager" , "Unpackager" , null , RES_PATH_GUI+"basicmachines/Unpackager" , 1, 2, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sFusionRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 50), "gt.recipe.fusionreactor" , "Fusion Reactor" , null , RES_PATH_GUI+"basicmachines/Default" , 0, 0, 0, 2, 1, "Start: " , 1, " EU" , T, T);
+ public static final GT_Recipe_Map sCentrifugeRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 1000), "gt.recipe.centrifuge" , "Centrifuge" , null , RES_PATH_GUI+"basicmachines/Centrifuge" , 2, 6, 0, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sElectrolyzerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.electrolyzer" , "Electrolyzer" , null , RES_PATH_GUI+"basicmachines/Electrolyzer" , 2, 6, 0, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sBlastRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 500), "gt.recipe.blastfurnace" , "Blast Furnace" , null , RES_PATH_GUI+"basicmachines/Default" , 2, 2, 1, 0, 1, "Heat Capacity: " , 1, " K" , F, T);
+ public static final GT_Recipe_Map sImplosionRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 50), "gt.recipe.implosioncompressor" , "Implosion Compressor" , null , RES_PATH_GUI+"basicmachines/Default" , 2, 2, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sVacuumRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.vacuumfreezer" , "Vacuum Freezer" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sChemicalRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.chemicalreactor" , "Chemical Reactor" , null , RES_PATH_GUI+"basicmachines/ChemicalReactor" , 2, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sDistillationRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 50), "gt.recipe.distillationtower" , "Distillation Tower" , null , RES_PATH_GUI+"basicmachines/Default" , 2, 4, 0, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sWiremillRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 50), "gt.recipe.wiremill" , "Wiremill" , null , RES_PATH_GUI+"basicmachines/Wiremill" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sBenderRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 400), "gt.recipe.metalbender" , "Metal Bender" , null , RES_PATH_GUI+"basicmachines/Bender" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sAlloySmelterRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 3000), "gt.recipe.alloysmelter" , "Alloy Smelter" , null , RES_PATH_GUI+"basicmachines/AlloySmelter" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sAssemblerRecipes = new GT_Recipe_Map_Assembler (new HashSet<GT_Recipe>( 300), "gt.recipe.assembler" , "Assembler" , null , RES_PATH_GUI+"basicmachines/Assembler" , 2, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sCannerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 300), "gt.recipe.canner" , "Canning Machine" , null , RES_PATH_GUI+"basicmachines/Canner" , 2, 2, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sCNCRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 100), "gt.recipe.cncmachine" , "CNC Machine" , null , RES_PATH_GUI+"basicmachines/Default" , 2, 1, 2, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sLatheRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 400), "gt.recipe.lathe" , "Lathe" , null , RES_PATH_GUI+"basicmachines/Lathe" , 1, 2, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sCutterRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.cuttingsaw" , "Cutting Saw" , null , RES_PATH_GUI+"basicmachines/Cutter" , 1, 2, 1, 1, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sSlicerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.slicer" , "Slicer" , null , RES_PATH_GUI+"basicmachines/Slicer" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sExtruderRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 1000), "gt.recipe.extruder" , "Extruder" , null , RES_PATH_GUI+"basicmachines/Extruder" , 2, 1, 2, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sHammerRecipes = new GT_Recipe_Map (new HashSet<GT_Recipe>( 200), "gt.recipe.hammer" , "Hammer" , null , RES_PATH_GUI+"basicmachines/Hammer" , 1, 1, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map sAmplifiers = new GT_Recipe_Map (new HashSet<GT_Recipe>( 10), "gt.recipe.uuamplifier" , "UU Amplifier" , null , RES_PATH_GUI+"basicmachines/Amplifabricator" , 1, 0, 1, 0, 1, E , 1, E , T, T);
+ public static final GT_Recipe_Map_Fuel sDieselFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.dieselgeneratorfuel" , "Diesel Generator Fuel" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sTurbineFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.gasturbinefuel" , "Gas Turbine Fuel" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sHotFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.thermalgeneratorfuel" , "Thermal Generator Fuel" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, F);
+ public static final GT_Recipe_Map_Fuel sDenseLiquidFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.semifluidboilerfuels" , "Semifluid Boiler Fuels" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sPlasmaFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.plasmageneratorfuels" , "Plasma generator Fuels" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sMagicFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.magicfuels" , "Magic Fuels" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sSmallNaquadahReactorFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.smallnaquadahreactor" , "Small Naquadah Reactor" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sLargeNaquadahReactorFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.largenaquadahreactor" , "Large Naquadah Reactor" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+ public static final GT_Recipe_Map_Fuel sFluidNaquadahReactorFuels = new GT_Recipe_Map_Fuel (new HashSet<GT_Recipe>( 10), "gt.recipe.fluidnaquadahreactor" , "Fluid Naquadah Reactor" , null , RES_PATH_GUI+"basicmachines/Default" , 1, 1, 0, 0, 1, "Fuel Value: " , 1000, " EU" , T, T);
+
+ /** HashMap of Recipes based on their Items */
+ public final Map<GT_ItemStack, Collection<GT_Recipe>> mRecipeItemMap = new HashMap<GT_ItemStack, Collection<GT_Recipe>>();
+ /** HashMap of Recipes based on their Fluids */
+ public final Map<Fluid, Collection<GT_Recipe>> mRecipeFluidMap = new HashMap<Fluid, Collection<GT_Recipe>>();
+ /** The List of all Recipes */
+ public final Collection<GT_Recipe> mRecipeList;
+ /** String used as an unlocalised Name. */
+ public final String mUnlocalizedName;
+ /** String used in NEI for the Recipe Lists. If null it will use the unlocalised Name instead*/
+ public final String mNEIName;
+ /** GUI used for NEI Display. Usually the GUI of the Machine itself */
+ public final String mNEIGUIPath;
+ public final String mNEISpecialValuePre, mNEISpecialValuePost;
+ public final int mUsualInputCount, mUsualOutputCount, mNEISpecialValueMultiplier, mMinimalInputItems, mMinimalInputFluids, mAmperage;
+ public final boolean mNEIAllowed, mShowVoltageAmperageInNEI;
+
+ /**
+ * Initialises a new type of Recipe Handler.
+ * @param aRecipeList a List you specify as Recipe List. Usually just an ArrayList with a pre-initialised Size.
+ * @param aUnlocalizedName the unlocalised Name of this Recipe Handler, used mainly for NEI.
+ * @param aLocalName the displayed Name inside the NEI Recipe GUI.
+ * @param aNEIGUIPath the displayed GUI Texture, usually just a Machine GUI. Auto-Attaches ".png" if forgotten.
+ * @param aUsualInputCount the usual amount of Input Slots this Recipe Class has.
+ * @param aUsualOutputCount the usual amount of Output Slots this Recipe Class has.
+ * @param aNEISpecialValuePre the String in front of the Special Value in NEI.
+ * @param aNEISpecialValueMultiplier the Value the Special Value is getting Multiplied with before displaying
+ * @param aNEISpecialValuePost the String after the Special Value. Usually for a Unit or something.
+ * @param aNEIAllowed if NEI is allowed to display this Recipe Handler in general.
+ */
+ public GT_Recipe_Map(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ sMappings.add(this);
+ mNEIAllowed = aNEIAllowed;
+ mShowVoltageAmperageInNEI = aShowVoltageAmperageInNEI;
+ mRecipeList = aRecipeList;
+ mNEIName = aNEIName == null ? aUnlocalizedName : aNEIName;
+ mNEIGUIPath = aNEIGUIPath.endsWith(".png")?aNEIGUIPath:aNEIGUIPath + ".png";
+ mNEISpecialValuePre = aNEISpecialValuePre;
+ mNEISpecialValueMultiplier = aNEISpecialValueMultiplier;
+ mNEISpecialValuePost = aNEISpecialValuePost;
+ mAmperage = aAmperage;
+ mUsualInputCount = aUsualInputCount;
+ mUsualOutputCount = aUsualOutputCount;
+ mMinimalInputItems = aMinimalInputItems;
+ mMinimalInputFluids = aMinimalInputFluids;
+ GregTech_API.sFluidMappings.add(mRecipeFluidMap);
+ GregTech_API.sItemStackMappings.add(mRecipeItemMap);
+ GT_LanguageManager.addStringLocalization(mUnlocalizedName = aUnlocalizedName, aLocalName);
+ }
+
+ public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ return addRecipe(new GT_Recipe(aOptimize, aInputs, aOutputs, aSpecial, aOutputChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue));
+ }
+
+ public GT_Recipe addRecipe(int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ return addRecipe(new GT_Recipe(false, null, null, null, aOutputChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue),F,F,F);
+ }
+
+ public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ return addRecipe(new GT_Recipe(aOptimize, aInputs, aOutputs, aSpecial, null, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue));
+ }
+
+ public GT_Recipe addRecipe(GT_Recipe aRecipe) {
+ return addRecipe(aRecipe, T, F, F);
+ }
+
+ protected GT_Recipe addRecipe(GT_Recipe aRecipe, boolean aCheckForCollisions, boolean aFakeRecipe, boolean aHidden) {
+ aRecipe.mHidden = aHidden;
+ aRecipe.mFakeRecipe = aFakeRecipe;
+ if (aRecipe.mFluidInputs.length < mMinimalInputFluids && aRecipe.mInputs.length < mMinimalInputItems) return null;
+ if (aCheckForCollisions && findRecipe(null, F, Long.MAX_VALUE, aRecipe.mFluidInputs, aRecipe.mInputs) != null) return null;
+ return add(aRecipe);
+ }
+
+ /** Only used for fake Recipe Handlers to show something in NEI, do not use this for adding actual Recipes! findRecipe wont find fake Recipes, containsInput WILL find fake Recipes */
+ public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ return addFakeRecipe(aCheckForCollisions, new GT_Recipe(F, aInputs, aOutputs, aSpecial, aOutputChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue));
+ }
+
+ /** Only used for fake Recipe Handlers to show something in NEI, do not use this for adding actual Recipes! findRecipe wont find fake Recipes, containsInput WILL find fake Recipes */
+ public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ return addFakeRecipe(aCheckForCollisions, new GT_Recipe(F, aInputs, aOutputs, aSpecial, null, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue));
+ }
+
+ /** Only used for fake Recipe Handlers to show something in NEI, do not use this for adding actual Recipes! findRecipe wont find fake Recipes, containsInput WILL find fake Recipes */
+ public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, GT_Recipe aRecipe) {
+ return addRecipe(aRecipe, aCheckForCollisions, T, F);
+ }
+
+ public GT_Recipe add(GT_Recipe aRecipe) {
+ mRecipeList.add(aRecipe);
+ for (FluidStack aFluid : aRecipe.mFluidInputs) if (aFluid != null) {
+ Collection<GT_Recipe> tList = mRecipeFluidMap.get(aFluid.getFluid());
+ if (tList == null) mRecipeFluidMap.put(aFluid.getFluid(), tList = new HashSet<GT_Recipe>(1));
+ tList.add(aRecipe);
+ }
+ return addToItemMap(aRecipe);
+ }
+
+ public void reInit() {
+ Map<GT_ItemStack, Collection<GT_Recipe>> tMap = mRecipeItemMap;
+ if (tMap != null) tMap.clear();
+ for (GT_Recipe tRecipe : mRecipeList) {
+ GT_OreDictUnificator.setStackArray(T, tRecipe.mInputs);
+ GT_OreDictUnificator.setStackArray(T, tRecipe.mOutputs);
+ if (tMap != null) addToItemMap(tRecipe);
+ }
+ }
+
+ /** @return if this Item is a valid Input for any for the Recipes */
+ public boolean containsInput(ItemStack aStack) {
+ return aStack != null && (mRecipeItemMap.containsKey(new GT_ItemStack(aStack)) || mRecipeItemMap.containsKey(new GT_ItemStack(GT_Utility.copyMetaData(W, aStack))));
+ }
+
+ /** @return if this Fluid is a valid Input for any for the Recipes */
+ public boolean containsInput(FluidStack aFluid) {
+ return aFluid != null && containsInput(aFluid.getFluid());
+ }
+
+ /** @return if this Fluid is a valid Input for any for the Recipes */
+ public boolean containsInput(Fluid aFluid) {
+ return aFluid != null && mRecipeFluidMap.containsKey(aFluid);
+ }
+
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack... aInputs) {
+ return findRecipe(aTileEntity, null, aNotUnificated, aVoltage, aFluids, null, aInputs);
+ }
+
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack... aInputs) {
+ return findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, null, aInputs);
+ }
+
+ /**
+ * finds a Recipe matching the aFluid and ItemStack Inputs.
+ * @param aTileEntity an Object representing the current coordinates of the executing Block/Entity/Whatever. This may be null, especially during Startup.
+ * @param aRecipe in case this is != null it will try to use this Recipe first when looking things up.
+ * @param aNotUnificated if this is T the Recipe searcher will unificate the ItemStack Inputs
+ * @param aVoltage Voltage of the Machine or Long.MAX_VALUE if it has no Voltage
+ * @param aFluids the Fluid Inputs
+ * @param aSpecialSlot the content of the Special Slot, the regular Manager doesn't do anything with this, but some custom ones do.
+ * @param aInputs the Item Inputs
+ * @return the Recipe it has found or null for no matching Recipe
+ */
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ // No Recipes? Well, nothing to be found then.
+ if (mRecipeList.isEmpty()) return null;
+
+ // Some Recipe Classes require a certain amount of Inputs of certain kinds. Like "at least 1 Fluid + 1 Stack" or "at least 2 Stacks" before they start searching for Recipes.
+ // This improves Performance massively, especially if people leave things like Circuits, Molds or Shapes in their Machines to select Sub Recipes.
+ if (GregTech_API.sPostloadFinished) {
+ if (mMinimalInputFluids > 0) {
+ if (aFluids == null) return null;
+ int tAmount = 0;
+ for (FluidStack aFluid : aFluids) if (aFluid != null) tAmount++;
+ if (tAmount < mMinimalInputFluids) return null;
+ }
+ if (mMinimalInputItems > 0) {
+ if (aInputs == null) return null;
+ int tAmount = 0;
+ for (ItemStack aInput : aInputs) if (aInput != null) tAmount++;
+ if (tAmount < mMinimalInputItems) return null;
+ }
+ }
+
+ // Unification happens here in case the Input isn't already unificated.
+ if (aNotUnificated) aInputs = GT_OreDictUnificator.getStackArray(T, (Object[])aInputs);
+
+ // Check the Recipe which has been used last time in order to not have to search for it again, if possible.
+ if (aRecipe != null) if (!aRecipe.mFakeRecipe && aRecipe.mCanBeBuffered && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe.mEnabled&&aVoltage*mAmperage>=aRecipe.mEUt?aRecipe:null;
+
+ // Now look for the Recipes inside the Item HashMaps, but only when the Recipes usually have Items.
+ if (mUsualInputCount > 0 && aInputs != null) for (ItemStack tStack : aInputs) if (tStack != null) {
+ Collection<GT_Recipe>
+ tRecipes = mRecipeItemMap.get(new GT_ItemStack(tStack));
+ if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe && tRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return tRecipe.mEnabled&&aVoltage*mAmperage>=tRecipe.mEUt?tRecipe:null;
+ tRecipes = mRecipeItemMap.get(new GT_ItemStack(GT_Utility.copyMetaData(W, tStack)));
+ if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe && tRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return tRecipe.mEnabled&&aVoltage*mAmperage>=tRecipe.mEUt?tRecipe:null;
+ }
+
+ // If the minimal Amount of Items for the Recipe is 0, then it could be a Fluid-Only Recipe, so check that Map too.
+ if (mMinimalInputItems == 0 && aFluids != null) for (FluidStack aFluid : aFluids) if (aFluid != null) {
+ Collection<GT_Recipe>
+ tRecipes = mRecipeFluidMap.get(aFluid.getFluid());
+ if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe && tRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return tRecipe.mEnabled&&aVoltage*mAmperage>=tRecipe.mEUt?tRecipe:null;
+ }
+
+ // And nothing has been found.
+ return null;
+ }
+
+ protected GT_Recipe addToItemMap(GT_Recipe aRecipe) {
+ for (ItemStack aStack : aRecipe.mInputs) if (aStack != null) {
+ GT_ItemStack tStack = new GT_ItemStack(aStack);
+ Collection<GT_Recipe> tList = mRecipeItemMap.get(tStack);
+ if (tList == null) mRecipeItemMap.put(tStack, tList = new HashSet<GT_Recipe>(1));
+ tList.add(aRecipe);
+ }
+ return aRecipe;
+ }
+ }
+
+ public static void reInit() {
+ GT_Log.out.println("GT_Mod: Re-Unificating Recipes.");
+ for (GT_Recipe_Map tMapEntry : GT_Recipe_Map.sMappings) tMapEntry.reInit();
+ }
+
+ /** If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, please add a new Recipe, because of the HashMaps. */
+ public ItemStack[] mInputs, mOutputs;
+ /** If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, please add a new Recipe, because of the HashMaps. */
+ public FluidStack[] mFluidInputs, mFluidOutputs;
+ /** If you changed the amount of Array-Items inside the Output Array then the length of this Array must be larger or equal to the Output Array. A chance of 10000 equals 100% */
+ public int[] mChances;
+ /** An Item that needs to be inside the Special Slot, like for example the Copy Slot inside the Printer. This is only useful for Fake Recipes in NEI, since findRecipe() and containsInput() don't give a shit about this Field. Lists are also possible. */
+ public Object mSpecialItems;
+
+ public int mDuration, mEUt, mSpecialValue;
+
+ /** Use this to just disable a specific Recipe, but the Configuration enables that already for every single Recipe. */
+ public boolean mEnabled = T;
+ /** If this Recipe is hidden from NEI */
+ public boolean mHidden = F;
+ /** If this Recipe is Fake and therefore doesn't get found by the findRecipe Function (It is still in the HashMaps, so that containsInput does return T on those fake Inputs) */
+ public boolean mFakeRecipe = F;
+ /** If this Recipe can be stored inside a Machine in order to make Recipe searching more Efficient by trying the previously used Recipe first. In case you have a Recipe Map overriding things and returning one time use Recipes, you have to set this to F. */
+ public boolean mCanBeBuffered = T;
+ /** If this Recipe needs the Output Slots to be completely empty. Needed in case you have randomised Outputs */
+ public boolean mNeedsEmptyOutput = F;
+
+ public ItemStack getRepresentativeInput(int aIndex) {if (aIndex < 0 || aIndex >= mInputs.length) return null; return GT_Utility.copy(mInputs[aIndex]);}
+ public ItemStack getOutput(int aIndex) {if (aIndex < 0 || aIndex >= mOutputs.length) return null; return GT_Utility.copy(mOutputs[aIndex]);}
+
+ public int getOutputChance(int aIndex) {if (aIndex < 0 || aIndex >= mChances.length) return 10000; return mChances[aIndex];}
+
+ public FluidStack getRepresentativeFluidInput(int aIndex) {if (aIndex < 0 || aIndex >= mFluidInputs.length || mFluidInputs[aIndex] == null) return null; return mFluidInputs[aIndex].copy();}
+ public FluidStack getFluidOutput(int aIndex) {if (aIndex < 0 || aIndex >= mFluidOutputs.length || mFluidOutputs[aIndex] == null) return null; return mFluidOutputs[aIndex].copy();}
+
+ public void checkCellBalance() {
+ if (!D2 || mInputs.length < 1) return;
+
+ int tInputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mInputs);
+ int tOutputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mOutputs);
+
+ if (tInputAmount < tOutputAmount) {
+ if (!Materials.Tin.contains(mInputs)) {
+ GT_Log.err.println("You get more Cells, than you put in? There must be something wrong.");
+ new Exception().printStackTrace(GT_Log.err);
+ }
+ } else if (tInputAmount > tOutputAmount) {
+ if (!Materials.Tin.contains(mOutputs)) {
+ GT_Log.err.println("You get less Cells, than you put in? GT Machines usually don't destroy Cells.");
+ new Exception().printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ public GT_Recipe copy() {
+ return new GT_Recipe(this);
+ }
+
+ public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, FluidStack[] aFluidInputs, ItemStack... aInputs) {
+ return isRecipeInputEqual(aDecreaseStacksizeBySuccess, F, aFluidInputs, aInputs);
+ }
+
+ public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] aFluidInputs, ItemStack... aInputs) {
+ if (mFluidInputs.length > 0 && aFluidInputs == null) return F;
+ for (FluidStack tFluid : mFluidInputs) if (tFluid != null) {
+ boolean temp = T;
+ for (FluidStack aFluid : aFluidInputs) if (aFluid != null && aFluid.isFluidEqual(tFluid) && (aDontCheckStackSizes || aFluid.amount >= tFluid.amount)) {temp = F; break;}
+ if (temp) return F;
+ }
+
+ if (mInputs.length > 0 && aInputs == null) return F;
+
+ for (ItemStack tStack : mInputs) if (tStack != null) {
+ boolean temp = T;
+ for (ItemStack aStack : aInputs) if ((GT_Utility.areUnificationsEqual(aStack, tStack, T) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(F, aStack), tStack, T)) && (aDontCheckStackSizes || aStack.stackSize >= tStack.stackSize)) {temp = F; break;}
+ if (temp) return F;
+ }
+
+ if (aDecreaseStacksizeBySuccess) {
+ if (aFluidInputs != null) {
+ for (FluidStack tFluid : mFluidInputs) if (tFluid != null) {
+ for (FluidStack aFluid : aFluidInputs) if (aFluid != null && aFluid.isFluidEqual(tFluid) && (aDontCheckStackSizes || aFluid.amount >= tFluid.amount)) {aFluid.amount -= tFluid.amount; break;}
+ }
+ }
+
+ if (aInputs != null) {
+ for (ItemStack tStack : mInputs) if (tStack != null) {
+ for (ItemStack aStack : aInputs) if ((GT_Utility.areUnificationsEqual(aStack, tStack, T) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(F, aStack), tStack, T)) && (aDontCheckStackSizes || aStack.stackSize >= tStack.stackSize)) {aStack.stackSize -= tStack.stackSize; break;}
+ }
+ }
+ }
+
+ return T;
+ }
+
+ private GT_Recipe(GT_Recipe aRecipe) {
+ mInputs = GT_Utility.copyStackArray((Object[])aRecipe.mInputs);
+ mOutputs = GT_Utility.copyStackArray((Object[])aRecipe.mOutputs);
+ mSpecialItems = aRecipe.mSpecialItems;
+ mChances = aRecipe.mChances;
+ mFluidInputs = GT_Utility.copyFluidArray(aRecipe.mFluidInputs);
+ mFluidOutputs = GT_Utility.copyFluidArray(aRecipe.mFluidOutputs);
+ mDuration = aRecipe.mDuration;
+ mSpecialValue = aRecipe.mSpecialValue;
+ mEUt = aRecipe.mEUt;
+ mNeedsEmptyOutput = aRecipe.mNeedsEmptyOutput;
+ mCanBeBuffered = aRecipe.mCanBeBuffered;
+ mFakeRecipe = aRecipe.mFakeRecipe;
+ mEnabled = aRecipe.mEnabled;
+ mHidden = aRecipe.mHidden;
+ }
+
+ protected GT_Recipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
+ if (aInputs == null) aInputs = new ItemStack[0];
+ if (aOutputs == null) aOutputs = new ItemStack[0];
+ if (aFluidInputs == null) aFluidInputs = new FluidStack[0];
+ if (aFluidOutputs == null) aFluidOutputs = new FluidStack[0];
+ if (aChances == null) aChances = new int[aOutputs.length];
+ if (aChances.length < aOutputs.length) aChances = Arrays.copyOf(aChances, aOutputs.length);
+
+ aInputs = GT_Utility.getArrayListWithoutTrailingNulls(aInputs ).toArray(new ItemStack[0]);
+ aOutputs = GT_Utility.getArrayListWithoutTrailingNulls(aOutputs ).toArray(new ItemStack[0]);
+ aFluidInputs = GT_Utility.getArrayListWithoutNulls(aFluidInputs ).toArray(new FluidStack[0]);
+ aFluidOutputs = GT_Utility.getArrayListWithoutNulls(aFluidOutputs ).toArray(new FluidStack[0]);
+
+ GT_OreDictUnificator.setStackArray(T, aInputs);
+ GT_OreDictUnificator.setStackArray(T, aOutputs);
+
+ for (ItemStack tStack : aOutputs) GT_Utility.updateItemStack(tStack);
+
+ for (int i = 0; i < aChances .length; i++) if (aChances[i] <= 0) aChances[i] = 10000;
+ for (int i = 0; i < aFluidInputs .length; i++) aFluidInputs [i] = new GT_FluidStack(aFluidInputs [i]);
+ for (int i = 0; i < aFluidOutputs .length; i++) aFluidOutputs[i] = new GT_FluidStack(aFluidOutputs[i]);
+
+ for (int i = 0; i < aInputs.length; i++) if (aInputs[i] != null && Items.feather.getDamage(aInputs[i]) != W) for (int j = 0; j < aOutputs.length; j++) {
+ if (GT_Utility.areStacksEqual(aInputs[i], aOutputs[j])) {
+ if (aInputs[i].stackSize >= aOutputs[j].stackSize) {
+ aInputs[i].stackSize -= aOutputs[j].stackSize;
+ aOutputs[j] = null;
+ } else {
+ aOutputs[j].stackSize -= aInputs[i].stackSize;
+ }
+ }
+ }
+
+ if (aOptimize && aDuration >= 32) {
+ ArrayList<ItemStack> tList = new ArrayList<ItemStack>();
+ tList.addAll(Arrays.asList(aInputs));
+ tList.addAll(Arrays.asList(aOutputs));
+ for (int i = 0; i < tList.size(); i++) if (tList.get(i) == null) tList.remove(i--);
+
+ for (byte i = (byte)Math.min(64, aDuration / 16); i > 1; i--) if (aDuration / i >= 16) {
+ boolean temp = T;
+ for (int j = 0, k = tList.size(); temp && j < k; j++) if (tList.get(j).stackSize % i != 0) temp = F;
+ for (int j = 0; temp && j < aFluidInputs .length; j++) if (aFluidInputs [j].amount % i != 0) temp = F;
+ for (int j = 0; temp && j < aFluidOutputs.length; j++) if (aFluidOutputs[j].amount % i != 0) temp = F;
+ if (temp) {
+ for (int j = 0, k = tList.size(); j < k; j++) tList.get(j).stackSize /= i;
+ for (int j = 0; j < aFluidInputs .length; j++) aFluidInputs [j].amount /= i;
+ for (int j = 0; j < aFluidOutputs.length; j++) aFluidOutputs[j].amount /= i;
+ aDuration /= i;
+ }
+ }
+ }
+
+ mInputs = aInputs;
+ mOutputs = aOutputs;
+ mSpecialItems = aSpecialItems;
+ mChances = aChances;
+ mFluidInputs = aFluidInputs;
+ mFluidOutputs = aFluidOutputs;
+ mDuration = aDuration;
+ mSpecialValue = aSpecialValue;
+ mEUt = aEUt;
+
+// checkCellBalance();
+ }
+
+ // -----
+ // Old Constructors, do not use!
+ // -----
+
+ public GT_Recipe(ItemStack aInput1, ItemStack aOutput1, int aFuelValue, int aType) {
+ this(aInput1, aOutput1, null, null, null, aFuelValue, aType);
+ }
+
+ // aSpecialValue = EU per Liter! If there is no Liquid for this Object, then it gets multiplied with 1000!
+ public GT_Recipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, int aSpecialValue, int aType) {
+ this(T, new ItemStack[] {aInput1}, new ItemStack[] {aOutput1, aOutput2, aOutput3, aOutput4}, null, null, null, null, 0, 0, Math.max(1, aSpecialValue));
+
+ if (mInputs.length > 0 && aSpecialValue > 0) {
+ switch (aType) {
+ // Diesel Generator
+ case 0:
+ GT_Recipe_Map.sDieselFuels.addRecipe(this);
+ break;
+ // Gas Turbine
+ case 1:
+ GT_Recipe_Map.sTurbineFuels.addRecipe(this);
+ break;
+ // Thermal Generator
+ case 2:
+ GT_Recipe_Map.sHotFuels.addRecipe(this);
+ break;
+ // Plasma Generator
+ case 4:
+ GT_Recipe_Map.sPlasmaFuels.addRecipe(this);
+ break;
+ // Magic Generator
+ case 5:
+ GT_Recipe_Map.sMagicFuels.addRecipe(this);
+ break;
+ // Fluid Generator. Usually 3. Every wrong Type ends up in the Semifluid Generator
+ default:
+ GT_Recipe_Map.sDenseLiquidFuels.addRecipe(this);
+ break;
+ }
+ }
+ }
+
+ public GT_Recipe(FluidStack aInput1, FluidStack aInput2, FluidStack aOutput1, int aDuration, int aEUt, int aSpecialValue) {
+ this(T, null, null, null, null,new FluidStack[] {aInput1, aInput2}, new FluidStack[] {aOutput1}, Math.max(aDuration, 1), aEUt, Math.max(Math.min(aSpecialValue, 160000000), 0));
+ if (mInputs.length > 1) {
+ GT_Recipe_Map.sFusionRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt) {
+ this(T, new ItemStack[] {aInput1}, new ItemStack[] {aOutput1, aOutput2}, null, null, null, null, aDuration, aEUt, 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sLatheRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, int aCellAmount, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, int aDuration, int aEUt) {
+ this(T, new ItemStack[] {aInput1, aCellAmount>0?ItemList.Cell_Empty.get(Math.min(64, Math.max(1, aCellAmount))):null}, new ItemStack[] {aOutput1, aOutput2, aOutput3, aOutput4}, null, null, null, null, Math.max(aDuration, 1), Math.max(aEUt, 1), 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sDistillationRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2) {
+ this(T, new ItemStack[] {aInput1, GT_ModHandler.getIC2Item("industrialTnt", aInput2>0?aInput2<64?aInput2:64:1, new ItemStack(Blocks.tnt, aInput2>0?aInput2<64?aInput2:64:1))}, new ItemStack[] {aOutput1, aOutput2}, null, null, null, null, 20, 30, 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sImplosionRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(int aEUt, int aDuration, ItemStack aInput1, ItemStack aOutput1) {
+ this(T, new ItemStack[] {aInput1, ItemList.Circuit_Integrated.getWithDamage(0, aInput1.stackSize)}, new ItemStack[] {aOutput1}, null, null, null, null, Math.max(aDuration, 1), Math.max(aEUt, 1), 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sBenderRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, ItemStack aInput2, int aEUt, int aDuration, ItemStack aOutput1) {
+ this(T, aInput2==null ? new ItemStack[] {aInput1} : new ItemStack[] {aInput1, aInput2}, new ItemStack[] {aOutput1}, null, null, null, null, Math.max(aDuration, 1), Math.max(aEUt, 1), 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sAlloySmelterRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, int aEUt, ItemStack aInput2, int aDuration, ItemStack aOutput1, ItemStack aOutput2) {
+ this(T, aInput2==null?new ItemStack[] {aInput1}:new ItemStack[] {aInput1, aInput2}, new ItemStack[] {aOutput1, aOutput2}, null, null, null, null, Math.max(aDuration, 1), Math.max(aEUt, 1), 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sCannerRecipes.addRecipe(this);
+ }
+ }
+
+ public GT_Recipe(ItemStack aInput1, ItemStack aOutput1, int aDuration) {
+ this(T, new ItemStack[] {aInput1}, new ItemStack[] {aOutput1}, null, null, null, null, Math.max(aDuration, 1), 120, 0);
+ if (mInputs.length > 0 && mOutputs[0] != null) {
+ GT_Recipe_Map.sVacuumRecipes.addRecipe(this);
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Here are a few Classes I use for Special Cases in some Machines without having to write a separate Machine Class.
+ // -----------------------------------------------------------------------------------------------------------------
+
+ /**
+ * Abstract Class for general Recipe Handling of non GT Recipes
+ */
+ public static abstract class GT_Recipe_Map_NonGTRecipes extends GT_Recipe_Map {
+ public GT_Recipe_Map_NonGTRecipes(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return F;}
+ @Override public boolean containsInput(FluidStack aFluid) {return F;}
+ @Override public boolean containsInput(Fluid aFluid) {return F;}
+
+ @Override public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {return null;}
+ @Override public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {return null;}
+ @Override public GT_Recipe addRecipe(GT_Recipe aRecipe) {return null;}
+ @Override public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {return null;}
+ @Override public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {return null;}
+ @Override public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, GT_Recipe aRecipe) {return null;}
+ @Override public GT_Recipe add(GT_Recipe aRecipe) {return null;}
+ @Override public void reInit() {/**/}
+ @Override protected GT_Recipe addToItemMap(GT_Recipe aRecipe) {return null;}
+ }
+
+ /**
+ * Just a Recipe Map with Utility specifically for Fuels.
+ */
+ public static class GT_Recipe_Map_Fuel extends GT_Recipe_Map {
+ public GT_Recipe_Map_Fuel(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ public GT_Recipe addFuel(ItemStack aInput, ItemStack aOutput, int aFuelValueInEU) {
+ return addFuel(aInput, aOutput, null, null, 10000, aFuelValueInEU);
+ }
+
+ public GT_Recipe addFuel(ItemStack aInput, ItemStack aOutput, int aChance, int aFuelValueInEU) {
+ return addFuel(aInput, aOutput, null, null, aChance, aFuelValueInEU);
+ }
+
+ public GT_Recipe addFuel(FluidStack aFluidInput, FluidStack aFluidOutput, int aFuelValueInEU) {
+ return addFuel(null, null, aFluidInput, aFluidOutput, 10000, aFuelValueInEU);
+ }
+
+ public GT_Recipe addFuel(ItemStack aInput, ItemStack aOutput, FluidStack aFluidInput, FluidStack aFluidOutput, int aFuelValueInEU) {
+ return addFuel(aInput, aOutput, aFluidInput, aFluidOutput, 10000, aFuelValueInEU);
+ }
+
+ public GT_Recipe addFuel(ItemStack aInput, ItemStack aOutput, FluidStack aFluidInput, FluidStack aFluidOutput, int aChance, int aFuelValueInEU) {
+ return addRecipe(T, new ItemStack[] {aInput}, new ItemStack[] {aOutput}, null, new int[] {aChance}, new FluidStack[] {aFluidInput}, new FluidStack[] {aFluidOutput}, 0, 0, aFuelValueInEU);
+ }
+ }
+
+ /**
+ * Special Class for Furnace Recipe handling.
+ */
+ public static class GT_Recipe_Map_Furnace extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_Furnace(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tOutput = GT_ModHandler.getSmeltingOutput(aInputs[0], F, null);
+ return tOutput == null ? null : new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {tOutput}, null, null, null, null, 128, 4, 0);
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_ModHandler.getSmeltingOutput(aStack, F, null) != null;}
+ }
+
+ /**
+ * Special Class for Microwave Recipe handling.
+ */
+ public static class GT_Recipe_Map_Microwave extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_Microwave(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tOutput = GT_ModHandler.getSmeltingOutput(aInputs[0], F, null);
+
+ if (GT_Utility.areStacksEqual(aInputs[0], new ItemStack(Items.book, 1, W))) {
+ return new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {GT_Utility.getWrittenBook("Manual_Microwave", ItemList.Book_Written_03.get(1))}, null, null, null, null, 32, 4, 0);
+ }
+
+ // Check Container Item of Input since it is around the Input, then the Input itself, then Container Item of Output and last check the Output itself
+ for (ItemStack tStack : new ItemStack[] {GT_Utility.getContainerItem(aInputs[0], T), aInputs[0], GT_Utility.getContainerItem(tOutput, T), tOutput}) if (tStack != null) {
+ if (GT_Utility.areStacksEqual(tStack, new ItemStack(Blocks.netherrack, 1, W), T)
+ || GT_Utility.areStacksEqual(tStack, new ItemStack(Blocks.tnt, 1, W), T)
+ || GT_Utility.areStacksEqual(tStack, new ItemStack(Items.egg, 1, W), T)
+ || GT_Utility.areStacksEqual(tStack, new ItemStack(Items.firework_charge, 1, W), T)
+ || GT_Utility.areStacksEqual(tStack, new ItemStack(Items.fireworks, 1, W), T)
+ || GT_Utility.areStacksEqual(tStack, new ItemStack(Items.fire_charge, 1, W), T)
+ ) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).doExplosion(aVoltage * 4);
+ return null;
+ }
+ ItemData tData = GT_OreDictUnificator.getItemData(tStack);
+
+
+
+ if (tData != null) {
+ if (tData.mMaterial != null && tData.mMaterial.mMaterial != null) {
+ if (tData.mMaterial.mMaterial.contains(SubTag.METAL) || tData.mMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).doExplosion(aVoltage * 4);
+ return null;
+ }
+ if (tData.mMaterial.mMaterial.contains(SubTag.FLAMMABLE)) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).setOnFire();
+ return null;
+ }
+ }
+ for (MaterialStack tMaterial : tData.mByProducts) if (tMaterial != null) {
+ if (tMaterial.mMaterial.contains(SubTag.METAL) || tMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).doExplosion(aVoltage * 4);
+ return null;
+ }
+ if (tMaterial.mMaterial.contains(SubTag.FLAMMABLE)) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).setOnFire();
+ return null;
+ }
+ }
+ }
+ if (TileEntityFurnace.getItemBurnTime(tStack) > 0) {
+ if (aTileEntity instanceof IGregTechTileEntity) ((IGregTechTileEntity)aTileEntity).setOnFire();
+ return null;
+ }
+
+ }
+
+ return tOutput == null ? null : new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {tOutput}, null, null, null, null, 32, 4, 0);
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_ModHandler.getSmeltingOutput(aStack, F, null) != null;}
+ }
+
+ /**
+ * Special Class for Unboxinator handling.
+ */
+ public static class GT_Recipe_Map_Unboxinator extends GT_Recipe_Map {
+ public GT_Recipe_Map_Unboxinator(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || !ItemList.IC2_Scrapbox.isStackEqual(aInputs[0], F, T)) return super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ ItemStack tOutput = GT_ModHandler.getRandomScrapboxDrop();
+ if (tOutput == null) return super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ GT_Recipe rRecipe = new GT_Recipe(F, new ItemStack[] {ItemList.IC2_Scrapbox.get(1)}, new ItemStack[] {tOutput}, null, null, null, null, 16, 1, 0);
+ // It is not allowed to be buffered due to the random Output
+ rRecipe.mCanBeBuffered = F;
+ // Due to its randomness it is not good if there are Items in the Output Slot, because those Items could manipulate the outcome.
+ rRecipe.mNeedsEmptyOutput = T;
+ return rRecipe;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return ItemList.IC2_Scrapbox.isStackEqual(aStack, F, T) || super.containsInput(aStack);}
+ }
+
+ /**
+ * Special Class for Fluid Canner handling.
+ */
+ public static class GT_Recipe_Map_FluidCanner extends GT_Recipe_Map {
+ public GT_Recipe_Map_FluidCanner(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ GT_Recipe rRecipe = super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null || rRecipe != null || !GregTech_API.sPostloadFinished) return rRecipe;
+ if (aFluids != null && aFluids.length > 0 && aFluids[0] != null) {
+ ItemStack tOutput = GT_Utility.fillFluidContainer(aFluids[0], aInputs[0], F, T);
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(tOutput, T);
+ if (tFluid != null) rRecipe = new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {tOutput}, null, null, new FluidStack[] {tFluid}, null, Math.max(tFluid.amount / 64, 16), 1, 0);
+ }
+ if (rRecipe == null) {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInputs[0], T);
+ if (tFluid != null) rRecipe = new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {GT_Utility.getContainerItem(aInputs[0], T)}, null, null, null, new FluidStack[] {tFluid}, Math.max(tFluid.amount / 64, 16), 1, 0);
+ }
+ if (rRecipe != null) rRecipe.mCanBeBuffered = F;
+ return rRecipe;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return aStack != null && (super.containsInput(aStack) || (aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0));}
+ @Override public boolean containsInput(FluidStack aFluid) {return T;}
+ @Override public boolean containsInput(Fluid aFluid) {return T;}
+ }
+
+ /**
+ * Special Class for Recycler Recipe handling.
+ */
+ public static class GT_Recipe_Map_Recycler extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_Recycler(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ return new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, GT_ModHandler.getRecyclerOutput(GT_Utility.copyAmount(64, aInputs[0]), 0) == null ? null : new ItemStack[] {ItemList.IC2_Scrap.get(1)}, null, new int[] {1250}, null, null, 45, 1, 0);
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_ModHandler.getRecyclerOutput(GT_Utility.copyAmount(64, aStack), 0) != null;}
+ }
+
+ /**
+ * Special Class for Compressor Recipe handling.
+ */
+ public static class GT_Recipe_Map_Compressor extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_Compressor(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tComparedInput = GT_Utility.copy(aInputs[0]);
+ ItemStack[] tOutputItems = GT_ModHandler.getMachineOutput(tComparedInput, ic2.api.recipe.Recipes.compressor.getRecipes(), T, new NBTTagCompound(), null, null, null);
+ return GT_Utility.arrayContainsNonNull(tOutputItems) ? new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(aInputs[0].stackSize - tComparedInput.stackSize, aInputs[0])}, tOutputItems, null, null, null, null, 400, 2, 0) : null;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_Utility.arrayContainsNonNull(GT_ModHandler.getMachineOutput(GT_Utility.copyAmount(64, aStack), ic2.api.recipe.Recipes.compressor.getRecipes(), F, new NBTTagCompound(), null, null, null));}
+ }
+
+ /**
+ * Special Class for Extractor Recipe handling.
+ */
+ public static class GT_Recipe_Map_Extractor extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_Extractor(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tComparedInput = GT_Utility.copy(aInputs[0]);
+ ItemStack[] tOutputItems = GT_ModHandler.getMachineOutput(tComparedInput, ic2.api.recipe.Recipes.extractor.getRecipes(), T, new NBTTagCompound(), null, null, null);
+ return GT_Utility.arrayContainsNonNull(tOutputItems) ? new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(aInputs[0].stackSize - tComparedInput.stackSize, aInputs[0])}, tOutputItems, null, null, null, null, 400, 2, 0) : null;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_Utility.arrayContainsNonNull(GT_ModHandler.getMachineOutput(GT_Utility.copyAmount(64, aStack), ic2.api.recipe.Recipes.extractor.getRecipes(), F, new NBTTagCompound(), null, null, null));}
+ }
+
+ /**
+ * Special Class for Thermal Centrifuge Recipe handling.
+ */
+ public static class GT_Recipe_Map_ThermalCentrifuge extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_ThermalCentrifuge(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tComparedInput = GT_Utility.copy(aInputs[0]);
+ ItemStack[] tOutputItems = GT_ModHandler.getMachineOutput(tComparedInput, ic2.api.recipe.Recipes.centrifuge.getRecipes(), T, new NBTTagCompound(), null, null, null);
+ return GT_Utility.arrayContainsNonNull(tOutputItems) ? new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(aInputs[0].stackSize - tComparedInput.stackSize, aInputs[0])}, tOutputItems, null, null, null, null, 400, 48, 0) : null;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_Utility.arrayContainsNonNull(GT_ModHandler.getMachineOutput(GT_Utility.copyAmount(64, aStack), ic2.api.recipe.Recipes.centrifuge.getRecipes(), F, new NBTTagCompound(), null, null, null));}
+ }
+
+ /**
+ * Special Class for Ore Washer Recipe handling.
+ */
+ public static class GT_Recipe_Map_OreWasher extends GT_Recipe_Map_NonGTRecipes {
+ public GT_Recipe_Map_OreWasher(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null || aFluids == null || aFluids.length < 1 || !GT_ModHandler.isWater(aFluids[0])) return null;
+ if (aRecipe != null && aRecipe.isRecipeInputEqual(F, T, aFluids, aInputs)) return aRecipe;
+ ItemStack tComparedInput = GT_Utility.copy(aInputs[0]);
+ NBTTagCompound aRecipeMetaData = new NBTTagCompound();
+ ItemStack[] tOutputItems = GT_ModHandler.getMachineOutput(tComparedInput, ic2.api.recipe.Recipes.oreWashing.getRecipes(), T, aRecipeMetaData, null, null, null);
+ return GT_Utility.arrayContainsNonNull(tOutputItems) ? new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(aInputs[0].stackSize - tComparedInput.stackSize, aInputs[0])}, tOutputItems, null, null, new FluidStack[] {new FluidStack(aFluids[0].getFluid(), ((NBTTagCompound)aRecipeMetaData.getTag("return")).getInteger("amount"))}, null, 400, 16, 0) : null;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return GT_Utility.arrayContainsNonNull(GT_ModHandler.getMachineOutput(GT_Utility.copyAmount(64, aStack), ic2.api.recipe.Recipes.oreWashing.getRecipes(), F, new NBTTagCompound(), null, null, null));}
+ @Override public boolean containsInput(FluidStack aFluid) {return GT_ModHandler.isWater(aFluid);}
+ @Override public boolean containsInput(Fluid aFluid) {return GT_ModHandler.isWater(new FluidStack(aFluid, 0));}
+ }
+
+ /**
+ * Special Class for Macerator/RockCrusher Recipe handling.
+ */
+ public static class GT_Recipe_Map_Macerator extends GT_Recipe_Map {
+ public GT_Recipe_Map_Macerator(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null || !GregTech_API.sPostloadFinished) return super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ aRecipe = super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ if (aRecipe != null) return aRecipe;
+
+ try {
+ List<ItemStack> tRecipeOutputs = mods.railcraft.api.crafting.RailcraftCraftingManager.rockCrusher.getRecipe(GT_Utility.copyAmount(1, aInputs[0])).getRandomizedOuputs();
+ if (tRecipeOutputs != null) {
+ aRecipe = new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, tRecipeOutputs.toArray(new ItemStack[tRecipeOutputs.size()]), null, null, null, null, 800, 2, 0);
+ aRecipe.mCanBeBuffered = F;
+ aRecipe.mNeedsEmptyOutput = T;
+ return aRecipe;
+ }
+ } catch(NoClassDefFoundError e) {if (D1) GT_Log.err.println("Railcraft Not loaded");} catch(NullPointerException e) {/**/}
+
+ ItemStack tComparedInput = GT_Utility.copy(aInputs[0]);
+ ItemStack[] tOutputItems = GT_ModHandler.getMachineOutput(tComparedInput, ic2.api.recipe.Recipes.macerator.getRecipes(), T, new NBTTagCompound(), null, null, null);
+ return GT_Utility.arrayContainsNonNull(tOutputItems) ? new GT_Recipe(F, new ItemStack[] {GT_Utility.copyAmount(aInputs[0].stackSize - tComparedInput.stackSize, aInputs[0])}, tOutputItems, null, null, null, null, 400, 2, 0) : null;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return super.containsInput(aStack) || GT_Utility.arrayContainsNonNull(GT_ModHandler.getMachineOutput(GT_Utility.copyAmount(64, aStack), ic2.api.recipe.Recipes.macerator.getRecipes(), F, new NBTTagCompound(), null, null, null));}
+ }
+
+ /**
+ * Special Class for Assembler handling.
+ */
+ public static class GT_Recipe_Map_Assembler extends GT_Recipe_Map {
+ public GT_Recipe_Map_Assembler(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ GT_Recipe rRecipe = super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null || rRecipe == null || !GregTech_API.sPostloadFinished) return rRecipe;
+ for (ItemStack aInput : aInputs) {
+ if (ItemList.Paper_Printed_Pages.isStackEqual(aInput, F, T)) {
+ rRecipe = rRecipe.copy();
+ rRecipe.mCanBeBuffered = F;
+ rRecipe.mOutputs[0].setTagCompound(aInput.getTagCompound());
+ }
+ }
+ return rRecipe;
+ }
+ }
+
+ /**
+ * Special Class for Forming Press handling.
+ */
+ public static class GT_Recipe_Map_FormingPress extends GT_Recipe_Map {
+ public GT_Recipe_Map_FormingPress(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ GT_Recipe rRecipe = super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ if (aInputs == null || aInputs.length < 2 || aInputs[0] == null || aInputs[1] == null || !GregTech_API.sPostloadFinished) return rRecipe;
+ if (rRecipe == null) {
+ if (ItemList.Shape_Mold_Name.isStackEqual(aInputs[0], F, T)) {
+ ItemStack tOutput = GT_Utility.copyAmount(1, aInputs[1]);
+ tOutput.setStackDisplayName(aInputs[0].getDisplayName());
+ rRecipe = new GT_Recipe(F, new ItemStack[] {ItemList.Shape_Mold_Name.get(0), GT_Utility.copyAmount(1, aInputs[1])}, new ItemStack[] {tOutput}, null, null, null, null, 128, 8, 0);
+ rRecipe.mCanBeBuffered = F;
+ return rRecipe;
+ }
+ if (ItemList.Shape_Mold_Name.isStackEqual(aInputs[1], F, T)) {
+ ItemStack tOutput = GT_Utility.copyAmount(1, aInputs[0]);
+ tOutput.setStackDisplayName(aInputs[1].getDisplayName());
+ rRecipe = new GT_Recipe(F, new ItemStack[] {ItemList.Shape_Mold_Name.get(0), GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {tOutput}, null, null, null, null, 128, 8, 0);
+ rRecipe.mCanBeBuffered = F;
+ return rRecipe;
+ }
+ return null;
+ }
+ for (ItemStack aMold : aInputs) {
+ if (ItemList.Shape_Mold_Credit.isStackEqual(aMold, F, T)) {
+ NBTTagCompound tNBT = aMold.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound();
+ if (!tNBT.hasKey("credit_security_id")) tNBT.setLong("credit_security_id", System.nanoTime());
+ aMold.setTagCompound(tNBT);
+
+ rRecipe = rRecipe.copy();
+ rRecipe.mCanBeBuffered = F;
+ rRecipe.mOutputs[0].setTagCompound(tNBT);
+ return rRecipe;
+ }
+ }
+ return rRecipe;
+ }
+ }
+
+ /**
+ * Special Class for Printer handling.
+ */
+ public static class GT_Recipe_Map_Printer extends GT_Recipe_Map {
+ public GT_Recipe_Map_Printer(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed) {
+ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed);
+ }
+
+ @Override
+ public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, ItemStack... aInputs) {
+ GT_Recipe rRecipe = super.findRecipe(aTileEntity, aRecipe, aNotUnificated, aVoltage, aFluids, aSpecialSlot, aInputs);
+ if (aInputs == null || aInputs.length <= 0 || aInputs[0] == null || aFluids == null || aFluids.length <= 0 || aFluids[0] == null || !GregTech_API.sPostloadFinished) return rRecipe;
+
+ Dyes aDye = null; for (Dyes tDye : Dyes.VALUES) if (tDye.isFluidDye(aFluids[0])) {aDye = tDye; break;}
+
+ if (aDye == null) return rRecipe;
+
+ if (rRecipe == null) {
+ ItemStack
+ tOutput = GT_ModHandler.getAllRecipeOutput(aTileEntity==null?null:aTileEntity.getWorld(), aInputs[0], aInputs[0], aInputs[0], aInputs[0], ItemList.DYE_ONLY_ITEMS[aDye.mIndex].get(1), aInputs[0], aInputs[0], aInputs[0], aInputs[0]);
+ if (tOutput != null) return addRecipe(new GT_Recipe(T, new ItemStack[] {GT_Utility.copyAmount(8, aInputs[0])}, new ItemStack[] {tOutput}, null, null, new FluidStack[] {new FluidStack(aFluids[0].getFluid(), (int)L)}, null, 256, 2, 0), F, F, T);
+
+ tOutput = GT_ModHandler.getAllRecipeOutput(aTileEntity==null?null:aTileEntity.getWorld(), aInputs[0], ItemList.DYE_ONLY_ITEMS[aDye.mIndex].get(1));
+ if (tOutput != null) return addRecipe(new GT_Recipe(T, new ItemStack[] {GT_Utility.copyAmount(1, aInputs[0])}, new ItemStack[] {tOutput}, null, null, new FluidStack[] {new FluidStack(aFluids[0].getFluid(), (int)L)}, null, 32, 2, 0), F, F, T);
+ } else {
+ if (aInputs[0].getItem() == Items.paper) {
+ if (!ItemList.Tool_DataStick.isStackEqual(aSpecialSlot, F, T)) return null;
+ NBTTagCompound tNBT = aSpecialSlot.getTagCompound();
+ if (tNBT == null || GT_Utility.isStringInvalid(tNBT.getString("title")) || GT_Utility.isStringInvalid(tNBT.getString("author"))) return null;
+
+ rRecipe = rRecipe.copy();
+ rRecipe.mCanBeBuffered = F;
+ rRecipe.mOutputs[0].setTagCompound(tNBT);
+ return rRecipe;
+ }
+ if (aInputs[0].getItem() == Items.map) {
+ if (!ItemList.Tool_DataStick.isStackEqual(aSpecialSlot, F, T)) return null;
+ NBTTagCompound tNBT = aSpecialSlot.getTagCompound();
+ if (tNBT == null || !tNBT.hasKey("map_id")) return null;
+
+ rRecipe = rRecipe.copy();
+ rRecipe.mCanBeBuffered = F;
+ rRecipe.mOutputs[0].setItemDamage(tNBT.getShort("map_id"));
+ return rRecipe;
+ }
+ if (ItemList.Paper_Punch_Card_Empty.isStackEqual(aInputs[0], F, T)) {
+ if (!ItemList.Tool_DataStick.isStackEqual(aSpecialSlot, F, T)) return null;
+ NBTTagCompound tNBT = aSpecialSlot.getTagCompound();
+ if (tNBT == null || !tNBT.hasKey("GT.PunchCardData")) return null;
+
+ rRecipe = rRecipe.copy();
+ rRecipe.mCanBeBuffered = F;
+ rRecipe.mOutputs[0].setTagCompound(GT_Utility.getNBTContainingString(new NBTTagCompound(), "GT.PunchCardData", tNBT.getString("GT.PunchCardData")));
+ return rRecipe;
+ }
+ }
+ return rRecipe;
+ }
+
+ @Override public boolean containsInput(ItemStack aStack) {return T;}
+ @Override public boolean containsInput(FluidStack aFluid) {return super.containsInput(aFluid) || Dyes.isAnyFluidDye(aFluid);}
+ @Override public boolean containsInput(Fluid aFluid) {return super.containsInput(aFluid) || Dyes.isAnyFluidDye(aFluid);}
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java b/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java
new file mode 100644
index 0000000000..a11a4a1aba
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java
@@ -0,0 +1,313 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.L;
+import static gregtech.api.enums.GT_Values.M;
+import static gregtech.api.enums.GT_Values.RA;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.*;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+/**
+ * Class for Automatic Recipe registering.
+ */
+public class GT_RecipeRegistrator {
+ public static volatile int VERSION = 508;
+
+ /** List of Materials, which are used in the Creation of Sticks. All Rod Materials are automatically added to this List. */
+ public static final List<Materials> sRodMaterialList = new ArrayList<Materials>();
+
+ public static void registerMaterialRecycling(ItemStack aStack, Materials aMaterial, long aMaterialAmount, MaterialStack aByproduct) {
+ if (GT_Utility.isStackInvalid(aStack)) return;
+ if (aByproduct != null) {aByproduct = aByproduct.clone(); aByproduct.mAmount /= aStack.stackSize;}
+ GT_OreDictUnificator.addItemData(GT_Utility.copyAmount(1, aStack), new ItemData(aMaterial, aMaterialAmount / aStack.stackSize, aByproduct));
+ }
+
+ public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) {
+ if (GT_Utility.isStackInvalid(aStack) || GT_Utility.areStacksEqual(new ItemStack(Items.blaze_rod), aStack) || aData == null || !aData.hasValidMaterialData() || aData.mMaterial.mAmount <= 0 || GT_Utility.getFluidForFilledItem(aStack, false) != null) return;
+ registerReverseMacerating (GT_Utility.copyAmount(1, aStack), aData, aData.mPrefix == null);
+ registerReverseSmelting (GT_Utility.copyAmount(1, aStack), aData.mMaterial.mMaterial, aData.mMaterial.mAmount, true);
+ registerReverseFluidSmelting (GT_Utility.copyAmount(1, aStack), aData.mMaterial.mMaterial, aData.mMaterial.mAmount, aData.getByProduct(0));
+ registerReverseArcSmelting (GT_Utility.copyAmount(1, aStack), aData);
+ }
+
+ /**
+ * @param aStack the stack to be recycled.
+ * @param aMaterial the Material.
+ * @param aMaterialAmount the amount of it in Material Units.
+ */
+ public static void registerReverseFluidSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, MaterialStack aByproduct) {
+ if (aStack == null || aMaterial == null || aMaterial.mSmeltInto.mStandardMoltenFluid == null || !aMaterial.contains(SubTag.SMELTING_TO_FLUID) || (L * aMaterialAmount) / (M * aStack.stackSize) <= 0) return;
+ RA.addFluidSmelterRecipe(GT_Utility.copyAmount(1, aStack), aByproduct==null?null:aByproduct.mMaterial.contains(SubTag.NO_SMELTING)||!aByproduct.mMaterial.contains(SubTag.METAL)?aByproduct.mMaterial.contains(SubTag.FLAMMABLE)?GT_OreDictUnificator.getDust(Materials.Ash, aByproduct.mAmount/2):aByproduct.mMaterial.contains(SubTag.UNBURNABLE)?GT_OreDictUnificator.getDustOrIngot(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount):null:GT_OreDictUnificator.getIngotOrDust(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount), aMaterial.mSmeltInto.getMolten((L * aMaterialAmount) / (M * aStack.stackSize)), 10000, (int)Math.max(1, (24 * aMaterialAmount) / M), Math.max(8, (int)Math.sqrt(2*aMaterial.mSmeltInto.mStandardMoltenFluid.getTemperature())));
+ }
+
+ /**
+ * @param aStack the stack to be recycled.
+ * @param aMaterial the Material.
+ * @param aMaterialAmount the amount of it in Material Units.
+ * @param aAllowAlloySmelter if it is allowed to be recycled inside the Alloy Smelter.
+ */
+ public static void registerReverseSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, boolean aAllowAlloySmelter) {
+ if (aStack == null || aMaterial == null || aMaterialAmount <= 0 || aMaterial.contains(SubTag.NO_SMELTING) || (aMaterialAmount > M && aMaterial.contains(SubTag.METAL))) return;
+ aMaterialAmount /= aStack.stackSize;
+ if (aAllowAlloySmelter)
+ GT_ModHandler.addSmeltingAndAlloySmeltingRecipe(GT_Utility.copyAmount(1, aStack), GT_OreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount));
+ else
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1, aStack), GT_OreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount));
+ }
+
+ public static void registerReverseArcSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03) {
+ registerReverseArcSmelting(aStack, new ItemData(aMaterial==null?null:new MaterialStack(aMaterial, aMaterialAmount), aByProduct01, aByProduct02, aByProduct03));
+ }
+
+ public static void registerReverseArcSmelting(ItemStack aStack, ItemData aData) {
+ if (aStack == null || aData == null) return;
+ aData = new ItemData(aData);
+
+ if (!aData.hasValidMaterialData()) return;
+
+ for (MaterialStack tMaterial : aData.getAllMaterialStacks()) {
+ if (tMaterial.mMaterial.contains(SubTag.UNBURNABLE)) {
+ tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto;
+ continue;
+ }
+ if (tMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) {
+ tMaterial.mMaterial = Materials.Ash;
+ tMaterial.mAmount /= 4;
+ continue;
+ }
+ if (tMaterial.mMaterial.contains(SubTag.FLAMMABLE)) {
+ tMaterial.mMaterial = Materials.Ash;
+ tMaterial.mAmount /= 2;
+ continue;
+ }
+ if (tMaterial.mMaterial.contains(SubTag.NO_SMELTING)) {
+ tMaterial.mAmount = 0;
+ continue;
+ }
+ if (tMaterial.mMaterial.contains(SubTag.METAL)) {
+ tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto;
+ continue;
+ }
+ tMaterial.mAmount = 0;
+ }
+
+ aData = new ItemData(aData);
+
+ if (aData.mByProducts.length > 3) for (MaterialStack tMaterial : aData.getAllMaterialStacks()) if (tMaterial.mMaterial == Materials.Ash) tMaterial.mAmount = 0;
+
+ aData = new ItemData(aData);
+
+ if (!aData.hasValidMaterialData()) return;
+
+ long tAmount = 0; for (MaterialStack tMaterial : aData.getAllMaterialStacks()) tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass();
+
+ RA.addArcFurnaceRecipe(aStack, new ItemStack[] {GT_OreDictUnificator.getIngotOrDust(aData.mMaterial), GT_OreDictUnificator.getIngotOrDust(aData.getByProduct(0)), GT_OreDictUnificator.getIngotOrDust(aData.getByProduct(1)), GT_OreDictUnificator.getIngotOrDust(aData.getByProduct(2))}, null, (int)Math.max(16, tAmount / M), 96);
+ }
+
+ public static void registerReverseMacerating(ItemStack aStack, Materials aMaterial, long aMaterialAmount, MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03, boolean aAllowHammer) {
+ registerReverseMacerating(aStack, new ItemData(aMaterial==null?null:new MaterialStack(aMaterial, aMaterialAmount), aByProduct01, aByProduct02, aByProduct03), aAllowHammer);
+ }
+
+ public static void registerReverseMacerating(ItemStack aStack, ItemData aData, boolean aAllowHammer) {
+ if (aStack == null || aData == null) return;
+ aData = new ItemData(aData);
+
+ if (!aData.hasValidMaterialData()) return;
+
+ for (MaterialStack tMaterial : aData.getAllMaterialStacks()) tMaterial.mMaterial = tMaterial.mMaterial.mMacerateInto;
+
+ aData = new ItemData(aData);
+
+ if (!aData.hasValidMaterialData()) return;
+
+ long tAmount = 0; for (MaterialStack tMaterial : aData.getAllMaterialStacks()) tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass();
+
+ RA.addPulveriserRecipe(aStack, new ItemStack[] {GT_OreDictUnificator.getDust(aData.mMaterial), GT_OreDictUnificator.getDust(aData.getByProduct(0)), GT_OreDictUnificator.getDust(aData.getByProduct(1)), GT_OreDictUnificator.getDust(aData.getByProduct(2))}, null, (int)Math.max(16, tAmount / M), 4);
+
+ if (aAllowHammer) for (MaterialStack tMaterial : aData.getAllMaterialStacks()) if (tMaterial.mMaterial.contains(SubTag.CRYSTAL) && !tMaterial.mMaterial.contains(SubTag.METAL)) {
+ if (RA.addForgeHammerRecipe(GT_Utility.copyAmount(1, aStack), GT_OreDictUnificator.getGem(aData.mMaterial), 200, 32)) break;
+ }
+ ItemStack tDust = GT_OreDictUnificator.getDust(aData.mMaterial);
+ if (tDust != null && GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1, aStack), tDust, GT_OreDictUnificator.getDust(aData.getByProduct(0)), 100, GT_OreDictUnificator.getDust(aData.getByProduct(1)), 100, true)) {
+ if (GregTech_API.sThaumcraftCompat != null) GregTech_API.sThaumcraftCompat.addCrucibleRecipe(IThaumcraftCompat.ADVANCEDENTROPICPROCESSING, aStack, tDust, Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, Math.max(1, (aData.mMaterial.mAmount * 2) / M))));
+ }
+ }
+
+ /**
+ * You give this Function a Material and it will scan almost everything for adding recycling Recipes
+ *
+ * @param aMat a Material, for example an Ingot or a Gem.
+ * @param aOutput the Dust you usually get from macerating aMat
+ * @param aRecipeReplacing allows to replace the Recipe with a Plate variant
+ */
+ public static synchronized void registerUsagesForMaterials(ItemStack aMat, String aPlate, boolean aRecipeReplacing) {
+ if (aMat == null) return;
+ aMat = GT_Utility.copy(aMat);
+ ItemStack tStack;
+ ItemData aItemData = GT_OreDictUnificator.getItemData(aMat);
+ if (aItemData == null || aItemData.mPrefix != OrePrefixes.ingot) aPlate = null;
+ if (aPlate != null && GT_OreDictUnificator.getFirstOre(aPlate, 1) == null) aPlate = null;
+
+ sMt1.func_150996_a(aMat.getItem());
+ sMt1.stackSize = 1;
+ Items.feather.setDamage(sMt1, Items.feather.getDamage(aMat));
+
+ sMt2.func_150996_a(new ItemStack(Blocks.dirt).getItem());
+ sMt2.stackSize = 1;
+ Items.feather.setDamage(sMt2, 0);
+
+ for (ItemStack[] tRecipe : sShapes1) {
+ int tAmount1 = 0;
+ for (ItemStack tMat : tRecipe) {
+ if (tMat == sMt1) tAmount1++;
+ }
+ if (aItemData != null && aItemData.hasValidPrefixMaterialData()) for (ItemStack tCrafted : GT_ModHandler.getRecipeOutputs(tRecipe)) {
+ GT_OreDictUnificator.addItemData(tCrafted, new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1));
+ }
+ }
+
+ for (Materials tMaterial : sRodMaterialList) {
+ ItemStack tMt2 = GT_OreDictUnificator.get(OrePrefixes.stick, tMaterial, 1);
+ if (tMt2 != null) {
+ sMt2.func_150996_a(tMt2.getItem());
+ sMt2.stackSize = 1;
+ Items.feather.setDamage(sMt2, Items.feather.getDamage(tMt2));
+
+ for (int i = 0; i < sShapes1.length; i++) {
+ ItemStack[] tRecipe = sShapes1[i];
+
+ int tAmount1 = 0, tAmount2 = 0;
+ for (ItemStack tMat : tRecipe) {
+ if (tMat == sMt1) tAmount1++;
+ if (tMat == sMt2) tAmount2++;
+ }
+ for (ItemStack tCrafted : GT_ModHandler.getVanillyToolRecipeOutputs(tRecipe)) {
+ if (aItemData != null && aItemData.hasValidPrefixMaterialData()) GT_OreDictUnificator.addItemData(tCrafted, new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1, new MaterialStack(tMaterial, OrePrefixes.stick.mMaterialAmount * tAmount2)));
+
+ if (aRecipeReplacing && aPlate != null && sShapesA[i] != null && sShapesA[i].length > 1) {
+ assert aItemData != null;
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, aItemData.mMaterial.mMaterial+"."+sShapesA[i][0], true)) {
+ if (null != (tStack = GT_ModHandler.removeRecipe(tRecipe))) {
+ switch (sShapesA[i].length) {
+ case 2: GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[] {sShapesA[i][1] , s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData}); break;
+ case 3: GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[] {sShapesA[i][1], sShapesA[i][2] , s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData}); break;
+ default: GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[] {sShapesA[i][1], sShapesA[i][2], sShapesA[i][3] , s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData}); break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0);
+ private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R";
+
+ private static final ItemStack[][]
+ sShapes1 = new ItemStack[][] {
+ {sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null},
+ {sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1},
+ {null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1},
+ {sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null},
+ {sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1},
+ {sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1},
+ {null, null, null, sMt1, null, sMt1, sMt1, null, sMt1},
+ {null, sMt1, null, null, sMt1, null, null, sMt2, null},
+ {sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null},
+ {null, sMt1, null, null, sMt2, null, null, sMt2, null},
+ {sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null},
+ {null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null},
+ {sMt1, sMt1, null, null, sMt2, null, null, sMt2, null},
+ {null, sMt1, sMt1, null, sMt2, null, null, sMt2, null},
+ {null, sMt1, null, sMt1, null, null, null, sMt1, sMt2},
+ {null, sMt1, null, null, null, sMt1, sMt2, sMt1, null},
+ {null, sMt1, null, sMt1, null, sMt1, null, null, sMt2},
+ {null, sMt1, null, sMt1, null, sMt1, sMt2, null, null},
+ {null, sMt2, null, null, sMt1, null, null, sMt1, null},
+ {null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1},
+ {null, sMt2, null, null, sMt2, null, null, sMt1, null},
+ {null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null},
+ {null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1},
+ {null, sMt2, null, null, sMt2, null, sMt1, sMt1, null},
+ {sMt1, null, null, null, sMt2, null, null, null, sMt2},
+ {null, null, sMt1, null, sMt2, null, sMt2, null, null},
+ {sMt1, null, null, null, sMt2, null, null, null, null},
+ {null, null, sMt1, null, sMt2, null, null, null, null},
+ {sMt1, sMt2, null, null, null, null, null, null, null},
+ {sMt2, sMt1, null, null, null, null, null, null, null},
+ {sMt1, null, null, sMt2, null, null, null, null, null},
+ {sMt2, null, null, sMt1, null, null, null, null, null},
+ {sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null},
+ {sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null},
+ {null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1},
+ {null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1},
+ {sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null},
+ {sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null},
+ {null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1},
+ {null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1},
+ {sMt1, null, null, null, sMt1, null, null, null, null},
+ {null, sMt1, null, sMt1, null, null, null, null, null},
+ {sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null},
+ {null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2}
+ };
+
+ private static final String[][] sShapesA = new String[][] {
+ null,
+ null,
+ null,
+ {"Helmet" , s_P+s_P+s_P, s_P+s_H+s_P},
+ {"ChestPlate" , s_P+s_H+s_P, s_P+s_P+s_P, s_P+s_P+s_P},
+ {"Pants" , s_P+s_P+s_P, s_P+s_H+s_P, s_P+" "+s_P},
+ {"Boots" , s_P+" "+s_P, s_P+s_H+s_P},
+ {"Sword" , " "+s_P+" ", s_F+s_P+s_H, " "+s_R+" "},
+ {"Pickaxe" , s_P+s_I+s_I, s_F+s_R+s_H, " "+s_R+" "},
+ {"Shovel" , s_F+s_P+s_H, " "+s_R+" ", " "+s_R+" "},
+ {"Axe" , s_P+s_I+s_H, s_P+s_R+" ", s_F+s_R+" "},
+ {"Axe" , s_P+s_I+s_H, s_P+s_R+" ", s_F+s_R+" "},
+ {"Hoe" , s_P+s_I+s_H, s_F+s_R+" ", " "+s_R+" "},
+ {"Hoe" , s_P+s_I+s_H, s_F+s_R+" ", " "+s_R+" "},
+ {"Sickle" , " "+s_P+" ", s_P+s_F+" ", s_H+s_P+s_R},
+ {"Sickle" , " "+s_P+" ", s_P+s_F+" ", s_H+s_P+s_R},
+ {"Sickle" , " "+s_P+" ", s_P+s_F+" ", s_H+s_P+s_R},
+ {"Sickle" , " "+s_P+" ", s_P+s_F+" ", s_H+s_P+s_R},
+ {"Sword" , " "+s_R+" ", s_F+s_P+s_H, " "+s_P+" "},
+ {"Pickaxe" , " "+s_R+" ", s_F+s_R+s_H, s_P+s_I+s_I},
+ {"Shovel" , " "+s_R+" ", " "+s_R+" ", s_F+s_P+s_H},
+ {"Axe" , s_F+s_R+" ", s_P+s_R+" ", s_P+s_I+s_H},
+ {"Axe" , s_F+s_R+" ", s_P+s_R+" ", s_P+s_I+s_H},
+ {"Hoe" , " "+s_R+" ", s_F+s_R+" ", s_P+s_I+s_H},
+ {"Hoe" , " "+s_R+" ", s_F+s_R+" ", s_P+s_I+s_H},
+ {"Spear" , s_P+s_H+" ", s_F+s_R+" ", " "+" "+s_R},
+ {"Spear" , s_P+s_H+" ", s_F+s_R+" ", " "+" "+s_R},
+ {"Knive" , s_H+s_P, s_R+s_F},
+ {"Knive" , s_F+s_H, s_P+s_R},
+ {"Knive" , s_F+s_H, s_P+s_R},
+ {"Knive" , s_P+s_F, s_R+s_H},
+ {"Knive" , s_P+s_F, s_R+s_H},
+ null,
+ null,
+ null,
+ null,
+ {"WarAxe" , s_P+s_P+s_P, s_P+s_R+s_P, s_F+s_R+s_H},
+ null,
+ null,
+ null,
+ {"Shears" , s_H+s_P, s_P+s_F},
+ {"Shears" , s_H+s_P, s_P+s_F},
+ {"Scythe" , s_I+s_P+s_H, s_R+s_F+s_P, s_R+" "+" "},
+ {"Scythe" , s_H+s_P+s_I, s_P+s_F+s_R, " "+" "+s_R}
+ };
+}
diff --git a/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java b/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java
new file mode 100644
index 0000000000..dcf46598e5
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java
@@ -0,0 +1,95 @@
+package gregtech.api.util;
+
+import gregtech.api.interfaces.internal.IGT_CraftingRecipe;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.inventory.InventoryCrafting;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.oredict.ShapedOreRecipe;
+
+public class GT_Shaped_Recipe extends ShapedOreRecipe implements IGT_CraftingRecipe {
+ public final boolean mDismantleable, mRemovableByGT, mKeepingNBT;
+ private final Enchantment[] mEnchantmentsAdded;
+ private final int[] mEnchantmentLevelsAdded;
+
+ public GT_Shaped_Recipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) {
+ super(aResult, aRecipe);
+ mEnchantmentsAdded = aEnchantmentsAdded;
+ mEnchantmentLevelsAdded = aEnchantmentLevelsAdded;
+ mRemovableByGT = aRemovableByGT;
+ mKeepingNBT = aKeepingNBT;
+ mDismantleable = aDismantleAble;
+ }
+
+ @Override
+ public boolean matches(InventoryCrafting aGrid, World aWorld) {
+ if (mKeepingNBT) {
+ ItemStack tStack = null;
+ for (int i = 0; i < aGrid.getSizeInventory(); i++) {
+ if (aGrid.getStackInSlot(i) != null) {
+ if (tStack != null) {
+ if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i).hasTagCompound()) || (tStack.hasTagCompound() && !tStack.getTagCompound().equals(aGrid.getStackInSlot(i).getTagCompound()))) return false;
+ }
+ tStack = aGrid.getStackInSlot(i);
+ }
+ }
+ }
+ return super.matches(aGrid, aWorld);
+ }
+
+ @Override
+ public ItemStack getCraftingResult(InventoryCrafting aGrid) {
+ ItemStack rStack = super.getCraftingResult(aGrid);
+ if (rStack != null) {
+ // Update the Stack
+ GT_Utility.updateItemStack(rStack);
+
+ // Keeping NBT
+ if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) {
+ if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i).hasTagCompound()) {
+ rStack.setTagCompound((NBTTagCompound)aGrid.getStackInSlot(i).getTagCompound().copy());
+ break;
+ }
+ }
+
+ // Charge Values
+ if (GT_ModHandler.isElectricItem(rStack)) {
+ GT_ModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true);
+ int tCharge = 0;
+ for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GT_ModHandler.dischargeElectricItem(aGrid.getStackInSlot(i), Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true);
+ if (tCharge > 0) GT_ModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false);
+ }
+
+ // Saving Ingredients inside the Item.
+ if (mDismantleable) {
+ NBTTagCompound rNBT = rStack.getTagCompound(), tNBT = new NBTTagCompound();
+ if (rNBT == null) rNBT = new NBTTagCompound();
+ for (int i = 0; i < 9; i++) {
+ ItemStack tStack = aGrid.getStackInSlot(i);
+ if (tStack != null && GT_Utility.getContainerItem(tStack, true) == null && !(tStack.getItem() instanceof GT_MetaGenerated_Tool)) {
+ tStack = GT_Utility.copyAmount(1, tStack);
+ GT_ModHandler.dischargeElectricItem(tStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true);
+ tNBT.setTag("Ingredient."+i, tStack.writeToNBT(new NBTTagCompound()));
+ }
+ }
+ rNBT.setTag("GT.CraftingComponents", tNBT);
+ rStack.setTagCompound(rNBT);
+ }
+
+ // Add Enchantments
+ for (int i = 0; i < mEnchantmentsAdded.length; i++) GT_Utility.ItemNBT.addEnchantment(rStack, mEnchantmentsAdded[i], EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) + mEnchantmentLevelsAdded[i]);
+
+ // Update the Stack again
+ GT_Utility.updateItemStack(rStack);
+ }
+ return rStack;
+ }
+
+ @Override
+ public boolean isRemovable() {
+ return mRemovableByGT;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java b/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java
new file mode 100644
index 0000000000..1fcca0809b
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java
@@ -0,0 +1,95 @@
+package gregtech.api.util;
+
+import gregtech.api.interfaces.internal.IGT_CraftingRecipe;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.inventory.InventoryCrafting;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.oredict.ShapelessOreRecipe;
+
+public class GT_Shapeless_Recipe extends ShapelessOreRecipe implements IGT_CraftingRecipe {
+ public final boolean mDismantleable, mRemovableByGT, mKeepingNBT;
+ private final Enchantment[] mEnchantmentsAdded;
+ private final int[] mEnchantmentLevelsAdded;
+
+ public GT_Shapeless_Recipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) {
+ super(aResult, aRecipe);
+ mEnchantmentsAdded = aEnchantmentsAdded;
+ mEnchantmentLevelsAdded = aEnchantmentLevelsAdded;
+ mRemovableByGT = aRemovableByGT;
+ mKeepingNBT = aKeepingNBT;
+ mDismantleable = aDismantleAble;
+ }
+
+ @Override
+ public boolean matches(InventoryCrafting aGrid, World aWorld) {
+ if (mKeepingNBT) {
+ ItemStack tStack = null;
+ for (int i = 0; i < aGrid.getSizeInventory(); i++) {
+ if (aGrid.getStackInSlot(i) != null) {
+ if (tStack != null) {
+ if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i).hasTagCompound()) || (tStack.hasTagCompound() && !tStack.getTagCompound().equals(aGrid.getStackInSlot(i).getTagCompound()))) return false;
+ }
+ tStack = aGrid.getStackInSlot(i);
+ }
+ }
+ }
+ return super.matches(aGrid, aWorld);
+ }
+
+ @Override
+ public ItemStack getCraftingResult(InventoryCrafting aGrid) {
+ ItemStack rStack = super.getCraftingResult(aGrid);
+ if (rStack != null) {
+ // Update the Stack
+ GT_Utility.updateItemStack(rStack);
+
+ // Keeping NBT
+ if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) {
+ if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i).hasTagCompound()) {
+ rStack.setTagCompound((NBTTagCompound)aGrid.getStackInSlot(i).getTagCompound().copy());
+ break;
+ }
+ }
+
+ // Charge Values
+ if (GT_ModHandler.isElectricItem(rStack)) {
+ GT_ModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true);
+ int tCharge = 0;
+ for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GT_ModHandler.dischargeElectricItem(aGrid.getStackInSlot(i), Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true);
+ if (tCharge > 0) GT_ModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false);
+ }
+
+ // Saving Ingredients inside the Item.
+ if (mDismantleable) {
+ NBTTagCompound rNBT = rStack.getTagCompound(), tNBT = new NBTTagCompound();
+ if (rNBT == null) rNBT = new NBTTagCompound();
+ for (int i = 0; i < 9; i++) {
+ ItemStack tStack = aGrid.getStackInSlot(i);
+ if (tStack != null && GT_Utility.getContainerItem(tStack, true) == null && !(tStack.getItem() instanceof GT_MetaGenerated_Tool)) {
+ tStack = GT_Utility.copyAmount(1, tStack);
+ GT_ModHandler.dischargeElectricItem(tStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true);
+ tNBT.setTag("Ingredient."+i, tStack.writeToNBT(new NBTTagCompound()));
+ }
+ }
+ rNBT.setTag("GT.CraftingComponents", tNBT);
+ rStack.setTagCompound(rNBT);
+ }
+
+ // Add Enchantments
+ for (int i = 0; i < mEnchantmentsAdded.length; i++) GT_Utility.ItemNBT.addEnchantment(rStack, mEnchantmentsAdded[i], EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) + mEnchantmentLevelsAdded[i]);
+
+ // Update the Stack again
+ GT_Utility.updateItemStack(rStack);
+ }
+ return rStack;
+ }
+
+ @Override
+ public boolean isRemovable() {
+ return mRemovableByGT;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java b/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java
new file mode 100644
index 0000000000..d4d4c65d6c
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java
@@ -0,0 +1,46 @@
+package gregtech.api.util;
+
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MonsterRepellent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cpw.mods.fml.common.eventhandler.Event;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn;
+
+public class GT_SpawnEventHandler {
+
+ public static volatile List <int[]> mobReps = new ArrayList();
+
+ public GT_SpawnEventHandler(){
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @SubscribeEvent
+ public void denyMobSpawn(CheckSpawn event)
+ {
+ if (event.getResult() == Event.Result.ALLOW) {return;}
+ if (event.entityLiving.isCreatureType(EnumCreatureType.monster, false))
+ {
+ for(int[] rep : mobReps){
+ if(rep[3] == event.entity.worldObj.provider.dimensionId){
+ TileEntity tTile = event.entity.worldObj.getTileEntity(rep[0], rep[1], rep[2]);
+ if(tTile instanceof BaseMetaTileEntity && ((BaseMetaTileEntity)tTile).getMetaTileEntity() instanceof GT_MetaTileEntity_MonsterRepellent){
+ int r = ((GT_MetaTileEntity_MonsterRepellent)((BaseMetaTileEntity)tTile).getMetaTileEntity()).mRange;
+ double dx = rep[0] + 0.5F - event.entity.posX;
+ double dy = rep[1] + 0.5F - event.entity.posY;
+ double dz = rep[2] + 0.5F - event.entity.posZ;
+ if ((dx * dx + dz * dz + dy * dy) <= Math.pow(r, 2)) {
+ event.setResult(Event.Result.DENY);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
new file mode 100644
index 0000000000..0ae3da3909
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -0,0 +1,1791 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.*;
+import gregtech.api.GregTech_API;
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.enchants.Enchantment_Radioactivity;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.SubTag;
+import gregtech.api.events.BlockScanningEvent;
+import gregtech.api.interfaces.IDebugableBlock;
+import gregtech.api.interfaces.IProjectileItem;
+import gregtech.api.interfaces.tileentity.*;
+import gregtech.api.items.GT_EnergyArmor_Item;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.net.GT_Packet_Sound;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
+import gregtech.api.threads.GT_Runnable_Sound;
+import ic2.api.recipe.IRecipeInput;
+import ic2.api.recipe.RecipeInputItemStack;
+import ic2.api.recipe.RecipeInputOreDict;
+import ic2.api.recipe.RecipeOutput;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.*;
+import java.util.Map.Entry;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.*;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.*;
+import net.minecraft.nbt.NBTBase.NBTPrimitive;
+import net.minecraft.network.play.server.S07PacketRespawn;
+import net.minecraft.network.play.server.S1DPacketEntityEffect;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.tileentity.TileEntityChest;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.*;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+import cpw.mods.fml.common.FMLCommonHandler;
+import cofh.api.transport.*;
+
+/**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+ *
+ * Just a few Utility Functions I use.
+ */
+public class GT_Utility {
+ public static volatile int VERSION = 508;
+
+ public static class ItemNBT {
+ public static void setNBT(ItemStack aStack, NBTTagCompound aNBT) {
+ if (aNBT == null) {aStack.setTagCompound(null); return;}
+ ArrayList<String> tTagsToRemove = new ArrayList<String>();
+ for (Object tKey : aNBT.func_150296_c()) {
+ NBTBase tValue = aNBT.getTag((String)tKey);
+ if (tValue == null || (tValue instanceof NBTPrimitive && ((NBTPrimitive)tValue).func_150291_c() == 0) || (tValue instanceof NBTTagString && isStringInvalid(((NBTTagString)tValue).func_150285_a_()))) tTagsToRemove.add((String)tKey);
+ }
+ for (Object tKey : tTagsToRemove) aNBT.removeTag((String)tKey);
+ aStack.setTagCompound(aNBT.hasNoTags()?null:aNBT);
+ }
+
+ public static NBTTagCompound getNBT(ItemStack aStack) {
+ NBTTagCompound rNBT = aStack.getTagCompound();
+ return rNBT==null?new NBTTagCompound():rNBT;
+ }
+
+ public static void setPunchCardData(ItemStack aStack, String aPunchCardData) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ tNBT.setString("GT.PunchCardData", aPunchCardData);
+ setNBT(aStack, tNBT);
+ }
+ public static String getPunchCardData(ItemStack aStack) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ return tNBT.getString("GT.PunchCardData");
+ }
+
+ public static void setLighterFuel(ItemStack aStack, long aFuel) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ tNBT.setLong("GT.LighterFuel", aFuel);
+ setNBT(aStack, tNBT);
+ }
+ public static long getLighterFuel(ItemStack aStack) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ return tNBT.getLong("GT.LighterFuel");
+ }
+
+ public static void setMapID(ItemStack aStack, short aMapID) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ tNBT.setShort("map_id", aMapID);
+ setNBT(aStack, tNBT);
+ }
+ public static short getMapID(ItemStack aStack) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ if (!tNBT.hasKey("map_id")) return -1;
+ return tNBT.getShort("map_id");
+ }
+
+ public static void setBookTitle(ItemStack aStack, String aTitle) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ tNBT.setString("title", aTitle);
+ setNBT(aStack, tNBT);
+ }
+ public static String getBookTitle(ItemStack aStack) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ return tNBT.getString("title");
+ }
+
+ public static void setBookAuthor(ItemStack aStack, String aAuthor) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ tNBT.setString("author", aAuthor);
+ setNBT(aStack, tNBT);
+ }
+ public static String getBookAuthor(ItemStack aStack) {
+ NBTTagCompound tNBT = getNBT(aStack);
+ return tNBT.getString("author");
+ }
+
+ public static void addEnchantment(ItemStack aStack, Enchantment aEnchantment, int aLevel) {
+ NBTTagCompound tNBT = getNBT(aStack), tEnchantmentTag;
+ if (!tNBT.hasKey("ench", 9)) tNBT.setTag("ench", new NBTTagList());
+ NBTTagList tList = tNBT.getTagList("ench", 10);
+
+ boolean temp = T;
+
+ for (int i = 0; i < tList.tagCount(); i++) {
+ tEnchantmentTag = tList.getCompoundTagAt(i);
+ if (tEnchantmentTag.getShort("id") == aEnchantment.effectId) {
+ tEnchantmentTag.setShort("id", (short)aEnchantment.effectId);
+ tEnchantmentTag.setShort("lvl", (byte)aLevel);
+ temp = F;
+ break;
+ }
+ }
+
+ if (temp) {
+ tEnchantmentTag = new NBTTagCompound();
+ tEnchantmentTag.setShort("id", (short)aEnchantment.effectId);
+ tEnchantmentTag.setShort("lvl", (byte)aLevel);
+ tList.appendTag(tEnchantmentTag);
+ }
+ aStack.setTagCompound(tNBT);
+ }
+ }
+
+ /**
+ * THIS IS BULLSHIT!!! WHY DO I HAVE TO DO THIS SHIT JUST TO HAVE ENCHANTS PROPERLY!?!
+ */
+ public static class GT_EnchantmentHelper {
+ private static final BullshitIteratorA mBullshitIteratorA = new BullshitIteratorA();
+ private static final BullshitIteratorB mBullshitIteratorB = new BullshitIteratorB();
+
+ private static void applyBullshit(IBullshit aBullshitModifier, ItemStack aStack) {
+ if (aStack != null) {
+ NBTTagList nbttaglist = aStack.getEnchantmentTagList();
+ if (nbttaglist != null) {
+ for (int i = 0; i < nbttaglist.tagCount(); ++i) {
+ try {
+ short short1 = nbttaglist.getCompoundTagAt(i).getShort("id");
+ short short2 = nbttaglist.getCompoundTagAt(i).getShort("lvl");
+ if (Enchantment.enchantmentsList[short1] != null) aBullshitModifier.calculateModifier(Enchantment.enchantmentsList[short1], short2);
+ } catch(Throwable e) {
+ //
+ }
+ }
+ }
+ }
+ }
+
+ private static void applyArrayOfBullshit(IBullshit aBullshitModifier, ItemStack[] aStacks) {
+ ItemStack[] aitemstack1 = aStacks;
+ int i = aStacks.length;
+ for (int j = 0; j < i; ++j) {
+ ItemStack itemstack = aitemstack1[j];
+ applyBullshit(aBullshitModifier, itemstack);
+ }
+ }
+
+ public static void applyBullshitA(EntityLivingBase aPlayer, Entity aEntity, ItemStack aStack) {
+ mBullshitIteratorA.mPlayer = aPlayer;
+ mBullshitIteratorA.mEntity = aEntity;
+ if (aPlayer != null) applyArrayOfBullshit(mBullshitIteratorA, aPlayer.getLastActiveItems());
+ if (aStack != null) applyBullshit(mBullshitIteratorA, aStack);
+ }
+
+ public static void applyBullshitB(EntityLivingBase aPlayer, Entity aEntity, ItemStack aStack) {
+ mBullshitIteratorB.mPlayer = aPlayer;
+ mBullshitIteratorB.mEntity = aEntity;
+ if (aPlayer != null) applyArrayOfBullshit(mBullshitIteratorB, aPlayer.getLastActiveItems());
+ if (aStack != null) applyBullshit(mBullshitIteratorB, aStack);
+ }
+
+ static final class BullshitIteratorA implements IBullshit {
+ public EntityLivingBase mPlayer;
+ public Entity mEntity;
+ BullshitIteratorA() {}
+
+ @Override
+ public void calculateModifier(Enchantment aEnchantment, int aLevel) {
+ aEnchantment.func_151367_b(mPlayer, mEntity, aLevel);
+ }
+ }
+
+ static final class BullshitIteratorB implements IBullshit {
+ public EntityLivingBase mPlayer;
+ public Entity mEntity;
+ BullshitIteratorB() {}
+
+ @Override
+ public void calculateModifier(Enchantment aEnchantment, int aLevel) {
+ aEnchantment.func_151368_a(mPlayer, mEntity, aLevel);
+ }
+ }
+
+ interface IBullshit {
+ void calculateModifier(Enchantment aEnchantment, int aLevel);
+ }
+ }
+
+ public static Field getPublicField(Object aObject, String aField) {
+ Field rField = null;
+ try {
+ rField = aObject.getClass().getDeclaredField(aField);
+ } catch (Throwable e) {/*Do nothing*/}
+ return rField;
+ }
+
+ public static Field getField(Object aObject, String aField) {
+ Field rField = null;
+ try {
+ rField = aObject.getClass().getDeclaredField(aField);
+ rField.setAccessible(T);
+ } catch (Throwable e) {/*Do nothing*/}
+ return rField;
+ }
+
+ public static Field getField(Class aObject, String aField) {
+ Field rField = null;
+ try {
+ rField = aObject.getDeclaredField(aField);
+ rField.setAccessible(T);
+ } catch (Throwable e) {/*Do nothing*/}
+ return rField;
+ }
+
+ public static Method getMethod(Class aObject, String aMethod, Class<?>... aParameterTypes) {
+ Method rMethod = null;
+ try {
+ rMethod = aObject.getMethod(aMethod, aParameterTypes);
+ rMethod.setAccessible(T);
+ } catch (Throwable e) {/*Do nothing*/}
+ return rMethod;
+ }
+
+ public static Method getMethod(Object aObject, String aMethod, Class<?>... aParameterTypes) {
+ Method rMethod = null;
+ try {
+ rMethod = aObject.getClass().getMethod(aMethod, aParameterTypes);
+ rMethod.setAccessible(T);
+ } catch (Throwable e) {/*Do nothing*/}
+ return rMethod;
+ }
+
+ public static Field getField(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) {
+ try {
+ Field tField = (aObject instanceof Class)?((Class)aObject).getDeclaredField(aField):(aObject instanceof String)?Class.forName((String)aObject).getDeclaredField(aField):aObject.getClass().getDeclaredField(aField);
+ if (aPrivate) tField.setAccessible(T);
+ return tField;
+ } catch (Throwable e) {
+ if (aLogErrors) e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ public static Object getFieldContent(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) {
+ try {
+ Field tField = (aObject instanceof Class)?((Class)aObject).getDeclaredField(aField):(aObject instanceof String)?Class.forName((String)aObject).getDeclaredField(aField):aObject.getClass().getDeclaredField(aField);
+ if (aPrivate) tField.setAccessible(T);
+ return tField.get(aObject instanceof Class || aObject instanceof String ? null : aObject);
+ } catch (Throwable e) {
+ if (aLogErrors) e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ public static Object callPublicMethod(Object aObject, String aMethod, Object... aParameters) {
+ return callMethod(aObject, aMethod, F, F, T, aParameters);
+ }
+
+ public static Object callPrivateMethod(Object aObject, String aMethod, Object... aParameters) {
+ return callMethod(aObject, aMethod, T, F, T, aParameters);
+ }
+
+ public static Object callMethod(Object aObject, String aMethod, boolean aPrivate, boolean aUseUpperCasedDataTypes, boolean aLogErrors, Object... aParameters) {
+ try {
+ Class<?>[] tParameterTypes = new Class<?>[aParameters.length];
+ for (byte i = 0; i < aParameters.length; i++) {
+ if (aParameters[i] instanceof Class) {
+ tParameterTypes[i] = (Class)aParameters[i];
+ aParameters[i] = null;
+ } else {
+ tParameterTypes[i] = aParameters[i].getClass();
+ }
+ if (!aUseUpperCasedDataTypes) {
+ if (tParameterTypes[i] == Boolean.class ) tParameterTypes[i] = boolean.class; else
+ if (tParameterTypes[i] == Byte.class ) tParameterTypes[i] = byte.class; else
+ if (tParameterTypes[i] == Short.class ) tParameterTypes[i] = short.class; else
+ if (tParameterTypes[i] == Integer.class ) tParameterTypes[i] = int.class; else
+ if (tParameterTypes[i] == Long.class ) tParameterTypes[i] = long.class; else
+ if (tParameterTypes[i] == Float.class ) tParameterTypes[i] = float.class; else
+ if (tParameterTypes[i] == Double.class ) tParameterTypes[i] = double.class;
+ }
+ }
+
+ Method tMethod = (aObject instanceof Class)?((Class)aObject).getMethod(aMethod, tParameterTypes):aObject.getClass().getMethod(aMethod, tParameterTypes);
+ if (aPrivate) tMethod.setAccessible(T);
+ return tMethod.invoke(aObject, aParameters);
+ } catch (Throwable e) {
+ if (aLogErrors) e.printStackTrace(GT_Log.err);
+ }
+ return null;
+ }
+
+ public static Object callConstructor(String aClass, int aConstructorIndex, Object aReplacementObject, boolean aLogErrors, Object... aParameters) {
+ if (aConstructorIndex < 0) {
+ try {
+ for (Constructor tConstructor : Class.forName(aClass).getConstructors()) {
+ try {
+ return tConstructor.newInstance(aParameters);
+ } catch (Throwable e) {/*Do nothing*/}
+ }
+ } catch (Throwable e) {
+ if (aLogErrors) e.printStackTrace(GT_Log.err);
+ }
+ } else {
+ try {
+ return Class.forName(aClass).getConstructors()[aConstructorIndex].newInstance(aParameters);
+ } catch (Throwable e) {
+ if (aLogErrors) e.printStackTrace(GT_Log.err);
+ }
+ }
+ return aReplacementObject;
+ }
+
+ public static String capitalizeString(String aString) {
+ if (aString != null && aString.length() > 0) return aString.substring(0, 1).toUpperCase() + aString.substring(1);
+ return E;
+ }
+
+ public static boolean getPotion(EntityLivingBase aPlayer, int aPotionIndex) {
+ try {
+ Field tPotionHashmap = null;
+
+ Field[] var3 = EntityLiving.class.getDeclaredFields();
+ int var4 = var3.length;
+
+ for (int var5 = 0; var5 < var4; ++var5) {
+ Field var6 = var3[var5];
+ if (var6.getType() == HashMap.class) {
+ tPotionHashmap = var6;
+ tPotionHashmap.setAccessible(T);
+ break;
+ }
+ }
+
+ if (tPotionHashmap != null) return ((HashMap)tPotionHashmap.get(aPlayer)).get(Integer.valueOf(aPotionIndex)) != null;
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return F;
+ }
+
+ public static String getClassName(Object aObject) {
+ if (aObject == null) return "null";
+ return aObject.getClass().getName().substring(aObject.getClass().getName().lastIndexOf(".")+1);
+ }
+
+ public static void removePotion(EntityLivingBase aPlayer, int aPotionIndex) {
+ try {
+ Field tPotionHashmap = null;
+
+ Field[] var3 = EntityLiving.class.getDeclaredFields();
+ int var4 = var3.length;
+
+ for (int var5 = 0; var5 < var4; ++var5) {
+ Field var6 = var3[var5];
+ if (var6.getType() == HashMap.class) {
+ tPotionHashmap = var6;
+ tPotionHashmap.setAccessible(T);
+ break;
+ }
+ }
+
+ if (tPotionHashmap != null) ((HashMap)tPotionHashmap.get(aPlayer)).remove(Integer.valueOf(aPotionIndex));
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ public static boolean getFullInvisibility(EntityPlayer aPlayer) {
+ try {
+ if (aPlayer.isInvisible()) {
+ for (int i = 0; i < 4; i++) {
+ if (aPlayer.inventory.armorInventory[i] != null) {
+ if (aPlayer.inventory.armorInventory[i].getItem() instanceof GT_EnergyArmor_Item) {
+ if ((((GT_EnergyArmor_Item)aPlayer.inventory.armorInventory[i].getItem()).mSpecials & 512) != 0) {
+ if (GT_ModHandler.canUseElectricItem(aPlayer.inventory.armorInventory[i], 10000)) {
+ return T;
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ return F;
+ }
+
+ public static ItemStack suckOneItemStackAt(World aWorld, double aX, double aY, double aZ, double aL, double aH, double aW) {
+ for (EntityItem tItem : (ArrayList<EntityItem>)aWorld.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX+aL, aY+aH, aZ+aW))) {
+ if (!tItem.isDead) {
+ aWorld.removeEntity(tItem);
+ tItem.setDead();
+ return tItem.getEntityItem();
+ }
+ }
+ return null;
+ }
+
+ public static byte getOppositeSide(int aSide) {
+ return (byte)ForgeDirection.getOrientation(aSide).getOpposite().ordinal();
+ }
+
+ public static byte getTier(long l) {
+ byte i = -1;
+ while (++i < V.length) if (l <= V[i]) return i;
+ return i;
+ }
+
+ public static void sendChatToPlayer(EntityPlayer aPlayer, String aChatMessage) {
+ if (aPlayer != null && aPlayer instanceof EntityPlayerMP && aChatMessage != null) {
+ aPlayer.addChatComponentMessage(new ChatComponentText(aChatMessage));
+ }
+ }
+
+ public static boolean TE_CHECK = F, BC_CHECK = F, CHECK_ALL = T;
+
+ public static void checkAvailabilities() {
+ if (CHECK_ALL) {
+ try {
+ Class tClass = IItemDuct.class;
+ tClass.getCanonicalName();
+ TE_CHECK = T;
+ } catch(Throwable e) {/**/}
+ try {
+ Class tClass = buildcraft.api.transport.IPipeTile.class;
+ tClass.getCanonicalName();
+ BC_CHECK = T;
+ } catch(Throwable e) {/**/}
+ CHECK_ALL = F;
+ }
+ }
+
+ public static boolean isConnectableNonInventoryPipe(Object aTileEntity, int aSide) {
+ if (aTileEntity == null) return F;
+ checkAvailabilities();
+ if (TE_CHECK) if (aTileEntity instanceof IItemDuct) return T;
+ if (BC_CHECK) if (aTileEntity instanceof buildcraft.api.transport.IPipeTile) return ((buildcraft.api.transport.IPipeTile)aTileEntity).isPipeConnected(ForgeDirection.getOrientation(aSide));
+ return F;
+ }
+
+ /**
+ * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed.
+ * @return the Amount of moved Items
+ */
+ public static byte moveStackIntoPipe(IInventory aTileEntity1, Object aTileEntity2, int[] aGrabSlots, int aGrabFrom, int aPutTo, List<ItemStack> aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) {
+ if (aTileEntity1 == null || aMaxTargetStackSize <= 0 || aMinTargetStackSize <= 0 || aMinTargetStackSize > aMaxTargetStackSize || aMaxMoveAtOnce <= 0 || aMinMoveAtOnce > aMaxMoveAtOnce) return 0;
+ if (aTileEntity2 != null) {
+ checkAvailabilities();
+ if (TE_CHECK && aTileEntity2 instanceof IItemDuct) {
+ for (int i = 0; i < aGrabSlots.length; i++) {
+ if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(aGrabSlots[i]), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot(aTileEntity1, aGrabSlots[i], (byte)aGrabFrom, aTileEntity1.getStackInSlot(aGrabSlots[i]))) {
+ if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) <= aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize) {
+ ItemStack tStack = copyAmount(Math.min(aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize, Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), aTileEntity1.getStackInSlot(aGrabSlots[i]));
+ ItemStack rStack = ((IItemDuct)aTileEntity2).insertItem(ForgeDirection.getOrientation(aPutTo), copy(tStack));
+ byte tMovedItemCount = (byte)(tStack.stackSize - (rStack == null ? 0 : rStack.stackSize));
+ if (tMovedItemCount >= 1/*Math.max(aMinMoveAtOnce, aMinTargetStackSize)*/) {
+ //((cofh.api.transport.IItemConduit)aTileEntity2).insertItem(ForgeDirection.getOrientation(aPutTo), copyAmount(tMovedItemCount, tStack), F);
+ aTileEntity1.decrStackSize(aGrabSlots[i], tMovedItemCount);
+ aTileEntity1.markDirty();
+ return tMovedItemCount;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+ }
+ if (BC_CHECK && aTileEntity2 instanceof buildcraft.api.transport.IPipeTile) {
+ for (int i = 0; i < aGrabSlots.length; i++) {
+ if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(aGrabSlots[i]), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot(aTileEntity1, aGrabSlots[i], (byte)aGrabFrom, aTileEntity1.getStackInSlot(aGrabSlots[i]))) {
+ if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) <= aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize) {
+ ItemStack tStack = copyAmount(Math.min(aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize, Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), aTileEntity1.getStackInSlot(aGrabSlots[i]));
+ byte tMovedItemCount = (byte)((buildcraft.api.transport.IPipeTile)aTileEntity2).injectItem(copy(tStack), F, ForgeDirection.getOrientation(aPutTo));
+ if (tMovedItemCount >= Math.max(aMinMoveAtOnce, aMinTargetStackSize)) {
+ tMovedItemCount = (byte)(((buildcraft.api.transport.IPipeTile)aTileEntity2).injectItem(copyAmount(tMovedItemCount, tStack), T, ForgeDirection.getOrientation(aPutTo)));
+ aTileEntity1.decrStackSize(aGrabSlots[i], tMovedItemCount);
+ aTileEntity1.markDirty();
+ return tMovedItemCount;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+ }
+ }
+
+ ForgeDirection tDirection = ForgeDirection.getOrientation(aGrabFrom);
+ if (aTileEntity1 instanceof TileEntity && tDirection != ForgeDirection.UNKNOWN && tDirection.getOpposite() == ForgeDirection.getOrientation(aPutTo)) {
+ int tX = ((TileEntity)aTileEntity1).xCoord + tDirection.offsetX, tY = ((TileEntity)aTileEntity1).yCoord + tDirection.offsetY, tZ = ((TileEntity)aTileEntity1).zCoord + tDirection.offsetZ;
+ if (!hasBlockHitBox(((TileEntity)aTileEntity1).getWorldObj(), tX, tY, tZ)) {
+ for (int i = 0; i < aGrabSlots.length; i++) {
+ if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(aGrabSlots[i]), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot(aTileEntity1, aGrabSlots[i], (byte)aGrabFrom, aTileEntity1.getStackInSlot(aGrabSlots[i]))) {
+ if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) <= aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize) {
+ ItemStack tStack = copyAmount(Math.min(aTileEntity1.getStackInSlot(aGrabSlots[i]).stackSize, Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), aTileEntity1.getStackInSlot(aGrabSlots[i]));
+ EntityItem tEntity = new EntityItem(((TileEntity)aTileEntity1).getWorldObj(), tX+0.5, tY+0.5, tZ+0.5, tStack);
+ tEntity.motionX = tEntity.motionY = tEntity.motionZ = 0;
+ ((TileEntity)aTileEntity1).getWorldObj().spawnEntityInWorld(tEntity);
+ aTileEntity1.decrStackSize(aGrabSlots[i], tStack.stackSize);
+ aTileEntity1.markDirty();
+ return (byte)tStack.stackSize;
+ }
+ }
+ }
+ }
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed. (useful for internal Inventory Operations)
+ * @return the Amount of moved Items
+ */
+ public static byte moveStackFromSlotAToSlotB(IInventory aTileEntity1, IInventory aTileEntity2, int aGrabFrom, int aPutTo, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) {
+ if (aTileEntity1 == null || aTileEntity2 == null || aMaxTargetStackSize <= 0 || aMinTargetStackSize <= 0 || aMinTargetStackSize > aMaxTargetStackSize || aMaxMoveAtOnce <= 0 || aMinMoveAtOnce > aMaxMoveAtOnce) return 0;
+
+ ItemStack tStack1 = aTileEntity1.getStackInSlot(aGrabFrom), tStack2 = aTileEntity2.getStackInSlot(aPutTo), tStack3 = null;
+ if (tStack1 != null) {
+ if (tStack2 != null && !areStacksEqual(tStack1, tStack2)) return 0;
+ tStack3 = copy(tStack1);
+ aMaxTargetStackSize = (byte)Math.min(aMaxTargetStackSize, Math.min(tStack3.getMaxStackSize(), Math.min(tStack2==null?Integer.MAX_VALUE:tStack2.getMaxStackSize(), aTileEntity2.getInventoryStackLimit())));
+ tStack3.stackSize = Math.min(tStack3.stackSize, aMaxTargetStackSize - (tStack2 == null?0:tStack2.stackSize));
+ if (tStack3.stackSize > aMaxMoveAtOnce) tStack3.stackSize = aMaxMoveAtOnce;
+ if (tStack3.stackSize + (tStack2==null?0:tStack2.stackSize) >= Math.min(tStack3.getMaxStackSize(), aMinTargetStackSize) && tStack3.stackSize >= aMinMoveAtOnce) {
+ tStack3 = aTileEntity1.decrStackSize(aGrabFrom, tStack3.stackSize);
+ aTileEntity1.markDirty();
+ if (tStack3 != null) {
+ if (tStack2 == null) {
+ aTileEntity2.setInventorySlotContents(aPutTo, copy(tStack3));
+ aTileEntity2.markDirty();
+ } else {
+ tStack2.stackSize += tStack3.stackSize;
+ aTileEntity2.markDirty();
+ }
+ return (byte)tStack3.stackSize;
+ }
+ }
+ }
+ return 0;
+ }
+
+ public static boolean isAllowedToTakeFromSlot(IInventory aTileEntity, int aSlot, byte aSide, ItemStack aStack) {
+ if (ForgeDirection.getOrientation(aSide) == ForgeDirection.UNKNOWN) {
+ return isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)0, aStack)
+ || isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)1, aStack)
+ || isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)2, aStack)
+ || isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)3, aStack)
+ || isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)4, aStack)
+ || isAllowedToTakeFromSlot(aTileEntity, aSlot, (byte)5, aStack);
+ }
+ if (aTileEntity instanceof ISidedInventory) return ((ISidedInventory)aTileEntity).canExtractItem(aSlot, aStack, aSide);
+ return T;
+ }
+
+ public static boolean isAllowedToPutIntoSlot(IInventory aTileEntity, int aSlot, byte aSide, ItemStack aStack, byte aMaxStackSize) {
+ ItemStack tStack = aTileEntity.getStackInSlot(aSlot);
+ if (tStack != null && (!areStacksEqual(tStack, aStack) || tStack.stackSize >= tStack.getMaxStackSize())) return F;
+ if (ForgeDirection.getOrientation(aSide) == ForgeDirection.UNKNOWN) {
+ return isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)0, aStack, aMaxStackSize)
+ || isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)1, aStack, aMaxStackSize)
+ || isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)2, aStack, aMaxStackSize)
+ || isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)3, aStack, aMaxStackSize)
+ || isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)4, aStack, aMaxStackSize)
+ || isAllowedToPutIntoSlot(aTileEntity, aSlot, (byte)5, aStack, aMaxStackSize);
+ }
+ if (aTileEntity instanceof ISidedInventory && !((ISidedInventory)aTileEntity).canInsertItem(aSlot, aStack, aSide)) return F;
+ return aTileEntity.isItemValidForSlot(aSlot, aStack);
+ }
+
+ /**
+ * Moves Stack from Inv-Side to Inv-Side.
+ * @return the Amount of moved Items
+ */
+ public static byte moveOneItemStack(Object aTileEntity1, Object aTileEntity2, byte aGrabFrom, byte aPutTo, List<ItemStack> aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) {
+ if (aTileEntity1 != null && aTileEntity1 instanceof IInventory) return moveOneItemStack((IInventory)aTileEntity1, aTileEntity2, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, T);
+ return 0;
+ }
+
+ /**
+ * This is only because I needed an additional Parameter for the Double Chest Check.
+ */
+ private static byte moveOneItemStack(IInventory aTileEntity1, Object aTileEntity2, byte aGrabFrom, byte aPutTo, List<ItemStack> aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, boolean aDoCheckChests) {
+ if (aTileEntity1 == null || aMaxTargetStackSize <= 0 || aMinTargetStackSize <= 0 || aMaxMoveAtOnce <= 0 || aMinTargetStackSize > aMaxTargetStackSize || aMinMoveAtOnce > aMaxMoveAtOnce) return 0;
+
+ int[] tGrabSlots = null;
+ if (aTileEntity1 instanceof ISidedInventory) tGrabSlots = ((ISidedInventory)aTileEntity1).getAccessibleSlotsFromSide(aGrabFrom);
+ if (tGrabSlots == null) {
+ tGrabSlots = new int[aTileEntity1.getSizeInventory()];
+ for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i;
+ }
+
+ if (aTileEntity2 != null && aTileEntity2 instanceof IInventory) {
+ int[] tPutSlots = null;
+ if (aTileEntity2 instanceof ISidedInventory) tPutSlots = ((ISidedInventory)aTileEntity2).getAccessibleSlotsFromSide(aPutTo);
+
+ if (tPutSlots == null) {
+ tPutSlots = new int[((IInventory)aTileEntity2).getSizeInventory()];
+ for (int i = 0; i < tPutSlots.length; i++) tPutSlots[i] = i;
+ }
+
+ for (int i = 0; i < tGrabSlots.length; i++) {
+ for (int j = 0; j < tPutSlots.length; j++) {
+ if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(tGrabSlots[i]), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot(aTileEntity1, tGrabSlots[i], aGrabFrom, aTileEntity1.getStackInSlot(tGrabSlots[i]))) {
+ if (isAllowedToPutIntoSlot((IInventory)aTileEntity2, tPutSlots[j], aPutTo, aTileEntity1.getStackInSlot(tGrabSlots[i]), aMaxTargetStackSize)) {
+ byte tMovedItemCount = moveStackFromSlotAToSlotB(aTileEntity1, (IInventory)aTileEntity2, tGrabSlots[i], tPutSlots[j], aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce);
+ if (tMovedItemCount > 0) return tMovedItemCount;
+ }
+ }
+ }
+ }
+ }
+
+ if (aDoCheckChests && aTileEntity1 instanceof TileEntityChest) {
+ TileEntityChest tTileEntity1 = (TileEntityChest)aTileEntity1;
+ if (tTileEntity1.adjacentChestChecked) {
+ byte tAmount = 0;
+ if (tTileEntity1.adjacentChestXNeg != null) {
+ tAmount = moveOneItemStack(tTileEntity1.adjacentChestXNeg, aTileEntity2, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity1.adjacentChestZNeg != null) {
+ tAmount = moveOneItemStack(tTileEntity1.adjacentChestZNeg, aTileEntity2, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity1.adjacentChestXPos != null) {
+ tAmount = moveOneItemStack(tTileEntity1.adjacentChestXPos, aTileEntity2, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity1.adjacentChestZPos != null) {
+ tAmount = moveOneItemStack(tTileEntity1.adjacentChestZPos, aTileEntity2, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ }
+ if (tAmount != 0) return tAmount;
+ }
+ }
+ if (aDoCheckChests && aTileEntity2 instanceof TileEntityChest) {
+ TileEntityChest tTileEntity2 = (TileEntityChest)aTileEntity2;
+ if (tTileEntity2.adjacentChestChecked) {
+ byte tAmount = 0;
+ if (tTileEntity2.adjacentChestXNeg != null) {
+ tAmount = moveOneItemStack(aTileEntity1, tTileEntity2.adjacentChestXNeg, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity2.adjacentChestZNeg != null) {
+ tAmount = moveOneItemStack(aTileEntity1, tTileEntity2.adjacentChestZNeg, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity2.adjacentChestXPos != null) {
+ tAmount = moveOneItemStack(aTileEntity1, tTileEntity2.adjacentChestXPos, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ } else if (tTileEntity2.adjacentChestZPos != null) {
+ tAmount = moveOneItemStack(aTileEntity1, tTileEntity2.adjacentChestZPos, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce, F);
+ }
+ if (tAmount != 0) return tAmount;
+ }
+ }
+ }
+
+ return moveStackIntoPipe(aTileEntity1, aTileEntity2, tGrabSlots, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce);
+ }
+
+ /**
+ * Moves Stack from Inv-Side to Inv-Slot.
+ * @return the Amount of moved Items
+ */
+ public static byte moveOneItemStackIntoSlot(Object aTileEntity1, Object aTileEntity2, byte aGrabFrom, int aPutTo, List<ItemStack> aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) {
+ if (aTileEntity1 == null || !(aTileEntity1 instanceof IInventory) || aPutTo < 0 || aMaxTargetStackSize <= 0 || aMinTargetStackSize <= 0 || aMaxMoveAtOnce <= 0 || aMinTargetStackSize > aMaxTargetStackSize || aMinMoveAtOnce > aMaxMoveAtOnce) return 0;
+
+ int[] tGrabSlots = null;
+ if (aTileEntity1 instanceof ISidedInventory) tGrabSlots = ((ISidedInventory)aTileEntity1).getAccessibleSlotsFromSide(aGrabFrom);
+ if (tGrabSlots == null) {
+ tGrabSlots = new int[((IInventory)aTileEntity1).getSizeInventory()];
+ for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i;
+ }
+
+ if (aTileEntity2 != null && aTileEntity2 instanceof IInventory) {
+ for (int i = 0; i < tGrabSlots.length; i++) {
+ if (listContainsItem(aFilter, ((IInventory)aTileEntity1).getStackInSlot(tGrabSlots[i]), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot((IInventory)aTileEntity1, tGrabSlots[i], aGrabFrom, ((IInventory)aTileEntity1).getStackInSlot(tGrabSlots[i]))) {
+ if (isAllowedToPutIntoSlot((IInventory)aTileEntity2, aPutTo, (byte)6, ((IInventory)aTileEntity1).getStackInSlot(tGrabSlots[i]), aMaxTargetStackSize)) {
+ byte tMovedItemCount = moveStackFromSlotAToSlotB((IInventory)aTileEntity1, (IInventory)aTileEntity2, tGrabSlots[i], aPutTo, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce);
+ if (tMovedItemCount > 0) return tMovedItemCount;
+ }
+ }
+ }
+ }
+ }
+
+ moveStackIntoPipe(((IInventory)aTileEntity1), aTileEntity2, tGrabSlots, aGrabFrom, aPutTo, aFilter, aInvertFilter, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce);
+ return 0;
+ }
+
+ /**
+ * Moves Stack from Inv-Slot to Inv-Slot.
+ * @return the Amount of moved Items
+ */
+ public static byte moveFromSlotToSlot(IInventory aTileEntity1, IInventory aTileEntity2, int aGrabFrom, int aPutTo, List<ItemStack> aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) {
+ if (aTileEntity1 == null || aTileEntity2 == null || aGrabFrom < 0 || aPutTo < 0 || aMaxTargetStackSize <= 0 || aMinTargetStackSize <= 0 || aMaxMoveAtOnce <= 0 || aMinTargetStackSize > aMaxTargetStackSize || aMinMoveAtOnce > aMaxMoveAtOnce) return 0;
+ if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(aGrabFrom), T, aInvertFilter)) {
+ if (isAllowedToTakeFromSlot(aTileEntity1, aGrabFrom, (byte)6, aTileEntity1.getStackInSlot(aGrabFrom))) {
+ if (isAllowedToPutIntoSlot(aTileEntity2, aPutTo, (byte)6, aTileEntity1.getStackInSlot(aGrabFrom), aMaxTargetStackSize)) {
+ byte tMovedItemCount = moveStackFromSlotAToSlotB(aTileEntity1, aTileEntity2, aGrabFrom, aPutTo, aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce);
+ if (tMovedItemCount > 0) return tMovedItemCount;
+ }
+ }
+ }
+ return 0;
+ }
+
+ public static boolean listContainsItem(Collection<ItemStack> aList, ItemStack aStack, boolean aTIfListEmpty, boolean aInvertFilter) {
+ if (aStack == null || aStack.stackSize < 1) return F;
+ if (aList == null) return aTIfListEmpty;
+ while (aList.contains(null)) aList.remove(null);
+ if (aList.size() < 1) return aTIfListEmpty;
+ Iterator<ItemStack> tIterator = aList.iterator();
+ ItemStack tStack = null;
+ while (tIterator.hasNext()) if ((tStack = tIterator.next())!= null && areStacksEqual(aStack, tStack)) return !aInvertFilter;
+ return aInvertFilter;
+ }
+
+ public static boolean areStacksOrToolsEqual(ItemStack aStack1, ItemStack aStack2) {
+ if (aStack1 != null && aStack2 != null && aStack1.getItem() == aStack2.getItem()) {
+ if (aStack1.getItem().isDamageable()) return T;
+ return ((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) && (aStack1.getTagCompound() == null || aStack1.getTagCompound().equals(aStack2.getTagCompound())) && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) || Items.feather.getDamage(aStack1) == W || Items.feather.getDamage(aStack2) == W);
+ }
+ return F;
+ }
+
+ public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2) {
+ return areFluidsEqual(aFluid1, aFluid2, F);
+ }
+
+ public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2, boolean aIgnoreNBT) {
+ return aFluid1 != null && aFluid2 != null && aFluid1.getFluid() == aFluid2.getFluid() && (aIgnoreNBT || ((aFluid1.tag == null) == (aFluid2.tag == null)) && (aFluid1.tag == null || aFluid1.tag.equals(aFluid2.tag)));
+ }
+
+ public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2) {
+ return areStacksEqual(aStack1, aStack2, F);
+ }
+
+ public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) {
+ return aStack1 != null && aStack2 != null && aStack1.getItem() == aStack2.getItem() && (aIgnoreNBT || ((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) && (aStack1.getTagCompound() == null || aStack1.getTagCompound().equals(aStack2.getTagCompound()))) && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) || Items.feather.getDamage(aStack1) == W || Items.feather.getDamage(aStack2) == W);
+ }
+
+ public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2) {
+ return areUnificationsEqual(aStack1, aStack2, F);
+ }
+
+ public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) {
+ return areStacksEqual(GT_OreDictUnificator.get(aStack1), GT_OreDictUnificator.get(aStack2), aIgnoreNBT);
+ }
+
+ public static String getFluidName(Fluid aFluid, boolean aLocalized) {
+ if (aFluid == null) return E;
+ String rName = aLocalized?aFluid.getLocalizedName(new FluidStack(aFluid, 0)):aFluid.getUnlocalizedName();
+ if (rName.contains("fluid.") || rName.contains("tile.")) return capitalizeString(rName.replaceAll("fluid.", E).replaceAll("tile.", E));
+ return rName;
+ }
+
+ public static String getFluidName(FluidStack aFluid, boolean aLocalized) {
+ if (aFluid == null) return E;
+ return getFluidName(aFluid.getFluid(), aLocalized);
+ }
+
+ /**
+ * Forge screwed the Fluid Registry up again, so I make my own, which is also much more efficient than the stupid Stuff over there.
+ */
+ private static final List<FluidContainerData> sFluidContainerList = new ArrayList<FluidContainerData>();
+ private static final Map<GT_ItemStack, FluidContainerData> sFilledContainerToData = new HashMap<GT_ItemStack, FluidContainerData>();
+ private static final Map<GT_ItemStack, Map<Fluid, FluidContainerData>> sEmptyContainerToFluidToData = new HashMap<GT_ItemStack, Map<Fluid, FluidContainerData>>();
+
+ static {
+ GregTech_API.sItemStackMappings.add(sFilledContainerToData);
+ GregTech_API.sItemStackMappings.add(sEmptyContainerToFluidToData);
+ }
+
+ public static void reInit() {
+ sFilledContainerToData.clear();
+ sEmptyContainerToFluidToData.clear();
+ for (FluidContainerData tData : sFluidContainerList) {
+ sFilledContainerToData.put(new GT_ItemStack(tData.filledContainer), tData);
+ Map<Fluid, FluidContainerData> tFluidToContainer = sEmptyContainerToFluidToData.get(new GT_ItemStack(tData.emptyContainer));
+ if (tFluidToContainer == null) {
+ sEmptyContainerToFluidToData.put(new GT_ItemStack(tData.emptyContainer), tFluidToContainer = new HashMap<Fluid, FluidContainerData>());
+ GregTech_API.sFluidMappings.add(tFluidToContainer);
+ }
+ tFluidToContainer.put(tData.fluid.getFluid(), tData);
+ }
+ }
+
+ public static void addFluidContainerData(FluidContainerData aData) {
+ sFluidContainerList.add(aData);
+ sFilledContainerToData.put(new GT_ItemStack(aData.filledContainer), aData);
+ Map<Fluid, FluidContainerData> tFluidToContainer = sEmptyContainerToFluidToData.get(new GT_ItemStack(aData.emptyContainer));
+ if (tFluidToContainer == null) {
+ sEmptyContainerToFluidToData.put(new GT_ItemStack(aData.emptyContainer), tFluidToContainer = new HashMap<Fluid, FluidContainerData>());
+ GregTech_API.sFluidMappings.add(tFluidToContainer);
+ }
+ tFluidToContainer.put(aData.fluid.getFluid(), aData);
+ }
+
+ public static ItemStack fillFluidContainer(FluidStack aFluid, ItemStack aStack, boolean aRemoveFluidDirectly, boolean aCheckIFluidContainerItems) {
+ if (isStackInvalid(aStack) || aFluid == null) return null;
+ if (GT_ModHandler.isWater(aFluid) && ItemList.Bottle_Empty.isStackEqual(aStack)) {
+ if (aFluid.amount >= 250) {
+ if (aRemoveFluidDirectly) aFluid.amount -= 250;
+ return new ItemStack(Items.potionitem, 1, 0);
+ }
+ return null;
+ }
+ if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getFluid(aStack) == null && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) <= aFluid.amount) {
+ if (aRemoveFluidDirectly)
+ aFluid.amount -= ((IFluidContainerItem)aStack.getItem()).fill(aStack = copyAmount(1, aStack), aFluid, T);
+ else
+ ((IFluidContainerItem)aStack.getItem()).fill(aStack = copyAmount(1, aStack), aFluid, T);
+ return aStack;
+ }
+ Map<Fluid, FluidContainerData> tFluidToContainer = sEmptyContainerToFluidToData.get(new GT_ItemStack(aStack));
+ if (tFluidToContainer == null) return null;
+ FluidContainerData tData = tFluidToContainer.get(aFluid.getFluid());
+ if (tData == null || tData.fluid.amount > aFluid.amount) return null;
+ if (aRemoveFluidDirectly) aFluid.amount -= tData.fluid.amount;
+ return copyAmount(1, tData.filledContainer);
+ }
+
+ public static ItemStack getFluidDisplayStack(Fluid aFluid) {
+ return aFluid==null?null:getFluidDisplayStack(new FluidStack(aFluid, 0), F);
+ }
+
+ public static ItemStack getFluidDisplayStack(FluidStack aFluid, boolean aUseStackSize) {
+ if (aFluid == null || aFluid.getFluid() == null) return null;
+ int tmp = 0;
+ try{
+ tmp = aFluid.getFluid().getID();
+ }catch(Exception e){
+ System.err.println(e);
+ }
+ ItemStack rStack = ItemList.Display_Fluid.getWithDamage(aUseStackSize ? aFluid.amount / 1000 : 1, tmp);
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setLong("mFluidDisplayAmount", aFluid.amount);
+ tNBT.setLong("mFluidDisplayHeat", aFluid.getFluid().getTemperature(aFluid));
+ tNBT.setBoolean("mFluidState", aFluid.getFluid().isGaseous(aFluid));
+ rStack.setTagCompound(tNBT);
+ return rStack;
+ }
+
+ public static boolean containsFluid(ItemStack aStack, FluidStack aFluid, boolean aCheckIFluidContainerItems) {
+ if (isStackInvalid(aStack) || aFluid == null) return F;
+ if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0) return aFluid.isFluidEqual(((IFluidContainerItem)aStack.getItem()).getFluid(aStack = copyAmount(1, aStack)));
+ FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack));
+ return tData==null?F:tData.fluid.isFluidEqual(aFluid);
+ }
+
+ public static FluidStack getFluidForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) {
+ if (isStackInvalid(aStack)) return null;
+ if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0) return ((IFluidContainerItem)aStack.getItem()).drain(copyAmount(1, aStack), Integer.MAX_VALUE, T);
+ FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack));
+ return tData==null?null:tData.fluid.copy();
+ }
+
+ public static ItemStack getContainerForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) {
+ if (isStackInvalid(aStack)) return null;
+ FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack));
+ if (tData != null) return copyAmount(1, tData.emptyContainer);
+ if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0) {
+ ((IFluidContainerItem)aStack.getItem()).drain(aStack = copyAmount(1, aStack), Integer.MAX_VALUE, T);
+ return aStack;
+ }
+ return null;
+ }
+
+ public static ItemStack getContainerItem(ItemStack aStack, boolean aCheckIFluidContainerItems) {
+ if (isStackInvalid(aStack)) return null;
+ if (aStack.getItem().hasContainerItem(aStack)) return aStack.getItem().getContainerItem(aStack);
+ /** These are all special Cases, in which it is intended to have only GT Blocks outputting those Container Items */
+ if (ItemList.Cell_Empty.isStackEqual(aStack, F, T)) return null;
+ if (ItemList.IC2_Fuel_Can_Filled.isStackEqual(aStack, F, T)) return ItemList.IC2_Fuel_Can_Empty.get(1);
+ if (aStack.getItem() == Items.potionitem || aStack.getItem() == Items.experience_bottle || ItemList.TF_Vial_FieryBlood.isStackEqual(aStack) || ItemList.TF_Vial_FieryTears.isStackEqual(aStack)) return ItemList.Bottle_Empty.get(1);
+
+ if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem && ((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0) {
+ ItemStack tStack = copyAmount(1, aStack);
+ ((IFluidContainerItem)aStack.getItem()).drain(tStack, Integer.MAX_VALUE, T);
+ if (!areStacksEqual(aStack, tStack)) return tStack;
+ return null;
+ }
+
+ int tCapsuleCount = GT_ModHandler.getCapsuleCellContainerCount(aStack);
+ if (tCapsuleCount > 0) return ItemList.Cell_Empty.get(tCapsuleCount);
+
+ if (ItemList.IC2_ForgeHammer.isStackEqual(aStack) || ItemList.IC2_WireCutter.isStackEqual(aStack)) return copyMetaData(Items.feather.getDamage(aStack) + 1, aStack);
+ return null;
+ }
+
+ public static synchronized boolean removeSimpleIC2MachineRecipe(ItemStack aInput, Map<IRecipeInput, RecipeOutput> aRecipeList, ItemStack aOutput) {
+ if ((isStackInvalid(aInput) && isStackInvalid(aOutput)) || aRecipeList == null) return F;
+ boolean rReturn = F;
+ Iterator<Map.Entry<IRecipeInput, RecipeOutput>> tIterator = aRecipeList.entrySet().iterator();
+ aOutput = GT_OreDictUnificator.get(aOutput);
+ while (tIterator.hasNext()) {
+ Map.Entry<IRecipeInput, RecipeOutput> tEntry = tIterator.next();
+ if (aInput == null || tEntry.getKey().matches(aInput)) {
+ List<ItemStack> tList = tEntry.getValue().items;
+ if (tList != null) for (ItemStack tOutput : tList) if (aOutput == null || areStacksEqual(GT_OreDictUnificator.get(tOutput), aOutput)) {
+ tIterator.remove();
+ rReturn = T;
+ break;
+ }
+ }
+ }
+ return rReturn;
+ }
+
+ public static boolean addSimpleIC2MachineRecipe(ItemStack aInput, Map<IRecipeInput, RecipeOutput> aRecipeList, NBTTagCompound aNBT, Object... aOutput) {
+ if (isStackInvalid(aInput) || aOutput.length == 0 || aRecipeList == null) return F;
+ ItemData tOreName = GT_OreDictUnificator.getAssociation(aInput);
+ for(int i = 0;i<aOutput.length;i++){if(aOutput[i]==null){System.out.println("EmptyIC2Output!"+aInput.getUnlocalizedName());return F;}}
+ if (tOreName != null) {
+ aRecipeList.put(new RecipeInputOreDict(tOreName.toString(), aInput.stackSize), new RecipeOutput(aNBT, GT_OreDictUnificator.getStackArray(T, aOutput)));
+ } else {
+ aRecipeList.put(new RecipeInputItemStack(copy(aInput), aInput.stackSize), new RecipeOutput(aNBT, GT_OreDictUnificator.getStackArray(T, aOutput)));
+ }
+ return T;
+ }
+
+ private static int sBookCount = 0;
+
+ public static ItemStack getWrittenBook(String aMapping, ItemStack aStackToPutNBT) {
+ if (isStringInvalid(aMapping)) return null;
+ ItemStack rStack = GregTech_API.sBookList.get(aMapping);
+ if (rStack == null) return aStackToPutNBT;
+ if (aStackToPutNBT != null) {
+ aStackToPutNBT.setTagCompound(rStack.getTagCompound());
+ return aStackToPutNBT;
+ }
+ return copyAmount(1, rStack);
+ }
+
+ public static ItemStack getWrittenBook(String aMapping, String aTitle, String aAuthor, String... aPages) {
+ if (isStringInvalid(aMapping)) return null;
+ ItemStack rStack = GregTech_API.sBookList.get(aMapping);
+ if (rStack != null) return copyAmount(1, rStack);
+ if (isStringInvalid(aTitle) || isStringInvalid(aAuthor) || aPages.length <= 0) return null;
+ sBookCount++;
+ rStack = new ItemStack(Items.written_book, 1);
+ NBTTagCompound tNBT = new NBTTagCompound();
+ tNBT.setString("title", GT_LanguageManager.addStringLocalization("Book." + aTitle + ".Name", aTitle));
+ tNBT.setString("author", aAuthor);
+ NBTTagList tNBTList = new NBTTagList();
+ for (byte i = 0; i < aPages.length; i++) {
+ aPages[i] = GT_LanguageManager.addStringLocalization("Book." + aTitle + ".Page" + ((i<10)?"0"+i:i), aPages[i]);
+ if (i < 48) {
+ if (aPages[i].length() < 256)
+ tNBTList.appendTag(new NBTTagString(aPages[i]));
+ else
+ GT_Log.err.println("WARNING: String for written Book too long! -> " + aPages[i]);
+ } else {
+ GT_Log.err.println("WARNING: Too much Pages for written Book! -> " + aTitle);
+ break;
+ }
+ }
+ tNBTList.appendTag(new NBTTagString("Credits to " + aAuthor + " for writing this Book. This was Book Nr. " + sBookCount + " at its creation. Gotta get 'em all!"));
+ tNBT.setTag("pages", tNBTList);
+ rStack.setTagCompound(tNBT);
+ GT_Log.out.println("GT_Mod: Added Book to Book List - Mapping: '"+aMapping+"' - Name: '"+aTitle+"' - Author: '"+aAuthor+"'");
+ GregTech_API.sBookList.put(aMapping, rStack);
+ return copy(rStack);
+ }
+
+ public static Map<GT_PlayedSound, Integer> sPlayedSoundMap = new HashMap<GT_PlayedSound, Integer>();
+
+ public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength) {
+ return doSoundAtClient(aSoundName, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer());
+ }
+
+ public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, Entity aEntity) {
+ if (aEntity == null) return F;
+ return doSoundAtClient(aSoundName, aTimeUntilNextSound, aSoundStrength, aEntity.posX, aEntity.posY, aEntity.posZ);
+ }
+
+ public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, double aX, double aY, double aZ) {
+ return doSoundAtClient(aSoundName, aTimeUntilNextSound, aSoundStrength, 0.9F + new Random().nextFloat() * 0.2F, aX, aY, aZ);
+ }
+
+ public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, float aSoundModulation, double aX, double aY, double aZ) {
+ if (isStringInvalid(aSoundName) || !FMLCommonHandler.instance().getEffectiveSide().isClient() || GT.getThePlayer() == null || !GT.getThePlayer().worldObj.isRemote) return F;
+ if (GregTech_API.sMultiThreadedSounds)
+ new Thread(new GT_Runnable_Sound(GT.getThePlayer().worldObj, MathHelper.floor_double(aX), MathHelper.floor_double(aY), MathHelper.floor_double(aZ), aTimeUntilNextSound, aSoundName, aSoundStrength, aSoundModulation), "Sound Effect").start();
+ else
+ new GT_Runnable_Sound(GT.getThePlayer().worldObj, MathHelper.floor_double(aX), MathHelper.floor_double(aY), MathHelper.floor_double(aZ), aTimeUntilNextSound, aSoundName, aSoundStrength, aSoundModulation).run();
+ return T;
+ }
+
+ public static boolean sendSoundToPlayers(World aWorld, String aSoundName, float aSoundStrength, float aSoundModulation, int aX, int aY, int aZ) {
+ if (isStringInvalid(aSoundName) || aWorld == null || aWorld.isRemote) return F;
+ NW.sendPacketToAllPlayersInRange(aWorld, new GT_Packet_Sound(aSoundName, aSoundStrength, aSoundModulation, aX, (short)aY, aZ), aX, aZ);
+ return T;
+ }
+
+ public static int stackToInt(ItemStack aStack) {
+ if (isStackInvalid(aStack)) return 0;
+ return Item.getIdFromItem(aStack.getItem()) | (Items.feather.getDamage(aStack)<<16);
+ }
+
+ public static int stackToWildcard(ItemStack aStack) {
+ if (isStackInvalid(aStack)) return 0;
+ return Item.getIdFromItem(aStack.getItem()) | (W<<16);
+ }
+
+ public static ItemStack intToStack(int aStack) {
+ int tID = aStack&(~0>>>16), tMeta = aStack>>>16;
+ Item tItem = Item.getItemById(tID);
+ if (tItem != null) return new ItemStack(tItem, 1, tMeta);
+ return null;
+ }
+
+ public static Integer[] stacksToIntegerArray(ItemStack... aStacks) {
+ Integer[] rArray = new Integer[aStacks.length];
+ for (int i = 0; i < rArray.length; i++) {
+ rArray[i] = stackToInt(aStacks[i]);
+ }
+ return rArray;
+ }
+
+ public static int[] stacksToIntArray(ItemStack... aStacks) {
+ int[] rArray = new int[aStacks.length];
+ for (int i = 0; i < rArray.length; i++) {
+ rArray[i] = stackToInt(aStacks[i]);
+ }
+ return rArray;
+ }
+
+ public static boolean arrayContains(Object aObject, Object... aObjects) {
+ return listContains(aObject, Arrays.asList(aObjects));
+ }
+
+ public static boolean listContains(Object aObject, Collection aObjects) {
+ if (aObjects == null) return F;
+ return aObjects.contains(aObject);
+ }
+
+ public static <T> boolean arrayContainsNonNull(T... aArray) {
+ if (aArray != null) for (Object tObject : aArray) if (tObject != null) return T;
+ return F;
+ }
+
+ public static <T> ArrayList<T> getArrayListWithoutNulls(T... aArray) {
+ if (aArray == null) return new ArrayList<T>();
+ ArrayList<T> rList = new ArrayList<T>(Arrays.asList(aArray));
+ for (int i = 0; i < rList.size(); i++) if (rList.get(i) == null) rList.remove(i--);
+ return rList;
+ }
+
+ public static <T> ArrayList<T> getArrayListWithoutTrailingNulls(T... aArray) {
+ if (aArray == null) return new ArrayList<T>();
+ ArrayList<T> rList = new ArrayList<T>(Arrays.asList(aArray));
+ for (int i = rList.size() - 1; i >= 0 && rList.get(i) == null;) rList.remove(i--);
+ return rList;
+ }
+
+ public static Block getBlock(Object aBlock) {
+ return (Block)aBlock;
+ }
+
+ public static Block getBlockFromStack(Object aStack) {
+ if (isStackInvalid(aStack)) return Blocks.air;
+ return Block.getBlockFromItem(((ItemStack)aStack).getItem());
+ }
+
+ public static boolean isBlockValid(Object aBlock) {
+ return aBlock != null && (aBlock instanceof Block);
+ }
+
+ public static boolean isBlockInvalid(Object aBlock) {
+ return aBlock == null || !(aBlock instanceof Block);
+ }
+
+ public static boolean isStringValid(Object aString) {
+ return aString != null && !aString.toString().isEmpty();
+ }
+
+ public static boolean isStringInvalid(Object aString) {
+ return aString == null || aString.toString().isEmpty();
+ }
+
+ public static boolean isStackValid(Object aStack) {
+ return aStack != null && (aStack instanceof ItemStack) && ((ItemStack)aStack).getItem() != null && ((ItemStack)aStack).stackSize >= 0;
+ }
+
+ public static boolean isStackInvalid(Object aStack) {
+ return aStack == null || !(aStack instanceof ItemStack) || ((ItemStack)aStack).getItem() == null || ((ItemStack)aStack).stackSize < 0;
+ }
+
+ public static boolean isDebugItem(ItemStack aStack) {
+ return /*ItemList.Armor_Cheat.isStackEqual(aStack, T, T) || */areStacksEqual(GT_ModHandler.getIC2Item("debug", 1), aStack, T);
+ }
+
+ public static ItemStack updateItemStack(ItemStack aStack) {
+ if (isStackValid(aStack) && aStack.getItem() instanceof GT_Generic_Item) ((GT_Generic_Item)aStack.getItem()).isItemStackUsable(aStack);
+ return aStack;
+ }
+
+ public static boolean isOpaqueBlock(World aWorld, int aX, int aY, int aZ) {
+ return aWorld.getBlock(aX, aY, aZ).isOpaqueCube();
+ }
+
+ public static boolean isBlockAir(World aWorld, int aX, int aY, int aZ) {
+ return aWorld.getBlock(aX, aY, aZ).isAir(aWorld, aX, aY, aZ);
+ }
+
+ public static boolean hasBlockHitBox(World aWorld, int aX, int aY, int aZ) {
+ return aWorld.getBlock(aX, aY, aZ).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ) != null;
+ }
+
+ public static void setCoordsOnFire(World aWorld, int aX, int aY, int aZ, boolean aReplaceCenter) {
+ if (aReplaceCenter)
+ if (aWorld.getBlock(aX , aY , aZ ).getCollisionBoundingBoxFromPool(aWorld, aX , aY , aZ ) == null) aWorld.setBlock(aX , aY , aZ , Blocks.fire);
+ if (aWorld.getBlock(aX+1, aY , aZ ).getCollisionBoundingBoxFromPool(aWorld, aX+1, aY , aZ ) == null) aWorld.setBlock(aX+1, aY , aZ , Blocks.fire);
+ if (aWorld.getBlock(aX-1, aY , aZ ).getCollisionBoundingBoxFromPool(aWorld, aX-1, aY , aZ ) == null) aWorld.setBlock(aX-1, aY , aZ , Blocks.fire);
+ if (aWorld.getBlock(aX , aY+1, aZ ).getCollisionBoundingBoxFromPool(aWorld, aX , aY+1, aZ ) == null) aWorld.setBlock(aX , aY+1, aZ , Blocks.fire);
+ if (aWorld.getBlock(aX , aY-1, aZ ).getCollisionBoundingBoxFromPool(aWorld, aX , aY-1, aZ ) == null) aWorld.setBlock(aX , aY-1, aZ , Blocks.fire);
+ if (aWorld.getBlock(aX , aY , aZ+1).getCollisionBoundingBoxFromPool(aWorld, aX , aY , aZ+1) == null) aWorld.setBlock(aX , aY , aZ+1, Blocks.fire);
+ if (aWorld.getBlock(aX , aY , aZ-1).getCollisionBoundingBoxFromPool(aWorld, aX , aY , aZ-1) == null) aWorld.setBlock(aX , aY , aZ-1, Blocks.fire);
+ }
+
+ public static ItemStack getProjectile(SubTag aProjectileType, IInventory aInventory) {
+ if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) {
+ ItemStack rStack = aInventory.getStackInSlot(i);
+ if (isStackValid(rStack) && rStack.getItem() instanceof IProjectileItem && ((IProjectileItem)rStack.getItem()).hasProjectile(aProjectileType, rStack)) return updateItemStack(rStack);
+ }
+ return null;
+ }
+
+ public static void removeNullStacksFromInventory(IInventory aInventory) {
+ if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) {
+ ItemStack tStack = aInventory.getStackInSlot(i);
+ if (tStack != null && (tStack.stackSize == 0 || tStack.getItem() == null)) aInventory.setInventorySlotContents(i, null);
+ }
+ }
+
+ /**
+ * Converts a Number to a String
+ */
+ public static String parseNumberToString(int aNumber) {
+ String tString = E;
+ boolean temp = T, negative = F;
+
+ if (aNumber<0) {
+ aNumber *= -1;
+ negative = T;
+ }
+
+ for (int i = 1000000000; i > 0; i /= 10) {
+ int tDigit = (aNumber/i)%10;
+ if ( temp && tDigit != 0) temp = F;
+ if (!temp) {
+ tString += tDigit;
+ if (i != 1) for (int j = i; j > 0; j /= 1000) if (j == 1) tString += ",";
+ }
+ }
+
+ if (tString.equals(E)) tString = "0";
+
+ return negative?"-"+tString:tString;
+ }
+
+ public static NBTTagCompound getNBTContainingBoolean(NBTTagCompound aNBT, Object aTag, boolean aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setBoolean(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingByte(NBTTagCompound aNBT, Object aTag, byte aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setByte(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingShort(NBTTagCompound aNBT, Object aTag, short aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setShort(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingInteger(NBTTagCompound aNBT, Object aTag, int aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setInteger(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingFloat(NBTTagCompound aNBT, Object aTag, float aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setFloat(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingDouble(NBTTagCompound aNBT, Object aTag, double aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ aNBT.setDouble(aTag.toString(), aValue);
+ return aNBT;
+ }
+
+ public static NBTTagCompound getNBTContainingString(NBTTagCompound aNBT, Object aTag, Object aValue) {
+ if (aNBT == null) aNBT = new NBTTagCompound();
+ if (aValue == null) return aNBT;
+ aNBT.setString(aTag.toString(), aValue.toString());
+ return aNBT;
+ }
+
+ public static boolean isWearingFullFrostHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sFrostHazmatList)) return F;
+ return T;
+ }
+
+ public static boolean isWearingFullHeatHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sHeatHazmatList)) return F;
+ return T;
+ }
+
+ public static boolean isWearingFullBioHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sBioHazmatList)) return F;
+ return T;
+ }
+
+ public static boolean isWearingFullRadioHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sRadioHazmatList)) return F;
+ return T;
+ }
+
+ public static boolean isWearingFullElectroHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sElectroHazmatList)) return F;
+ return T;
+ }
+
+ public static boolean isWearingFullGasHazmat(EntityLivingBase aEntity) {
+ for (byte i = 1; i < 5; i++) if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sGasHazmatList)) return F;
+ return T;
+ }
+
+ public static float getHeatDamageFromItem(ItemStack aStack) {
+ ItemData tData = GT_OreDictUnificator.getItemData(aStack);
+ return tData==null?0:(tData.mPrefix==null?0:tData.mPrefix.mHeatDamage) + (tData.hasValidMaterialData()?tData.mMaterial.mMaterial.mHeatDamage:0);
+ }
+
+ public static int getRadioactivityLevel(ItemStack aStack) {
+ ItemData tData = GT_OreDictUnificator.getItemData(aStack);
+ if (tData != null && tData.hasValidMaterialData()) {
+ if (tData.mMaterial.mMaterial.mEnchantmentArmors instanceof Enchantment_Radioactivity) return tData.mMaterial.mMaterial.mEnchantmentArmorsLevel;
+ if (tData.mMaterial.mMaterial.mEnchantmentTools instanceof Enchantment_Radioactivity) return tData.mMaterial.mMaterial.mEnchantmentToolsLevel;
+ }
+ return EnchantmentHelper.getEnchantmentLevel(Enchantment_Radioactivity.INSTANCE.effectId, aStack);
+ }
+
+ public static boolean isImmuneToBreathingGasses(EntityLivingBase aEntity) {
+ return isWearingFullGasHazmat(aEntity);
+ }
+
+ public static boolean applyHeatDamage(EntityLivingBase aEntity, float aDamage) {
+ if (aDamage > 0 && aEntity != null && aEntity.getActivePotionEffect(Potion.fireResistance) == null && !isWearingFullHeatHazmat(aEntity)) {
+ aEntity.attackEntityFrom(GT_DamageSources.getHeatDamage(), aDamage);
+ return T;
+ }
+ return F;
+ }
+
+ public static boolean applyFrostDamage(EntityLivingBase aEntity, float aDamage) {
+ if (aDamage > 0 && aEntity != null && !isWearingFullFrostHazmat(aEntity)) {
+ aEntity.attackEntityFrom(GT_DamageSources.getFrostDamage(), aDamage);
+ return T;
+ }
+ return F;
+ }
+
+ public static boolean applyElectricityDamage(EntityLivingBase aEntity, long aVoltage, long aAmperage) {
+ long aDamage = getTier(aVoltage) * aAmperage * 4;
+ if (aDamage > 0 && aEntity != null && !isWearingFullElectroHazmat(aEntity)) {
+ aEntity.attackEntityFrom(GT_DamageSources.getElectricDamage(), aDamage);
+ return T;
+ }
+ return F;
+ }
+
+ public static boolean applyRadioactivity(EntityLivingBase aEntity, int aLevel, int aAmountOfItems) {
+ if (aLevel > 0 && aEntity != null && aEntity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD && aEntity.getCreatureAttribute() != EnumCreatureAttribute.ARTHROPOD && !isWearingFullRadioHazmat(aEntity)) {
+ PotionEffect tEffect = null;
+ aEntity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id , aLevel * 140 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.moveSlowdown ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ aEntity.addPotionEffect(new PotionEffect(Potion.digSlowdown.id , aLevel * 150 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.digSlowdown ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ aEntity.addPotionEffect(new PotionEffect(Potion.confusion.id , aLevel * 130 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.confusion ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ aEntity.addPotionEffect(new PotionEffect(Potion.weakness.id , aLevel * 150 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.weakness ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ aEntity.addPotionEffect(new PotionEffect(Potion.hunger.id , aLevel * 130 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.hunger ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ aEntity.addPotionEffect(new PotionEffect(24 /* IC2 Radiation */ , aLevel * 180 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.potionTypes[24] ))==null?0:tEffect.getDuration())), Math.max(0, (5*aLevel) / 7)));
+ return T;
+ }
+ return F;
+ }
+
+ public static ItemStack setStack(Object aSetStack, Object aToStack) {
+ if (isStackInvalid(aSetStack) || isStackInvalid(aToStack)) return null;
+ ((ItemStack)aSetStack).func_150996_a(((ItemStack)aToStack).getItem());
+ ((ItemStack)aSetStack).stackSize = ((ItemStack)aToStack).stackSize;
+ Items.feather.setDamage((ItemStack)aSetStack, Items.feather.getDamage((ItemStack)aToStack));
+ ((ItemStack)aSetStack).setTagCompound(((ItemStack)aToStack).getTagCompound());
+ return (ItemStack)aSetStack;
+ }
+
+ public static FluidStack[] copyFluidArray(FluidStack... aStacks) {
+ FluidStack[] rStacks = new FluidStack[aStacks.length];
+ for (int i = 0; i < aStacks.length; i++) if (aStacks[i] != null) rStacks[i] = aStacks[i].copy();
+ return rStacks;
+ }
+
+ public static ItemStack[] copyStackArray(Object... aStacks) {
+ ItemStack[] rStacks = new ItemStack[aStacks.length];
+ for (int i = 0; i < aStacks.length; i++) rStacks[i] = copy(aStacks[i]);
+ return rStacks;
+ }
+
+ public static ItemStack copy(Object... aStacks) {
+ for (Object tStack : aStacks) if (isStackValid(tStack)) return ((ItemStack)tStack).copy();
+ return null;
+ }
+
+ public static ItemStack copyAmount(long aAmount, Object... aStacks) {
+ ItemStack rStack = copy(aStacks);
+ if (isStackInvalid(rStack)) return null;
+ if (aAmount > 64) aAmount = 64; else if (aAmount == -1) aAmount = 111; else if (aAmount < 0) aAmount = 0;
+ rStack.stackSize = (byte)aAmount;
+ return rStack;
+ }
+
+ public static ItemStack copyMetaData(long aMetaData, Object... aStacks) {
+ ItemStack rStack = copy(aStacks);
+ if (isStackInvalid(rStack)) return null;
+ Items.feather.setDamage(rStack, (short)aMetaData);
+ return rStack;
+ }
+
+ public static ItemStack copyAmountAndMetaData(long aAmount, long aMetaData, Object... aStacks) {
+ ItemStack rStack = copyAmount(aAmount, aStacks);
+ if (isStackInvalid(rStack)) return null;
+ Items.feather.setDamage(rStack, (short)aMetaData);
+ return rStack;
+ }
+
+ /**
+ * returns a copy of an ItemStack with its Stacksize being multiplied by aMultiplier
+ */
+ public static ItemStack mul(long aMultiplier, Object... aStacks) {
+ ItemStack rStack = copy(aStacks);
+ if (rStack == null) return null;
+ rStack.stackSize *= aMultiplier;
+ return rStack;
+ }
+
+ /**
+ * Loads an ItemStack properly.
+ */
+ public static ItemStack loadItem(NBTTagCompound aNBT, String aTagName) {
+ return loadItem(aNBT.getCompoundTag(aTagName));
+ }
+
+ /**
+ * Loads an ItemStack properly.
+ */
+ public static FluidStack loadFluid(NBTTagCompound aNBT, String aTagName) {
+ return loadFluid(aNBT.getCompoundTag(aTagName));
+ }
+
+ /**
+ * Loads an ItemStack properly.
+ */
+ public static ItemStack loadItem(NBTTagCompound aNBT) {
+ if (aNBT == null) return null;
+ ItemStack rStack = ItemStack.loadItemStackFromNBT(aNBT);
+ try {
+ if (rStack != null && (rStack.getItem().getClass().getName().startsWith("ic2.core.migration"))) {
+ rStack.getItem().onUpdate(rStack, DW, null, 0, F);
+ }
+ } catch(Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ return GT_OreDictUnificator.get(T, rStack);
+ }
+
+ /**
+ * Loads an ItemStack properly.
+ */
+ public static FluidStack loadFluid(NBTTagCompound aNBT) {
+ if (aNBT == null) return null;
+ return FluidStack.loadFluidStackFromNBT(aNBT);
+ }
+
+ public static <E> E selectItemInList(int aIndex, E aReplacement, List<E> aList) {
+ if (aList == null || aList.isEmpty()) return aReplacement;
+ if (aList.size() <= aIndex) return aList.get(aList.size() - 1);
+ if (aIndex < 0) return aList.get(0);
+ return aList.get(aIndex);
+ }
+
+ public static <E> E selectItemInList(int aIndex, E aReplacement, E... aList) {
+ if (aList == null || aList.length == 0) return aReplacement;
+ if (aList.length <= aIndex) return aList[aList.length - 1];
+ if (aIndex < 0) return aList[0];
+ return aList[aIndex];
+ }
+
+ public static boolean isStackInList(ItemStack aStack, Collection<GT_ItemStack> aList) {
+ if (aStack == null) {return F;}
+ return isStackInList(new GT_ItemStack(aStack), aList);
+ }
+
+ public static boolean isStackInList(GT_ItemStack aStack, Collection<GT_ItemStack> aList) {
+ return aStack != null && (aList.contains(aStack) || aList.contains(new GT_ItemStack(aStack.mItem, aStack.mStackSize, W)));
+ }
+
+ /**
+ * re-maps all Keys of a Map after the Keys were weakened.
+ */
+ public static <X, Y> Map<X, Y> reMap(Map<X, Y> aMap) {
+ Map<X, Y> tMap = new HashMap<X, Y>();
+ tMap.putAll(aMap);
+ aMap.clear();
+ aMap.putAll(tMap);
+ return aMap;
+ }
+
+ /**
+ * Why the fuck do neither Java nor Guava have a Function to do this?
+ */
+ public static <X, Y extends Comparable> LinkedHashMap<X,Y> sortMapByValuesAcending(Map<X,Y> aMap) {
+ List<Map.Entry<X,Y>> tEntrySet = new LinkedList<Map.Entry<X,Y>>(aMap.entrySet());
+ Collections.sort(tEntrySet, new Comparator<Map.Entry<X,Y>>() {@Override public int compare(Entry<X, Y> aValue1, Entry<X, Y> aValue2) {return aValue1.getValue().compareTo(aValue2.getValue());}});
+ LinkedHashMap<X,Y> rMap = new LinkedHashMap<X,Y>();
+ for (Map.Entry<X,Y> tEntry : tEntrySet) rMap.put(tEntry.getKey(), tEntry.getValue());
+ return rMap;
+ }
+
+ /**
+ * Why the fuck do neither Java nor Guava have a Function to do this?
+ */
+ public static <X, Y extends Comparable> LinkedHashMap<X,Y> sortMapByValuesDescending(Map<X,Y> aMap) {
+ List<Map.Entry<X,Y>> tEntrySet = new LinkedList<Map.Entry<X,Y>>(aMap.entrySet());
+ Collections.sort(tEntrySet, new Comparator<Map.Entry<X,Y>>() {@Override public int compare(Entry<X, Y> aValue1, Entry<X, Y> aValue2) {return -aValue1.getValue().compareTo(aValue2.getValue());}});
+ LinkedHashMap<X,Y> rMap = new LinkedHashMap<X,Y>();
+ for (Map.Entry<X,Y> tEntry : tEntrySet) rMap.put(tEntry.getKey(), tEntry.getValue());
+ return rMap;
+ }
+
+ /**
+ * Translates a Material Amount into an Amount of Fluid in Fluid Material Units.
+ */
+ public static long translateMaterialToFluidAmount(long aMaterialAmount, boolean aRoundUp) {
+ return translateMaterialToAmount(aMaterialAmount, L, aRoundUp);
+ }
+
+ /**
+ * Translates a Material Amount into an Amount of Fluid. Second Parameter for things like Bucket Amounts (1000) and similar
+ */
+ public static long translateMaterialToAmount(long aMaterialAmount, long aAmountPerUnit, boolean aRoundUp) {
+ return Math.max(0, ((aMaterialAmount * aAmountPerUnit) / M) + (aRoundUp && (aMaterialAmount * aAmountPerUnit) % M > 0 ? 1 : 0));
+ }
+
+ /**
+ * This checks if the Dimension is really a Dimension and not another Planet or something.
+ * Used for my Teleporter.
+ */
+ public static boolean isRealDimension(int aDimensionID) {
+ try {
+ if (DimensionManager.getProvider(aDimensionID).getClass().getName().contains("com.xcompwiz.mystcraft")) return T;
+ } catch (Throwable e) {/*Do nothing*/}
+ try {
+ if (DimensionManager.getProvider(aDimensionID).getClass().getName().contains("TwilightForest")) return T;
+ } catch (Throwable e) {/*Do nothing*/}
+ return GregTech_API.sDimensionalList.contains(aDimensionID);
+ }
+
+ public static boolean moveEntityToDimensionAtCoords(Entity aEntity, int aDimension, double aX, double aY, double aZ) {
+ WorldServer tTargetWorld = DimensionManager.getWorld(aDimension), tOriginalWorld = DimensionManager.getWorld(aEntity.worldObj.provider.dimensionId);
+ if (tTargetWorld != null && tOriginalWorld != null && tTargetWorld != tOriginalWorld) {
+ if (aEntity.ridingEntity != null) aEntity.mountEntity(null);
+ if (aEntity.riddenByEntity != null) aEntity.riddenByEntity.mountEntity(null);
+
+ if (aEntity instanceof EntityPlayerMP) {
+ EntityPlayerMP aPlayer = (EntityPlayerMP)aEntity;
+ aPlayer.dimension = aDimension;
+ aPlayer.playerNetServerHandler.sendPacket(new S07PacketRespawn(aPlayer.dimension, aPlayer.worldObj.difficultySetting, aPlayer.worldObj.getWorldInfo().getTerrainType(), aPlayer.theItemInWorldManager.getGameType()));
+ tOriginalWorld.removePlayerEntityDangerously(aPlayer);
+ aPlayer.isDead = F;
+ aPlayer.setWorld(tTargetWorld);
+ MinecraftServer.getServer().getConfigurationManager().func_72375_a(aPlayer, tOriginalWorld);
+ aPlayer.playerNetServerHandler.setPlayerLocation(aX+0.5, aY+0.5, aZ+0.5, aPlayer.rotationYaw, aPlayer.rotationPitch);
+ aPlayer.theItemInWorldManager.setWorld(tTargetWorld);
+ MinecraftServer.getServer().getConfigurationManager().updateTimeAndWeatherForPlayer(aPlayer, tTargetWorld);
+ MinecraftServer.getServer().getConfigurationManager().syncPlayerInventory(aPlayer);
+ Iterator tIterator = aPlayer.getActivePotionEffects().iterator();
+ while (tIterator.hasNext()) {
+ PotionEffect potioneffect = (PotionEffect)tIterator.next();
+ aPlayer.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(aPlayer.getEntityId(), potioneffect));
+ }
+ aPlayer.playerNetServerHandler.setPlayerLocation(aX+0.5, aY+0.5, aZ+0.5, aPlayer.rotationYaw, aPlayer.rotationPitch);
+ FMLCommonHandler.instance().firePlayerChangedDimensionEvent(aPlayer, tOriginalWorld.provider.dimensionId, aDimension);
+ } else {
+ aEntity.setPosition(aX+0.5, aY+0.5, aZ+0.5);
+ aEntity.worldObj.removeEntity(aEntity);
+ aEntity.dimension = aDimension;
+ aEntity.isDead = F;
+ Entity tNewEntity = EntityList.createEntityByName(EntityList.getEntityString(aEntity), tTargetWorld);
+ if (tNewEntity != null) {
+ tNewEntity.copyDataFrom(aEntity, T);
+ aEntity.setDead();
+ tNewEntity.isDead = F;
+ boolean temp = tNewEntity.forceSpawn;
+ tNewEntity.forceSpawn = T;
+ tTargetWorld.spawnEntityInWorld(tNewEntity);
+ tNewEntity.forceSpawn = temp;
+ tNewEntity.isDead = F;
+ aEntity = tNewEntity;
+ }
+ }
+
+ if (aEntity instanceof EntityLivingBase) {
+ ((EntityLivingBase)aEntity).setPositionAndUpdate(aX, aY, aZ);
+ } else {
+ aEntity.setPosition(aX, aY, aZ);
+ }
+
+ tOriginalWorld.resetUpdateEntityTick();
+ tTargetWorld.resetUpdateEntityTick();
+ return T;
+ }
+ return F;
+ }
+
+ public static int getCoordinateScan(ArrayList<String> aList, EntityPlayer aPlayer, World aWorld, int aScanLevel, int aX, int aY, int aZ, int aSide, float aClickX, float aClickY, float aClickZ) {
+ if (aList == null) return 0;
+
+ ArrayList<String> tList = new ArrayList<String>();
+ int rEUAmount = 0;
+
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+
+ Block tBlock = aWorld.getBlock(aX, aY, aZ);
+
+ tList.add("----- X: " + aX + " Y: " + aY + " Z: " + aZ + " -----");
+ try {
+ if (tTileEntity != null && tTileEntity instanceof IInventory)
+ tList.add("Name: " + ((IInventory)tTileEntity).getInventoryName() + " MetaData: " + aWorld.getBlockMetadata(aX, aY, aZ));
+ else
+ tList.add("Name: " + tBlock.getUnlocalizedName() + " MetaData: " + aWorld.getBlockMetadata(aX, aY, aZ));
+
+ tList.add("Hardness: " + tBlock.getBlockHardness(aWorld, aX, aY, aZ) + " Blast Resistance: " + tBlock.getExplosionResistance(aPlayer, aWorld, aX, aY, aZ, aPlayer.posX, aPlayer.posY, aPlayer.posZ));
+ if (tBlock.isBeaconBase(aWorld, aX, aY, aZ, aX, aY+1, aZ)) tList.add("Is valid Beacon Pyramid Material");
+ } catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ if (tTileEntity != null) {
+ try {if (tTileEntity instanceof IFluidHandler) {
+ rEUAmount+=500;
+ FluidTankInfo[] tTanks = ((IFluidHandler)tTileEntity).getTankInfo(ForgeDirection.getOrientation(aSide));
+ if (tTanks != null) for (byte i = 0; i < tTanks.length; i++) {
+ tList.add("Tank " + i + ": " + GT_Utility.formatNumbers((tTanks[i].fluid==null?0:tTanks[i].fluid.amount)) + " / " + GT_Utility.formatNumbers(tTanks[i].capacity) + " " + getFluidName(tTanks[i].fluid, T));
+ }
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.reactor.IReactorChamber) {
+ rEUAmount+=500;
+ tTileEntity = (TileEntity)(((ic2.api.reactor.IReactorChamber)tTileEntity).getReactor());
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.reactor.IReactor) {
+ rEUAmount+=500;
+ tList.add("Heat: " + ((ic2.api.reactor.IReactor)tTileEntity).getHeat() + "/" + ((ic2.api.reactor.IReactor)tTileEntity).getMaxHeat()
+ + " HEM: " + ((ic2.api.reactor.IReactor)tTileEntity).getHeatEffectModifier() + " Base EU Output: "/* + ((ic2.api.reactor.IReactor)tTileEntity).getOutput()*/);
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.tile.IWrenchable) {
+ rEUAmount+=100;
+ tList.add("Facing: " + ((ic2.api.tile.IWrenchable)tTileEntity).getFacing() + " / Chance: " + (((ic2.api.tile.IWrenchable)tTileEntity).getWrenchDropRate()*100) + "%");
+ tList.add(((ic2.api.tile.IWrenchable)tTileEntity).wrenchCanRemove(aPlayer)?"You can remove this with a Wrench":"You can NOT remove this with a Wrench");
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.energy.tile.IEnergyTile) {
+ rEUAmount+=200;
+ //aList.add(((ic2.api.energy.tile.IEnergyTile)tTileEntity).isAddedToEnergyNet()?"Added to E-net":"Not added to E-net! Bug?");
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.energy.tile.IEnergySink) {
+ rEUAmount+=400;
+ //aList.add("Demanded Energy: " + ((ic2.api.energy.tile.IEnergySink)tTileEntity).demandsEnergy());
+ //tList.add("Max Safe Input: " + getTier(((ic2.api.energy.tile.IEnergySink)tTileEntity).getSinkTier()));
+ //tList.add("Max Safe Input: " + ((ic2.api.energy.tile.IEnergySink)tTileEntity).getMaxSafeInput());
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.energy.tile.IEnergySource) {
+ rEUAmount+=400;
+ //aList.add("Max Energy Output: " + ((ic2.api.energy.tile.IEnergySource)tTileEntity).getMaxEnergyOutput());
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.energy.tile.IEnergyConductor) {
+ rEUAmount+=200;
+ tList.add("Conduction Loss: " + ((ic2.api.energy.tile.IEnergyConductor)tTileEntity).getConductionLoss());
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.tile.IEnergyStorage) {
+ rEUAmount+=200;
+ tList.add("Contained Energy: " + ((ic2.api.tile.IEnergyStorage)tTileEntity).getStored() + " of " + ((ic2.api.tile.IEnergyStorage)tTileEntity).getCapacity());
+ //aList.add(((ic2.api.tile.IEnergyStorage)tTileEntity).isTeleporterCompatible(ic2.api.Direction.YP)?"Teleporter Compatible":"Not Teleporter Compatible");
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof IUpgradableMachine) {
+ rEUAmount+=500;
+ if (((IUpgradableMachine)tTileEntity).hasMufflerUpgrade()) tList.add("Has Muffler Upgrade");
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof IMachineProgress) {
+ rEUAmount+=400;
+ int tValue = 0;
+ if (0 < (tValue = ((IMachineProgress)tTileEntity).getMaxProgress())) tList.add("Progress: " + GT_Utility.formatNumbers(tValue) + " / " + GT_Utility.formatNumbers(((IMachineProgress)tTileEntity).getProgress()));
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ICoverable) {
+ rEUAmount+=300;
+ String tString = ((ICoverable)tTileEntity).getCoverBehaviorAtSide((byte)aSide).getDescription((byte)aSide, ((ICoverable)tTileEntity).getCoverIDAtSide((byte)aSide), ((ICoverable)tTileEntity).getCoverDataAtSide((byte)aSide), (ICoverable)tTileEntity);
+ if (tString != null && !tString.equals(E)) tList.add(tString);
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof IBasicEnergyContainer && ((IBasicEnergyContainer)tTileEntity).getEUCapacity() > 0) {
+ tList.add("Max IN: " + ((IBasicEnergyContainer)tTileEntity).getInputVoltage() + " EU");
+ tList.add("Max OUT: " + ((IBasicEnergyContainer)tTileEntity).getOutputVoltage() + " EU at " + ((IBasicEnergyContainer)tTileEntity).getOutputAmperage() + " Amperes");
+ tList.add("Energy: " + GT_Utility.formatNumbers(((IBasicEnergyContainer)tTileEntity).getStoredEU()) + " / " + GT_Utility.formatNumbers(((IBasicEnergyContainer)tTileEntity).getEUCapacity()) + "EU");
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof IGregTechTileEntity) {
+ tList.add("Owned by: " + ((IGregTechTileEntity)tTileEntity).getOwnerName());
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof IGregTechDeviceInformation && ((IGregTechDeviceInformation)tTileEntity).isGivingInformation()) {
+ tList.addAll(Arrays.asList(((IGregTechDeviceInformation)tTileEntity).getInfoData()));
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ try {if (tTileEntity instanceof ic2.api.crops.ICropTile) {
+ if (((ic2.api.crops.ICropTile)tTileEntity).getScanLevel() < 4) {
+ rEUAmount+=10000;
+ ((ic2.api.crops.ICropTile)tTileEntity).setScanLevel((byte)4);
+ }
+ if (((ic2.api.crops.ICropTile)tTileEntity).getID() >= 0 && ((ic2.api.crops.ICropTile)tTileEntity).getID() < ic2.api.crops.Crops.instance.getCropList().length && ic2.api.crops.Crops.instance.getCropList()[((ic2.api.crops.ICropTile)tTileEntity).getID()] != null) {
+ rEUAmount+=1000;
+ tList.add("Type -- Crop-Name: " + ic2.api.crops.Crops.instance.getCropList()[((ic2.api.crops.ICropTile)tTileEntity).getID()].name()
+ + " Growth: " + ((ic2.api.crops.ICropTile)tTileEntity).getGrowth()
+ + " Gain: " + ((ic2.api.crops.ICropTile)tTileEntity).getGain()
+ + " Resistance: " + ((ic2.api.crops.ICropTile)tTileEntity).getResistance()
+ );
+ tList.add("Plant -- Fertilizer: " + ((ic2.api.crops.ICropTile)tTileEntity).getNutrientStorage()
+ + " Water: " + ((ic2.api.crops.ICropTile)tTileEntity).getHydrationStorage()
+ + " Weed-Ex: " + ((ic2.api.crops.ICropTile)tTileEntity).getWeedExStorage()
+ + " Scan-Level: " + ((ic2.api.crops.ICropTile)tTileEntity).getScanLevel()
+ );
+ tList.add("Environment -- Nutrients: " + ((ic2.api.crops.ICropTile)tTileEntity).getNutrients()
+ + " Humidity: " + ((ic2.api.crops.ICropTile)tTileEntity).getHumidity()
+ + " Air-Quality: " + ((ic2.api.crops.ICropTile)tTileEntity).getAirQuality()
+ );
+ String tString = E;
+ for (String tAttribute : ic2.api.crops.Crops.instance.getCropList()[((ic2.api.crops.ICropTile)tTileEntity).getID()].attributes()) {
+ tString += ", " + tAttribute;
+ }
+ tList.add("Attributes:" + tString.replaceFirst(",", E));
+ tList.add("Discovered by: " + ic2.api.crops.Crops.instance.getCropList()[((ic2.api.crops.ICropTile)tTileEntity).getID()].discoveredBy());
+ }
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+ }
+ try {if (tBlock instanceof IDebugableBlock) {
+ rEUAmount+=500;
+ ArrayList<String> temp = ((IDebugableBlock)tBlock).getDebugInfo(aPlayer, aX, aY, aZ, 3);
+ if (temp != null) tList.addAll(temp);
+ }} catch(Throwable e) {if (D1) e.printStackTrace(GT_Log.err);}
+
+ BlockScanningEvent tEvent = new BlockScanningEvent(aWorld, aPlayer, aX, aY, aZ, (byte)aSide, aScanLevel, tBlock, tTileEntity, tList, aClickX, aClickY, aClickZ);
+ tEvent.mEUCost = rEUAmount;
+ MinecraftForge.EVENT_BUS.post(tEvent);
+ if (!tEvent.isCanceled()) aList.addAll(tList);
+ return tEvent.mEUCost;
+ }
+
+ /**
+ * @return an Array containing the X and the Y Coordinate of the clicked Point, with the top left Corner as Origin, like on the Texture Sheet. return values should always be between [0.0F and 0.99F].
+ */
+ public static float[] getClickedFacingCoords(byte aSide, float aX, float aY, float aZ) {
+ switch (aSide) {
+ case 0: return new float[] {Math.min(0.99F, Math.max(0,1-aX)), Math.min(0.99F, Math.max(0, aZ))};
+ case 1: return new float[] {Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0, aZ))};
+ case 2: return new float[] {Math.min(0.99F, Math.max(0,1-aX)), Math.min(0.99F, Math.max(0,1-aY))};
+ case 3: return new float[] {Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0,1-aY))};
+ case 4: return new float[] {Math.min(0.99F, Math.max(0, aZ)), Math.min(0.99F, Math.max(0,1-aY))};
+ case 5: return new float[] {Math.min(0.99F, Math.max(0,1-aZ)), Math.min(0.99F, Math.max(0,1-aY))};
+ default: return new float[] {0.5F, 0.5F};
+ }
+ }
+
+ /**
+ * This Function determines the direction a Block gets when being Wrenched.
+ * returns -1 if invalid. Even though that could never happen.
+ */
+ public static byte determineWrenchingSide(byte aSide, float aX, float aY, float aZ) {
+ byte tBack = getOppositeSide(aSide);
+ switch (aSide) {
+ case 0: case 1:
+ if (aX < 0.25) {
+ if (aZ < 0.25) return tBack;
+ if (aZ > 0.75) return tBack;
+ return 4;
+ }
+ if (aX > 0.75) {
+ if (aZ < 0.25) return tBack;
+ if (aZ > 0.75) return tBack;
+ return 5;
+ }
+ if (aZ < 0.25) return 2;
+ if (aZ > 0.75) return 3;
+ return aSide;
+ case 2: case 3:
+ if (aX < 0.25) {
+ if (aY < 0.25) return tBack;
+ if (aY > 0.75) return tBack;
+ return 4;
+ }
+ if (aX > 0.75) {
+ if (aY < 0.25) return tBack;
+ if (aY > 0.75) return tBack;
+ return 5;
+ }
+ if (aY < 0.25) return 0;
+ if (aY > 0.75) return 1;
+ return aSide;
+ case 4: case 5:
+ if (aZ < 0.25) {
+ if (aY < 0.25) return tBack;
+ if (aY > 0.75) return tBack;
+ return 2;
+ }
+ if (aZ > 0.75) {
+ if (aY < 0.25) return tBack;
+ if (aY > 0.75) return tBack;
+ return 3;
+ }
+ if (aY < 0.25) return 0;
+ if (aY > 0.75) return 1;
+ return aSide;
+ }
+ return -1;
+ }
+
+ public static String formatNumbers(long aNumber){
+ DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
+ DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
+ symbols.setGroupingSeparator(' ');
+ return formatter.format(aNumber);
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen.java b/src/main/java/gregtech/api/world/GT_Worldgen.java
new file mode 100644
index 0000000000..d4f520145e
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen.java
@@ -0,0 +1,61 @@
+package gregtech.api.world;
+
+import gregtech.api.GregTech_API;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public abstract class GT_Worldgen {
+
+ public final String mWorldGenName;
+ public final boolean mEnabled;
+ private final Map<String, Boolean> mDimensionMap = new HashMap<String, Boolean>();
+
+ public GT_Worldgen(String aName, List aList, boolean aDefault) {
+ mWorldGenName = aName;
+ mEnabled = GregTech_API.sWorldgenFile.get("worldgen", mWorldGenName, aDefault);
+ if (mEnabled) aList.add(this);
+ }
+
+ /**
+ * @param aWorld The World Object
+ * @param aRandom The Random Generator to use
+ * @param aBiome The Name of the Biome (always != null)
+ * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End
+ * @param aChunkX xCoord of the Chunk
+ * @param aChunkZ zCoord of the Chunk
+ * @return if the Worldgeneration has been successfully completed
+ */
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ return false;
+ }
+
+ /**
+ * @param aWorld The World Object
+ * @param aRandom The Random Generator to use
+ * @param aBiome The Name of the Biome (always != null)
+ * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End
+ * @param aChunkX xCoord of the Chunk
+ * @param aChunkZ zCoord of the Chunk
+ * @return if the Worldgeneration has been successfully completed
+ */
+ public boolean executeCavegen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ return false;
+ }
+
+ public boolean isGenerationAllowed(World aWorld, int aDimensionType, int aAllowedDimensionType) {
+ String aDimName = aWorld.provider.getDimensionName();
+ Boolean tAllowed = mDimensionMap.get(aDimName);
+ if (tAllowed == null) {
+ boolean tValue = GregTech_API.sWorldgenFile.get("worldgen.dimensions."+mWorldGenName, aDimName, aDimensionType == aAllowedDimensionType);
+ mDimensionMap.put(aDimName, tValue);
+ return tValue;
+ }
+ return tAllowed;
+ }
+}
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java b/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java
new file mode 100644
index 0000000000..9c90639554
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java
@@ -0,0 +1,70 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockContainer;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Boulder extends GT_Worldgen_Ore {
+ public GT_Worldgen_Boulder(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY - 7, tZ);
+ if (tBlock != null && tBlock.isOpaqueCube() && aWorld.getBlock(tX, tY-6, tZ).isAir(aWorld, tX, tY-6, tZ)) {
+ float var6 = aRandom.nextFloat() * (float)Math.PI;
+ double var7 = ((tX + 8) + MathHelper.sin(var6) * mSize / 8.0F);
+ double var9 = ((tX + 8) - MathHelper.sin(var6) * mSize / 8.0F);
+ double var11 = ((tZ + 8) + MathHelper.cos(var6) * mSize / 8.0F);
+ double var13 = ((tZ + 8) - MathHelper.cos(var6) * mSize / 8.0F);
+ double var15 = (tY + aRandom.nextInt(3) - 2);
+ double var17 = (tY + aRandom.nextInt(3) - 2);
+
+ for (int var19 = 0; var19 <= mSize; ++var19) {
+ double var20 = var7 + (var9 - var7) * var19 / mSize;
+ double var22 = var15 + (var17 - var15) * var19 / mSize;
+ double var24 = var11 + (var13 - var11) * var19 / mSize;
+ double var26 = aRandom.nextDouble() * mSize / 16.0D;
+ double var28 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
+
+ for (int var38 = var32; var38 <= var35; ++var38) {
+ double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int var41 = var33; var41 <= var36; ++var41) {
+ double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int var44 = var34; var44 <= var37; ++var44) {
+ double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D);
+ Block block = aWorld.getBlock(var38, var41, var44);
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && ((mAllowToGenerateinVoid&&aWorld.getBlock(var38, var41, var44).isAir(aWorld, var38, var41, var44)) || (block != null && !(block instanceof BlockContainer)))) {
+ aWorld.setBlock(var38, var41, var44, mBlock, mBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java
new file mode 100644
index 0000000000..58e1eb2814
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java
@@ -0,0 +1,29 @@
+package gregtech.api.world;
+
+import gregtech.api.GregTech_API;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import net.minecraft.block.Block;
+
+public abstract class GT_Worldgen_Ore extends GT_Worldgen {
+ public final int mBlockMeta, mAmount, mSize, mMinY, mMaxY, mProbability, mDimensionType;
+ public final Block mBlock;
+ public final Collection<String> mBiomeList;
+ public final boolean mAllowToGenerateinVoid;
+
+ public GT_Worldgen_Ore(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, GregTech_API.sWorldgenList, aDefault);
+ mDimensionType = aDimensionType;
+ mBlock = aBlock;
+ mBlockMeta = Math.min(Math.max(aBlockMeta, 0), 15);
+ mProbability = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Probability" , aProbability);
+ mAmount = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Amount" , aAmount);
+ mSize = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Size" , aSize);
+ mMinY = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "MinHeight" , aMinY);
+ mMaxY = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "MaxHeight" , aMaxY);
+ if (aBiomeList == null) mBiomeList = new ArrayList<String>(); else mBiomeList = aBiomeList;
+ mAllowToGenerateinVoid = aAllowToGenerateinVoid;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java
new file mode 100644
index 0000000000..c382a6fd98
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java
@@ -0,0 +1,69 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_Normal extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_Normal(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ if (mAllowToGenerateinVoid || aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) {
+ float var6 = aRandom.nextFloat() * (float)Math.PI;
+ double var7 = ((tX + 8) + MathHelper.sin(var6) * mSize / 8.0F);
+ double var9 = ((tX + 8) - MathHelper.sin(var6) * mSize / 8.0F);
+ double var11 = ((tZ + 8) + MathHelper.cos(var6) * mSize / 8.0F);
+ double var13 = ((tZ + 8) - MathHelper.cos(var6) * mSize / 8.0F);
+ double var15 = (tY + aRandom.nextInt(3) - 2);
+ double var17 = (tY + aRandom.nextInt(3) - 2);
+
+ for (int var19 = 0; var19 <= mSize; ++var19) {
+ double var20 = var7 + (var9 - var7) * var19 / mSize;
+ double var22 = var15 + (var17 - var15) * var19 / mSize;
+ double var24 = var11 + (var13 - var11) * var19 / mSize;
+ double var26 = aRandom.nextDouble() * mSize / 16.0D;
+ double var28 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
+
+ for (int var38 = var32; var38 <= var35; ++var38) {
+ double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int var41 = var33; var41 <= var36; ++var41) {
+ double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int var44 = var34; var44 <= var37; ++var44) {
+ double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D);
+ Block block = aWorld.getBlock(var38, var41, var44);
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && ((mAllowToGenerateinVoid&&aWorld.getBlock(var38, var41, var44).isAir(aWorld, var38, var41, var44)) || (block != null && (block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.stone) || block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.end_stone) || block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.netherrack))))) {
+ aWorld.setBlock(var38, var41, var44, mBlock, mBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
new file mode 100644
index 0000000000..62dc220b01
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
@@ -0,0 +1,30 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_SingleBlock extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_SingleBlock(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if (((mAllowToGenerateinVoid&&aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) || (tBlock != null && (tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.end_stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.netherrack))))) {
+ aWorld.setBlock(tX, tY, tZ, mBlock, mBlockMeta, 0);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java
new file mode 100644
index 0000000000..fc921087f1
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java
@@ -0,0 +1,30 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_SingleBlock_UnderLava extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_SingleBlock_UnderLava(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeCavegen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if (((mAllowToGenerateinVoid&&aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) || (tBlock != null && (tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.end_stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.netherrack))))) {
+ if (aWorld.getBlock(tX, tY+1, tZ) == Blocks.lava || aWorld.getBlock(tX, tY, tZ) == Blocks.flowing_lava) aWorld.setBlock(tX, tY, tZ, mBlock, mBlockMeta, 0);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java
new file mode 100644
index 0000000000..f893690f10
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Client.java
@@ -0,0 +1,580 @@
+// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
+// Jad home page: http://www.kpdus.com/jad.html
+// Decompiler options: packimports(3)
+// Source File Name: GT_Client.java
+
+package gregtech.common;
+
+import codechicken.lib.vec.Rotation;
+import codechicken.lib.vec.Transformation;
+import cpw.mods.fml.client.registry.RenderingRegistry;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.gameevent.TickEvent;
+import cpw.mods.fml.relauncher.Side;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.*;
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.ITurnable;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.objects.GT_FluidStack;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.*;
+import gregtech.common.entities.GT_Entity_Arrow;
+import gregtech.common.entities.GT_Entity_Arrow_Potion;
+import gregtech.common.render.GT_CapeRenderer;
+import gregtech.common.render.GT_MetaGenerated_Item_Renderer;
+import gregtech.common.render.GT_MetaGenerated_Tool_Renderer;
+import gregtech.common.render.GT_Renderer_Block;
+import gregtech.common.render.GT_Renderer_Entity_Arrow;
+import ic2.api.tile.IWrenchable;
+
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.net.URL;
+import java.util.*;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.world.World;
+import net.minecraftforge.client.event.DrawBlockHighlightEvent;
+import net.minecraftforge.client.event.RenderPlayerEvent;
+
+import org.lwjgl.opengl.GL11;
+
+// Referenced classes of package gregtech.common:
+// GT_Proxy
+
+public class GT_Client extends GT_Proxy
+ implements Runnable
+{
+
+ public boolean isServerSide()
+ {
+ return true;
+ }
+
+ public boolean isClientSide()
+ {
+ return true;
+ }
+
+ public boolean isBukkitSide()
+ {
+ return false;
+ }
+
+ public EntityPlayer getThePlayer()
+ {
+ return Minecraft.getMinecraft().thePlayer;
+ }
+
+ public int addArmor(String aPrefix)
+ {
+ return RenderingRegistry.addNewArmourRendererPrefix(aPrefix);
+ }
+
+ public GT_Client()
+ {
+ mCapeRenderer = new GT_CapeRenderer(mCapeList);
+ mAnimationTick = 0L;
+ mAnimationDirection = false;
+ isFirstClientPlayerTick = true;
+ mMessage = "";
+ mPosR = Arrays.asList(new Materials[] {
+ /**Materials.ChargedCertusQuartz, **/Materials.Enderium, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.Force,
+ Materials.Pyrotheum, Materials.Sunnarium, Materials.Glowstone, Materials.Thaumium, Materials.InfusedVis, Materials.InfusedAir, Materials.InfusedFire, Materials.FierySteel, Materials.Firestone
+ });
+ mPosG = Arrays.asList(new Materials[] {
+ /**Materials.ChargedCertusQuartz, **/Materials.Enderium, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.Force,
+ Materials.Pyrotheum, Materials.Sunnarium, Materials.Glowstone, Materials.InfusedAir, Materials.InfusedEarth
+ });
+ mPosB = Arrays.asList(new Materials[] {
+ /**Materials.ChargedCertusQuartz, **/Materials.Enderium, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.InfusedVis,
+ Materials.InfusedWater, Materials.Thaumium
+ });
+ mNegR = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy, Materials.NetherStar
+ });
+ mNegG = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy, Materials.NetherStar
+ });
+ mNegB = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy, Materials.NetherStar
+ });
+ mMoltenPosR = Arrays.asList(new Materials[] {
+ Materials.Enderium, Materials.NetherStar, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.Force,
+ Materials.Pyrotheum, Materials.Sunnarium, Materials.Glowstone, Materials.Thaumium, Materials.InfusedVis, Materials.InfusedAir, Materials.InfusedFire, Materials.FierySteel, Materials.Firestone
+ });
+ mMoltenPosG = Arrays.asList(new Materials[] {
+ Materials.Enderium, Materials.NetherStar, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.Force,
+ Materials.Pyrotheum, Materials.Sunnarium, Materials.Glowstone, Materials.InfusedAir, Materials.InfusedEarth
+ });
+ mMoltenPosB = Arrays.asList(new Materials[] {
+ Materials.Enderium, Materials.NetherStar, Materials.Vinteum, Materials.Uranium235, Materials.InfusedGold, Materials.Plutonium241, Materials.NaquadahEnriched, Materials.Naquadria, Materials.InfusedOrder, Materials.InfusedVis,
+ Materials.InfusedWater, Materials.Thaumium
+ });
+ mMoltenNegR = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy
+ });
+ mMoltenNegG = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy
+ });
+ mMoltenNegB = Arrays.asList(new Materials[] {
+ Materials.InfusedEntropy
+ });
+ }
+
+ public void onPreLoad()
+ {
+ super.onPreLoad();
+ String arr$[] = {
+ "renadi", "hanakocz", "MysteryDump", "Flaver4", "x_Fame", "Peluche321", "Goshen_Ithilien", "manf", "Bimgo", "leagris",
+ "IAmMinecrafter02", "Cerous", "Devilin_Pixy", "Bkarlsson87", "BadAlchemy", "CaballoCraft", "melanclock", "Resursator", "demanzke", "AndrewAmmerlaan",
+ "Deathlycraft", "Jirajha", "Axlegear", "kei_kouma", "Dracion", "dungi", "Dorfschwein", "Zero Tw0", "mattiagraz85", "sebastiank30",
+ "Plem", "invultri", "grillo126", "malcanteth", "Malevolence_", "Nicholas_Manuel", "Sirbab", "kehaan", "bpgames123", "semig0d",
+ "9000bowser", "Sovereignty89", "Kris1432", "xander_cage_", "samuraijp", "bsaa", "SpwnX", "tworf", "Kadah", "kanni",
+ "Stute", "Hegik", "Onlyme", "t3hero", "Hotchi", "jagoly", "Nullav", "BH5432", "Sibmer", "inceee",
+ "foxxx0", "Hartok", "TMSama", "Shlnen", "Carsso", "zessirb", "meep310", "Seldron", "yttr1um", "hohounk",
+ "freebug", "Sylphio", "jmarler", "Saberawr", "r00teniy", "Neonbeta", "yinscape", "voooon24", "Quintine", "peach774",
+ "lepthymo", "bildeman", "Kremnari", "Aerosalo", "OndraSter", "oscares91", "mr10movie", "Daxx367x2", "EGERTRONx", "aka13_404",
+ "Abouttabs", "Johnstaal", "djshiny99", "megatronp", "DZCreeper", "Kane_Hart", "Truculent", "vidplace7", "simon6689", "MomoNasty",
+ "UnknownXLV", "goreacraft", "Fluttermine", "Daddy_Cecil", "MrMaleficus", "TigersFangs", "cublikefoot", "chainman564", "NikitaBuker", "Misha999777",
+ "25FiveDetail", "AntiCivilBoy", "michaelbrady", "xXxIceFirexXx", "Speedynutty68", "GarretSidzaka", "HallowCharm977", "mastermind1919", "The_Hypersonic", "diamondguy2798",
+ "zF4ll3nPr3d4t0r", "CrafterOfMines57", "XxELIT3xSNIP3RxX", "SuterusuKusanagi", "xavier0014", "adamros", "alexbegt"
+ };
+ int len$ = arr$.length;
+ for(int i$ = 0; i$ < len$; i$++)
+ {
+ String tName = arr$[i$];
+ mCapeList.add(tName.toLowerCase());
+ }
+
+ (new Thread(this)).start();
+ }
+
+ public void onLoad()
+ {
+ super.onLoad();
+ new GT_Renderer_Block();
+ new GT_MetaGenerated_Item_Renderer();
+ new GT_MetaGenerated_Tool_Renderer();
+ new GT_Renderer_Entity_Arrow(GT_Entity_Arrow.class, "arrow");
+ new GT_Renderer_Entity_Arrow(GT_Entity_Arrow_Potion.class, "arrow_potions");
+ }
+
+ public void onPostLoad()
+ {
+ super.onPostLoad();
+label0:
+ for(int i = 1; i < GregTech_API.METATILEENTITIES.length; i++)
+ try
+ {
+ do
+ {
+ if(i >= GregTech_API.METATILEENTITIES.length)
+ continue label0;
+ if(GregTech_API.METATILEENTITIES[i] != null)
+ GregTech_API.METATILEENTITIES[i].getStackForm(1L).getTooltip(null, true);
+ i++;
+ } while(true);
+ }
+ catch(Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+
+
+// super.onPostLoad();
+//
+// for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) {
+// try {
+// for (; i < GregTech_API.METATILEENTITIES.length; i++) if (GregTech_API.METATILEENTITIES[i] != null) GregTech_API.METATILEENTITIES[i].getStackForm(1L).getTooltip(null, true);
+// } catch (Throwable e) {
+// e.printStackTrace(GT_Log.err);
+// }
+// }
+ }
+
+ public void run()
+ {
+ try
+ {
+ GT_Log.out.println("GT_Mod: Downloading Cape List.");
+ @SuppressWarnings("resource")
+ Scanner tScanner = new Scanner(new URL("http://files.minecraftforge.net/maven/com/gregoriust/gregtech/capelist.txt").openStream());
+ while (tScanner.hasNextLine())
+ {
+ String tName = tScanner.nextLine();
+ if (!this.mCapeList.contains(tName.toLowerCase())) {
+ this.mCapeList.add(tName.toLowerCase());
+ }
+ }
+ }
+ catch (Throwable e) {}
+ try
+ {
+ GT_Log.out.println("GT_Mod: Downloading News.");
+ @SuppressWarnings("resource")
+ Scanner tScanner = new Scanner(new URL("http://files.minecraftforge.net/maven/com/gregoriust/gregtech/message.txt").openStream());
+ while (tScanner.hasNextLine()) {
+ this.mMessage = (this.mMessage + tScanner.nextLine() + " ");
+ }
+ }
+ catch (Throwable e) {}
+ }
+
+ @SubscribeEvent
+ public void onPlayerTickEventClient(TickEvent.PlayerTickEvent aEvent)
+ {
+ if ((!aEvent.player.isDead) && (aEvent.phase == TickEvent.Phase.END) && (aEvent.side.isClient()))
+ {
+ ArrayList<GT_PlayedSound> tList = new ArrayList();
+ for (Map.Entry<GT_PlayedSound, Integer> tEntry : GT_Utility.sPlayedSoundMap.entrySet()) {
+ if (((Integer)tEntry.getValue()).intValue() < 0) {
+ tList.add(tEntry.getKey());
+ } else {
+ tEntry.setValue(Integer.valueOf(((Integer)tEntry.getValue()).intValue() - 1));
+ }
+ }
+ GT_PlayedSound tKey;
+ for (Iterator i$ = tList.iterator(); i$.hasNext(); GT_Utility.sPlayedSoundMap.remove(tKey)) {
+ tKey = (GT_PlayedSound)i$.next();
+ }
+ if ((this.isFirstClientPlayerTick) && (aEvent.player == GT_Values.GT.getThePlayer()))
+ {
+ this.isFirstClientPlayerTick = false;
+ GT_FluidStack.fixAllThoseFuckingFluidIDs();
+ if ((this.mMessage.length() > 5) && (GregTech_API.sSpecialFile.get(ConfigCategories.news, this.mMessage, true))) {
+ aEvent.player.addChatComponentMessage(new ChatComponentText(this.mMessage));
+ }
+ try
+ {
+ int tVersion = Integer.parseInt(((String)Class.forName("ic2.core.IC2").getField("VERSION").get(null)).substring(4, 7));
+ if (GT_Values.D1) {
+ GT_Log.out.println("Industrialcraft Version: " + tVersion);
+ }
+ if (tVersion < 624)
+ {
+ aEvent.player.addChatComponentMessage(new ChatComponentText("GregTech: Please update your IndustrialCraft here:"));
+ aEvent.player.addChatComponentMessage(new ChatComponentText("ic2api.player.to:8080/job/IC2_experimental/" + (GT_Mod.MAX_IC2 < Integer.MAX_VALUE ? GT_Mod.MAX_IC2 : 624) + "/"));
+ }
+ else if (tVersion > GT_Mod.MAX_IC2)
+ {
+ aEvent.player.addChatComponentMessage(new ChatComponentText("GregTech: Please downgrade your IndustrialCraft here:"));
+ aEvent.player.addChatComponentMessage(new ChatComponentText("ic2api.player.to:8080/job/IC2_experimental/" + GT_Mod.MAX_IC2 + "/"));
+ }
+ }
+ catch (Throwable e)
+ {
+ aEvent.player.addChatComponentMessage(new ChatComponentText("GregTech: Please get the recommended Version of IndustrialCraft here:"));
+ aEvent.player.addChatComponentMessage(new ChatComponentText("ic2api.player.to:8080/job/IC2_experimental/" + (GT_Mod.MAX_IC2 < Integer.MAX_VALUE ? GT_Mod.MAX_IC2 : 624) + "/"));
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent)
+ {
+ if (GT_Utility.isStackValid(aEvent.currentItem))
+ {
+ Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ);
+ TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ);
+ try
+ {
+ Class.forName("codechicken.lib.vec.Rotation");
+ if (((aTileEntity instanceof BaseMetaPipeEntity)) && (((ICoverable)aTileEntity).getCoverIDAtSide((byte)aEvent.target.sideHit) == 0) && ((GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet())) || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList)) || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList))))
+ {
+ drawGrid(aEvent);
+ return;
+ }
+ if ((((aTileEntity instanceof ITurnable)) || (ROTATABLE_VANILLA_BLOCKS.contains(aBlock)) || ((aTileEntity instanceof IWrenchable))) && (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)))
+ {
+ drawGrid(aEvent);
+ return;
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ }
+
+ private static void drawGrid(DrawBlockHighlightEvent aEvent)
+ {
+ GL11.glPushMatrix();
+ GL11.glTranslated(-(aEvent.player.lastTickPosX + (aEvent.player.posX - aEvent.player.lastTickPosX) * (double)aEvent.partialTicks), -(aEvent.player.lastTickPosY + (aEvent.player.posY - aEvent.player.lastTickPosY) * (double)aEvent.partialTicks), -(aEvent.player.lastTickPosZ + (aEvent.player.posZ - aEvent.player.lastTickPosZ) * (double)aEvent.partialTicks));
+ GL11.glTranslated((float)aEvent.target.blockX + 0.5F, (float)aEvent.target.blockY + 0.5F, (float)aEvent.target.blockZ + 0.5F);
+ Rotation.sideRotations[aEvent.target.sideHit].glApply();
+ GL11.glTranslated(0.0D, -0.501D, 0.0D);
+ GL11.glLineWidth(2.0F);
+ GL11.glColor4f(0.0F, 0.0F, 0.0F, 0.5F);
+ GL11.glBegin(1);
+ GL11.glVertex3d(0.5D, 0.0D, -0.25D);
+ GL11.glVertex3d(-0.5D, 0.0D, -0.25D);
+ GL11.glVertex3d(0.5D, 0.0D, 0.25D);
+ GL11.glVertex3d(-0.5D, 0.0D, 0.25D);
+ GL11.glVertex3d(0.25D, 0.0D, -0.5D);
+ GL11.glVertex3d(0.25D, 0.0D, 0.5D);
+ GL11.glVertex3d(-0.25D, 0.0D, -0.5D);
+ GL11.glVertex3d(-0.25D, 0.0D, 0.5D);
+ GL11.glEnd();
+ GL11.glPopMatrix();
+ }
+
+ @SubscribeEvent
+ public void receiveRenderEvent(net.minecraftforge.client.event.RenderPlayerEvent.Pre aEvent)
+ {
+ if(GT_Utility.getFullInvisibility(aEvent.entityPlayer))
+ {
+ aEvent.setCanceled(true);
+ return;
+ } else
+ {
+ return;
+ }
+ }
+
+ @SubscribeEvent
+ public void receiveRenderSpecialsEvent(net.minecraftforge.client.event.RenderPlayerEvent.Specials.Pre aEvent)
+ {
+ mCapeRenderer.receiveRenderSpecialsEvent(aEvent);
+ }
+
+ @SubscribeEvent
+ public void onClientTickEvent(cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent aEvent)
+ {
+ if(aEvent.phase == cpw.mods.fml.common.gameevent.TickEvent.Phase.END)
+ {
+ mAnimationTick++;
+ if(mAnimationTick % 50L == 0L)
+ mAnimationDirection = !mAnimationDirection;
+ int tDirection = mAnimationDirection ? 1 : -1;
+ for(Iterator i$ = mPosR.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[0] += tDirection;
+ }
+
+ for(Iterator i$ = mPosG.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[1] += tDirection;
+ }
+
+ for(Iterator i$ = mPosB.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[2] += tDirection;
+ }
+
+ for(Iterator i$ = mPosA.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[3] += tDirection;
+ }
+
+ for(Iterator i$ = mNegR.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[0] -= tDirection;
+ }
+
+ for(Iterator i$ = mNegG.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[1] -= tDirection;
+ }
+
+ for(Iterator i$ = mNegB.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[2] -= tDirection;
+ }
+
+ for(Iterator i$ = mNegA.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mRGBa[3] -= tDirection;
+ }
+
+ for(Iterator i$ = mMoltenPosR.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[0] += tDirection;
+ }
+
+ for(Iterator i$ = mMoltenPosG.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[1] += tDirection;
+ }
+
+ for(Iterator i$ = mMoltenPosB.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[2] += tDirection;
+ }
+
+ for(Iterator i$ = mMoltenPosA.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[3] += tDirection;
+ }
+
+ for(Iterator i$ = mMoltenNegR.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[0] -= tDirection;
+ }
+
+ for(Iterator i$ = mMoltenNegG.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[1] -= tDirection;
+ }
+
+ for(Iterator i$ = mMoltenNegB.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[2] -= tDirection;
+ }
+
+ for(Iterator i$ = mMoltenNegA.iterator(); i$.hasNext();)
+ {
+ Materials tMaterial = (Materials)i$.next();
+ tMaterial.mMoltenRGBa[3] -= tDirection;
+ }
+
+ }
+ }
+
+ public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ if(GT_Utility.isStackInvalid(aStack))
+ return;
+ String tString = "note.harp";
+ int i = 0;
+ int j = mSoundItems.size();
+ do
+ {
+ if(i >= j)
+ break;
+ if(GT_Utility.areStacksEqual((ItemStack)mSoundItems.get(i), aStack))
+ {
+ tString = (String)mSoundNames.get(i);
+ break;
+ }
+ i++;
+ } while(true);
+ if(tString.startsWith("random.explode"))
+ if(aStack.stackSize == 3)
+ tString = "random.fuse";
+ else
+ if(aStack.stackSize == 2)
+ tString = "random.old_explode";
+ if(tString.startsWith("streaming."))
+ switch(aStack.stackSize)
+ {
+ case 1: // '\001'
+ tString = (new StringBuilder()).append(tString).append("13").toString();
+ break;
+
+ case 2: // '\002'
+ tString = (new StringBuilder()).append(tString).append("cat").toString();
+ break;
+
+ case 3: // '\003'
+ tString = (new StringBuilder()).append(tString).append("blocks").toString();
+ break;
+
+ case 4: // '\004'
+ tString = (new StringBuilder()).append(tString).append("chirp").toString();
+ break;
+
+ case 5: // '\005'
+ tString = (new StringBuilder()).append(tString).append("far").toString();
+ break;
+
+ case 6: // '\006'
+ tString = (new StringBuilder()).append(tString).append("mall").toString();
+ break;
+
+ case 7: // '\007'
+ tString = (new StringBuilder()).append(tString).append("mellohi").toString();
+ break;
+
+ case 8: // '\b'
+ tString = (new StringBuilder()).append(tString).append("stal").toString();
+ break;
+
+ case 9: // '\t'
+ tString = (new StringBuilder()).append(tString).append("strad").toString();
+ break;
+
+ case 10: // '\n'
+ tString = (new StringBuilder()).append(tString).append("ward").toString();
+ break;
+
+ case 11: // '\013'
+ tString = (new StringBuilder()).append(tString).append("11").toString();
+ break;
+
+ case 12: // '\f'
+ tString = (new StringBuilder()).append(tString).append("wait").toString();
+ break;
+
+ default:
+ tString = (new StringBuilder()).append(tString).append("wherearewenow").toString();
+ break;
+ }
+ if(tString.startsWith("streaming."))
+ aWorld.playRecord(tString.substring(10, tString.length()), (int)aX, (int)aY, (int)aZ);
+ else
+ aWorld.playSound(aX, aY, aZ, tString, 3F, tString.startsWith("note.") ? (float)Math.pow(2D, (double)(aStack.stackSize - 13) / 12D) : 1.0F, false);
+ }
+
+ private final HashSet mCapeList = new HashSet();
+ private final GT_CapeRenderer mCapeRenderer;
+ private long mAnimationTick;
+ private boolean mAnimationDirection;
+ private boolean isFirstClientPlayerTick;
+ private String mMessage;
+ private static List ROTATABLE_VANILLA_BLOCKS;
+ private final List mPosR;
+ private final List mPosG;
+ private final List mPosB;
+ private final List mPosA = Arrays.asList(new Object[0]);
+ private final List mNegR;
+ private final List mNegG;
+ private final List mNegB;
+ private final List mNegA = Arrays.asList(new Object[0]);
+ private final List mMoltenPosR;
+ private final List mMoltenPosG;
+ private final List mMoltenPosB;
+ private final List mMoltenPosA = Arrays.asList(new Object[0]);
+ private final List mMoltenNegR;
+ private final List mMoltenNegG;
+ private final List mMoltenNegB;
+ private final List mMoltenNegA = Arrays.asList(new Object[0]);
+
+ static
+ {
+ ROTATABLE_VANILLA_BLOCKS = Arrays.asList(new Block[] {
+ Blocks.piston, Blocks.sticky_piston, Blocks.furnace, Blocks.lit_furnace, Blocks.dropper, Blocks.dispenser, Blocks.chest, Blocks.trapped_chest, Blocks.ender_chest, Blocks.hopper,
+ Blocks.pumpkin, Blocks.lit_pumpkin
+ });
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/GT_DummyWorld.java b/src/main/java/gregtech/common/GT_DummyWorld.java
new file mode 100644
index 0000000000..d7b26522e8
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_DummyWorld.java
@@ -0,0 +1,147 @@
+package gregtech.common;
+
+import java.io.File;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.profiler.Profiler;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.WorldSettings;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraft.world.chunk.storage.IChunkLoader;
+import net.minecraft.world.storage.IPlayerFileData;
+import net.minecraft.world.storage.ISaveHandler;
+import net.minecraft.world.storage.WorldInfo;
+
+public class GT_DummyWorld
+ extends World
+{
+ public GT_IteratorRandom mRandom = new GT_IteratorRandom();
+ public ItemStack mLastSetBlock = null;
+
+ public GT_DummyWorld(ISaveHandler par1iSaveHandler, String par2Str, WorldProvider par3WorldProvider, WorldSettings par4WorldSettings, Profiler par5Profiler)
+ {
+ super(par1iSaveHandler, par2Str, par4WorldSettings, par3WorldProvider, par5Profiler);
+ this.rand = this.mRandom;
+ }
+
+ public GT_DummyWorld()
+ {
+ this(new ISaveHandler()
+ {
+ public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) {}
+
+ public void saveWorldInfo(WorldInfo var1) {}
+
+ public WorldInfo loadWorldInfo()
+ {
+ return null;
+ }
+
+ public IPlayerFileData getSaveHandler()
+ {
+ return null;
+ }
+
+ public File getMapFileFromName(String var1)
+ {
+ return null;
+ }
+
+ public IChunkLoader getChunkLoader(WorldProvider var1)
+ {
+ return null;
+ }
+
+ public void flush() {}
+
+ public void checkSessionLock() {}
+
+ public String getWorldDirectoryName()
+ {
+ return null;
+ }
+
+ public File getWorldDirectory()
+ {
+ return null;
+ }
+ }, "DUMMY_DIMENSION", null,
+// new WorldProvider(),
+//
+//
+//
+// new WorldSettings(new WorldInfo(new NBTTagCompound()))
+// {
+// public String getDimensionName()
+// {
+// return "DUMMY_DIMENSION";
+// }
+// }
+ new WorldSettings(new WorldInfo(new NBTTagCompound())), new Profiler());
+ }
+
+ protected IChunkProvider createChunkProvider()
+ {
+ return null;
+ }
+
+ public Entity getEntityByID(int aEntityID)
+ {
+ return null;
+ }
+
+ public boolean setBlock(int aX, int aY, int aZ, Block aBlock, int aMeta, int aFlags)
+ {
+ this.mLastSetBlock = new ItemStack(aBlock, 1, aMeta);
+ return true;
+ }
+
+ public float getSunBrightnessFactor(float p_72967_1_)
+ {
+ return 1.0F;
+ }
+
+ public BiomeGenBase getBiomeGenForCoords(int aX, int aZ)
+ {
+ if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) {
+ return BiomeGenBase.plains;
+ }
+ return BiomeGenBase.ocean;
+ }
+
+ public int getFullBlockLightValue(int aX, int aY, int aZ)
+ {
+ return 10;
+ }
+
+ public Block getBlock(int aX, int aY, int aZ)
+ {
+ if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) {
+ return aY == 64 ? Blocks.grass : Blocks.air;
+ }
+ return Blocks.air;
+ }
+
+ public int getBlockMetadata(int aX, int aY, int aZ)
+ {
+ return 0;
+ }
+
+ public boolean canBlockSeeTheSky(int aX, int aY, int aZ)
+ {
+ if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) {
+ return aY > 64;
+ }
+ return true;
+ }
+
+ protected int func_152379_p()
+ {
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_IteratorRandom.java b/src/main/java/gregtech/common/GT_IteratorRandom.java
new file mode 100644
index 0000000000..d61953d5c1
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_IteratorRandom.java
@@ -0,0 +1,18 @@
+package gregtech.common;
+
+import java.util.Random;
+
+public class GT_IteratorRandom
+ extends Random
+{
+ private static final long serialVersionUID = 1L;
+ public int mIterationStep = 2147483647;
+
+ public int nextInt(int aParameter)
+ {
+ if ((this.mIterationStep == 0) || (this.mIterationStep > aParameter)) {
+ this.mIterationStep = aParameter;
+ }
+ return --this.mIterationStep;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_MinableOreGenerator.java b/src/main/java/gregtech/common/GT_MinableOreGenerator.java
new file mode 100644
index 0000000000..252b8896cb
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_MinableOreGenerator.java
@@ -0,0 +1,79 @@
+package gregtech.common;
+
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.gen.feature.WorldGenerator;
+
+public class GT_MinableOreGenerator
+ extends WorldGenerator
+{
+ private Block minableBlockId;
+ private Block mBlock;
+ private int minableBlockMeta = 0;
+ private int numberOfBlocks;
+ private boolean allowVoid = false;
+
+ public GT_MinableOreGenerator(Block par1, int par2)
+ {
+ this.minableBlockId = par1;
+ this.numberOfBlocks = par2;
+ }
+
+ public GT_MinableOreGenerator(Block id, int meta, int number, boolean aAllowVoid, Block aBlock)
+ {
+ this(id, number);
+ this.minableBlockMeta = meta;
+ this.allowVoid = aAllowVoid;
+ this.mBlock = aBlock;
+ }
+
+ public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
+ {
+ float var6 = par2Random.nextFloat() * 3.141593F;
+ double var7 = par3 + 8 + MathHelper.sin(var6) * this.numberOfBlocks / 8.0F;
+ double var9 = par3 + 8 - MathHelper.sin(var6) * this.numberOfBlocks / 8.0F;
+ double var11 = par5 + 8 + MathHelper.cos(var6) * this.numberOfBlocks / 8.0F;
+ double var13 = par5 + 8 - MathHelper.cos(var6) * this.numberOfBlocks / 8.0F;
+ double var15 = par4 + par2Random.nextInt(3) - 2;
+ double var17 = par4 + par2Random.nextInt(3) - 2;
+ for (int var19 = 0; var19 <= this.numberOfBlocks; var19++)
+ {
+ double var20 = var7 + (var9 - var7) * var19 / this.numberOfBlocks;
+ double var22 = var15 + (var17 - var15) * var19 / this.numberOfBlocks;
+ double var24 = var11 + (var13 - var11) * var19 / this.numberOfBlocks;
+ double var26 = par2Random.nextDouble() * this.numberOfBlocks / 16.0D;
+ double var28 = (MathHelper.sin(var19 * 3.141593F / this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * 3.141593F / this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+ int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
+ for (int var38 = var32; var38 <= var35; var38++)
+ {
+ double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int var41 = var33; var41 <= var36; var41++)
+ {
+ double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int var44 = var34; var44 <= var37; var44++)
+ {
+ double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D);
+ Block block = par1World.getBlock(var38, var41, var44);
+ if ((var39 * var39 + var42 * var42 + var45 * var45 < 1.0D) && (((this.allowVoid) && (par1World.getBlock(var38, var41, var44) == Blocks.air)) || ((block != null) && (block.isReplaceableOreGen(par1World, var38, var41, var44, this.mBlock))))) {
+ par1World.setBlock(var38, var41, var44, this.minableBlockId, this.minableBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java
new file mode 100644
index 0000000000..3598b7e5c5
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Network.java
@@ -0,0 +1,113 @@
+package gregtech.common;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteStreams;
+import cpw.mods.fml.common.network.FMLEmbeddedChannel;
+import cpw.mods.fml.common.network.FMLOutboundHandler;
+import cpw.mods.fml.common.network.FMLOutboundHandler.OutboundTarget;
+import cpw.mods.fml.common.network.NetworkRegistry;
+import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
+import cpw.mods.fml.common.network.internal.FMLProxyPacket;
+import cpw.mods.fml.relauncher.Side;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.net.GT_Packet;
+import gregtech.api.net.GT_Packet_Block_Event;
+import gregtech.api.net.GT_Packet_Sound;
+import gregtech.api.net.GT_Packet_TileEntity;
+import gregtech.api.net.IGT_NetworkHandler;
+import gregtech.common.blocks.GT_Packet_Ores;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandler.Sharable;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.MessageToMessageCodec;
+import io.netty.util.Attribute;
+import java.util.EnumMap;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.server.management.PlayerManager;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldServer;
+import net.minecraft.world.chunk.Chunk;
+
+@ChannelHandler.Sharable
+public class GT_Network
+ extends MessageToMessageCodec<FMLProxyPacket, GT_Packet>
+ implements IGT_NetworkHandler
+{
+ private final EnumMap<Side, FMLEmbeddedChannel> mChannel;
+ private final GT_Packet[] mSubChannels;
+
+ public GT_Network()
+ {
+ this.mChannel = NetworkRegistry.INSTANCE.newChannel("GregTech", new ChannelHandler[] { this, new HandlerShared() });
+ this.mSubChannels = new GT_Packet[] { new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores() };
+ }
+
+ protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List<Object> aOutput)
+ throws Exception
+ {
+ aOutput.add(new FMLProxyPacket(Unpooled.buffer().writeByte(aPacket.getPacketID()).writeBytes(aPacket.encode()).copy(), (String)aContext.channel().attr(NetworkRegistry.FML_CHANNEL).get()));
+ }
+
+ protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List<Object> aOutput)
+ throws Exception
+ {
+ ByteArrayDataInput aData = ByteStreams.newDataInput(aPacket.payload().array());
+ aOutput.add(this.mSubChannels[aData.readByte()].decode(aData));
+ }
+
+ public void sendToPlayer(GT_Packet aPacket, EntityPlayerMP aPlayer)
+ {
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER);
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(aPlayer);
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).writeAndFlush(aPacket);
+ }
+
+ public void sendToAllAround(GT_Packet aPacket, NetworkRegistry.TargetPoint aPosition)
+ {
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT);
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(aPosition);
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.SERVER)).writeAndFlush(aPacket);
+ }
+
+ public void sendToServer(GT_Packet aPacket)
+ {
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.CLIENT)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER);
+ ((FMLEmbeddedChannel)this.mChannel.get(Side.CLIENT)).writeAndFlush(aPacket);
+ }
+
+ public void sendPacketToAllPlayersInRange(World aWorld, GT_Packet aPacket, int aX, int aZ)
+ {
+ if (!aWorld.isRemote) {
+ for (Object tObject : aWorld.playerEntities)
+ {
+ if (!(tObject instanceof EntityPlayerMP)) {
+ break;
+ }
+ EntityPlayerMP tPlayer = (EntityPlayerMP)tObject;
+ Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ);
+ if (tPlayer.getServerForPlayer().getPlayerManager().isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) {
+ sendToPlayer(aPacket, tPlayer);
+ }
+ }
+ }
+ }
+
+ @ChannelHandler.Sharable
+ static final class HandlerShared
+ extends SimpleChannelInboundHandler<GT_Packet>
+ {
+ protected void channelRead0(ChannelHandlerContext ctx, GT_Packet aPacket)
+ throws Exception
+ {
+ EntityPlayer aPlayer = GT_Values.GT.getThePlayer();
+ aPacket.process(aPlayer == null ? null : GT_Values.GT.getThePlayer().worldObj);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_PlayerActivityLogger.java b/src/main/java/gregtech/common/GT_PlayerActivityLogger.java
new file mode 100644
index 0000000000..9526c21dde
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_PlayerActivityLogger.java
@@ -0,0 +1,36 @@
+package gregtech.common;
+
+import gregtech.GT_Mod;
+import gregtech.api.util.GT_Log;
+import java.io.PrintStream;
+import java.util.ArrayList;
+
+public class GT_PlayerActivityLogger
+ implements Runnable
+{
+ public void run()
+ {
+ try
+ {
+ for (;;)
+ {
+ if (GT_Log.pal == null) {
+ return;
+ }
+ ArrayList<String> tList = GT_Mod.gregtechproxy.mBufferedPlayerActivity;
+ GT_Mod.gregtechproxy.mBufferedPlayerActivity = new ArrayList();
+ String tLastOutput = "";
+ int i = 0;
+ for (int j = tList.size(); i < j; i++)
+ {
+ if (!tLastOutput.equals(tList.get(i))) {
+ GT_Log.pal.println((String)tList.get(i));
+ }
+ tLastOutput = (String)tList.get(i);
+ }
+ Thread.sleep(10000L);
+ }
+ }
+ catch (Throwable e) {}
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
new file mode 100644
index 0000000000..5e6e2498c5
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -0,0 +1,1884 @@
+package gregtech.common;
+
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.common.IFuelHandler;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.ModContainer;
+import cpw.mods.fml.common.eventhandler.Event.Result;
+import cpw.mods.fml.common.eventhandler.EventBus;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.gameevent.TickEvent;
+import cpw.mods.fml.common.gameevent.TickEvent.Phase;
+import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
+import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent;
+import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent;
+import cpw.mods.fml.common.network.FMLNetworkEvent;
+import cpw.mods.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent;
+import cpw.mods.fml.common.network.IGuiHandler;
+import cpw.mods.fml.common.network.NetworkRegistry;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Tools;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.interfaces.IProjectileItem;
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.GT_Fluid;
+import gregtech.api.objects.GT_FluidStack;
+import gregtech.api.objects.GT_HashSet;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Shaped_Recipe;
+import gregtech.api.util.GT_Shapeless_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.entities.GT_Entity_Arrow;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.monster.EntityEnderman;
+import net.minecraft.entity.monster.EntitySkeleton;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemBow;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.CraftingManager;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.Potion;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.WorldSettings.GameType;
+import net.minecraft.world.gen.feature.WorldGenMinable;
+import net.minecraft.world.storage.ISaveHandler;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.event.ForgeEventFactory;
+import net.minecraftforge.event.entity.EntityJoinWorldEvent;
+import net.minecraftforge.event.entity.living.EnderTeleportEvent;
+import net.minecraftforge.event.entity.player.ArrowLooseEvent;
+import net.minecraftforge.event.entity.player.ArrowNockEvent;
+import net.minecraftforge.event.entity.player.PlayerInteractEvent;
+import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
+import net.minecraftforge.event.terraingen.OreGenEvent;
+import net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable;
+import net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerRegisterEvent;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
+import net.minecraftforge.oredict.OreDictionary.OreRegisterEvent;
+import net.minecraftforge.oredict.RecipeSorter;
+import net.minecraftforge.oredict.RecipeSorter.Category;
+import net.minecraftforge.oredict.ShapedOreRecipe;
+import net.minecraftforge.oredict.ShapelessOreRecipe;
+
+public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
+ public final HashSet<ItemStack> mRegisteredOres = new HashSet(10000);
+ public final ArrayList<String> mSoundNames = new ArrayList();
+ public final ArrayList<ItemStack> mSoundItems = new ArrayList();
+ public final ArrayList<Integer> mSoundCounts = new ArrayList();
+ public ArrayList<String> mBufferedPlayerActivity = new ArrayList();
+ public boolean mHardcoreCables = false;
+ public boolean mDisableVanillaOres = true;
+ public boolean mNerfDustCrafting = true;
+ public boolean mSortToTheEnd = true;
+ public boolean mCraftingUnification = true;
+ public boolean mInventoryUnification = true;
+ public boolean mIncreaseDungeonLoot = true;
+ public boolean mAxeWhenAdventure = true;
+ public boolean mSurvivalIntoAdventure = false;
+ public boolean mNerfedWoodPlank = true;
+ public boolean mNerfedVanillaTools = true;
+ public boolean mHardRock = false;
+ public boolean mHungerEffect = true;
+ public boolean mOnline = true;
+ public boolean mIgnoreTcon = true;
+ public boolean mDisableIC2Cables = false;
+ public boolean mAchievements = true;
+ public boolean mAE2Integration = true;
+ public int mSkeletonsShootGTArrows = 16;
+ public int mMaxEqualEntitiesAtOneSpot = 3;
+ public int mFlintChance = 30;
+ public int mItemDespawnTime = 6000;
+ public int mUpgradeCount = 4;
+
+ public static class OreDictEventContainer {
+ public final OreDictionary.OreRegisterEvent mEvent;
+ public final OrePrefixes mPrefix;
+ public final Materials mMaterial;
+ public final String mModID;
+
+ public OreDictEventContainer(OreDictionary.OreRegisterEvent aEvent, OrePrefixes aPrefix, Materials aMaterial, String aModID) {
+ this.mEvent = aEvent;
+ this.mPrefix = aPrefix;
+ this.mMaterial = aMaterial;
+ this.mModID = ((aModID == null) || (aModID.equals("UNKNOWN")) ? null : aModID);
+ }
+ }
+
+ private World mUniverse = null;
+ private boolean isFirstServerWorldTick = true;
+ private boolean mOreDictActivated = false;
+ private final Collection<OreDictEventContainer> mEvents = new HashSet();
+ private final Collection<String> mIgnoredItems = new HashSet(Arrays.asList(new String[] { "itemGhastTear", "itemFlint", "itemClay", "itemBucketSaltWater",
+ "itemBucketFreshWater", "itemBucketWater", "itemRock", "itemReed", "itemArrow", "itemSaw", "itemKnife", "itemHammer", "itemChisel", "itemRubber",
+ "itemEssence", "itemIlluminatedPanel", "itemSkull", "itemRawRubber", "itemBacon", "itemJetpackAccelerator", "itemLazurite", "itemIridium",
+ "itemTear", "itemClaw", "itemFertilizer", "itemTar", "itemSlimeball", "itemCoke", "itemBeeswax", "itemBeeQueen", "itemForcicium", "itemForcillium",
+ "itemRoyalJelly", "itemHoneydew", "itemHoney", "itemPollen", "itemReedTypha", "itemSulfuricAcid", "itemPotash", "itemCompressedCarbon",
+ "itemBitumen", "itemBioFuel", "itemCokeSugar", "itemCokeCactus", "itemCharcoalSugar", "itemCharcoalCactus", "itemSludge", "itemEnrichedAlloy",
+ "itemQuicksilver", "itemMercury", "itemOsmium", "itemUltimateCircuit", "itemEnergizedStar", "itemAntimatterMolecule", "itemAntimatterGlob",
+ "itemCoal", "itemBoat", "itemHerbalMedicineCake", "itemCakeSponge", "itemFishandPumpkinCakeSponge", "itemSoulCleaver", "itemInstantCake",
+ "itemWhippingCream", "itemGlisteningWhippingCream", "itemCleaver", "itemHerbalMedicineWhippingCream", "itemStrangeWhippingCream",
+ "itemBlazeCleaver", "itemBakedCakeSponge", "itemMagmaCake", "itemGlisteningCake", "itemOgreCleaver", "itemFishandPumpkinCake",
+ "itemMagmaWhippingCream", "itemMultimeter", "itemSuperconductor" }));
+ private final Collection<String> mIgnoredNames = new HashSet(Arrays.asList(new String[] { "grubBee", "chainLink", "candyCane", "bRedString", "bVial",
+ "bFlask", "anorthositeSmooth", "migmatiteSmooth", "slateSmooth", "travertineSmooth", "limestoneSmooth", "orthogneissSmooth", "marbleSmooth",
+ "honeyDrop", "lumpClay", "honeyEqualssugar", "flourEqualswheat", "bluestoneInsulated", "blockWaterstone", "blockSand", "blockTorch",
+ "blockPumpkin", "blockClothRock", "blockStainedHardenedClay", "blockQuartzPillar", "blockQuartzChiselled", "blockSpawner", "blockCloth", "mobHead",
+ "mobEgg", "enderFlower", "enderChest", "clayHardened", "dayGemMaterial", "nightGemMaterial", "snowLayer", "bPlaceholder", "hardenedClay",
+ "eternalLifeEssence", "sandstone", "wheatRice", "transdimBlock", "bambooBasket", "lexicaBotania", "livingwoodTwig", "redstoneCrystal",
+ "pestleAndMortar", "glowstone", "whiteStone", "stoneSlab", "transdimBlock", "clayBowl", "clayPlate", "ceramicBowl", "ceramicPlate", "ovenRack",
+ "clayCup", "ceramicCup", "batteryBox", "transmutationStone", "torchRedstoneActive", "coal", "charcoal", "cloth", "cobblestoneSlab",
+ "stoneBrickSlab", "cobblestoneWall", "stoneBrickWall", "cobblestoneStair", "stoneBrickStair", "blockCloud", "blockDirt", "blockTyrian",
+ "blockCarpet", "blockFft", "blockLavastone", "blockHolystone", "blockConcrete", "sunnariumPart", "brSmallMachineCyaniteProcessor", "meteoriteCoal",
+ "blockCobble", "pressOreProcessor", "crusherOreProcessor", "grinderOreProcessor", "blockRubber", "blockHoney", "blockHoneydew", "blockPeat",
+ "blockRadioactive", "blockSlime", "blockCocoa", "blockSugarCane", "blockLeather", "blockClayBrick", "solarPanelHV", "cableRedNet", "stoneBowl",
+ "crafterWood", "taintedSoil", "brickXyEngineering", "breederUranium", "wireMill", "chunkLazurite", "aluminumNatural", "aluminiumNatural",
+ "naturalAluminum", "naturalAluminium", "antimatterMilligram", "antimatterGram", "strangeMatter", "coalGenerator", "electricFurnace",
+ "unfinishedTank", "valvePart", "aquaRegia", "leatherSeal", "leatherSlimeSeal", "hambone", "slimeball", "clay", "enrichedUranium", "camoPaste",
+ "antiBlock", "burntQuartz", "salmonRaw","blockHopper" ,"blockEnderObsidian","blockIcestone","blockMagicWood","blockEnderCore","blockHeeEndium",
+ "oreHeeEndPowder","oreHeeStardust","oreHeeIgneousRock","oreHeeInstabilityOrb","crystalPureFluix","shardNether","gemFluorite",
+ "stickObsidian","caveCrystal","shardCrystal","dyeCrystal"}));
+ private final Collection<String> mInvalidNames = new HashSet(Arrays.asList(new String[] { "diamondShard", "redstoneRoot", "obsidianStick", "bloodstoneOre",
+ "universalCable", "bronzeTube", "ironTube", "netherTube", "obbyTube", "infiniteBattery", "eliteBattery", "advancedBattery", "10kEUStore",
+ "blueDye", "MonazitOre", "quartzCrystal", "whiteLuminiteCrystal", "darkStoneIngot", "invisiumIngot", "demoniteOrb", "enderGem", "starconiumGem",
+ "osmoniumIngot", "tapaziteGem", "zectiumIngot", "foolsRubyGem", "rubyGem", "meteoriteGem", "adamiteShard", "sapphireGem", "copperIngot",
+ "ironStick", "goldStick", "diamondStick", "reinforcedStick", "draconicStick", "emeraldStick", "copperStick", "tinStick", "silverStick",
+ "bronzeStick", "steelStick", "leadStick", "manyullynStick", "arditeStick", "cobaltStick", "aluminiumStick", "alumiteStick", "oilsandsOre",
+ "copperWire", "superconductorWire", "sulfuricAcid", "conveyorBelt", "ironWire", "aluminumWire", "aluminiumWire", "silverWire", "tinWire",
+ "dustSiliconSmall", "AluminumOre", "plateHeavyT2", "blockWool", "alloyPlateEnergizedHardened", "gasWood", "alloyPlateEnergized", "SilverOre",
+ "LeadOre", "TinOre", "CopperOre", "silverOre", "leadOre", "tinOre", "copperOre", "bauxiteOre", "HSLivingmetalIngot", "oilMoving", "oilStill",
+ "oilBucket", "petroleumOre", "dieselFuel", "diamondNugget", "planks", "wood", "stick", "sticks", "naquadah", "obsidianRod", "stoneRod",
+ "thaumiumRod", "steelRod", "netherrackRod", "woodRod", "ironRod", "cactusRod", "flintRod", "copperRod", "cobaltRod", "alumiteRod", "blueslimeRod",
+ "arditeRod", "manyullynRod", "bronzeRod", "boneRod", "slimeRod", "redalloyBundled", "bluestoneBundled", "infusedteslatiteInsulated",
+ "redalloyInsulated", "infusedteslatiteBundled" }));
+
+ public GT_Proxy() {
+ GameRegistry.registerFuelHandler(this);
+ MinecraftForge.EVENT_BUS.register(this);
+ MinecraftForge.ORE_GEN_BUS.register(this);
+ FMLCommonHandler.instance().bus().register(this);
+ GregTech_API.sThaumcraftCompat = (IThaumcraftCompat) GT_Utility.callConstructor("gregtech.common.GT_ThaumcraftCompat", 0, null, GT_Values.D1,
+ new Object[0]);
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ onFluidContainerRegistration(new FluidContainerRegistry.FluidContainerRegisterEvent(tData));
+ }
+ for (String tOreName : OreDictionary.getOreNames()) {
+ ItemStack tOreStack;
+ for (Iterator i$ = OreDictionary.getOres(tOreName).iterator(); i$.hasNext(); registerOre(new OreDictionary.OreRegisterEvent(tOreName, tOreStack))) {
+ tOreStack = (ItemStack) i$.next();
+ }
+ }
+ }
+
+ public void onPreLoad() {
+ GT_Log.out.println("GT_Mod: Preload-Phase started!");
+ GT_Log.ore.println("GT_Mod: Preload-Phase started!");
+
+ GregTech_API.sPreloadStarted = true;
+ this.mIgnoreTcon = GregTech_API.sOPStuff.get(ConfigCategories.general, "ignoreTConstruct", true);
+ NetworkRegistry.INSTANCE.registerGuiHandler(GT_Values.GT, this);
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) {
+ tData.fluid.amount = 0;
+ break;
+ }
+ }
+ GT_Log.out.println("GT_Mod: Getting required Items of other Mods.");
+ ItemList.TE_Slag.set(GT_ModHandler.getModItem("ThermalExpansion", "slag", 1L));
+ ItemList.TE_Slag_Rich.set(GT_ModHandler.getModItem("ThermalExpansion", "slagRich", 1L));
+ ItemList.TE_Rockwool.set(GT_ModHandler.getModItem("ThermalExpansion", "rockwool", 1L));
+ ItemList.TE_Hardened_Glass.set(GT_ModHandler.getModItem("ThermalExpansion", "glassHardened", 1L));
+
+ ItemList.RC_ShuntingWire.set(GT_ModHandler.getModItem("Railcraft", "tile.railcraft.machine.delta", 1L, 0));
+ ItemList.RC_ShuntingWireFrame.set(GT_ModHandler.getModItem("Railcraft", "tile.railcraft.frame", 1L, 0));
+ ItemList.RC_Rail_Standard.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 0));
+ ItemList.RC_Rail_Adv.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 1));
+ ItemList.RC_Rail_Wooden.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 2));
+ ItemList.RC_Rail_HS.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 3));
+ ItemList.RC_Rail_Reinforced.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 4));
+ ItemList.RC_Rail_Electric.set(GT_ModHandler.getModItem("Railcraft", "part.rail", 1L, 5));
+ ItemList.RC_Tie_Wood.set(GT_ModHandler.getModItem("Railcraft", "part.tie", 1L, 0));
+ ItemList.RC_Tie_Stone.set(GT_ModHandler.getModItem("Railcraft", "part.tie", 1L, 1));
+ ItemList.RC_Bed_Wood.set(GT_ModHandler.getModItem("Railcraft", "part.railbed", 1L, 0));
+ ItemList.RC_Bed_Stone.set(GT_ModHandler.getModItem("Railcraft", "part.railbed", 1L, 1));
+ ItemList.RC_Rebar.set(GT_ModHandler.getModItem("Railcraft", "part.rebar", 1L));
+ ItemList.Tool_Sword_Steel.set(GT_ModHandler.getModItem("Railcraft", "tool.steel.sword", 1L));
+ ItemList.Tool_Pickaxe_Steel.set(GT_ModHandler.getModItem("Railcraft", "tool.steel.pickaxe", 1L));
+ ItemList.Tool_Shovel_Steel.set(GT_ModHandler.getModItem("Railcraft", "tool.steel.shovel", 1L));
+ ItemList.Tool_Axe_Steel.set(GT_ModHandler.getModItem("Railcraft", "tool.steel.axe", 1L));
+ ItemList.Tool_Hoe_Steel.set(GT_ModHandler.getModItem("Railcraft", "tool.steel.hoe", 1L));
+
+ ItemList.TF_LiveRoot.set(GT_ModHandler.getModItem("TwilightForest", "item.liveRoot", 1L, 0));
+ ItemList.TF_Vial_FieryBlood.set(GT_ModHandler.getModItem("TwilightForest", "item.fieryBlood", 1L));
+ ItemList.TF_Vial_FieryTears.set(GT_ModHandler.getModItem("TwilightForest", "item.fieryTears", 1L));
+
+ ItemList.FR_Lemon.set(GT_ModHandler.getModItem("Forestry", "fruits", 1L, 3));
+ ItemList.FR_Mulch.set(GT_ModHandler.getModItem("Forestry", "mulch", 1L));
+ ItemList.FR_Fertilizer.set(GT_ModHandler.getModItem("Forestry", "fertilizerCompound", 1L));
+ ItemList.FR_Compost.set(GT_ModHandler.getModItem("Forestry", "fertilizerBio", 1L));
+ ItemList.FR_Silk.set(GT_ModHandler.getModItem("Forestry", "craftingMaterial", 1L, 2));
+ ItemList.FR_Wax.set(GT_ModHandler.getModItem("Forestry", "beeswax", 1L));
+ ItemList.FR_WaxCapsule.set(GT_ModHandler.getModItem("Forestry", "waxCapsule", 1L));
+ ItemList.FR_RefractoryWax.set(GT_ModHandler.getModItem("Forestry", "refractoryWax", 1L));
+ ItemList.FR_RefractoryCapsule.set(GT_ModHandler.getModItem("Forestry", "refractoryEmpty", 1L));
+ ItemList.FR_Bee_Drone.set(GT_ModHandler.getModItem("Forestry", "beeDroneGE", 1L));
+ ItemList.FR_Bee_Princess.set(GT_ModHandler.getModItem("Forestry", "beePrincessGE", 1L));
+ ItemList.FR_Bee_Queen.set(GT_ModHandler.getModItem("Forestry", "beeQueenGE", 1L));
+ ItemList.FR_Tree_Sapling.set(GT_ModHandler.getModItem("Forestry", "sapling", 1L, GT_ModHandler.getModItem("Forestry", "saplingGE", 1L)));
+ ItemList.FR_Butterfly.set(GT_ModHandler.getModItem("Forestry", "butterflyGE", 1L));
+ ItemList.FR_Larvae.set(GT_ModHandler.getModItem("Forestry", "beeLarvaeGE", 1L));
+ ItemList.FR_Serum.set(GT_ModHandler.getModItem("Forestry", "serumGE", 1L));
+ ItemList.FR_Caterpillar.set(GT_ModHandler.getModItem("Forestry", "caterpillarGE", 1L));
+ ItemList.FR_PollenFertile.set(GT_ModHandler.getModItem("Forestry", "pollenFertile", 1L));
+ ItemList.FR_Stick.set(GT_ModHandler.getModItem("Forestry", "oakStick", 1L));
+ ItemList.FR_Casing_Impregnated.set(GT_ModHandler.getModItem("Forestry", "impregnatedCasing", 1L));
+ ItemList.FR_Casing_Sturdy.set(GT_ModHandler.getModItem("Forestry", "sturdyMachine", 1L));
+ ItemList.FR_Casing_Hardened.set(GT_ModHandler.getModItem("Forestry", "hardenedMachine", 1L));
+
+ ItemList.Bottle_Empty.set(new ItemStack(Items.glass_bottle, 1));
+
+ ItemList.Cell_Universal_Fluid.set(GT_ModHandler.getIC2Item("FluidCell", 1L));
+ ItemList.Cell_Empty.set(GT_ModHandler.getIC2Item("cell", 1L, GT_ModHandler.getIC2Item("cellEmpty", 1L, GT_ModHandler.getIC2Item("emptyCell", 1L))));
+ ItemList.Cell_Water.set(GT_ModHandler.getIC2Item("waterCell", 1L, GT_ModHandler.getIC2Item("cellWater", 1L)));
+ ItemList.Cell_Lava.set(GT_ModHandler.getIC2Item("lavaCell", 1L, GT_ModHandler.getIC2Item("cellLava", 1L)));
+ ItemList.Cell_Air.set(GT_ModHandler.getIC2Item("airCell", 1L, GT_ModHandler.getIC2Item("cellAir", 1L, GT_ModHandler.getIC2Item("cellOxygen", 1L))));
+
+ ItemList.IC2_Item_Casing_Iron.set(GT_ModHandler.getIC2Item("casingiron", 1L));
+ ItemList.IC2_Item_Casing_Gold.set(GT_ModHandler.getIC2Item("casinggold", 1L));
+ ItemList.IC2_Item_Casing_Bronze.set(GT_ModHandler.getIC2Item("casingbronze", 1L));
+ ItemList.IC2_Item_Casing_Copper.set(GT_ModHandler.getIC2Item("casingcopper", 1L));
+ ItemList.IC2_Item_Casing_Tin.set(GT_ModHandler.getIC2Item("casingtin", 1L));
+ ItemList.IC2_Item_Casing_Lead.set(GT_ModHandler.getIC2Item("casinglead", 1L));
+ ItemList.IC2_Item_Casing_Steel.set(GT_ModHandler.getIC2Item("casingadviron", 1L));
+ ItemList.IC2_Spray_WeedEx.set(GT_ModHandler.getIC2Item("weedEx", 1L));
+ ItemList.IC2_Fuel_Can_Empty.set(GT_ModHandler.getIC2Item("fuelCan", 1L,
+ GT_ModHandler.getIC2Item("fuelCanEmpty", 1L, GT_ModHandler.getIC2Item("emptyFuelCan", 1L))));
+ ItemList.IC2_Fuel_Can_Filled.set(GT_ModHandler.getIC2Item("filledFuelCan", 1L));
+ ItemList.IC2_Mixed_Metal_Ingot.set(GT_ModHandler.getIC2Item("mixedMetalIngot", 1L));
+ ItemList.IC2_Fertilizer.set(GT_ModHandler.getIC2Item("fertilizer", 1L));
+ ItemList.IC2_CoffeeBeans.set(GT_ModHandler.getIC2Item("coffeeBeans", 1L));
+ ItemList.IC2_CoffeePowder.set(GT_ModHandler.getIC2Item("coffeePowder", 1L));
+ ItemList.IC2_Hops.set(GT_ModHandler.getIC2Item("hops", 1L));
+ ItemList.IC2_Resin.set(GT_ModHandler.getIC2Item("resin", 1L));
+ ItemList.IC2_Plantball.set(GT_ModHandler.getIC2Item("plantBall", 1L));
+ ItemList.IC2_PlantballCompressed.set(GT_ModHandler.getIC2Item("compressedPlantBall", 1L, ItemList.IC2_Plantball.get(1L, new Object[0])));
+ ItemList.IC2_Crop_Seeds.set(GT_ModHandler.getIC2Item("cropSeed", 1L));
+ ItemList.IC2_Grin_Powder.set(GT_ModHandler.getIC2Item("grinPowder", 1L));
+ ItemList.IC2_Energium_Dust.set(GT_ModHandler.getIC2Item("energiumDust", 1L));
+ ItemList.IC2_Scrap.set(GT_ModHandler.getIC2Item("scrap", 1L));
+ ItemList.IC2_Scrapbox.set(GT_ModHandler.getIC2Item("scrapBox", 1L));
+ ItemList.IC2_Fuel_Rod_Empty.set(GT_ModHandler.getIC2Item("fuelRod", 1L));
+ ItemList.IC2_Food_Can_Empty.set(GT_ModHandler.getIC2Item("tinCan", 1L));
+ ItemList.IC2_Food_Can_Filled.set(GT_ModHandler.getIC2Item("filledTinCan", 1L, 0));
+ ItemList.IC2_Food_Can_Spoiled.set(GT_ModHandler.getIC2Item("filledTinCan", 1L, 1));
+ ItemList.IC2_Industrial_Diamond.set(GT_ModHandler.getIC2Item("industrialDiamond", 1L, new ItemStack(Items.diamond, 1)));
+ ItemList.IC2_Compressed_Coal_Ball.set(GT_ModHandler.getIC2Item("compressedCoalBall", 1L));
+ ItemList.IC2_Compressed_Coal_Chunk.set(GT_ModHandler.getIC2Item("coalChunk", 1L));
+ ItemList.IC2_ShaftIron.set(GT_ModHandler.getIC2Item("ironshaft", 1L));
+ ItemList.IC2_ShaftSteel.set(GT_ModHandler.getIC2Item("steelshaft", 1L));
+
+ ItemList.IC2_SuBattery.set(GT_ModHandler.getIC2Item("suBattery", 1L));
+ ItemList.IC2_ReBattery.set(GT_ModHandler.getIC2Item("reBattery", 1L));
+ ItemList.IC2_AdvBattery.set(GT_ModHandler.getIC2Item("advBattery", 1L));
+ ItemList.IC2_EnergyCrystal.set(GT_ModHandler.getIC2Item("energyCrystal", 1L));
+ ItemList.IC2_LapotronCrystal.set(GT_ModHandler.getIC2Item("lapotronCrystal", 1L));
+
+ ItemList.IC2_LapotronCrystal.set(GT_ModHandler.getIC2Item("lapotronCrystal", 1L));
+ ItemList.IC2_LapotronCrystal.set(GT_ModHandler.getIC2Item("lapotronCrystal", 1L));
+ ItemList.IC2_LapotronCrystal.set(GT_ModHandler.getIC2Item("lapotronCrystal", 1L));
+
+ ItemList.Tool_Sword_Bronze.set(GT_ModHandler.getIC2Item("bronzeSword", 1L));
+ ItemList.Tool_Pickaxe_Bronze.set(GT_ModHandler.getIC2Item("bronzePickaxe", 1L));
+ ItemList.Tool_Shovel_Bronze.set(GT_ModHandler.getIC2Item("bronzeShovel", 1L));
+ ItemList.Tool_Axe_Bronze.set(GT_ModHandler.getIC2Item("bronzeAxe", 1L));
+ ItemList.Tool_Hoe_Bronze.set(GT_ModHandler.getIC2Item("bronzeHoe", 1L));
+ ItemList.IC2_ForgeHammer.set(GT_ModHandler.getIC2Item("ForgeHammer", 1L));
+ ItemList.IC2_WireCutter.set(GT_ModHandler.getIC2Item("cutter", 1L));
+
+ ItemList.Credit_Iron.set(GT_ModHandler.getIC2Item("coin", 1L));
+
+ ItemList.Circuit_Basic.set(GT_ModHandler.getIC2Item("electronicCircuit", 1L));
+ ItemList.Circuit_Advanced.set(GT_ModHandler.getIC2Item("advancedCircuit", 1L));
+
+ ItemList.Upgrade_Overclocker.set(GT_ModHandler.getIC2Item("overclockerUpgrade", 1L));
+ ItemList.Upgrade_Battery.set(GT_ModHandler.getIC2Item("energyStorageUpgrade", 1L));
+
+ ItemList.Dye_Bonemeal.set(new ItemStack(Items.dye, 1, 15));
+ ItemList.Dye_SquidInk.set(new ItemStack(Items.dye, 1, 0));
+ ItemList.Dye_Cocoa.set(new ItemStack(Items.dye, 1, 3));
+
+ ItemList.Book_Written_00.set(new ItemStack(Items.written_book, 1, 0));
+
+ ItemList.Food_Baked_Bread.set(new ItemStack(Items.bread, 1, 0));
+ ItemList.Food_Raw_Potato.set(new ItemStack(Items.potato, 1, 0));
+ ItemList.Food_Baked_Potato.set(new ItemStack(Items.baked_potato, 1, 0));
+ ItemList.Food_Poisonous_Potato.set(new ItemStack(Items.poisonous_potato, 1, 0));
+
+ OrePrefixes.bottle.mContainerItem = ItemList.Bottle_Empty.get(1L, new Object[0]);
+ OrePrefixes.bucket.mContainerItem = new ItemStack(Items.bucket, 1);
+ OrePrefixes.cellPlasma.mContainerItem = ItemList.Cell_Empty.get(1L, new Object[0]);
+ OrePrefixes.cell.mContainerItem = ItemList.Cell_Empty.get(1L, new Object[0]);
+
+ GregTech_API.sFrostHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sFrostHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sFrostHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sFrostHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+
+ GregTech_API.sHeatHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sHeatHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sHeatHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sHeatHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+
+ GregTech_API.sBioHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sBioHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sBioHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sBioHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+
+ GregTech_API.sGasHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sGasHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sGasHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sGasHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+
+ GregTech_API.sRadioHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sRadioHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sRadioHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sRadioHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+
+ GregTech_API.sElectroHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GregTech_API.sElectroHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GregTech_API.sElectroHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GregTech_API.sElectroHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+ GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_helmet, 1, 32767));
+ GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_chestplate, 1, 32767));
+ GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_leggings, 1, 32767));
+ GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_boots, 1, 32767));
+
+ GT_ModHandler.sNonReplaceableItems.add(new ItemStack(Items.bow, 1, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(new ItemStack(Items.fishing_rod, 1, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(ItemList.IC2_ForgeHammer.getWithDamage(1L, 32767L, new Object[0]));
+ GT_ModHandler.sNonReplaceableItems.add(ItemList.IC2_WireCutter.getWithDamage(1L, 32767L, new Object[0]));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("painter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("blackPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("redPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("greenPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("brownPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("bluePainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("purplePainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cyanPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("lightGreyPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("darkGreyPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("pinkPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("limePainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("yellowPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cloudPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("magentaPainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("orangePainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("whitePainter", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cfPack", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("jetpack", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("treetap", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("weedEx", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("staticBoots", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("compositeArmor", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "part.turbine.disk", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "part.turbine.blade", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "part.turbine.rotor", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "borehead.diamond", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "borehead.steel", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Railcraft", "borehead.iron", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.plateNaga", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.legsNaga", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.arcticHelm", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.arcticPlate", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.arcticLegs", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.arcticBoots", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.yetiHelm", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.yetiPlate", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.yetiLegs", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("TwilightForest", "item.yetiBoots", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("appliedenergistics2", "item.ToolCertusQuartzCuttingKnife", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("appliedenergistics2", "item.ToolNetherQuartzCuttingKnife", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "apiaristHelmet", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "apiaristChest", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "apiaristLegs", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "apiaristBoots", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "frameUntreated", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "frameImpregnated", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "frameProven", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("Forestry", "waxCast", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("GalacticraftCore", "item.sensorGlasses", 1L, 32767));
+ GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem("IC2NuclearControl", "ItemToolThermometer", 1L, 32767));
+
+ RecipeSorter.register("gregtech:shaped", GT_Shaped_Recipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped before:minecraft:shapeless");
+ RecipeSorter.register("gregtech:shapeless", GT_Shapeless_Recipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless");
+ }
+
+ public void onLoad() {
+ GT_Log.out.println("GT_Mod: Beginning Load-Phase.");
+ GT_Log.ore.println("GT_Mod: Beginning Load-Phase.");
+ GT_OreDictUnificator.registerOre("cropChilipepper", GT_ModHandler.getModItem("magicalcrops", "magicalcrops_CropProduce", 1L, 2));
+ GT_OreDictUnificator.registerOre("cropTomato", GT_ModHandler.getModItem("magicalcrops", "magicalcrops_CropProduce", 1L, 8));
+ GT_OreDictUnificator.registerOre("cropGrape", GT_ModHandler.getModItem("magicalcrops", "magicalcrops_CropProduce", 1L, 4));
+ GT_OreDictUnificator.registerOre("cropTea", GT_ModHandler.getModItem("ganyssurface", "teaLeaves", 1L, 0));
+
+ GregTech_API.sLoadStarted = true;
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) {
+ tData.fluid.amount = 0;
+ break;
+ }
+ }
+ }
+
+ public void onPostLoad() {
+ GT_Log.out.println("GT_Mod: Beginning PostLoad-Phase.");
+ GT_Log.ore.println("GT_Mod: Beginning PostLoad-Phase.");
+ if (GT_Log.pal != null) {
+ new Thread(new GT_PlayerActivityLogger()).start();
+ }
+ GregTech_API.sPostloadStarted = true;
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) {
+ tData.fluid.amount = 0;
+ break;
+ }
+ }
+ GT_Log.out.println("GT_Mod: Adding Configs specific for MetaTileEntities");
+ for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) {
+ try {
+ for (; i < GregTech_API.METATILEENTITIES.length; i++) {
+ if (GregTech_API.METATILEENTITIES[i] != null) {
+ GregTech_API.METATILEENTITIES[i].onConfigLoad(GregTech_API.sMachineFile);
+ }
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Adding Tool Usage Crafting Recipes for OreDict Items.");
+ long tBits = GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED
+ | GT_ModHandler.RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL | GT_ModHandler.RecipeBits.NOT_REMOVABLE;
+ for (Materials aMaterial : Materials.VALUES) {
+ if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)) {
+ if (!aMaterial.contains(SubTag.NO_SMASHING)) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.hammerplating, aMaterial.toString(), true)) {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), tBits, new Object[] { "h", "X", "X",
+ Character.valueOf('X'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), tBits,
+ new Object[] { "H", "X", Character.valueOf('H'), ToolDictNames.craftingToolForgeHammer, Character.valueOf('X'),
+ OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(
+ GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L),
+ tBits,
+ new Object[] { "H", "X", Character.valueOf('H'), ToolDictNames.craftingToolForgeHammer, Character.valueOf('X'),
+ OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.ingotDouble.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L), tBits,
+ new Object[] { "H", "X", Character.valueOf('H'), ToolDictNames.craftingToolForgeHammer, Character.valueOf('X'),
+ OrePrefixes.ingotDouble.get(aMaterial) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.hammermultiingot, aMaterial.toString(), true)) {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingotDouble, aMaterial, 1L), tBits, new Object[] { "I", "I", "h",
+ Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingotTriple, aMaterial, 1L), tBits, new Object[] { "I", "B", "h",
+ Character.valueOf('I'), OrePrefixes.ingotDouble.get(aMaterial), Character.valueOf('B'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler
+ .addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingotQuadruple, aMaterial, 1L), tBits,
+ new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.ingotTriple.get(aMaterial), Character.valueOf('B'),
+ OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingotQuintuple, aMaterial, 1L), tBits,
+ new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.ingotQuadruple.get(aMaterial), Character.valueOf('B'),
+ OrePrefixes.ingot.get(aMaterial) });
+ }
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L), tBits, new Object[] { "PIh", "P ",
+ "f ", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L), tBits, new Object[] { "II ", "IIh",
+ "II ", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L), tBits, new Object[] { "PIh", "f ",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L), tBits, new Object[] { "PII", "f h",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L), tBits, new Object[] { "PP", "PP", "hf",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L), tBits, new Object[] { "PP ", "fh ",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L), tBits, new Object[] { "PPI", "hf ",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(
+ GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
+ tBits,
+ new Object[] { "fPh", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'),
+ OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L), tBits, new Object[] { " P ", "fPh",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L), tBits,
+ new Object[] { "h ", " X", Character.valueOf('X'), OrePrefixes.stick.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L), tBits,
+ new Object[] { "ShS", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial) });
+ }
+ if (!aMaterial.contains(SubTag.NO_WORKING)) {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L), tBits,
+ new Object[] { "s", "X", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L), tBits,
+ new Object[] { "f ", " X", Character.valueOf('X'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 2L), tBits,
+ new Object[] { "s ", " X", Character.valueOf('X'), OrePrefixes.stick.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L), tBits,
+ new Object[] { "fX", "X ", Character.valueOf('X'), OrePrefixes.bolt.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L), tBits,
+ new Object[] { "fX", "X ", Character.valueOf('X'), OrePrefixes.nugget.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L), tBits, new Object[] { "PhP", "SRf", "PdP",
+ Character.valueOf('P'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial) : OrePrefixes.plate.get(aMaterial),
+ Character.valueOf('R'), OrePrefixes.ring.get(aMaterial), Character.valueOf('S'), OrePrefixes.screw.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L), tBits,
+ new Object[] { "sf", "G ", Character.valueOf('G'), OrePrefixes.gemFlawless.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 2L), tBits,
+ new Object[] { "sf", "G ", Character.valueOf('G'), OrePrefixes.gemExquisite.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L), tBits,
+ new Object[] { "Xx", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L), tBits,
+ new Object[] { "Xx", Character.valueOf('X'), OrePrefixes.foil.get(aMaterial) });
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L), tBits, new Object[] { "fPd", "SPS", " P ",
+ Character.valueOf('P'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial) : OrePrefixes.plateDouble.get(aMaterial),
+ Character.valueOf('R'), OrePrefixes.ring.get(aMaterial), Character.valueOf('S'), OrePrefixes.screw.get(aMaterial) });
+
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.arrowGtWood, aMaterial, 1L), tBits, new Object[] { " A", " S ",
+ "F ", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), OreDictNames.craftingFeather,
+ Character.valueOf('A'), OrePrefixes.toolHeadArrow.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.arrowGtPlastic, aMaterial, 1L), tBits, new Object[] { " A", " S ",
+ "F ", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic), Character.valueOf('F'), OreDictNames.craftingFeather,
+ Character.valueOf('A'), OrePrefixes.toolHeadArrow.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadArrow, aMaterial, 1L), tBits,
+ new Object[] { "Xf", Character.valueOf('X'), OrePrefixes.gemChipped.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadArrow, aMaterial, 3L), tBits,
+ new Object[] { (aMaterial.contains(SubTag.WOOD) ? 115 : 'x') + "Pf", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L), tBits, new Object[] { "GG ", "G ",
+ "f ", Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L), tBits, new Object[] { "GG ", "f ",
+ " ", Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L), tBits, new Object[] { "GGG", "f ",
+ Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L), tBits, new Object[] { "GG", "GG", " f",
+ Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L), tBits,
+ new Object[] { "GGf", Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L), tBits, new Object[] { "GGG", " f ",
+ " ", Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L), tBits,
+ new Object[] { "fG", Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L), tBits, new Object[] { " G", "fG",
+ Character.valueOf('G'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L), tBits, new Object[] { "fX",
+ Character.valueOf('X'), OrePrefixes.toolHeadShovel.get(aMaterial) });
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadBuzzSaw, aMaterial, 1L), tBits, new Object[] { "wXh", "X X",
+ "fXx", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadWrench, aMaterial, 1L), tBits, new Object[] { "hXW", "XRX",
+ "WXd", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel),
+ Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel), Character.valueOf('W'), OrePrefixes.screw.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadChainsaw, aMaterial, 1L), tBits, new Object[] { "SRS", "XhX",
+ "SRS", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel),
+ Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L), tBits, new Object[] { "XSX", "XSX",
+ "ShS", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel) });
+ switch (aMaterial) {
+ case Wood:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L), tBits, new Object[] { "P ", " s",
+ Character.valueOf('P'), OrePrefixes.plank.get(aMaterial) });
+ break;
+ case Stone:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L), tBits, new Object[] { "P ", " f",
+ Character.valueOf('P'), OrePrefixes.stoneSmooth });
+ break;
+ default:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L), tBits,
+ new Object[] { "P ", aMaterial.contains(SubTag.WOOD) ? " s" : " h", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial) });
+ }
+ switch (aMaterial) {
+ case Wood:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L), tBits, new Object[] { "SPS", "PsP", "SPS",
+ Character.valueOf('P'), OrePrefixes.plank.get(aMaterial), Character.valueOf('S'), OrePrefixes.stick.get(aMaterial) });
+ break;
+ case Stone:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L), tBits, new Object[] { "SPS", "PfP", "SPS",
+ Character.valueOf('P'), OrePrefixes.stoneSmooth, Character.valueOf('S'), new ItemStack(Blocks.stone_button, 1, 32767) });
+ break;
+ default:
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L), tBits, new Object[] { "SPS", "PwP", "SPS",
+ Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('S'), OrePrefixes.stick.get(aMaterial) });
+ }
+ }
+ if (aMaterial.contains(SubTag.SMELTING_TO_GEM)) {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), tBits, new Object[] { "XXX", "XXX", "XXX",
+ Character.valueOf('X'), OrePrefixes.nugget.get(aMaterial) });
+ } else {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), tBits, new Object[] { "XXX", "XXX", "XXX",
+ Character.valueOf('X'), OrePrefixes.nugget.get(aMaterial) });
+ }
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.crushedCentrifuged.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.crystalline.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.crystal.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.crushedPurified.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.cleanGravel.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.reduced.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.clump.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.shard.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.crushed.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), tBits, new Object[] { "h", "X",
+ Character.valueOf('X'), OrePrefixes.dirtyGravel.get(aMaterial) });
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 4L), tBits,
+ new Object[] { " X", " ", Character.valueOf('X'), OrePrefixes.dust.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 9L), tBits,
+ new Object[] { "X ", " ", Character.valueOf('X'), OrePrefixes.dust.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tBits,
+ new Object[] { "XX", "XX", Character.valueOf('X'), OrePrefixes.dustSmall.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tBits,
+ new Object[] { "XXX", "XXX", "XXX", Character.valueOf('X'), OrePrefixes.dustTiny.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 16L), tBits, new Object[] { "Xc", Character.valueOf('X'),
+ OrePrefixes.crateGtDust.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 16L), tBits, new Object[] { "Xc", Character.valueOf('X'),
+ OrePrefixes.crateGtGem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 16L), tBits, new Object[] { "Xc",
+ Character.valueOf('X'), OrePrefixes.crateGtIngot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 16L), tBits, new Object[] { "Xc",
+ Character.valueOf('X'), OrePrefixes.crateGtPlate.get(aMaterial) });
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.gemFlawed.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.gemFlawless.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L), tBits,
+ new Object[] { "h", "X", Character.valueOf('X'), OrePrefixes.gemExquisite.get(aMaterial) });
+ if ((aMaterial.contains(SubTag.MORTAR_GRINDABLE)) && (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, aMaterial.name(), true))) {
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.gemChipped.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.gemFlawed.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.gem.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.gemFlawless.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 4L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.gemExquisite.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tBits,
+ new Object[] { "X", "m", Character.valueOf('X'), OrePrefixes.plate.get(aMaterial) });
+ }
+ }
+ }
+ }
+
+ public void onServerStarting() {
+ GT_Log.out.println("GT_Mod: ServerStarting-Phase started!");
+ GT_Log.ore.println("GT_Mod: ServerStarting-Phase started!");
+
+ this.mUniverse = null;
+ this.isFirstServerWorldTick = true;
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) {
+ tData.fluid.amount = 0;
+ break;
+ }
+ }
+ for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) {
+ try {
+ for (; i < GregTech_API.METATILEENTITIES.length; i++) {
+ if (GregTech_API.METATILEENTITIES[i] != null) {
+ GregTech_API.METATILEENTITIES[i].onServerStart();
+ }
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+
+ public void onServerStarted() {
+ GregTech_API.sWirelessRedstone.clear();
+ GT_FluidStack.fixAllThoseFuckingFluidIDs();
+
+ GT_Log.out.println("GT_Mod: Cleaning up all OreDict Crafting Recipes, which have an empty List in them, since they are never meeting any Condition.");
+ List tList = CraftingManager.getInstance().getRecipeList();
+ for (int i = 0; i < tList.size(); i++) {
+ if ((tList.get(i) instanceof ShapedOreRecipe)) {
+ for (Object tObject : ((ShapedOreRecipe) tList.get(i)).getInput()) {
+ if (((tObject instanceof List)) && (((List) tObject).isEmpty())) {
+ tList.remove(i--);
+ break;
+ }
+ }
+ } else if ((tList.get(i) instanceof ShapelessOreRecipe)) {
+ for (Object tObject : ((ShapelessOreRecipe) tList.get(i)).getInput()) {
+ if (((tObject instanceof List)) && (((List) tObject).isEmpty())) {
+ tList.remove(i--);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ public void onServerStopping() {
+ File tSaveDirectory = getSaveDirectory();
+ GregTech_API.sWirelessRedstone.clear();
+ if (tSaveDirectory != null) {
+ for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) {
+ try {
+ for (; i < GregTech_API.METATILEENTITIES.length; i++) {
+ if (GregTech_API.METATILEENTITIES[i] != null) {
+ GregTech_API.METATILEENTITIES[i].onWorldSave(tSaveDirectory);
+ }
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ this.mUniverse = null;
+ }
+
+ @SubscribeEvent
+ public void onClientConnectedToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent aEvent) {
+ }
+
+ @SubscribeEvent
+ public void onArrowNockEvent(ArrowNockEvent aEvent) {
+ if ((!aEvent.isCanceled()) && (GT_Utility.isStackValid(aEvent.result))
+ && (GT_Utility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory) != null)) {
+ aEvent.entityPlayer.setItemInUse(aEvent.result, aEvent.result.getItem().getMaxItemUseDuration(aEvent.result));
+ aEvent.setCanceled(true);
+ }
+ }
+
+ @SubscribeEvent
+ public void onArrowLooseEvent(ArrowLooseEvent aEvent) {
+ ItemStack aArrow = GT_Utility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory);
+ if ((!aEvent.isCanceled()) && (GT_Utility.isStackValid(aEvent.bow)) && (aArrow != null) && ((aEvent.bow.getItem() instanceof ItemBow))) {
+ float tSpeed = aEvent.charge / 20.0F;
+ tSpeed = (tSpeed * tSpeed + tSpeed * 2.0F) / 3.0F;
+ if (tSpeed < 0.1D) {
+ return;
+ }
+ if (tSpeed > 1.0D) {
+ tSpeed = 1.0F;
+ }
+ EntityArrow tArrowEntity = ((IProjectileItem) aArrow.getItem()).getProjectile(SubTag.PROJECTILE_ARROW, aArrow, aEvent.entityPlayer.worldObj,
+ aEvent.entityPlayer, tSpeed * 2.0F);
+ if (tSpeed >= 1.0F) {
+ tArrowEntity.setIsCritical(true);
+ }
+ int tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, aEvent.bow);
+ if (tLevel > 0) {
+ tArrowEntity.setDamage(tArrowEntity.getDamage() + tLevel * 0.5D + 0.5D);
+ }
+ tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, aEvent.bow);
+ if (tLevel > 0) {
+ tArrowEntity.setKnockbackStrength(tLevel);
+ }
+ tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, aEvent.bow);
+ if (tLevel > 0) {
+ tArrowEntity.setFire(tLevel * 100);
+ }
+ aEvent.bow.damageItem(1, aEvent.entityPlayer);
+ aEvent.bow.getItem();
+ aEvent.entityPlayer.worldObj.playSoundAtEntity(aEvent.entityPlayer, "random.bow", 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 1.2F) + tSpeed
+ * 0.5F);
+
+ tArrowEntity.canBePickedUp = 1;
+ if (!aEvent.entityPlayer.capabilities.isCreativeMode) {
+ aArrow.stackSize -= 1;
+ }
+ if (aArrow.stackSize == 0) {
+ GT_Utility.removeNullStacksFromInventory(aEvent.entityPlayer.inventory);
+ }
+ if (!aEvent.entityPlayer.worldObj.isRemote) {
+ aEvent.entityPlayer.worldObj.spawnEntityInWorld(tArrowEntity);
+ }
+ aEvent.setCanceled(true);
+ }
+ }
+
+ @SubscribeEvent
+ public void onEndermanTeleportEvent(EnderTeleportEvent aEvent) {
+ if (((aEvent.entityLiving instanceof EntityEnderman)) && (aEvent.entityLiving.getActivePotionEffect(Potion.weakness) != null)) {
+ aEvent.setCanceled(true);
+ }
+ }
+
+ @SubscribeEvent
+ public void onEntitySpawningEvent(EntityJoinWorldEvent aEvent) {
+ if ((aEvent.entity != null) && (!aEvent.entity.worldObj.isRemote)) {
+ if ((aEvent.entity instanceof EntityItem)) {
+ ((EntityItem) aEvent.entity).setEntityItemStack(GT_OreDictUnificator.get(((EntityItem) aEvent.entity).getEntityItem()));
+ }
+ if ((this.mSkeletonsShootGTArrows > 0) && (aEvent.entity.getClass() == EntityArrow.class)
+ && (aEvent.entity.worldObj.rand.nextInt(this.mSkeletonsShootGTArrows) == 0)
+ && ((((EntityArrow) aEvent.entity).shootingEntity instanceof EntitySkeleton))) {
+ aEvent.entity.worldObj.spawnEntityInWorld(new GT_Entity_Arrow((EntityArrow) aEvent.entity, (ItemStack) OrePrefixes.arrowGtWood.mPrefixedItems
+ .get(aEvent.entity.worldObj.rand.nextInt(OrePrefixes.arrowGtWood.mPrefixedItems.size()))));
+ aEvent.entity.setDead();
+ }
+ }
+ }
+
+ private static final EnumSet<OreGenEvent.GenerateMinable.EventType> PREVENTED_ORES = EnumSet.of(OreGenEvent.GenerateMinable.EventType.COAL,
+ new OreGenEvent.GenerateMinable.EventType[] { OreGenEvent.GenerateMinable.EventType.IRON, OreGenEvent.GenerateMinable.EventType.GOLD,
+ OreGenEvent.GenerateMinable.EventType.DIAMOND, OreGenEvent.GenerateMinable.EventType.REDSTONE, OreGenEvent.GenerateMinable.EventType.LAPIS,
+ OreGenEvent.GenerateMinable.EventType.QUARTZ });
+
+ @SubscribeEvent
+ public void onOreGenEvent(OreGenEvent.GenerateMinable aGenerator) {
+ if ((this.mDisableVanillaOres) && ((aGenerator.generator instanceof WorldGenMinable)) && (PREVENTED_ORES.contains(aGenerator.type))) {
+ aGenerator.setResult(Result.DENY);
+ }
+ }
+
+ private final DateFormat mDateFormat = DateFormat.getInstance();
+
+ private String getDataAndTime() {
+ return this.mDateFormat.format(new Date());
+ }
+
+ @SubscribeEvent
+ public void onPlayerInteraction(PlayerInteractEvent aEvent) {
+ if ((aEvent.entityPlayer == null) || (aEvent.entityPlayer.worldObj == null) || (aEvent.action == null) || (aEvent.world.provider == null)) {
+ return;
+ }
+ if ((!aEvent.entityPlayer.worldObj.isRemote) && (aEvent.action != null) && (aEvent.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR)
+ && (GT_Log.pal != null)) {
+ this.mBufferedPlayerActivity.add(getDataAndTime() + ";" + aEvent.action.name() + ";" + aEvent.entityPlayer.getDisplayName() + ";DIM:"
+ + aEvent.world.provider.dimensionId + ";" + aEvent.x + ";" + aEvent.y + ";" + aEvent.z + ";|;" + aEvent.x / 10 + ";" + aEvent.y / 10 + ";"
+ + aEvent.z / 10);
+ }
+ ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem();
+ if ((aStack != null) && (aEvent.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) && (aStack.getItem() == Items.flint_and_steel)) {
+ if ((!aEvent.world.isRemote) && (!aEvent.entityPlayer.capabilities.isCreativeMode) && (aEvent.world.rand.nextInt(100) >= this.mFlintChance)) {
+ aEvent.setCanceled(true);
+ aStack.damageItem(1, aEvent.entityPlayer);
+ if (aStack.getItemDamage() >= aStack.getMaxDamage()) {
+ aStack.stackSize -= 1;
+ }
+ if (aStack.stackSize <= 0) {
+ ForgeEventFactory.onPlayerDestroyItem(aEvent.entityPlayer, aStack);
+ }
+ }
+ return;
+ }
+ }
+
+ @SubscribeEvent
+ public void onBlockHarvestingEvent(BlockEvent.HarvestDropsEvent aEvent) {
+ if (aEvent.harvester != null) {
+ if ((!aEvent.world.isRemote) && (GT_Log.pal != null)) {
+ this.mBufferedPlayerActivity.add(getDataAndTime() + ";HARVEST_BLOCK;" + aEvent.harvester.getDisplayName() + ";DIM:"
+ + aEvent.world.provider.dimensionId + ";" + aEvent.x + ";" + aEvent.y + ";" + aEvent.z + ";|;" + aEvent.x / 10 + ";" + aEvent.y / 10
+ + ";" + aEvent.z / 10);
+ }
+ ItemStack aStack = aEvent.harvester.getCurrentEquippedItem();
+ if (aStack != null) {
+ if ((aStack.getItem() instanceof GT_MetaGenerated_Tool)) {
+ ((GT_MetaGenerated_Tool) aStack.getItem()).onHarvestBlockEvent(aEvent.drops, aStack, aEvent.harvester, aEvent.block, aEvent.x, aEvent.y,
+ aEvent.z, (byte) aEvent.blockMetadata, aEvent.fortuneLevel, aEvent.isSilkTouching, aEvent);
+ }
+ if (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, aStack) > 2) {
+ for (ItemStack tDrop : aEvent.drops) {
+ ItemStack tSmeltingOutput = GT_ModHandler.getSmeltingOutput(tDrop, false, null);
+ if (tSmeltingOutput != null) {
+ tDrop.stackSize *= tSmeltingOutput.stackSize;
+ tSmeltingOutput.stackSize = tDrop.stackSize;
+ GT_Utility.setStack(tDrop, tSmeltingOutput);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void registerOre(OreDictionary.OreRegisterEvent aEvent) {
+ ModContainer tContainer = Loader.instance().activeModContainer();
+ String aMod = tContainer == null ? "UNKNOWN" : tContainer.getModId();
+ String aOriginalMod = aMod;
+ if (GT_OreDictUnificator.isRegisteringOres()) {
+ aMod = "gregtech";
+ } else if (aMod.equals("gregtech")) {
+ aMod = "UNKNOWN";
+ }
+ if ((aEvent == null) || (aEvent.Ore == null) || (aEvent.Ore.getItem() == null) || (aEvent.Name == null) || (aEvent.Name.isEmpty())
+ || (aEvent.Name.replaceAll("_", "").length() - aEvent.Name.length() == 9)) {
+ if (aOriginalMod.equals("gregtech")) {
+ aOriginalMod = "UNKNOWN";
+ }
+ GT_Log.ore
+ .println(aOriginalMod
+ + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict.");
+ throw new IllegalArgumentException(
+ aOriginalMod
+ + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict.");
+ }
+ try {
+ aEvent.Ore.stackSize = 1;
+ if(this.mIgnoreTcon||aEvent.Ore.getUnlocalizedName().startsWith("item.oreberry")){
+ if ((aOriginalMod.toLowerCase().contains("xycraft")) || (aOriginalMod.toLowerCase().contains("tconstruct"))
+ || ((aOriginalMod.toLowerCase().contains("natura")) && (!aOriginalMod.toLowerCase().contains("natural")))) {
+ if (GT_Values.D1) {
+ GT_Log.ore.println(aMod + " -> " + aEvent.Name + " is getting ignored, because of racism. :P");
+ }
+ return;
+ }}
+ String tModToName = aMod + " -> " + aEvent.Name;
+ if ((this.mOreDictActivated) || (GregTech_API.sPostloadStarted) || ((this.mSortToTheEnd) && (GregTech_API.sLoadFinished))) {
+ tModToName = aOriginalMod + " --Late--> " + aEvent.Name;
+ }
+ if (((aEvent.Ore.getItem() instanceof ItemBlock)) || (GT_Utility.getBlockFromStack(aEvent.Ore) != Blocks.air)) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ }
+ this.mRegisteredOres.add(aEvent.Ore);
+ if ((aEvent.Name.startsWith("item")) && (this.mIgnoredItems.contains(aEvent.Name))) {
+ GT_Log.ore.println(tModToName);
+ if (aEvent.Name.equals("itemCopperWire")) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore);
+ }
+ if (aEvent.Name.equals("itemRubber")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Rubber, aEvent.Ore);
+ }
+ return;
+ }
+ if (this.mIgnoredNames.contains(aEvent.Name)) {
+ GT_Log.ore.println(tModToName + " is getting ignored via hardcode.");
+ return;
+ }
+ if (aEvent.Name.equals("stone")) {
+ GT_OreDictUnificator.registerOre("stoneSmooth", aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("cobblestone")) {
+ GT_OreDictUnificator.registerOre("stoneCobble", aEvent.Ore);
+ return;
+ }
+ if ((aEvent.Name.contains("|")) || (aEvent.Name.contains("*")) || (aEvent.Name.contains(":")) || (aEvent.Name.contains("."))
+ || (aEvent.Name.contains("$"))) {
+ GT_Log.ore.println(tModToName + " is using a private Prefix and is therefor getting ignored properly.");
+ return;
+ }
+ if (aEvent.Name.equals("copperWire")) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore);
+ }
+ if (aEvent.Name.equals("oreHeeEndrium")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ore, Materials.Endium, aEvent.Ore);
+ }
+ if (aEvent.Name.equals("sheetPlastic")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore);
+ }
+ if (aEvent.Name.equals("shardAir")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedAir, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("shardWater")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedWater, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("shardFire")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedFire, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("shardEarth")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEarth, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("shardOrder")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedOrder, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("shardEntropy")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEntropy, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("fieryIngot")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.FierySteel, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("ironwood")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.IronWood, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("steeleaf")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Steeleaf, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.equals("knightmetal")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Knightmetal, aEvent.Ore);
+ return;
+ }
+ if (aEvent.Name.contains(" ")) {
+ GT_Log.ore.println(tModToName + " is getting re-registered because the OreDict Name containing invalid spaces.");
+ GT_OreDictUnificator.registerOre(aEvent.Name.replaceAll(" ", ""), GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }));
+ aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag");
+ return;
+ }
+ if (this.mInvalidNames.contains(aEvent.Name)) {
+ GT_Log.ore.println(tModToName + " is wrongly registered and therefor getting ignored.");
+
+ return;
+ }
+ OrePrefixes aPrefix = OrePrefixes.getOrePrefix(aEvent.Name);
+ Materials aMaterial = Materials._NULL;
+ if ((aPrefix == OrePrefixes.nugget) && (aMod.equals("Thaumcraft")) && (aEvent.Ore.getItem().getUnlocalizedName().contains("ItemResource"))) {
+ return;
+ }
+ if (aPrefix == null) {
+ if (aEvent.Name.toLowerCase().equals(aEvent.Name)) {
+ GT_Log.ore.println(tModToName + " is invalid due to being solely lowercased.");
+ return;
+ }
+ if (aEvent.Name.toUpperCase().equals(aEvent.Name)) {
+ GT_Log.ore.println(tModToName + " is invalid due to being solely uppercased.");
+ return;
+ }
+ if (GT_Values.CU.contains(Character.valueOf(aEvent.Name.charAt(0)))) {
+ GT_Log.ore.println(tModToName + " is invalid due to the first character being uppercased.");
+ }
+ } else {
+ if (aPrefix.mDontUnificateActively) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ }
+ if (aPrefix != aPrefix.mPrefixInto) {
+ String tNewName = aEvent.Name.replaceFirst(aPrefix.toString(), aPrefix.mPrefixInto.toString());
+ if (!GT_OreDictUnificator.isRegisteringOres()) {
+ GT_Log.ore.println(tModToName + " uses a depricated Prefix, and is getting re-registered as " + tNewName);
+ }
+ GT_OreDictUnificator.registerOre(tNewName, aEvent.Ore);
+ return;
+ }
+ String tName = aEvent.Name.replaceFirst(aPrefix.toString(), "");
+ if (tName.length() > 0) {
+ if ((GT_Values.CU.contains(Character.valueOf(tName.charAt(0)))) || (GT_Values.CN.contains(Character.valueOf(tName.charAt(0))))
+ || (tName.charAt(0) == '_')) {
+ if (aPrefix.mIsMaterialBased) {
+ aMaterial = Materials.get(tName);
+ if (aMaterial != aMaterial.mMaterialInto) {
+ GT_OreDictUnificator.registerOre(aPrefix, aMaterial.mMaterialInto, aEvent.Ore);
+ if (!GT_OreDictUnificator.isRegisteringOres()) {
+ GT_Log.ore.println(tModToName + " uses a deprecated Material and is getting re-registered as "
+ + aPrefix.get(aMaterial.mMaterialInto));
+ }
+ return;
+ }
+ if (!aPrefix.isIgnored(aMaterial)) {
+ aPrefix.add(GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }));
+ }
+ if (aMaterial != Materials._NULL) {
+ Materials tReRegisteredMaterial;
+ for (Iterator i$ = aMaterial.mOreReRegistrations.iterator(); i$.hasNext(); GT_OreDictUnificator.registerOre(aPrefix,
+ tReRegisteredMaterial, aEvent.Ore)) {
+ tReRegisteredMaterial = (Materials) i$.next();
+ }
+ aMaterial.add(GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }));
+ if ((GregTech_API.sThaumcraftCompat != null) && (aPrefix.doGenerateItem(aMaterial)) && (!aPrefix.isIgnored(aMaterial))) {
+ long tAmount = aPrefix.mMaterialAmount < 0L ? 3628800L : aPrefix.mMaterialAmount;
+ List<TC_Aspects.TC_AspectStack> tAspects = new ArrayList();
+ TC_Aspects.TC_AspectStack tAspect;
+ for (Iterator i$ = aPrefix.mAspects.iterator(); i$.hasNext(); tAspect.addToAspectList(tAspects)) {
+ tAspect = (TC_Aspects.TC_AspectStack) i$.next();
+ }
+ tAspect = null;
+ for (Iterator i$ = aMaterial.mAspects.iterator(); i$.hasNext(); tAspect.copy(tAspect.mAmount * tAmount / 3628800L)
+ .addToAspectList(tAspects)) {
+ tAspect = (TC_Aspects.TC_AspectStack) i$.next();
+ }
+ GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }),
+ tAspects, aEvent.Name);
+ }
+ switch (aPrefix) {
+ case crystal:
+ if ((aMaterial == Materials.CertusQuartz) || (aMaterial == Materials.NetherQuartz) || (aMaterial == Materials.Fluix)) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.gem, aMaterial, aEvent.Ore);
+ }
+ break;
+ case gem:
+ switch (aMaterial) {
+ case Lapis:
+ case Sodalite:
+ GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore);
+ break;
+ case Lazurite:
+ GT_OreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore);
+ break;
+ case InfusedAir:
+ case InfusedWater:
+ case InfusedFire:
+ case InfusedEarth:
+ case InfusedOrder:
+ case InfusedEntropy:
+ GT_OreDictUnificator.registerOre(aMaterial.name().replaceFirst("Infused", "shard"), aEvent.Ore);
+ break;
+ case Chocolate:
+ GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore);
+ break;
+ case CertusQuartz:
+ case NetherQuartz:
+ GT_OreDictUnificator.registerOre(OrePrefixes.item.get(aMaterial), aEvent.Ore);
+ case Fluix:
+ case Quartz:
+ case Quartzite:
+ GT_OreDictUnificator.registerOre(OrePrefixes.crystal, aMaterial, aEvent.Ore);
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingQuartz, aEvent.Ore);
+ default:
+ break;
+ }
+ break;
+ case cableGt01:
+ if (aMaterial == Materials.Tin) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireTin, aEvent.Ore);
+ }
+ if (aMaterial == Materials.AnyCopper) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Gold) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireGold, aEvent.Ore);
+ }
+ if (aMaterial == Materials.AnyIron) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireIron, aEvent.Ore);
+ }
+ break;
+ case lens:
+ if ((aMaterial.contains(SubTag.TRANSPARENT)) && (aMaterial.mColor != Dyes._NULL)) {
+ GT_OreDictUnificator.registerOre("craftingLens" + aMaterial.mColor.toString().replaceFirst("dye", ""), aEvent.Ore);
+ }
+ break;
+ case plate:
+ if ((aMaterial == Materials.Plastic) || (aMaterial == Materials.Rubber)) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.sheet, aMaterial, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Silicon) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.item, aMaterial, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Wood) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ GT_OreDictUnificator.registerOre(OrePrefixes.plank, aMaterial, aEvent.Ore);
+ }
+ break;
+ case cell:
+ if (aMaterial == Materials.Empty) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ }
+ break;
+ case gearGt:
+ GT_OreDictUnificator.registerOre(OrePrefixes.gear, aMaterial, aEvent.Ore);
+ break;
+ case stick:
+ if (!GT_RecipeRegistrator.sRodMaterialList.contains(aMaterial)) {
+ GT_RecipeRegistrator.sRodMaterialList.add(aMaterial);
+ }
+ if (aMaterial == Materials.Wood) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ }
+ if ((aMaterial == Materials.Tin) || (aMaterial == Materials.Lead) || (aMaterial == Materials.SolderingAlloy)) {
+ GT_OreDictUnificator.registerOre(ToolDictNames.craftingToolSolderingMetal, aEvent.Ore);
+ }
+ break;
+ case dust:
+ if (aMaterial == Materials.Salt) {
+ GT_OreDictUnificator.registerOre("itemSalt", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Wood) {
+ GT_OreDictUnificator.registerOre("pulpWood", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Wheat) {
+ GT_OreDictUnificator.registerOre("foodFlour", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Lapis) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Lazurite) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Sodalite) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore);
+ }
+ if (aMaterial == Materials.Cocoa) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore);
+ GT_OreDictUnificator.registerOre("foodCocoapowder", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Coffee) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore);
+ }
+ if (aMaterial == Materials.BrownLimonite) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore);
+ }
+ if (aMaterial == Materials.YellowLimonite) {
+ GT_OreDictUnificator.registerOre(Dyes.dyeYellow, aEvent.Ore);
+ }
+ break;
+ case ingot:
+ if (aMaterial == Materials.Rubber) {
+ GT_OreDictUnificator.registerOre("itemRubber", aEvent.Ore);
+ }
+ if (aMaterial == Materials.FierySteel) {
+ GT_OreDictUnificator.registerOre("fieryIngot", aEvent.Ore);
+ }
+ if (aMaterial == Materials.IronWood) {
+ GT_OreDictUnificator.registerOre("ironwood", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Steeleaf) {
+ GT_OreDictUnificator.registerOre("steeleaf", aEvent.Ore);
+ }
+ if (aMaterial == Materials.Knightmetal) {
+ GT_OreDictUnificator.registerOre("knightmetal", aEvent.Ore);
+ }
+ if ((aMaterial == Materials.Brass) && (aEvent.Ore.getItemDamage() == 2)
+ && (aEvent.Ore.getUnlocalizedName().equals("item.ingotBrass"))
+ && (new ItemStack(aEvent.Ore.getItem(), 1, 0).getUnlocalizedName().contains("red"))) {
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.RedAlloy, new ItemStack(aEvent.Ore.getItem(), 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.BlueAlloy, new ItemStack(aEvent.Ore.getItem(), 1, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Brass, new ItemStack(aEvent.Ore.getItem(), 1, 2));
+ if(!mDisableIC2Cables){
+ GT_Values.RA.addWiremillRecipe(GT_ModHandler.getIC2Item("copperCableItem", 3L), new ItemStack(aEvent.Ore.getItem(), 1,
+ 8), 400, 1);
+ GT_Values.RA.addWiremillRecipe(GT_ModHandler.getIC2Item("ironCableItem", 6L),
+ new ItemStack(aEvent.Ore.getItem(), 1, 9), 400, 2);}
+ GT_Values.RA.addCutterRecipe(new ItemStack(aEvent.Ore.getItem(), 1, 3), new ItemStack(aEvent.Ore.getItem(), 16, 4),
+ null, 400, 8);
+ }
+ break;
+ default:
+ break;
+ }
+ if (aPrefix.mIsUnificatable && !aMaterial.mUnificatable) {
+ return;
+ }
+ } else {
+ for (Dyes tDye : Dyes.VALUES) {
+ if (aEvent.Name.endsWith(tDye.name().replaceFirst("dye", ""))) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ GT_Log.ore.println(tModToName+ " Oh man, why the fuck would anyone need a OreDictified Color for this, that is even too much for GregTech... do not report this, this is just a random Comment about how ridiculous this is.");
+ return;
+ }
+ }
+// System.out.println("Material Name: "+aEvent.Name+ " !!!Unknown Material detected!!! Please report to GregTech Intergalactical for additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just an Information, which you should pass to me.");
+// GT_Log.ore.println(tModToName + " uses an unknown Material. Report this to GregTech.");
+ return;
+ }
+ } else {
+ aPrefix.add(GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }));
+ }
+ }
+ } else if (aPrefix.mIsSelfReferencing) {
+ aPrefix.add(GT_Utility.copyAmount(1L, new Object[] { aEvent.Ore }));
+ } else {
+ GT_Log.ore.println(tModToName + " uses a Prefix as full OreDict Name, and is therefor invalid.");
+ aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag");
+ return;
+ }
+ switch (aPrefix) {
+ case dye:
+ if (GT_Utility.isStringValid(tName)) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.dye, aEvent.Ore);
+ }
+ break;
+ case stoneSmooth:
+ GT_OreDictUnificator.registerOre("stone", aEvent.Ore);
+ break;
+ case stoneCobble:
+ GT_OreDictUnificator.registerOre("cobblestone", aEvent.Ore);
+ break;
+ case plank:
+ if (tName.equals("Wood")) {
+ GT_OreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ }
+ break;
+ case slab:
+ if (tName.equals("Wood")) {
+ GT_OreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 1814400L, new MaterialStack[0]));
+ }
+ break;
+ case sheet:
+ if (tName.equals("Plastic")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore);
+ }
+ if (tName.equals("Rubber")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Rubber, aEvent.Ore);
+ }
+ break;
+ case crafting:
+ if (tName.equals("ToolSolderingMetal")) {
+ GregTech_API.registerSolderingMetal(aEvent.Ore);
+ }
+ if (tName.equals("IndustrialDiamond")) {
+ GT_OreDictUnificator.addToBlacklist(aEvent.Ore);
+ }
+ if (tName.equals("WireCopper")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.wire, Materials.Copper, aEvent.Ore);
+ }
+ break;
+ case wood:
+ if (tName.equals("Rubber")) {
+ GT_OreDictUnificator.registerOre("logRubber", aEvent.Ore);
+ }
+ break;
+ case food:
+ if (tName.equals("Cocoapowder")) {
+ GT_OreDictUnificator.registerOre(OrePrefixes.dust, Materials.Cocoa, aEvent.Ore);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ GT_Log.ore.println(tModToName);
+
+ OreDictEventContainer tOre = new OreDictEventContainer(aEvent, aPrefix, aMaterial, aMod);
+ if ((!this.mOreDictActivated) || (!GregTech_API.sUnificationEntriesRegistered)) {
+ this.mEvents.add(tOre);
+ } else {
+ this.mEvents.clear();
+ }
+ if (this.mOreDictActivated) {
+ registerRecipes(tOre);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ @SubscribeEvent
+ public void onFluidContainerRegistration(FluidContainerRegistry.FluidContainerRegisterEvent aFluidEvent) {
+ if ((aFluidEvent.data.filledContainer.getItem() == Items.potionitem) && (aFluidEvent.data.filledContainer.getItemDamage() == 0)) {
+ aFluidEvent.data.fluid.amount = 0;
+ }
+ GT_OreDictUnificator.addToBlacklist(aFluidEvent.data.emptyContainer);
+ GT_OreDictUnificator.addToBlacklist(aFluidEvent.data.filledContainer);
+ GT_Utility.addFluidContainerData(aFluidEvent.data);
+ }
+
+ @SubscribeEvent
+ public void onServerTickEvent(TickEvent.ServerTickEvent aEvent) {
+ }
+
+ @SubscribeEvent
+ public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) {
+ if (aEvent.side.isServer()) {
+ if (this.mUniverse == null) {
+ this.mUniverse = aEvent.world;
+ }
+ if (this.isFirstServerWorldTick) {
+ File tSaveDiretory = getSaveDirectory();
+ if (tSaveDiretory != null) {
+ this.isFirstServerWorldTick = false;
+ for (IMetaTileEntity tMetaTileEntity : GregTech_API.METATILEENTITIES) {
+ try {
+ if (tMetaTileEntity != null) {
+ tMetaTileEntity.onWorldLoad(tSaveDiretory);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ }
+ if ((aEvent.world.getTotalWorldTime() % 100L == 0L) && ((this.mItemDespawnTime != 6000) || (this.mMaxEqualEntitiesAtOneSpot > 0))) {
+ for (int i = 0; i < aEvent.world.loadedEntityList.size(); i++) {
+ if ((aEvent.world.loadedEntityList.get(i) instanceof Entity)) {
+ Entity tEntity = (Entity) aEvent.world.loadedEntityList.get(i);
+ if (((tEntity instanceof EntityItem)) && (this.mItemDespawnTime != 6000) && (((EntityItem) tEntity).lifespan == 6000)) {
+ ((EntityItem) tEntity).lifespan = this.mItemDespawnTime;
+ } else if (((tEntity instanceof EntityLivingBase)) && (this.mMaxEqualEntitiesAtOneSpot > 0) && (!(tEntity instanceof EntityPlayer))
+ && (((EntityLivingBase) tEntity).canBePushed()) && (((EntityLivingBase) tEntity).getHealth() > 0.0F)) {
+ List tList = tEntity.worldObj.getEntitiesWithinAABBExcludingEntity(tEntity,
+ tEntity.boundingBox.expand(0.20000000298023224D, 0.0D, 0.20000000298023224D));
+ Class tClass = tEntity.getClass();
+ int tEntityCount = 1;
+ if (tList != null) {
+ for (int j = 0; j < tList.size(); j++) {
+ if ((tList.get(j) != null) && (tList.get(j).getClass() == tClass)) {
+ tEntityCount++;
+ }
+ }
+ }
+ if (tEntityCount > this.mMaxEqualEntitiesAtOneSpot) {
+ tEntity.attackEntityFrom(DamageSource.inWall, tEntityCount - this.mMaxEqualEntitiesAtOneSpot);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onPlayerTickEventServer(TickEvent.PlayerTickEvent aEvent) {
+ if ((!aEvent.player.isDead) && (aEvent.phase == TickEvent.Phase.END) && (aEvent.side.isServer())) {
+ if ((aEvent.player.ticksExisted % 200 == 0) && (aEvent.player.capabilities.allowEdit) && (!aEvent.player.capabilities.isCreativeMode)
+ && (this.mSurvivalIntoAdventure)) {
+ aEvent.player.setGameType(GameType.ADVENTURE);
+ aEvent.player.capabilities.allowEdit = false;
+ if (this.mAxeWhenAdventure) {
+ GT_Utility.sendChatToPlayer(aEvent.player, "It's dangerous to go alone! Take this.");
+ aEvent.player.worldObj.spawnEntityInWorld(new EntityItem(aEvent.player.worldObj, aEvent.player.posX, aEvent.player.posY,
+ aEvent.player.posZ, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(6, 1, Materials.Flint, Materials.Wood, null)));
+ }
+ }
+ boolean tHungerEffect = (this.mHungerEffect) && (aEvent.player.ticksExisted % 2400 == 1200);
+ if (aEvent.player.ticksExisted % 120 == 0) {
+ int tCount = 64;
+ for (int i = 0; i < 36; i++) {
+ ItemStack tStack;
+ if ((tStack = aEvent.player.inventory.getStackInSlot(i)) != null) {
+ if (!aEvent.player.capabilities.isCreativeMode) {
+ GT_Utility.applyRadioactivity(aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize);
+ float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
+ if (tHeat != 0.0F) {
+ if (tHeat > 0.0F) {
+ GT_Utility.applyHeatDamage(aEvent.player, tHeat);
+ } else {
+ GT_Utility.applyFrostDamage(aEvent.player, -tHeat);
+ }
+ }
+ }
+ if (tHungerEffect) {
+ tCount += tStack.stackSize * 64 / Math.max(1, tStack.getMaxStackSize());
+ }
+ if (this.mInventoryUnification) {
+ GT_OreDictUnificator.setStack(true, tStack);
+ }
+ }
+ }
+ for (int i = 0; i < 4; i++) {
+ ItemStack tStack;
+ if ((tStack = aEvent.player.inventory.armorInventory[i]) != null) {
+ if (!aEvent.player.capabilities.isCreativeMode) {
+ GT_Utility.applyRadioactivity(aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize);
+ float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
+ if (tHeat != 0.0F) {
+ if (tHeat > 0.0F) {
+ GT_Utility.applyHeatDamage(aEvent.player, tHeat);
+ } else {
+ GT_Utility.applyFrostDamage(aEvent.player, -tHeat);
+ }
+ }
+ }
+ if (tHungerEffect) {
+ tCount += 256;
+ }
+ }
+ }
+ if (tHungerEffect) {
+ aEvent.player.addExhaustion(Math.max(1.0F, tCount / 666.6F));
+ }
+ }
+ }
+ }
+
+ public Object getServerGuiElement(int aID, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity)) {
+ IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
+ if (tMetaTileEntity != null) {
+ return tMetaTileEntity.getServerGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity);
+ }
+ }
+ return null;
+ }
+
+ public Object getClientGuiElement(int aID, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity)) {
+ IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
+ if (tMetaTileEntity != null) {
+ return tMetaTileEntity.getClientGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity);
+ }
+ }
+ return null;
+ }
+
+ public int getBurnTime(ItemStack aFuel) {
+ if ((aFuel == null) || (aFuel.getItem() == null)) {
+ return 0;
+ }
+ short rFuelValue = 0;
+ if ((aFuel.getItem() instanceof GT_MetaGenerated_Item)) {
+ Short tFuelValue = (Short) ((GT_MetaGenerated_Item) aFuel.getItem()).mBurnValues.get(Short.valueOf((short) aFuel.getItemDamage()));
+ if (tFuelValue != null) {
+ rFuelValue = (short) Math.max(rFuelValue, tFuelValue.shortValue());
+ }
+ }
+ NBTTagCompound tNBT = aFuel.getTagCompound();
+ if (tNBT != null) {
+ short tValue = tNBT.getShort("GT.ItemFuelValue");
+ rFuelValue = (short) Math.max(rFuelValue, tValue);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "gemSodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 4000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "crushedSodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 4000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustImpureSodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 4000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 4000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallSodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinySodium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 444);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "gemLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 6000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "crushedLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 6000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustImpureLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 6000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 6000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 2000);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinyLithium")) {
+ rFuelValue = (short) Math.max(rFuelValue, 888);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "gemLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 300);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "crushedLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 300);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustImpureLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 300);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 300);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 75);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinyLignite")) {
+ rFuelValue = (short) Math.max(rFuelValue, 33);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "gemCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "crushedCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustImpureCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 400);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinyCoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 177);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "gemCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "crushedCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustImpureCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 1600);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 400);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinyCharcoal")) {
+ rFuelValue = (short) Math.max(rFuelValue, 177);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustWood")) {
+ rFuelValue = (short) Math.max(rFuelValue, 100);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustSmallWood")) {
+ rFuelValue = (short) Math.max(rFuelValue, 25);
+ }
+ if (GT_OreDictUnificator.isItemStackInstanceOf(aFuel, "dustTinyWood")) {
+ rFuelValue = (short) Math.max(rFuelValue, 11);
+ }
+ if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Blocks.wooden_button, 1))) {
+ rFuelValue = (short) Math.max(rFuelValue, 150);
+ }
+ if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Blocks.ladder, 1))) {
+ rFuelValue = (short) Math.max(rFuelValue, 100);
+ }
+ if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Items.sign, 1))) {
+ rFuelValue = (short) Math.max(rFuelValue, 600);
+ }
+ if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Items.wooden_door, 1))) {
+ rFuelValue = (short) Math.max(rFuelValue, 600);
+ }
+ return rFuelValue;
+ }
+
+ public Fluid addAutogeneratedMoltenFluid(Materials aMaterial) {
+ return addFluid("molten." + aMaterial.name().toLowerCase(), "molten.autogenerated", "Molten " + aMaterial.mDefaultLocalName, aMaterial,
+ aMaterial.mMoltenRGBa, 4, aMaterial.mMeltingPoint <= 0 ? 1000 : aMaterial.mMeltingPoint, null, null, 0);
+ }
+
+ public Fluid addAutogeneratedPlasmaFluid(Materials aMaterial) {
+ return addFluid("plasma." + aMaterial.name().toLowerCase(), "plasma.autogenerated", aMaterial.mDefaultLocalName + " Plasma", aMaterial,
+ aMaterial.mMoltenRGBa, 3, 10000, GT_OreDictUnificator.get(OrePrefixes.cellPlasma, aMaterial, 1L), ItemList.Cell_Empty.get(1L, new Object[0]),
+ 1000);
+ }
+
+ public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK) {
+ return addFluid(aName, aLocalized, aMaterial, aState, aTemperatureK, null, null, 0);
+ }
+
+ public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK, ItemStack aFullContainer,
+ ItemStack aEmptyContainer, int aFluidAmount) {
+ return addFluid(aName, aName.toLowerCase(), aLocalized, aMaterial, null, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount);
+ }
+
+ public Fluid addFluid(String aName, String aTexture, String aLocalized, Materials aMaterial, short[] aRGBa, int aState, int aTemperatureK,
+ ItemStack aFullContainer, ItemStack aEmptyContainer, int aFluidAmount) {
+ aName = aName.toLowerCase();
+ Fluid rFluid = new GT_Fluid(aName, aTexture, aRGBa != null ? aRGBa : Dyes._NULL.getRGBA());
+ GT_LanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalized == null ? aName : aLocalized);
+ if (FluidRegistry.registerFluid(rFluid)) {
+ switch (aState) {
+ case 0:
+ rFluid.setGaseous(false);
+ rFluid.setViscosity(10000);
+ break;
+ case 1:
+ case 4:
+ rFluid.setGaseous(false);
+ rFluid.setViscosity(1000);
+ break;
+ case 2:
+ rFluid.setGaseous(true);
+ rFluid.setDensity(-100);
+ rFluid.setViscosity(200);
+ break;
+ case 3:
+ rFluid.setGaseous(true);
+ rFluid.setDensity(55536);
+ rFluid.setViscosity(10);
+ rFluid.setLuminosity(15);
+ }
+ } else {
+ rFluid = FluidRegistry.getFluid(aName);
+ }
+ if (rFluid.getTemperature() == new Fluid("test").getTemperature()) {
+ rFluid.setTemperature(aTemperatureK);
+ }
+ if (aMaterial != null) {
+ switch (aState) {
+ case 0:
+ aMaterial.mSolid = rFluid;
+ break;
+ case 1:
+ aMaterial.mFluid = rFluid;
+ break;
+ case 2:
+ aMaterial.mGas = rFluid;
+ break;
+ case 3:
+ aMaterial.mPlasma = rFluid;
+ break;
+ case 4:
+ aMaterial.mStandardMoltenFluid = rFluid;
+ }
+ }
+ if ((aFullContainer != null) && (aEmptyContainer != null)
+ && (!FluidContainerRegistry.registerFluidContainer(new FluidStack(rFluid, aFluidAmount), aFullContainer, aEmptyContainer))) {
+ GT_Values.RA.addFluidCannerRecipe(aFullContainer, GT_Utility.getContainerItem(aFullContainer, false), null, new FluidStack(rFluid, aFluidAmount));
+ }
+ return rFluid;
+ }
+
+ public File getSaveDirectory() {
+ return this.mUniverse == null ? null : this.mUniverse.getSaveHandler().getWorldDirectory();
+ }
+
+ public void registerUnificationEntries() {
+ GregTech_API.sUnification.mConfig.save();
+ GregTech_API.sUnification.mConfig.load();
+ GT_OreDictUnificator.resetUnificationEntries();
+ for (OreDictEventContainer tOre : this.mEvents) {
+ if ((!(tOre.mEvent.Ore.getItem() instanceof GT_MetaGenerated_Item)) && (tOre.mPrefix != null) && (tOre.mPrefix.mIsUnificatable)
+ && (tOre.mMaterial != null)) {
+ if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("enderio")&&tOre.mPrefix==OrePrefixes.ingot&&tOre.mMaterial==Materials.DarkSteel){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("thermalfoundation")&&tOre.mPrefix==OrePrefixes.dust&&tOre.mMaterial==Materials.Blizz){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("thermalfoundation")&&tOre.mPrefix==OrePrefixes.dust&&tOre.mMaterial==Materials.Pyrotheum){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("arsmagica2")&&tOre.mPrefix==OrePrefixes.dust&&tOre.mMaterial==Materials.Vinteum){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("arsmagica2")&&tOre.mPrefix==OrePrefixes.gem&&tOre.mMaterial==Materials.BlueTopaz){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("arsmagica2")&&tOre.mPrefix==OrePrefixes.gem&&tOre.mMaterial==Materials.Chimerite){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("arsmagica2")&&tOre.mPrefix==OrePrefixes.gem&&tOre.mMaterial==Materials.Moonstone){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("arsmagica2")&&tOre.mPrefix==OrePrefixes.gem&&tOre.mMaterial==Materials.Sunstone){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("rotarycraft")&&tOre.mPrefix==OrePrefixes.ingot&&tOre.mMaterial==Materials.HSLA){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("appliedenergistics2")&&tOre.mPrefix==OrePrefixes.gem&&tOre.mMaterial==Materials.CertusQuartz){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(tOre.mModID!=null&&tOre.mModID.toLowerCase().equals("appliedenergistics2")&&tOre.mPrefix==OrePrefixes.dust&&tOre.mMaterial==Materials.CertusQuartz){
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, true)), true);
+ }else if(GT_OreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) {
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true);
+ } else {
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null) && (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name, false)), true);
+ }
+ }
+ }
+ for (OreDictEventContainer tOre : this.mEvents) {
+ if (((tOre.mEvent.Ore.getItem() instanceof GT_MetaGenerated_Item)) && (tOre.mPrefix != null) && (tOre.mPrefix.mIsUnificatable)
+ && (tOre.mMaterial != null)) {
+ if (GT_OreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) {
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true);
+ } else {
+ GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false);
+ GT_OreDictUnificator.set(tOre.mPrefix,tOre.mMaterial,tOre.mEvent.Ore,(tOre.mModID != null)&&
+ (GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + tOre.mModID, tOre.mEvent.Name,false)), true);
+ }
+ }
+ }
+ GregTech_API.sUnificationEntriesRegistered = true;
+ GregTech_API.sUnification.mConfig.save();
+ GT_Recipe.reInit();
+ }
+
+ public void activateOreDictHandler() {
+ this.mOreDictActivated = true;
+ OreDictEventContainer tEvent;
+ for (Iterator i$ = this.mEvents.iterator(); i$.hasNext(); registerRecipes(tEvent)) {
+ tEvent = (OreDictEventContainer) i$.next();
+ }
+ }
+
+ private static final void registerRecipes(OreDictEventContainer aOre) {
+ if ((aOre.mEvent.Ore == null) || (aOre.mEvent.Ore.getItem() == null)) {
+ return;
+ }
+ if (aOre.mEvent.Ore.stackSize != 1) {
+ aOre.mEvent.Ore.stackSize = 1;
+ }
+ if (aOre.mPrefix != null) {
+ if (!aOre.mPrefix.isIgnored(aOre.mMaterial)) {
+ aOre.mPrefix.processOre(aOre.mMaterial == null ? Materials._NULL : aOre.mMaterial, aOre.mEvent.Name, aOre.mModID,
+ GT_Utility.copyAmount(1L, new Object[] { aOre.mEvent.Ore }));
+ }
+ } else {
+// System.out.println("Thingy Name: "+ aOre.mEvent.Name+ " !!!Unknown 'Thingy' detected!!! This Object seems to probably not follow a valid OreDictionary Convention, or I missed a Convention. Please report to GregTech Intergalactical for additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just an Information, which you should pass to me.");
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java
new file mode 100644
index 0000000000..bb9a173288
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_RecipeAdder.java
@@ -0,0 +1,729 @@
+package gregtech.common;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+import java.util.ArrayList;
+
+import crazypants.enderio.material.Material;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_RecipeAdder
+ implements IGT_RecipeAdder
+{
+ public boolean addFusionReactorRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt, int aStartEU)
+ {
+ return false;
+ }
+
+ @Override
+ public boolean addFusionReactorRecipe(FluidStack aInput1, FluidStack aInput2,FluidStack aOutput1, int aDuration, int aEUt, int aStartEU) {
+ if(aInput1==null||aInput2==null||aOutput1==null||aDuration<1||aEUt<1||aStartEU<1){
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sFusionRecipes.addRecipe( null, new FluidStack[] {aInput1, aInput2},new FluidStack[]{aOutput1}, aDuration, aEUt, aStartEU);
+ return true;
+ }
+
+ public boolean addCentrifugeRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int aDuration)
+ {
+ return addCentrifugeRecipe(aInput1, aInput2 < 0 ? ItemList.IC2_Fuel_Can_Empty.get(-aInput2, new Object[0]) : aInput2 > 0 ? ItemList.Cell_Empty.get(aInput2, new Object[0]) : null, null, null, aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6, null, aDuration, 5);
+ }
+
+ public boolean addCentrifugeRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int[] aChances, int aDuration, int aEUt)
+ {
+ if (((aInput1 == null) && (aFluidInput == null)) || ((aOutput1 == null) && (aFluidOutput == null))) {
+ return false;
+ }
+ if ((aInput1 != null) && ((aDuration = GregTech_API.sRecipeFile.get("centrifuge", aInput1, aDuration)) <= 0)) {
+ return false;
+ }
+ if ((aFluidInput != null) && ((aDuration = GregTech_API.sRecipeFile.get("centrifuge", aFluidInput.getFluid().getName(), aDuration)) <= 0)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 }, new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6 }, null, aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addElectrolyzerRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int aDuration, int aEUt)
+ {
+ return addElectrolyzerRecipe(aInput1, aInput2 < 0 ? ItemList.IC2_Fuel_Can_Empty.get(-aInput2, new Object[0]) : aInput2 > 0 ? ItemList.Cell_Empty.get(aInput2, new Object[0]) : null, null, null, aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6, null, aDuration, aEUt);
+ }
+
+ public boolean addElectrolyzerRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, ItemStack aOutput5, ItemStack aOutput6, int[] aChances, int aDuration, int aEUt)
+ {
+ if (((aInput1 == null) && (aFluidInput == null)) || ((aOutput1 == null) && (aFluidOutput == null))) {
+ return false;
+ }
+ if ((aInput1 != null) && ((aDuration = GregTech_API.sRecipeFile.get("electrolyzer", aInput1, aDuration)) <= 0)) {
+ return false;
+ }
+ if ((aFluidInput != null) && ((aDuration = GregTech_API.sRecipeFile.get("electrolyzer", aFluidInput.getFluid().getName(), aDuration)) <= 0)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 }, new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6 }, null, aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addChemicalRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput, int aDuration)
+ {
+ return addChemicalRecipe(aInput1, aInput2, null, null, aOutput, aDuration);
+ }
+
+ public boolean addChemicalRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput, int aDuration)
+ {
+ if (((aInput1 == null) && (aFluidInput == null)) || ((aOutput == null) && (aFluidOutput == null))) {
+ return false;
+ }
+ if ((aOutput != null) && ((aDuration = GregTech_API.sRecipeFile.get("chemicalreactor", aOutput, aDuration)) <= 0)) {
+ return false;
+ }
+ if ((aFluidOutput != null) && ((aDuration = GregTech_API.sRecipeFile.get("chemicalreactor", aFluidOutput.getFluid().getName(), aDuration)) <= 0)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sChemicalRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 }, new ItemStack[] { aOutput }, null, null, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, 30, 0);
+ return true;
+ }
+
+ public boolean addBlastRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt, int aLevel)
+ {
+ return addBlastRecipe(aInput1, aInput2, null, null, aOutput1, aOutput2, aDuration, aEUt, aLevel);
+ }
+
+ public boolean addBlastRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt, int aLevel)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("blastfurnace", aInput1, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sBlastRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 }, new ItemStack[] { aOutput1, aOutput2 }, null, null, new FluidStack[] { aFluidInput }, null, aDuration, aEUt, aLevel);
+ return true;
+ }
+
+ public boolean addCannerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("canning", aInput1, aDuration)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aEUt, aInput2, aDuration, aOutput1, aOutput2);
+ return true;
+ }
+
+ public boolean addAlloySmelterRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null || Materials.Graphite.contains(aInput1))) {
+ return false;
+ }
+ if ((aInput2 == null) && ((OrePrefixes.ingot.contains(aInput1)) || (OrePrefixes.dust.contains(aInput1)) || (OrePrefixes.gem.contains(aInput1)))) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("alloysmelting", aInput2 == null ? aInput1 : aOutput1, aDuration)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aInput2, aEUt, aDuration, aOutput1);
+ return true;
+ }
+
+ public boolean addCNCRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("cnc", aOutput1, aDuration)) <= 0) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean addLatheRecipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("lathe", aInput1, aDuration)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aOutput1, aOutput2, aDuration, aEUt);
+ return true;
+ }
+
+ public boolean addCutterRecipe(ItemStack aInput, FluidStack aLubricant, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aLubricant == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("cutting", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sCutterRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2 }, null, new FluidStack[] { aLubricant }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addCutterRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("cutting", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sCutterRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2 }, null, new FluidStack[] { Materials.Water.getFluid(Math.max(4, Math.min(1000, aDuration * aEUt / 320))) }, null, aDuration * 2, aEUt, 0);
+ GT_Recipe.GT_Recipe_Map.sCutterRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2 }, null, new FluidStack[] { GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, aDuration * aEUt / 426))) }, null, aDuration * 2, aEUt, 0);
+ GT_Recipe.GT_Recipe_Map.sCutterRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2 }, null, new FluidStack[] { Materials.Lubricant.getFluid(Math.max(1, Math.min(250, aDuration * aEUt / 1280))) }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addAssemblerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("assembling", aOutput1, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sAssemblerRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 == null ? aInput1 : aInput2 }, new ItemStack[] { aOutput1 }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addAssemblerRecipe(ItemStack aInput1, ItemStack aInput2, FluidStack aFluidInput, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("assembling", aOutput1, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sAssemblerRecipes.addRecipe(true, new ItemStack[] { aInput1, (ItemStack) (aInput2 == null ? new ItemStack[] { aInput1 } : aInput2) }, new ItemStack[] { aOutput1 }, null, new FluidStack[] { aFluidInput == null ? null : aFluidInput }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addWiremillRecipe(ItemStack aInput, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("wiremill", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sWiremillRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addPolarizerRecipe(ItemStack aInput, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("polarizer", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sPolarizerRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addBenderRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("bender", aInput1, aDuration)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aEUt, aDuration, aInput1, aOutput1);
+ return true;
+ }
+
+ public boolean addExtruderRecipe(ItemStack aInput, ItemStack aShape, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aShape == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("extruder", aOutput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sExtruderRecipes.addRecipe(true, new ItemStack[] { aInput, aShape }, new ItemStack[] { aOutput }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addSlicerRecipe(ItemStack aInput, ItemStack aShape, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aShape == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("slicer", aOutput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sSlicerRecipes.addRecipe(true, new ItemStack[] { aInput, aShape }, new ItemStack[] { aOutput }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addImplosionRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aInput2 = GregTech_API.sRecipeFile.get("implosion", aInput1, aInput2)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aInput2, aOutput1, aOutput2);
+ return true;
+ }
+ @Deprecated
+ public boolean addDistillationRecipe(ItemStack aInput1, int aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, int aDuration, int aEUt)
+ {
+// if ((aInput1 == null) || (aOutput1 == null)) {
+// return false;
+// }
+// if ((aDuration = GregTech_API.sRecipeFile.get("distillation", aInput1, aDuration)) <= 0) {
+// return false;
+// }
+// new GT_Recipe(aInput1, aInput2, aOutput1, aOutput2, aOutput3, aOutput4, aDuration, aEUt);
+// return true;
+ return false;
+ }
+
+ public boolean addDistillationTowerRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt){
+ if(aInput==null||aOutputs==null||aOutputs.length<1||aOutputs.length>5){return false;}
+ if((aDuration = GregTech_API.sRecipeFile.get("distillation", aInput.getUnlocalizedName(), aDuration))<=0){
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sDistillationRecipes.addRecipe(false, null,new ItemStack[]{ aOutput2}, null, new FluidStack[]{ aInput}, aOutputs, Math.max(1, aDuration), Math.max(1, aEUt), 0);
+ return false;
+ }
+
+ public boolean addVacuumFreezerRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("vacuumfreezer", aInput1, aDuration)) <= 0) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aOutput1, aDuration);
+ return true;
+ }
+
+ public boolean addGrinderRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4)
+ {
+ return false;
+ }
+
+ public boolean addFuel(ItemStack aInput1, ItemStack aOutput1, int aEU, int aType)
+ {
+ if (aInput1 == null) {
+ return false;
+ }
+ new GT_Recipe(aInput1, aOutput1, GregTech_API.sRecipeFile.get("fuel_" + aType, aInput1, aEU), aType);
+ return true;
+ }
+
+ public boolean addSonictronSound(ItemStack aItemStack, String aSoundName)
+ {
+ if ((aItemStack == null) || (aSoundName == null) || (aSoundName.equals(""))) {
+ return false;
+ }
+ GT_Mod.gregtechproxy.mSoundItems.add(aItemStack);
+ GT_Mod.gregtechproxy.mSoundNames.add(aSoundName);
+ if (aSoundName.startsWith("note.")) {
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ } else {
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ }
+ return true;
+ }
+
+ public boolean addForgeHammerRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt)
+ {
+ if ((aInput1 == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if (!GregTech_API.sRecipeFile.get("forgehammer", aOutput1, true)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sHammerRecipes.addRecipe(true, new ItemStack[] { aInput1 }, new ItemStack[] { aOutput1 }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addBoxingRecipe(ItemStack aContainedItem, ItemStack aEmptyBox, ItemStack aFullBox, int aDuration, int aEUt)
+ {
+ if ((aContainedItem == null) || (aFullBox == null)) {
+ return false;
+ }
+ if (!GregTech_API.sRecipeFile.get("boxing", aFullBox, true)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes.addRecipe(true, new ItemStack[] { aContainedItem, aEmptyBox }, new ItemStack[] { aFullBox }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addUnboxingRecipe(ItemStack aFullBox, ItemStack aContainedItem, ItemStack aEmptyBox, int aDuration, int aEUt)
+ {
+ if ((aFullBox == null) || (aContainedItem == null)) {
+ return false;
+ }
+ if (!GregTech_API.sRecipeFile.get("unboxing", aFullBox, true)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes.addRecipe(true, new ItemStack[] { aFullBox }, new ItemStack[] { aContainedItem, aEmptyBox }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addAmplifier(ItemStack aAmplifierItem, int aDuration, int aAmplifierAmountOutputted)
+ {
+ if ((aAmplifierItem == null) || (aAmplifierAmountOutputted <= 0)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("amplifier", aAmplifierItem, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sAmplifiers.addRecipe(true, new ItemStack[] { aAmplifierItem }, null, null, null, new FluidStack[] { Materials.UUAmplifier.getFluid(aAmplifierAmountOutputted) }, aDuration, 32, 0);
+ return true;
+ }
+
+ public boolean addBrewingRecipe(ItemStack aIngredient, Fluid aInput, Fluid aOutput, boolean aHidden)
+ {
+ if ((aIngredient == null) || (aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if (!GregTech_API.sRecipeFile.get("brewing", aOutput.getUnlocalizedName(), true)) {
+ return false;
+ }
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sBrewingRecipes.addRecipe(false, new ItemStack[] { aIngredient }, null, null, new FluidStack[] { new FluidStack(aInput, 750) }, new FluidStack[] { new FluidStack(aOutput, 750) }, 128, 4, 0);
+ if ((aHidden) && (tRecipe != null)) {
+ tRecipe.mHidden = true;
+ }
+ return true;
+ }
+
+ public boolean addFermentingRecipe(FluidStack aInput, FluidStack aOutput, int aDuration, boolean aHidden)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("fermenting", aOutput.getFluid().getUnlocalizedName(), aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sFermentingRecipes.addRecipe(false, null, null, null, new FluidStack[] { aInput }, new FluidStack[] { aOutput }, aDuration, 2, 0);
+ if ((aHidden) && (tRecipe != null)) {
+ tRecipe.mHidden = true;
+ }
+ return true;
+ }
+
+ public boolean addDistilleryRecipe(ItemStack aCircuit, FluidStack aInput, FluidStack aOutput, int aDuration, int aEUt, boolean aHidden)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("distillery", aOutput.getFluid().getUnlocalizedName(), aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sDistilleryRecipes.addRecipe(true, new ItemStack[] { aCircuit }, null, null, new FluidStack[] { aInput }, new FluidStack[] { aOutput }, aDuration, aEUt, 0);
+ if ((aHidden) && (tRecipe != null)) {
+ tRecipe.mHidden = true;
+ }
+ return true;
+ }
+
+ public boolean addFluidSolidifierRecipe(ItemStack aMold, FluidStack aInput, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aMold == null) || (aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if(aInput.isFluidEqual(Materials.PhasedGold.getMolten(144))){
+ aInput = Materials.VibrantAlloy.getMolten(aInput.amount);
+ }
+ if(aInput.isFluidEqual(Materials.PhasedIron.getMolten(144))){
+ aInput = Materials.PulsatingIron.getMolten(aInput.amount);
+ }
+
+ if ((aDuration = GregTech_API.sRecipeFile.get("fluidsolidifier", aOutput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes.addRecipe(true, new ItemStack[] { aMold }, new ItemStack[] { aOutput }, null, new FluidStack[] { aInput }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addFluidSmelterRecipe(ItemStack aInput, ItemStack aRemains, FluidStack aOutput, int aChance, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if(aOutput.isFluidEqual(Materials.PhasedGold.getMolten(1))){
+ aOutput = Materials.VibrantAlloy.getMolten(aOutput.amount);
+ }
+ if(aOutput.isFluidEqual(Materials.PhasedIron.getMolten(1))){
+ aOutput = Materials.PulsatingIron.getMolten(aOutput.amount);
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("fluidsmelter", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aRemains }, null, new int[] { aChance }, null, new FluidStack[] { aOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addFluidExtractionRecipe(ItemStack aInput, ItemStack aRemains, FluidStack aOutput, int aChance, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if(aOutput.isFluidEqual(Materials.PhasedGold.getMolten(1))){
+ aOutput = Materials.VibrantAlloy.getMolten(aOutput.amount);
+ }
+ if(aOutput.isFluidEqual(Materials.PhasedIron.getMolten(1))){
+ aOutput = Materials.PulsatingIron.getMolten(aOutput.amount);
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("fluidextractor", aInput, aDuration)) <= 0) {
+ return false;
+ }
+
+ GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aRemains }, null, new int[] { aChance }, null, new FluidStack[] { aOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addFluidCannerRecipe(ItemStack aInput, ItemStack aOutput, FluidStack aFluidInput, FluidStack aFluidOutput)
+ {
+ if ((aInput != null) && (aOutput != null))
+ {
+ if ((aFluidInput == null ? 1 : 0) != (aFluidOutput == null ? 1 : 0)) {}
+ }
+ else {
+ return false;
+ }
+ if (!GregTech_API.sRecipeFile.get("fluidcanner", aOutput, true)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput }, null, new FluidStack[] { aFluidInput == null ? null : aFluidInput }, new FluidStack[] { aFluidOutput == null ? null : aFluidOutput }, aFluidOutput == null ? aFluidInput.amount / 62 : aFluidOutput.amount / 62, 1, 0);
+ return true;
+ }
+
+ public boolean addChemicalBathRecipe(ItemStack aInput, FluidStack aBathingFluid, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aBathingFluid == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("chemicalbath", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2, aOutput3 }, null, aChances, new FluidStack[] { aBathingFluid }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addElectromagneticSeparatorRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput1 == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("electromagneticseparator", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput1, aOutput2, aOutput3 }, null, aChances, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addPrinterRecipe(ItemStack aInput, FluidStack aFluid, ItemStack aSpecialSlot, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aFluid == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("printer", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sPrinterRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput }, aSpecialSlot, null, new FluidStack[] { aFluid }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addAutoclaveRecipe(ItemStack aInput, FluidStack aFluid, ItemStack aOutput, int aChance, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aFluid == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("autoclave", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes.addRecipe(true, new ItemStack[] { aInput }, new ItemStack[] { aOutput }, null, new int[] { aChance }, new FluidStack[] { aFluid }, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addMixerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aInput3, ItemStack aInput4, FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput, int aDuration, int aEUt)
+ {
+ if (((aInput1 == null) && (aFluidInput == null)) || ((aOutput == null) && (aFluidOutput == null))) {
+ return false;
+ }
+ if ((aOutput != null) && ((aDuration = GregTech_API.sRecipeFile.get("mixer", aOutput, aDuration)) <= 0)) {
+ return false;
+ }
+ if ((aFluidOutput != null) && ((aDuration = GregTech_API.sRecipeFile.get("mixer", aFluidOutput.getFluid().getName(), aDuration)) <= 0)) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sMixerRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2, aInput3, aInput4 }, new ItemStack[] { aOutput }, null, null, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addLaserEngraverRecipe(ItemStack aItemToEngrave, ItemStack aLens, ItemStack aEngravedItem, int aDuration, int aEUt)
+ {
+ if ((aItemToEngrave == null) || (aLens == null) || (aEngravedItem == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("laserengraving", aEngravedItem, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes.addRecipe(true, new ItemStack[] { aItemToEngrave, aLens }, new ItemStack[] { aEngravedItem }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addFormingPressRecipe(ItemStack aItemToImprint, ItemStack aForm, ItemStack aImprintedItem, int aDuration, int aEUt)
+ {
+ if ((aItemToImprint == null) || (aForm == null) || (aImprintedItem == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("press", aImprintedItem, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sPressRecipes.addRecipe(true, new ItemStack[] { aItemToImprint, aForm }, new ItemStack[] { aImprintedItem }, null, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addFluidHeaterRecipe(ItemStack aCircuit, FluidStack aInput, FluidStack aOutput, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutput == null)) {
+ return false;
+ }
+ if ((aDuration = GregTech_API.sRecipeFile.get("fluidheater", aOutput.getFluid().getUnlocalizedName(), aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes.addRecipe(true, new ItemStack[] { aCircuit }, null, null, new FluidStack[] { aInput }, new FluidStack[] { aOutput }, aDuration, aEUt, 0);
+ return true;
+ }
+
+ public boolean addSifterRecipe(ItemStack aItemToSift, ItemStack[] aSiftedItems, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aItemToSift == null) || (aSiftedItems == null)) {
+ return false;
+ }
+ for (ItemStack tStack : aSiftedItems) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("sifter", aItemToSift, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sSifterRecipes.addRecipe(true, new ItemStack[] { aItemToSift }, aSiftedItems, null, aChances, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean addArcFurnaceRecipe(ItemStack aInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutputs == null)) {
+ return false;
+ }
+ for (ItemStack tStack : aOutputs) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("arcfurnace", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, new FluidStack[] { Materials.Oxygen.getGas(aDuration) }, null, Math.max(1, aDuration), Math.max(1, aEUt), 0);
+ for (Materials tMaterial : new Materials[] { Materials.Argon, Materials.Nitrogen }) {
+ if (tMaterial.mPlasma != null)
+ {
+ int tPlasmaAmount = (int)Math.max(1L, aDuration / (tMaterial.getMass() * 16L));
+ GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, new FluidStack[] { tMaterial.getPlasma(tPlasmaAmount) }, new FluidStack[] { tMaterial.getGas(tPlasmaAmount) }, Math.max(1, aDuration / 16), Math.max(1, aEUt / 3), 0);
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean addSimpleArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutputs == null)||aFluidInput==null) {
+ return false;
+ }
+ for (ItemStack tStack : aOutputs) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("arcfurnace", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, new FluidStack[] { aFluidInput }, null, Math.max(1, aDuration), Math.max(1, aEUt), 0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean addPlasmaArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutputs == null)||aFluidInput==null) {
+ return false;
+ }
+ for (ItemStack tStack : aOutputs) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("arcfurnace", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, new FluidStack[] { aFluidInput }, null, Math.max(1, aDuration), Math.max(1, aEUt), 0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean addPlasmaArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, FluidStack aFluidOutput, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutputs == null)||aFluidInput==null) {
+ return false;
+ }
+ for (ItemStack tStack : aOutputs) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("arcfurnace", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, new FluidStack[] { aFluidInput }, new FluidStack[]{aFluidOutput}, Math.max(1, aDuration), Math.max(1, aEUt), 0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean addPulveriserRecipe(ItemStack aInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt)
+ {
+ if ((aInput == null) || (aOutputs == null)) {
+ return false;
+ }
+ for (ItemStack tStack : aOutputs) {
+ if (tStack != null)
+ {
+ if ((aDuration = GregTech_API.sRecipeFile.get("pulveriser", aInput, aDuration)) <= 0) {
+ return false;
+ }
+ GT_Recipe.GT_Recipe_Map.sMaceratorRecipes.addRecipe(true, new ItemStack[] { aInput }, aOutputs, null, aChances, null, null, aDuration, aEUt, 0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ }
diff --git a/src/main/java/gregtech/common/GT_Server.java b/src/main/java/gregtech/common/GT_Server.java
new file mode 100644
index 0000000000..cdcd954dea
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Server.java
@@ -0,0 +1,36 @@
+package gregtech.common;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class GT_Server
+ extends GT_Proxy
+{
+ public boolean isServerSide()
+ {
+ return true;
+ }
+
+ public boolean isClientSide()
+ {
+ return false;
+ }
+
+ public boolean isBukkitSide()
+ {
+ return false;
+ }
+
+ public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) {}
+
+ public int addArmor(String aPrefix)
+ {
+ return 0;
+ }
+
+ public EntityPlayer getThePlayer()
+ {
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_ThaumcraftCompat.java b/src/main/java/gregtech/common/GT_ThaumcraftCompat.java
new file mode 100644
index 0000000000..aa00217020
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_ThaumcraftCompat.java
@@ -0,0 +1,244 @@
+package gregtech.common;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.util.ResourceLocation;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.ThaumcraftApiHelper;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.crafting.CrucibleRecipe;
+import thaumcraft.api.crafting.IArcaneRecipe;
+import thaumcraft.api.crafting.InfusionEnchantmentRecipe;
+import thaumcraft.api.crafting.InfusionRecipe;
+import thaumcraft.api.research.ResearchCategories;
+import thaumcraft.api.research.ResearchCategoryList;
+import thaumcraft.api.research.ResearchItem;
+import thaumcraft.api.research.ResearchPage;
+
+public class GT_ThaumcraftCompat
+ implements IThaumcraftCompat
+{
+ public GT_ThaumcraftCompat()
+ {
+ TC_Aspects.AER.mAspect = Aspect.AIR;
+ TC_Aspects.ALIENIS.mAspect = Aspect.ELDRITCH;
+ TC_Aspects.AQUA.mAspect = Aspect.WATER;
+ TC_Aspects.ARBOR.mAspect = Aspect.TREE;
+ TC_Aspects.AURAM.mAspect = Aspect.AURA;
+ TC_Aspects.BESTIA.mAspect = Aspect.BEAST;
+ TC_Aspects.COGNITO.mAspect = Aspect.MIND;
+ TC_Aspects.CORPUS.mAspect = Aspect.FLESH;
+ TC_Aspects.EXAMINIS.mAspect = Aspect.UNDEAD;
+ TC_Aspects.FABRICO.mAspect = Aspect.CRAFT;
+ TC_Aspects.FAMES.mAspect = Aspect.HUNGER;
+ TC_Aspects.GELUM.mAspect = Aspect.COLD;
+ TC_Aspects.GRANUM.mAspect = Aspect.PLANT;
+ TC_Aspects.HERBA.mAspect = Aspect.PLANT;
+ TC_Aspects.HUMANUS.mAspect = Aspect.MAN;
+ TC_Aspects.IGNIS.mAspect = Aspect.FIRE;
+ TC_Aspects.INSTRUMENTUM.mAspect = Aspect.TOOL;
+ TC_Aspects.ITER.mAspect = Aspect.TRAVEL;
+ TC_Aspects.LIMUS.mAspect = Aspect.SLIME;
+ TC_Aspects.LUCRUM.mAspect = Aspect.GREED;
+ TC_Aspects.LUX.mAspect = Aspect.LIGHT;
+ TC_Aspects.MACHINA.mAspect = Aspect.MECHANISM;
+ TC_Aspects.MESSIS.mAspect = Aspect.CROP;
+ TC_Aspects.METALLUM.mAspect = Aspect.METAL;
+ TC_Aspects.METO.mAspect = Aspect.HARVEST;
+ TC_Aspects.MORTUUS.mAspect = Aspect.DEATH;
+ TC_Aspects.MOTUS.mAspect = Aspect.MOTION;
+ TC_Aspects.ORDO.mAspect = Aspect.ORDER;
+ TC_Aspects.PANNUS.mAspect = Aspect.CLOTH;
+ TC_Aspects.PERDITIO.mAspect = Aspect.ENTROPY;
+ TC_Aspects.PERFODIO.mAspect = Aspect.MINE;
+ TC_Aspects.PERMUTATIO.mAspect = Aspect.EXCHANGE;
+ TC_Aspects.POTENTIA.mAspect = Aspect.ENERGY;
+ TC_Aspects.PRAECANTIO.mAspect = Aspect.MAGIC;
+ TC_Aspects.SANO.mAspect = Aspect.HEAL;
+ TC_Aspects.SENSUS.mAspect = Aspect.SENSES;
+ TC_Aspects.SPIRITUS.mAspect = Aspect.SOUL;
+ TC_Aspects.TELUM.mAspect = Aspect.WEAPON;
+ TC_Aspects.TERRA.mAspect = Aspect.EARTH;
+ TC_Aspects.TEMPESTAS.mAspect = Aspect.WEATHER;
+ TC_Aspects.TENEBRAE.mAspect = Aspect.DARKNESS;
+ TC_Aspects.TUTAMEN.mAspect = Aspect.ARMOR;
+ TC_Aspects.VACUOS.mAspect = Aspect.VOID;
+ TC_Aspects.VENENUM.mAspect = Aspect.POISON;
+ TC_Aspects.VICTUS.mAspect = Aspect.LIFE;
+ TC_Aspects.VINCULUM.mAspect = Aspect.TRAP;
+ TC_Aspects.VITIUM.mAspect = Aspect.TAINT;
+ TC_Aspects.VITREUS.mAspect = Aspect.CRYSTAL;
+ TC_Aspects.VOLATUS.mAspect = Aspect.FLIGHT;
+
+ TC_Aspects.STRONTIO.mAspect = new Aspect("strontio", 15647411, new Aspect[] { Aspect.MIND, Aspect.ENTROPY }, new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.STRONTIO.name() + ".png"), 1);
+ TC_Aspects.NEBRISUM.mAspect = new Aspect("nebrisum", 15658622, new Aspect[] { Aspect.MINE, Aspect.GREED }, new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.NEBRISUM.name() + ".png"), 1);
+ TC_Aspects.ELECTRUM.mAspect = new Aspect("electrum", 12644078, new Aspect[] { Aspect.ENERGY, Aspect.MECHANISM }, new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.ELECTRUM.name() + ".png"), 1);
+ TC_Aspects.MAGNETO.mAspect = new Aspect("magneto", 12632256, new Aspect[] { Aspect.METAL, Aspect.TRAVEL }, new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.MAGNETO.name() + ".png"), 1);
+ TC_Aspects.RADIO.mAspect = new Aspect("radio", 12648384, new Aspect[] { Aspect.LIGHT, Aspect.ENERGY }, new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+
+ GT_LanguageManager.addStringLocalization("tc.aspect.strontio", "Stupidness, Incompetence");
+ GT_LanguageManager.addStringLocalization("tc.aspect.nebrisum", "Cheatyness, Raiding");
+ GT_LanguageManager.addStringLocalization("tc.aspect.electrum", "Electricity, Lightning");
+ GT_LanguageManager.addStringLocalization("tc.aspect.magneto", "Magnetism, Attraction");
+ GT_LanguageManager.addStringLocalization("tc.aspect.radio", "Radiation");
+ }
+
+ private static final AspectList getAspectList(List<TC_Aspects.TC_AspectStack> aAspects)
+ {
+ AspectList rAspects = new AspectList();
+ TC_Aspects.TC_AspectStack tAspect;
+ for (Iterator i$ = aAspects.iterator(); i$.hasNext(); rAspects.add((Aspect)tAspect.mAspect.mAspect, (int)tAspect.mAmount)) {
+ tAspect = (TC_Aspects.TC_AspectStack)i$.next();
+ }
+ return rAspects;
+ }
+
+ public Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, List<TC_Aspects.TC_AspectStack> aAspects, ItemStack[] aResearchTriggers, Object[] aPages)
+ {
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ return null;
+ }
+ ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory);
+ if (tCategory == null) {
+ return null;
+ }
+ for (Iterator i$ = tCategory.research.values().iterator(); i$.hasNext();)
+ {
+ ResearchItem tResearch = (ResearchItem)i$.next();
+ if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY))
+ {
+ aX += (aX > 0 ? 5 : -5);aY += (aY > 0 ? 5 : -5);
+ }
+ }
+ ResearchItem rResearch = new ResearchItem(aResearch, aCategory, getAspectList(aAspects), aX, aY, aComplexity, aIcon);
+ ArrayList<ResearchPage> tPages = new ArrayList(aPages.length);
+ GT_LanguageManager.addStringLocalization("tc.research_name." + aResearch, aName);
+ GT_LanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT] " + aText);
+ for (Object tPage : aPages) {
+ if ((tPage instanceof String)) {
+ tPages.add(new ResearchPage((String)tPage));
+ } else if ((tPage instanceof IRecipe)) {
+ tPages.add(new ResearchPage((IRecipe)tPage));
+ } else if ((tPage instanceof IArcaneRecipe)) {
+ tPages.add(new ResearchPage((IArcaneRecipe)tPage));
+ } else if ((tPage instanceof CrucibleRecipe)) {
+ tPages.add(new ResearchPage((CrucibleRecipe)tPage));
+ } else if ((tPage instanceof InfusionRecipe)) {
+ tPages.add(new ResearchPage((InfusionRecipe)tPage));
+ } else if ((tPage instanceof InfusionEnchantmentRecipe)) {
+ tPages.add(new ResearchPage((InfusionEnchantmentRecipe)tPage));
+ }
+ }
+ if ((aType & 0x40) != 0) {
+ rResearch.setAutoUnlock();
+ }
+ if ((aType & 0x1) != 0) {
+ rResearch.setSecondary();
+ }
+ if ((aType & 0x20) != 0) {
+ rResearch.setSpecial();
+ }
+ if ((aType & 0x8) != 0) {
+ rResearch.setVirtual();
+ }
+ if ((aType & 0x4) != 0) {
+ rResearch.setHidden();
+ }
+ if ((aType & 0x10) != 0) {
+ rResearch.setRound();
+ }
+ if ((aType & 0x2) != 0) {
+ rResearch.setStub();
+ }
+ if (aParentResearches != null)
+ {
+ ArrayList<String> tParentResearches = new ArrayList();
+ for (String tParent : aParentResearches) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ tParentResearches.add(tParent);
+ }
+ }
+ if (tParentResearches.size() > 0)
+ {
+ rResearch.setParents((String[])tParentResearches.toArray(new String[tParentResearches.size()]));
+ rResearch.setConcealed();
+ }
+ }
+ if (aResearchTriggers != null)
+ {
+ rResearch.setItemTriggers(aResearchTriggers);
+ rResearch.setHidden();
+ }
+ rResearch.setPages((ResearchPage[])tPages.toArray(new ResearchPage[tPages.size()]));
+ return rResearch.registerResearchItem();
+ }
+
+ public Object addCrucibleRecipe(String aResearch, Object aInput, ItemStack aOutput, List<TC_Aspects.TC_AspectStack> aAspects)
+ {
+ if ((GT_Utility.isStringInvalid(aResearch)) || (aInput == null) || (aOutput == null) || (aAspects == null) || (aAspects.isEmpty())) {
+ return null;
+ }
+ return ThaumcraftApi.addCrucibleRecipe(aResearch, GT_Utility.copy(new Object[] { aOutput }), ((aInput instanceof ItemStack)) || ((aInput instanceof ArrayList)) ? aInput : aInput.toString(), getAspectList(aAspects));
+ }
+
+ public Object addInfusionRecipe(String aResearch, ItemStack aMainInput,ItemStack[] aSideInputs, ItemStack aOutput,int aInstability, List<TC_Aspects.TC_AspectStack> aAspects)
+ {
+ if ((GT_Utility.isStringInvalid(aResearch)) || (aMainInput == null)|| (aSideInputs==null) || (aOutput == null) || (aAspects == null) || (aAspects.isEmpty())) {
+ return null;
+ }
+ return ThaumcraftApi.addInfusionCraftingRecipe(aResearch, GT_Utility.copy(new Object[] { aOutput }), aInstability, getAspectList(aAspects), aMainInput, aSideInputs);
+ }
+
+ public boolean registerThaumcraftAspectsToItem(ItemStack aExampleStack, List<TC_Aspects.TC_AspectStack> aAspects, String aOreDict)
+ {
+ if (aAspects.isEmpty()) {
+ return false;
+ }
+ AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aExampleStack);
+ if ((tAlreadyRegisteredAspects == null) || (tAlreadyRegisteredAspects.size() <= 0)) {
+ ThaumcraftApi.registerObjectTag(aOreDict, getAspectList(aAspects));
+ }
+ return true;
+ }
+
+ public boolean registerThaumcraftAspectsToItem(ItemStack aStack, List<TC_Aspects.TC_AspectStack> aAspects, boolean aAdditive)
+ {
+ if (aAspects.isEmpty()) {
+ return false;
+ }
+ if (aAdditive)
+ {
+ ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList(aAspects));
+ return true;
+ }
+ AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack);
+ if ((tAlreadyRegisteredAspects == null) || (tAlreadyRegisteredAspects.size() <= 0)) {
+ ThaumcraftApi.registerObjectTag(aStack, getAspectList(aAspects));
+ }
+ return true;
+ }
+
+ public boolean registerPortholeBlacklistedBlock(Block aBlock)
+ {
+ ThaumcraftApi.portableHoleBlackList.add(aBlock);
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java
new file mode 100644
index 0000000000..6cbe3e9b7b
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java
@@ -0,0 +1,99 @@
+package gregtech.common;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Config;
+import gregtech.api.world.GT_Worldgen;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import gregtech.loaders.misc.GT_Achievements;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_GT_Ore_Layer
+ extends GT_Worldgen
+{
+ public static ArrayList<GT_Worldgen_GT_Ore_Layer> sList = new ArrayList();
+ public static int sWeight = 0;
+ public final short mMinY;
+ public final short mMaxY;
+ public final short mWeight;
+ public final short mDensity;
+ public final short mSize;
+ public final short mPrimaryMeta;
+ public final short mSecondaryMeta;
+ public final short mBetweenMeta;
+ public final short mSporadicMeta;
+ public final boolean mOverworld;
+ public final boolean mNether;
+ public final boolean mEnd;
+
+ public GT_Worldgen_GT_Ore_Layer(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, int aSize, boolean aOverworld, boolean aNether, boolean aEnd, Materials aPrimary, Materials aSecondary, Materials aBetween, Materials aSporadic)
+ {
+ super(aName, sList, aDefault);
+ this.mOverworld = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Overworld", aOverworld);
+ this.mNether = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Nether", aNether);
+ this.mEnd = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "TheEnd", aEnd);
+ this.mMinY = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MinHeight", aMinY));
+ this.mMaxY = ((short)Math.max(this.mMinY + 5, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MaxHeight", aMaxY)));
+ this.mWeight = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "RandomWeight", aWeight));
+ this.mDensity = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Density", aDensity));
+ this.mSize = ((short)Math.max(1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Size", aSize)));
+ this.mPrimaryMeta = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "OrePrimaryLayer", aPrimary.mMetaItemSubID));
+ this.mSecondaryMeta = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "OreSecondaryLayer", aSecondary.mMetaItemSubID));
+ this.mBetweenMeta = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "OreSporadiclyInbetween", aBetween.mMetaItemSubID));
+ this.mSporadicMeta = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "OreSporaticlyAround", aSporadic.mMetaItemSubID));
+ if (this.mEnabled) {
+ GT_Achievements.registerOre(aPrimary,aMinY,aMaxY,aWeight,aOverworld,aNether,aEnd);
+ GT_Achievements.registerOre(aSecondary,aMinY,aMaxY,aWeight,aOverworld,aNether,aEnd);
+ GT_Achievements.registerOre(aBetween,aMinY,aMaxY,aWeight,aOverworld,aNether,aEnd);
+ GT_Achievements.registerOre(aSporadic,aMinY,aMaxY,aWeight,aOverworld,aNether,aEnd);
+ sWeight += this.mWeight;
+ }
+ }
+
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider)
+ {
+ if (!isGenerationAllowed(aWorld, aDimensionType, ((aDimensionType == -1) && (this.mNether)) || ((aDimensionType == 0) && (this.mOverworld)) || ((aDimensionType == 1) && (this.mEnd)) ? aDimensionType : aDimensionType ^ 0xFFFFFFFF)) {
+ return false;
+ }
+ int tMinY = this.mMinY + aRandom.nextInt(this.mMaxY - this.mMinY - 5);
+
+ int cX = aChunkX - aRandom.nextInt(this.mSize);int eX = aChunkX + 16 + aRandom.nextInt(this.mSize);
+ for (int tX = cX; tX <= eX; tX++)
+ {
+ int cZ = aChunkZ - aRandom.nextInt(this.mSize);int eZ = aChunkZ + 16 + aRandom.nextInt(this.mSize);
+ for (int tZ = cZ; tZ <= eZ; tZ++)
+ {
+ if (this.mSecondaryMeta > 0) {
+ for (int i = tMinY - 1; i < tMinY + 2; i++) {
+ if ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0)) {
+ GT_TileEntity_Ores.setOreBlock(aWorld, tX, i, tZ, this.mSecondaryMeta);
+ }
+ }
+ }
+ if ((this.mBetweenMeta > 0) && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) {
+ GT_TileEntity_Ores.setOreBlock(aWorld, tX, tMinY + 2 + aRandom.nextInt(2), tZ, this.mBetweenMeta);
+ }
+ if (this.mPrimaryMeta > 0) {
+ for (int i = tMinY + 3; i < tMinY + 6; i++) {
+ if ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0)) {
+ GT_TileEntity_Ores.setOreBlock(aWorld, tX, i, tZ, this.mPrimaryMeta);
+ }
+ }
+ }
+ if ((this.mSporadicMeta > 0) && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) {
+ GT_TileEntity_Ores.setOreBlock(aWorld, tX, tMinY - 1 + aRandom.nextInt(7), tZ, this.mSporadicMeta);
+ }
+ }
+ }
+ if(GT_Values.D1){
+ System.out.println("Generated Orevein: "+this.mWorldGenName);}
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java
new file mode 100644
index 0000000000..6c7eb04db3
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java
@@ -0,0 +1,49 @@
+package gregtech.common;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Config;
+import gregtech.api.world.GT_Worldgen;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import java.util.Random;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_GT_Ore_SmallPieces
+ extends GT_Worldgen
+{
+ public final short mMinY;
+ public final short mMaxY;
+ public final short mAmount;
+ public final short mMeta;
+ public final boolean mOverworld;
+ public final boolean mNether;
+ public final boolean mEnd;
+
+ public GT_Worldgen_GT_Ore_SmallPieces(String aName, boolean aDefault, int aMinY, int aMaxY, int aAmount, boolean aOverworld, boolean aNether, boolean aEnd, Materials aPrimary)
+ {
+ super(aName, GregTech_API.sWorldgenList, aDefault);
+ this.mOverworld = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Overworld", aOverworld);
+ this.mNether = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Nether", aNether);
+ this.mEnd = GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "TheEnd", aEnd);
+ this.mMinY = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MinHeight", aMinY));
+ this.mMaxY = ((short)Math.max(this.mMinY + 1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MaxHeight", aMaxY)));
+ this.mAmount = ((short)Math.max(1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Amount", aAmount)));
+ this.mMeta = ((short)GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Ore", aPrimary.mMetaItemSubID));
+ }
+
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider)
+ {
+ if (!isGenerationAllowed(aWorld, aDimensionType, ((aDimensionType == -1) && (this.mNether)) || ((aDimensionType == 0) && (this.mOverworld)) || ((aDimensionType == 1) && (this.mEnd)) ? aDimensionType : aDimensionType ^ 0xFFFFFFFF)) {
+ return false;
+ }
+ if (this.mMeta > 0)
+ {
+ int i = 0;
+ for (int j = Math.max(1, this.mAmount / 2 + aRandom.nextInt(this.mAmount) / 2); i < j; i++) {
+ GT_TileEntity_Ores.setOreBlock(aWorld, aChunkX + aRandom.nextInt(16), this.mMinY + aRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), aChunkZ + aRandom.nextInt(16), this.mMeta + 16000);
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Worldgen_Stone.java b/src/main/java/gregtech/common/GT_Worldgen_Stone.java
new file mode 100644
index 0000000000..d6630a24ac
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Worldgen_Stone.java
@@ -0,0 +1,91 @@
+package gregtech.common;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.world.GT_Worldgen_Ore;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import java.util.Collection;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Stone
+ extends GT_Worldgen_Ore
+{
+ public GT_Worldgen_Stone(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid)
+ {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider)
+ {
+ if ((isGenerationAllowed(aWorld, aDimensionType, this.mDimensionType)) && ((this.mBiomeList.isEmpty()) || (this.mBiomeList.contains(aBiome))) && ((this.mProbability <= 1) || (aRandom.nextInt(this.mProbability) == 0)))
+ {
+ for (int i = 0; i < this.mAmount; i++)
+ {
+ int tX = aChunkX + aRandom.nextInt(16);int tY = this.mMinY + aRandom.nextInt(this.mMaxY - this.mMinY);int tZ = aChunkZ + aRandom.nextInt(16);
+ if ((this.mAllowToGenerateinVoid) || (!aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)))
+ {
+ float var6 = aRandom.nextFloat() * 3.141593F;
+ double var7 = tX + 8 + MathHelper.sin(var6) * this.mSize / 8.0F;
+ double var9 = tX + 8 - MathHelper.sin(var6) * this.mSize / 8.0F;
+ double var11 = tZ + 8 + MathHelper.cos(var6) * this.mSize / 8.0F;
+ double var13 = tZ + 8 - MathHelper.cos(var6) * this.mSize / 8.0F;
+ double var15 = tY + aRandom.nextInt(3) - 2;
+ double var17 = tY + aRandom.nextInt(3) - 2;
+ for (int var19 = 0; var19 <= this.mSize; var19++)
+ {
+ double var20 = var7 + (var9 - var7) * var19 / this.mSize;
+ double var22 = var15 + (var17 - var15) * var19 / this.mSize;
+ double var24 = var11 + (var13 - var11) * var19 / this.mSize;
+ double var26 = aRandom.nextDouble() * this.mSize / 16.0D;
+ double var28 = (MathHelper.sin(var19 * 3.141593F / this.mSize) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * 3.141593F / this.mSize) + 1.0F) * var26 + 1.0D;
+ int tMinX = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int tMinY = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int tMinZ = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int tMaxX = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int tMaxY = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int tMaxZ = MathHelper.floor_double(var24 + var28 / 2.0D);
+ for (int eX = tMinX; eX <= tMaxX; eX++)
+ {
+ double var39 = (eX + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int eY = tMinY; eY <= tMaxY; eY++)
+ {
+ double var42 = (eY + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int eZ = tMinZ; eZ <= tMaxZ; eZ++)
+ {
+ double var45 = (eZ + 0.5D - var24) / (var28 / 2.0D);
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D)
+ {
+ Block tTargetedBlock = aWorld.getBlock(eX, eY, eZ);
+ if (tTargetedBlock == GregTech_API.sBlockOres1)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(eX, eY, eZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ ((GT_TileEntity_Ores)tTileEntity).overrideOreBlockMaterial(this.mBlock, (byte)this.mBlockMeta);
+ }
+ }
+ else if (((this.mAllowToGenerateinVoid) && (aWorld.getBlock(eX, eY, eZ).isAir(aWorld, eX, eY, eZ))) || ((tTargetedBlock != null) && ((tTargetedBlock.isReplaceableOreGen(aWorld, eX, eY, eZ, Blocks.stone)) || (tTargetedBlock.isReplaceableOreGen(aWorld, eX, eY, eZ, Blocks.end_stone)) || (tTargetedBlock.isReplaceableOreGen(aWorld, eX, eY, eZ, Blocks.netherrack)))))
+ {
+ aWorld.setBlock(eX, eY, eZ, this.mBlock, this.mBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/GT_Worldgenerator.java b/src/main/java/gregtech/common/GT_Worldgenerator.java
new file mode 100644
index 0000000000..77b79efd61
--- /dev/null
+++ b/src/main/java/gregtech/common/GT_Worldgenerator.java
@@ -0,0 +1,130 @@
+package gregtech.common;
+
+import cpw.mods.fml.common.IWorldGenerator;
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Log;
+import gregtech.api.world.GT_Worldgen;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraft.world.gen.ChunkProviderEnd;
+import net.minecraft.world.gen.ChunkProviderHell;
+
+public class GT_Worldgenerator
+ implements IWorldGenerator
+{
+ public static boolean sAsteroids = true;
+ public List<Runnable> mList = new ArrayList();
+ public boolean mIsGenerating = false;
+
+ public GT_Worldgenerator()
+ {
+ GameRegistry.registerWorldGenerator(this, 1073741823);
+ }
+
+ public void generate(Random aRandom, int aX, int aZ, World aWorld, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider)
+ {
+ this.mList.add(new WorldGenContainer(new Random(aRandom.nextInt()), aX * 16, aZ * 16, ((aChunkGenerator instanceof ChunkProviderEnd)) || (aWorld.getBiomeGenForCoords(aX * 16 + 8, aZ * 16 + 8) == BiomeGenBase.sky) ? 1 : ((aChunkGenerator instanceof ChunkProviderHell)) || (aWorld.getBiomeGenForCoords(aX * 16 + 8, aZ * 16 + 8) == BiomeGenBase.hell) ? -1 : 0, aWorld, aChunkGenerator, aChunkProvider, aWorld.getBiomeGenForCoords(aX * 16 + 8, aZ * 16 + 8).biomeName));
+ if (!this.mIsGenerating)
+ {
+ this.mIsGenerating = true;
+ for (int i = 0; i < this.mList.size(); i++) {
+ ((Runnable)this.mList.get(i)).run();
+ }
+ this.mList.clear();
+ this.mIsGenerating = false;
+ }
+ }
+
+ public static class WorldGenContainer
+ implements Runnable
+ {
+ public final Random mRandom;
+ public final int mX;
+ public final int mZ;
+ public final int mDimensionType;
+ public final World mWorld;
+ public final IChunkProvider mChunkGenerator;
+ public final IChunkProvider mChunkProvider;
+ public final String mBiome;
+
+ public WorldGenContainer(Random aRandom, int aX, int aZ, int aDimensionType, World aWorld, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider, String aBiome)
+ {
+ this.mRandom = aRandom;
+ this.mX = aX;
+ this.mZ = aZ;
+ this.mDimensionType = aDimensionType;
+ this.mWorld = aWorld;
+ this.mChunkGenerator = aChunkGenerator;
+ this.mChunkProvider = aChunkProvider;
+ this.mBiome = aBiome;
+ }
+
+ public void run()
+ {
+ if ((Math.abs(this.mX / 16) % 3 == 1) && (Math.abs(this.mZ / 16) % 3 == 1))
+ {
+ if ((GT_Worldgen_GT_Ore_Layer.sWeight > 0) && (GT_Worldgen_GT_Ore_Layer.sList.size() > 0))
+ {
+ boolean temp = true;
+ int tRandomWeight;
+ for (int i = 0; (i < 256) && (temp); i++)
+ {
+ tRandomWeight = this.mRandom.nextInt(GT_Worldgen_GT_Ore_Layer.sWeight);
+ for (GT_Worldgen tWorldGen : GT_Worldgen_GT_Ore_Layer.sList)
+ {
+ tRandomWeight -= ((GT_Worldgen_GT_Ore_Layer)tWorldGen).mWeight;
+ if (tRandomWeight <= 0) {
+ try
+ {
+ if (tWorldGen.executeWorldgen(this.mWorld, this.mRandom, this.mBiome, this.mDimensionType, this.mX, this.mZ, this.mChunkGenerator, this.mChunkProvider))
+ {
+ temp = false;
+ }
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ break;
+ }
+ }
+ }
+ }
+ int i = 0;
+ for (int tX = this.mX - 16; i < 3; tX += 16)
+ {
+ int j = 0;
+ for (int tZ = this.mZ - 16; j < 3; tZ += 16)
+ {
+ String tBiome = this.mWorld.getBiomeGenForCoords(tX + 8, tZ + 8).biomeName;
+ if (tBiome == null) {
+ tBiome = BiomeGenBase.plains.biomeName;
+ }
+ for (GT_Worldgen tWorldGen : GregTech_API.sWorldgenList) {
+ try
+ {
+ tWorldGen.executeWorldgen(this.mWorld, this.mRandom, this.mBiome, this.mDimensionType, tX, tZ, this.mChunkGenerator, this.mChunkProvider);
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ j++;
+ }
+ i++;
+ }
+ }
+ Chunk tChunk = this.mWorld.getChunkFromBlockCoords(this.mX, this.mZ);
+ if (tChunk != null) {
+ tChunk.isModified = true;
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java
new file mode 100644
index 0000000000..e8d3621c00
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java
@@ -0,0 +1,90 @@
+package gregtech.common.blocks;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+
+public class GT_Block_Casings1
+ extends GT_Block_Casings_Abstract
+{
+ public GT_Block_Casings1()
+ {
+ super(GT_Item_Casings1.class, "gt.blockcasings", GT_Material_Casings.INSTANCE);
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ Textures.BlockIcons.CASING_BLOCKS[i] = new GT_CopiedBlockTexture(this, 6, i);
+ }
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "ULV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "LV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "MV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "HV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "EV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "IV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "LuV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "ZPM Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "UV Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "MAX Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Bronze Plated Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Heat Proof Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cupronickel Coil Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Kanthal Coil Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Nichrome Coil Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Superconducting Coil Block");
+ ItemList.Casing_ULV.set(new ItemStack(this, 1, 0));
+ ItemList.Casing_LV.set(new ItemStack(this, 1, 1));
+ ItemList.Casing_MV.set(new ItemStack(this, 1, 2));
+ ItemList.Casing_HV.set(new ItemStack(this, 1, 3));
+ ItemList.Casing_EV.set(new ItemStack(this, 1, 4));
+ ItemList.Casing_IV.set(new ItemStack(this, 1, 5));
+ ItemList.Casing_LuV.set(new ItemStack(this, 1, 6));
+ ItemList.Casing_ZPM.set(new ItemStack(this, 1, 7));
+ ItemList.Casing_UV.set(new ItemStack(this, 1, 8));
+ ItemList.Casing_MAX.set(new ItemStack(this, 1, 9));
+ ItemList.Casing_BronzePlatedBricks.set(new ItemStack(this, 1, 10));
+ ItemList.Casing_HeatProof.set(new ItemStack(this, 1, 11));
+ ItemList.Casing_Coil_Cupronickel.set(new ItemStack(this, 1, 12));
+ ItemList.Casing_Coil_Kanthal.set(new ItemStack(this, 1, 13));
+ ItemList.Casing_Coil_Nichrome.set(new ItemStack(this, 1, 14));
+ ItemList.Casing_Coil_Superconductor.set(new ItemStack(this, 1, 15));
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ if ((aMeta >= 0) && (aMeta < 16))
+ {
+ switch (aMeta)
+ {
+ case 10:
+ return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon();
+ case 11:
+ return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getIcon();
+ case 12:
+ return Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon();
+ case 13:
+ return Textures.BlockIcons.MACHINE_COIL_KANTHAL.getIcon();
+ case 14:
+ return Textures.BlockIcons.MACHINE_COIL_NICHROME.getIcon();
+ case 15:
+ return Textures.BlockIcons.MACHINE_COIL_SUPERCONDUCTOR.getIcon();
+ }
+ if (aSide == 0) {
+ return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon();
+ }
+ if (aSide == 1) {
+ return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon();
+ }
+ return Textures.BlockIcons.MACHINECASINGS_SIDE[aMeta].getIcon();
+ }
+ return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ }
+
+ public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return aWorld.getBlockMetadata(aX, aY, aZ) > 9 ? super.colorMultiplier(aWorld, aX, aY, aZ) : gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2];
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java
new file mode 100644
index 0000000000..38054eb178
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java
@@ -0,0 +1,102 @@
+package gregtech.common.blocks;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public class GT_Block_Casings2
+ extends GT_Block_Casings_Abstract
+{
+ public GT_Block_Casings2()
+ {
+ super(GT_Item_Casings2.class, "gt.blockcasings2", GT_Material_Casings.INSTANCE);
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ Textures.BlockIcons.CASING_BLOCKS[(i + 16)] = new GT_CopiedBlockTexture(this, 6, i);
+ }
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Solid Steel Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Frost Proof Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Bronze Gear Box Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Steel Gear Box Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Titanium Gear Box Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Tungstensteel Gear Box Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Processor Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Data Drive Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Containment Field Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Assembler Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Pump Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Motor Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Bronze Pipe Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Steel Pipe Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Titanium Pipe Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Pipe Machine Casing");
+ ItemList.Casing_SolidSteel.set(new ItemStack(this, 1, 0));
+ ItemList.Casing_FrostProof.set(new ItemStack(this, 1, 1));
+ ItemList.Casing_Gearbox_Bronze.set(new ItemStack(this, 1, 2));
+ ItemList.Casing_Gearbox_Steel.set(new ItemStack(this, 1, 3));
+ ItemList.Casing_Gearbox_Titanium.set(new ItemStack(this, 1, 4));
+ ItemList.Casing_Gearbox_TungstenSteel.set(new ItemStack(this, 1, 5));
+ ItemList.Casing_Processor.set(new ItemStack(this, 1, 6));
+ ItemList.Casing_DataDrive.set(new ItemStack(this, 1, 7));
+ ItemList.Casing_ContainmentField.set(new ItemStack(this, 1, 8));
+ ItemList.Casing_Assembler.set(new ItemStack(this, 1, 9));
+ ItemList.Casing_Pump.set(new ItemStack(this, 1, 10));
+ ItemList.Casing_Motor.set(new ItemStack(this, 1, 11));
+ ItemList.Casing_Pipe_Bronze.set(new ItemStack(this, 1, 12));
+ ItemList.Casing_Pipe_Steel.set(new ItemStack(this, 1, 13));
+ ItemList.Casing_Pipe_Titanium.set(new ItemStack(this, 1, 14));
+ ItemList.Casing_Pipe_TungstenSteel.set(new ItemStack(this, 1, 15));
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ switch (aMeta)
+ {
+ case 0:
+ return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ case 1:
+ return Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getIcon();
+ case 2:
+ return Textures.BlockIcons.MACHINE_CASING_GEARBOX_BRONZE.getIcon();
+ case 3:
+ return Textures.BlockIcons.MACHINE_CASING_GEARBOX_STEEL.getIcon();
+ case 4:
+ return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TITANIUM.getIcon();
+ case 5:
+ return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TUNGSTENSTEEL.getIcon();
+ case 6:
+ return Textures.BlockIcons.MACHINE_CASING_PROCESSOR.getIcon();
+ case 7:
+ return Textures.BlockIcons.MACHINE_CASING_DATA_DRIVE.getIcon();
+ case 8:
+ return Textures.BlockIcons.MACHINE_CASING_CONTAINMENT_FIELD.getIcon();
+ case 9:
+ return Textures.BlockIcons.MACHINE_CASING_ASSEMBLER.getIcon();
+ case 10:
+ return Textures.BlockIcons.MACHINE_CASING_PUMP.getIcon();
+ case 11:
+ return Textures.BlockIcons.MACHINE_CASING_MOTOR.getIcon();
+ case 12:
+ return Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon();
+ case 13:
+ return Textures.BlockIcons.MACHINE_CASING_PIPE_STEEL.getIcon();
+ case 14:
+ return Textures.BlockIcons.MACHINE_CASING_PIPE_TITANIUM.getIcon();
+ case 15:
+ return Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon();
+ }
+ return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ }
+
+ public float getExplosionResistance(Entity aTNT, World aWorld, int aX, int aY, int aZ, double eX, double eY, double eZ)
+ {
+ return aWorld.getBlockMetadata(aX, aY, aZ) == 8 ? Blocks.bedrock.getExplosionResistance(aTNT) : super.getExplosionResistance(aTNT, aWorld, aX, aY, aZ, eX, eY, eZ);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java
new file mode 100644
index 0000000000..467efc1297
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java
@@ -0,0 +1,93 @@
+package gregtech.common.blocks;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+
+public class GT_Block_Casings3
+ extends GT_Block_Casings_Abstract
+{
+ public GT_Block_Casings3()
+ {
+ super(GT_Item_Casings3.class, "gt.blockcasings3", GT_Material_Casings.INSTANCE);
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ Textures.BlockIcons.CASING_BLOCKS[(i + 32)] = new GT_CopiedBlockTexture(this, 6, i);
+ }
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Yellow Stripes Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Yellow Stripes Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Radioactive Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Bio Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Explosion Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Fire Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Acid Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Magic Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Frost Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Noise Hazard Sign Block");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Grate Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Vent Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Radiation Proof Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Bronze Firebox Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Steel Firebox Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Firebox Casing");
+ ItemList.Casing_Stripes_A.set(new ItemStack(this, 1, 0));
+ ItemList.Casing_Stripes_B.set(new ItemStack(this, 1, 1));
+ ItemList.Casing_RadioactiveHazard.set(new ItemStack(this, 1, 2));
+ ItemList.Casing_BioHazard.set(new ItemStack(this, 1, 3));
+ ItemList.Casing_ExplosionHazard.set(new ItemStack(this, 1, 4));
+ ItemList.Casing_FireHazard.set(new ItemStack(this, 1, 5));
+ ItemList.Casing_AcidHazard.set(new ItemStack(this, 1, 6));
+ ItemList.Casing_MagicHazard.set(new ItemStack(this, 1, 7));
+ ItemList.Casing_FrostHazard.set(new ItemStack(this, 1, 8));
+ ItemList.Casing_NoiseHazard.set(new ItemStack(this, 1, 9));
+ ItemList.Casing_Grate.set(new ItemStack(this, 1, 10));
+ ItemList.Casing_Vent.set(new ItemStack(this, 1, 11));
+ ItemList.Casing_RadiationProof.set(new ItemStack(this, 1, 12));
+ ItemList.Casing_Firebox_Bronze.set(new ItemStack(this, 1, 13));
+ ItemList.Casing_Firebox_Steel.set(new ItemStack(this, 1, 14));
+ ItemList.Casing_Firebox_TungstenSteel.set(new ItemStack(this, 1, 15));
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ switch (aMeta)
+ {
+ case 0:
+ return Textures.BlockIcons.MACHINE_CASING_STRIPES_A.getIcon();
+ case 1:
+ return Textures.BlockIcons.MACHINE_CASING_STRIPES_B.getIcon();
+ case 2:
+ return Textures.BlockIcons.MACHINE_CASING_RADIOACTIVEHAZARD.getIcon();
+ case 3:
+ return Textures.BlockIcons.MACHINE_CASING_BIOHAZARD.getIcon();
+ case 4:
+ return Textures.BlockIcons.MACHINE_CASING_EXPLOSIONHAZARD.getIcon();
+ case 5:
+ return Textures.BlockIcons.MACHINE_CASING_FIREHAZARD.getIcon();
+ case 6:
+ return Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD.getIcon();
+ case 7:
+ return Textures.BlockIcons.MACHINE_CASING_MAGICHAZARD.getIcon();
+ case 8:
+ return Textures.BlockIcons.MACHINE_CASING_FROSTHAZARD.getIcon();
+ case 9:
+ return Textures.BlockIcons.MACHINE_CASING_NOISEHAZARD.getIcon();
+ case 10:
+ return Textures.BlockIcons.MACHINE_CASING_GRATE.getIcon();
+ case 11:
+ return Textures.BlockIcons.MACHINE_CASING_VENT.getIcon();
+ case 12:
+ return Textures.BlockIcons.MACHINE_CASING_RADIATIONPROOF.getIcon();
+ case 13:
+ return aSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_BRONZE.getIcon() : Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon();
+ case 14:
+ return aSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_STEEL.getIcon() : Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ case 15:
+ return aSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TUNGSTENSTEEL.getIcon() : Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ }
+ return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java
new file mode 100644
index 0000000000..a0a3221d28
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java
@@ -0,0 +1,468 @@
+package gregtech.common.blocks;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+
+public class GT_Block_Casings4
+ extends GT_Block_Casings_Abstract
+{
+ public static boolean mConnectedMachineTextures = true;
+
+ public GT_Block_Casings4()
+ {
+ super(GT_Item_Casings4.class, "gt.blockcasings4", GT_Material_Casings.INSTANCE);
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ Textures.BlockIcons.CASING_BLOCKS[(i + 48)] = new GT_CopiedBlockTexture(this, 6, i);
+ }
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Robust Tungstensteel Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Clean Stainless Steel Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Stable Titanium Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Titanium Firebox Casing");
+// GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Fusion Casing");
+// GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Fusion Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Fusion Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Fusion Coil");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Fusion Casing MK II");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Turbine Casing");
+
+ ItemList.Casing_RobustTungstenSteel.set(new ItemStack(this, 1, 0));
+ ItemList.Casing_CleanStainlessSteel.set(new ItemStack(this, 1, 1));
+ ItemList.Casing_StableTitanium.set(new ItemStack(this, 1, 2));
+ ItemList.Casing_Firebox_Titanium.set(new ItemStack(this, 1, 3));
+ ItemList.Casing_Fusion.set(new ItemStack(this,1,6));
+ ItemList.Casing_Fusion_Coil.set(new ItemStack(this,1,7));
+ ItemList.Casing_Fusion2.set(new ItemStack(this,1,8));
+ ItemList.Casing_Turbine.set(new ItemStack(this,1,9));
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ switch (aMeta)
+ {
+ case 0:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 1:
+ return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon();
+ case 2:
+ return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon();
+ case 3:
+ return aSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TITANIUM.getIcon() : Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon();
+ case 4:
+ return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW.getIcon();
+ case 5:
+ return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS.getIcon();
+ case 6:
+ return Textures.BlockIcons.MACHINE_CASING_FUSION.getIcon();
+ case 7:
+ return Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getIcon();
+ case 8:
+ return Textures.BlockIcons.MACHINE_CASING_FUSION_2.getIcon();
+ case 9:
+ return Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon();
+ case 10:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 11:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 12:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 13:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 14:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ case 15:
+ return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
+ }
+ return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ }
+
+@SideOnly(Side.CLIENT)
+public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int aSide)
+{
+ int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord);
+ if ( ((tMeta != 6)&&(tMeta != 8)&&(tMeta != 9)) || (!mConnectedMachineTextures)) {
+ return getIcon(aSide, tMeta);
+ }
+ int tStartIndex = tMeta == 6 ? 1 : 13;
+ if (tMeta == 9) {
+ if ((aSide == 2) || (aSide == 3))
+ {
+ TileEntity tTileEntity;
+ IMetaTileEntity tMetaTileEntity;
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 3 ? 1 : -1), yCoord - 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[0].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[0].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 3 ? 1 : -1), yCoord, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[3].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[3].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 3 ? 1 : -1), yCoord + 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[6].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[6].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[1].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[1].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[7].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[7].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 2 ? 1 : -1), yCoord + 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[8].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[8].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 2 ? 1 : -1), yCoord, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[5].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[5].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord + (aSide == 2 ? 1 : -1), yCoord - 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[2].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[2].getIcon();
+ }
+ }
+ else if ((aSide == 4) || (aSide == 5))
+ {
+ TileEntity tTileEntity;
+ Object tMetaTileEntity;
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord + (aSide == 4 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[0].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[0].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord, zCoord + (aSide == 4 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[3].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[3].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord + (aSide == 4 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[6].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[6].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[1].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[1].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[7].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[7].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord + (aSide == 5 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[8].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[8].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord, zCoord + (aSide == 5 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[5].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[5].getIcon();
+ }
+ if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord + (aSide == 5 ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getFrontFacing() == aSide) && (null != (tMetaTileEntity = ((IGregTechTileEntity)tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine)))
+ {
+ if (((IGregTechTileEntity)tTileEntity).isActive()) {
+ return Textures.BlockIcons.TURBINE_ACTIVE[2].getIcon();
+ }
+ return Textures.BlockIcons.TURBINE[2].getIcon();
+ }
+ }return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon();
+ }
+ boolean[] tConnectedSides = { (aWorld.getBlock(xCoord, yCoord - 1, zCoord) == this) && (aWorld.getBlockMetadata(xCoord, yCoord - 1, zCoord) == tMeta), (aWorld.getBlock(xCoord, yCoord + 1, zCoord) == this) && (aWorld.getBlockMetadata(xCoord, yCoord + 1, zCoord) == tMeta), (aWorld.getBlock(xCoord + 1, yCoord, zCoord) == this) && (aWorld.getBlockMetadata(xCoord + 1, yCoord, zCoord) == tMeta), (aWorld.getBlock(xCoord, yCoord, zCoord + 1) == this) && (aWorld.getBlockMetadata(xCoord, yCoord, zCoord + 1) == tMeta), (aWorld.getBlock(xCoord - 1, yCoord, zCoord) == this) && (aWorld.getBlockMetadata(xCoord - 1, yCoord, zCoord) == tMeta), (aWorld.getBlock(xCoord, yCoord, zCoord - 1) == this) && (aWorld.getBlockMetadata(xCoord, yCoord, zCoord - 1) == tMeta)};
+ switch (aSide)
+ {
+ case 0:
+ if (tConnectedSides[0]) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (!tConnectedSides[2])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ if ((!tConnectedSides[5]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ case 1:
+ if (tConnectedSides[1] ) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (tConnectedSides[5] ) && (tConnectedSides[2] ) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (tConnectedSides[5] ) && (tConnectedSides[2] ) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (!tConnectedSides[5]) && (tConnectedSides[2] ) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (tConnectedSides[5] ) && (!tConnectedSides[2]) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (tConnectedSides[5] ) && (tConnectedSides[2] ) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2] ) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((tConnectedSides[4] ) && (tConnectedSides[5] ) && (!tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (tConnectedSides[5] ) && (tConnectedSides[2] ) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[4])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ if ((!tConnectedSides[3]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ case 2:
+ if (tConnectedSides[5] ) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (!tConnectedSides[0]) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (!tConnectedSides[4]) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (!tConnectedSides[4]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[4])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ case 3:
+ if (tConnectedSides[3] ) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (!tConnectedSides[0]) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (!tConnectedSides[4]) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4] ) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((tConnectedSides[2] ) && (tConnectedSides[0] ) && (!tConnectedSides[4]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (tConnectedSides[0] ) && (tConnectedSides[4] ) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[2]) && (!tConnectedSides[4])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ case 4:
+ if (tConnectedSides[4] ) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (!tConnectedSides[3]) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (!tConnectedSides[1]) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (!tConnectedSides[1]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ if ((!tConnectedSides[3]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ case 5:
+ if (tConnectedSides[2] ) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (!tConnectedSides[3]) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (!tConnectedSides[1]) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1] ) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5] )) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon();
+ }
+ if ((tConnectedSides[0] ) && (tConnectedSides[3] ) && (!tConnectedSides[1]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (tConnectedSides[3] ) && (tConnectedSides[1] ) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+ }
+ if ((!tConnectedSides[0]) && (!tConnectedSides[1])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 0)].getIcon();
+ }
+ if ((!tConnectedSides[3]) && (!tConnectedSides[5])) {
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon();
+ }
+ break;
+ }
+ return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon();
+}} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java
new file mode 100644
index 0000000000..eb8b5bcab2
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java
@@ -0,0 +1,140 @@
+package gregtech.common.blocks;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_Generic_Block;
+import gregtech.api.util.GT_LanguageManager;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public abstract class GT_Block_Casings_Abstract
+ extends GT_Generic_Block
+{
+ public GT_Block_Casings_Abstract(Class<? extends ItemBlock> aItemClass, String aName, Material aMaterial)
+ {
+ super(aItemClass, aName, aMaterial);
+ setStepSound(soundTypeMetal);
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ GregTech_API.registerMachineBlock(this, -1);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this");
+ }
+
+ public String getHarvestTool(int aMeta)
+ {
+ return "wrench";
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return 2;
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ);
+ }
+
+ public float getExplosionResistance(Entity aTNT)
+ {
+ return Blocks.iron_block.getExplosionResistance(aTNT);
+ }
+
+ protected boolean canSilkHarvest()
+ {
+ return false;
+ }
+
+ public void onBlockAdded(World aWorld, int aX, int aY, int aZ)
+ {
+ if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) {
+ GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ public String getUnlocalizedName()
+ {
+ return this.mUnlocalizedName;
+ }
+
+ public String getLocalizedName()
+ {
+ return StatCollector.translateToLocal(this.mUnlocalizedName + ".name");
+ }
+
+ public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return true;
+ }
+
+ public boolean renderAsNormalBlock()
+ {
+ return true;
+ }
+
+ public boolean isOpaqueCube()
+ {
+ return true;
+ }
+
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData)
+ {
+ if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) {
+ GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z)
+ {
+ return false;
+ }
+
+ public int damageDropped(int par1)
+ {
+ return par1;
+ }
+
+ public int getDamageValue(World par1World, int par2, int par3, int par4)
+ {
+ return par1World.getBlockMetadata(par2, par3, par4);
+ }
+
+ public int quantityDropped(Random par1Random)
+ {
+ return 1;
+ }
+
+ public Item getItemDropped(int par1, Random par2Random, int par3)
+ {
+ return Item.getItemFromBlock(this);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister aIconRegister) {}
+
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList)
+ {
+ for (int i = 0; i < 16; i++) {
+ aList.add(new ItemStack(aItem, 1, i));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java b/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java
new file mode 100644
index 0000000000..ae432fa4a6
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java
@@ -0,0 +1,104 @@
+package gregtech.common.blocks;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockLiquid;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.IFluidBlock;
+
+public class GT_Block_Concretes
+ extends GT_Block_Stones_Abstract
+{
+ public GT_Block_Concretes()
+ {
+ super(GT_Item_Concretes.class, "gt.blockconcretes");
+ setResistance(20.0F);
+ this.slipperiness = 0.9F;
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Dark Concrete");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Dark Concrete Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Dark Concrete Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Dark Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Dark Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Dark Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Dark Concrete");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Dark Concrete");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Light Concrete");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Light Concrete Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Light Concrete Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Light Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Light Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Light Concrete Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Light Concrete");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Light Concrete");
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 4));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 5));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 6));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 7));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 8));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 9));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 10));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 11));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 12));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 13));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 14));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 15));
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return 1;
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ);
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ if ((aMeta >= 0) && (aMeta < 16)) {
+ return gregtech.api.enums.Textures.BlockIcons.CONCRETES[aMeta].getIcon();
+ }
+ return gregtech.api.enums.Textures.BlockIcons.CONCRETES[0].getIcon();
+ }
+
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity)
+ {
+ Block tBlock = aWorld.getBlock(aX, aY + 1, aZ);
+ if (((aEntity instanceof EntityLivingBase)) && (!(tBlock instanceof IFluidBlock)) && (!(tBlock instanceof BlockLiquid)) && (aEntity.onGround) && (!aEntity.isInWater()) && (!aEntity.isWet())) {
+ if (aEntity.isSneaking())
+ {
+ aEntity.motionX *= 0.8999999761581421D;
+ aEntity.motionZ *= 0.8999999761581421D;
+ }
+ else
+ {
+ aEntity.motionX *= 1.100000023841858D;
+ aEntity.motionZ *= 1.100000023841858D;
+ }
+ }
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ)
+ {
+ Block tBlock = aWorld.getBlock(aX, aY + 1, aZ);
+ if (((tBlock instanceof IFluidBlock)) || ((tBlock instanceof BlockLiquid))) {
+ return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ }
+ return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 0.875D, aZ + 1);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Granites.java b/src/main/java/gregtech/common/blocks/GT_Block_Granites.java
new file mode 100644
index 0000000000..906a3a2a87
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Granites.java
@@ -0,0 +1,80 @@
+package gregtech.common.blocks;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.boss.EntityWither;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class GT_Block_Granites
+ extends GT_Block_Stones_Abstract
+{
+ public GT_Block_Granites()
+ {
+ super(GT_Item_Granites.class, "gt.blockgranites");
+ setResistance(60.0F);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Black Granite");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Black Granite Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Black Granite Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Black Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Black Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Black Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Black Granite");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Black Granite");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Red Granite");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Red Granite Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Red Granite Cobblestone");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Red Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Red Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Red Granite Bricks");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Red Granite");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Red Granite");
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 4));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 5));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 6));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 7));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 8));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 9));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 10));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 11));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 12));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 13));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 14));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 15));
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return 3;
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F;
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ if ((aMeta >= 0) && (aMeta < 16)) {
+ return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon();
+ }
+ return gregtech.api.enums.Textures.BlockIcons.GRANITES[0].getIcon();
+ }
+
+ public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity)
+ {
+ return !(entity instanceof EntityWither);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
new file mode 100644
index 0000000000..5f756973c4
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
@@ -0,0 +1,578 @@
+package gregtech.common.blocks;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.IDebugableBlock;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_Generic_Block;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.api.metatileentity.BaseTileEntity;
+import gregtech.api.util.GT_BaseCrop;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.render.GT_Renderer_Block;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.ITileEntityProvider;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.Explosion;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_Block_Machines
+ extends GT_Generic_Block
+ implements IDebugableBlock, ITileEntityProvider
+{
+ public static ThreadLocal<IGregTechTileEntity> mTemporaryTileEntity = new ThreadLocal();
+
+ public GT_Block_Machines()
+ {
+ super(GT_Item_Machines.class, "gt.blockmachines", new GT_Material_Machines());
+ GregTech_API.registerMachineBlock(this, -1);
+ setHardness(1.0F);
+ setResistance(10.0F);
+ setStepSound(soundTypeMetal);
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ this.isBlockContainer = true;
+ }
+
+ public String getHarvestTool(int aMeta)
+ {
+ switch (aMeta / 4)
+ {
+ case 0:
+ return "wrench";
+ case 1:
+ return "wrench";
+ case 2:
+ return "cutter";
+ case 3:
+ return "axe";
+ }
+ return "wrench";
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return aMeta % 4;
+ }
+
+ protected boolean canSilkHarvest()
+ {
+ return false;
+ }
+
+ public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof BaseTileEntity)) {
+ ((BaseTileEntity)tTileEntity).onAdjacentBlockChange(aTileX, aTileY, aTileZ);
+ }
+ }
+
+ public void onBlockAdded(World aWorld, int aX, int aY, int aZ)
+ {
+ super.onBlockAdded(aWorld, aX, aY, aZ);
+ if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) {
+ GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ public String getUnlocalizedName()
+ {
+ return "gt.blockmachines";
+ }
+
+ public String getLocalizedName()
+ {
+ return StatCollector.translateToLocal(getUnlocalizedName() + ".name");
+ }
+
+ public int getFlammability(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face)
+ {
+ return 0;
+ }
+
+ public int getFireSpreadSpeed(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face)
+ {
+ return (GregTech_API.sMachineFlammable) && (aWorld.getBlockMetadata(aX, aY, aZ) == 0) ? 100 : 0;
+ }
+
+ public int getRenderType()
+ {
+ if (GT_Renderer_Block.INSTANCE == null) {
+ return super.getRenderType();
+ }
+ return GT_Renderer_Block.INSTANCE.mRenderID;
+ }
+
+ public boolean isFireSource(World aWorld, int aX, int aY, int aZ, ForgeDirection side)
+ {
+ return (GregTech_API.sMachineFlammable) && (aWorld.getBlockMetadata(aX, aY, aZ) == 0);
+ }
+
+ public boolean isFlammable(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face)
+ {
+ return (GregTech_API.sMachineFlammable) && (aWorld.getBlockMetadata(aX, aY, aZ) == 0);
+ }
+
+ public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean canConnectRedstone(IBlockAccess var1, int var2, int var3, int var4, int var5)
+ {
+ return true;
+ }
+
+ public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean hasTileEntity(int aMeta)
+ {
+ return true;
+ }
+
+ public boolean hasComparatorInputOverride()
+ {
+ return true;
+ }
+
+ public boolean renderAsNormalBlock()
+ {
+ return false;
+ }
+
+ public boolean canProvidePower()
+ {
+ return true;
+ }
+
+ public boolean isOpaqueCube()
+ {
+ return false;
+ }
+
+ public TileEntity createNewTileEntity(World aWorld, int aMeta)
+ {
+ return createTileEntity(aWorld, aMeta);
+ }
+
+ public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int aSide)
+ {
+ return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon();
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon();
+ }
+
+ public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2)
+ {
+ super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2);
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ return tTileEntity != null ? tTileEntity.receiveClientEvent(aData1, aData2) : false;
+ }
+
+ public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List outputAABB, Entity collider)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getMetaTileEntity() != null))
+ {
+ ((IGregTechTileEntity)tTileEntity).addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
+ return;
+ }
+ super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getMetaTileEntity() != null)) {
+ return ((IGregTechTileEntity)tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ }
+ return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ }
+
+ public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)tTileEntity).getMetaTileEntity() != null))
+ {
+ ((IGregTechTileEntity)tTileEntity).onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
+ return;
+ }
+ super.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister aIconRegister)
+ {
+ if (GregTech_API.sPostloadFinished)
+ {
+ GT_Log.out.println("GT_Mod: Setting up Icon Register for Blocks");
+ GregTech_API.sBlockIcons = aIconRegister;
+
+ GT_Log.out.println("GT_Mod: Registering MetaTileEntity specific Textures");
+ for (IMetaTileEntity tMetaTileEntity : GregTech_API.METATILEENTITIES) {
+ try
+ {
+ if (tMetaTileEntity != null) {
+ tMetaTileEntity.registerIcons(aIconRegister);
+ }
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Registering Crop specific Textures");
+ try
+ {
+ for (GT_BaseCrop tCrop : GT_BaseCrop.sCropList) {
+ tCrop.registerSprites(aIconRegister);
+ }
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ GT_Log.out.println("GT_Mod: Starting Block Icon Load Phase");
+ System.out.println("GT_Mod: Starting Block Icon Load Phase");
+ for (Runnable tRunnable : GregTech_API.sGTBlockIconload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Finished Block Icon Load Phase");
+ System.out.println("GT_Mod: Finished Block Icon Load Phase");
+ }
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return super.getBlockHardness(aWorld, aX, aY, aZ);
+ }
+
+ public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ)
+ {
+// System.out.println("player hardness");
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((tTileEntity instanceof BaseMetaTileEntity)) && (((BaseMetaTileEntity)tTileEntity).privateAccess()) && (!((BaseMetaTileEntity)tTileEntity).playerOwnsThis(aPlayer, true))) {
+// System.out.println("locked");
+ return -1.0F;
+ }
+// System.out.println("unlocked");
+// System.out.println("hardness: "+super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ));
+ return super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ);
+ }
+
+ public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int aSide, float par1, float par2, float par3)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity == null) || (aPlayer.isSneaking())) {
+ return false;
+ }
+ if ((tTileEntity instanceof IGregTechTileEntity))
+ {
+ if (((IGregTechTileEntity)tTileEntity).getTimer() < 50L) {
+ return false;
+ }
+ if ((!aWorld.isRemote) && (!((IGregTechTileEntity)tTileEntity).isUseableByPlayer(aPlayer))) {
+ return true;
+ }
+ return ((IGregTechTileEntity)tTileEntity).onRightclick(aPlayer, (byte)aSide, par1, par2, par3);
+ }
+ return false;
+ }
+
+ public void onBlockClicked(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) &&
+ ((tTileEntity instanceof IGregTechTileEntity))) {
+ ((IGregTechTileEntity)tTileEntity).onLeftclick(aPlayer);
+ }
+ }
+
+ public int getDamageValue(World aWorld, int aX, int aY, int aZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity)) {
+ return ((IGregTechTileEntity)tTileEntity).getMetaTileID();
+ }
+ return 0;
+ }
+
+ public void onBlockExploded(World aWorld, int aX, int aY, int aZ, Explosion aExplosion)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof BaseMetaTileEntity)) {
+ ((BaseMetaTileEntity)tTileEntity).doEnergyExplosion();
+ }
+ super.onBlockExploded(aWorld, aX, aY, aZ, aExplosion);
+ }
+
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block par5, int par6)
+ {
+ GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity))
+ {
+ IGregTechTileEntity tGregTechTileEntity = (IGregTechTileEntity)tTileEntity;
+ Random tRandom = new Random();
+ mTemporaryTileEntity.set(tGregTechTileEntity);
+ for (int i = 0; i < tGregTechTileEntity.getSizeInventory(); i++)
+ {
+ ItemStack tItem = tGregTechTileEntity.getStackInSlot(i);
+ if ((tItem != null) && (tItem.stackSize > 0) && (tGregTechTileEntity.isValidSlot(i)))
+ {
+ EntityItem tItemEntity = new EntityItem(aWorld, aX + tRandom.nextFloat() * 0.8F + 0.1F, aY + tRandom.nextFloat() * 0.8F + 0.1F, aZ + tRandom.nextFloat() * 0.8F + 0.1F, new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage()));
+ if (tItem.hasTagCompound()) {
+ tItemEntity.getEntityItem().setTagCompound((NBTTagCompound)tItem.getTagCompound().copy());
+ }
+ tItemEntity.motionX = (tRandom.nextGaussian() * 0.0500000007450581D);
+ tItemEntity.motionY = (tRandom.nextGaussian() * 0.0500000007450581D + 0.2000000029802322D);
+ tItemEntity.motionZ = (tRandom.nextGaussian() * 0.0500000007450581D);
+ aWorld.spawnEntityInWorld(tItemEntity);
+ tItem.stackSize = 0;
+ tGregTechTileEntity.setInventorySlotContents(i, null);
+ }
+ }
+ }
+ super.breakBlock(aWorld, aX, aY, aZ, par5, par6);
+ aWorld.removeTileEntity(aX, aY, aZ);
+ }
+
+ public ArrayList<ItemStack> getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity)) {
+ return ((IGregTechTileEntity)tTileEntity).getDrops();
+ }
+ return mTemporaryTileEntity.get() == null ? new ArrayList() : ((IGregTechTileEntity)mTemporaryTileEntity.get()).getDrops();
+ }
+
+ public int getComparatorInputOverride(World aWorld, int aX, int aY, int aZ, int aSide)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof IGregTechTileEntity))) {
+ return ((IGregTechTileEntity)tTileEntity).getComparatorValue((byte)aSide);
+ }
+ return 0;
+ }
+
+ public int isProvidingWeakPower(IBlockAccess aWorld, int aX, int aY, int aZ, int aSide)
+ {
+ if ((aSide < 0) || (aSide > 5)) {
+ return 0;
+ }
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof IGregTechTileEntity))) {
+ return ((IGregTechTileEntity)tTileEntity).getOutputRedstoneSignal(GT_Utility.getOppositeSide(aSide));
+ }
+ return 0;
+ }
+
+ public int isProvidingStrongPower(IBlockAccess aWorld, int aX, int aY, int aZ, int aSide)
+ {
+ if ((aSide < 0) || (aSide > 5)) {
+ return 0;
+ }
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof IGregTechTileEntity))) {
+ return ((IGregTechTileEntity)tTileEntity).getStrongOutputRedstoneSignal(GT_Utility.getOppositeSide(aSide));
+ }
+ return 0;
+ }
+
+ public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int par5, float chance, int par7)
+ {
+ if (!aWorld.isRemote)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && (chance < 1.0F))
+ {
+ if (((tTileEntity instanceof BaseMetaTileEntity)) && (GregTech_API.sMachineNonWrenchExplosions)) {
+ ((BaseMetaTileEntity)tTileEntity).doEnergyExplosion();
+ }
+ }
+ else {
+ super.dropBlockAsItemWithChance(aWorld, aX, aY, aZ, par5, chance, par7);
+ }
+ }
+ }
+
+ public boolean isSideSolid(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection aSide)
+ {
+ if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) {
+ return true;
+ }
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (tTileEntity != null)
+ {
+ if ((tTileEntity instanceof BaseMetaTileEntity)) {
+ return true;
+ }
+ if (((tTileEntity instanceof BaseMetaPipeEntity)) && ((((BaseMetaPipeEntity)tTileEntity).mConnections & 0xFFFFFFC0) != 0)) {
+ return true;
+ }
+ if (((tTileEntity instanceof ICoverable)) && (((ICoverable)tTileEntity).getCoverIDAtSide((byte)aSide.ordinal()) != 0)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public int getLightOpacity(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (tTileEntity == null) {
+ return 0;
+ }
+ if ((tTileEntity instanceof IGregTechTileEntity)) {
+ return ((IGregTechTileEntity)tTileEntity).getLightOpacity();
+ }
+ return aWorld.getBlockMetadata(aX, aY, aZ) == 0 ? 255 : 0;
+ }
+
+ public int getLightValue(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof BaseMetaTileEntity)) {
+ return ((BaseMetaTileEntity)tTileEntity).getLightValue();
+ }
+ return 0;
+ }
+
+ public TileEntity createTileEntity(World aWorld, int aMeta)
+ {
+ if (aMeta < 4) {
+ return GregTech_API.constructBaseMetaTileEntity();
+ }
+ return new BaseMetaPipeEntity();
+ }
+
+ public float getExplosionResistance(Entity par1Entity, World aWorld, int aX, int aY, int aZ, double explosionX, double explosionY, double explosionZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof IGregTechTileEntity))) {
+ return ((IGregTechTileEntity)tTileEntity).getBlastResistance((byte)6);
+ }
+ return 10.0F;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List)
+ {
+ for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) {
+ if (GregTech_API.METATILEENTITIES[i] != null) {
+ par3List.add(new ItemStack(par1, 1, i));
+ }
+ }
+ }
+
+ public void onBlockPlacedBy(World aWorld, int aX, int aY, int aZ, EntityLivingBase aPlayer, ItemStack aStack)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (tTileEntity == null) {
+ return;
+ }
+ if ((tTileEntity instanceof IGregTechTileEntity))
+ {
+ IGregTechTileEntity var6 = (IGregTechTileEntity)tTileEntity;
+ if (aPlayer == null)
+ {
+ var6.setFrontFacing((byte)1);
+ }
+ else
+ {
+ int var7 = MathHelper.floor_double(aPlayer.rotationYaw * 4.0F / 360.0F + 0.5D) & 0x3;
+ int var8 = Math.round(aPlayer.rotationPitch);
+ if ((var8 >= 65) && (var6.isValidFacing((byte)1))) {
+ var6.setFrontFacing((byte)1);
+ } else if ((var8 <= -65) && (var6.isValidFacing((byte)0))) {
+ var6.setFrontFacing((byte)0);
+ } else {
+ switch (var7)
+ {
+ case 0:
+ var6.setFrontFacing((byte)2); break;
+ case 1:
+ var6.setFrontFacing((byte)5); break;
+ case 2:
+ var6.setFrontFacing((byte)3); break;
+ case 3:
+ var6.setFrontFacing((byte)4);
+ }
+ }
+ }
+ }
+ }
+
+ public ArrayList<String> getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel)
+ {
+ TileEntity tTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof BaseMetaTileEntity)) {
+ return ((BaseMetaTileEntity)tTileEntity).getDebugInfo(aPlayer, aLogLevel);
+ }
+ if ((tTileEntity instanceof BaseMetaPipeEntity)) {
+ return ((BaseMetaPipeEntity)tTileEntity).getDebugInfo(aPlayer, aLogLevel);
+ }
+ return null;
+ }
+
+ public boolean recolourBlock(World aWorld, int aX, int aY, int aZ, ForgeDirection aSide, int aColor)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof IGregTechTileEntity))
+ {
+ if (((IGregTechTileEntity)tTileEntity).getColorization() == (byte)((aColor ^ 0xFFFFFFFF) & 0xF)) {
+ return false;
+ }
+ ((IGregTechTileEntity)tTileEntity).setColorization((byte)((aColor ^ 0xFFFFFFFF) & 0xF));
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores.java
new file mode 100644
index 0000000000..746b26deb5
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores.java
@@ -0,0 +1,263 @@
+package gregtech.common.blocks;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.items.GT_Generic_Block;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.render.GT_Renderer_Block;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.block.ITileEntityProvider;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.boss.EntityDragon;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class GT_Block_Ores
+ extends GT_Generic_Block
+ implements ITileEntityProvider
+{
+ public static ThreadLocal<GT_TileEntity_Ores> mTemporaryTileEntity = new ThreadLocal();
+
+ public GT_Block_Ores()
+ {
+ super(GT_Item_Ores.class, "gt.blockores", Material.rock);
+ this.isBlockContainer = true;
+ setStepSound(soundTypeStone);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_ORES);
+ for (int i = 0; i < 16; i++) {
+ GT_ModHandler.addValuableOre(this, i, 1);
+ }
+ for (int i = 1; i < GregTech_API.sGeneratedMaterials.length; i++) {
+ if (GregTech_API.sGeneratedMaterials[i] != null)
+ {
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + i + ".name", getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 1000) + ".name", getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 2000) + ".name", getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 3000) + ".name", getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 4000) + ".name", getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 16000) + ".name", "Small " + getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 17000) + ".name", "Small " + getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 18000) + ".name", "Small " + getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 19000) + ".name", "Small " + getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 20000) + ".name", "Small " + getLocalizedName(GregTech_API.sGeneratedMaterials[i]));
+ if ((GregTech_API.sGeneratedMaterials[i].mTypes & 0x8) != 0)
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.ore.get(GregTech_API.sGeneratedMaterials[i]), new ItemStack(this, 1, i));
+ GT_OreDictUnificator.registerOre(OrePrefixes.oreNetherrack.get(GregTech_API.sGeneratedMaterials[i]), new ItemStack(this, 1, i + 1000));
+ GT_OreDictUnificator.registerOre(OrePrefixes.oreEndstone.get(GregTech_API.sGeneratedMaterials[i]), new ItemStack(this, 1, i + 2000));
+ GT_OreDictUnificator.registerOre(OrePrefixes.oreBlackgranite.get(GregTech_API.sGeneratedMaterials[i]), new ItemStack(this, 1, i + 3000));
+ GT_OreDictUnificator.registerOre(OrePrefixes.oreRedgranite.get(GregTech_API.sGeneratedMaterials[i]), new ItemStack(this, 1, i + 4000));
+ }
+ }
+ }
+ }
+
+ public static boolean FUCKING_LOCK = false;
+
+ public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ)
+ {
+ if (!FUCKING_LOCK)
+ {
+ FUCKING_LOCK = true;
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ ((GT_TileEntity_Ores)tTileEntity).onUpdated();
+ }
+ }
+ FUCKING_LOCK = false;
+ }
+
+ public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock)
+ {
+ if (!FUCKING_LOCK)
+ {
+ FUCKING_LOCK = true;
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ ((GT_TileEntity_Ores)tTileEntity).onUpdated();
+ }
+ }
+ FUCKING_LOCK = false;
+ }
+
+ public String getLocalizedName(Materials aMaterial) {
+ switch (aMaterial) {
+ case InfusedAir: case InfusedDull: case InfusedEarth: case InfusedEntropy: case InfusedFire: case InfusedOrder: case InfusedVis: case InfusedWater:
+ return aMaterial.mDefaultLocalName + " Infused Stone";
+ case Vermiculite: case Bentonite: case Kaolinite: case Talc: case BasalticMineralSand: case GraniticMineralSand: case GlauconiteSand: case CassiteriteSand: case GarnetSand: case QuartzSand: case Pitchblende: case FullersEarth:
+ return aMaterial.mDefaultLocalName;
+ default:
+ return aMaterial.mDefaultLocalName + OrePrefixes.ore.mLocalizedMaterialPost;
+ }
+
+ }
+
+ public boolean onBlockEventReceived(World p_149696_1_, int p_149696_2_, int p_149696_3_, int p_149696_4_, int p_149696_5_, int p_149696_6_)
+ {
+ super.onBlockEventReceived(p_149696_1_, p_149696_2_, p_149696_3_, p_149696_4_, p_149696_5_, p_149696_6_);
+ TileEntity tileentity = p_149696_1_.getTileEntity(p_149696_2_, p_149696_3_, p_149696_4_);
+ return tileentity != null ? tileentity.receiveClientEvent(p_149696_5_, p_149696_6_) : false;
+ }
+
+ public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity)
+ {
+ return (!(entity instanceof EntityDragon)) && (super.canEntityDestroy(world, x, y, z, entity));
+ }
+
+ public String getHarvestTool(int aMeta)
+ {
+ return aMeta < 8 ? "pickaxe" : "shovel";
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return aMeta % 8;
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F;
+ }
+
+ public float getExplosionResistance(Entity par1Entity, World aWorld, int aX, int aY, int aZ, double explosionX, double explosionY, double explosionZ)
+ {
+ return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F;
+ }
+
+ protected boolean canSilkHarvest()
+ {
+ return false;
+ }
+
+ public String getUnlocalizedName()
+ {
+ return "gt.blockores";
+ }
+
+ public String getLocalizedName()
+ {
+ return StatCollector.translateToLocal(getUnlocalizedName() + ".name");
+ }
+
+ public int getRenderType()
+ {
+ if (GT_Renderer_Block.INSTANCE == null) {
+ return super.getRenderType();
+ }
+ return GT_Renderer_Block.INSTANCE.mRenderID;
+ }
+
+ public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return true;
+ }
+
+ public boolean hasTileEntity(int aMeta)
+ {
+ return true;
+ }
+
+ public boolean renderAsNormalBlock()
+ {
+ return true;
+ }
+
+ public boolean isOpaqueCube()
+ {
+ return true;
+ }
+
+ public TileEntity createNewTileEntity(World aWorld, int aMeta)
+ {
+ return createTileEntity(aWorld, aMeta);
+ }
+
+ public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int aSide)
+ {
+ return Blocks.stone.getIcon(0, 0);
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ return Blocks.stone.getIcon(0, 0);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister aIconRegister) {}
+
+ public int getDamageValue(World aWorld, int aX, int aY, int aZ)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof GT_TileEntity_Ores))) {
+ return ((GT_TileEntity_Ores)tTileEntity).getMetaData();
+ }
+ return 0;
+ }
+
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block par5, int par6)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ mTemporaryTileEntity.set((GT_TileEntity_Ores)tTileEntity);
+ }
+ super.breakBlock(aWorld, aX, aY, aZ, par5, par6);
+ aWorld.removeTileEntity(aX, aY, aZ);
+ }
+
+ public ArrayList<ItemStack> getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ return ((GT_TileEntity_Ores)tTileEntity).getDrops(aFortune);
+ }
+ return mTemporaryTileEntity.get() == null ? new ArrayList() : ((GT_TileEntity_Ores)mTemporaryTileEntity.get()).getDrops(aFortune);
+ }
+
+ public TileEntity createTileEntity(World aWorld, int aMeta)
+ {
+ return new GT_TileEntity_Ores();
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList)
+ {
+ for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++)
+ {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[i];
+ if ((tMaterial != null) && ((tMaterial.mTypes & 0x8) != 0))
+ {
+ aList.add(new ItemStack(aItem, 1, i));
+ aList.add(new ItemStack(aItem, 1, i + 1000));
+ aList.add(new ItemStack(aItem, 1, i + 2000));
+ aList.add(new ItemStack(aItem, 1, i + 3000));
+ aList.add(new ItemStack(aItem, 1, i + 4000));
+ aList.add(new ItemStack(aItem, 1, i + 16000));
+ aList.add(new ItemStack(aItem, 1, i + 17000));
+ aList.add(new ItemStack(aItem, 1, i + 18000));
+ aList.add(new ItemStack(aItem, 1, i + 19000));
+ aList.add(new ItemStack(aItem, 1, i + 20000));
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java
new file mode 100644
index 0000000000..d3963959ae
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java
@@ -0,0 +1,175 @@
+package gregtech.common.blocks;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.items.GT_Generic_Block;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class GT_Block_Stones_Abstract
+ extends GT_Generic_Block
+ implements IOreRecipeRegistrator
+{
+ public GT_Block_Stones_Abstract(Class<? extends ItemBlock> aItemClass, String aName)
+ {
+ super(aItemClass, aName, Material.rock);
+ OrePrefixes.crafting.add(this);
+ setStepSound(soundTypeStone);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS);
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 0), new ItemStack(this, 1, 7));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 1), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 2), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 3), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 4), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 5), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 6), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 7), new ItemStack(this, 1, 0));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 8), new ItemStack(this, 1, 15));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 9), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 10), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 11), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 12), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 13), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 14), new ItemStack(this, 1, 8));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 15), new ItemStack(this, 1, 8));
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(this, 1, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new ItemStack(this, 1, 3), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(this, 1, 8), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new ItemStack(this, 1, 11), 50, 4);
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 6), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "f", "X", Character.valueOf('X'), new ItemStack(this, 1, 7) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 14), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "f", "X", Character.valueOf('X'), new ItemStack(this, 1, 15) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 4), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(this, 1, 3) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 12), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(this, 1, 11) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(this, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 1, 9), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(this, 1, 8) });
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(this, 1, 3), new ItemStack(this, 1, 4), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(this, 1, 11), new ItemStack(this, 1, 12), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(this, 1, 0), new ItemStack(this, 1, 1), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(this, 1, 8), new ItemStack(this, 1, 9), 16, 10);
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 4, 3), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "XX", "XX", Character.valueOf('X'), new ItemStack(this, 4, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 4, 11), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "XX", "XX", Character.valueOf('X'), new ItemStack(this, 4, 8) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 4, 3), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "XX", "XX", Character.valueOf('X'), new ItemStack(this, 4, 7) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(this, 4, 11), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "XX", "XX", Character.valueOf('X'), new ItemStack(this, 4, 15) });
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString()))
+ {
+ GT_Values.RA.addLaserEngraverRecipe(new ItemStack(this, 1, 7), GT_Utility.copyAmount(0L, new Object[] { aStack }), new ItemStack(this, 1, 6), 50, 16);
+ GT_Values.RA.addLaserEngraverRecipe(new ItemStack(this, 1, 15), GT_Utility.copyAmount(0L, new Object[] { aStack }), new ItemStack(this, 1, 14), 50, 16);
+ }
+ }
+
+ public String getHarvestTool(int aMeta)
+ {
+ return "pickaxe";
+ }
+
+ public int getHarvestLevel(int aMeta)
+ {
+ return 1;
+ }
+
+ public float getBlockHardness(World aWorld, int aX, int aY, int aZ)
+ {
+ return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F;
+ }
+
+ public String getUnlocalizedName()
+ {
+ return this.mUnlocalizedName;
+ }
+
+ public String getLocalizedName()
+ {
+ return StatCollector.translateToLocal(this.mUnlocalizedName + ".name");
+ }
+
+ public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return false;
+ }
+
+ public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ)
+ {
+ return true;
+ }
+
+ public boolean renderAsNormalBlock()
+ {
+ return true;
+ }
+
+ public boolean isOpaqueCube()
+ {
+ return true;
+ }
+
+ public IIcon getIcon(int aSide, int aMeta)
+ {
+ if ((aMeta >= 0) && (aMeta < 16)) {
+ return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon();
+ }
+ return null;
+ }
+
+ public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z)
+ {
+ return world.getBlockMetadata(x, y, z) % 8 < 3;
+ }
+
+ public int damageDropped(int par1)
+ {
+ return par1 % 8 == 0 ? par1 + 1 : par1;
+ }
+
+ public int getDamageValue(World par1World, int par2, int par3, int par4)
+ {
+ return par1World.getBlockMetadata(par2, par3, par4);
+ }
+
+ public int quantityDropped(Random par1Random)
+ {
+ return 1;
+ }
+
+ public Item getItemDropped(int par1, Random par2Random, int par3)
+ {
+ return Item.getItemFromBlock(this);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister aIconRegister) {}
+
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList)
+ {
+ for (int i = 0; i < 16; i++) {
+ aList.add(new ItemStack(aItem, 1, i));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java
new file mode 100644
index 0000000000..634222e82f
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java
@@ -0,0 +1,29 @@
+package gregtech.common.blocks;
+
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Item_Casings1
+ extends GT_Item_Casings_Abstract
+{
+ public GT_Item_Casings1(Block par1)
+ {
+ super(par1);
+ }
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H)
+ {
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ switch (getDamage(aStack))
+ {
+ case 12:
+ aList.add(this.mCoil01Tooltip); break;
+ case 13:
+ aList.add(this.mCoil02Tooltip); break;
+ case 14:
+ aList.add(this.mCoil03Tooltip);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java
new file mode 100644
index 0000000000..a1b7f3e698
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java
@@ -0,0 +1,25 @@
+package gregtech.common.blocks;
+
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Item_Casings2
+ extends GT_Item_Casings_Abstract
+{
+ public GT_Item_Casings2(Block par1)
+ {
+ super(par1);
+ }
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H)
+ {
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ switch (getDamage(aStack))
+ {
+ case 8:
+ aList.add(this.mBlastProofTooltip);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java
new file mode 100644
index 0000000000..e27214ffef
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java
@@ -0,0 +1,12 @@
+package gregtech.common.blocks;
+
+import net.minecraft.block.Block;
+
+public class GT_Item_Casings3
+ extends GT_Item_Casings_Abstract
+{
+ public GT_Item_Casings3(Block par1)
+ {
+ super(par1);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java
new file mode 100644
index 0000000000..5c9e2fce95
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java
@@ -0,0 +1,12 @@
+package gregtech.common.blocks;
+
+import net.minecraft.block.Block;
+
+public class GT_Item_Casings4
+ extends GT_Item_Casings_Abstract
+{
+ public GT_Item_Casings4(Block par1)
+ {
+ super(par1);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java
new file mode 100644
index 0000000000..1412660479
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java
@@ -0,0 +1,45 @@
+package gregtech.common.blocks;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_LanguageManager;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+
+public abstract class GT_Item_Casings_Abstract
+ extends ItemBlock
+{
+ public GT_Item_Casings_Abstract(Block par1)
+ {
+ super(par1);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS);
+ }
+
+ public int getMetadata(int aMeta)
+ {
+ return aMeta;
+ }
+
+ protected final String mNoMobsToolTip = GT_LanguageManager.addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block");
+ protected final String mNoTileEntityToolTip = GT_LanguageManager.addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!");
+ protected final String mCoil01Tooltip = GT_LanguageManager.addStringLocalization("gt.coil01tooltip", "Base Heating Capacity = 1800 Kelvin");
+ protected final String mCoil02Tooltip = GT_LanguageManager.addStringLocalization("gt.coil02tooltip", "Base Heating Capacity = 2700 Kelvin");
+ protected final String mCoil03Tooltip = GT_LanguageManager.addStringLocalization("gt.coil03tooltip", "Base Heating Capacity = 3600 Kelvin");
+ protected final String mBlastProofTooltip = GT_LanguageManager.addStringLocalization("gt.blastprooftooltip", "This Block is Blast Proof");
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack);
+ }
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H)
+ {
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ aList.add(this.mNoMobsToolTip);
+ aList.add(this.mNoTileEntityToolTip);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java b/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java
new file mode 100644
index 0000000000..7f4d96193e
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java
@@ -0,0 +1,24 @@
+package gregtech.common.blocks;
+
+import gregtech.api.util.GT_LanguageManager;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Item_Concretes
+ extends GT_Item_Stones_Abstract
+{
+ public GT_Item_Concretes(Block par1)
+ {
+ super(par1);
+ }
+
+ private final String mRunFasterToolTip = GT_LanguageManager.addStringLocalization("gt.runfastertooltip", "You can walk faster on this Block");
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H)
+ {
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ aList.add(this.mRunFasterToolTip);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Granites.java b/src/main/java/gregtech/common/blocks/GT_Item_Granites.java
new file mode 100644
index 0000000000..57244ea7a7
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Granites.java
@@ -0,0 +1,12 @@
+package gregtech.common.blocks;
+
+import net.minecraft.block.Block;
+
+public class GT_Item_Granites
+ extends GT_Item_Stones_Abstract
+{
+ public GT_Item_Granites(Block par1)
+ {
+ super(par1);
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java
new file mode 100644
index 0000000000..0f7c4655a4
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java
@@ -0,0 +1,166 @@
+package gregtech.common.blocks;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_ItsNotMyFaultException;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+
+public class GT_Item_Machines
+ extends ItemBlock
+{
+ public GT_Item_Machines(Block par1)
+ {
+ super(par1);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ }
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean par4)
+ {
+ try
+ {
+ int tDamage = getDamage(aStack);
+ if ((tDamage <= 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) {
+ return;
+ }
+ if (tDamage == 0)
+ {
+ aList.add("WARNING, THE EXISTENCE OF THIS ITEM IS A BUG");
+ aList.add("IF YOU GOT IT IN SURVIVAL THEN PLEASE REPORT IT");
+ }
+ else
+ {
+ TileEntity temp = GregTech_API.sBlockMachines.createTileEntity(aPlayer == null ? GT_Values.DW : aPlayer.worldObj, GregTech_API.METATILEENTITIES[tDamage] == null ? 0 : GregTech_API.METATILEENTITIES[tDamage].getTileEntityBaseType());
+ if (temp != null)
+ {
+ temp.setWorldObj(aPlayer == null ? GT_Values.DW : aPlayer.worldObj);temp.xCoord = 0;temp.yCoord = 0;temp.zCoord = 0;
+ if ((temp instanceof IGregTechTileEntity))
+ {
+ IGregTechTileEntity tTileEntity = (IGregTechTileEntity)temp;
+ tTileEntity.setInitialValuesAsNBT(new NBTTagCompound(), (short)tDamage);
+ if (tTileEntity.getDescription() != null)
+ {
+ int i = 0;
+ for (String tDescription : tTileEntity.getDescription()) {
+ if (GT_Utility.isStringValid(tDescription)) {
+ aList.add(GT_LanguageManager.addStringLocalization("TileEntity_DESCRIPTION_" + tDamage + "_Index_" + i++, tDescription, !GregTech_API.sPostloadFinished));
+ }
+ }
+ }
+ if (tTileEntity.getEUCapacity() > 0L)
+ {
+ if (tTileEntity.getInputVoltage() > 0L) {
+ aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ", !GregTech_API.sPostloadFinished) + EnumChatFormatting.GREEN + tTileEntity.getInputVoltage() + " (" + GT_Values.VN[GT_Utility.getTier(tTileEntity.getInputVoltage())] + ")" + EnumChatFormatting.GRAY);
+ }
+ if (tTileEntity.getOutputVoltage() > 0L) {
+ aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ", !GregTech_API.sPostloadFinished) + EnumChatFormatting.GREEN + tTileEntity.getOutputVoltage() + " (" + GT_Values.VN[GT_Utility.getTier(tTileEntity.getOutputVoltage())] + ")" + EnumChatFormatting.GRAY);
+ }
+ if (tTileEntity.getOutputAmperage() > 1L) {
+ aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_AMOUNT", "Amperage: ", !GregTech_API.sPostloadFinished) + EnumChatFormatting.YELLOW + tTileEntity.getOutputAmperage() + EnumChatFormatting.GRAY);
+ }
+ aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ", !GregTech_API.sPostloadFinished) + EnumChatFormatting.BLUE + tTileEntity.getEUCapacity() + EnumChatFormatting.GRAY);
+ }
+ }
+ }
+ }
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null)
+ {
+ if (aNBT.getBoolean("mMuffler")) {
+ aList.add(GT_LanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade", !GregTech_API.sPostloadFinished));
+ }
+ if (aNBT.getBoolean("mSteamConverter")) {
+ aList.add(GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMCONVERTER", "has Steam Upgrade", !GregTech_API.sPostloadFinished));
+ }
+ int tAmount = 0;
+ if ((tAmount = aNBT.getByte("mSteamTanks")) > 0) {
+ aList.add(tAmount + " " + GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades", !GregTech_API.sPostloadFinished));
+ }
+ }
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+
+ public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
+ {
+ return false;
+ }
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ short tDamage = (short)getDamage(aStack);
+ if ((tDamage < 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) {
+ return "";
+ }
+ if (GregTech_API.METATILEENTITIES[tDamage] != null) {
+ return getUnlocalizedName() + "." + GregTech_API.METATILEENTITIES[tDamage].getMetaName();
+ }
+ return "";
+ }
+
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer)
+ {
+ super.onCreated(aStack, aWorld, aPlayer);
+ short tDamage = (short)getDamage(aStack);
+ if ((tDamage < 0) || ((tDamage >= GregTech_API.METATILEENTITIES.length) && (GregTech_API.METATILEENTITIES[tDamage] != null))) {
+ GregTech_API.METATILEENTITIES[tDamage].onCreated(aStack, aWorld, aPlayer);
+ }
+ }
+
+ public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int side, float hitX, float hitY, float hitZ, int aMeta)
+ {
+ short tDamage = (short)getDamage(aStack);
+ if (tDamage > 0)
+ {
+ if (GregTech_API.METATILEENTITIES[tDamage] == null) {
+ return false;
+ }
+ int tMetaData = GregTech_API.METATILEENTITIES[tDamage].getTileEntityBaseType();
+ if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tMetaData, 3)) {
+ return false;
+ }
+ if (aWorld.getBlock(aX, aY, aZ) != this.field_150939_a) {
+ throw new GT_ItsNotMyFaultException("Failed to place Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it.");
+ }
+ if (aWorld.getBlockMetadata(aX, aY, aZ) != tMetaData) {
+ throw new GT_ItsNotMyFaultException("Failed to set the MetaValue of the Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it.");
+ }
+ IGregTechTileEntity tTileEntity = (IGregTechTileEntity)aWorld.getTileEntity(aX, aY, aZ);
+ if (tTileEntity != null)
+ {
+ tTileEntity.setInitialValuesAsNBT(tTileEntity.isServerSide() ? aStack.getTagCompound() : null, tDamage);
+ if (aPlayer != null) {
+ tTileEntity.setOwnerName(aPlayer.getDisplayName());
+ }
+ tTileEntity.getMetaTileEntity().initDefaultModes(aStack.getTagCompound());
+ }
+ }
+ else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3))
+ {
+ return false;
+ }
+ if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a)
+ {
+ this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack);
+ this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Ores.java b/src/main/java/gregtech/common/blocks/GT_Item_Ores.java
new file mode 100644
index 0000000000..ab49dfdd88
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Ores.java
@@ -0,0 +1,54 @@
+package gregtech.common.blocks;
+
+import gregtech.api.GregTech_API;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class GT_Item_Ores
+ extends ItemBlock
+{
+ public GT_Item_Ores(Block par1)
+ {
+ super(par1);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS);
+ }
+
+ public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
+ {
+ return false;
+ }
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack);
+ }
+
+ public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int side, float hitX, float hitY, float hitZ, int aMeta)
+ {
+ short tDamage = (short)getDamage(aStack);
+ if (tDamage > 0)
+ {
+ if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, GT_TileEntity_Ores.getHarvestData(tDamage), 3)) {
+ return false;
+ }
+ GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores)aWorld.getTileEntity(aX, aY, aZ);
+ tTileEntity.mMetaData = tDamage;
+ tTileEntity.mNatural = false;
+ }
+ else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, 0, 3))
+ {
+ return false;
+ }
+ if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a)
+ {
+ this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack);
+ this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java
new file mode 100644
index 0000000000..4b9336099f
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java
@@ -0,0 +1,41 @@
+package gregtech.common.blocks;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_LanguageManager;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+
+public class GT_Item_Stones_Abstract
+ extends ItemBlock
+{
+ public GT_Item_Stones_Abstract(Block par1)
+ {
+ super(par1);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS);
+ }
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack);
+ }
+
+ public int getMetadata(int aMeta)
+ {
+ return aMeta;
+ }
+
+ private final String mNoMobsToolTip = GT_LanguageManager.addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block");
+
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H)
+ {
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ if (aStack.getItemDamage() % 8 >= 3) {
+ aList.add(this.mNoMobsToolTip);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Material_Casings.java b/src/main/java/gregtech/common/blocks/GT_Material_Casings.java
new file mode 100644
index 0000000000..f2df366a21
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Material_Casings.java
@@ -0,0 +1,21 @@
+package gregtech.common.blocks;
+
+import net.minecraft.block.material.MapColor;
+import net.minecraft.block.material.Material;
+
+public class GT_Material_Casings
+ extends Material
+{
+ public static final Material INSTANCE = new GT_Material_Casings();
+
+ private GT_Material_Casings()
+ {
+ super(MapColor.ironColor);
+ setRequiresTool();
+ }
+
+ public boolean isOpaque()
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Material_Machines.java b/src/main/java/gregtech/common/blocks/GT_Material_Machines.java
new file mode 100644
index 0000000000..5abe245c99
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Material_Machines.java
@@ -0,0 +1,21 @@
+package gregtech.common.blocks;
+
+import net.minecraft.block.material.MapColor;
+import net.minecraft.block.material.Material;
+
+public class GT_Material_Machines
+ extends Material
+{
+ public GT_Material_Machines()
+ {
+ super(MapColor.ironColor);
+ setRequiresTool();
+ setImmovableMobility();
+ setAdventureModeExempt();
+ }
+
+ public boolean isOpaque()
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java b/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java
new file mode 100644
index 0000000000..4dbc01fda8
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java
@@ -0,0 +1,68 @@
+package gregtech.common.blocks;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+import gregtech.api.net.GT_Packet;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class GT_Packet_Ores
+ extends GT_Packet
+{
+ private int mX;
+ private int mZ;
+ private short mY;
+ private short mMetaData;
+
+ public GT_Packet_Ores()
+ {
+ super(true);
+ }
+
+ public GT_Packet_Ores(int aX, short aY, int aZ, short aMetaData)
+ {
+ super(false);
+ this.mX = aX;
+ this.mY = aY;
+ this.mZ = aZ;
+ this.mMetaData = aMetaData;
+ }
+
+ public byte[] encode()
+ {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(12);
+
+ tOut.writeInt(this.mX);
+ tOut.writeShort(this.mY);
+ tOut.writeInt(this.mZ);
+ tOut.writeShort(this.mMetaData);
+
+ return tOut.toByteArray();
+ }
+
+ public GT_Packet decode(ByteArrayDataInput aData)
+ {
+ return new GT_Packet_Ores(aData.readInt(), aData.readShort(), aData.readInt(), aData.readShort());
+ }
+
+ public void process(IBlockAccess aWorld)
+ {
+ if (aWorld != null)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(this.mX, this.mY, this.mZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ ((GT_TileEntity_Ores)tTileEntity).mMetaData = this.mMetaData;
+ }
+ if (((aWorld instanceof World)) && (((World)aWorld).isRemote)) {
+ ((World)aWorld).markBlockForUpdate(this.mX, this.mY, this.mZ);
+ }
+ }
+ }
+
+ public byte getPacketID()
+ {
+ return 3;
+ }
+}
diff --git a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java
new file mode 100644
index 0000000000..e032f781f7
--- /dev/null
+++ b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java
@@ -0,0 +1,247 @@
+package gregtech.common.blocks;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.ITexturedTileEntity;
+import gregtech.api.net.IGT_NetworkHandler;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.Packet;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class GT_TileEntity_Ores
+ extends TileEntity
+ implements ITexturedTileEntity
+{
+ private static final ITexture[] mStoneTextures = { new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.netherrack, 0, 0), new GT_CopiedBlockTexture(Blocks.end_stone, 0, 0), new GT_RenderedTexture(Textures.BlockIcons.GRANITE_BLACK_STONE), new GT_RenderedTexture(Textures.BlockIcons.GRANITE_RED_STONE), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0), new GT_CopiedBlockTexture(Blocks.stone, 0, 0) };
+ public short mMetaData = 0;
+ public boolean mNatural = false;
+ public boolean mBlocked = true;
+
+ public void readFromNBT(NBTTagCompound aNBT)
+ {
+ super.readFromNBT(aNBT);
+ this.mMetaData = aNBT.getShort("m");
+ this.mNatural = aNBT.getBoolean("n");
+ }
+
+ public void writeToNBT(NBTTagCompound aNBT)
+ {
+ super.writeToNBT(aNBT);
+ aNBT.setShort("m", this.mMetaData);
+ aNBT.setBoolean("n", this.mNatural);
+ }
+
+ public void onUpdated()
+ {
+ if ((!this.worldObj.isRemote) && (this.mBlocked))
+ {
+ this.mBlocked = false;
+ GT_Values.NW.sendPacketToAllPlayersInRange(this.worldObj, new GT_Packet_Ores(this.xCoord, (short)this.yCoord, this.zCoord, this.mMetaData), this.xCoord, this.zCoord);
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ if (!this.worldObj.isRemote) {
+ if ((this.mBlocked == (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord + 1, this.yCoord, this.zCoord)) && (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord - 1, this.yCoord, this.zCoord)) && (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord + 1, this.zCoord)) && (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord - 1, this.zCoord)) && (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord, this.zCoord + 1)) && (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord, this.zCoord - 1)) ? 1 : 0) == 0) {
+ GT_Values.NW.sendPacketToAllPlayersInRange(this.worldObj, new GT_Packet_Ores(this.xCoord, (short)this.yCoord, this.zCoord, this.mMetaData), this.xCoord, this.zCoord);
+ }
+ }
+ return null;
+ }
+
+ public static byte getHarvestData(short aMetaData)
+ {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(aMetaData % 1000)];
+ return aMaterial == null ? 0 : (byte)Math.max((aMetaData % 16000 / 1000 == 3) || (aMetaData % 16000 / 1000 == 4) ? 3 : 0, Math.min(7, aMaterial.mToolQuality - (aMetaData < 16000 ? 0 : 1)));
+ }
+
+ public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta)
+ {
+ this.mMetaData = ((short)(int)(this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L));
+ if (aOverridingStoneBlock.isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.netherrack)) {
+ this.mMetaData = ((short)(this.mMetaData + 1000));
+ } else if (aOverridingStoneBlock.isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.end_stone)) {
+ this.mMetaData = ((short)(this.mMetaData + 2000));
+ } else if (aOverridingStoneBlock.isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, GregTech_API.sBlockGranites)) {
+ if (aOverridingStoneBlock == GregTech_API.sBlockGranites)
+ {
+ if (aOverridingStoneMeta < 8) {
+ this.mMetaData = ((short)(this.mMetaData + 3000));
+ } else {
+ this.mMetaData = ((short)(this.mMetaData + 4000));
+ }
+ }
+ else {
+ this.mMetaData = ((short)(this.mMetaData + 3000));
+ }
+ }
+ this.worldObj.setBlockMetadataWithNotify(this.xCoord, this.yCoord, this.zCoord, getHarvestData(this.mMetaData), 0);
+ }
+
+ public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData)
+ {
+ aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1));
+ Block tBlock = aWorld.getBlock(aX, aY, aZ);
+ if ((aMetaData > 0) && (tBlock != Blocks.air))
+ {
+ if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) {
+ aMetaData += 1000;
+ } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)) {
+ aMetaData += 2000;
+ } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites))
+ {
+ if (tBlock == GregTech_API.sBlockGranites)
+ {
+ if (aWorld.getBlockMetadata(aX, aY, aZ) < 8) {
+ aMetaData += 3000;
+ } else {
+ aMetaData += 4000;
+ }
+ }
+ else {
+ aMetaData += 3000;
+ }
+ }
+ else if (!tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) {
+ return false;
+ }
+ aWorld.setBlock(aX, aY, aZ, GregTech_API.sBlockOres1, getHarvestData((short)aMetaData), 0);
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores))
+ {
+ ((GT_TileEntity_Ores)tTileEntity).mMetaData = ((short)aMetaData);
+ ((GT_TileEntity_Ores)tTileEntity).mNatural = true;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public short getMetaData()
+ {
+ return this.mMetaData;
+ }
+
+ public boolean canUpdate()
+ {
+ return false;
+ }
+
+ public ArrayList<ItemStack> getDrops(int aFortune)
+ {
+ ArrayList<ItemStack> rList = new ArrayList();
+ if (this.mMetaData <= 0)
+ {
+ rList.add(new ItemStack(Blocks.cobblestone, 1, 0));
+ return rList;
+ }
+ if (this.mMetaData < 16000)
+ {
+ rList.add(new ItemStack(GregTech_API.sBlockOres1, 1, this.mMetaData));
+ return rList;
+ }
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)];
+ if (!this.mNatural) {
+ aFortune = 0;
+ }
+ if (aMaterial != null)
+ {
+ Random tRandom = new Random(this.xCoord ^ this.yCoord ^ this.zCoord);
+ ArrayList<ItemStack> tSelector = new ArrayList();
+
+
+ ItemStack tStack = GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 1; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 2; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 12; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L), 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 5; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 10; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 5; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L);
+ if (tStack != null) {
+ for (int i = 0; i < 10; i++) {
+ tSelector.add(tStack);
+ }
+ }
+ if (tSelector.size() > 0)
+ {
+ int i = 0;
+ for (int j = Math.max(1, aMaterial.mOreMultiplier + (aFortune > 0 ? tRandom.nextInt(1 + aFortune * aMaterial.mOreMultiplier) : 0) / 2); i < j; i++) {
+ rList.add(GT_Utility.copyAmount(1L, new Object[] { tSelector.get(tRandom.nextInt(tSelector.size())) }));
+ }
+ }
+ if (tRandom.nextInt(3 + aFortune) > 1) {
+ switch (this.mMetaData / 1000 % 16)
+ {
+ case 0:
+ rList.add(GT_OreDictUnificator.get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.Stone, 1L)); break;
+ case 1:
+ rList.add(GT_OreDictUnificator.get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.Netherrack, 1L)); break;
+ case 2:
+ rList.add(GT_OreDictUnificator.get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.Endstone, 1L)); break;
+ case 3:
+ rList.add(GT_OreDictUnificator.get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.GraniteBlack, 1L)); break;
+ case 4:
+ rList.add(GT_OreDictUnificator.get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.GraniteRed, 1L));
+ }
+ }
+ }
+ return rList;
+ }
+
+ public ITexture[] getTexture(byte aSide)
+ {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)];
+ if ((aMaterial != null) && (this.mMetaData < 32000)) {
+ return new ITexture[] { mStoneTextures[(this.mMetaData / 1000 % 16)], new GT_RenderedTexture(aMaterial.mIconSet.mTextures[this.mMetaData/16000 ==0 ? OrePrefixes.ore.mTextureIndex:OrePrefixes.oreSmall.mTextureIndex], aMaterial.mRGBa) };
+ }
+ return new ITexture[] { mStoneTextures[0], new GT_RenderedTexture(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex]) };
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
new file mode 100644
index 0000000000..3212ce92af
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
@@ -0,0 +1,112 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_Arm
+ extends GT_CoverBehavior
+{
+ public final int mTickRate;
+
+ public GT_Cover_Arm(int aTickRate)
+ {
+ this.mTickRate = aTickRate;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aCoverVariable == 0) || (((aTileEntity instanceof IMachineProgress)) && (!((IMachineProgress)aTileEntity).isAllowedToWork()))) {
+ return aCoverVariable;
+ }
+ TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(aSide);
+ aTileEntity.decreaseStoredEnergyUnits(1L, true);
+ if (aTileEntity.getUniversalEnergyCapacity() >= 128L)
+ {
+ if (aTileEntity.isUniversalEnergyStored(256L)) {
+ aTileEntity.decreaseStoredEnergyUnits(4 * GT_Utility.moveOneItemStackIntoSlot(aCoverVariable > 0 ? aTileEntity : tTileEntity, aCoverVariable > 0 ? tTileEntity : aTileEntity, aCoverVariable > 0 ? aSide : GT_Utility.getOppositeSide(aSide), Math.abs(aCoverVariable) - 1, null, false, (byte)64, (byte)1, (byte)64, (byte)1), true);
+ }
+ }
+ else {
+ GT_Utility.moveOneItemStackIntoSlot(aCoverVariable > 0 ? aTileEntity : tTileEntity, aCoverVariable > 0 ? tTileEntity : aTileEntity, aCoverVariable > 0 ? aSide : GT_Utility.getOppositeSide(aSide), Math.abs(aCoverVariable) - 1, null, false, (byte)64, (byte)1, (byte)64, (byte)1);
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ)[0] >= 0.5F) {
+ aCoverVariable += 16;
+ } else {
+ aCoverVariable -= 16;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, (aCoverVariable > 0 ? "Puts out into adjacent Slot #" : "Grabs in for own Slot #") + (Math.abs(aCoverVariable) - 1));
+ return aCoverVariable;
+ }
+
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ)[0] >= 0.5F) {
+ aCoverVariable++;
+ } else {
+ aCoverVariable--;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, (aCoverVariable > 0 ? "Puts out into adjacent Slot #" : "Grabs in for own Slot #") + (Math.abs(aCoverVariable) - 1));
+ aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
+ return true;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return this.mTickRate;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Blastproof.java b/src/main/java/gregtech/common/covers/GT_Cover_Blastproof.java
new file mode 100644
index 0000000000..8c92eb9175
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Blastproof.java
@@ -0,0 +1,25 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+
+public class GT_Cover_Blastproof
+ extends GT_CoverBehavior
+{
+ private final float mLevel;
+
+ public GT_Cover_Blastproof(float aLevel)
+ {
+ this.mLevel = aLevel;
+ }
+
+ public float getBlastProofLevel(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return this.mLevel;
+ }
+
+ public boolean isSimpleCover()
+ {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
new file mode 100644
index 0000000000..ee06b47f51
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
@@ -0,0 +1,85 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_ControlsWork
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if(aTileEntity instanceof IMachineProgress)
+ {
+ if((aInputRedstone > 0) == (aCoverVariable == 0) && aCoverVariable != 2)
+ ((IMachineProgress)aTileEntity).enableWorking();
+ else
+ ((IMachineProgress)aTileEntity).disableWorking();
+ ((IMachineProgress)aTileEntity).setWorkDataValue(aInputRedstone);
+ }
+ return aCoverVariable;
+}
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced)
+ {
+ if ((aTileEntity instanceof IMachineProgress))
+ {
+ ((IMachineProgress)aTileEntity).enableWorking();
+ ((IMachineProgress)aTileEntity).setWorkDataValue((byte)0);
+ }
+ return true;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 3;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "No Work at all");
+ }
+ return aCoverVariable;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
new file mode 100644
index 0000000000..10d2eb8008
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
@@ -0,0 +1,133 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_Conveyor
+ extends GT_CoverBehavior
+{
+ public final int mTickRate;
+
+ public GT_Cover_Conveyor(int aTickRate)
+ {
+ this.mTickRate = aTickRate;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return aCoverVariable;
+ }
+ }
+ TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(aSide);
+ aTileEntity.decreaseStoredEnergyUnits(1L, true);
+ if (((aCoverVariable % 2 != 1) || (aSide != 1)) && ((aCoverVariable % 2 != 0) || (aSide != 0)) && (aTileEntity.getUniversalEnergyCapacity() >= 128L))
+ {
+ if (aTileEntity.isUniversalEnergyStored(256L)) {
+ aTileEntity.decreaseStoredEnergyUnits(4 * GT_Utility.moveOneItemStack(aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity, aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity, aCoverVariable % 2 != 0 ? GT_Utility.getOppositeSide(aSide) : aSide, aCoverVariable % 2 == 0 ? GT_Utility.getOppositeSide(aSide) : aSide, null, false, (byte)64, (byte)1, (byte)64, (byte)1), true);
+ }
+ }
+ else {
+ GT_Utility.moveOneItemStack(aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity, aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity, aCoverVariable % 2 != 0 ? GT_Utility.getOppositeSide(aSide) : aSide, aCoverVariable % 2 == 0 ? GT_Utility.getOppositeSide(aSide) : aSide, null, false, (byte)64, (byte)1, (byte)64, (byte)1);
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 12;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export (conditional)");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (conditional)");
+ }
+ if (aCoverVariable == 4) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export (invert cond)");
+ }
+ if (aCoverVariable == 5) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (invert cond)");
+ }
+ if (aCoverVariable == 6) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input");
+ }
+ if (aCoverVariable == 7) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output");
+ }
+ if (aCoverVariable == 8) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input (conditional)");
+ }
+ if (aCoverVariable == 9) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output (conditional)");
+ }
+ if (aCoverVariable == 10) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input (invert cond)");
+ }
+ if (aCoverVariable == 11) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output (invert cond)");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0);
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0);
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return this.mTickRate;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java b/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java
new file mode 100644
index 0000000000..0198146fc6
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java
@@ -0,0 +1,35 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ContainerWorkbench;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.network.play.server.S2DPacketOpenWindow;
+import net.minecraft.world.World;
+
+public class GT_Cover_Crafting
+ extends GT_CoverBehavior
+{
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if ((aPlayer instanceof EntityPlayerMP))
+ {
+ ((EntityPlayerMP)aPlayer).getNextWindowId();
+ ((EntityPlayerMP)aPlayer).playerNetServerHandler.sendPacket(new S2DPacketOpenWindow(((EntityPlayerMP)aPlayer).currentWindowId, 1, "Crafting", 9, true));
+ ((EntityPlayerMP)aPlayer).openContainer = new ContainerWorkbench(((EntityPlayerMP)aPlayer).inventory, ((EntityPlayerMP)aPlayer).worldObj, aTileEntity.getXCoord(), aTileEntity.getYCoord(), aTileEntity.getZCoord())
+ {
+ public boolean canInteractWith(EntityPlayer par1EntityPlayer)
+ {
+ return true;
+ }
+ };
+ ((EntityPlayerMP)aPlayer).openContainer.windowId = ((EntityPlayerMP)aPlayer).currentWindowId;
+ ((EntityPlayerMP)aPlayer).openContainer.addCraftingToCrafters((EntityPlayerMP)aPlayer);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java b/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java
new file mode 100644
index 0000000000..119e054b54
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java
@@ -0,0 +1,94 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_DoesWork
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aTileEntity instanceof IMachineProgress))
+ {
+ if (aCoverVariable < 2)
+ {
+ int tScale = ((IMachineProgress)aTileEntity).getMaxProgress() / 15;
+ if ((tScale > 0) && (((IMachineProgress)aTileEntity).hasThingsToDo())) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(((IMachineProgress)aTileEntity).getProgress() / tScale) : (byte)(15 - ((IMachineProgress)aTileEntity).getProgress() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else
+ {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)((aCoverVariable % 2 == 0 ? 1 : 0) != (((IMachineProgress)aTileEntity).getMaxProgress() == 0 ? 1 : 0) ? 0 : 15));
+ }
+ }
+ else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)0);
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 4;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Ready to work");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Not ready to work");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 5;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Drain.java b/src/main/java/gregtech/common/covers/GT_Cover_Drain.java
new file mode 100644
index 0000000000..a17098e8b2
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Drain.java
@@ -0,0 +1,108 @@
+package gregtech.common.covers;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidBlock;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_Cover_Drain
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aCoverVariable % 3 > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable % 3 < 2) {
+ return aCoverVariable;
+ }
+ }
+ if (aSide != 6)
+ {
+ Block tBlock = aTileEntity.getBlockAtSide(aSide);
+ if ((aCoverVariable < 3) && ((aTileEntity instanceof IFluidHandler)))
+ {
+ if ((aSide == 1) &&
+ (aTileEntity.getWorld().isRaining()) &&
+ (aTileEntity.getWorld().getPrecipitationHeight(aTileEntity.getXCoord(), aTileEntity.getZCoord()) - 2 < aTileEntity.getYCoord()))
+ {
+ int tAmount = (int)(aTileEntity.getBiome().rainfall * 10.0F);
+ if (tAmount > 0) {
+ ((IFluidHandler)aTileEntity).fill(ForgeDirection.getOrientation(aSide), Materials.Water.getFluid(aTileEntity.getWorld().isThundering() ? tAmount * 2 : tAmount), true);
+ }
+ }
+ FluidStack tLiquid = null;
+ if (tBlock != null)
+ {
+ if (((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water)) && (aTileEntity.getMetaIDAtSide(aSide) == 0)) {
+ tLiquid = Materials.Water.getFluid(1000L);
+ } else if (((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava)) && (aTileEntity.getMetaIDAtSide(aSide) == 0)) {
+ tLiquid = Materials.Lava.getFluid(1000L);
+ } else if ((tBlock instanceof IFluidBlock)) {
+ tLiquid = ((IFluidBlock)tBlock).drain(aTileEntity.getWorld(), aTileEntity.getOffsetX(aSide, 1), aTileEntity.getOffsetY(aSide, 1), aTileEntity.getOffsetZ(aSide, 1), false);
+ }
+ if ((tLiquid != null) && (tLiquid.getFluid() != null) && ((aSide > 1) || ((aSide == 0) && (tLiquid.getFluid().getDensity() <= 0)) || ((aSide == 1) && (tLiquid.getFluid().getDensity() >= 0))) &&
+ (((IFluidHandler)aTileEntity).fill(ForgeDirection.getOrientation(aSide), tLiquid, false) == tLiquid.amount))
+ {
+ ((IFluidHandler)aTileEntity).fill(ForgeDirection.getOrientation(aSide), tLiquid, true);
+ aTileEntity.getWorld().setBlockToAir(aTileEntity.getXCoord() + ForgeDirection.getOrientation(aSide).offsetX, aTileEntity.getYCoord() + ForgeDirection.getOrientation(aSide).offsetY, aTileEntity.getZCoord() + ForgeDirection.getOrientation(aSide).offsetZ);
+ }
+ }
+ }
+ if ((aCoverVariable >= 3) && (tBlock != null) && (
+ (tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava) || (tBlock == Blocks.water) || (tBlock == Blocks.flowing_water) || ((tBlock instanceof IFluidBlock)))) {
+ aTileEntity.getWorld().setBlock(aTileEntity.getOffsetX(aSide, 1), aTileEntity.getOffsetY(aSide, 1), aTileEntity.getOffsetZ(aSide, 1), Blocks.air, 0, 0);
+ }
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 6;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (conditional)");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (invert cond)");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Keep Liquids Away");
+ }
+ if (aCoverVariable == 4) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Keep Liquids Away (conditional)");
+ }
+ if (aCoverVariable == 5) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Keep Liquids Away (invert cond)");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {}
+ return ((IMachineProgress)aTileEntity).isAllowedToWork() == aCoverVariable < 2;
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return aCoverVariable < 3 ? 50 : 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
new file mode 100644
index 0000000000..6917e6bf0a
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
@@ -0,0 +1,187 @@
+package gregtech.common.covers;
+
+import ic2.api.item.IElectricItem;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.util.GT_BaseCrop;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_EUMeter
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ long tScale = 0L;
+ if (aCoverVariable < 2)
+ {
+ tScale = aTileEntity.getUniversalEnergyCapacity() / 15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(aTileEntity.getUniversalEnergyStored() / tScale) : (byte)(int)(15L - aTileEntity.getUniversalEnergyStored() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else if (aCoverVariable < 4)
+ {
+ tScale = aTileEntity.getEUCapacity() / 15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(aTileEntity.getStoredEU() / tScale) : (byte)(int)(15L - aTileEntity.getStoredEU() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else if (aCoverVariable < 6)
+ {
+ tScale = aTileEntity.getSteamCapacity() / 15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(aTileEntity.getStoredSteam() / tScale) : (byte)(int)(15L - aTileEntity.getStoredSteam() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else if (aCoverVariable < 8)
+ {
+ tScale = aTileEntity.getInputVoltage() * aTileEntity.getInputAmperage() / 15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(aTileEntity.getAverageElectricInput() / tScale) : (byte)(int)(15L - aTileEntity.getAverageElectricInput() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else if (aCoverVariable < 10)
+ {
+ tScale = aTileEntity.getOutputVoltage() * aTileEntity.getOutputAmperage() / 15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(aTileEntity.getAverageElectricOutput() / tScale) : (byte)(int)(15L - aTileEntity.getAverageElectricOutput() / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ else if (aCoverVariable < 12)
+ {
+ tScale = aTileEntity.getEUCapacity();
+ long tStored = aTileEntity.getStoredEU();
+ if(aTileEntity instanceof IGregTechTileEntity){
+ IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aTileEntity;
+ IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity();
+ if(mTileEntity instanceof GT_MetaTileEntity_BasicBatteryBuffer){
+ GT_MetaTileEntity_BasicBatteryBuffer buffer = (GT_MetaTileEntity_BasicBatteryBuffer) mTileEntity;
+ if(buffer.mInventory!=null){
+ for(ItemStack aStack : buffer.mInventory){
+ if (GT_ModHandler.isElectricItem(aStack)) {
+
+ if(aStack.getItem() instanceof GT_MetaBase_Item){
+ Long[] stats = ((GT_MetaBase_Item)aStack.getItem()).getElectricStats(aStack);
+ if(stats!=null){
+ tScale = tScale + stats[0];
+ tStored = tStored + ((GT_MetaBase_Item)aStack.getItem()).getRealCharge(aStack);
+ }
+ }else if(aStack.getItem() instanceof IElectricItem){
+ tStored = tStored + (long)ic2.api.item.ElectricItem.manager.getCharge(aStack);
+ tScale = tScale + (long)((IElectricItem)aStack.getItem()).getMaxCharge(aStack);
+ }
+ }
+ }
+
+ }}}
+ tScale = tScale/15L;
+ if (tScale > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte)(int)(tStored / tScale) : (byte)(int)(15L - tStored / tScale));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable % 2 == 0 ? 0 : 15));
+ }
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 12;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Universal Storage");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Universal Storage");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Electricity Storage");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Electricity Storage");
+ }
+ if (aCoverVariable == 4) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Steam Storage");
+ }
+ if (aCoverVariable == 5) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Steam Storage");
+ }
+ if (aCoverVariable == 6) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Average Electric Input");
+ }
+ if (aCoverVariable == 7) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Average Electric Input");
+ }
+ if (aCoverVariable == 8) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Average Electric Output");
+ }
+ if (aCoverVariable == 9) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Average Electric Output");
+ }
+ if (aCoverVariable == 10) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal Electricity Storage(Including Batterys)");
+ }
+ if (aCoverVariable == 11) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Electricity Storage(Including Batterys)");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 20;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EnergyOnly.java b/src/main/java/gregtech/common/covers/GT_Cover_EnergyOnly.java
new file mode 100644
index 0000000000..4ffdcb9e1b
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_EnergyOnly.java
@@ -0,0 +1,102 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_EnergyOnly
+ extends GT_CoverBehavior
+{
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 3;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Allow");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Allow (conditional)");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Disallow (conditional)");
+ }
+ return aCoverVariable;
+ }
+
+ public float getBlastProofLevel(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 20.0F;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable < 2) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable < 2) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean isGUIClickable(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ return false;
+ }
+
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced)
+ {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
new file mode 100644
index 0000000000..f2fc6a4d49
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
@@ -0,0 +1,93 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_ItemMeter
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ int[] tSlots;
+ if (aCoverVariable < 2) {
+ tSlots = aTileEntity.getAccessibleSlotsFromSide(aSide);
+ } else {
+ tSlots = new int[] { aCoverVariable - 2 };
+ }
+ int tAll = 0;int tFull = 0;
+ for (int i : tSlots) {
+ if ((i > 0) && (i < aTileEntity.getSizeInventory()))
+ {
+ tAll += 64;
+ ItemStack tStack = aTileEntity.getStackInSlot(i);
+ if (tStack != null) {
+ tFull += tStack.stackSize * 64 / tStack.getMaxStackSize();
+ }
+ }
+ }
+ tAll /= 14;
+ if (tAll > 0) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable != 1 ? 0 : tFull > 0 ? (byte)(tFull / tAll + 1) : (byte)(15 - (tFull > 0 ? tFull / tAll + 1 : 0)));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable != 1 ? 0 : 15));
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % (2 + aTileEntity.getSizeInventory());
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal");
+ } else if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Slot: " + (aCoverVariable - 2));
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 5;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Lens.java b/src/main/java/gregtech/common/covers/GT_Cover_Lens.java
new file mode 100644
index 0000000000..000acc4535
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Lens.java
@@ -0,0 +1,20 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+
+public class GT_Cover_Lens
+ extends GT_CoverBehavior
+{
+ private final byte mColor;
+
+ public GT_Cover_Lens(byte aColor)
+ {
+ this.mColor = aColor;
+ }
+
+ public byte getLensColor(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return this.mColor;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java
new file mode 100644
index 0000000000..4a91015247
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java
@@ -0,0 +1,97 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_Cover_LiquidMeter
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aTileEntity instanceof IFluidHandler))
+ {
+ FluidTankInfo[] tTanks = ((IFluidHandler)aTileEntity).getTankInfo(ForgeDirection.UNKNOWN);
+ long tAll = 0L;long tFull = 0L;
+ if (tTanks != null) {
+ for (FluidTankInfo tTank : tTanks) {
+ if (tTank != null)
+ {
+ tAll += tTank.capacity;
+ FluidStack tLiquid = tTank.fluid;
+ if (tLiquid != null) {
+ tFull += tLiquid.amount;
+ }
+ }
+ }
+ }
+ tAll /= 14L;
+ if (tAll > 0L) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable != 0 ? (byte)(int)(15L - (tFull <= 0L ? 0L : tFull / tAll + 1L)) : tFull <= 0L ? 0 : (byte)(int)(tFull / tAll + 1L));
+ } else {
+ aTileEntity.setOutputRedstoneSignal(aSide, ((byte)(aCoverVariable != 0 ? 15 : 0)));
+ }
+ }
+ else
+ {
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)0);
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Normal");
+ }
+ return aCoverVariable == 0 ? 1 : 0;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 5;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
new file mode 100644
index 0000000000..39960e3940
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
@@ -0,0 +1,122 @@
+package gregtech.common.covers;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+
+public class GT_Cover_NeedMaintainance extends GT_CoverBehavior{
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ boolean needsRepair = false;
+ if(aTileEntity instanceof IGregTechTileEntity){
+ IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aTileEntity;
+ IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity();
+ if(mTileEntity instanceof GT_MetaTileEntity_MultiBlockBase){
+ GT_MetaTileEntity_MultiBlockBase multi = (GT_MetaTileEntity_MultiBlockBase) mTileEntity;
+ int ideal = multi.getIdealStatus();
+ int real = multi.getRepairStatus();
+ if((aCoverVariable ==0||aCoverVariable==1)&&(ideal-real>0)){
+ needsRepair=true;
+ }if((aCoverVariable ==2||aCoverVariable==3)&&(ideal-real>1)){
+ needsRepair=true;
+ }if((aCoverVariable ==4||aCoverVariable==5)&&(ideal-real>2)){
+ needsRepair=true;
+ }if((aCoverVariable ==6||aCoverVariable==7)&&(ideal-real>3)){
+ needsRepair=true;
+ }
+ }}
+ if(aCoverVariable % 2 == 0){
+ needsRepair = !needsRepair;
+ }
+
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(needsRepair ? 0 : 15));
+ aTileEntity.setOutputRedstoneSignal(GT_Utility.getOppositeSide(aSide), (byte)(needsRepair ? 0 : 15));
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 10;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 1 Maintainance Needed");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 1 Maintainance Needed(inverted)");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 2 Maintainance Needed");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 2 Maintainance Needed(inverted)");
+ }
+ if (aCoverVariable == 4) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 3 Maintainance Needed");
+ }
+ if (aCoverVariable == 5) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 3 Maintainance Needed(inverted)");
+ }
+ if (aCoverVariable == 6) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 4 Maintainance Needed");
+ }
+ if (aCoverVariable == 7) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 4 Maintainance Needed(inverted)");
+ }
+ if (aCoverVariable == 8) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 5 Maintainance Needed");
+ }
+ if (aCoverVariable == 9) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if 5 Maintainance Needed(inverted)");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 60;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java b/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java
new file mode 100644
index 0000000000..6ed3fd7a17
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java
@@ -0,0 +1,120 @@
+package gregtech.common.covers;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraftforge.fluids.Fluid;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+
+public class GT_Cover_PlayerDetector extends GT_CoverBehavior{
+
+ private String placer = "";
+ private int range = 8;
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ boolean playerDetected = false;
+
+ if(aTileEntity instanceof IGregTechTileEntity){
+ if(aTileEntity.isUniversalEnergyStored(20)){
+ aTileEntity.decreaseStoredEnergyUnits(20, true);
+ range = 32;
+ }else{range = 8;}
+ placer = ((IGregTechTileEntity) aTileEntity).getOwnerName();
+ }
+ for (Object tObject : aTileEntity.getWorld().playerEntities) {
+ if ((tObject instanceof EntityPlayerMP))
+ {
+ EntityPlayerMP tEntity = (EntityPlayerMP)tObject;
+ int dist = Math.max(1, (int)tEntity.getDistance(aTileEntity.getXCoord() + 0.5D, aTileEntity.getYCoord() + 0.5D, aTileEntity.getZCoord() + 0.5D));
+ if (dist < range)
+ {
+ if (aCoverVariable == 0)
+ {
+ playerDetected=true;
+ break;
+ }
+ if (tEntity.getDisplayName().equalsIgnoreCase(placer))
+ {
+ if (aCoverVariable == 1)
+ {
+ playerDetected=true;
+ break;
+ }
+ }
+ else if (aCoverVariable == 2)
+ {
+ playerDetected=true;
+ break;
+ }
+ }
+ }
+ }
+
+
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(playerDetected ? 15 : 0));
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 3;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if any Player is close");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if you are close");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit if other player is close");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 20;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
new file mode 100644
index 0000000000..6f1cbabd2c
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
@@ -0,0 +1,187 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_Cover_Pump
+ extends GT_CoverBehavior
+{
+ public final int mTransferRate;
+
+ public GT_Cover_Pump(int aTransferRate)
+ {
+ this.mTransferRate = aTransferRate;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return aCoverVariable;
+ }
+ }
+ if ((aTileEntity instanceof IFluidHandler))
+ {
+ IFluidHandler tTank2 = aTileEntity.getITankContainerAtSide(aSide);
+ if (tTank2 != null)
+ {
+ aTileEntity.decreaseStoredEnergyUnits(GT_Utility.getTier(this.mTransferRate), true);
+ IFluidHandler tTank1 = (IFluidHandler)aTileEntity;
+ if (aCoverVariable % 2 == 0)
+ {
+ FluidStack tLiquid = tTank1.drain(ForgeDirection.getOrientation(aSide), this.mTransferRate, false);
+ if (tLiquid != null)
+ {
+ tLiquid = tLiquid.copy();
+ tLiquid.amount = tTank2.fill(ForgeDirection.getOrientation(aSide).getOpposite(), tLiquid, false);
+ if (tLiquid.amount > 0) {
+ if (((aCoverVariable % 2 != 1) || (aSide != 1)) && ((aCoverVariable % 2 != 0) || (aSide != 0)) && (aTileEntity.getUniversalEnergyCapacity() >= Math.min(1, tLiquid.amount / 10)))
+ {
+ if (aTileEntity.isUniversalEnergyStored(Math.min(1, tLiquid.amount / 10)))
+ {
+ aTileEntity.decreaseStoredEnergyUnits(Math.min(1, tLiquid.amount / 10), true);
+ tTank2.fill(ForgeDirection.getOrientation(aSide).getOpposite(), tTank1.drain(ForgeDirection.getOrientation(aSide), tLiquid.amount, true), true);
+ }
+ }
+ else {
+ tTank2.fill(ForgeDirection.getOrientation(aSide).getOpposite(), tTank1.drain(ForgeDirection.getOrientation(aSide), tLiquid.amount, true), true);
+ }
+ }
+ }
+ }
+ else
+ {
+ FluidStack tLiquid = tTank2.drain(ForgeDirection.getOrientation(aSide).getOpposite(), this.mTransferRate, false);
+ if (tLiquid != null)
+ {
+ tLiquid = tLiquid.copy();
+ tLiquid.amount = tTank1.fill(ForgeDirection.getOrientation(aSide), tLiquid, false);
+ if (tLiquid.amount > 0) {
+ if (((aCoverVariable % 2 != 1) || (aSide != 1)) && ((aCoverVariable % 2 != 0) || (aSide != 0)) && (aTileEntity.getUniversalEnergyCapacity() >= Math.min(1, tLiquid.amount / 10)))
+ {
+ if (aTileEntity.isUniversalEnergyStored(Math.min(1, tLiquid.amount / 10)))
+ {
+ aTileEntity.decreaseStoredEnergyUnits(Math.min(1, tLiquid.amount / 10), true);
+ tTank1.fill(ForgeDirection.getOrientation(aSide), tTank2.drain(ForgeDirection.getOrientation(aSide).getOpposite(), tLiquid.amount, true), true);
+ }
+ }
+ else {
+ tTank1.fill(ForgeDirection.getOrientation(aSide), tTank2.drain(ForgeDirection.getOrientation(aSide).getOpposite(), tLiquid.amount, true), true);
+ }
+ }
+ }
+ }
+ }
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 12;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export (conditional)");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (conditional)");
+ }
+ if (aCoverVariable == 4) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export (invert cond)");
+ }
+ if (aCoverVariable == 5) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import (invert cond)");
+ }
+ if (aCoverVariable == 6) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input");
+ }
+ if (aCoverVariable == 7) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output");
+ }
+ if (aCoverVariable == 8) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input (conditional)");
+ }
+ if (aCoverVariable == 9) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output (conditional)");
+ }
+ if (aCoverVariable == 10) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Export allow Input (invert cond)");
+ }
+ if (aCoverVariable == 11) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Import allow Output (invert cond)");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return false;
+ }
+ }
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0);
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return false;
+ }
+ }
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0);
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java
new file mode 100644
index 0000000000..9c4ae92a9a
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java
@@ -0,0 +1,84 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_RedstoneConductor
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if (aCoverVariable == 0) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aTileEntity.getStrongestRedstone());
+ } else if (aCoverVariable < 7) {
+ aTileEntity.setOutputRedstoneSignal(aSide, aTileEntity.getInternalInputRedstoneSignal((byte)(aCoverVariable - 1)));
+ }
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 7;
+ switch (aCoverVariable)
+ {
+ case 0:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts strongest Input"); break;
+ case 1:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from bottom Input"); break;
+ case 2:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from top Input"); break;
+ case 3:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from north Input"); break;
+ case 4:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from south Input"); break;
+ case 5:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from west Input"); break;
+ case 6:
+ GT_Utility.sendChatToPlayer(aPlayer, "Conducts from east Input");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java
new file mode 100644
index 0000000000..da5c149b09
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java
@@ -0,0 +1,25 @@
+package gregtech.common.covers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import java.util.Map;
+
+public class GT_Cover_RedstoneReceiverExternal
+ extends GT_Cover_RedstoneWirelessBase
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ aTileEntity.setOutputRedstoneSignal(aSide, GregTech_API.sWirelessRedstone.get(Integer.valueOf(aCoverVariable)) == null ? 0 : ((Byte)GregTech_API.sWirelessRedstone.get(Integer.valueOf(aCoverVariable))).byteValue());
+ return aCoverVariable;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java
new file mode 100644
index 0000000000..217a36eeb4
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java
@@ -0,0 +1,24 @@
+package gregtech.common.covers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import java.util.Map;
+
+public class GT_Cover_RedstoneReceiverInternal
+ extends GT_Cover_RedstoneWirelessBase
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ return aCoverVariable;
+ }
+
+ public byte getRedstoneInput(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return GregTech_API.sWirelessRedstone.get(Integer.valueOf(aCoverVariable)) == null ? 0 : ((Byte)GregTech_API.sWirelessRedstone.get(Integer.valueOf(aCoverVariable))).byteValue();
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java
new file mode 100644
index 0000000000..c9d29b1e10
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java
@@ -0,0 +1,81 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_RedstoneSignalizer
+ extends GT_CoverBehavior
+{
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 48;
+ if (aCoverVariable / 16 == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Signal = " + (aCoverVariable & 0xF));
+ } else if (aCoverVariable / 16 == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Conditional Signal = " + (aCoverVariable & 0xF));
+ } else if (aCoverVariable / 16 == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Inverted Conditional Signal = " + (aCoverVariable & 0xF));
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public byte getRedstoneInput(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ if (aCoverVariable < 16) {
+ return (byte)(aCoverVariable & 0xF);
+ }
+ if ((aTileEntity instanceof IMachineProgress))
+ {
+ if (((IMachineProgress)aTileEntity).isAllowedToWork())
+ {
+ if (aCoverVariable / 16 == 1) {
+ return (byte)(aCoverVariable & 0xF);
+ }
+ }
+ else if (aCoverVariable / 16 == 2) {
+ return (byte)(aCoverVariable & 0xF);
+ }
+ return 0;
+ }
+ return (byte)(aCoverVariable & 0xF);
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java
new file mode 100644
index 0000000000..15609ca1b9
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java
@@ -0,0 +1,25 @@
+package gregtech.common.covers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import java.util.Map;
+
+public class GT_Cover_RedstoneTransmitterExternal
+ extends GT_Cover_RedstoneWirelessBase
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf(aInputRedstone));
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java
new file mode 100644
index 0000000000..a1a2ed93c7
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java
@@ -0,0 +1,30 @@
+package gregtech.common.covers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import java.util.Map;
+
+public class GT_Cover_RedstoneTransmitterInternal
+ extends GT_Cover_RedstoneWirelessBase
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf(aTileEntity.getOutputRedstoneSignal(aSide)));
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java
new file mode 100644
index 0000000000..cbc5aa2a37
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java
@@ -0,0 +1,98 @@
+package gregtech.common.covers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public abstract class GT_Cover_RedstoneWirelessBase
+ extends GT_CoverBehavior
+{
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced)
+ {
+ GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte)0));
+ return true;
+ }
+
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && (((aY > 0.375D) && (aY < 0.625D)) || ((aSide < 2) && (((aZ > 0.375D) && (aZ < 0.625D)) || (aSide == 2) || (aSide == 3))))))
+ {
+ GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte)0));
+ aCoverVariable = GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem());
+ aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
+ GT_Utility.sendChatToPlayer(aPlayer, "Frequency: " + aCoverVariable);
+ return true;
+ }
+ return false;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide <= 3) || (((aY > 0.375D) && (aY < 0.625D)) || ((aSide >= 2) || (((aZ <= 0.375D) || (aZ >= 0.625D)) && (aSide != 2) && (aSide != 3))))))
+ {
+ GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte)0));
+ float[] tCoords = GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ);
+ switch ((byte)((byte)(int)(tCoords[0] * 2.0F) + 2 * (byte)(int)(tCoords[1] * 2.0F)))
+ {
+ case 0:
+ aCoverVariable -= 32;
+ break;
+ case 1:
+ aCoverVariable += 32;
+ break;
+ case 2:
+ aCoverVariable -= 1024;
+ break;
+ case 3:
+ aCoverVariable += 1024;
+ }
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "Frequency: " + aCoverVariable);
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return "Frequency: " + aCoverVariable;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Screen.java b/src/main/java/gregtech/common/covers/GT_Cover_Screen.java
new file mode 100644
index 0000000000..ee71404972
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Screen.java
@@ -0,0 +1,80 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_Screen
+ extends GT_CoverBehavior
+{
+ public float getBlastProofLevel(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 20.0F;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean isGUIClickable(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return false;
+ }
+
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ return false;
+ }
+
+ public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced)
+ {
+ return true;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java b/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java
new file mode 100644
index 0000000000..167e2dbd0a
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java
@@ -0,0 +1,85 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_Shutter
+ extends GT_CoverBehavior
+{
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ return aCoverVariable;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ aCoverVariable = (aCoverVariable + 1) % 4;
+ if (aCoverVariable == 0) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Open if work enabled");
+ }
+ if (aCoverVariable == 1) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Open if work disabled");
+ }
+ if (aCoverVariable == 2) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Only Output allowed");
+ }
+ if (aCoverVariable == 3) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Only Input allowed");
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 3 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 2 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 3 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 2 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 3 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 2 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 3 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity)
+{
+ return aCoverVariable >= 2 ? aCoverVariable == 2 : (aTileEntity instanceof IMachineProgress) ? ((IMachineProgress)aTileEntity).isAllowedToWork() ? aCoverVariable % 2 == 0 : aCoverVariable % 2 != 0 : true;
+}
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java b/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java
new file mode 100644
index 0000000000..8ad8359708
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java
@@ -0,0 +1,41 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+
+public class GT_Cover_SolarPanel
+ extends GT_CoverBehavior
+{
+ private final int mVoltage;
+
+ public GT_Cover_SolarPanel(int aVoltage)
+ {
+ this.mVoltage = aVoltage;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if (aTimer % 100L == 0L) {
+ if ((aSide != 1) || (aTileEntity.getWorld().isThundering()))
+ {
+ aCoverVariable = 0;
+ }
+ else
+ {
+ boolean bRain = (aTileEntity.getWorld().isRaining()) && (aTileEntity.getBiome().rainfall > 0.0F);
+ aCoverVariable = bRain && aTileEntity.getWorld().skylightSubtracted >= 4 || !aTileEntity.getSkyAtSide(aSide) ? 0 : ((int) (!bRain && aTileEntity.getWorld().isDaytime() ? 1 : 2));
+ }
+ }
+ if ((aCoverVariable == 1) || ((aCoverVariable == 2) && (aTimer % 8L == 0L))) {
+ aTileEntity.injectEnergyUnits((byte)6, this.mVoltage, 1L);
+ }
+ return aCoverVariable;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 1;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Vent.java b/src/main/java/gregtech/common/covers/GT_Cover_Vent.java
new file mode 100644
index 0000000000..5bab99fb65
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Vent.java
@@ -0,0 +1,40 @@
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+
+public class GT_Cover_Vent
+ extends GT_CoverBehavior
+{
+ private final int mEfficiency;
+
+ public GT_Cover_Vent(int aEfficiency)
+ {
+ this.mEfficiency = aEfficiency;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer)
+ {
+ if ((aTileEntity instanceof IMachineProgress))
+ {
+ if ((((IMachineProgress)aTileEntity).hasThingsToDo()) && (aCoverVariable != ((IMachineProgress)aTileEntity).getProgress()) &&
+ (!GT_Utility.hasBlockHitBox(aTileEntity.getWorld(), aTileEntity.getOffsetX(aSide, 1), aTileEntity.getOffsetY(aSide, 1), aTileEntity.getOffsetZ(aSide, 1)))) {
+ ((IMachineProgress)aTileEntity).increaseProgress(this.mEfficiency);
+ }
+ return ((IMachineProgress)aTileEntity).getProgress();
+ }
+ return 0;
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity)
+ {
+ return 60;
+ }
+}
diff --git a/src/main/java/gregtech/common/entities/GT_Entity_Arrow.java b/src/main/java/gregtech/common/entities/GT_Entity_Arrow.java
new file mode 100644
index 0000000000..db8ef1ace5
--- /dev/null
+++ b/src/main/java/gregtech/common/entities/GT_Entity_Arrow.java
@@ -0,0 +1,391 @@
+package gregtech.common.entities;
+
+import com.mojang.authlib.GameProfile;
+import gregtech.api.enums.Materials;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.GT_EnchantmentHelper;
+import java.util.List;
+import java.util.Random;
+import java.util.UUID;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityCreeper;
+import net.minecraft.entity.monster.EntityEnderman;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.network.play.server.S2BPacketChangeGameState;
+import net.minecraft.potion.Potion;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.util.FakePlayerFactory;
+
+public class GT_Entity_Arrow
+ extends EntityArrow
+{
+ private int mHitBlockX = -1;
+ private int mHitBlockY = -1;
+ private int mHitBlockZ = -1;
+ private Block mHitBlock = Blocks.air;
+ private int mHitBlockMeta = 0;
+ private boolean inGround = false;
+ private int mTicksAlive = 0;
+ private int ticksInAir = 0;
+ private int mKnockback = 0;
+ private ItemStack mArrow = null;
+
+ public GT_Entity_Arrow(World aWorld)
+ {
+ super(aWorld);
+ }
+
+ public GT_Entity_Arrow(World aWorld, double aX, double aY, double aZ)
+ {
+ super(aWorld, aX, aY, aZ);
+ }
+
+ public GT_Entity_Arrow(World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ super(aWorld, aEntity, aSpeed);
+ }
+
+ public GT_Entity_Arrow(EntityArrow aArrow, ItemStack aStack)
+ {
+ super(aArrow.worldObj);
+ NBTTagCompound tNBT = new NBTTagCompound();
+ aArrow.writeToNBT(tNBT);
+ readFromNBT(tNBT);
+ setArrowItem(aStack);
+ }
+
+ public void onUpdate()
+ {
+ onEntityUpdate();
+ if ((this.mArrow == null) && (!this.worldObj.isRemote))
+ {
+ setDead();
+ return;
+ }
+ Entity tShootingEntity = this.shootingEntity;
+ if ((this.prevRotationPitch == 0.0F) && (this.prevRotationYaw == 0.0F))
+ {
+ float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.prevRotationYaw = (this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / 3.141592653589793D));
+ this.prevRotationPitch = (this.rotationPitch = (float)(Math.atan2(this.motionY, f) * 180.0D / 3.141592653589793D));
+ }
+ if (this.mTicksAlive++ == 3000) {
+ setDead();
+ }
+ Block tBlock = this.worldObj.getBlock(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ if (tBlock.getMaterial() != Material.air)
+ {
+ tBlock.setBlockBoundsBasedOnState(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ AxisAlignedBB axisalignedbb = tBlock.getCollisionBoundingBoxFromPool(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ if ((axisalignedbb != null) && (axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ)))) {
+ this.inGround = true;
+ }
+ }
+ if (this.arrowShake > 0) {
+ this.arrowShake -= 1;
+ }
+ if (this.inGround)
+ {
+ int j = this.worldObj.getBlockMetadata(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ if ((tBlock != this.mHitBlock) || (j != this.mHitBlockMeta))
+ {
+ this.inGround = false;
+ this.motionX *= this.rand.nextFloat() * 0.2F;
+ this.motionY *= this.rand.nextFloat() * 0.2F;
+ this.motionZ *= this.rand.nextFloat() * 0.2F;
+ this.mTicksAlive = 0;
+ this.ticksInAir = 0;
+ }
+ }
+ else
+ {
+ this.ticksInAir += 1;
+ Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
+ Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ MovingObjectPosition tVector = this.worldObj.func_147447_a(vec31, vec3, false, true, false);
+ vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
+ vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ if (tVector != null) {
+ vec3 = Vec3.createVectorHelper(tVector.hitVec.xCoord, tVector.hitVec.yCoord, tVector.hitVec.zCoord);
+ }
+ Entity tHitEntity = null;
+ List tAllPotentiallyHitEntities = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
+ double tLargestDistance = 1.7976931348623157E+308D;
+ for (int i = 0; i < tAllPotentiallyHitEntities.size(); i++)
+ {
+ Entity entity1 = (Entity)tAllPotentiallyHitEntities.get(i);
+ if ((entity1.canBeCollidedWith()) && ((entity1 != tShootingEntity) || (this.ticksInAir >= 5)))
+ {
+ AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand(0.3D, 0.3D, 0.3D);
+ MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);
+ if (movingobjectposition1 != null)
+ {
+ double tDistance = vec31.distanceTo(movingobjectposition1.hitVec);
+ if (tDistance < tLargestDistance)
+ {
+ tHitEntity = entity1;
+ tLargestDistance = tDistance;
+ }
+ }
+ }
+ }
+ if (tHitEntity != null) {
+ tVector = new MovingObjectPosition(tHitEntity);
+ }
+ if ((tVector != null) && (tVector.entityHit != null) && ((tVector.entityHit instanceof EntityPlayer)))
+ {
+ EntityPlayer entityplayer = (EntityPlayer)tVector.entityHit;
+ if ((entityplayer.capabilities.disableDamage) || (((tShootingEntity instanceof EntityPlayer)) && (!((EntityPlayer)tShootingEntity).canAttackPlayer(entityplayer)))) {
+ tVector = null;
+ }
+ }
+ if (tVector != null) {
+ if (tVector.entityHit != null)
+ {
+ ItemData tData = GT_OreDictUnificator.getItemData(this.mArrow);
+
+
+ float tMagicDamage = (tVector.entityHit instanceof EntityLivingBase) ? EnchantmentHelper.func_152377_a(this.mArrow, ((EntityLivingBase)tVector.entityHit).getCreatureAttribute()) : 0.0F;
+ float tDamage = MathHelper.ceiling_double_int(MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ) * (getDamage() + ((tData != null) && (tData.mMaterial != null) && (tData.mMaterial.mMaterial != null) ? tData.mMaterial.mMaterial.mToolQuality / 2.0F - 1.0F : 0.0F)));
+ if (getIsCritical()) {
+ tDamage += this.rand.nextInt((int)(tDamage / 2.0D + 2.0D));
+ }
+ int tFireDamage = (isBurning() ? 5 : 0) + 4 * EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow);
+ int tKnockback = this.mKnockback + EnchantmentHelper.getEnchantmentLevel(Enchantment.knockback.effectId, this.mArrow);
+ int tHitTimer = -1;
+
+ int[] tDamages = onHitEntity(tVector.entityHit, tShootingEntity == null ? this : tShootingEntity, this.mArrow == null ? new ItemStack(Items.arrow, 1) : this.mArrow, (int)(tDamage * 2.0F), (int)(tMagicDamage * 2.0F), tKnockback, tFireDamage, tHitTimer);
+ if (tDamages != null)
+ {
+ tDamage = tDamages[0] / 2.0F;
+ tMagicDamage = tDamages[1] / 2.0F;
+ tKnockback = tDamages[2];
+ tFireDamage = tDamages[3];
+ tHitTimer = tDamages[4];
+ if ((tFireDamage > 0) && (!(tVector.entityHit instanceof EntityEnderman))) {
+ tVector.entityHit.setFire(tFireDamage);
+ }
+ if ((!(tHitEntity instanceof EntityPlayer)) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, this.mArrow) > 0))
+ {
+ EntityPlayer tPlayer = null;
+ if ((this.worldObj instanceof WorldServer)) {
+ tPlayer = FakePlayerFactory.get((WorldServer)this.worldObj, new GameProfile(new UUID(0L, 0L), (tShootingEntity instanceof EntityLivingBase) ? ((EntityLivingBase)tShootingEntity).getCommandSenderName() : "Arrow"));
+ }
+ if (tPlayer != null)
+ {
+ tPlayer.inventory.currentItem = 0;
+ tPlayer.inventory.setInventorySlotContents(0, getArrowItem());
+ tShootingEntity = tPlayer;
+ tPlayer.setDead();
+ }
+ }
+ DamageSource tDamageSource = DamageSource.causeArrowDamage(this, tShootingEntity == null ? this : tShootingEntity);
+ if ((tDamage + tMagicDamage > 0.0F) && (tVector.entityHit.attackEntityFrom(tDamageSource, tDamage + tMagicDamage)))
+ {
+ if ((tVector.entityHit instanceof EntityLivingBase))
+ {
+ if (tHitTimer >= 0) {
+ tVector.entityHit.hurtResistantTime = tHitTimer;
+ }
+ if (((tVector.entityHit instanceof EntityCreeper)) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow) > 0)) {
+ ((EntityCreeper)tVector.entityHit).func_146079_cb();
+ }
+ EntityLivingBase tHitLivingEntity = (EntityLivingBase)tVector.entityHit;
+ if (!this.worldObj.isRemote) {
+ tHitLivingEntity.setArrowCountInEntity(tHitLivingEntity.getArrowCountInEntity() + 1);
+ }
+ if (tKnockback > 0)
+ {
+ float tKnockbackDivider = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ if (tKnockbackDivider > 0.0F) {
+ tHitLivingEntity.addVelocity(this.motionX * tKnockback * 0.6000000238418579D / tKnockbackDivider, 0.1D, this.motionZ * tKnockback * 0.6000000238418579D / tKnockbackDivider);
+ }
+ }
+ GT_Utility.GT_EnchantmentHelper.applyBullshitA(tHitLivingEntity, tShootingEntity == null ? this : tShootingEntity, this.mArrow);
+ GT_Utility.GT_EnchantmentHelper.applyBullshitB((tShootingEntity instanceof EntityLivingBase) ? (EntityLivingBase)tShootingEntity : null, tHitLivingEntity, this.mArrow);
+ if ((tShootingEntity != null) && (tHitLivingEntity != tShootingEntity) && ((tHitLivingEntity instanceof EntityPlayer)) && ((tShootingEntity instanceof EntityPlayerMP))) {
+ ((EntityPlayerMP)tShootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));
+ }
+ }
+ if (((tShootingEntity instanceof EntityPlayer)) && (tMagicDamage > 0.0F)) {
+ ((EntityPlayer)tShootingEntity).onEnchantmentCritical(tVector.entityHit);
+ }
+ if ((!(tVector.entityHit instanceof EntityEnderman)) || (((EntityEnderman)tVector.entityHit).getActivePotionEffect(Potion.weakness) != null))
+ {
+ if (tFireDamage > 0) {
+ tVector.entityHit.setFire(tFireDamage);
+ }
+ playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
+ setDead();
+ }
+ }
+ else
+ {
+ this.motionX *= -0.1000000014901161D;
+ this.motionY *= -0.1000000014901161D;
+ this.motionZ *= -0.1000000014901161D;
+ this.rotationYaw += 180.0F;
+ this.prevRotationYaw += 180.0F;
+ this.ticksInAir = 0;
+ }
+ }
+ }
+ else
+ {
+ this.mHitBlockX = tVector.blockX;
+ this.mHitBlockY = tVector.blockY;
+ this.mHitBlockZ = tVector.blockZ;
+ this.mHitBlock = this.worldObj.getBlock(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ this.mHitBlockMeta = this.worldObj.getBlockMetadata(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ);
+ this.motionX = ((float)(tVector.hitVec.xCoord - this.posX));
+ this.motionY = ((float)(tVector.hitVec.yCoord - this.posY));
+ this.motionZ = ((float)(tVector.hitVec.zCoord - this.posZ));
+ float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
+ this.posX -= this.motionX / f2 * 0.0500000007450581D;
+ this.posY -= this.motionY / f2 * 0.0500000007450581D;
+ this.posZ -= this.motionZ / f2 * 0.0500000007450581D;
+ playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
+ this.inGround = true;
+ this.arrowShake = 7;
+ setIsCritical(false);
+ if (this.mHitBlock.getMaterial() != Material.air) {
+ this.mHitBlock.onEntityCollidedWithBlock(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ, this);
+ }
+ if ((!this.worldObj.isRemote) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow) > 2)) {
+ GT_Utility.setCoordsOnFire(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ, true);
+ }
+ if (breaksOnImpact()) {
+ setDead();
+ }
+ }
+ }
+ if (getIsCritical()) {
+ for (int i = 0; i < 4; i++) {
+ this.worldObj.spawnParticle("crit", this.posX + this.motionX * i / 4.0D, this.posY + this.motionY * i / 4.0D, this.posZ + this.motionZ * i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ);
+ }
+ }
+ this.posX += this.motionX;this.posY += this.motionY;this.posZ += this.motionZ;
+
+ this.rotationYaw = ((float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / 3.141592653589793D));
+ for (this.rotationPitch = ((float)(Math.atan2(this.motionY, MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ)) * 180.0D / 3.141592653589793D)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {}
+ while (this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+ while (this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+ while (this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+ this.rotationPitch = (this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F);
+ this.rotationYaw = (this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F);
+ float tFrictionMultiplier = 0.99F;
+ if (isInWater())
+ {
+ for (int l = 0; l < 4; l++) {
+ this.worldObj.spawnParticle("bubble", this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ);
+ }
+ tFrictionMultiplier = 0.8F;
+ }
+ if (isWet()) {
+ extinguish();
+ }
+ this.motionX *= tFrictionMultiplier;
+ this.motionY *= tFrictionMultiplier;
+ this.motionZ *= tFrictionMultiplier;
+ this.motionY -= 0.0500000007450581D;
+ setPosition(this.posX, this.posY, this.posZ);
+ func_145775_I();
+ }
+ }
+
+ public void writeEntityToNBT(NBTTagCompound aNBT)
+ {
+ super.writeEntityToNBT(aNBT);
+ aNBT.setShort("xTile", (short)this.mHitBlockX);
+ aNBT.setShort("yTile", (short)this.mHitBlockY);
+ aNBT.setShort("zTile", (short)this.mHitBlockZ);
+ aNBT.setShort("life", (short)this.mTicksAlive);
+ aNBT.setByte("inTile", (byte)Block.getIdFromBlock(this.mHitBlock));
+ aNBT.setByte("inData", (byte)this.mHitBlockMeta);
+ aNBT.setByte("shake", (byte)this.arrowShake);
+ aNBT.setByte("inGround", (byte)(this.inGround ? 1 : 0));
+ aNBT.setByte("pickup", (byte)this.canBePickedUp);
+ aNBT.setDouble("damage", getDamage());
+ aNBT.setTag("mArrow", this.mArrow == null ? null : this.mArrow.writeToNBT(new NBTTagCompound()));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound aNBT)
+ {
+ super.readEntityFromNBT(aNBT);
+ this.mHitBlockX = aNBT.getShort("xTile");
+ this.mHitBlockY = aNBT.getShort("yTile");
+ this.mHitBlockZ = aNBT.getShort("zTile");
+ this.mTicksAlive = aNBT.getShort("life");
+ this.mHitBlock = Block.getBlockById(aNBT.getByte("inTile") & 0xFF);
+ this.mHitBlockMeta = (aNBT.getByte("inData") & 0xFF);
+ this.arrowShake = (aNBT.getByte("shake") & 0xFF);
+ this.inGround = (aNBT.getByte("inGround") == 1);
+ setDamage(aNBT.getDouble("damage"));
+ this.canBePickedUp = aNBT.getByte("pickup");
+ this.mArrow = GT_Utility.loadItem(aNBT, "mArrow");
+ }
+
+ public void onCollideWithPlayer(EntityPlayer aPlayer)
+ {
+ if ((!this.worldObj.isRemote) && (this.inGround) && (this.arrowShake <= 0) && (this.canBePickedUp == 1) && (aPlayer.inventory.addItemStackToInventory(getArrowItem())))
+ {
+ playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+ aPlayer.onItemPickup(this, 1);
+ setDead();
+ }
+ }
+
+ public int[] onHitEntity(Entity aHitEntity, Entity aShootingEntity, ItemStack aArrow, int aRegularDamage, int aMagicDamage, int aKnockback, int aFireDamage, int aHitTimer)
+ {
+ return new int[] { aRegularDamage, aMagicDamage, aKnockback, aFireDamage, aHitTimer };
+ }
+
+ public void setArrowItem(ItemStack aStack)
+ {
+ this.mArrow = GT_Utility.updateItemStack(GT_Utility.copyAmount(1L, new Object[] { aStack }));
+ }
+
+ public ItemStack getArrowItem()
+ {
+ return GT_Utility.copy(new Object[] { this.mArrow });
+ }
+
+ public boolean breaksOnImpact()
+ {
+ return false;
+ }
+
+ public void setKnockbackStrength(int aKnockback)
+ {
+ this.mKnockback = aKnockback;
+ }
+}
diff --git a/src/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java b/src/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java
new file mode 100644
index 0000000000..a6626b1894
--- /dev/null
+++ b/src/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java
@@ -0,0 +1,71 @@
+package gregtech.common.entities;
+
+import java.util.Random;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+public class GT_Entity_Arrow_Potion
+ extends GT_Entity_Arrow
+{
+ public GT_Entity_Arrow_Potion(World aWorld)
+ {
+ super(aWorld);
+ }
+
+ public GT_Entity_Arrow_Potion(World aWorld, double aX, double aY, double aZ)
+ {
+ super(aWorld, aX, aY, aZ);
+ }
+
+ public GT_Entity_Arrow_Potion(World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ super(aWorld, aEntity, aSpeed);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound aNBT)
+ {
+ super.writeEntityToNBT(aNBT);
+ aNBT.setIntArray("mPotions", this.mPotions);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound aNBT)
+ {
+ super.readEntityFromNBT(aNBT);
+ setPotions(aNBT.getIntArray("mPotions"));
+ }
+
+ public boolean breaksOnImpact()
+ {
+ return true;
+ }
+
+ public void setPotions(int... aPotions)
+ {
+ if (aPotions != null) {
+ this.mPotions = aPotions;
+ }
+ }
+
+ public int[] getPotions()
+ {
+ return this.mPotions;
+ }
+
+ private int[] mPotions = new int[0];
+
+ public int[] onHitEntity(Entity aHitEntity, Entity aShootingEntity, ItemStack aArrow, int aRegularDamage, int aMagicDamage, int aKnockback, int aFireDamage, int aHitTimer)
+ {
+ if ((aHitEntity instanceof EntityLivingBase)) {
+ for (int i = 3; i < this.mPotions.length; i += 4) {
+ if (aHitEntity.worldObj.rand.nextInt(100) < this.mPotions[i]) {
+ ((EntityLivingBase)aHitEntity).addPotionEffect(new PotionEffect(this.mPotions[(i - 3)], this.mPotions[(i - 2)], this.mPotions[(i - 1)], false));
+ }
+ }
+ }
+ return super.onHitEntity(aHitEntity, aShootingEntity, aArrow, 1, aMagicDamage, aKnockback, aFireDamage, aHitTimer);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Boiler.java b/src/main/java/gregtech/common/gui/GT_Container_Boiler.java
new file mode 100644
index 0000000000..7ab8cc0f95
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_Boiler.java
@@ -0,0 +1,91 @@
+package gregtech.common.gui;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler;
+import java.util.Iterator;
+import java.util.List;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_Container_Boiler
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_Boiler(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, int aSteamCapacity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ this.mSteamCapacity = aSteamCapacity;
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new Slot(this.mTileEntity, 2, 116, 62));
+ addSlotToContainer(new Slot(this.mTileEntity, 0, 44, 26));
+ addSlotToContainer(new Slot(this.mTileEntity, 1, 44, 62));
+ addSlotToContainer(new Slot(this.mTileEntity, 3, 116, 26));
+ }
+
+ public int getSlotCount()
+ {
+ return 4;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 1;
+ }
+
+ public int mWaterAmount = 0;
+ public int mSteamAmount = 0;
+ public int mProcessingEnergy = 0;
+ public int mTemperature = 2;
+ private final int mSteamCapacity;
+
+ public void detectAndSendChanges()
+ {
+ super.detectAndSendChanges();
+ if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
+ return;
+ }
+ this.mTemperature = ((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mTemperature;
+ this.mProcessingEnergy = ((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mProcessingEnergy;
+ this.mSteamAmount = (((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mSteam == null ? 0 : ((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mSteam.amount);
+ this.mWaterAmount = (((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mFluid == null ? 0 : ((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).mFluid.amount);
+
+ this.mTemperature = Math.min(54, Math.max(0, this.mTemperature * 54 / (((GT_MetaTileEntity_Boiler)this.mTileEntity.getMetaTileEntity()).maxProgresstime() - 10)));
+ this.mSteamAmount = Math.min(54, Math.max(0, this.mSteamAmount * 54 / (this.mSteamCapacity - 100)));
+ this.mWaterAmount = Math.min(54, Math.max(0, this.mWaterAmount * 54 / 15900));
+ this.mProcessingEnergy = Math.min(14, Math.max(this.mProcessingEnergy > 0 ? 1 : 0, this.mProcessingEnergy * 14 / 1000));
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext())
+ {
+ ICrafting var1 = (ICrafting)var2.next();
+ var1.sendProgressBarUpdate(this, 100, this.mTemperature);
+ var1.sendProgressBarUpdate(this, 101, this.mProcessingEnergy);
+ var1.sendProgressBarUpdate(this, 102, this.mSteamAmount);
+ var1.sendProgressBarUpdate(this, 103, this.mWaterAmount);
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2)
+ {
+ super.updateProgressBar(par1, par2);
+ switch (par1)
+ {
+ case 100:
+ this.mTemperature = par2; break;
+ case 101:
+ this.mProcessingEnergy = par2; break;
+ case 102:
+ this.mSteamAmount = par2; break;
+ case 103:
+ this.mWaterAmount = par2;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java
new file mode 100644
index 0000000000..7dc97e0989
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java
@@ -0,0 +1,34 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Output;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+
+public class GT_Container_BronzeBlastFurnace
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_BronzeBlastFurnace(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new Slot(this.mTileEntity, 0, 34, 16));
+ addSlotToContainer(new Slot(this.mTileEntity, 1, 34, 34));
+ addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 2, 86, 25));
+ addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 3, 104, 25));
+ }
+
+ public int getSlotCount()
+ {
+ return 4;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 2;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java b/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java
new file mode 100644
index 0000000000..f2fd7848b6
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java
@@ -0,0 +1,88 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_ChestBuffer
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_ChestBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ for (int y = 0; y < 3; y++) {
+ for (int x = 0; x < 9; x++) {
+ addSlotToContainer(new Slot(this.mTileEntity, x + y * 9, 8 + x * 18, 5 + y * 18));
+ }
+ }
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 8, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 26, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 44, 63, false, true, 1));
+ }
+
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 27) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (tSlot != null)
+ {
+ if (this.mTileEntity.getMetaTileEntity() == null) {
+ return null;
+ }
+ if (aSlotIndex == 27)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Energy to Outputside");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Energy");
+ }
+ return null;
+ }
+ if (aSlotIndex == 28)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Redstone if no Slot is free");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 29)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Redstone");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Redstone");
+ }
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int getSlotCount()
+ {
+ return 27;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 27;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Filter.java b/src/main/java/gregtech/common/gui/GT_Container_Filter.java
new file mode 100644
index 0000000000..ac468a444b
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_Filter.java
@@ -0,0 +1,143 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_Filter;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_Filter
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_Filter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new Slot(this.mTileEntity, 0, 98, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 1, 116, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 2, 134, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 3, 98, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 4, 116, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 5, 134, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 6, 98, 41));
+ addSlotToContainer(new Slot(this.mTileEntity, 7, 116, 41));
+ addSlotToContainer(new Slot(this.mTileEntity, 8, 134, 41));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 9, 18, 6, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 35, 6, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 11, 52, 6, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 12, 18, 23, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 13, 35, 23, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 14, 52, 23, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 15, 18, 40, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 16, 35, 40, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 17, 52, 40, false, true, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 8, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 26, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 44, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 62, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 80, 63, false, true, 1));
+ }
+
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 9) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (tSlot != null)
+ {
+ if (this.mTileEntity.getMetaTileEntity() == null) {
+ return null;
+ }
+ if (aSlotIndex < 18)
+ {
+ ItemStack tStack = aPlayer.inventory.getItemStack();
+ if (tStack == null)
+ {
+ tStack = tSlot.getStack();
+ if (aMouseclick == 0) {
+ tSlot.putStack(null);
+ } else if (tStack != null) {
+ tStack.setItemDamage(32767);
+ }
+ }
+ else
+ {
+ tSlot.putStack(GT_Utility.copyAmount(1L, new Object[] { tStack }));
+ }
+ return null;
+ }
+ if (aSlotIndex == 18)
+ {
+ ((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bOutput);
+ if (((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bOutput) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Energy to Outputside");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Energy");
+ }
+ return null;
+ }
+ if (aSlotIndex == 19)
+ {
+ ((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull = (!((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
+ if (((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Redstone if slots contain something");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 20)
+ {
+ ((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvert = (!((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvert);
+ if (((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvert) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Redstone");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 21)
+ {
+ ((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvertFilter = (!((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvertFilter);
+ if (((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bInvertFilter) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Filter");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Filter");
+ }
+ return null;
+ }
+ if (aSlotIndex == 22)
+ {
+ ((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bIgnoreNBT = (!((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bIgnoreNBT);
+ if (((GT_MetaTileEntity_Filter)this.mTileEntity.getMetaTileEntity()).bIgnoreNBT) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Ignore NBT");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "NBT has to match");
+ }
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int getSlotCount()
+ {
+ return 9;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 9;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java b/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java
new file mode 100644
index 0000000000..01c0a95346
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java
@@ -0,0 +1,69 @@
+package gregtech.common.gui;
+
+import java.util.Iterator;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Output;
+import gregtech.api.gui.GT_Slot_Render;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
+
+public class GT_Container_QuantumChest extends GT_ContainerMetaTile_Machine {
+
+ public GT_Container_QuantumChest(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42));
+ }
+
+ public int mContent = 0;
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
+ if (mTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_QuantumChest){
+ mContent = ((GT_MetaTileEntity_QuantumChest)mTileEntity.getMetaTileEntity()).mItemCount;
+ }else{
+ mContent = 0;}
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting)var2.next();
+ var1.sendProgressBarUpdate(this, 100, mContent & 65535);
+ var1.sendProgressBarUpdate(this, 101, mContent >>> 16);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 100: mContent = mContent & -65536 | par2; break;
+ case 101: mContent = mContent & 65535 | par2 << 16; break;
+ }
+ }
+
+ @Override
+ public int getSlotCount() {
+ return 2;
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 1;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Regulator.java b/src/main/java/gregtech/common/gui/GT_Container_Regulator.java
new file mode 100644
index 0000000000..5fab86818e
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_Regulator.java
@@ -0,0 +1,174 @@
+package gregtech.common.gui;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_Regulator;
+import java.util.Iterator;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_Regulator
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_Regulator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ this.mTargetSlots = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ addSlotToContainer(new Slot(this.mTileEntity, 0, 8, 6));
+ addSlotToContainer(new Slot(this.mTileEntity, 1, 26, 6));
+ addSlotToContainer(new Slot(this.mTileEntity, 2, 44, 6));
+ addSlotToContainer(new Slot(this.mTileEntity, 3, 8, 24));
+ addSlotToContainer(new Slot(this.mTileEntity, 4, 26, 24));
+ addSlotToContainer(new Slot(this.mTileEntity, 5, 44, 24));
+ addSlotToContainer(new Slot(this.mTileEntity, 6, 8, 42));
+ addSlotToContainer(new Slot(this.mTileEntity, 7, 26, 42));
+ addSlotToContainer(new Slot(this.mTileEntity, 8, 44, 42));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 9, 64, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 81, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 11, 98, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 12, 64, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 13, 81, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 14, 98, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 15, 64, 41, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 16, 81, 41, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 17, 98, 41, false, true, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 7, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 24, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 41, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 41, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 41, false, true, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 8, 63, false, true, 1));
+ }
+
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 9) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (tSlot != null)
+ {
+ if (this.mTileEntity.getMetaTileEntity() == null) {
+ return null;
+ }
+ if (aSlotIndex == 27)
+ {
+ ((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).bOutput);
+ if (((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).bOutput) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Energy to Outputside");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Energy");
+ }
+ return null;
+ }
+ if ((aSlotIndex >= 9) && (aSlotIndex < 18))
+ {
+ ItemStack tStack = aPlayer.inventory.getItemStack();
+ if (tStack != null) {
+ tSlot.putStack(GT_Utility.copy(new Object[] { tStack }));
+ } else if (tSlot.getStack() != null) {
+ if (aMouseclick == 0)
+ {
+ tSlot.getStack().stackSize -= (aShifthold == 1 ? 8 : 1);
+ if (tSlot.getStack().stackSize <= 0) {
+ tSlot.putStack(null);
+ }
+ }
+ else
+ {
+ tSlot.getStack().stackSize += (aShifthold == 1 ? 8 : 1);
+ if (tSlot.getStack().stackSize > tSlot.getStack().getMaxStackSize()) {
+ tSlot.getStack().stackSize = tSlot.getStack().getMaxStackSize();
+ }
+ }
+ }
+ return null;
+ }
+ if ((aSlotIndex >= 18) && (aSlotIndex < 27))
+ {
+ ((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).mTargetSlots[(aSlotIndex - 18)] = Math.min(99, Math.max(0, ((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).mTargetSlots[(aSlotIndex - 18)] + (aMouseclick == 0 ? -1 : 1) * (aShifthold == 0 ? 1 : 16)));
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int[] mTargetSlots = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ public void detectAndSendChanges()
+ {
+ super.detectAndSendChanges();
+ if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
+ return;
+ }
+ this.mTargetSlots = new int[9];
+ for (int i = 0; i < 9; i++) {
+ this.mTargetSlots[i] = ((GT_MetaTileEntity_Regulator)this.mTileEntity.getMetaTileEntity()).mTargetSlots[i];
+ }
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext())
+ {
+ ICrafting var1 = (ICrafting)var2.next();
+ for (int i = 0; i < 9; i++) {
+ var1.sendProgressBarUpdate(this, 100 + i, this.mTargetSlots[i]);
+ }
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2)
+ {
+ super.updateProgressBar(par1, par2);
+ switch (par1)
+ {
+ case 100:
+ this.mTargetSlots[0] = par2; break;
+ case 101:
+ this.mTargetSlots[1] = par2; break;
+ case 102:
+ this.mTargetSlots[2] = par2; break;
+ case 103:
+ this.mTargetSlots[3] = par2; break;
+ case 104:
+ this.mTargetSlots[4] = par2; break;
+ case 105:
+ this.mTargetSlots[5] = par2; break;
+ case 106:
+ this.mTargetSlots[6] = par2; break;
+ case 107:
+ this.mTargetSlots[7] = par2; break;
+ case 108:
+ this.mTargetSlots[8] = par2;
+ }
+ }
+
+ public int getSlotCount()
+ {
+ return 9;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 9;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java b/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java
new file mode 100644
index 0000000000..e28616e242
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java
@@ -0,0 +1,83 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_SuperBuffer
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_SuperBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 8, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 26, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 44, 63, false, true, 1));
+ }
+
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 0) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (tSlot != null)
+ {
+ if (this.mTileEntity.getMetaTileEntity() == null) {
+ return null;
+ }
+ if (aSlotIndex == 0)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bOutput) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Energy to Outputside");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Energy");
+ }
+ return null;
+ }
+ if (aSlotIndex == 1)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Redstone if no Slot is free");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 2)
+ {
+ ((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert = (!((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert);
+ if (((GT_MetaTileEntity_ChestBuffer)this.mTileEntity.getMetaTileEntity()).bInvert) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Redstone");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Redstone");
+ }
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int getSlotCount()
+ {
+ return 0;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java b/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java
new file mode 100644
index 0000000000..fadd979bcf
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java
@@ -0,0 +1,177 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Container_BasicMachine;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Teleporter;
+
+import java.util.Iterator;
+import java.util.List;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_Teleporter
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_Teleporter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 59, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 59, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 59, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 59, false, false, 1));
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 0) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if ((tSlot != null) && (this.mTileEntity.getMetaTileEntity() != null)) {
+ switch (aSlotIndex)
+ {
+ case 0:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetX -= (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 1:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetY -= (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 2:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetZ -= (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 3:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetD -= (aShifthold == 1 ? 16 : 8);
+ return null;
+ case 4:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetX -= (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 5:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetY -= (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 6:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetZ -= (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 7:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetD -= (aShifthold == 1 ? 4 : 1);
+ return null;
+ case 8:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetX += (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 9:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetY += (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 10:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetZ += (aShifthold == 1 ? 512 : 64);
+ return null;
+ case 11:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetD += (aShifthold == 1 ? 16 : 8);
+ return null;
+ case 12:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetX += (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 13:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetY += (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 14:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetZ += (aShifthold == 1 ? 16 : 1);
+ return null;
+ case 15:
+ ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetD += (aShifthold == 1 ? 4 : 1);
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int mEgg = 0;
+ public int mTargetD = 0;
+ public int mTargetZ = 0;
+ public int mTargetY = 0;
+ public int mTargetX = 0;
+
+ @Override
+ public void detectAndSendChanges()
+ {
+ super.detectAndSendChanges();
+ if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
+ return;
+ }
+ this.mTargetX = ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetX;
+ this.mTargetY = ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetY;
+ this.mTargetZ = ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetZ;
+ this.mTargetD = ((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).mTargetD;
+ this.mEgg = (((GT_MetaTileEntity_Teleporter)this.mTileEntity.getMetaTileEntity()).hasDimensionalTeleportCapability() ? 1 : 0);
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext())
+ {
+ ICrafting var1 = (ICrafting)var2.next();
+ var1.sendProgressBarUpdate(this, 100, this.mTargetX & 0xFFFF);
+ var1.sendProgressBarUpdate(this, 101, this.mTargetX >>> 16);
+ var1.sendProgressBarUpdate(this, 102, this.mTargetY & 0xFFFF);
+ var1.sendProgressBarUpdate(this, 103, this.mTargetY >>> 16);
+ var1.sendProgressBarUpdate(this, 104, this.mTargetZ & 0xFFFF);
+ var1.sendProgressBarUpdate(this, 105, this.mTargetZ >>> 16);
+ var1.sendProgressBarUpdate(this, 106, this.mTargetD & 0xFFFF);
+ var1.sendProgressBarUpdate(this, 107, this.mTargetD >>> 16);
+ var1.sendProgressBarUpdate(this, 108, this.mEgg);
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2)
+ {
+ super.updateProgressBar(par1, par2);
+ switch (par1)
+ {
+ case 100:
+ this.mTargetX = (this.mTargetX & 0xFFFF0000 | par2); break;
+ case 101:
+ this.mTargetX = (this.mTargetX & 0xFFFF | par2 << 16); break;
+ case 102:
+ this.mTargetY = (this.mTargetY & 0xFFFF0000 | par2); break;
+ case 103:
+ this.mTargetY = (this.mTargetY & 0xFFFF | par2 << 16); break;
+ case 104:
+ this.mTargetZ = (this.mTargetZ & 0xFFFF0000 | par2); break;
+ case 105:
+ this.mTargetZ = (this.mTargetZ & 0xFFFF | par2 << 16); break;
+ case 106:
+ this.mTargetD = (this.mTargetD & 0xFFFF0000 | par2); break;
+ case 107:
+ this.mTargetD = (this.mTargetD & 0xFFFF | par2 << 16); break;
+ case 108:
+ this.mEgg = par2;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_TypeFilter.java b/src/main/java/gregtech/common/gui/GT_Container_TypeFilter.java
new file mode 100644
index 0000000000..57bd51e51b
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_TypeFilter.java
@@ -0,0 +1,123 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.gui.GT_Slot_Render;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_TypeFilter;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_TypeFilter
+ extends GT_ContainerMetaTile_Machine
+{
+ public GT_Container_TypeFilter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer)
+ {
+ addSlotToContainer(new Slot(this.mTileEntity, 0, 98, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 1, 116, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 2, 134, 5));
+ addSlotToContainer(new Slot(this.mTileEntity, 3, 98, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 4, 116, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 5, 134, 23));
+ addSlotToContainer(new Slot(this.mTileEntity, 6, 98, 41));
+ addSlotToContainer(new Slot(this.mTileEntity, 7, 116, 41));
+ addSlotToContainer(new Slot(this.mTileEntity, 8, 134, 41));
+
+ addSlotToContainer(new GT_Slot_Render(this.mTileEntity, 9, 35, 23));
+
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 8, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 26, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 44, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 62, 63, false, true, 1));
+ addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 80, 63, false, true, 1));
+ }
+
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer)
+ {
+ if (aSlotIndex < 9) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot)this.inventorySlots.get(aSlotIndex);
+ if (tSlot != null)
+ {
+ if (this.mTileEntity.getMetaTileEntity() == null) {
+ return null;
+ }
+ if (aSlotIndex == 9)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).clickTypeIcon(aMouseclick != 0);
+ return null;
+ }
+ if (aSlotIndex == 10)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bOutput);
+ if (((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bOutput) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Energy to Outputside");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Energy");
+ }
+ return null;
+ }
+ if (aSlotIndex == 11)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull = (!((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
+ if (((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Emit Redstone if slots contain something");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't emit Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 12)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvert = (!((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvert);
+ if (((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvert) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Redstone");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Redstone");
+ }
+ return null;
+ }
+ if (aSlotIndex == 13)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvertFilter = (!((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvertFilter);
+ if (((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bInvertFilter) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Invert Filter");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't invert Filter");
+ }
+ return null;
+ }
+ if (aSlotIndex == 14)
+ {
+ ((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bNBTAllowed = (!((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bNBTAllowed);
+ if (((GT_MetaTileEntity_TypeFilter)this.mTileEntity.getMetaTileEntity()).bNBTAllowed) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Allow Items with NBT");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't allow Items with NBT");
+ }
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ public int getSlotCount()
+ {
+ return 9;
+ }
+
+ public int getShiftClickSlotCount()
+ {
+ return 9;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java
new file mode 100644
index 0000000000..e8e95513ad
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java
@@ -0,0 +1,47 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_Boiler
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_Boiler(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aTextureName, int aSteamCapacity)
+ {
+ super(new GT_Container_Boiler(aInventoryPlayer, aTileEntity, aSteamCapacity), "gregtech:textures/gui/" + aTextureName);
+ }
+
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ this.fontRendererObj.drawString("Boiler", 8, 4, 4210752);
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ if (this.mContainer != null)
+ {
+ int tScale = ((GT_Container_Boiler)this.mContainer).mSteamAmount;
+ if (tScale > 0) {
+ drawTexturedModalRect(x + 70, y + 25 + 54 - tScale, 194, 54 - tScale, 10, tScale);
+ }
+ tScale = ((GT_Container_Boiler)this.mContainer).mWaterAmount;
+ if (tScale > 0) {
+ drawTexturedModalRect(x + 83, y + 25 + 54 - tScale, 204, 54 - tScale, 10, tScale);
+ }
+ tScale = ((GT_Container_Boiler)this.mContainer).mTemperature;
+ if (tScale > 0) {
+ drawTexturedModalRect(x + 96, y + 25 + 54 - tScale, 214, 54 - tScale, 10, tScale);
+ }
+ tScale = ((GT_Container_Boiler)this.mContainer).mProcessingEnergy;
+ if (tScale > 0) {
+ drawTexturedModalRect(x + 117, y + 44 + 14 - tScale, 177, 14 - tScale, 15, tScale + 1);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java
new file mode 100644
index 0000000000..c82562c4bb
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java
@@ -0,0 +1,33 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_BronzeBlastFurnace
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_BronzeBlastFurnace(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_BronzeBlastFurnace(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/BronzeBlastFurnace.png");
+ }
+
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ this.fontRendererObj.drawString("Bronze Blast Furnace", 8, 4, 4210752);
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ if ((this.mContainer != null) &&
+ (this.mContainer.mProgressTime > 0)) {
+ drawTexturedModalRect(x + 58, y + 28, 176, 0, Math.max(0, Math.min(20, (this.mContainer.mProgressTime > 0 ? 1 : 0) + this.mContainer.mProgressTime * 20 / (this.mContainer.mMaxProgressTime < 1 ? 1 : this.mContainer.mMaxProgressTime))), 11);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java
new file mode 100644
index 0000000000..77935684fe
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java
@@ -0,0 +1,22 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_ChestBuffer
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_ChestBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_ChestBuffer(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/ChestBuffer.png");
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java
new file mode 100644
index 0000000000..88889b749c
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java
@@ -0,0 +1,22 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_Filter
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_Filter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_Filter(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/Filter.png");
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java
new file mode 100644
index 0000000000..081550a56b
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java
@@ -0,0 +1,53 @@
+package gregtech.common.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import net.minecraft.entity.player.InventoryPlayer;
+import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+
+public class GT_GUIContainer_FusionReactor extends GT_GUIContainerMetaTile_Machine {
+
+ String mName = "";
+ public String mNEI;
+
+ public GT_GUIContainer_FusionReactor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile, String aNEI) {
+ super(new GT_Container_MultiMachine(aInventoryPlayer, aTileEntity, false), RES_PATH_GUI + "multimachines/" + (aTextureFile==null?"MultiblockDisplay":aTextureFile));
+ mName = aName;
+ mNEI = aNEI;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(mName, 8, -10, 16448255);
+
+ if (mContainer != null) {
+ if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 64) != 0) fontRendererObj.drawString("Incomplete Structure.", 10, 8, 16448255);
+
+ if (((GT_Container_MultiMachine)mContainer).mDisplayErrorCode == 0) {
+ if (((GT_Container_MultiMachine)mContainer).mActive == 0) {
+ fontRendererObj.drawString("Hit with Soft Hammer to (re-)start the Machine if it doesn't start.", -70, 170, 16448255);
+ } else {
+ fontRendererObj.drawString("Running perfectly.", 10, 170, 16448255);
+ }
+ }
+ if(this.mContainer!=null){
+ fontRendererObj.drawString(GT_Utility.formatNumbers(this.mContainer.mEnergy)+" EU", 50, 155, 0x00ff0000);
+ }
+ }
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ if (this.mContainer != null)
+ {
+ double tScale = (double) this.mContainer.mEnergy / (double)this.mContainer.mStorage;
+ drawTexturedModalRect(x + 5, y + 156, 0, 251,Math.min(147, (int)(tScale*148)), 5);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java
new file mode 100644
index 0000000000..0838f1024e
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java
@@ -0,0 +1,38 @@
+package gregtech.common.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.gui.GT_Container_BasicTank;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.util.StatCollector;
+
+public class GT_GUIContainer_QuantumChest extends GT_GUIContainerMetaTile_Machine {
+
+ private final String mName;
+
+ public GT_GUIContainer_QuantumChest(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
+ super(new GT_Container_QuantumChest(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "BasicTank.png");
+ mName = aName;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752);
+ fontRendererObj.drawString(mName, 8, 6, 4210752);
+ if (mContainer != null) {
+ fontRendererObj.drawString("Item Amount", 10, 20, 16448255);
+ fontRendererObj.drawString(GT_Utility.parseNumberToString(((GT_Container_QuantumChest)mContainer).mContent), 10, 30, 16448255);
+ }
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java
new file mode 100644
index 0000000000..a3ba4d4294
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java
@@ -0,0 +1,36 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_Regulator
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_Regulator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_Regulator(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/Regulator.png");
+ }
+
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[0], 120, 9, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[1], 137, 9, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[2], 155, 9, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[3], 120, 26, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[4], 137, 26, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[5], 155, 26, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[6], 120, 43, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[7], 137, 43, 16448255);
+ this.fontRendererObj.drawString("" + ((GT_Container_Regulator)this.mContainer).mTargetSlots[8], 155, 43, 16448255);
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java
new file mode 100644
index 0000000000..2e1daf3117
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java
@@ -0,0 +1,22 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_SuperBuffer
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_SuperBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_SuperBuffer(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/SuperBuffer.png");
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java
new file mode 100644
index 0000000000..467a124d41
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java
@@ -0,0 +1,41 @@
+package gregtech.common.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.gui.GT_GUIContainer_BasicTank;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_Teleporter;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_Teleporter
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_Teleporter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_Teleporter(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "Teleporter.png");
+ }
+
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ this.fontRendererObj.drawString("Teleporter", 46, 8, 16448255);
+ if (this.mContainer != null)
+ {
+ this.fontRendererObj.drawString("X: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter)this.mContainer).mTargetX), 46, 16, 16448255);
+ this.fontRendererObj.drawString("Y: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter)this.mContainer).mTargetY), 46, 24, 16448255);
+ this.fontRendererObj.drawString("Z: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter)this.mContainer).mTargetZ), 46, 32, 16448255);
+ if (((GT_Container_Teleporter)this.mContainer).mEgg > 0) {
+ this.fontRendererObj.drawString("Dim: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter)this.mContainer).mTargetD), 46, 40, 16448255);
+ }
+ }
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_TypeFilter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_TypeFilter.java
new file mode 100644
index 0000000000..64f597c97c
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_TypeFilter.java
@@ -0,0 +1,22 @@
+package gregtech.common.gui;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_TypeFilter
+ extends GT_GUIContainerMetaTile_Machine
+{
+ public GT_GUIContainer_TypeFilter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity)
+ {
+ super(new GT_Container_TypeFilter(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/TypeFilter.png");
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java b/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java
new file mode 100644
index 0000000000..84c38db6b7
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java
@@ -0,0 +1,26 @@
+package gregtech.common.items;
+
+import net.minecraft.item.ItemStack;
+import ic2.api.reactor.IReactor;
+import gregtech.api.items.GT_RadioactiveCellIC_Item;
+
+public class GT_DepletetCell_Item extends GT_RadioactiveCellIC_Item{
+
+ public GT_DepletetCell_Item(String aUnlocalized, String aEnglish, int aRadiation) {
+ super(aUnlocalized, aEnglish, 1, 1, 0, aRadiation,0);}
+
+ public void processChamber(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, boolean paramBoolean){}
+
+ public boolean acceptUraniumPulse(IReactor paramIReactor, ItemStack paramItemStack1, ItemStack paramItemStack2, int paramInt1, int paramInt2, int paramInt3, int paramInt4, boolean paramBoolean){
+ return false;}
+
+ public boolean canStoreHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2){return false;}
+
+ public int getMaxHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2){return 0;}
+
+ public int getCurrentHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2){return 0;}
+
+ public int alterHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, int paramInt3){return 0;}
+
+ public float influenceExplosion(IReactor paramIReactor, ItemStack paramItemStack){return 0.0F;}
+}
diff --git a/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java b/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java
new file mode 100644
index 0000000000..71f6d107f7
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java
@@ -0,0 +1,102 @@
+package gregtech.common.items;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+
+public class GT_FluidDisplayItem
+ extends GT_Generic_Item
+{
+ public GT_FluidDisplayItem()
+ {
+ super("GregTech_FluidDisplay", "Fluid Display", null);
+ ItemList.Display_Fluid.set(this);
+ }
+
+ protected void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (GT_Values.D1)
+ {
+ Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage());
+ if (tFluid != null) {
+ aList.add("Registry: " + tFluid.getName());
+ }
+ }
+ if (aNBT != null)
+ {
+ long tToolTipAmount = aNBT.getLong("mFluidDisplayAmount");
+ if (tToolTipAmount > 0L) {
+ aList.add(EnumChatFormatting.BLUE + "Amount: " + tToolTipAmount + EnumChatFormatting.GRAY);
+ }
+ aList.add(EnumChatFormatting.RED + "Temperature: " + aNBT.getLong("mFluidDisplayHeat") + " K" + EnumChatFormatting.GRAY);
+ aList.add(EnumChatFormatting.GREEN + "State: " + (aNBT.getBoolean("mFluidState") ? "Gas" : "Liquid") + EnumChatFormatting.GRAY);
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister) {}
+
+ public IIcon getIconFromDamage(int aMeta)
+ {
+ Fluid tFluid = FluidRegistry.getFluid(aMeta);
+ return tFluid == null ? FluidRegistry.WATER.getStillIcon() : tFluid.getStillIcon();
+ }
+
+ @SideOnly(Side.CLIENT)
+ public int getColorFromItemStack(ItemStack aStack, int aRenderPass)
+ {
+ Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage());
+ return tFluid == null ? 16777215 : tFluid.getColor();
+ }
+
+ public int getSpriteNumber()
+ {
+ return 0;
+ }
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ if (aStack != null) {
+ return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), false);
+ }
+ return "";
+ }
+
+ public String getItemStackDisplayName(ItemStack aStack)
+ {
+ if (aStack != null) {
+ return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), true);
+ }
+ return "";
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item aItem, CreativeTabs aTab, List aList)
+ {
+ if (GT_Values.D1)
+ {
+ int i = 0;
+ for (int j = FluidRegistry.getMaxID(); i < j; i++)
+ {
+ ItemStack tStack = GT_Utility.getFluidDisplayStack(FluidRegistry.getFluid(i));
+ if (tStack != null) {
+ aList.add(tStack);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java
new file mode 100644
index 0000000000..510a426c32
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java
@@ -0,0 +1,125 @@
+package gregtech.common.items;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import java.io.PrintStream;
+import java.util.List;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class GT_IntegratedCircuit_Item
+ extends GT_Generic_Item
+{
+ public GT_IntegratedCircuit_Item()
+ {
+ super("integrated_circuit", "Integrated Circuit", "");
+ setHasSubtypes(true);
+ setMaxDamage(0);
+
+ ItemList.Circuit_Integrated.set(this);
+
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 0L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.circuit.get(Materials.Basic) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "d ", " P ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d ", " P ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 3L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d", " P ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " Pd", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 5L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " P ", " d", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 6L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " P ", " d ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 7L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " P ", "d ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 8L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", "dP ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 9L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "P d", " ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 10L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "P ", " d", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 11L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "P ", " ", " d", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 12L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "P ", " ", " d ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 13L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " P", " ", " d", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 14L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " P", " ", " d ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 15L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " P", " ", "d ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 16L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " P", "d ", " ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 17L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " ", "d P", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 18L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", "d ", " P", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 19L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "d ", " ", " P", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 20L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d ", " ", " P", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 21L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "d ", " ", "P ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 22L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d ", " ", "P ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 23L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d", " ", "P ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Integrated.getWithDamage(1L, 24L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " d", "P ", Character.valueOf('P'), ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ }
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ super.addAdditionalToolTips(aList, aStack);
+ aList.add(GT_LanguageManager.addStringLocalization(new StringBuilder().append(getUnlocalizedName()).append(".configuration").toString(), "Configuration: ") + getConfigurationString(getDamage(aStack)));
+ }
+
+ public String getUnlocalizedName(ItemStack aStack)
+ {
+ return getUnlocalizedName();
+ }
+
+ @SideOnly(Side.CLIENT)
+ public final void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList)
+ {
+ aList.add(new ItemStack(this, 1, 0));
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister)
+ {
+ super.registerIcons(aIconRegister);
+ if (GregTech_API.sPostloadFinished)
+ {
+ GT_Log.out.println("GT_Mod: Starting Item Icon Load Phase");
+ System.out.println("GT_Mod: Starting Item Icon Load Phase");
+ GregTech_API.sItemIcons = aIconRegister;
+ for (Runnable tRunnable : GregTech_API.sGTItemIconload) {
+ try
+ {
+ tRunnable.run();
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Finished Item Icon Load Phase");
+ System.out.println("GT_Mod: Finished Item Icon Load Phase");
+ }
+ }
+
+ private static String getModeString(int aMetaData)
+ {
+ switch ((byte)(aMetaData >>> 8))
+ {
+ case 0:
+ return "==";
+ case 1:
+ return "<=";
+ case 2:
+ return ">=";
+ case 3:
+ return "<";
+ case 4:
+ return ">";
+ }
+ return "";
+ }
+
+ private static String getConfigurationString(int aMetaData)
+ {
+ return getModeString(aMetaData) + " " + (byte)(aMetaData & 0xFF);
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
new file mode 100644
index 0000000000..e6805d3b21
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
@@ -0,0 +1,881 @@
+package gregtech.common.items;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Item_X32;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_MultiTexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_FoodStat;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import gregtech.common.covers.GT_Cover_Arm;
+import gregtech.common.covers.GT_Cover_ControlsWork;
+import gregtech.common.covers.GT_Cover_Conveyor;
+import gregtech.common.covers.GT_Cover_Crafting;
+import gregtech.common.covers.GT_Cover_DoesWork;
+import gregtech.common.covers.GT_Cover_Drain;
+import gregtech.common.covers.GT_Cover_EUMeter;
+import gregtech.common.covers.GT_Cover_ItemMeter;
+import gregtech.common.covers.GT_Cover_LiquidMeter;
+import gregtech.common.covers.GT_Cover_NeedMaintainance;
+import gregtech.common.covers.GT_Cover_PlayerDetector;
+import gregtech.common.covers.GT_Cover_Pump;
+import gregtech.common.covers.GT_Cover_RedstoneReceiverExternal;
+import gregtech.common.covers.GT_Cover_RedstoneReceiverInternal;
+import gregtech.common.covers.GT_Cover_RedstoneTransmitterExternal;
+import gregtech.common.covers.GT_Cover_RedstoneTransmitterInternal;
+import gregtech.common.covers.GT_Cover_Screen;
+import gregtech.common.covers.GT_Cover_Shutter;
+import gregtech.common.covers.GT_Cover_SolarPanel;
+import gregtech.common.items.behaviors.Behaviour_Arrow_Potion;
+import gregtech.common.items.behaviors.Behaviour_DataOrb;
+import gregtech.common.items.behaviors.Behaviour_DataStick;
+import gregtech.common.items.behaviors.Behaviour_Lighter;
+import gregtech.common.items.behaviors.Behaviour_PrintedPages;
+import gregtech.common.items.behaviors.Behaviour_Scanner;
+import gregtech.common.items.behaviors.Behaviour_SensorKit;
+import gregtech.common.items.behaviors.Behaviour_Sonictron;
+import gregtech.common.items.behaviors.Behaviour_Spray_Color;
+import gregtech.common.items.behaviors.Behaviour_WrittenBook;
+
+import java.util.List;
+
+import cpw.mods.fml.common.Loader;
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.Potion;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraftforge.common.ForgeModContainer;
+
+public class GT_MetaGenerated_Item_01
+ extends GT_MetaGenerated_Item_X32
+{
+ public static GT_MetaGenerated_Item_01 INSTANCE;
+ private final String mToolTipPurify = GT_LanguageManager.addStringLocalization("metaitem.01.tooltip.purify", "Throw into Cauldron to get clean Dust");
+
+ public GT_MetaGenerated_Item_01()
+ {
+ super("metaitem.01", new OrePrefixes[] { OrePrefixes.dustTiny, OrePrefixes.dustSmall, OrePrefixes.dust, OrePrefixes.dustImpure, OrePrefixes.dustPure, OrePrefixes.crushed, OrePrefixes.crushedPurified, OrePrefixes.crushedCentrifuged, OrePrefixes.gem, OrePrefixes.nugget, null, OrePrefixes.ingot, OrePrefixes.ingotHot, OrePrefixes.ingotDouble, OrePrefixes.ingotTriple, OrePrefixes.ingotQuadruple, OrePrefixes.ingotQuintuple, OrePrefixes.plate, OrePrefixes.plateDouble, OrePrefixes.plateTriple, OrePrefixes.plateQuadruple, OrePrefixes.plateQuintuple, OrePrefixes.plateDense, OrePrefixes.stick, OrePrefixes.lens, OrePrefixes.round, OrePrefixes.bolt, OrePrefixes.screw, OrePrefixes.ring, OrePrefixes.foil, OrePrefixes.cell, OrePrefixes.cellPlasma });
+ INSTANCE = this;
+
+ int tLastID = 0;
+
+ setBurnValue(17000 + Materials.Wood.mMetaItemSubID, 1600);
+ GT_OreDictUnificator.addToBlacklist(new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 8L), new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID));
+ GregTech_API.registerCover(new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID), new GT_RenderedTexture(Textures.BlockIcons.COVER_WOOD_PLATE), null);
+
+ ItemStack tStack = new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID);
+ tStack.setStackDisplayName("The holy Planks of Sengir");
+ GT_Utility.ItemNBT.addEnchantment(tStack, Enchantment.smite, 10);
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "XXX", "XDX", "XXX", Character.valueOf('X'), OrePrefixes.gem.get(Materials.NetherStar), Character.valueOf('D'), new ItemStack(Blocks.dragon_egg, 1, 32767) });
+
+ ItemList.Credit_Greg_Copper.set(addItem(tLastID = 0, "Copper GT Credit", "0.125 Credits", new Object[0]));
+ ItemList.Credit_Greg_Cupronickel.set(addItem(tLastID = 1, "Cupronickel GT Credit", "1 Credit", new Object[] { new ItemData(Materials.Cupronickel, 907200L, new MaterialStack[0]) }));
+ ItemList.Credit_Greg_Silver.set(addItem(tLastID = 2, "Silver GT Credit", "8 Credits", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Credit_Greg_Gold.set(addItem(tLastID = 3, "Gold GT Credit", "64 Credits", new Object[0]));
+ ItemList.Credit_Greg_Platinum.set(addItem(tLastID = 4, "Platinum GT Credit", "512 Credits", new Object[0]));
+ ItemList.Credit_Greg_Osmium.set(addItem(tLastID = 5, "Osmium GT Credit", "4096 Credits", new Object[0]));
+ ItemList.Credit_Greg_Naquadah.set(addItem(tLastID = 6, "Naquadah GT Credit", "32768 Credits", new Object[0]));
+ ItemList.Credit_Greg_Neutronium.set(addItem(tLastID = 7, "Neutronium GT Credit", "262144 Credits", new Object[0]));
+ ItemList.Coin_Gold_Ancient.set(addItem(tLastID = 8, "Ancient Gold Coin", "Found in ancient Ruins", new Object[] { new ItemData(Materials.Gold, 907200L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 8L) }));
+ ItemList.Coin_Doge.set(addItem(tLastID = 9, "Doge Coin", "wow much coin how money so crypto plz mine v rich very currency wow", new Object[] { new ItemData(Materials.Brass, 907200L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Coin_Chocolate.set(addItem(tLastID = 10, "Chocolate Coin", "Wrapped in Gold", new Object[] { new ItemData(Materials.Gold, OrePrefixes.foil.mMaterialAmount, new MaterialStack[0]), new GT_FoodStat(1, 0.1F, EnumAction.eat, GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 1L), true, false, false, new int[] { Potion.moveSpeed.id, 200, 1, 100 }) }));
+ ItemList.Credit_Copper.set(addItem(tLastID = 11, "Industrial Copper Credit", "0.125 Credits", new Object[0]));
+
+ ItemList.Credit_Silver.set(addItem(tLastID = 13, "Industrial Silver Credit", "8 Credits", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Credit_Gold.set(addItem(tLastID = 14, "Industrial Gold Credit", "64 Credits", new Object[0]));
+ ItemList.Credit_Platinum.set(addItem(tLastID = 15, "Industrial Platinum Credit", "512 Credits", new Object[0]));
+ ItemList.Credit_Osmium.set(addItem(tLastID = 16, "Industrial Osmium Credit", "4096 Credits", new Object[0]));
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Coin_Chocolate.get(1L, new Object[0]), new Object[] { OrePrefixes.dust.get(Materials.Cocoa), OrePrefixes.dust.get(Materials.Milk), OrePrefixes.dust.get(Materials.Sugar), OrePrefixes.foil.get(Materials.Gold) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Copper.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Iron });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Iron.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Silver });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Silver.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Gold });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Gold.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Platinum });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Platinum.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Osmium });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Iron.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Silver.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Gold.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Platinum.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Osmium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Copper.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Cupronickel });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Cupronickel.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Silver });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Silver.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Gold });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Gold.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Platinum });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Platinum.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Osmium });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Osmium.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Naquadah });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Naquadah.get(8L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Neutronium });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Cupronickel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Silver.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Gold.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Platinum.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Osmium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Naquadah.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Credit_Greg_Neutronium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah });
+
+ ItemList.Component_Minecart_Wheels_Iron.set(addItem(tLastID = 100, "Iron Minecart Wheels", "To get things rolling", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L) }));
+ ItemList.Component_Minecart_Wheels_Steel.set(addItem(tLastID = 101, "Steel Minecart Wheels", "To get things rolling", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Component_Minecart_Wheels_Iron.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " h ", "RSR", " w ", Character.valueOf('R'), OrePrefixes.ring.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Component_Minecart_Wheels_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " h ", "RSR", " w ", Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Steel) });
+
+ ItemList.Arrow_Head_Glass_Emtpy.set(addItem(tLastID = 200, "Empty Glass Arrow Head", "Fill with Potions before use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Arrow_Head_Glass_Poison.set(addItem(tLastID = 201, "Poison Glass Arrow Head", "Glass Arrow filled with Poison", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Poison_Long.set(addItem(tLastID = 202, "Poison Glass Arrow Head", "Glass Arrow filled with stretched Poison", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Poison_Strong.set(addItem(tLastID = 203, "Poison Glass Arrow Head", "Glass Arrow filled with strong Poison", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Slowness.set(addItem(tLastID = 204, "Slowness Glass Arrow Head", "Glass Arrow filled with Laming Brew", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Slowness_Long.set(addItem(tLastID = 205, "Slowness Glass Arrow Head", "Glass Arrow filled with stretched Laming Brew", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Weakness.set(addItem(tLastID = 206, "Weakness Glass Arrow Head", "Glass Arrow filled with Weakening Brew", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Weakness_Long.set(addItem(tLastID = 207, "Weakness Glass Arrow Head", "Glass Arrow filled with stretched Weakening Brew", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Head_Glass_Holy_Water.set(addItem(tLastID = 208, "Holy Water Glass Arrow Head", "Glass Arrow filled with Holy Water", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1L) }));
+
+ ItemList.Arrow_Wooden_Glass_Emtpy.set(addItem(tLastID = 225, "Regular Glass Vial Arrow", "Empty Glass Arrow", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Poison.set(addItem(tLastID = 226, "Regular Poison Arrow", "Glass Arrow filled with Poison", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.poison.id, 450, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Poison_Long.set(addItem(tLastID = 227, "Regular Poison Arrow", "Glass Arrow filled with stretched Poison", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.poison.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Poison_Strong.set(addItem(tLastID = 228, "Regular Poison Arrow", "Glass Arrow filled with strong Poison", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.poison.id, 450, 1, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Slowness.set(addItem(tLastID = 229, "Regular Slowness Arrow", "Glass Arrow filled with Laming Brew", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.moveSlowdown.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Slowness_Long.set(addItem(tLastID = 230, "Regular Slowness Arrow", "Glass Arrow filled with stretched Laming Brew", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.moveSlowdown.id, 1800, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Weakness.set(addItem(tLastID = 231, "Regular Weakness Arrow", "Glass Arrow filled with Weakening Brew", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.weakness.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Weakness_Long.set(addItem(tLastID = 232, "Regular Weakness Arrow", "Glass Arrow filled with stretched Weakening Brew", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, new int[] { Potion.weakness.id, 1800, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Wooden_Glass_Holy_Water.set(addItem(tLastID = 233, "Regular Holy Water Arrow", "Glass Arrow filled with Holy Water", new Object[] { new Behaviour_Arrow_Potion(1.0F, 6.0F, Enchantment.smite, 10, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1L) }));
+
+ ItemList.Arrow_Plastic_Glass_Emtpy.set(addItem(tLastID = 250, "Light Glass Vial Arrow", "Empty Glass Arrow", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Poison.set(addItem(tLastID = 251, "Light Poison Arrow", "Glass Arrow filled with Poison", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.poison.id, 450, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Poison_Long.set(addItem(tLastID = 252, "Light Poison Arrow", "Glass Arrow filled with stretched Poison", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.poison.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Poison_Strong.set(addItem(tLastID = 253, "Light Poison Arrow", "Glass Arrow filled with strong Poison", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.poison.id, 450, 1, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Slowness.set(addItem(tLastID = 254, "Light Slowness Arrow", "Glass Arrow filled with Laming Brew", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.moveSlowdown.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Slowness_Long.set(addItem(tLastID = 255, "Light Slowness Arrow", "Glass Arrow filled with stretched Laming Brew", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.moveSlowdown.id, 1800, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Weakness.set(addItem(tLastID = 256, "Light Weakness Arrow", "Glass Arrow filled with Weakening Brew", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.weakness.id, 900, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Weakness_Long.set(addItem(tLastID = 257, "Light Weakness Arrow", "Glass Arrow filled with stretched Weakening Brew", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, new int[] { Potion.weakness.id, 1800, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L) }));
+ ItemList.Arrow_Plastic_Glass_Holy_Water.set(addItem(tLastID = 258, "Light Holy Water Arrow", "Glass Arrow filled with Holy Water", new Object[] { new Behaviour_Arrow_Potion(1.5F, 6.0F, Enchantment.smite, 10, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Emtpy, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Poison.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Poison_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Poison_Strong.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison_Strong, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Slowness.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Slowness, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Slowness_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Slowness_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Weakness.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Weakness, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Weakness_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Weakness_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Wooden_Glass_Holy_Water.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Holy_Water, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Emtpy, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Poison.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Poison_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Poison_Strong.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Poison_Strong, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Slowness.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Slowness, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Slowness_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Slowness_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Weakness.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Weakness, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Weakness_Long.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Weakness_Long, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Arrow_Plastic_Glass_Holy_Water.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " A", " S ", "F ", Character.valueOf('A'), ItemList.Arrow_Head_Glass_Holy_Water, Character.valueOf('F'), OreDictNames.craftingFeather, Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+
+ ItemList.Shape_Empty.set(addItem(tLastID = 300, "Empty Shape Plate", "Raw Plate to make Molds and Extruder Shapes", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Empty.get(1L, new Object[0]), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "hf", "PP", "PP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+
+ ItemList.Shape_Mold_Plate.set(addItem(tLastID = 301, "Mold (Plate)", "Mold for making Plates", new Object[0]));
+ ItemList.Shape_Mold_Casing.set(addItem(tLastID = 302, "Mold (Casing)", "Mold for making Item Casings", new Object[0]));
+ ItemList.Shape_Mold_Gear.set(addItem(tLastID = 303, "Mold (Gear)", "Mold for making Gears", new Object[0]));
+ ItemList.Shape_Mold_Credit.set(addItem(tLastID = 304, "Mold (Coinage)", "Secure Mold for making Coins (Don't lose it!)", new Object[0]));
+ ItemList.Shape_Mold_Bottle.set(addItem(tLastID = 305, "Mold (Bottle)", "Mold for making Bottles", new Object[0]));
+ ItemList.Shape_Mold_Ingot.set(addItem(tLastID = 306, "Mold (Ingot)", "Mold for making Ingots", new Object[0]));
+ ItemList.Shape_Mold_Ball.set(addItem(tLastID = 307, "Mold (Ball)", "Mold for making Balls", new Object[0]));
+ ItemList.Shape_Mold_Block.set(addItem(tLastID = 308, "Mold (Block)", "Mold for making Blocks", new Object[0]));
+ ItemList.Shape_Mold_Nugget.set(addItem(tLastID = 309, "Mold (Nuggets)", "Mold for making Nuggets", new Object[0]));
+ ItemList.Shape_Mold_Bun.set(addItem(tLastID = 310, "Mold (Buns)", "Mold for shaping Buns", new Object[0]));
+ ItemList.Shape_Mold_Bread.set(addItem(tLastID = 311, "Mold (Bread)", "Mold for shaping Breads", new Object[0]));
+ ItemList.Shape_Mold_Baguette.set(addItem(tLastID = 312, "Mold (Baguette)", "Mold for shaping Baguettes", new Object[0]));
+ ItemList.Shape_Mold_Cylinder.set(addItem(tLastID = 313, "Mold (Cylinder)", "Mold for shaping Cylinders", new Object[0]));
+ ItemList.Shape_Mold_Anvil.set(addItem(tLastID = 314, "Mold (Anvil)", "Mold for shaping Anvils", new Object[0]));
+ ItemList.Shape_Mold_Name.set(addItem(tLastID = 315, "Mold (Name)", "Mold for naming Items (rename Mold with Anvil)", new Object[0]));
+ ItemList.Shape_Mold_Arrow.set(addItem(tLastID = 316, "Mold (Arrow Head)", "Mold for making Arrow Heads", new Object[0]));
+ ItemList.Shape_Mold_Gear_Small.set(addItem(tLastID = 317, "Mold (Small Gear)", "Mold for making small Gears", new Object[0]));
+
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Blocks.glass), null, new ItemStack(Blocks.glass), null, new ItemStack(Blocks.glass) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Credit.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "h ", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Plate.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " h ", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Casing.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " h", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Gear.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " Ph", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Bottle.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", " h", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", " h ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Ball.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", "h ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Block.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", "hP ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Nugget.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P h", " ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Bun.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " h", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Bread.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " ", " h", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Baguette.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " ", " h ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Cylinder.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", " h", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Anvil.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", " h ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Name.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", "h ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Arrow.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", "h ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Mold_Gear_Small.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " ", "h P", Character.valueOf('P'), ItemList.Shape_Empty });
+
+ ItemList.Shape_Extruder_Plate.set(addItem(tLastID = 350, "Extruder Shape (Plate)", "Extruder Shape for making Plates", new Object[0]));
+ ItemList.Shape_Extruder_Rod.set(addItem(tLastID = 351, "Extruder Shape (Rod)", "Extruder Shape for making Rods", new Object[0]));
+ ItemList.Shape_Extruder_Bolt.set(addItem(tLastID = 352, "Extruder Shape (Bolt)", "Extruder Shape for making Bolts", new Object[0]));
+ ItemList.Shape_Extruder_Ring.set(addItem(tLastID = 353, "Extruder Shape (Ring)", "Extruder Shape for making Rings", new Object[0]));
+ ItemList.Shape_Extruder_Cell.set(addItem(tLastID = 354, "Extruder Shape (Cell)", "Extruder Shape for making Cells", new Object[0]));
+ ItemList.Shape_Extruder_Ingot.set(addItem(tLastID = 355, "Extruder Shape (Ingot)", "Extruder Shape for, wait, can't we just use a Furnace?", new Object[0]));
+ ItemList.Shape_Extruder_Wire.set(addItem(tLastID = 356, "Extruder Shape (Wire)", "Extruder Shape for making Wires", new Object[0]));
+ ItemList.Shape_Extruder_Casing.set(addItem(tLastID = 357, "Extruder Shape (Casing)", "Extruder Shape for making Item Casings", new Object[0]));
+ ItemList.Shape_Extruder_Pipe_Tiny.set(addItem(tLastID = 358, "Extruder Shape (Tiny Pipe)", "Extruder Shape for making tiny Pipes", new Object[0]));
+ ItemList.Shape_Extruder_Pipe_Small.set(addItem(tLastID = 359, "Extruder Shape (Small Pipe)", "Extruder Shape for making small Pipes", new Object[0]));
+ ItemList.Shape_Extruder_Pipe_Medium.set(addItem(tLastID = 360, "Extruder Shape (Normal Pipe)", "Extruder Shape for making Pipes", new Object[0]));
+ ItemList.Shape_Extruder_Pipe_Large.set(addItem(tLastID = 361, "Extruder Shape (Large Pipe)", "Extruder Shape for making large Pipes", new Object[0]));
+ ItemList.Shape_Extruder_Pipe_Huge.set(addItem(tLastID = 362, "Extruder Shape (Huge Pipe)", "Extruder Shape for making full Block Pipes", new Object[0]));
+ ItemList.Shape_Extruder_Block.set(addItem(tLastID = 363, "Extruder Shape (Block)", "Extruder Shape for making Blocks", new Object[0]));
+ ItemList.Shape_Extruder_Sword.set(addItem(tLastID = 364, "Extruder Shape (Sword Blade)", "Extruder Shape for making Swords", new Object[0]));
+ ItemList.Shape_Extruder_Pickaxe.set(addItem(tLastID = 365, "Extruder Shape (Pickaxe Head)", "Extruder Shape for making Pickaxes", new Object[0]));
+ ItemList.Shape_Extruder_Shovel.set(addItem(tLastID = 366, "Extruder Shape (Shovel Head)", "Extruder Shape for making Shovels", new Object[0]));
+ ItemList.Shape_Extruder_Axe.set(addItem(tLastID = 367, "Extruder Shape (Axe Head)", "Extruder Shape for making Axes", new Object[0]));
+ ItemList.Shape_Extruder_Hoe.set(addItem(tLastID = 368, "Extruder Shape (Hoe Head)", "Extruder Shape for making Hoes", new Object[0]));
+ ItemList.Shape_Extruder_Hammer.set(addItem(tLastID = 369, "Extruder Shape (Hammer Head)", "Extruder Shape for making Hammers", new Object[0]));
+ ItemList.Shape_Extruder_File.set(addItem(tLastID = 370, "Extruder Shape (File Head)", "Extruder Shape for making Files", new Object[0]));
+ ItemList.Shape_Extruder_Saw.set(addItem(tLastID = 371, "Extruder Shape (Saw Blade)", "Extruder Shape for making Saws", new Object[0]));
+ ItemList.Shape_Extruder_Gear.set(addItem(tLastID = 372, "Extruder Shape (Gear)", "Extruder Shape for making Gears", new Object[0]));
+ ItemList.Shape_Extruder_Bottle.set(addItem(tLastID = 373, "Extruder Shape (Bottle)", "Extruder Shape for making Bottles", new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Bolt.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "x ", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Cell.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " x ", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " x", " P ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Ring.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " Px", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Rod.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", " x", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Wire.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", " x ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Casing.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " P ", "x ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Plate.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", "xP ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Block.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P x", " ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pipe_Small.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " x", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pipe_Large.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " ", " x", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pipe_Medium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P ", " ", " x ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Sword.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", " x", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pickaxe.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", " x ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Shovel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", " ", "x ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Axe.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " P", "x ", " ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Hoe.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " ", "x P", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Hammer.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", "x ", " P", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_File.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "x ", " ", " P", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Saw.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " x ", " ", " P", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Gear.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "x ", " ", "P ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pipe_Tiny.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " x ", " ", "P ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Pipe_Huge.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " x", " ", "P ", Character.valueOf('P'), ItemList.Shape_Empty });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Extruder_Bottle.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " ", " x", "P ", Character.valueOf('P'), ItemList.Shape_Empty });
+
+ ItemList.Shape_Slicer_Flat.set(addItem(tLastID = 398, "Slicer Blade (Flat)", "Slicer Blade for cutting Flat", new Object[0]));
+ ItemList.Shape_Slicer_Stripes.set(addItem(tLastID = 399, "Slicer Blade (Stripes)", "Slicer Blade for cutting Stripes", new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Slicer_Flat.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "hXS", " P ", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Block, Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Shape_Slicer_Stripes.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Block, Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel) });
+
+ ItemList.Fuel_Can_Plastic_Empty.set(addItem(tLastID = 400, "Empty Plastic Fuel Can", "Used to store Fuels", new Object[] { new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L) }));
+ ItemList.Fuel_Can_Plastic_Filled.set(addItem(tLastID = 401, "Plastic Fuel Can", "Burns well in Diesel Generators", new Object[] { new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Fuel_Can_Plastic_Empty.get(7L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " PP", "P P", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Plastic) });
+
+ ItemList.Spray_Empty.set(addItem(tLastID = 402, "Empty Spray Can", "Used for making Sprays", new Object[] { new ItemData(Materials.Tin, OrePrefixes.plate.mMaterialAmount * 2L, Materials.Redstone, OrePrefixes.dust.mMaterialAmount), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L) }));
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L), ItemList.Spray_Empty.get(1L, new Object[0]), 800, 1);
+
+ ItemList.Crate_Empty.set(addItem(tLastID = 403, "Empty Crate", "To Package lots of Material", new Object[] { new ItemData(Materials.Wood, 3628800L, Materials.Iron, OrePrefixes.screw.mMaterialAmount), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Crate_Empty.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "SWS", "WdW", "SWS", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('S'), OrePrefixes.screw.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Crate_Empty.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "SWS", "WdW", "SWS", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Steel) });
+
+ ItemList.ThermosCan_Empty.set(addItem(tLastID = 404, "Empty Thermos Can", "Keeping hot things hot and cold things cold", new Object[] { new ItemData(Materials.Aluminium, OrePrefixes.plate.mMaterialAmount * 1L + 2L * OrePrefixes.ring.mMaterialAmount, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L) }));
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Aluminium, 2L), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 800, 1);
+
+ ItemList.Large_Fluid_Cell_Steel.set(addItem(tLastID = 405, "Large Steel Fluid Cell", "", new Object[] { new ItemData(Materials.Steel, OrePrefixes.plate.mMaterialAmount * 8L + 4L * OrePrefixes.ring.mMaterialAmount, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+ setFluidContainerStats(32000 + tLastID, 16000L, 4L);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Steel, 4L), ItemList.Large_Fluid_Cell_Steel.get(1L, new Object[0]), 100, 64);
+
+ ItemList.Large_Fluid_Cell_TungstenSteel.set(addItem(tLastID = 406, "Large Tungstensteel Fluid Cell", "", new Object[] { new ItemData(Materials.TungstenSteel, OrePrefixes.plate.mMaterialAmount * 8L + 4L * OrePrefixes.ring.mMaterialAmount, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 6L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 3L) }));
+ setFluidContainerStats(32000 + tLastID, 64000L, 4L);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.TungstenSteel, 4L), ItemList.Large_Fluid_Cell_TungstenSteel.get(1L, new Object[0]), 200, 256);
+ for (byte i = 0; i < 16; i = (byte)(i + 1))
+ {
+ ItemList.SPRAY_CAN_DYES[i].set(addItem(tLastID = 430 + 2 * i, "Spray Can (" + Dyes.get(i).mName + ")", "Full", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L) }));
+ ItemList.SPRAY_CAN_DYES_USED[i].set(addItem(tLastID + 1, "Spray Can (" + Dyes.get(i).mName + ")", "Used", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 3L), SubTag.INVISIBLE }));
+ IItemBehaviour<GT_MetaBase_Item> tBehaviour = new Behaviour_Spray_Color(ItemList.Spray_Empty.get(1L, new Object[0]), ItemList.SPRAY_CAN_DYES_USED[i].get(1L, new Object[0]), ItemList.SPRAY_CAN_DYES[i].get(1L, new Object[0]), 512L, i);
+ addItemBehavior(32000 + tLastID, tBehaviour);
+ addItemBehavior(32001 + tLastID, tBehaviour);
+ }
+ ItemList.Tool_Matches.set(addItem(tLastID = 471, "Match", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Tool_MatchBox_Used.set(addItem(tLastID = 472, "Match Box", "This is not a Car", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), SubTag.INVISIBLE }));
+ ItemList.Tool_MatchBox_Full.set(addItem(tLastID = 473, "Match Box (Full)", "This is not a Car", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+
+ IItemBehaviour<GT_MetaBase_Item> tBehaviour = new Behaviour_Lighter(null, ItemList.Tool_Matches.get(1L, new Object[0]), ItemList.Tool_Matches.get(1L, new Object[0]), 1L);
+ addItemBehavior(32471, tBehaviour);
+ tBehaviour = new Behaviour_Lighter(null, ItemList.Tool_MatchBox_Used.get(1L, new Object[0]), ItemList.Tool_MatchBox_Full.get(1L, new Object[0]), 16L);
+ addItemBehavior(32472, tBehaviour);addItemBehavior(32473, tBehaviour);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphor, 1L), ItemList.Tool_Matches.get(1L, new Object[0]), 16, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1L), ItemList.Tool_Matches.get(1L, new Object[0]), 16, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphor, 1L), ItemList.Tool_Matches.get(4L, new Object[0]), 64, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), ItemList.Tool_Matches.get(4L, new Object[0]), 64, 16);
+ GT_Values.RA.addBoxingRecipe(ItemList.Tool_Matches.get(16L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L), ItemList.Tool_MatchBox_Full.get(1L, new Object[0]), 64, 16);
+ GT_Values.RA.addUnboxingRecipe(ItemList.Tool_MatchBox_Full.get(1L, new Object[0]), ItemList.Tool_Matches.get(16L, new Object[0]), null, 32, 16);
+
+ ItemList.Tool_Lighter_Invar_Empty.set(addItem(tLastID = 474, "Lighter (Empty)", "", new Object[] { new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Tool_Lighter_Invar_Used.set(addItem(tLastID = 475, "Lighter", "", new Object[] { new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), SubTag.INVISIBLE }));
+ ItemList.Tool_Lighter_Invar_Full.set(addItem(tLastID = 476, "Lighter (Full)", "", new Object[] { new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+
+ tBehaviour = new Behaviour_Lighter(ItemList.Tool_Lighter_Invar_Empty.get(1L, new Object[0]), ItemList.Tool_Lighter_Invar_Used.get(1L, new Object[0]), ItemList.Tool_Lighter_Invar_Full.get(1L, new Object[0]), 100L);
+ addItemBehavior(32475, tBehaviour);addItemBehavior(32476, tBehaviour);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Invar, 2L), new ItemStack(Items.flint, 1), ItemList.Tool_Lighter_Invar_Empty.get(1L, new Object[0]), 256, 16);
+
+ ItemList.Tool_Lighter_Platinum_Empty.set(addItem(tLastID = 477, "Platinum Lighter (Empty)", "A known Prank Master is engraved on it", new Object[] { new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Tool_Lighter_Platinum_Used.set(addItem(tLastID = 478, "Platinum Lighter", "A known Prank Master is engraved on it", new Object[] { new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), SubTag.INVISIBLE }));
+ ItemList.Tool_Lighter_Platinum_Full.set(addItem(tLastID = 479, "Platinum Lighter (Full)", "A known Prank Master is engraved on it", new Object[] { new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+
+ tBehaviour = new Behaviour_Lighter(ItemList.Tool_Lighter_Platinum_Empty.get(1L, new Object[0]), ItemList.Tool_Lighter_Platinum_Used.get(1L, new Object[0]), ItemList.Tool_Lighter_Platinum_Full.get(1L, new Object[0]), 1000L);
+ addItemBehavior(32478, tBehaviour);addItemBehavior(32479, tBehaviour);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Platinum, 2L), new ItemStack(Items.flint, 1), ItemList.Tool_Lighter_Platinum_Empty.get(1L, new Object[0]), 256, 256);
+
+ if(Loader.isModLoaded("GalacticraftMars")){
+ ItemList.Ingot_Heavy1.set(addItem(tLastID = 462, "Heavy Duty Alloy Ingot", "Used to make Heavy Duty Plates", new Object[0]));
+ ItemList.Ingot_Heavy2.set(addItem(tLastID = 463, "Heavy Duty Alloy Ingot T2", "Used to make Heavy Duty Plates T2", new Object[0]));
+ ItemList.Ingot_Heavy3.set(addItem(tLastID = 464, "Heavy Duty Alloy Ingot T3", "Used to make Heavy Duty Plates T3", new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Ingot_Heavy1.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "BhB", "CAS", "B B", 'B', OrePrefixes.bolt.get(Materials.StainlessSteel), 'C', OrePrefixes.compressed.get(Materials.Bronze), 'A', OrePrefixes.compressed.get(Materials.Aluminium), 'S', OrePrefixes.compressed.get(Materials.Steel) });
+ GT_Values.RA.addImplosionRecipe(ItemList.Ingot_Heavy1.get(1L, new Object[0]), 8, GT_ModHandler.getModItem("GalacticraftCore", "item.heavyPlating", 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.StainlessSteel, 2L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Ingot_Heavy2.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " BB", "hPC", " BB", 'B', OrePrefixes.bolt.get(Materials.Tungsten), 'C', OrePrefixes.compressed.get(Materials.MeteoricIron), 'P', GT_ModHandler.getModItem("GalacticraftCore", "item.heavyPlating", 1L)});
+ GT_Values.RA.addImplosionRecipe(ItemList.Ingot_Heavy2.get(1L, new Object[0]), 8, GT_ModHandler.getModItem("GalacticraftMars", "item.null", 1L,3), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungsten, 2L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Ingot_Heavy3.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " BB", "hPC", " BB", 'B', OrePrefixes.bolt.get(Materials.TungstenSteel), 'C', OrePrefixes.compressed.get(Materials.Desh), 'P', GT_ModHandler.getModItem("GalacticraftMars", "item.null", 1L,3)});
+ GT_Values.RA.addImplosionRecipe(ItemList.Ingot_Heavy3.get(1L, new Object[0]), 8, GT_ModHandler.getModItem("GalacticraftMars", "item.itemBasicAsteroids", 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 2L));
+ }
+ ItemList.Ingot_IridiumAlloy.set(addItem(tLastID = 480, "Iridium Alloy Ingot", "Used to make Iridium Plates", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L) }));
+
+ GT_ModHandler.addRollingMachineRecipe(ItemList.Ingot_IridiumAlloy.get(1L, new Object[0]), new Object[] { "IAI", "ADA", "IAI", Character.valueOf('D'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "iridiumplate", true) ? OreDictNames.craftingIndustrialDiamond : OrePrefixes.dust.get(Materials.Diamond), Character.valueOf('A'), OrePrefixes.plateAlloy.get("Advanced"), Character.valueOf('I'), OrePrefixes.plate.get(Materials.Iridium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Ingot_IridiumAlloy.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "IAI", "ADA", "IAI", Character.valueOf('D'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "iridiumplate", true) ? OreDictNames.craftingIndustrialDiamond : OrePrefixes.dust.get(Materials.Diamond), Character.valueOf('A'), OrePrefixes.plateAlloy.get("Advanced"), Character.valueOf('I'), OrePrefixes.plate.get(Materials.Iridium) });
+ GT_Values.RA.addImplosionRecipe(ItemList.Ingot_IridiumAlloy.get(1L, new Object[0]), 8, GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L));
+
+ ItemList.Paper_Printed_Pages.set(addItem(tLastID = 481, "Printed Pages", "Used to make written Books", new Object[] { new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]), new Behaviour_PrintedPages(), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+ ItemList.Paper_Magic_Empty.set(addItem(tLastID = 482, "Magic Paper", "", new Object[] { SubTag.INVISIBLE, new ItemData(Materials.Paper, 3628800L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTIO, 1L) }));
+ ItemList.Paper_Magic_Page.set(addItem(tLastID = 483, "Enchanted Page", "", new Object[] { SubTag.INVISIBLE, new ItemData(Materials.Paper, 3628800L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTIO, 2L) }));
+ ItemList.Paper_Magic_Pages.set(addItem(tLastID = 484, "Enchanted Pages", "", new Object[] { SubTag.INVISIBLE, new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTIO, 4L) }));
+ ItemList.Paper_Punch_Card_Empty.set(addItem(tLastID = 485, "Punch Card", "", new Object[] { SubTag.INVISIBLE, new ItemData(Materials.Paper, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L) }));
+ ItemList.Paper_Punch_Card_Encoded.set(addItem(tLastID = 486, "Punched Card", "", new Object[] { SubTag.INVISIBLE, new ItemData(Materials.Paper, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+ ItemList.Book_Written_01.set(addItem(tLastID = 487, "Book", "", new Object[] { new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]), "bookWritten", OreDictNames.craftingBook, new Behaviour_WrittenBook(), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+ ItemList.Book_Written_02.set(addItem(tLastID = 488, "Book", "", new Object[] { new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]), "bookWritten", OreDictNames.craftingBook, new Behaviour_WrittenBook(), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+ ItemList.Book_Written_03.set(addItem(tLastID = 489, "Book", "", new Object[] { new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]), "bookWritten", OreDictNames.craftingBook, new Behaviour_WrittenBook(), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+
+ ItemList.Schematic.set(addItem(tLastID = 490, "Schematic", "EMPTY", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 1L) }));
+ ItemList.Schematic_Crafting.set(addItem(tLastID = 491, "Schematic (Crafting)", "Crafts the Programmed Recipe", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }));
+ ItemList.Schematic_1by1.set(addItem(tLastID = 495, "Schematic (1x1)", "Crafts 1 Items as 1x1 (use in Packager)", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }));
+ ItemList.Schematic_2by2.set(addItem(tLastID = 496, "Schematic (2x2)", "Crafts 4 Items as 2x2 (use in Packager)", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }));
+ ItemList.Schematic_3by3.set(addItem(tLastID = 497, "Schematic (3x3)", "Crafts 9 Items as 3x3 (use in Packager)", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }));
+ ItemList.Schematic_Dust.set(addItem(tLastID = 498, "Schematic (Dusts)", "Combines Dusts (use in Packager)", new Object[] { new ItemData(Materials.StainlessSteel, 7257600L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Schematic_1by1.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "d ", " P ", " ", Character.valueOf('P'), ItemList.Schematic });
+ GT_ModHandler.addCraftingRecipe(ItemList.Schematic_2by2.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d ", " P ", " ", Character.valueOf('P'), ItemList.Schematic });
+ GT_ModHandler.addCraftingRecipe(ItemList.Schematic_3by3.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " d", " P ", " ", Character.valueOf('P'), ItemList.Schematic });
+ GT_ModHandler.addCraftingRecipe(ItemList.Schematic_Dust.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " ", " P ", " d", Character.valueOf('P'), ItemList.Schematic });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Schematic.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Schematic_Crafting });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Schematic.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Schematic_1by1 });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Schematic.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Schematic_2by2 });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Schematic.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Schematic_3by3 });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Schematic.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Schematic_Dust });
+
+ ItemList.Battery_Hull_LV.set(addItem(tLastID = 500, "Small Battery Hull", "An empty LV Battery Hull", new Object[] { new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 2L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Battery_Hull_MV.set(addItem(tLastID = 501, "Medium Battery Hull", "An empty MV Battery Hull", new Object[] { new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 6L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+ ItemList.Battery_Hull_HV.set(addItem(tLastID = 502, "Large Battery Hull", "An empty HV Battery Hull", new Object[] { new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 18L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Hull_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "C", "P", "P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.BatteryAlloy), Character.valueOf('C'), OreDictNames.craftingWireTin });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Hull_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "C C", "PPP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.BatteryAlloy), Character.valueOf('C'), OreDictNames.craftingWireCopper });
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 2L), ItemList.Battery_Hull_LV.get(1L, new Object[0]), 800, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 18L), ItemList.Battery_Hull_HV.get(1L, new Object[0]), 3200, 4);
+
+ ItemList.Battery_RE_ULV_Tantalum.set(addItem(tLastID = 499, "Tantalum Capacitor", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L) }));
+ setElectricStats(32000 + tLastID, 1000L, GT_Values.V[0], 0L, -3L, false);
+
+ ItemList.Battery_SU_LV_SulfuricAcid.set(addItem(tLastID = 510, "Small Acid Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ setElectricStats(32000 + tLastID, 12000L, GT_Values.V[1], 1L, -2L, true);
+ ItemList.Battery_SU_LV_Mercury.set(addItem(tLastID = 511, "Small Mercury Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ setElectricStats(32000 + tLastID, 32000L, GT_Values.V[1], 1L, -2L, true);
+
+ ItemList.Battery_RE_LV_Cadmium.set(addItem(tLastID = 517, "Small Cadmium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), "calclavia:ADVANCED_BATTERY" }));
+ setElectricStats(32000 + tLastID, 75000L, GT_Values.V[1], 1L, -3L, true);
+ ItemList.Battery_RE_LV_Lithium.set(addItem(tLastID = 518, "Small Lithium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), "calclavia:ADVANCED_BATTERY" }));
+ setElectricStats(32000 + tLastID, 100000L, GT_Values.V[1], 1L, -3L, true);
+ ItemList.Battery_RE_LV_Sodium.set(addItem(tLastID = 519, "Small Sodium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), "calclavia:ADVANCED_BATTERY" }));
+ setElectricStats(32000 + tLastID, 50000L, GT_Values.V[1], 1L, -3L, true);
+
+ ItemList.Battery_SU_MV_SulfuricAcid.set(addItem(tLastID = 520, "Medium Acid Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L) }));
+ setElectricStats(32000 + tLastID, 48000L, GT_Values.V[2], 2L, -2L, true);
+ ItemList.Battery_SU_MV_Mercury.set(addItem(tLastID = 521, "Medium Mercury Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L) }));
+ setElectricStats(32000 + tLastID, 128000L, GT_Values.V[2], 2L, -2L, true);
+
+ ItemList.Battery_RE_MV_Cadmium.set(addItem(tLastID = 527, "Medium Cadmium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ setElectricStats(32000 + tLastID, 300000L, GT_Values.V[2], 2L, -3L, true);
+ ItemList.Battery_RE_MV_Lithium.set(addItem(tLastID = 528, "Medium Lithium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ setElectricStats(32000 + tLastID, 400000L, GT_Values.V[2], 2L, -3L, true);
+ ItemList.Battery_RE_MV_Sodium.set(addItem(tLastID = 529, "Medium Sodium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ setElectricStats(32000 + tLastID, 200000L, GT_Values.V[2], 2L, -3L, true);
+
+ ItemList.Battery_SU_HV_SulfuricAcid.set(addItem(tLastID = 530, "Large Acid Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L) }));
+ setElectricStats(32000 + tLastID, 192000L, GT_Values.V[3], 3L, -2L, true);
+ ItemList.Battery_SU_HV_Mercury.set(addItem(tLastID = 531, "Large Mercury Battery", "Single Use", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L) }));
+ setElectricStats(32000 + tLastID, 512000L, GT_Values.V[3], 3L, -2L, true);
+
+ ItemList.Battery_RE_HV_Cadmium.set(addItem(tLastID = 537, "Large Cadmium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L) }));
+ setElectricStats(32000 + tLastID, 1200000L, GT_Values.V[3], 3L, -3L, true);
+ ItemList.Battery_RE_HV_Lithium.set(addItem(tLastID = 538, "Large Lithium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L) }));
+ setElectricStats(32000 + tLastID, 1600000L, GT_Values.V[3], 3L, -3L, true);
+ ItemList.Battery_RE_HV_Sodium.set(addItem(tLastID = 539, "Large Sodium Battery", "Reusable", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L) }));
+ setElectricStats(32000 + tLastID, 800000L, GT_Values.V[3], 3L, -3L, true);
+
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_LV_SulfuricAcid.get(1L, new Object[0]), ItemList.Battery_Hull_LV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_LV_Mercury.get(1L, new Object[0]), ItemList.Battery_Hull_LV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_MV_SulfuricAcid.get(1L, new Object[0]), ItemList.Battery_Hull_MV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_MV_Mercury.get(1L, new Object[0]), ItemList.Battery_Hull_MV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_HV_SulfuricAcid.get(1L, new Object[0]), ItemList.Battery_Hull_HV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_SU_HV_Mercury.get(1L, new Object[0]), ItemList.Battery_Hull_HV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]), ItemList.Battery_Hull_LV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]), ItemList.Battery_Hull_LV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]), ItemList.Battery_Hull_LV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_MV_Cadmium.get(1L, new Object[0]), ItemList.Battery_Hull_MV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_MV_Lithium.get(1L, new Object[0]), ItemList.Battery_Hull_MV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_MV_Sodium.get(1L, new Object[0]), ItemList.Battery_Hull_MV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]), ItemList.Battery_Hull_HV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]), ItemList.Battery_Hull_HV.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]), ItemList.Battery_Hull_HV.get(1L, new Object[0]));
+
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 2L), ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]), null, 100, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 2L), ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]), null, 100, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2L), ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]), null, 100, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 8L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), ItemList.Battery_RE_MV_Cadmium.get(1L, new Object[0]), null, 400, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 8L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), ItemList.Battery_RE_MV_Lithium.get(1L, new Object[0]), null, 400, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 8L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), ItemList.Battery_RE_MV_Sodium.get(1L, new Object[0]), null, 400, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 32L), ItemList.Battery_Hull_HV.get(1L, new Object[0]), ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]), null, 1600, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 32L), ItemList.Battery_Hull_HV.get(1L, new Object[0]), ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]), null, 1600, 2);
+ GT_Values.RA.addCannerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 32L), ItemList.Battery_Hull_HV.get(1L, new Object[0]), ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]), null, 1600, 2);
+
+ ItemList.Energy_LapotronicOrb.set(addItem(tLastID = 597, "Lapotronic Energy Orb", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), OrePrefixes.battery.get(Materials.Ultimate) }));
+ setElectricStats(32000 + tLastID, 100000000L, GT_Values.V[5], 5L, -3L, true);
+
+ ItemList.ZPM.set(addItem(tLastID = 598, "Zero Point Module", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L) }));
+ setElectricStats(32000 + tLastID, 2000000000000L, GT_Values.V[7], 7L, -2L, true);
+
+ ItemList.Energy_LapotronicOrb2.set(addItem(tLastID = 599, "Lapotronic Energy Orb Cluster", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), OrePrefixes.battery.get(Materials.Ultimate) }));
+ setElectricStats(32000 + tLastID, 1000000000L, GT_Values.V[6], 6L, -3L, true);
+
+ ItemList.ZPM2.set(addItem(tLastID = 605, "Ultimate Battery", "Fill this to win minecraft", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L) }));
+ setElectricStats(32000 + tLastID, Long.MAX_VALUE, GT_Values.V[8], 8L, -3L, true);
+
+ ItemList.Electric_Motor_LV.set(addItem(tLastID = 600, "Electric Motor (LV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L) }));
+ ItemList.Electric_Motor_MV.set(addItem(tLastID = 601, "Electric Motor (MV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L) }));
+ ItemList.Electric_Motor_HV.set(addItem(tLastID = 602, "Electric Motor (HV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L) }));
+ ItemList.Electric_Motor_EV.set(addItem(tLastID = 603, "Electric Motor (EV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L) }));
+ ItemList.Electric_Motor_IV.set(addItem(tLastID = 604, "Electric Motor (IV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L) }));
+ ItemList.Electric_Motor_LuV.set(ItemList.Electric_Motor_IV.get(1L, new Object[0]));
+ ItemList.Electric_Motor_ZPM.set(ItemList.Electric_Motor_LuV.get(1L, new Object[0]));
+ ItemList.Electric_Motor_UV.set(ItemList.Electric_Motor_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.IronMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.AnyIron), Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.AnyCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.SteelMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.Steel), Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.AnyCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.SteelMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.Aluminium), Character.valueOf('W'), OrePrefixes.wireGt02.get(Materials.AnyCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.SteelMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.StainlessSteel), Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.AnyCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.NeodymiumMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.Titanium), Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.AnnealedCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Motor_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CWR", "WIW", "RWC", Character.valueOf('I'), OrePrefixes.stick.get(Materials.NeodymiumMagnetic), Character.valueOf('R'), OrePrefixes.stick.get(Materials.TungstenSteel), Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.AnnealedCopper), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ ItemList.Electric_Pump_LV.set(addItem(tLastID = 610, "Electric Pump (LV)", "640 L/sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L) }));
+ ItemList.Electric_Pump_MV.set(addItem(tLastID = 611, "Electric Pump (MV)", "2560 L/sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+ ItemList.Electric_Pump_HV.set(addItem(tLastID = 612, "Electric Pump (HV)", "10240 L/sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L) }));
+ ItemList.Electric_Pump_EV.set(addItem(tLastID = 613, "Electric Pump (EV)", "40960 L/sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 8L) }));
+ ItemList.Electric_Pump_IV.set(addItem(tLastID = 614, "Electric Pump (IV)", "163840 L/sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 16L) }));
+ ItemList.Electric_Pump_LuV.set(ItemList.Electric_Pump_IV.get(1L, new Object[0]));
+ ItemList.Electric_Pump_ZPM.set(ItemList.Electric_Pump_LuV.get(1L, new Object[0]));
+ ItemList.Electric_Pump_UV.set(ItemList.Electric_Pump_ZPM.get(1L, new Object[0]));
+
+ GregTech_API.registerCover(ItemList.Electric_Pump_LV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PUMP) }), new GT_Cover_Pump(32));
+ GregTech_API.registerCover(ItemList.Electric_Pump_MV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PUMP) }), new GT_Cover_Pump(128));
+ GregTech_API.registerCover(ItemList.Electric_Pump_HV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[3][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PUMP) }), new GT_Cover_Pump(512));
+ GregTech_API.registerCover(ItemList.Electric_Pump_EV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[4][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PUMP) }), new GT_Cover_Pump(2048));
+ GregTech_API.registerCover(ItemList.Electric_Pump_IV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[5][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PUMP) }), new GT_Cover_Pump(8192));
+
+ ItemList.Rotor_LV.set(addItem(tLastID = 620, "Tin Rotor", "", new Object[] { OrePrefixes.rotor.get(Materials.Tin), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L) }));
+ ItemList.Rotor_MV.set(addItem(tLastID = 621, "Bronze Rotor", "", new Object[] { OrePrefixes.rotor.get(Materials.Bronze), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L) }));
+ ItemList.Rotor_HV.set(addItem(tLastID = 622, "Steel Rotor", "", new Object[] { OrePrefixes.rotor.get(Materials.Steel), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L) }));
+ ItemList.Rotor_EV.set(addItem(tLastID = 623, "Stainless Steel Rotor", "", new Object[] { OrePrefixes.rotor.get(Materials.StainlessSteel), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L) }));
+ ItemList.Rotor_IV.set(addItem(tLastID = 624, "Tungstensteel Rotor", "", new Object[] { OrePrefixes.rotor.get(Materials.TungstenSteel), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L) }));
+ ItemList.Rotor_LuV.set(ItemList.Rotor_IV.get(1L, new Object[0]));
+ ItemList.Rotor_ZPM.set(ItemList.Rotor_LuV.get(1L, new Object[0]));
+ ItemList.Rotor_UV.set(ItemList.Rotor_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Pump_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SXO", "dPw", "OMW", Character.valueOf('M'), ItemList.Electric_Motor_LV, Character.valueOf('O'), OrePrefixes.ring.get(Materials.Rubber), Character.valueOf('X'), OrePrefixes.rotor.get(Materials.Tin), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Tin), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Pump_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SXO", "dPw", "OMW", Character.valueOf('M'), ItemList.Electric_Motor_MV, Character.valueOf('O'), OrePrefixes.ring.get(Materials.Rubber), Character.valueOf('X'), OrePrefixes.rotor.get(Materials.Bronze), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Bronze), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Pump_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SXO", "dPw", "OMW", Character.valueOf('M'), ItemList.Electric_Motor_HV, Character.valueOf('O'), OrePrefixes.ring.get(Materials.Rubber), Character.valueOf('X'), OrePrefixes.rotor.get(Materials.Steel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Steel), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.StainlessSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Pump_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SXO", "dPw", "OMW", Character.valueOf('M'), ItemList.Electric_Motor_EV, Character.valueOf('O'), OrePrefixes.ring.get(Materials.Rubber), Character.valueOf('X'), OrePrefixes.rotor.get(Materials.StainlessSteel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Pump_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SXO", "dPw", "OMW", Character.valueOf('M'), ItemList.Electric_Motor_IV, Character.valueOf('O'), OrePrefixes.ring.get(Materials.Rubber), Character.valueOf('X'), OrePrefixes.rotor.get(Materials.TungstenSteel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.TungstenSteel) });
+
+ ItemList.Conveyor_Module_LV.set(addItem(tLastID = 630, "Conveyor Module (LV)", "1 Stack every 20 secs (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L) }));
+ ItemList.Conveyor_Module_MV.set(addItem(tLastID = 631, "Conveyor Module (MV)", "1 Stack every 5 secs (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L) }));
+ ItemList.Conveyor_Module_HV.set(addItem(tLastID = 632, "Conveyor Module (HV)", "1 Stack every 1 sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L) }));
+ ItemList.Conveyor_Module_EV.set(addItem(tLastID = 633, "Conveyor Module (EV)", "1 Stack every 1/5 sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L) }));
+ ItemList.Conveyor_Module_IV.set(addItem(tLastID = 634, "Conveyor Module (IV)", "1 Stack every 1/20 sec (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L) }));
+ ItemList.Conveyor_Module_LuV.set(ItemList.Conveyor_Module_IV.get(1L, new Object[0]));
+ ItemList.Conveyor_Module_ZPM.set(ItemList.Conveyor_Module_LuV.get(1L, new Object[0]));
+ ItemList.Conveyor_Module_UV.set(ItemList.Conveyor_Module_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Conveyor_Module_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "MCM", "RRR", Character.valueOf('M'), ItemList.Electric_Motor_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Conveyor_Module_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "MCM", "RRR", Character.valueOf('M'), ItemList.Electric_Motor_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Conveyor_Module_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "MCM", "RRR", Character.valueOf('M'), ItemList.Electric_Motor_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Conveyor_Module_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "MCM", "RRR", Character.valueOf('M'), ItemList.Electric_Motor_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Conveyor_Module_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "RRR", "MCM", "RRR", Character.valueOf('M'), ItemList.Electric_Motor_IV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+
+ GregTech_API.registerCover(ItemList.Conveyor_Module_LV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONVEYOR) }), new GT_Cover_Conveyor(400));
+ GregTech_API.registerCover(ItemList.Conveyor_Module_MV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONVEYOR) }), new GT_Cover_Conveyor(100));
+ GregTech_API.registerCover(ItemList.Conveyor_Module_HV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[3][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONVEYOR) }), new GT_Cover_Conveyor(20));
+ GregTech_API.registerCover(ItemList.Conveyor_Module_EV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[4][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONVEYOR) }), new GT_Cover_Conveyor(4));
+ GregTech_API.registerCover(ItemList.Conveyor_Module_IV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[5][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONVEYOR) }), new GT_Cover_Conveyor(1));
+
+ ItemList.Electric_Piston_LV.set(addItem(tLastID = 640, "Electric Piston (LV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L) }));
+ ItemList.Electric_Piston_MV.set(addItem(tLastID = 641, "Electric Piston (MV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L) }));
+ ItemList.Electric_Piston_HV.set(addItem(tLastID = 642, "Electric Piston (HV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L) }));
+ ItemList.Electric_Piston_EV.set(addItem(tLastID = 643, "Electric Piston (EV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L) }));
+ ItemList.Electric_Piston_IV.set(addItem(tLastID = 644, "Electric Piston (IV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L) }));
+ ItemList.Electric_Piston_LuV.set(ItemList.Electric_Piston_IV.get(1L, new Object[0]));
+ ItemList.Electric_Piston_ZPM.set(ItemList.Electric_Piston_LuV.get(1L, new Object[0]));
+ ItemList.Electric_Piston_UV.set(ItemList.Electric_Piston_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Piston_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "CSS", "CMG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Steel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Steel), Character.valueOf('M'), ItemList.Electric_Motor_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Piston_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "CSS", "CMG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Aluminium), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Aluminium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Aluminium), Character.valueOf('M'), ItemList.Electric_Motor_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Piston_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "CSS", "CMG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('M'), ItemList.Electric_Motor_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Piston_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "CSS", "CMG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('M'), ItemList.Electric_Motor_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Electric_Piston_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "CSS", "CMG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('M'), ItemList.Electric_Motor_IV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ ItemList.Robot_Arm_LV.set(addItem(tLastID = 650, "Robot Arm (LV)", "Inserts into specific Slots (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L) }));
+ ItemList.Robot_Arm_MV.set(addItem(tLastID = 651, "Robot Arm (MV)", "Inserts into specific Slots (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L) }));
+ ItemList.Robot_Arm_HV.set(addItem(tLastID = 652, "Robot Arm (HV)", "Inserts into specific Slots (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 4L) }));
+ ItemList.Robot_Arm_EV.set(addItem(tLastID = 653, "Robot Arm (EV)", "Inserts into specific Slots (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 8L) }));
+ ItemList.Robot_Arm_IV.set(addItem(tLastID = 654, "Robot Arm (IV)", "Inserts into specific Slots (as Cover)", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 16L) }));
+ ItemList.Robot_Arm_LuV.set(ItemList.Robot_Arm_IV.get(1L, new Object[0]));
+ ItemList.Robot_Arm_ZPM.set(ItemList.Robot_Arm_LuV.get(1L, new Object[0]));
+ ItemList.Robot_Arm_UV.set(ItemList.Robot_Arm_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Robot_Arm_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CCC", "MSM", "PES", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Steel), Character.valueOf('M'), ItemList.Electric_Motor_LV, Character.valueOf('P'), ItemList.Electric_Piston_LV, Character.valueOf('E'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Robot_Arm_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CCC", "MSM", "PES", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Aluminium), Character.valueOf('M'), ItemList.Electric_Motor_MV, Character.valueOf('P'), ItemList.Electric_Piston_MV, Character.valueOf('E'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Robot_Arm_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CCC", "MSM", "PES", Character.valueOf('S'), OrePrefixes.stick.get(Materials.StainlessSteel), Character.valueOf('M'), ItemList.Electric_Motor_HV, Character.valueOf('P'), ItemList.Electric_Piston_HV, Character.valueOf('E'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Robot_Arm_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CCC", "MSM", "PES", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Titanium), Character.valueOf('M'), ItemList.Electric_Motor_EV, Character.valueOf('P'), ItemList.Electric_Piston_EV, Character.valueOf('E'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Robot_Arm_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "CCC", "MSM", "PES", Character.valueOf('S'), OrePrefixes.stick.get(Materials.TungstenSteel), Character.valueOf('M'), ItemList.Electric_Motor_IV, Character.valueOf('P'), ItemList.Electric_Piston_IV, Character.valueOf('E'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ GregTech_API.registerCover(ItemList.Robot_Arm_LV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ARM) }), new GT_Cover_Arm(400));
+ GregTech_API.registerCover(ItemList.Robot_Arm_MV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ARM) }), new GT_Cover_Arm(100));
+ GregTech_API.registerCover(ItemList.Robot_Arm_HV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[3][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ARM) }), new GT_Cover_Arm(20));
+ GregTech_API.registerCover(ItemList.Robot_Arm_EV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[4][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ARM) }), new GT_Cover_Arm(4));
+ GregTech_API.registerCover(ItemList.Robot_Arm_IV.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[5][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ARM) }), new GT_Cover_Arm(1));
+
+ ItemList.Field_Generator_LV.set(addItem(tLastID = 670, "Field Generator (LV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L) }));
+ ItemList.Field_Generator_MV.set(addItem(tLastID = 671, "Field Generator (MV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 2L) }));
+ ItemList.Field_Generator_HV.set(addItem(tLastID = 672, "Field Generator (HV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L) }));
+ ItemList.Field_Generator_EV.set(addItem(tLastID = 673, "Field Generator (EV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 8L) }));
+ ItemList.Field_Generator_IV.set(addItem(tLastID = 674, "Field Generator (IV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 16L) }));
+ ItemList.Field_Generator_LuV.set(ItemList.Field_Generator_IV.get(1L, new Object[0]));
+ ItemList.Field_Generator_ZPM.set(ItemList.Field_Generator_LuV.get(1L, new Object[0]));
+ ItemList.Field_Generator_UV.set(ItemList.Field_Generator_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Field_Generator_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "WCW", "CGC", "WCW", Character.valueOf('G'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Field_Generator_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "WCW", "CGC", "WCW", Character.valueOf('G'), OrePrefixes.gem.get(Materials.EnderEye), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.wireGt02.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Field_Generator_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "WCW", "CGC", "WCW", Character.valueOf('G'), OrePrefixes.gem.get(Materials.NetherStar), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Field_Generator_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "WCW", "CGC", "WCW", Character.valueOf('G'), OrePrefixes.gem.get(Materials.NetherStar), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Field_Generator_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "WCW", "CGC", "WCW", Character.valueOf('G'), OrePrefixes.gem.get(Materials.NetherStar), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Osmium) });
+
+ ItemList.Emitter_LV.set(addItem(tLastID = 680, "Emitter (LV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 1L) }));
+ ItemList.Emitter_MV.set(addItem(tLastID = 681, "Emitter (MV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2L) }));
+ ItemList.Emitter_HV.set(addItem(tLastID = 682, "Emitter (HV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 4L) }));
+ ItemList.Emitter_EV.set(addItem(tLastID = 683, "Emitter (EV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 8L) }));
+ ItemList.Emitter_IV.set(addItem(tLastID = 684, "Emitter (IV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 16L) }));
+ ItemList.Emitter_LuV.set(ItemList.Emitter_IV.get(1L, new Object[0]));
+ ItemList.Emitter_ZPM.set(ItemList.Emitter_LuV.get(1L, new Object[0]));
+ ItemList.Emitter_UV.set(ItemList.Emitter_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Emitter_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSC", "WQS", "CWS", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.Quartzite), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Brass), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Emitter_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSC", "WQS", "CWS", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.NetherQuartz), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Electrum), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Emitter_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSC", "WQS", "CWS", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.Emerald), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Chrome), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Emitter_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSC", "WQS", "CWS", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Platinum), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Emitter_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "SSC", "WQS", "CWS", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.EnderEye), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Osmium), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ ItemList.Sensor_LV.set(addItem(tLastID = 690, "Sensor (LV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L) }));
+ ItemList.Sensor_MV.set(addItem(tLastID = 691, "Sensor (MV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L) }));
+ ItemList.Sensor_HV.set(addItem(tLastID = 692, "Sensor (HV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L) }));
+ ItemList.Sensor_EV.set(addItem(tLastID = 693, "Sensor (EV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 8L) }));
+ ItemList.Sensor_IV.set(addItem(tLastID = 694, "Sensor (IV)", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 16L) }));
+ ItemList.Sensor_LuV.set(ItemList.Sensor_IV.get(1L, new Object[0]));
+ ItemList.Sensor_ZPM.set(ItemList.Sensor_LuV.get(1L, new Object[0]));
+ ItemList.Sensor_UV.set(ItemList.Sensor_ZPM.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Sensor_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P Q", "PS ", "CPP", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.Quartzite), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Brass), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Sensor_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P Q", "PS ", "CPP", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.NetherQuartz), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Electrum), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Aluminium), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Sensor_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P Q", "PS ", "CPP", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.Emerald), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Chrome), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Sensor_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P Q", "PS ", "CPP", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Platinum), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Sensor_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "P Q", "PS ", "CPP", Character.valueOf('Q'), OrePrefixes.gem.get(Materials.EnderEye), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Osmium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master) });
+
+ ItemList.Circuit_Primitive.set(addItem(tLastID = 700, "NAND Chip", "A very simple Circuit", new Object[] { OrePrefixes.circuit.get(Materials.Primitive) }));
+ ItemList.Circuit_Basic.set(addItem(tLastID = 701, "Basic Electronic Circuit", "A basic Circuit", new Object[] { OrePrefixes.circuit.get(Materials.Basic) }));
+ ItemList.Circuit_Good.set(addItem(tLastID = 702, "Good Electronic Circuit", "A good Circuit", new Object[] { OrePrefixes.circuit.get(Materials.Good) }));
+ ItemList.Circuit_Advanced.set(addItem(tLastID = 703, "Advanced Circuit", "An advanced Circuit", new Object[] { OrePrefixes.circuit.get(Materials.Advanced) }));
+ ItemList.Circuit_Data.set(addItem(tLastID = 704, "Data Storage Circuit", "A Data Storage Chip", new Object[] { OrePrefixes.circuit.get(Materials.Data) }));
+ ItemList.Circuit_Elite.set(addItem(tLastID = 705, "Data Control Circuit", "A Processor", new Object[] { OrePrefixes.circuit.get(Materials.Elite) }));
+ ItemList.Circuit_Master.set(addItem(tLastID = 706, "Energy Flow Circuit", "A High Voltage Processor", new Object[] { OrePrefixes.circuit.get(Materials.Master) }));
+ ItemList.Tool_DataOrb.set(addItem(tLastID = 707, "Data Orb", "A High Capacity Data Storage", new Object[] { OrePrefixes.circuit.get(Materials.Ultimate), SubTag.NO_UNIFICATION, new Behaviour_DataOrb() }));ItemList.Circuit_Ultimate.set(ItemList.Tool_DataOrb.get(1L, new Object[0]));
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Tool_DataOrb.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Tool_DataOrb.get(1L, new Object[0]) });
+ ItemList.Tool_DataStick.set(addItem(tLastID = 708, "Data Stick", "A Low Capacity Data Storage", new Object[] { OrePrefixes.circuit.get(Materials.Data), SubTag.NO_UNIFICATION, new Behaviour_DataStick() }));
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Tool_DataStick.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Tool_DataStick.get(1L, new Object[0]) });
+
+
+ ItemList.Circuit_Board_Basic.set(addItem(tLastID = 710, "Basic Circuit Board", "A basic Board", new Object[0]));
+ ItemList.Circuit_Board_Advanced.set(addItem(tLastID = 711, "Advanced Circuit Board", "An advanced Board", new Object[0]));
+ ItemList.Circuit_Board_Elite.set(addItem(tLastID = 712, "Processor Board", "A Processor Board", new Object[0]));
+ ItemList.Circuit_Parts_Crystal_Chip_Elite.set(addItem(tLastID = 713, "Engraved Crystal Chip", "Needed for Circuits", new Object[0]));
+ ItemList.Circuit_Parts_Crystal_Chip_Master.set(addItem(tLastID = 714, "Engraved Lapotron Chip", "Needed for Circuits", new Object[0]));
+ ItemList.Circuit_Parts_Advanced.set(addItem(tLastID = 715, "Advanced Circuit Parts", "Advanced Circuit Parts", new Object[0]));
+ ItemList.Circuit_Parts_Wiring_Basic.set(addItem(tLastID = 716, "Etched Medium Voltage Wiring", "Part of Circuit Boards", new Object[0]));
+ ItemList.Circuit_Parts_Wiring_Advanced.set(addItem(tLastID = 717, "Etched High Voltage Wiring", "Part of Circuit Boards", new Object[0]));
+ ItemList.Circuit_Parts_Wiring_Elite.set(addItem(tLastID = 718, "Etched Extreme Voltage Wiring", "Part of Circuit Boards", new Object[0]));
+
+
+ ItemList.Component_Sawblade_Diamond.set(addItem(tLastID = 721, "Diamond Sawblade", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L), OreDictNames.craftingDiamondBlade }));
+ ItemList.Component_Grinder_Diamond.set(addItem(tLastID = 722, "Diamond Grinding Head", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 6L), OreDictNames.craftingGrinder }));
+ ItemList.Component_Grinder_Tungsten.set(addItem(tLastID = 723, "Tungsten Grinding Head", "", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 6L), OreDictNames.craftingGrinder }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Component_Sawblade_Diamond.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { " D ", "DGD", " D ", Character.valueOf('D'), OrePrefixes.dustSmall.get(Materials.Diamond), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.CobaltBrass) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Component_Grinder_Diamond.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "DSD", "SIS", "DSD", Character.valueOf('I'), OreDictNames.craftingIndustrialDiamond, Character.valueOf('D'), OrePrefixes.dust.get(Materials.Diamond), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Component_Grinder_Tungsten.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "TST", "SIS", "TST", Character.valueOf('I'), OreDictNames.craftingIndustrialDiamond, Character.valueOf('T'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel) });
+
+ ItemList.Upgrade_Muffler.set(addItem(tLastID = 727, "Muffler Upgrade", "Makes Machines silent", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L) }));
+ ItemList.Upgrade_Lock.set(addItem(tLastID = 728, "Lock Upgrade", "Protects your Machines", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L) }));
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), ItemList.Upgrade_Muffler.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L), ItemList.Upgrade_Lock.get(1L, new Object[0]), 6400, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L), ItemList.Upgrade_Lock.get(1L, new Object[0]), 6400, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L), ItemList.Upgrade_Lock.get(1L, new Object[0]), 6400, 16);
+
+ ItemList.Component_Filter.set(addItem(tLastID = 729, "Item Filter", "", new Object[] { new ItemData(Materials.Zinc, OrePrefixes.foil.mMaterialAmount * 16L, new MaterialStack[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), OreDictNames.craftingFilter }));
+
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("carbonMesh", 4L), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16L), ItemList.Component_Filter.get(1L, new Object[0]), 1600, 32);
+
+ ItemList.Cover_Controller.set(addItem(tLastID = 730, "Machine Controller", "Turns Machines ON/OFF", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ ItemList.Cover_ActivityDetector.set(addItem(tLastID = 731, "Activity Detector", "Gives out Activity as Redstone", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ ItemList.Cover_FluidDetector.set(addItem(tLastID = 732, "Fluid Detector", "Gives out Fluid Amount as Redstone", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L) }));
+ ItemList.Cover_ItemDetector.set(addItem(tLastID = 733, "Item Detector", "Gives out Item Amount as Redstone", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L) }));
+ ItemList.Cover_EnergyDetector.set(addItem(tLastID = 734, "Energy Detector", "Gives out Energy Amount as Redstone", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L) }));
+ ItemList.Cover_PlayerDetector.set(addItem(tLastID = 735, "Player Detector", "Gives out close Players as Redstone", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ GT_Values.RA.addAssemblerRecipe( ItemList.Sensor_EV.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L),ItemList.Cover_PlayerDetector.get(1L, new Object[0]), 3200, 128);
+
+ GregTech_API.registerCover(ItemList.Cover_Controller.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CONTROLLER) }), new GT_Cover_ControlsWork());
+ GregTech_API.registerCover(ItemList.Cover_ActivityDetector.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR) }), new GT_Cover_DoesWork());
+ GregTech_API.registerCover(ItemList.Cover_FluidDetector.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FLUIDDETECTOR) }), new GT_Cover_LiquidMeter());
+ GregTech_API.registerCover(ItemList.Cover_ItemDetector.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ITEMDETECTOR) }), new GT_Cover_ItemMeter());
+ GregTech_API.registerCover(ItemList.Cover_EnergyDetector.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ENERGYDETECTOR) }), new GT_Cover_EUMeter());
+ GregTech_API.registerCover(ItemList.Cover_PlayerDetector.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR) }), new GT_Cover_PlayerDetector());
+
+ ItemList.Cover_Screen.set(addItem(tLastID = 740, "Computer Monitor", "Displays Data", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L) }));
+ ItemList.Cover_Crafting.set(addItem(tLastID = 744, "Crafting Table Cover", "Better than a wooden Workbench", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L) }));
+ ItemList.Cover_Drain.set(addItem(tLastID = 745, "Drain", "Absorbs Fluids and collects Rain", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+
+ ItemList.Cover_Shutter.set(addItem(tLastID = 749, "Shutter Module", "Blocks Inventory/Tank Side. Usage together with Machine Controller.", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L) }));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Cover_Screen.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "AGA", "RPB", "ALA", Character.valueOf('A'), OrePrefixes.plate.get(Materials.Aluminium), Character.valueOf('L'), OrePrefixes.dust.get(Materials.Glowstone), Character.valueOf('R'), Dyes.dyeRed, Character.valueOf('G'), Dyes.dyeLime, Character.valueOf('B'), Dyes.dyeBlue, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Glass) });
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L), new ItemStack(Items.iron_door, 1), ItemList.Cover_Shutter.get(2L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2L), new ItemStack(Items.iron_door, 1), ItemList.Cover_Shutter.get(2L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 2L), new ItemStack(Items.iron_door, 1), ItemList.Cover_Shutter.get(2L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L), new ItemStack(Blocks.iron_bars, 2), ItemList.Cover_Drain.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2L), new ItemStack(Blocks.iron_bars, 2), ItemList.Cover_Drain.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 2L), new ItemStack(Blocks.iron_bars, 2), ItemList.Cover_Drain.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), new ItemStack(Blocks.crafting_table, 1), ItemList.Cover_Crafting.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), new ItemStack(Blocks.crafting_table, 1), ItemList.Cover_Crafting.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), new ItemStack(Blocks.crafting_table, 1), ItemList.Cover_Crafting.get(1L, new Object[0]), 800, 16);
+
+ GregTech_API.registerCover(ItemList.Cover_Screen.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SCREEN) }), new GT_Cover_Screen());
+ GregTech_API.registerCover(ItemList.Cover_Crafting.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_CRAFTING) }), new GT_Cover_Crafting());
+ GregTech_API.registerCover(ItemList.Cover_Drain.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[0][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_DRAIN) }), new GT_Cover_Drain());
+ GregTech_API.registerCover(ItemList.Cover_Shutter.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SHUTTER) }), new GT_Cover_Shutter());
+
+ ItemList.Cover_SolarPanel.set(addItem(tLastID = 750, "Solar Panel", "May the Sun be with you", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 1L) }));
+ ItemList.Cover_SolarPanel_8V.set(addItem(tLastID = 751, "Solar Panel (8V)", "8 Volt Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 2L) }));
+ ItemList.Cover_SolarPanel_LV.set(addItem(tLastID = 752, "Solar Panel (LV)", "Low Voltage Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 4L) }));
+ ItemList.Cover_SolarPanel_MV.set(addItem(tLastID = 753, "Solar Panel (MV)", "Medium Voltage Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 8L) }));
+ ItemList.Cover_SolarPanel_HV.set(addItem(tLastID = 754, "Solar Panel (HV)", "High Voltage Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 16L) }));
+ ItemList.Cover_SolarPanel_EV.set(addItem(tLastID = 755, "Solar Panel (EV)", "Extreme Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 32L) }));
+ ItemList.Cover_SolarPanel_IV.set(addItem(tLastID = 756, "Solar Panel (IV)", "Insane Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L) }));
+ ItemList.Cover_SolarPanel_LuV.set(addItem(tLastID = 757, "Solar Panel (LuV)", "Ludicrous Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L) }));
+ ItemList.Cover_SolarPanel_ZPM.set(addItem(tLastID = 758, "Solar Panel (ZPM)", "ZPM Voltage Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L) }));
+ ItemList.Cover_SolarPanel_UV.set(addItem(tLastID = 759, "Solar Panel (UV)", "Ultimate Solar Panel", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L) }));
+
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL), new GT_Cover_SolarPanel(1));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_8V.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_8V), new GT_Cover_SolarPanel(8));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_LV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_LV), new GT_Cover_SolarPanel(32));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_MV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_MV), new GT_Cover_SolarPanel(128));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_HV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_HV), new GT_Cover_SolarPanel(512));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_EV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_EV), new GT_Cover_SolarPanel(2048));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_IV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_IV), new GT_Cover_SolarPanel(8192));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_LuV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_LuV), new GT_Cover_SolarPanel(32768));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_ZPM.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_ZPM), new GT_Cover_SolarPanel(131072));
+ GregTech_API.registerCover(ItemList.Cover_SolarPanel_UV.get(1L, new Object[0]), new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_UV), new GT_Cover_SolarPanel(524288));
+
+ ItemList.Tool_Sonictron.set(addItem(tLastID = 760, "Sonictron", "Bring your Music with you", new Object[] { Behaviour_Sonictron.INSTANCE, new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L) }));
+ ItemList.Tool_Cheat.set(addItem(tLastID = 761, "Debug Scanner", "Also an Infinite Energy Source", new Object[] { Behaviour_Scanner.INSTANCE, new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 64L) }));
+ setElectricStats(32000 + tLastID, -2000000000L, 1000000000L, -1L, -3L, false);
+ ItemList.Tool_Scanner.set(addItem(tLastID = 762, "Portable Scanner", "Tricorder", new Object[] { Behaviour_Scanner.INSTANCE, new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 6L) }));
+ setElectricStats(32000 + tLastID, 400000L, GT_Values.V[2], 2L, -1L, false);
+ GT_ModHandler.addCraftingRecipe(ItemList.Tool_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "EPR", "CSC", "PBP", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Aluminium), Character.valueOf('E'), ItemList.Emitter_MV, Character.valueOf('R'), ItemList.Sensor_MV, Character.valueOf('S'), ItemList.Cover_Screen, Character.valueOf('B'), ItemList.Battery_RE_MV_Lithium });
+ ItemList.NC_SensorKit.set(addItem(tLastID = 763, "GregTech Sensor Kit", "", new Object[] { new Behaviour_SensorKit() }));
+ ItemList.Duct_Tape.set(addItem(tLastID = 764, "BrainTech Aerospace Advanced Reinforced Duct Tape FAL-84", "If you can't fix it with this, use more of it!", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), OreDictNames.craftingDuctTape }));
+ ItemList.McGuffium_239.set(addItem(tLastID = 765, "Mc Guffium 239", "42% better than Phlebotnium", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.SPIRITUS, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 8L) }));
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 4L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2L), ItemList.Schematic.get(1L, new Object[0]), 3200, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Sensor_LV.get(1L, new Object[0]), ItemList.Emitter_LV.get(1L, new Object[0]), ItemList.NC_SensorKit.get(1L, new Object[0]), 1600, 2);
+
+ ItemList.Cover_RedstoneTransmitterExternal.set(addItem(tLastID = 741, "Redstone Transmitter (Out)", "Transfers Redstonesignals wireless", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ ItemList.Cover_RedstoneTransmitterInternal.set(addItem(tLastID = 742, "Redstone Transmitter (In)", "Transfers Redstonesignals wireless", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ ItemList.Cover_RedstoneReceiverExternal.set(addItem(tLastID = 746, "Redstone Receiver (Out)", "Transfers Redstonesignals wireless", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ ItemList.Cover_RedstoneReceiverInternal.set(addItem(tLastID = 747, "Redstone Receiver (In)", "Transfers Redstonesignals wireless", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+
+ GregTech_API.registerCover(ItemList.Cover_RedstoneTransmitterExternal.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR) }), new GT_Cover_RedstoneTransmitterExternal());
+ GregTech_API.registerCover(ItemList.Cover_RedstoneTransmitterInternal.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR) }), new GT_Cover_RedstoneTransmitterInternal());
+ GregTech_API.registerCover(ItemList.Cover_RedstoneReceiverExternal.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FLUIDDETECTOR) }), new GT_Cover_RedstoneReceiverExternal());
+ GregTech_API.registerCover(ItemList.Cover_RedstoneReceiverInternal.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FLUIDDETECTOR) }), new GT_Cover_RedstoneReceiverInternal());
+
+ GT_Values.RA.addAssemblerRecipe(ItemList.Emitter_EV.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),ItemList.Cover_RedstoneTransmitterExternal.get(1L, new Object[0]) , 3200, 128);
+ GT_Values.RA.addAssemblerRecipe( ItemList.Sensor_EV.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),ItemList.Cover_RedstoneReceiverExternal.get(1L, new Object[0]), 3200, 128);
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Cover_RedstoneTransmitterInternal.get(1L, new Object[0]), new Object[]{ItemList.Cover_RedstoneTransmitterExternal.get(1L, new Object[0])});
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Cover_RedstoneReceiverInternal.get(1L, new Object[0]), new Object[]{ItemList.Cover_RedstoneReceiverExternal.get(1L, new Object[0])});
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Cover_RedstoneTransmitterExternal.get(1L, new Object[0]), new Object[]{ItemList.Cover_RedstoneTransmitterInternal.get(1L, new Object[0])});
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Cover_RedstoneReceiverExternal.get(1L, new Object[0]), new Object[]{ItemList.Cover_RedstoneReceiverInternal.get(1L, new Object[0])});
+
+ ItemList.Cover_NeedsMaintainance.set(addItem(tLastID = 748, "Needs Maintainance Cover", "Attach to Multiblock Controller. Emits Redstone Signal if needs Maintainance", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L) }));
+ GregTech_API.registerCover(ItemList.Cover_NeedsMaintainance.get(1L, new Object[0]), new GT_MultiTexture(new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR) }), new GT_Cover_NeedMaintainance());
+ GT_Values.RA.addAssemblerRecipe(ItemList.Emitter_MV.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),ItemList.Cover_NeedsMaintainance.get(1L, new Object[0]) , 600, 24);
+ }
+
+ public boolean onEntityItemUpdate(EntityItem aItemEntity)
+ {
+ int aDamage = aItemEntity.getEntityItem().getItemDamage();
+ if ((aDamage < 32000) && (aDamage >= 0) && (!aItemEntity.worldObj.isRemote))
+ {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)];
+ if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL))
+ {
+ int tX = MathHelper.floor_double(aItemEntity.posX);int tY = MathHelper.floor_double(aItemEntity.posY);int tZ = MathHelper.floor_double(aItemEntity.posZ);
+ OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)];
+ if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure))
+ {
+ Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ);
+ byte tMetaData = (byte)aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ);
+ if ((tBlock == Blocks.cauldron) && (tMetaData > 0))
+ {
+ aItemEntity.setEntityItemStack(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, aItemEntity.getEntityItem().stackSize));
+ aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3);
+ return true;
+ }
+ }
+ if (aPrefix == OrePrefixes.crushed)
+ {
+ Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ);
+ byte tMetaData = (byte)aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ);
+ if ((tBlock == Blocks.cauldron) && (tMetaData > 0))
+ {
+ aItemEntity.setEntityItemStack(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, aItemEntity.getEntityItem().stackSize));
+ aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ protected void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ super.addAdditionalToolTips(aList, aStack);
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage < 32000) && (aDamage >= 0))
+ {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)];
+ if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL))
+ {
+ OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)];
+ if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure)) {
+ aList.add(this.mToolTipPurify);
+ }
+ }
+ }
+ }
+
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems)
+ {
+ return (aDoShowAllItems) || (((aPrefix != OrePrefixes.gem) || (!aMaterial.name().startsWith("Infused"))) && (aPrefix != OrePrefixes.nugget) && (aPrefix != OrePrefixes.dustTiny) && (aPrefix != OrePrefixes.dustSmall) && (aPrefix != OrePrefixes.dustImpure) && (aPrefix != OrePrefixes.dustPure) && (aPrefix != OrePrefixes.crushed) && (aPrefix != OrePrefixes.crushedPurified) && (aPrefix != OrePrefixes.crushedCentrifuged) && (aPrefix != OrePrefixes.ingotHot) && (aPrefix != OrePrefixes.cellPlasma));
+ }
+
+ public ItemStack getContainerItem(ItemStack aStack)
+ {
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage >= 32430) && (aDamage <= 32461)) {
+ return ItemList.Spray_Empty.get(1L, new Object[0]);
+ }
+ if ((aDamage == 32479) || (aDamage == 32476)) {
+ return new ItemStack(this, 1, aDamage - 2);
+ }
+ if (aDamage == 32401) {
+ return new ItemStack(this, 1, aDamage - 1);
+ }
+ return super.getContainerItem(aStack);
+ }
+
+ public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial)
+ {
+ return (super.doesMaterialAllowGeneration(aPrefix, aMaterial)) && ((aPrefix != OrePrefixes.ingotHot) || (aMaterial.mBlastFurnaceTemp > 1750));
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java
new file mode 100644
index 0000000000..9ae7115f07
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java
@@ -0,0 +1,447 @@
+package gregtech.common.items;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.items.GT_MetaGenerated_Item_X32;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_FoodStat;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import gregtech.common.items.behaviors.Behaviour_Arrow;
+import java.lang.reflect.Field;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnumEnchantmentType;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.Potion;
+import net.minecraft.world.World;
+
+public class GT_MetaGenerated_Item_02
+ extends GT_MetaGenerated_Item_X32
+{
+ public static GT_MetaGenerated_Item_02 INSTANCE;
+
+ public GT_MetaGenerated_Item_02()
+ {
+ super("metaitem.02", new OrePrefixes[] { OrePrefixes.toolHeadSword, OrePrefixes.toolHeadPickaxe, OrePrefixes.toolHeadShovel, OrePrefixes.toolHeadAxe, OrePrefixes.toolHeadHoe, OrePrefixes.toolHeadHammer, OrePrefixes.toolHeadFile, OrePrefixes.toolHeadSaw, OrePrefixes.toolHeadDrill, OrePrefixes.toolHeadChainsaw, OrePrefixes.toolHeadWrench, OrePrefixes.toolHeadUniversalSpade, OrePrefixes.toolHeadSense, OrePrefixes.toolHeadPlow, OrePrefixes.toolHeadArrow, OrePrefixes.toolHeadBuzzSaw, OrePrefixes.turbineBlade , null, null, OrePrefixes.wireFine, OrePrefixes.gearGtSmall, OrePrefixes.rotor, OrePrefixes.stickLong, OrePrefixes.springSmall, OrePrefixes.spring, OrePrefixes.arrowGtWood, OrePrefixes.arrowGtPlastic, OrePrefixes.gemChipped, OrePrefixes.gemFlawed, OrePrefixes.gemFlawless, OrePrefixes.gemExquisite, OrePrefixes.gearGt});
+ INSTANCE = this;
+
+ int tLastID = 0;
+
+ ItemList.ThermosCan_Dark_Coffee.set(addItem(tLastID = 0, "Dark Coffee", "Coffee, dark, without anything else", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSpeed.id, 400, 1, 70, Potion.digSpeed.id, 400, 1, 70 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L) }));
+ ItemList.ThermosCan_Dark_Cafe_au_lait.set(addItem(tLastID = 1, "Dark Coffee au lait", "Keeping you awake the whole night", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSpeed.id, 400, 2, 90, Potion.digSpeed.id, 400, 2, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 3L) }));
+ ItemList.ThermosCan_Coffee.set(addItem(tLastID = 2, "Coffee", "Just the regular morning Coffee", new Object[] { new GT_FoodStat(3, 0.4F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSpeed.id, 400, 0, 50, Potion.digSpeed.id, 400, 0, 50 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L) }));
+ ItemList.ThermosCan_Cafe_au_lait.set(addItem(tLastID = 3, "Cafe au lait", "Sweet Coffee", new Object[] { new GT_FoodStat(3, 0.4F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSpeed.id, 400, 1, 70, Potion.digSpeed.id, 400, 1, 70 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L) }));
+ ItemList.ThermosCan_Lait_au_cafe.set(addItem(tLastID = 4, "Lait au cafe", "You want Coffee to your Sugar?", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(3, 0.4F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSpeed.id, 400, 2, 90, Potion.digSpeed.id, 400, 2, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 3L) }));
+ ItemList.ThermosCan_Dark_Chocolate_Milk.set(addItem(tLastID = 5, "Dark Chocolate Milk", "A bit bitter, better add a bit Sugar", new Object[] { new GT_FoodStat(3, 0.4F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.regeneration.id, 50, 1, 60 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.ThermosCan_Chocolate_Milk.set(addItem(tLastID = 6, "Chocolate Milk", "Sweet Goodness", new Object[] { new GT_FoodStat(3, 0.4F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.regeneration.id, 50, 1, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 2L) }));
+ ItemList.ThermosCan_Tea.set(addItem(tLastID = 7, "Tea", "Keep calm and carry on", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSlowdown.id, 300, 0, 50 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+ ItemList.ThermosCan_Sweet_Tea.set(addItem(tLastID = 8, "Sweet Tea", "How about a Tea Party? In Boston?", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+ ItemList.ThermosCan_Ice_Tea.set(addItem(tLastID = 9, "Ice Tea", "Better than this purple Junk Drink from failed Potions", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.ThermosCan_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSlowdown.id, 300, 0, 50 }), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L) }));
+
+ ItemList.Bottle_Purple_Drink.set(addItem(tLastID = 100, "Purple Drink", "How about Lemonade. Or some Ice Tea? I got Purple Drink!", new Object[] { new GT_FoodStat(8, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.moveSlowdown.id, 400, 1, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 1L) }));
+ ItemList.Bottle_Grape_Juice.set(addItem(tLastID = 101, "Grape Juice", "This has a cleaning effect on your internals.", new Object[] { new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.hunger.id, 400, 1, 60 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Wine.set(addItem(tLastID = 102, "Wine", "Ordinary", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 1, 60, Potion.heal.id, 0, 0, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Vinegar.set(addItem(tLastID = 103, "Vinegar", "Exquisite", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 1, 90, Potion.heal.id, 0, 1, 90, Potion.poison.id, 200, 2, 10, Potion.harm.id, 0, 2, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Potato_Juice.set(addItem(tLastID = 104, "Potato Juice", "Ever seen Potato Juice in stores? No? That has a reason.", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(3, 0.3F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L) }));
+ ItemList.Bottle_Vodka.set(addItem(tLastID = 105, "Vodka", "Not to confuse with Water", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 500, 0, 60, Potion.damageBoost.id, 500, 1, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L) }));
+ ItemList.Bottle_Leninade.set(addItem(tLastID = 106, "Leninade", "Let the Communism flow through you!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 500, 1, 90, Potion.damageBoost.id, 500, 2, 90, Potion.poison.id, 200, 2, 10, Potion.harm.id, 0, 2, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L) }));
+ ItemList.Bottle_Mineral_Water.set(addItem(tLastID = 107, "Mineral Water", "The best Stuff you can drink to stay healthy", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.regeneration.id, 100, 1, 10 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Salty_Water.set(addItem(tLastID = 108, "Salty Water", "Like Sea Water but less dirty", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(1, 0.0F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.hunger.id, 400, 2, 95 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TEMPESTAS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Bottle_Reed_Water.set(addItem(tLastID = 109, "Reed Water", "I guess this tastes better when fermented", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+ ItemList.Bottle_Rum.set(addItem(tLastID = 110, "Rum", "A buddle o' rum", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 300, 0, 60, Potion.damageBoost.id, 300, 1, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Bottle_Pirate_Brew.set(addItem(tLastID = 111, "Pirate Brew", "Set the Sails, we are going to Torrentuga!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 300, 1, 90, Potion.damageBoost.id, 300, 2, 90, Potion.poison.id, 200, 2, 10, Potion.harm.id, 0, 2, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 2L) }));
+ ItemList.Bottle_Hops_Juice.set(addItem(tLastID = 112, "Hops Juice", "Every Beer has a start", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L) }));
+ ItemList.Bottle_Dark_Beer.set(addItem(tLastID = 113, "Dark Beer", "Dark Beer, for the real Men", new Object[] { new GT_FoodStat(4, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 300, 1, 60, Potion.damageBoost.id, 300, 1, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L) }));
+ ItemList.Bottle_Dragon_Blood.set(addItem(tLastID = 114, "Dragon Blood", "FUS RO DAH!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 300, 2, 90, Potion.damageBoost.id, 300, 2, 90, Potion.poison.id, 200, 2, 10, Potion.harm.id, 0, 2, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L) }));
+ ItemList.Bottle_Wheaty_Juice.set(addItem(tLastID = 115, "Wheaty Juice", "Is this liquefied Bread or what?", new Object[] { new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L) }));
+ ItemList.Bottle_Scotch.set(addItem(tLastID = 116, "Scotch", "Technically this is just a Whisky", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 0, 60, Potion.resistance.id, 400, 1, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L) }));
+ ItemList.Bottle_Glen_McKenner.set(addItem(tLastID = 117, "Glen McKenner", "Don't hand to easily surprised people, they will shatter it.", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 1, 90, Potion.resistance.id, 400, 2, 90, Potion.poison.id, 200, 2, 10, Potion.harm.id, 0, 2, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 2L) }));
+ ItemList.Bottle_Wheaty_Hops_Juice.set(addItem(tLastID = 118, "Wheaty Hops Juice", "Also known as 'Duff-Lite'", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 2L) }));
+ ItemList.Bottle_Beer.set(addItem(tLastID = 119, "Beer", "Good old Beer", new Object[] { new GT_FoodStat(6, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 0, 60, Potion.digSpeed.id, 400, 2, 60, Potion.poison.id, 100, 0, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L) }));
+ ItemList.Bottle_Chilly_Sauce.set(addItem(tLastID = 120, "Chilly Sauce", "Spicy", new Object[] { new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 1000, 0, 10, Potion.fireResistance.id, 1000, 0, 60 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Bottle_Hot_Sauce.set(addItem(tLastID = 121, "Hot Sauce", "Very Spicy, I guess?", new Object[] { new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 2000, 0, 30, Potion.fireResistance.id, 2000, 0, 70 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L) }));
+ ItemList.Bottle_Diabolo_Sauce.set(addItem(tLastID = 122, "Diabolo Sauce", "As if the Devil made this Sauce", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 3000, 1, 50, Potion.fireResistance.id, 3000, 0, 80 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }));
+ ItemList.Bottle_Diablo_Sauce.set(addItem(tLastID = 123, "Diablo Sauce", "Diablo always comes back!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 4000, 1, 70, Potion.fireResistance.id, 4000, 0, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 4L) }));
+ ItemList.Bottle_Snitches_Glitch_Sauce.set(addItem(tLastID = 124, "Old Man Snitches glitched Diablo Sauce", "[Missing No]", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.1F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 9999, 2, 999, Potion.fireResistance.id, 9999, 9, 999 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 5L) }));
+ ItemList.Bottle_Apple_Juice.set(addItem(tLastID = 125, "Apple Juice", "Made of the Apples from our best Oak Farms", new Object[] { new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.hunger.id, 400, 0, 20 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+ ItemList.Bottle_Cider.set(addItem(tLastID = 126, "Cider", "If you have nothing better to do with your Apples", new Object[] { new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 0, 60, Potion.resistance.id, 400, 1, 60, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L) }));
+ ItemList.Bottle_Golden_Apple_Juice.set(addItem(tLastID = 127, "Golden Apple Juice", "A golden Apple in liquid form", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.hunger.id, 400, 0, 20, Potion.field_76444_x.id, 2400, 0, 100, Potion.regeneration.id, 100, 1, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Golden_Cider.set(addItem(tLastID = 128, "Golden Cider", "More Resistance, less Regeneration", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.confusion.id, 400, 0, 60, Potion.field_76444_x.id, 2400, 1, 95, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L) }));
+ ItemList.Bottle_Iduns_Apple_Juice.set(addItem(tLastID = 129, "Idun's Apple Juice", "So you got the Idea of using Notch Apples for a drink?", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.regeneration.id, 600, 4, 100, Potion.field_76444_x.id, 2400, 0, 100, Potion.resistance.id, 6000, 0, 100, Potion.fireResistance.id, 6000, 0, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 9L) }));
+ ItemList.Bottle_Notches_Brew.set(addItem(tLastID = 130, "Notches Brew", "This is just overpowered", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(4, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.regeneration.id, 700, 4, 95, Potion.field_76444_x.id, 3000, 1, 95, Potion.resistance.id, 7000, 1, 95, Potion.fireResistance.id, 7000, 0, 95, Potion.harm.id, 0, 2, 20 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 9L) }));
+ ItemList.Bottle_Lemon_Juice.set(addItem(tLastID = 131, "Lemon Juice", "Maybe adding Sugar will make it less sour", new Object[] { new GT_FoodStat(2, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.digSpeed.id, 1200, 0, 60 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L) }));
+ ItemList.Bottle_Limoncello.set(addItem(tLastID = 132, "Limoncello", "An alcoholic Drink which tastes like Lemons", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.4F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.digSpeed.id, 1200, 0, 90, Potion.poison.id, 200, 1, 5 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L) }));
+ ItemList.Bottle_Lemonade.set(addItem(tLastID = 133, "Lemonade", "Cold and refreshing Lemonade", new Object[] { new GT_FoodStat(4, 0.3F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.digSpeed.id, 900, 1, 90 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L) }));
+ ItemList.Bottle_Alcopops.set(addItem(tLastID = 134, "Alcopops", "Don't let your Children drink this junk!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(2, 0.2F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.digSpeed.id, 900, 1, 90, Potion.poison.id, 300, 2, 20 }), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 1L) }));
+ ItemList.Bottle_Cave_Johnsons_Grenade_Juice.set(addItem(tLastID = 135, "Cave Johnson's Grenade Juice", "When life gives you Lemons, make Life take them Lemons back!", new Object[] { SubTag.INVISIBLE, new GT_FoodStat(0, 0.0F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]).setExplosive(), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 1L) }));
+ ItemList.Bottle_Milk.set(addItem(tLastID = 136, "Milk", "Got Milk?", new Object[] { OrePrefixes.bottle.get(Materials.Milk), new GT_FoodStat(0, 0.0F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[0]).setMilk(), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+ ItemList.Bottle_Holy_Water.set(addItem(tLastID = 137, "Holy Water", "May the holy Planks be with you", new Object[] { OrePrefixes.bottle.get(Materials.HolyWater), new GT_FoodStat(0, 0.0F, EnumAction.drink, ItemList.Bottle_Empty.get(1L, new Object[0]), GregTech_API.sDrinksAlwaysDrinkable, false, false, new int[] { Potion.poison.id, 100, 1, 100 }).setMilk(), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1L) }));
+
+ ItemList.Food_Potato_On_Stick.set(addItem(tLastID = 200, "Potato on a Stick", "Totally looks like a Crab Claw", new Object[] { new GT_FoodStat(1, 0.3F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));
+ ItemList.Food_Potato_On_Stick_Roasted.set(addItem(tLastID = 201, "Roasted Potato on a Stick", "Still looks like a Crab Claw", new Object[] { new GT_FoodStat(6, 0.6F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Raw_Fries.set(addItem(tLastID = 202, "Potato Strips", "It's Potato in Stripe Form", new Object[] { new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Fries.set(addItem(tLastID = 203, "Fries", "Not to confuse with Fry the Delivery Boy", new Object[] { new GT_FoodStat(7, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Packaged_Fries.set(addItem(tLastID = 204, "Fries", "Ketchup not included", new Object[] { new GT_FoodStat(7, 0.5F, EnumAction.eat, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L), false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Raw_PotatoChips.set(addItem(tLastID = 205, "Potato Chips (Raw)", "Just like a Potato", new Object[] { new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_PotatoChips.set(addItem(tLastID = 206, "Potato Chips", "Crunchy", new Object[] { new GT_FoodStat(7, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_ChiliChips.set(addItem(tLastID = 207, "Chili Chips", "Spicy", new Object[] { new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Packaged_PotatoChips.set(addItem(tLastID = 208, "Bag of Potato Chips", "Full of delicious Air", new Object[] { new GT_FoodStat(7, 0.5F, EnumAction.eat, GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Packaged_ChiliChips.set(addItem(tLastID = 209, "Bag of Chili Chips", "Stop making noises Baj!", new Object[] { new GT_FoodStat(7, 0.6F, EnumAction.eat, GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Chum.set(addItem(tLastID = 210, "Chum", "Chum is Fum!", new Object[] { new GT_FoodStat(5, 0.2F, EnumAction.eat, null, true, false, true, new int[] { Potion.hunger.id, 1000, 4, 100, Potion.confusion.id, 300, 1, 80 }), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Chum_On_Stick.set(addItem(tLastID = 211, "Chum on a Stick", "Don't forget to try our Chum-balaya", new Object[] { new GT_FoodStat(5, 0.2F, EnumAction.eat, new ItemStack(Items.stick, 1), true, false, true, new int[] { Potion.hunger.id, 1000, 4, 100, Potion.confusion.id, 300, 1, 80 }), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Dough_Sugar.set(addItem(tLastID = 212, "Sugary Dough", "Don't eat the Dough before it is baken", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Dough_Chocolate.set(addItem(tLastID = 213, "Chocolate Dough", "I said don't eat the Dough!", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Raw_Cookie.set(addItem(tLastID = 214, "Cookie shaped Dough", "For baking Cookies", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+
+ ItemList.Food_Sliced_Buns.set(addItem(tLastID =220, "Buns", "Pre Sliced", new Object[] { new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Burger_Veggie.set(addItem(tLastID = 221, "Veggieburger", "No matter how you call this, this is NOT a Burger!", new Object[] { new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Burger_Cheese.set(addItem(tLastID = 222, "Cheeseburger", "Cheesy!", new Object[] { new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new ItemData(Materials.Cheese, 907200L, new MaterialStack[0]) }));
+ ItemList.Food_Burger_Meat.set(addItem(tLastID = 223, "Hamburger", "The Mc Burger Queen Burger", new Object[] { new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Burger_Chum.set(addItem(tLastID = 224, "Chumburger", "Fum is Chum!", new Object[] { new GT_FoodStat(5, 0.2F, EnumAction.eat, null, true, false, true, new int[] { Potion.hunger.id, 1000, 4, 100, Potion.confusion.id, 300, 1, 80 }), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+
+ ItemList.Food_Sliced_Breads.set(addItem(tLastID = 230, "Breads", "Pre Sliced", new Object[] { new GT_FoodStat(5, 0.6F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Sandwich_Veggie.set(addItem(tLastID = 231, "Veggie Sandwich", "Meatless", new Object[] { new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 32L);
+ ItemList.Food_Sandwich_Cheese.set(addItem(tLastID = 232, "Cheese Sandwich", "Say Cheese!", new Object[] { new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 32L);
+ ItemList.Food_Sandwich_Bacon.set(addItem(tLastID = 233, "Bacon Sandwich", "The best Sandwich ever!", new Object[] { new GT_FoodStat(10, 0.8F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 32L);
+ ItemList.Food_Sandwich_Steak.set(addItem(tLastID = 234, "Steak Sandwich", "Not a 'Steam Sandwich'", new Object[] { new GT_FoodStat(10, 0.8F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 32L);
+
+ ItemList.Food_Sliced_Baguettes.set(addItem(tLastID = 240, "Baguettes", "Pre Sliced", new Object[] { new GT_FoodStat(8, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Large_Sandwich_Veggie.set(addItem(tLastID = 241, "Large Veggie Sandwich", "Just not worth it", new Object[] { new GT_FoodStat(15, 0.8F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Large_Sandwich_Cheese.set(addItem(tLastID = 242, "Large Cheese Sandwich", "I need another cheesy tooltip for this", new Object[] { new GT_FoodStat(15, 0.8F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Large_Sandwich_Bacon.set(addItem(tLastID = 243, "Large Bacon Sandwich", "For Men! (and manly Women)", new Object[] { new GT_FoodStat(20, 1.0F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+ ItemList.Food_Large_Sandwich_Steak.set(addItem(tLastID = 244, "Large Steak Sandwich", "Yes, I once accidentially called it 'Steam Sandwich'", new Object[] { new GT_FoodStat(20, 1.0F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));setFluidContainerStats(32000 + tLastID, 0L, 16L);
+
+ ItemList.Food_Raw_Pizza_Veggie.set(addItem(tLastID = 250, "Raw Veggie Pizza", "Into the Oven with it!", new Object[] { new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Raw_Pizza_Cheese.set(addItem(tLastID = 251, "Raw Cheese Pizza", "Into the Oven with it!", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Raw_Pizza_Meat.set(addItem(tLastID = 252, "Raw Mince Meat Pizza", "Into the Oven with it!", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+
+ ItemList.Food_Baked_Pizza_Veggie.set(addItem(tLastID = 260, "Veggie Pizza", "The next they want is Gluten Free Pizzas...", new Object[] { new GT_FoodStat(3, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Baked_Pizza_Cheese.set(addItem(tLastID = 261, "Cheese Pizza", "Pizza Magarita", new Object[] { new GT_FoodStat(4, 0.4F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Baked_Pizza_Meat.set(addItem(tLastID = 262, "Mince Meat Pizza", "Emo Pizza, it cuts itself!", new Object[] { new GT_FoodStat(5, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+
+
+ ItemList.Dye_Indigo.set(addItem(tLastID = 410, "Indigo Dye", "Blue Dye", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L), Dyes.dyeBlue }));
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ ItemList.DYE_ONLY_ITEMS[i].set(addItem(tLastID = 414 + i, Dyes.get(i).mName + " Dye", "", new Object[] { Dyes.get(i).name(), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L) }));
+ }
+ ItemList.Plank_Oak.set(addItem(tLastID = 470, "Oak Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Spruce.set(addItem(tLastID = 471, "Spruce Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Birch.set(addItem(tLastID = 472, "Birch Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Jungle.set(addItem(tLastID = 473, "Jungle Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Acacia.set(addItem(tLastID = 474, "Acacia Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_DarkOak.set(addItem(tLastID = 475, "Dark Oak Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Larch.set(addItem(tLastID = 476, "Larch Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Teak.set(addItem(tLastID = 477, "Teak Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Acacia_Green.set(addItem(tLastID = 478, "Green Acacia Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Lime.set(addItem(tLastID = 479, "Lime Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Chestnut.set(addItem(tLastID = 480, "Chestnut Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Wenge.set(addItem(tLastID = 481, "Wenge Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Baobab.set(addItem(tLastID = 482, "Baobab Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Sequoia.set(addItem(tLastID = 483, "Sequoia Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Kapok.set(addItem(tLastID = 484, "Kapok Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Ebony.set(addItem(tLastID = 485, "Ebony Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Mahagony.set(addItem(tLastID = 486, "Mahagony Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Balsa.set(addItem(tLastID = 487, "Balsa Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Willow.set(addItem(tLastID = 488, "Willow Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Walnut.set(addItem(tLastID = 489, "Walnut Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Greenheart.set(addItem(tLastID = 490, "Greenheart Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Cherry.set(addItem(tLastID = 491, "Cherry Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Mahoe.set(addItem(tLastID = 492, "Mahoe Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Poplar.set(addItem(tLastID = 493, "Poplar Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Palm.set(addItem(tLastID = 494, "Palm Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Papaya.set(addItem(tLastID = 495, "Papaya Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Pine.set(addItem(tLastID = 496, "Pine Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Plum.set(addItem(tLastID = 497, "Plum Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Maple.set(addItem(tLastID = 498, "Maple Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+ ItemList.Plank_Citrus.set(addItem(tLastID = 499, "Citrus Plank", "Usable as Cover", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 200);
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Oak.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Spruce.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Birch.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 2) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Jungle.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 3) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Acacia.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 4) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_DarkOak.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), new ItemStack(Blocks.wooden_slab, 1, 5) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Larch.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 0) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Teak.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Acacia_Green.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 2) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Lime.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 3) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Chestnut.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 4) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Wenge.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 5) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Baobab.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 6) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Sequoia.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 7) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Kapok.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 0) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Ebony.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Mahagony.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 2) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Balsa.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 3) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Willow.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 4) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Walnut.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 5) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Greenheart.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 6) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Cherry.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 7) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Mahoe.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 0) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Poplar.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Palm.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 2) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Papaya.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 3) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Pine.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 4) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Plum.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 5) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Maple.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 6) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Plank_Citrus.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "s ", " P", Character.valueOf('P'), GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 7) });
+
+ GregTech_API.registerCover(ItemList.Plank_Oak.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 0), null);
+ GregTech_API.registerCover(ItemList.Plank_Spruce.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 1), null);
+ GregTech_API.registerCover(ItemList.Plank_Birch.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 2), null);
+ GregTech_API.registerCover(ItemList.Plank_Jungle.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 3), null);
+ GregTech_API.registerCover(ItemList.Plank_Acacia.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 4), null);
+ GregTech_API.registerCover(ItemList.Plank_DarkOak.get(1L, new Object[0]), new GT_CopiedBlockTexture(Blocks.planks, 0, 5), null);
+ GregTech_API.registerCover(ItemList.Plank_Larch.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 0, new ItemStack(Blocks.planks, 1, 0))), 0, 0), null);
+ GregTech_API.registerCover(ItemList.Plank_Teak.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 1, new ItemStack(Blocks.planks, 1, 0))), 0, 1), null);
+ GregTech_API.registerCover(ItemList.Plank_Acacia_Green.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 2, new ItemStack(Blocks.planks, 1, 0))), 0, 2), null);
+ GregTech_API.registerCover(ItemList.Plank_Lime.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 3, new ItemStack(Blocks.planks, 1, 0))), 0, 3), null);
+ GregTech_API.registerCover(ItemList.Plank_Chestnut.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 4, new ItemStack(Blocks.planks, 1, 0))), 0, 4), null);
+ GregTech_API.registerCover(ItemList.Plank_Wenge.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 5, new ItemStack(Blocks.planks, 1, 0))), 0, 5), null);
+ GregTech_API.registerCover(ItemList.Plank_Baobab.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 6, new ItemStack(Blocks.planks, 1, 0))), 0, 6), null);
+ GregTech_API.registerCover(ItemList.Plank_Sequoia.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 7, new ItemStack(Blocks.planks, 1, 0))), 0, 7), null);
+ GregTech_API.registerCover(ItemList.Plank_Kapok.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 8, new ItemStack(Blocks.planks, 1, 0))), 0, 8), null);
+ GregTech_API.registerCover(ItemList.Plank_Ebony.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 9, new ItemStack(Blocks.planks, 1, 0))), 0, 9), null);
+ GregTech_API.registerCover(ItemList.Plank_Mahagony.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 10, new ItemStack(Blocks.planks, 1, 0))), 0, 10), null);
+ GregTech_API.registerCover(ItemList.Plank_Balsa.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 11, new ItemStack(Blocks.planks, 1, 0))), 0, 11), null);
+ GregTech_API.registerCover(ItemList.Plank_Willow.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 12, new ItemStack(Blocks.planks, 1, 0))), 0, 12), null);
+ GregTech_API.registerCover(ItemList.Plank_Walnut.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 13, new ItemStack(Blocks.planks, 1, 0))), 0, 13), null);
+ GregTech_API.registerCover(ItemList.Plank_Greenheart.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 14, new ItemStack(Blocks.planks, 1, 0))), 0, 14), null);
+ GregTech_API.registerCover(ItemList.Plank_Cherry.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks", 1L, 15, new ItemStack(Blocks.planks, 1, 0))), 0, 15), null);
+ GregTech_API.registerCover(ItemList.Plank_Mahoe.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 0, new ItemStack(Blocks.planks, 1, 0))), 0, 0), null);
+ GregTech_API.registerCover(ItemList.Plank_Poplar.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 1, new ItemStack(Blocks.planks, 1, 0))), 0, 1), null);
+ GregTech_API.registerCover(ItemList.Plank_Palm.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 2, new ItemStack(Blocks.planks, 1, 0))), 0, 2), null);
+ GregTech_API.registerCover(ItemList.Plank_Papaya.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 3, new ItemStack(Blocks.planks, 1, 0))), 0, 3), null);
+ GregTech_API.registerCover(ItemList.Plank_Pine.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 4, new ItemStack(Blocks.planks, 1, 0))), 0, 4), null);
+ GregTech_API.registerCover(ItemList.Plank_Plum.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 5, new ItemStack(Blocks.planks, 1, 0))), 0, 5), null);
+ GregTech_API.registerCover(ItemList.Plank_Maple.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 6, new ItemStack(Blocks.planks, 1, 0))), 0, 6), null);
+ GregTech_API.registerCover(ItemList.Plank_Citrus.get(1L, new Object[0]), new GT_CopiedBlockTexture(GT_Utility.getBlockFromStack(GT_ModHandler.getModItem("Forestry", "planks2", 1L, 7, new ItemStack(Blocks.planks, 1, 0))), 0, 7), null);
+
+ ItemList.Crop_Drop_Plumbilia.set(addItem(tLastID = 500, "Plumbilia Leaf", "Source of Lead", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L) }));
+ ItemList.Crop_Drop_Argentia.set(addItem(tLastID = 501, "Argentia Leaf", "Source of Silver", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Crop_Drop_Indigo.set(addItem(tLastID = 502, "Indigo Blossom", "Used for making Blue Dye", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L) }));
+ ItemList.Crop_Drop_Ferru.set(addItem(tLastID = 503, "Ferru Leaf", "Source of Iron", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L) }));
+ ItemList.Crop_Drop_Aurelia.set(addItem(tLastID = 504, "Aurelia Leaf", "Source of Gold", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ ItemList.Crop_Drop_TeaLeaf.set(addItem(tLastID = 505, "Tea Leaf", "Source of Tea", new Object[] { "cropTea", new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+
+ ItemList.Crop_Drop_OilBerry.set(addItem(tLastID = 510, "Oil Berry", "Oil in Berry form", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L) }));
+ ItemList.Crop_Drop_BobsYerUncleRanks.set(addItem(tLastID = 511, "Bobs-Yer-Uncle-Berry", "Source of Emeralds", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+
+ ItemList.Crop_Drop_MilkWart.set(addItem(tLastID = 520, "Milk Wart", "Source of Milk", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) }));
+
+ ItemList.Crop_Drop_Coppon.set(addItem(tLastID = 530, "Coppon Fiber", "ORANGE WOOOOOOOL!!!", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L) }));
+
+ ItemList.Crop_Drop_Tine.set(addItem(tLastID = 540, "Tine Twig", "Source of Tin", new Object[] { new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L) }));setBurnValue(32000 + tLastID, 100);
+
+ ItemList.Crop_Drop_Chilly.set(addItem(tLastID = 550, "Chilly Pepper", "It is red and hot", new Object[] { "cropChilipepper", new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[] { Potion.confusion.id, 200, 1, 40 }), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_Lemon.set(addItem(tLastID = 551, "Lemon", "Don't make Lemonade", new Object[] { "cropLemon", new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_Tomato.set(addItem(tLastID = 552, "Tomato", "Solid Ketchup", new Object[] { "cropTomato", new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_MTomato.set(addItem(tLastID = 553, "Max Tomato", "Full Health in one Tomato", new Object[] { "cropTomato", new GT_FoodStat(9, 1.0F, EnumAction.eat, null, false, true, false, new int[] { Potion.regeneration.id, 100, 100, 100 }), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_Grapes.set(addItem(tLastID = 554, "Grapes", "Source of Wine", new Object[] { "cropGrape", new GT_FoodStat(2, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_Onion.set(addItem(tLastID = 555, "Onion", "Taking over the whole Taste", new Object[] { "cropOnion", new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Crop_Drop_Cucumber.set(addItem(tLastID = 556, "Cucumber", "Not a Sea Cucumber!", new Object[] { "cropCucumber", new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+
+ ItemList.Food_Cheese.set(addItem(tLastID = 558, "Cheese", "Click the Cheese", new Object[] { "foodCheese", new GT_FoodStat(3, 0.6F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L) }));
+ ItemList.Food_Dough.set(addItem(tLastID = 559, "Dough", "For making Breads", new Object[] { "foodDough", new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Flat_Dough.set(addItem(tLastID = 560, "Flattened Dough", "For making Pizza", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Raw_Bread.set(addItem(tLastID = 561, "Dough", "In Bread Shape", new Object[] { new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Raw_Bun.set(addItem(tLastID = 562, "Dough", "In Bun Shape", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Raw_Baguette.set(addItem(tLastID = 563, "Dough", "In Baguette Shape", new Object[] { new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Baked_Bun.set(addItem(tLastID = 564, "Bun", "Do not teleport Bread!", new Object[] { new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Baked_Baguette.set(addItem(tLastID = 565, "Baguette", "I teleported nothing BUT Bread!!!", new Object[] { new GT_FoodStat(8, 0.5F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Sliced_Bread.set(addItem(tLastID = 566, "Sliced Bread", "Just half a Bread", new Object[] { new GT_FoodStat(2, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Sliced_Bun.set(addItem(tLastID = 567, "Sliced Bun", "Just half a Bun", new Object[] { new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Sliced_Baguette.set(addItem(tLastID = 568, "Sliced Baguette", "Just half a Baguette", new Object[] { new GT_FoodStat(4, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) }));
+ ItemList.Food_Raw_Cake.set(addItem(tLastID = 569, "Cake Bottom", "For making Cake", new Object[] { new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Baked_Cake.set(addItem(tLastID = 570, "Baked Cake Bottom", "I know I promised you an actual Cake, but well...", new Object[] { new GT_FoodStat(3, 0.3F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+ ItemList.Food_Sliced_Lemon.set(addItem(tLastID = 571, "Lemon Slice", "Ideal to put on your Drink", new Object[] { new GT_FoodStat(1, 0.075F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+ ItemList.Food_Sliced_Tomato.set(addItem(tLastID = 572, "Tomato Slice", "Solid Ketchup", new Object[] { new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+ ItemList.Food_Sliced_Onion.set(addItem(tLastID = 573, "Onion Slice", "ONIONS, UNITE!", new Object[] { new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+ ItemList.Food_Sliced_Cucumber.set(addItem(tLastID = 574, "Cucumber Slice", "QUEWWW-CUMMM-BERRR!!!", new Object[] { new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L) }));
+
+ ItemList.Food_Sliced_Cheese.set(addItem(tLastID = 576, "Cheese Slice", "ALIEN ATTACK!!!, throw the CHEEEEESE!!!", new Object[] { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false, new int[0]), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L) }));
+
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 0), new ItemStack(Items.dye, 2, 1));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 1), new ItemStack(Items.dye, 2, 12));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 2), new ItemStack(Items.dye, 2, 13));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 3), new ItemStack(Items.dye, 2, 7));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 4), new ItemStack(Items.dye, 2, 1));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 5), new ItemStack(Items.dye, 2, 14));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 6), new ItemStack(Items.dye, 2, 7));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 7), new ItemStack(Items.dye, 2, 9));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 8), new ItemStack(Items.dye, 2, 7));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.yellow_flower, 1, 0), new ItemStack(Items.dye, 2, 11));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.double_plant, 1, 0), new ItemStack(Items.dye, 3, 11));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.double_plant, 1, 1), new ItemStack(Items.dye, 3, 13));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.double_plant, 1, 4), new ItemStack(Items.dye, 3, 1));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.double_plant, 1, 5), new ItemStack(Items.dye, 3, 9));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Plumbilia.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lead, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Argentia.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Silver, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Indigo.get(1L, new Object[0]), ItemList.Dye_Indigo.get(1L, new Object[0]));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Ferru.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Iron, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Aurelia.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_BobsYerUncleRanks.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Emerald, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_MilkWart.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Milk, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Coppon.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Copper, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Crop_Drop_Tine.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tin, 1L));
+
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Coppon.get(4L, new Object[0]), new ItemStack(Blocks.wool, 1, 1));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Plumbilia.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Argentia.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Indigo.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Ferru.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Aurelia.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_OilBerry.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_BobsYerUncleRanks.get(8L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(ItemList.Crop_Drop_Tine.get(4L, new Object[0]), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(new ItemStack(Blocks.red_flower, 8, 32767), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(new ItemStack(Blocks.yellow_flower, 8, 32767), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+
+ GT_ModHandler.addPulverisationRecipe(ItemList.Food_Sliced_Cheese.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cheese, 1L));
+ GT_ModHandler.addPulverisationRecipe(ItemList.Dye_Cocoa.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L));
+ GT_ModHandler.addPulverisationRecipe(ItemList.Crop_Drop_Tine.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L));
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.reeds, 1), new ItemStack(Items.sugar, 1), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.melon_block, 1, 0), new ItemStack(Items.melon, 8, 0), new ItemStack(Items.melon_seeds, 1), 80, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.pumpkin, 1, 0), new ItemStack(Items.pumpkin_seeds, 4, 0), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.melon, 1, 0), new ItemStack(Items.melon_seeds, 1, 0), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.wheat, 1, 0), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(GT_ModHandler.getIC2Item("crop", 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.stick, 1), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.wool, 1, 32767), new ItemStack(Items.string, 2), new ItemStack(Items.string, 1), 50, false);
+ try
+ {
+ Object tCrop;
+ GT_Utility.getField(tCrop = ic2.api.crops.Crops.instance.getCropList()[13], "mDrop").set(tCrop, ItemList.Crop_Drop_Ferru.get(1L, new Object[0]));
+ GT_Utility.getField(tCrop = ic2.api.crops.Crops.instance.getCropList()[14], "mDrop").set(tCrop, ItemList.Crop_Drop_Aurelia.get(1L, new Object[0]));
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ ItemList.Display_ITS_FREE.set(addItem(tLastID = 766, "ITS FREE", "(or at least almost free)", new Object[] { SubTag.INVISIBLE, new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) }));
+ }
+
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ super.onLeftClickEntity(aStack, aPlayer, aEntity);
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage >= 25000) && (aDamage < 27000))
+ {
+ if (aDamage >= 26000) {
+ return Behaviour_Arrow.DEFAULT_PLASTIC.onLeftClickEntity(this, aStack, aPlayer, aEntity);
+ }
+ return Behaviour_Arrow.DEFAULT_WOODEN.onLeftClickEntity(this, aStack, aPlayer, aEntity);
+ }
+ return false;
+ }
+
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack)
+ {
+ int aDamage = aStack.getItemDamage();
+ return ((aDamage >= 25000) && (aDamage < 27000)) || (super.hasProjectile(aProjectileType, aStack));
+ }
+
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage >= 25000) && (aDamage < 27000))
+ {
+ if (aDamage >= 26000) {
+ return Behaviour_Arrow.DEFAULT_PLASTIC.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ);
+ }
+ return Behaviour_Arrow.DEFAULT_WOODEN.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ);
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ);
+ }
+
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage >= 25000) && (aDamage < 27000))
+ {
+ if (aDamage >= 26000) {
+ return Behaviour_Arrow.DEFAULT_PLASTIC.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ }
+ return Behaviour_Arrow.DEFAULT_WOODEN.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ }
+
+ public boolean isItemStackUsable(ItemStack aStack)
+ {
+ int aDamage = aStack.getItemDamage();
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)];
+ if ((aDamage >= 25000) && (aDamage < 27000) && (aMaterial != null) && (aMaterial.mEnchantmentTools != null))
+ {
+ Enchantment tEnchant = aMaterial.mEnchantmentTools == Enchantment.fortune ? Enchantment.looting : aMaterial.mEnchantmentTools;
+ if (tEnchant.type == EnumEnchantmentType.weapon)
+ {
+ NBTTagCompound tNBT = GT_Utility.ItemNBT.getNBT(aStack);
+ if (!tNBT.getBoolean("GT.HasBeenUpdated"))
+ {
+ tNBT.setBoolean("GT.HasBeenUpdated", true);
+ GT_Utility.ItemNBT.setNBT(aStack, tNBT);
+ GT_Utility.ItemNBT.addEnchantment(aStack, tEnchant, aMaterial.mEnchantmentToolsLevel);
+ }
+ }
+ }
+ return super.isItemStackUsable(aStack);
+ }
+
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems)
+ {
+ return (aDoShowAllItems) || (!aPrefix.name().startsWith("toolHead"));
+ }
+
+ public ItemStack onDispense(IBlockSource aSource, ItemStack aStack)
+ {
+ int aDamage = aStack.getItemDamage();
+ if ((aDamage >= 25000) && (aDamage < 27000))
+ {
+ if (aDamage >= 26000) {
+ return Behaviour_Arrow.DEFAULT_PLASTIC.onDispense(this, aSource, aStack);
+ }
+ return Behaviour_Arrow.DEFAULT_WOODEN.onDispense(this, aSource, aStack);
+ }
+ return super.onDispense(aSource, aStack);
+ }
+
+ public final ItemStack getContainerItem(ItemStack aStack)
+ {
+ int aDamage = aStack.getItemDamage();
+ if (aDamage < 32000) {
+ return null;
+ }
+ if (aDamage < 32100) {
+ return ItemList.ThermosCan_Empty.get(1L, new Object[0]);
+ }
+ if (aDamage < 32200) {
+ return ItemList.Bottle_Empty.get(1L, new Object[0]);
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java
new file mode 100644
index 0000000000..7d2e2029cc
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java
@@ -0,0 +1,22 @@
+package gregtech.common.items;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.items.GT_MetaGenerated_Item_X32;
+
+public class GT_MetaGenerated_Item_03
+ extends GT_MetaGenerated_Item_X32
+{
+ public static GT_MetaGenerated_Item_03 INSTANCE;
+
+ public GT_MetaGenerated_Item_03()
+ {
+ super("metaitem.03", new OrePrefixes[] { OrePrefixes.crateGtDust, OrePrefixes.crateGtIngot, OrePrefixes.crateGtGem, OrePrefixes.crateGtPlate });
+ INSTANCE = this;
+ }
+
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems)
+ {
+ return aDoShowAllItems;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java
new file mode 100644
index 0000000000..e9d5067905
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java
@@ -0,0 +1,196 @@
+package gregtech.common.items;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Tools;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.tools.GT_Tool_Axe;
+import gregtech.common.tools.GT_Tool_BranchCutter;
+import gregtech.common.tools.GT_Tool_ButcheryKnife;
+import gregtech.common.tools.GT_Tool_BuzzSaw;
+import gregtech.common.tools.GT_Tool_Chainsaw_HV;
+import gregtech.common.tools.GT_Tool_Chainsaw_LV;
+import gregtech.common.tools.GT_Tool_Chainsaw_MV;
+import gregtech.common.tools.GT_Tool_Crowbar;
+import gregtech.common.tools.GT_Tool_Drill_HV;
+import gregtech.common.tools.GT_Tool_Drill_LV;
+import gregtech.common.tools.GT_Tool_Drill_MV;
+import gregtech.common.tools.GT_Tool_File;
+import gregtech.common.tools.GT_Tool_HardHammer;
+import gregtech.common.tools.GT_Tool_Hoe;
+import gregtech.common.tools.GT_Tool_JackHammer;
+import gregtech.common.tools.GT_Tool_Knife;
+import gregtech.common.tools.GT_Tool_Mortar;
+import gregtech.common.tools.GT_Tool_Pickaxe;
+import gregtech.common.tools.GT_Tool_Plow;
+import gregtech.common.tools.GT_Tool_Plunger;
+import gregtech.common.tools.GT_Tool_RollingPin;
+import gregtech.common.tools.GT_Tool_Saw;
+import gregtech.common.tools.GT_Tool_Scoop;
+import gregtech.common.tools.GT_Tool_Screwdriver;
+import gregtech.common.tools.GT_Tool_Screwdriver_LV;
+import gregtech.common.tools.GT_Tool_Sense;
+import gregtech.common.tools.GT_Tool_Shovel;
+import gregtech.common.tools.GT_Tool_SoftHammer;
+import gregtech.common.tools.GT_Tool_Soldering_Iron;
+import gregtech.common.tools.GT_Tool_Sword;
+import gregtech.common.tools.GT_Tool_Turbine;
+import gregtech.common.tools.GT_Tool_Turbine_Huge;
+import gregtech.common.tools.GT_Tool_Turbine_Large;
+import gregtech.common.tools.GT_Tool_Turbine_Normal;
+import gregtech.common.tools.GT_Tool_Turbine_Small;
+import gregtech.common.tools.GT_Tool_UniversalSpade;
+import gregtech.common.tools.GT_Tool_WireCutter;
+import gregtech.common.tools.GT_Tool_Wrench;
+import gregtech.common.tools.GT_Tool_Wrench_HV;
+import gregtech.common.tools.GT_Tool_Wrench_LV;
+import gregtech.common.tools.GT_Tool_Wrench_MV;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaGenerated_Tool_01
+ extends GT_MetaGenerated_Tool
+{
+ public static GT_MetaGenerated_Tool_01 INSTANCE;
+ public static final short SWORD = 0;
+ public static final short PICKAXE = 2;
+ public static final short SHOVEL = 4;
+ public static final short AXE = 6;
+ public static final short HOE = 8;
+ public static final short SAW = 10;
+ public static final short HARDHAMMER = 12;
+ public static final short SOFTHAMMER = 14;
+ public static final short WRENCH = 16;
+ public static final short FILE = 18;
+ public static final short CROWBAR = 20;
+ public static final short SCREWDRIVER = 22;
+ public static final short MORTAR = 24;
+ public static final short WIRECUTTER = 26;
+ public static final short SCOOP = 28;
+ public static final short BRANCHCUTTER = 30;
+ public static final short UNIVERSALSPADE = 32;
+ public static final short KNIFE = 34;
+ public static final short BUTCHERYKNIFE = 36;
+ public static final short SICKLE = 38;
+ public static final short SENSE = 40;
+ public static final short PLOW = 42;
+ public static final short PLUNGER = 44;
+ public static final short ROLLING_PIN = 46;
+ public static final short DRILL_LV = 100;
+ public static final short DRILL_MV = 102;
+ public static final short DRILL_HV = 104;
+ public static final short CHAINSAW_LV = 110;
+ public static final short CHAINSAW_MV = 112;
+ public static final short CHAINSAW_HV = 114;
+ public static final short WRENCH_LV = 120;
+ public static final short WRENCH_MV = 122;
+ public static final short WRENCH_HV = 124;
+ public static final short JACKHAMMER = 130;
+ public static final short BUZZSAW = 140;
+ public static final short SCREWDRIVER_LV = 150;
+ public static final short SOLDERING_IRON_LV = 160;
+ public static final short TURBINE_SMALL = 170;
+ public static final short TURBINE = 172;
+ public static final short TURBINE_LARGE = 174;
+ public static final short TURBINE_HUGE = 176;
+ public static final short TURBINE_BLADE = 178;
+
+ public GT_MetaGenerated_Tool_01()
+ {
+ super("metatool.01");
+ INSTANCE = this;
+ addTool(0, "Sword", "", new GT_Tool_Sword(), new Object[] { ToolDictNames.craftingToolSword, ToolDictNames.craftingToolBlade, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 4L) });
+ addTool(2, "Pickaxe", "", new GT_Tool_Pickaxe(), new Object[] { ToolDictNames.craftingToolPickaxe, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L) });
+ addTool(4, "Shovel", "", new GT_Tool_Shovel(), new Object[] { ToolDictNames.craftingToolShovel, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L) });
+ addTool(6, "Axe", "", new GT_Tool_Axe(), new Object[] { ToolDictNames.craftingToolAxe, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ addTool(8, "Hoe", "", new GT_Tool_Hoe(), new Object[] { ToolDictNames.craftingToolHoe, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 4L) });
+ addTool(10, "Saw", "Can also harvest Ice", new GT_Tool_Saw(), new Object[] { ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ GregTech_API.registerTool(addTool(12, "Hammer", "Crushes Ores instead of harvesting them", new GT_Tool_HardHammer(), new Object[] { ToolDictNames.craftingToolHardHammer, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sHardHammerList);
+ GregTech_API.registerTool(addTool(14, "Soft Hammer", "", new GT_Tool_SoftHammer(), new Object[] { ToolDictNames.craftingToolSoftHammer, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 4L) }), GregTech_API.sSoftHammerList);
+ GregTech_API.registerTool(addTool(WRENCH, "Wrench", "Hold Leftclick to dismantle Machines", new GT_Tool_Wrench(), new Object[] { ToolDictNames.craftingToolWrench, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sWrenchList);
+ addTool(18, "File", "", new GT_Tool_File(), new Object[] { ToolDictNames.craftingToolFile, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) });
+ GregTech_API.registerTool(addTool(20, "Crowbar", "Dismounts Covers and Rotates Rails", new GT_Tool_Crowbar(), new Object[] { ToolDictNames.craftingToolCrowbar, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L) }), GregTech_API.sCrowbarList);
+ GregTech_API.registerTool(addTool(22, "Screwdriver", "Adjusts Covers and Machines", new GT_Tool_Screwdriver(), new Object[] { ToolDictNames.craftingToolScrewdriver, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sScrewdriverList);
+ addTool(24, "Mortar", "", new GT_Tool_Mortar(), new Object[] { ToolDictNames.craftingToolMortar, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L) });
+ addTool(26, "Wire Cutter", "", new GT_Tool_WireCutter(), new Object[] { ToolDictNames.craftingToolWireCutter, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) });
+ addTool(28, "Scoop", "", new GT_Tool_Scoop(), new Object[] { ToolDictNames.craftingToolScoop, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.BESTIA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PANNUS, 2L) });
+ addTool(30, "Branch Cutter", "", new GT_Tool_BranchCutter(), new Object[] { ToolDictNames.craftingToolBranchCutter, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L) });
+ GregTech_API.registerTool(addTool(32, "Universal Spade", "", new GT_Tool_UniversalSpade(), new Object[] { ToolDictNames.craftingToolBlade, ToolDictNames.craftingToolShovel, ToolDictNames.craftingToolCrowbar, ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L) }), GregTech_API.sCrowbarList);
+ addTool(34, "Knife", "", new GT_Tool_Knife(), new Object[] { ToolDictNames.craftingToolBlade, ToolDictNames.craftingToolKnife, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L) });
+ addTool(36, "Butchery Knife", "Has a slow Attack Rate", new GT_Tool_ButcheryKnife(), new Object[] { ToolDictNames.craftingToolBlade, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 4L) });
+
+ addTool(40, "Sense", "Because a Scythe doesn't make Sense", new GT_Tool_Sense(), new Object[] { ToolDictNames.craftingToolBlade, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 2L) });
+ addTool(42, "Plow", "Used to get rid of Snow", new GT_Tool_Plow(), new Object[] { ToolDictNames.craftingToolPlow, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 2L) });
+ addTool(44, "Plunger", "", new GT_Tool_Plunger(), new Object[] { ToolDictNames.craftingToolPlunger, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L) });
+ addTool(46, "Rolling Pin", "", new GT_Tool_RollingPin(), new Object[] { ToolDictNames.craftingToolRollingPin, new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 4L) });
+
+ addTool(100, "Drill (LV)", "", new GT_Tool_Drill_LV(), new Object[] { ToolDictNames.craftingToolMiningDrill, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L) });
+ addTool(102, "Drill (MV)", "", new GT_Tool_Drill_MV(), new Object[] { ToolDictNames.craftingToolMiningDrill, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L) });
+ addTool(104, "Drill (HV)", "", new GT_Tool_Drill_HV(), new Object[] { ToolDictNames.craftingToolMiningDrill, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L) });
+ addTool(110, "Chainsaw (LV)", "Can also harvest Ice", new GT_Tool_Chainsaw_LV(), new Object[] { ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ addTool(112, "Chainsaw (MV)", "Can also harvest Ice", new GT_Tool_Chainsaw_MV(), new Object[] { ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ addTool(114, "Chainsaw (HV)", "Can also harvest Ice", new GT_Tool_Chainsaw_HV(), new Object[] { ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ GregTech_API.registerTool(addTool(WRENCH_LV, "Wrench (LV)", "Hold Leftclick to dismantle Machines", new GT_Tool_Wrench_LV(), new Object[] { ToolDictNames.craftingToolWrench, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sWrenchList);
+ GregTech_API.registerTool(addTool(WRENCH_MV, "Wrench (MV)", "Hold Leftclick to dismantle Machines", new GT_Tool_Wrench_MV(), new Object[] { ToolDictNames.craftingToolWrench, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sWrenchList);
+ GregTech_API.registerTool(addTool(WRENCH_HV, "Wrench (HV)", "Hold Leftclick to dismantle Machines", new GT_Tool_Wrench_HV(), new Object[] { ToolDictNames.craftingToolWrench, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sWrenchList);
+ addTool(130, "JackHammer (HV)", "Breaks Rocks into pieces", new GT_Tool_JackHammer(), new Object[] { ToolDictNames.craftingToolJackHammer, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L) });
+ addTool(140, "Buzzsaw (LV)", "Not suitable for harvesting Blocks", new GT_Tool_BuzzSaw(), new Object[] { ToolDictNames.craftingToolSaw, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L) });
+ GregTech_API.registerTool(addTool(150, "Screwdriver (LV)", "Adjusts Covers and Machines", new GT_Tool_Screwdriver_LV(), new Object[] { ToolDictNames.craftingToolScrewdriver, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sScrewdriverList);
+ GregTech_API.registerTool(addTool(SOLDERING_IRON_LV, "Soldering Iron (LV)", "Fixes burned out Circuits. Needs soldering materials in inventory and 10kEU", new GT_Tool_Soldering_Iron(), new Object[] { ToolDictNames.craftingToolSolderingIron, new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L) }), GregTech_API.sSolderingToolList);
+
+ addTool(TURBINE_SMALL, "Small Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Small(), new Object[] {});
+ addTool(TURBINE, "Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Normal(), new Object[] {});
+ addTool(TURBINE_LARGE, "Large Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Large(), new Object[] {});
+ addTool(TURBINE_HUGE, "Huge Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Huge(), new Object[] {});
+
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.Flint, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), new ItemStack(Items.flint, 1), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.Bronze, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Bronze), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.Iron, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Iron), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.Steel, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Steel), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.WroughtIron, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.WroughtIron), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.RedSteel, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.RedSteel), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.BlueSteel, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.BlueSteel), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.BlackSteel, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.BlackSteel), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.DamascusSteel, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.DamascusSteel), Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(24, 1, Materials.Thaumium, Materials.Stone, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " I ", "SIS", "SSS", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Thaumium), Character.valueOf('S'), OrePrefixes.stone });
+
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(46, 1, Materials.Wood, Materials.Wood, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " S", " I ", "S f", Character.valueOf('I'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(46, 1, Materials.Plastic, Materials.Plastic, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " S", " I ", "S f", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Plastic), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Plastic) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(46, 1, Materials.Aluminium, Materials.Aluminium, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " S", " I ", "S f", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Aluminium), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(46, 1, Materials.StainlessSteel, Materials.StainlessSteel, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " S", " I ", "S f", Character.valueOf('I'), OrePrefixes.ingot.get(Materials.StainlessSteel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.StainlessSteel) });
+
+
+ if(!GregTech_API.sSpecialFile.get(ConfigCategories.general, "DisableFlintTools", false)){
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(0, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "F", "F", "S", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(2, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "FFF", " S ", " S ", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(4, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "F", "S", "S", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(6, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "FF", "FS", " S", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(8, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "FF", " S", " S", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ GT_ModHandler.addCraftingRecipe(INSTANCE.getToolWithStats(34, 1, Materials.Flint, Materials.Wood, null), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "F", "S", Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), new ItemStack(Items.flint, 1) });
+ }if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, "Coal", true)) {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.coal, 1) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, "Clay", true)) {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.clay, 1) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, "Wheat", true)) {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.wheat, 1) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, "Flint", true)) {
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Items.flint, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.gravel, 1) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Tools.mortar, "Blaze", true)) {
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Items.blaze_powder, 2), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.blaze_rod, 1) });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java b/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java
new file mode 100644
index 0000000000..a9556cc486
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java
@@ -0,0 +1,68 @@
+package gregtech.common.items;
+
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.items.GT_RadioactiveCellIC_Item;
+import ic2.api.reactor.IReactor;
+import ic2.api.reactor.IReactorComponent;
+import ic2.core.item.reactor.ItemReactorMOX;
+import net.minecraft.item.ItemStack;
+
+public class GT_NeutronReflector_Item
+ extends GT_Generic_Item
+ implements IReactorComponent
+{
+ public GT_NeutronReflector_Item(String aUnlocalized, String aEnglish, int aMaxDamage)
+ {
+ super(aUnlocalized, aEnglish, "Undestructable");
+ this.setMaxStackSize(64);
+ this.setMaxDamage(aMaxDamage);
+ }
+
+ public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, int pulseX, int pulseY, boolean heatrun) {
+ if (!heatrun)
+ {
+ if ((pulsingStack.getItem() instanceof ItemReactorMOX))
+ {
+ float breedereffectiveness = reactor.getHeat() / reactor.getMaxHeat();
+ float ReaktorOutput = 4.0F * breedereffectiveness + 1.0F;
+ reactor.addOutput(ReaktorOutput);
+ }
+ else
+ {
+ float tEnergy=1.0f;
+ if(pulsingStack.getItem() instanceof GT_RadioactiveCellIC_Item){
+ tEnergy = (float) ((GT_RadioactiveCellIC_Item)pulsingStack.getItem()).sEnergy;
+ }
+ reactor.addOutput(tEnergy);
+ }
+ }
+ return true;
+ }
+
+ public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ return false;
+ }
+
+ public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ return 0;
+ }
+
+ public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y)
+ {
+ return 0;
+ }
+
+ public float influenceExplosion(IReactor aReactor, ItemStack aStack)
+ {
+ return -1.0F;
+ }
+
+ public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat)
+ {
+ return aHeat;
+ }
+
+ public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {}
+}
diff --git a/src/main/java/gregtech/common/items/GT_SensorCard_Item.java b/src/main/java/gregtech/common/items/GT_SensorCard_Item.java
new file mode 100644
index 0000000000..b1781cccb9
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_SensorCard_Item.java
@@ -0,0 +1,101 @@
+package gregtech.common.items;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.util.GT_LanguageManager;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.World;
+import shedar.mods.ic2.nuclearcontrol.api.CardState;
+import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper;
+import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource;
+import shedar.mods.ic2.nuclearcontrol.api.IRemoteSensor;
+import shedar.mods.ic2.nuclearcontrol.api.PanelSetting;
+import shedar.mods.ic2.nuclearcontrol.api.PanelString;
+
+public class GT_SensorCard_Item
+ extends GT_Generic_Item
+ implements IRemoteSensor, IPanelDataSource
+{
+ public GT_SensorCard_Item(String aUnlocalized, String aEnglish)
+ {
+ super(aUnlocalized, aEnglish, "Insert into Display Panel");
+ setMaxStackSize(1);
+ }
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack)
+ {
+ super.addAdditionalToolTips(aList, aStack);
+ if (aStack != null)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null)
+ {
+ aList.add("Missing Coodinates!");
+ }
+ else
+ {
+ aList.add("Device at:");
+ aList.add(String.format("x: %d, y: %d, z: %d", new Object[] { Integer.valueOf(tNBT.getInteger("x")), Integer.valueOf(tNBT.getInteger("y")), Integer.valueOf(tNBT.getInteger("z")) }));
+ }
+ }
+ }
+
+ public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange)
+ {
+ ChunkCoordinates target = aCard.getTarget();
+ TileEntity tTileEntity = aPanel.getWorldObj().getTileEntity(target.posX, target.posY, target.posZ);
+ if ((tTileEntity != null) && ((tTileEntity instanceof IGregTechDeviceInformation)) && (((IGregTechDeviceInformation)tTileEntity).isGivingInformation()))
+ {
+ String[] tInfoData = ((IGregTechDeviceInformation)tTileEntity).getInfoData();
+ for (int i = 0; i < tInfoData.length; i++) {
+ aCard.setString("mString" + i, tInfoData[i]);
+ }
+ return CardState.OK;
+ }
+ return CardState.NO_TARGET;
+ }
+
+ public List<PanelString> getStringData(int aSettings, ICardWrapper aCard, boolean aLabels)
+ {
+ List<PanelString> rList = new LinkedList();
+ for (int i = 0; i < 8; i++) {
+ if ((aSettings & 1 << i) != 0)
+ {
+ PanelString line = new PanelString();
+ line.textLeft = GT_LanguageManager.getTranslation(aCard.getString("mString" + i), "\\\\");
+ rList.add(line);
+ }
+ }
+ return rList;
+ }
+
+ public List<PanelSetting> getSettingsList()
+ {
+ List<PanelSetting> rList = new ArrayList(30);
+ for (int i = 0; i < 8; i++) {
+ rList.add(new PanelSetting("" + (i + 1), 1 << i, getCardType()));
+ }
+ return rList;
+ }
+
+ private static final UUID CARD_TYPE = new UUID(0L, 41L);
+
+ public UUID getCardType()
+ {
+ return CARD_TYPE;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item var1, CreativeTabs aTab, List aList) {}
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow.java
new file mode 100644
index 0000000000..d0be735248
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow.java
@@ -0,0 +1,129 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.enums.SubTag;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.GT_EnchantmentHelper;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import gregtech.common.entities.GT_Entity_Arrow;
+import net.minecraft.block.BlockDispenser;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.dispenser.IPosition;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.world.World;
+
+public class Behaviour_Arrow
+ extends Behaviour_None
+{
+ public static Behaviour_Arrow DEFAULT_WOODEN = new Behaviour_Arrow(GT_Entity_Arrow.class, 1.0F, 6.0F);
+ public static Behaviour_Arrow DEFAULT_PLASTIC = new Behaviour_Arrow(GT_Entity_Arrow.class, 1.5F, 6.0F);
+ private final int mLevel;
+ private final Enchantment mEnchantment;
+ private final float mSpeedMultiplier;
+ private final float mPrecision;
+ private final Class<? extends GT_Entity_Arrow> mArrow;
+
+ public Behaviour_Arrow(Class<? extends GT_Entity_Arrow> aArrow, float aSpeed, float aPrecision)
+ {
+ this(aArrow, aSpeed, aPrecision, null, 0);
+ }
+
+ public Behaviour_Arrow(Class<? extends GT_Entity_Arrow> aArrow, float aSpeed, float aPrecision, Enchantment aEnchantment, int aLevel)
+ {
+ this.mArrow = aArrow;
+ this.mSpeedMultiplier = aSpeed;
+ this.mPrecision = aPrecision;
+ this.mEnchantment = aEnchantment;
+ this.mLevel = aLevel;
+ }
+
+ public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ if ((aEntity instanceof EntityLivingBase))
+ {
+ GT_Utility.GT_EnchantmentHelper.applyBullshitA((EntityLivingBase)aEntity, aPlayer, aStack);
+ GT_Utility.GT_EnchantmentHelper.applyBullshitB(aPlayer, aEntity, aStack);
+ if (!aPlayer.capabilities.isCreativeMode) {
+ aStack.stackSize -= 1;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ }
+ return false;
+ }
+ return false;
+ }
+
+ public boolean isItemStackUsable(GT_MetaBase_Item aItem, ItemStack aStack)
+ {
+ if ((this.mEnchantment != null) && (this.mLevel > 0))
+ {
+ NBTTagCompound tNBT = GT_Utility.ItemNBT.getNBT(aStack);
+ if (!tNBT.getBoolean("GT.HasBeenUpdated"))
+ {
+ tNBT.setBoolean("GT.HasBeenUpdated", true);
+ GT_Utility.ItemNBT.setNBT(aStack, tNBT);
+ GT_Utility.ItemNBT.addEnchantment(aStack, this.mEnchantment, this.mLevel);
+ }
+ }
+ return true;
+ }
+
+ public boolean canDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack)
+ {
+ return true;
+ }
+
+ public ItemStack onDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack)
+ {
+ World aWorld = aSource.getWorld();
+ IPosition tPosition = BlockDispenser.func_149939_a(aSource);
+ EnumFacing tFacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
+ GT_Entity_Arrow tEntityArrow = (GT_Entity_Arrow)getProjectile(aItem, SubTag.PROJECTILE_ARROW, aStack, aWorld, tPosition.getX(), tPosition.getY(), tPosition.getZ());
+ if (tEntityArrow != null)
+ {
+ tEntityArrow.setThrowableHeading(tFacing.getFrontOffsetX(), tFacing.getFrontOffsetY() + 0.1F, tFacing.getFrontOffsetZ(), this.mSpeedMultiplier * 1.1F, this.mPrecision);
+ tEntityArrow.setArrowItem(aStack);
+ tEntityArrow.canBePickedUp = 1;
+ aWorld.spawnEntityInWorld(tEntityArrow);
+ if (aStack.stackSize < 100) {
+ aStack.stackSize -= 1;
+ }
+ return aStack;
+ }
+ return super.onDispense(aItem, aSource, aStack);
+ }
+
+ public boolean hasProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack)
+ {
+ return aProjectileType == SubTag.PROJECTILE_ARROW;
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ if (!hasProjectile(aItem, aProjectileType, aStack)) {
+ return null;
+ }
+ GT_Entity_Arrow rArrow = (GT_Entity_Arrow)GT_Utility.callConstructor(this.mArrow.getName(), -1, null, true, new Object[] { aWorld, Double.valueOf(aX), Double.valueOf(aY), Double.valueOf(aZ) });
+ rArrow.setArrowItem(aStack);
+ return rArrow;
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ if (!hasProjectile(aItem, aProjectileType, aStack)) {
+ return null;
+ }
+ GT_Entity_Arrow rArrow = (GT_Entity_Arrow)GT_Utility.callConstructor(this.mArrow.getName(), -1, null, true, new Object[] { aWorld, aEntity, Float.valueOf(this.mSpeedMultiplier * aSpeed) });
+ rArrow.setArrowItem(aStack);
+ return rArrow;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow_Potion.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow_Potion.java
new file mode 100644
index 0000000000..98c099e4ed
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Arrow_Potion.java
@@ -0,0 +1,66 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.enums.SubTag;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.common.entities.GT_Entity_Arrow_Potion;
+import java.util.Random;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+public class Behaviour_Arrow_Potion
+ extends Behaviour_Arrow
+{
+ private final int[] mPotions;
+
+ public Behaviour_Arrow_Potion(float aSpeed, float aPrecision, int... aPotions)
+ {
+ super(GT_Entity_Arrow_Potion.class, aSpeed, aPrecision);
+ this.mPotions = aPotions;
+ }
+
+ public Behaviour_Arrow_Potion(float aSpeed, float aPrecision, Enchantment aEnchantment, int aLevel, int... aPotions)
+ {
+ super(GT_Entity_Arrow_Potion.class, aSpeed, aPrecision, aEnchantment, aLevel);
+ this.mPotions = aPotions;
+ }
+
+ public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ if ((aEntity instanceof EntityLivingBase)) {
+ for (int i = 3; i < this.mPotions.length; i += 4) {
+ if (aEntity.worldObj.rand.nextInt(100) < this.mPotions[i]) {
+ ((EntityLivingBase)aEntity).addPotionEffect(new PotionEffect(this.mPotions[(i - 3)], this.mPotions[(i - 2)], this.mPotions[(i - 1)], false));
+ }
+ }
+ }
+ return super.onLeftClickEntity(aItem, aStack, aPlayer, aEntity);
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ if (!hasProjectile(aItem, aProjectileType, aStack)) {
+ return null;
+ }
+ GT_Entity_Arrow_Potion rArrow = new GT_Entity_Arrow_Potion(aWorld, aX, aY, aZ);
+ rArrow.setArrowItem(aStack);
+ rArrow.setPotions(this.mPotions);
+ return rArrow;
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ if (!hasProjectile(aItem, aProjectileType, aStack)) {
+ return null;
+ }
+ GT_Entity_Arrow_Potion rArrow = new GT_Entity_Arrow_Potion(aWorld, aEntity, aSpeed);
+ rArrow.setArrowItem(aStack);
+ rArrow.setPotions(this.mPotions);
+ return rArrow;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java
new file mode 100644
index 0000000000..827239a64e
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java
@@ -0,0 +1,63 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_Crowbar
+ extends Behaviour_None
+{
+ private final int mVanillaCosts;
+ private final int mEUCosts;
+
+ public Behaviour_Crowbar(int aVanillaCosts, int aEUCosts)
+ {
+ this.mVanillaCosts = aVanillaCosts;
+ this.mEUCosts = aEUCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ if (GT_ModHandler.getModItem("Railcraft", "fluid.creosote.bucket", 1L) != null) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ if (aBlock == Blocks.rail)
+ {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 1) % 10, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(0)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.detector_rail) || (aBlock == Blocks.activator_rail) || (aBlock == Blocks.golden_rail))
+ {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, aBlock, aMeta / 8 * 8 + (aMeta % 8 + 1) % 6, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(0)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java
new file mode 100644
index 0000000000..b09b23cc2f
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java
@@ -0,0 +1,115 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+
+public class Behaviour_DataOrb
+ extends Behaviour_None
+{
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ if (!getDataTitle(aStack).equals(""))
+ {
+ aList.add(getDataTitle(aStack));
+ aList.add(getDataName(aStack));
+ }
+ return aList;
+ }
+
+ public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength)
+ {
+ for (int i = 0; i < aIndexlength; i++) {
+ if (aNewContent[i] == null) {
+ aInventory[i] = null;
+ } else {
+ aInventory[i] = GT_Utility.copy(new Object[] { aNewContent[i] });
+ }
+ }
+ }
+
+ public static String getDataName(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return "";
+ }
+ return tNBT.getString("mDataName");
+ }
+
+ public static String getDataTitle(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return "";
+ }
+ return tNBT.getString("mDataTitle");
+ }
+
+ public static NBTTagCompound setDataName(ItemStack aStack, String aDataName)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ tNBT.setString("mDataName", aDataName);
+ aStack.setTagCompound(tNBT);
+ return tNBT;
+ }
+
+ public static NBTTagCompound setDataTitle(ItemStack aStack, String aDataTitle)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ tNBT.setString("mDataTitle", aDataTitle);
+ aStack.setTagCompound(tNBT);
+ return tNBT;
+ }
+
+ public static ItemStack[] getNBTInventory(ItemStack aStack)
+ {
+ ItemStack[] tInventory = new ItemStack[256];
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return tInventory;
+ }
+ NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10);
+ for (int i = 0; i < tNBT_ItemList.tagCount(); i++)
+ {
+ NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i);
+ byte slot = tag.getByte("Slot");
+ if ((slot >= 0) && (slot < tInventory.length)) {
+ tInventory[slot] = GT_Utility.loadItem(tag);
+ }
+ }
+ return tInventory;
+ }
+
+ public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ NBTTagList tNBT_ItemList = new NBTTagList();
+ for (int i = 0; i < aInventory.length; i++)
+ {
+ ItemStack stack = aInventory[i];
+ if (stack != null)
+ {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("Slot", (byte)i);
+ stack.writeToNBT(tag);
+ tNBT_ItemList.appendTag(tag);
+ }
+ }
+ tNBT.setTag("Inventory", tNBT_ItemList);
+ aStack.setTagCompound(tNBT);
+ return tNBT;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java
new file mode 100644
index 0000000000..8d0809f279
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java
@@ -0,0 +1,37 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+
+public class Behaviour_DataStick
+ extends Behaviour_None
+{
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ String tString = GT_Utility.ItemNBT.getBookTitle(aStack);
+ if (GT_Utility.isStringValid(tString)) {
+ aList.add(tString);
+ }
+ tString = GT_Utility.ItemNBT.getBookAuthor(aStack);
+ if (GT_Utility.isStringValid(tString)) {
+ aList.add("by " + tString);
+ }
+ short tMapID = GT_Utility.ItemNBT.getMapID(aStack);
+ if (tMapID >= 0) {
+ aList.add("Map ID: " + tMapID);
+ }
+ tString = GT_Utility.ItemNBT.getPunchCardData(aStack);
+ if (GT_Utility.isStringValid(tString))
+ {
+ aList.add("Punch Card Data");
+ int i = 0;
+ for (int j = tString.length(); i < j; i += 64) {
+ aList.add(tString.substring(i, Math.min(i + 64, j)));
+ }
+ }
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java
new file mode 100644
index 0000000000..fc995e3a13
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java
@@ -0,0 +1,68 @@
+package gregtech.common.items.behaviors;
+
+import cpw.mods.fml.common.eventhandler.*;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.block.Block.SoundType;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.UseHoeEvent;
+
+public class Behaviour_Hoe
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Hoe(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (!aPlayer.canPlayerEdit(aX, aY, aZ, aSide, aStack)) {
+ return false;
+ }
+ UseHoeEvent event = new UseHoeEvent(aPlayer, aStack, aWorld, aX, aY, aZ);
+ if (MinecraftForge.EVENT_BUS.post(event)) {
+ return false;
+ }
+ if (event.getResult() == Event.Result.ALLOW)
+ {
+ if (!aPlayer.capabilities.isCreativeMode) {
+ ((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts);
+ }
+ return true;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if ((aSide != 0) && (GT_Utility.isBlockAir(aWorld, aX, aY + 1, aZ)) && ((aBlock == Blocks.grass) || (aBlock == Blocks.dirt)))
+ {
+ aWorld.playSoundEffect(aX + 0.5F, aY + 0.5F, aZ + 0.5F, Blocks.farmland.stepSound.getStepResourcePath(), (Blocks.farmland.stepSound.getVolume() + 1.0F) / 2.0F, Blocks.farmland.stepSound.getPitch() * 0.8F);
+ if (aWorld.isRemote) {
+ return true;
+ }
+ aWorld.setBlock(aX, aY, aZ, Blocks.farmland);
+ if (!aPlayer.capabilities.isCreativeMode) {
+ ((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.hoe", "Can till Dirt");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java
new file mode 100644
index 0000000000..ef287d1204
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java
@@ -0,0 +1,137 @@
+package gregtech.common.items.behaviors;
+
+import codechicken.lib.math.MathHelper;
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.monster.EntityCreeper;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class Behaviour_Lighter
+ extends Behaviour_None
+{
+ private final ItemStack mEmptyLighter;
+ private final ItemStack mUsedLighter;
+ private final ItemStack mFullLighter;
+ private final long mFuelAmount;
+
+ public Behaviour_Lighter(ItemStack aEmptyLighter, ItemStack aUsedLighter, ItemStack aFullLighter, long aFuelAmount)
+ {
+ this.mFullLighter = aFullLighter;
+ this.mUsedLighter = aUsedLighter;
+ this.mEmptyLighter = aEmptyLighter;
+ this.mFuelAmount = aFuelAmount;
+ }
+
+ public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ if ((aPlayer.worldObj.isRemote) || (aStack.stackSize != 1)) {
+ return false;
+ }
+ boolean rOutput = false;
+ if ((aEntity instanceof EntityCreeper))
+ {
+ prepare(aStack);
+ long tFuelAmount = GT_Utility.ItemNBT.getLighterFuel(aStack);
+ if (GT_Utility.areStacksEqual(aStack, this.mUsedLighter, true))
+ {
+ GT_Utility.sendSoundToPlayers(aPlayer.worldObj, (String)GregTech_API.sSoundList.get(Integer.valueOf(6)), 1.0F, 1.0F, MathHelper.floor_double(aEntity.posX), MathHelper.floor_double(aEntity.posY), MathHelper.floor_double(aEntity.posZ));
+ ((EntityCreeper)aEntity).func_146079_cb();
+ if (!aPlayer.capabilities.isCreativeMode) {
+ tFuelAmount -= 1L;
+ }
+ rOutput = true;
+ }
+ GT_Utility.ItemNBT.setLighterFuel(aStack, tFuelAmount);
+ if (tFuelAmount <= 0L) {
+ useUp(aStack);
+ }
+ }
+ return rOutput;
+ }
+
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ return false;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if ((aWorld.isRemote) || (aStack.stackSize != 1)) {
+ return false;
+ }
+ boolean rOutput = false;
+
+ ForgeDirection tDirection = ForgeDirection.getOrientation(aSide);
+ aX += tDirection.offsetX;aY += tDirection.offsetY;aZ += tDirection.offsetZ;
+ if ((!GT_Utility.isBlockAir(aWorld, aX, aY, aZ)) || (!aPlayer.canPlayerEdit(aX, aY, aZ, aSide, aStack))) {
+ return false;
+ }
+ prepare(aStack);
+ long tFuelAmount = GT_Utility.ItemNBT.getLighterFuel(aStack);
+ if (GT_Utility.areStacksEqual(aStack, this.mUsedLighter, true))
+ {
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(6)), 1.0F, 1.0F, aX, aY, aZ);
+ aWorld.setBlock(aX, aY, aZ, Blocks.fire);
+ if (!aPlayer.capabilities.isCreativeMode) {
+ tFuelAmount -= 1L;
+ }
+ rOutput = true;
+ }
+ GT_Utility.ItemNBT.setLighterFuel(aStack, tFuelAmount);
+ if (tFuelAmount <= 0L) {
+ useUp(aStack);
+ }
+ return rOutput;
+ }
+
+ private void prepare(ItemStack aStack)
+ {
+ if (GT_Utility.areStacksEqual(aStack, this.mFullLighter, true))
+ {
+ aStack.func_150996_a(this.mUsedLighter.getItem());
+ Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsedLighter));
+ GT_Utility.ItemNBT.setLighterFuel(aStack, this.mFuelAmount);
+ }
+ }
+
+ private void useUp(ItemStack aStack)
+ {
+ if (this.mEmptyLighter == null)
+ {
+ aStack.stackSize -= 1;
+ }
+ else
+ {
+ aStack.func_150996_a(this.mEmptyLighter.getItem());
+ Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmptyLighter));
+ }
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.lighter.tooltip", "Can light things on Fire");
+ private final String mTooltipUses = GT_LanguageManager.addStringLocalization("gt.behaviour.lighter.uses", "Remaining Uses:");
+ private final String mTooltipUnstackable = GT_LanguageManager.addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ long tFuelAmount = tNBT == null ? 0L : GT_Utility.areStacksEqual(aStack, this.mFullLighter, true) ? this.mFuelAmount : tNBT.getLong("GT.LighterFuel");
+ aList.add(this.mTooltipUses + " " + tFuelAmount);
+ aList.add(this.mTooltipUnstackable);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java
new file mode 100644
index 0000000000..43f84393fc
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java
@@ -0,0 +1,82 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.items.GT_MetaBase_Item;
+import java.util.List;
+import net.minecraft.block.BlockDispenser;
+import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.dispenser.IPosition;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.world.World;
+
+public class Behaviour_None
+ implements IItemBehaviour<GT_MetaBase_Item>
+{
+ public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ return false;
+ }
+
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ return false;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ return false;
+ }
+
+ public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer)
+ {
+ return aStack;
+ }
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ return aList;
+ }
+
+ public void onUpdate(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {}
+
+ public boolean isItemStackUsable(GT_MetaBase_Item aItem, ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean canDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack)
+ {
+ return false;
+ }
+
+ public ItemStack onDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack)
+ {
+ EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
+ IPosition iposition = BlockDispenser.func_149939_a(aSource);
+ ItemStack itemstack1 = aStack.splitStack(1);
+ BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
+ return aStack;
+ }
+
+ public boolean hasProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack)
+ {
+ return false;
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ)
+ {
+ return null;
+ }
+
+ public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed)
+ {
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java
new file mode 100644
index 0000000000..9d3d8e4d4b
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java
@@ -0,0 +1,53 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import thaumcraft.api.aspects.IEssentiaTransport;
+
+public class Behaviour_Plunger_Essentia
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Plunger_Essentia(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((aTileEntity instanceof IEssentiaTransport)) && (
+ (aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))))
+ {
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) {
+ ((IEssentiaTransport)aTileEntity).takeEssentia(((IEssentiaTransport)aTileEntity).getEssentiaType(tDirection), ((IEssentiaTransport)aTileEntity).getEssentiaAmount(tDirection), tDirection);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.plunger.essentia", "Clears Essentia from Containers and Tubes");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java
new file mode 100644
index 0000000000..fa3155e933
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java
@@ -0,0 +1,56 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class Behaviour_Plunger_Fluid
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Plunger_Fluid(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((aTileEntity instanceof IFluidHandler)) {
+ for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) {
+ if (((IFluidHandler)aTileEntity).drain(tDirection, 1000, false) != null) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ ((IFluidHandler)aTileEntity).drain(tDirection, 1000, true);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.plunger.fluid", "Clears 1000 Liters of Fluid from Tanks");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java
new file mode 100644
index 0000000000..a6c24bc627
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java
@@ -0,0 +1,77 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe.Util;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class Behaviour_Plunger_Item
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Plunger_Item(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((aTileEntity instanceof IGregTechTileEntity))
+ {
+ IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity)aTileEntity).getMetaTileEntity();
+ if ((tMetaTileEntity instanceof IMetaTileEntityItemPipe)) {
+ for (Object tTileEntity : GT_Utility.sortMapByValuesAcending(IMetaTileEntityItemPipe.Util.scanPipes((IMetaTileEntityItemPipe)tMetaTileEntity, new HashMap(), 0L, false, true)).keySet())
+
+ {
+ int i = 0;
+ for (int j = ((IMetaTileEntityItemPipe)tTileEntity).getSizeInventory(); i < j; i++) {
+ if (((IMetaTileEntityItemPipe)tTileEntity).isValidSlot(i)) {
+ if ((((IMetaTileEntityItemPipe)tTileEntity).getStackInSlot(i) != null) && (
+ (aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))))
+ {
+ ItemStack tStack = ((IMetaTileEntityItemPipe)tTileEntity).decrStackSize(i, 64);
+ if (tStack != null)
+ {
+ EntityItem tEntity = new EntityItem(aWorld, ((IGregTechTileEntity)aTileEntity).getOffsetX((byte)aSide, 1) + 0.5D, ((IGregTechTileEntity)aTileEntity).getOffsetY((byte)aSide, 1) + 0.5D, ((IGregTechTileEntity)aTileEntity).getOffsetZ((byte)aSide, 1) + 0.5D, tStack);
+ tEntity.motionX = 0.0D;tEntity.motionY = 0.0D;tEntity.motionZ = 0.0D;
+ aWorld.spawnEntityInWorld(tEntity);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.plunger.item", "Clears Items from Pipes");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java
new file mode 100644
index 0000000000..bbcdd5800c
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java
@@ -0,0 +1,40 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class Behaviour_PrintedPages
+ extends Behaviour_None
+{
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ if (GT_Utility.isStringValid(getTitle(aStack))) {
+ aList.add(getTitle(aStack));
+ }
+ if (GT_Utility.isStringValid(getAuthor(aStack))) {
+ aList.add("by " + getAuthor(aStack));
+ }
+ return aList;
+ }
+
+ public static String getTitle(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return "";
+ }
+ return tNBT.getString("title");
+ }
+
+ public static String getAuthor(ItemStack aStack)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return "";
+ }
+ return tNBT.getString("author");
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java
new file mode 100644
index 0000000000..aa676a7643
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java
@@ -0,0 +1,143 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.blocks.GT_Block_Ores;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.IFluidBlock;
+
+public class Behaviour_Prospecting
+ extends Behaviour_None
+{
+ private final int mVanillaCosts;
+ private final int mEUCosts;
+
+ public Behaviour_Prospecting(int aVanillaCosts, int aEUCosts)
+ {
+ this.mVanillaCosts = aVanillaCosts;
+ this.mEUCosts = aEUCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+
+
+ ItemData tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore")))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "This is " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX, aY, aZ);
+ return true;
+ }
+ if ((aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)))
+ {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer))
+ {
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX, aY, aZ);
+ int tX = aX;int tY = aY;int tZ = aZ;int tMetaID = 0;int tQuality = (aItem instanceof GT_MetaGenerated_Tool) ? ((GT_MetaGenerated_Tool)aItem).getHarvestLevel(aStack, "") : 0;
+
+ int i = 0;
+ for (int j = 6 + tQuality; i < j; i++)
+ {
+ tX -= ForgeDirection.getOrientation(aSide).offsetX;
+ tY -= ForgeDirection.getOrientation(aSide).offsetY;
+ tZ -= ForgeDirection.getOrientation(aSide).offsetZ;
+
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if ((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is Lava behind this Rock.");
+ break;
+ }
+ if ((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water) || ((tBlock instanceof IFluidBlock)))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is a Liquid behind this Rock.");
+ break;
+ }
+ if ((tBlock == Blocks.monster_egg) || (!GT_Utility.hasBlockHitBox(aWorld, tX, tY, tZ)))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is an Air Pocket behind this Rock.");
+ break;
+ }
+ if (tBlock != aBlock)
+ {
+ if (i >= 4) {
+ break;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "Material is changing behind this Rock."); break;
+ }
+ }
+ Random tRandom = new Random(aX ^ aY ^ aZ ^ aSide);
+ i = 0;
+ for (int j = 9 + 2 * tQuality; i < j; i++)
+ {
+ tX = aX - 4 - tQuality + tRandom.nextInt(j);
+ tY = aY - 4 - tQuality + tRandom.nextInt(j);
+ tZ = aZ - 4 - tQuality + tRandom.nextInt(j);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if ((tBlock instanceof GT_Block_Ores))
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores))
+ {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[(((GT_TileEntity_Ores)tTileEntity).mMetaData % 1000)];
+ if ((tMaterial != null) && (tMaterial != Materials._NULL))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "Found traces of " + tMaterial.mDefaultLocalName + " Ore.");
+ return true;
+ }
+ }
+ }
+ else
+ {
+ tMetaID = aWorld.getBlockMetadata(tX, tY, tZ);
+ tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore")))
+ {
+ GT_Utility.sendChatToPlayer(aPlayer, "Found traces of " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
+ return true;
+ }
+ }
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "No Ores found.");
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.prospecting", "Usable for Prospecting");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java
new file mode 100644
index 0000000000..1f0972c3e8
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java
@@ -0,0 +1,44 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_Scanner
+ extends Behaviour_None
+{
+ public static final IItemBehaviour<GT_MetaBase_Item> INSTANCE = new Behaviour_Scanner();
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 20000.0D)))
+ {
+ ArrayList<String> tList = new ArrayList();
+ if (aItem.use(aStack, GT_Utility.getCoordinateScan(tList, aPlayer, aWorld, 1, aX, aY, aZ, aSide, hitX, hitY, hitZ), aPlayer)) {
+ for (int i = 0; i < tList.size(); i++) {
+ GT_Utility.sendChatToPlayer(aPlayer, (String)tList.get(i));
+ }
+ }
+ return true;
+ }
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(108)), 1, 1.0F, aX, aY, aZ);
+ return aPlayer instanceof EntityPlayerMP;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.scanning", "Can scan Blocks in World");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java
new file mode 100644
index 0000000000..6da6d99931
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java
@@ -0,0 +1,57 @@
+package gregtech.common.items.behaviors;
+
+import forestry.api.lepidopterology.EnumFlutterType;
+import forestry.api.lepidopterology.IAlleleButterflySpecies;
+import forestry.api.lepidopterology.IButterfly;
+import forestry.api.lepidopterology.IButterflyGenome;
+import forestry.api.lepidopterology.IButterflyRoot;
+import forestry.api.lepidopterology.IEntityButterfly;
+import forestry.api.lepidopterology.ILepidopteristTracker;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import java.util.List;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_Scoop
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Scoop(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity)
+ {
+ if ((aEntity instanceof IEntityButterfly))
+ {
+ if (aPlayer.worldObj.isRemote) {
+ return true;
+ }
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ Object tButterfly = ((IEntityButterfly)aEntity).getButterfly();
+ ((IButterfly)tButterfly).getGenome().getPrimary().getRoot().getBreedingTracker(aEntity.worldObj, aPlayer.getGameProfile()).registerCatch((IButterfly)tButterfly);
+ aPlayer.worldObj.spawnEntityInWorld(new EntityItem(aPlayer.worldObj, aEntity.posX, aEntity.posY, aEntity.posZ, ((IButterfly)tButterfly).getGenome().getPrimary().getRoot().getMemberStack(((IButterfly)tButterfly).copy(), EnumFlutterType.BUTTERFLY.ordinal())));
+ aEntity.setDead();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.scoop", "Catches Butterflies on Leftclick");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java
new file mode 100644
index 0000000000..c6c39e2eac
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java
@@ -0,0 +1,56 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_Screwdriver
+ extends Behaviour_None
+{
+ private final int mVanillaCosts;
+ private final int mEUCosts;
+
+ public Behaviour_Screwdriver(int aVanillaCosts, int aEUCosts)
+ {
+ this.mVanillaCosts = aVanillaCosts;
+ this.mEUCosts = aEUCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ if ((aBlock == Blocks.unpowered_repeater) || (aBlock == Blocks.powered_repeater))
+ {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.unpowered_comparator) || (aBlock == Blocks.powered_comparator))
+ {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java
new file mode 100644
index 0000000000..13e4c583d5
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java
@@ -0,0 +1,53 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import ic2.api.crops.ICropTile;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class Behaviour_Sense
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Sense(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof ICropTile))
+ {
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int k = -1; k < 2; k++) {
+ if ((aStack.stackSize > 0) && (((tTileEntity = aWorld.getTileEntity(aX + i, aY + j, aZ + k)) instanceof ICropTile)) && (((ICropTile)tTileEntity).harvest(true)) && (!aPlayer.capabilities.isCreativeMode)) {
+ ((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts);
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.sense", "Rightclick to harvest Crop Sticks");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java
new file mode 100644
index 0000000000..9ac266d660
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java
@@ -0,0 +1,52 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class Behaviour_SensorKit
+ extends Behaviour_None
+{
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if ((aPlayer instanceof EntityPlayerMP))
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (((tTileEntity instanceof IInventory)) && (!((IInventory)tTileEntity).isUseableByPlayer(aPlayer))) {
+ return false;
+ }
+ if (((tTileEntity instanceof IGregTechDeviceInformation)) && (((IGregTechDeviceInformation)tTileEntity).isGivingInformation()))
+ {
+ GT_Utility.setStack(aStack, ItemList.NC_SensorCard.get(aStack.stackSize, new Object[0]));
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ tNBT.setInteger("x", aX);
+ tNBT.setInteger("y", aY);
+ tNBT.setInteger("z", aZ);
+ aStack.setTagCompound(tNBT);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.sensorkit.tooltip", "Used to display Information using the Mod Nuclear Control");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java
new file mode 100644
index 0000000000..11a6424e2c
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java
@@ -0,0 +1,125 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_SoftHammer
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_SoftHammer(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);
+ if (aBlock == Blocks.lit_redstone_lamp)
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, Blocks.redstone_lamp, 0, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.redstone_lamp)
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, Blocks.lit_redstone_lamp, 0, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.golden_rail)
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.activator_rail)
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.isRemote = true;
+ aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0);
+ aWorld.isRemote = false;
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.log) || (aBlock == Blocks.log2) || (aBlock == Blocks.hay_block))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) || (aBlock == Blocks.furnace) || (aBlock == Blocks.lit_furnace) || (aBlock == Blocks.chest) || (aBlock == Blocks.trapped_chest))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta - 1) % 4 + 2, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.hopper)
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6 == 1 ? (aMeta + 1) % 6 : 2, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(101)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.softhammer", "Activates and Deactivates Machines");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java
new file mode 100644
index 0000000000..781f85c80f
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java
@@ -0,0 +1,141 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.world.World;
+
+public class Behaviour_Sonictron
+ extends Behaviour_None
+{
+ public static final IItemBehaviour<GT_MetaBase_Item> INSTANCE = new Behaviour_Sonictron();
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if ((!aWorld.isRemote) && (aWorld.getBlock(aX, aY, aZ) == GregTech_API.sBlockMachines) && (aWorld.getBlockMetadata(aX, aY, aZ) == 6)) {}
+ setCurrentIndex(aStack, -1);
+ return false;
+ }
+
+ public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer)
+ {
+ setCurrentIndex(aStack, 0);
+ return aStack;
+ }
+
+ public void onUpdate(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand)
+ {
+ int tTickTimer = getTickTimer(aStack);
+ int tCurrentIndex = getCurrentIndex(aStack);
+ if ((tTickTimer++ % 2 == 0) && (tCurrentIndex > -1))
+ {
+ ItemStack[] tInventory = getNBTInventory(aStack);
+ GT_Values.GT.doSonictronSound(tInventory[tCurrentIndex], aPlayer.worldObj, aPlayer.posX, aPlayer.posY, aPlayer.posZ);
+ tCurrentIndex++;
+ if (tCurrentIndex > 63) {
+ tCurrentIndex = -1;
+ }
+ }
+ setTickTimer(aStack, tTickTimer);
+ setCurrentIndex(aStack, tCurrentIndex);
+ }
+
+ public static int getCurrentIndex(ItemStack aStack)
+ {
+ NBTTagCompound tNBTTagCompound = aStack.getTagCompound();
+ if (tNBTTagCompound == null) {
+ tNBTTagCompound = new NBTTagCompound();
+ }
+ return tNBTTagCompound.getInteger("mCurrentIndex");
+ }
+
+ public static int getTickTimer(ItemStack aStack)
+ {
+ NBTTagCompound tNBTTagCompound = aStack.getTagCompound();
+ if (tNBTTagCompound == null) {
+ tNBTTagCompound = new NBTTagCompound();
+ }
+ return tNBTTagCompound.getInteger("mTickTimer");
+ }
+
+ public static NBTTagCompound setCurrentIndex(ItemStack aStack, int aIndex)
+ {
+ NBTTagCompound tNBTTagCompound = aStack.getTagCompound();
+ if (tNBTTagCompound == null) {
+ tNBTTagCompound = new NBTTagCompound();
+ }
+ tNBTTagCompound.setInteger("mCurrentIndex", aIndex);
+ return tNBTTagCompound;
+ }
+
+ public static NBTTagCompound setTickTimer(ItemStack aStack, int aTime)
+ {
+ NBTTagCompound tNBTTagCompound = aStack.getTagCompound();
+ if (tNBTTagCompound == null) {
+ tNBTTagCompound = new NBTTagCompound();
+ }
+ tNBTTagCompound.setInteger("mTickTimer", aTime);
+ return tNBTTagCompound;
+ }
+
+ public static ItemStack[] getNBTInventory(ItemStack aStack)
+ {
+ ItemStack[] tInventory = new ItemStack[64];
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ return tInventory;
+ }
+ NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10);
+ for (int i = 0; i < tNBT_ItemList.tagCount(); i++)
+ {
+ NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i);
+ byte slot = tag.getByte("Slot");
+ if ((slot >= 0) && (slot < tInventory.length)) {
+ tInventory[slot] = GT_Utility.loadItem(tag);
+ }
+ }
+ return tInventory;
+ }
+
+ public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory)
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ NBTTagList tNBT_ItemList = new NBTTagList();
+ for (int i = 0; i < aInventory.length; i++)
+ {
+ ItemStack stack = aInventory[i];
+ if (stack != null)
+ {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("Slot", (byte)i);
+ stack.writeToNBT(tag);
+ tNBT_ItemList.appendTag(tag);
+ }
+ }
+ tNBT.setTag("Inventory", tNBT_ItemList);
+ aStack.setTagCompound(tNBT);
+ return tNBT;
+ }
+
+ public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength)
+ {
+ for (int i = 0; i < aIndexlength; i++) {
+ if (aNewContent[i] == null) {
+ aInventory[i] = null;
+ } else {
+ aInventory[i] = GT_Utility.copy(new Object[] { aNewContent[i] });
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java
new file mode 100644
index 0000000000..bfd457373f
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java
@@ -0,0 +1,137 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.ItemList;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockColored;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class Behaviour_Spray_Color
+ extends Behaviour_None
+{
+ private final ItemStack mEmpty;
+ private final ItemStack mUsed;
+ private final ItemStack mFull;
+ private final long mUses;
+ private final byte mColor;
+
+ public Behaviour_Spray_Color(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses, int aColor)
+ {
+ this.mEmpty = aEmpty;
+ this.mUsed = aUsed;
+ this.mFull = aFull;
+ this.mUses = aUses;
+ this.mColor = ((byte)aColor);
+ this.mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.paintspray." + this.mColor + ".tooltip", "Can Color things in " + Dyes.get(this.mColor).mName);
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if ((aWorld.isRemote) || (aStack.stackSize != 1)) {
+ return false;
+ }
+ boolean rOutput = false;
+ if (!aPlayer.canPlayerEdit(aX, aY, aZ, aSide, aStack)) {
+ return false;
+ }
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ long tUses = tNBT.getLong("GT.RemainingPaint");
+ if (GT_Utility.areStacksEqual(aStack, this.mFull, true))
+ {
+ aStack.func_150996_a(this.mUsed.getItem());
+ Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsed));
+ tUses = this.mUses;
+ }
+ if ((GT_Utility.areStacksEqual(aStack, this.mUsed, true)) &&
+ (colorize(aWorld, aX, aY, aZ, aSide)))
+ {
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(102)), 1.0F, 1.0F, aX, aY, aZ);
+ if (!aPlayer.capabilities.isCreativeMode) {
+ tUses -= 1L;
+ }
+ rOutput = true;
+ }
+ tNBT.removeTag("GT.RemainingPaint");
+ if (tUses > 0L) {
+ tNBT.setLong("GT.RemainingPaint", tUses);
+ }
+ if (tNBT.hasNoTags()) {
+ aStack.setTagCompound(null);
+ } else {
+ aStack.setTagCompound(tNBT);
+ }
+ if (tUses <= 0L) {
+ if (this.mEmpty == null)
+ {
+ aStack.stackSize -= 1;
+ }
+ else
+ {
+ aStack.func_150996_a(this.mEmpty.getItem());
+ Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmpty));
+ }
+ }
+ return rOutput;
+ }
+
+ private final Collection<Block> mAllowedVanillaBlocks = Arrays.asList(new Block[] { Blocks.glass, Blocks.glass_pane, Blocks.stained_glass, Blocks.stained_glass_pane, Blocks.carpet, Blocks.hardened_clay, ItemList.TE_Rockwool.getBlock() });
+ private final String mTooltip;
+
+ private boolean colorize(World aWorld, int aX, int aY, int aZ, int aSide)
+ {
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if ((aBlock != Blocks.air) && ((this.mAllowedVanillaBlocks.contains(aBlock)) || ((aBlock instanceof BlockColored))))
+ {
+ if (aBlock == Blocks.hardened_clay)
+ {
+ aWorld.setBlock(aX, aY, aZ, Blocks.stained_hardened_clay, (this.mColor ^ 0xFFFFFFFF) & 0xF, 3);return true;
+ }
+ if (aBlock == Blocks.glass_pane)
+ {
+ aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass_pane, (this.mColor ^ 0xFFFFFFFF) & 0xF, 3);return true;
+ }
+ if (aBlock == Blocks.glass)
+ {
+ aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass, (this.mColor ^ 0xFFFFFFFF) & 0xF, 3);return true;
+ }
+ if (aWorld.getBlockMetadata(aX, aY, aZ) == ((this.mColor ^ 0xFFFFFFFF) & 0xF)) {
+ return false;
+ }
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (this.mColor ^ 0xFFFFFFFF) & 0xF, 3);
+ return true;
+ }
+ return aBlock.recolourBlock(aWorld, aX, aY, aZ, ForgeDirection.getOrientation(aSide), (this.mColor ^ 0xFFFFFFFF) & 0xF);
+ }
+
+ private final String mTooltipUses = GT_LanguageManager.addStringLocalization("gt.behaviour.paintspray.uses", "Remaining Uses:");
+ private final String mTooltipUnstackable = GT_LanguageManager.addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ long tRemainingPaint = tNBT == null ? 0L : GT_Utility.areStacksEqual(aStack, this.mFull, true) ? this.mUses : tNBT.getLong("GT.RemainingPaint");
+ aList.add(this.mTooltipUses + " " + tRemainingPaint);
+ aList.add(this.mTooltipUnstackable);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java
new file mode 100644
index 0000000000..2d84495038
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java
@@ -0,0 +1,182 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import ic2.api.tile.IWrenchable;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class Behaviour_Wrench
+ extends Behaviour_None
+{
+ private final int mCosts;
+
+ public Behaviour_Wrench(int aCosts)
+ {
+ this.mCosts = aCosts;
+ }
+
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte)aWorld.getBlockMetadata(aX, aY, aZ);byte aTargetSide = GT_Utility.determineWrenchingSide((byte)aSide, hitX, hitY, hitZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ try
+ {
+ if ((aTileEntity != null) && ((aTileEntity instanceof IWrenchable)))
+ {
+ if (((IWrenchable)aTileEntity).wrenchCanSetFacing(aPlayer, aTargetSide))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ ((IWrenchable)aTileEntity).setFacing((short)aTargetSide);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (((IWrenchable)aTileEntity).wrenchCanRemove(aPlayer))
+ {
+ int tDamage = ((IWrenchable)aTileEntity).getWrenchDropRate() < 1.0F ? 10 : 3;
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, tDamage * this.mCosts)))
+ {
+ ItemStack tOutput = ((IWrenchable)aTileEntity).getWrenchDrop(aPlayer);
+ for (ItemStack tStack : aBlock.getDrops(aWorld, aX, aY, aZ, aMeta, 0)) {
+ if (tOutput == null)
+ {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tStack));
+ }
+ else
+ {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tOutput));
+ tOutput = null;
+ }
+ }
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ return true;
+ }
+ }
+ catch (Throwable e) {}
+ if ((aBlock == Blocks.log) || (aBlock == Blocks.log2) || (aBlock == Blocks.hay_block))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.powered_repeater) || (aBlock == Blocks.unpowered_repeater))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.powered_comparator) || (aBlock == Blocks.unpowered_comparator))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.crafting_table) || (aBlock == Blocks.bookshelf))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, aMeta)));
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aMeta == aTargetSide)
+ {
+ if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) || (aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper) || (aBlock == Blocks.furnace) || (aBlock == Blocks.lit_furnace) || (aBlock == Blocks.chest) || (aBlock == Blocks.trapped_chest) || (aBlock == Blocks.ender_chest) || (aBlock == Blocks.hopper))
+ {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts)))
+ {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, 0)));
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ }
+ else
+ {
+ if ((aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper))
+ {
+ if ((aMeta < 6) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) || (aBlock == Blocks.furnace) || (aBlock == Blocks.lit_furnace) || (aBlock == Blocks.chest) || (aBlock == Blocks.ender_chest) || (aBlock == Blocks.trapped_chest))
+ {
+ if ((aTargetSide > 1) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.hopper)
+ {
+ if ((aTargetSide != 1) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts))))
+ {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ }
+ if ((Arrays.asList(aBlock.getValidRotations(aWorld, aX, aY, aZ)).contains(ForgeDirection.getOrientation(aTargetSide))) &&
+ ((aPlayer.capabilities.isCreativeMode) || (!GT_ModHandler.isElectricItem(aStack)) || (GT_ModHandler.canUseElectricItem(aStack, this.mCosts))) &&
+ (aBlock.rotateBlock(aWorld, aX, aY, aZ, ForgeDirection.getOrientation(aTargetSide))))
+ {
+ if (!aPlayer.capabilities.isCreativeMode) {
+ ((GT_MetaGenerated_Tool)aItem).doDamage(aStack, this.mCosts);
+ }
+ GT_Utility.sendSoundToPlayers(aWorld, (String)GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return false;
+ }
+
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.wrench", "Rotates Blocks on Rightclick");
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ aList.add(this.mTooltip);
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java
new file mode 100644
index 0000000000..d00e5c316b
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java
@@ -0,0 +1,38 @@
+package gregtech.common.items.behaviors;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import java.util.List;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.GuiScreenBook;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Behaviour_WrittenBook
+ extends Behaviour_None
+{
+ @SideOnly(Side.CLIENT)
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ)
+ {
+ if ((GT_Utility.isStringValid(GT_Utility.ItemNBT.getBookTitle(aStack))) && ((aPlayer instanceof EntityPlayerSP))) {
+ Minecraft.getMinecraft().displayGuiScreen(new GuiScreenBook(aPlayer, aStack, false));
+ }
+ return true;
+ }
+
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack)
+ {
+ String tTitle = GT_Utility.ItemNBT.getBookTitle(aStack);
+ if (GT_Utility.isStringValid(tTitle))
+ {
+ aList.add(tTitle);
+ aList.add("by " + GT_Utility.ItemNBT.getBookAuthor(aStack));
+ }
+ return aList;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java
new file mode 100644
index 0000000000..30d06a2e6b
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java
@@ -0,0 +1,107 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_BasicLogic
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_BasicLogic(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 0) {
+ aCircuitData[0] = 0;
+ }
+ if (aCircuitData[0] > 13) {
+ aCircuitData[0] = 13;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 2) {
+ aRedstoneCircuitBlock.setRedstone((byte)(aCircuitData[0] % 2 == (getAnyRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 4) {
+ aRedstoneCircuitBlock.setRedstone((byte)(aCircuitData[0] % 2 == (getOneRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 6) {
+ aRedstoneCircuitBlock.setRedstone((byte)(aCircuitData[0] % 2 == (getAllRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 7) {
+ aRedstoneCircuitBlock.setRedstone((byte)(15 - getStrongestRedstone(aRedstoneCircuitBlock)), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 9) {
+ aRedstoneCircuitBlock.setRedstone((byte)((aCircuitData[0] % 2 == 0 ? 15 : 0) ^ (getStrongestRedstone(aRedstoneCircuitBlock) | getWeakestRedstone(aRedstoneCircuitBlock))), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 11) {
+ aRedstoneCircuitBlock.setRedstone((byte)((aCircuitData[0] % 2 == 0 ? 15 : 0) ^ getStrongestRedstone(aRedstoneCircuitBlock) ^ getWeakestRedstone(aRedstoneCircuitBlock)), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 13) {
+ aRedstoneCircuitBlock.setRedstone((byte)((aCircuitData[0] % 2 == 0 ? 15 : 0) ^ getStrongestRedstone(aRedstoneCircuitBlock) & getWeakestRedstone(aRedstoneCircuitBlock)), aRedstoneCircuitBlock.getOutputFacing());
+ } else if (aCircuitData[0] < 14) {
+ aRedstoneCircuitBlock.setRedstone((byte)(getStrongestRedstone(aRedstoneCircuitBlock) ^ 0xF), aRedstoneCircuitBlock.getOutputFacing());
+ }
+ }
+
+ public String getName()
+ {
+ return "Basic Logic";
+ }
+
+ public String getDescription()
+ {
+ return "Regular Logic Gates";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex == 0) {
+ switch (aCircuitData[0])
+ {
+ case 0:
+ return "OR";
+ case 1:
+ return "NOR";
+ case 2:
+ return "XOR";
+ case 3:
+ return "XNOR";
+ case 4:
+ return "AND";
+ case 5:
+ return "NAND";
+ case 6:
+ return "INVERT";
+ case 7:
+ return "BIT_OR";
+ case 8:
+ return "BIT_NOR";
+ case 9:
+ return "BIT_XOR";
+ case 10:
+ return "BIT_XNOR";
+ case 11:
+ return "BIT_AND";
+ case 12:
+ return "BIT_NAND";
+ case 13:
+ return "BIT_INVERT";
+ }
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ return "";
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java
new file mode 100644
index 0000000000..ad62f847dc
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java
@@ -0,0 +1,79 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_BitAnd
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_BitAnd(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 0;
+ aCircuitData[1] = 0;
+ aCircuitData[2] = 0;
+ aCircuitData[3] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 0) {
+ aCircuitData[0] = 0;
+ }
+ if (aCircuitData[1] < 0) {
+ aCircuitData[1] = 0;
+ }
+ if (aCircuitData[2] < 0) {
+ aCircuitData[2] = 0;
+ }
+ if (aCircuitData[3] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[0] > 1) {
+ aCircuitData[0] = 1;
+ }
+ if (aCircuitData[1] > 1) {
+ aCircuitData[1] = 1;
+ }
+ if (aCircuitData[2] > 1) {
+ aCircuitData[2] = 1;
+ }
+ if (aCircuitData[3] > 1) {
+ aCircuitData[3] = 1;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)((getStrongestRedstone(aRedstoneCircuitBlock) & (aCircuitData[0] | aCircuitData[1] << 1 | aCircuitData[2] << 2 | aCircuitData[3] << 3)) != 0 ? 15 : 0), aRedstoneCircuitBlock.getOutputFacing());
+ }
+
+ public String getName()
+ {
+ return "Hardcode Bit-AND";
+ }
+
+ public String getDescription()
+ {
+ return "( signal & this ) != 0";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ return "Bit " + aCircuitDataIndex + ":";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ return aCircuitData[aCircuitDataIndex] == 0 ? "OFF" : "ON";
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java
new file mode 100644
index 0000000000..4f6e2ef9c0
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java
@@ -0,0 +1,117 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_CombinationLock
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_CombinationLock(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 1;
+ aCircuitData[1] = 0;
+ aCircuitData[2] = 0;
+ aCircuitData[3] = 0;
+ aCircuitData[4] = 0;
+ aCircuitData[5] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 1) {
+ aCircuitData[0] = 1;
+ }
+ if (aCircuitData[1] < 0) {
+ aCircuitData[1] = 0;
+ }
+ if (aCircuitData[2] < 0) {
+ aCircuitData[2] = 0;
+ }
+ if (aCircuitData[3] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[0] > 15) {
+ aCircuitData[0] = 15;
+ }
+ if (aCircuitData[1] > 15) {
+ aCircuitData[1] = 15;
+ }
+ if (aCircuitData[2] > 15) {
+ aCircuitData[2] = 15;
+ }
+ if (aCircuitData[3] > 15) {
+ aCircuitData[3] = 15;
+ }
+ if (aCircuitData[4] < 0) {
+ aCircuitData[4] = 0;
+ }
+ if (aCircuitData[4] > 3) {
+ aCircuitData[4] = 3;
+ }
+ if (aCircuitData[5] < 0) {
+ aCircuitData[5] = 0;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ while ((aCircuitData[aCircuitData[4]] == 0) && (aCircuitData[4] < 4)) {
+ aCircuitData[4] += 1;
+ }
+ if (aCircuitData[4] < 4)
+ {
+ int tRedstone = getStrongestRedstone(aRedstoneCircuitBlock);
+ if (tRedstone > 0)
+ {
+ if (aCircuitData[5] == 0) {
+ if (tRedstone == aCircuitData[aCircuitData[4]]) {
+ aCircuitData[4] += 1;
+ } else {
+ aCircuitData[4] = 0;
+ }
+ }
+ aCircuitData[5] = 1;
+ }
+ else
+ {
+ aCircuitData[5] = 0;
+ }
+ aRedstoneCircuitBlock.setRedstone((byte)0, aRedstoneCircuitBlock.getOutputFacing());
+ }
+ else
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)15, aRedstoneCircuitBlock.getOutputFacing());
+ aCircuitData[4] = 0;
+ }
+ }
+
+ public String getName()
+ {
+ return "Combination Lock";
+ }
+
+ public String getDescription()
+ {
+ return "Checks Combinations";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ return "Power " + aCircuitDataIndex;
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java
new file mode 100644
index 0000000000..acfcab6a14
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java
@@ -0,0 +1,75 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_Equals
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_Equals(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 0;
+ aCircuitData[1] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 0) {
+ aCircuitData[0] = 0;
+ }
+ if (aCircuitData[0] > 15) {
+ aCircuitData[0] = 15;
+ }
+ if (aCircuitData[1] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[1] > 1) {
+ aCircuitData[3] = 1;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aRedstoneCircuitBlock.setRedstone(((byte)((aCircuitData[1] != 0 ? getStrongestRedstone(aRedstoneCircuitBlock) == aCircuitData[0] : getStrongestRedstone(aRedstoneCircuitBlock) != aCircuitData[0]) ? 0 : 15)), aRedstoneCircuitBlock.getOutputFacing());
+}
+
+ public String getName()
+ {
+ return "Equals";
+ }
+
+ public String getDescription()
+ {
+ return "signal == this";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Signal";
+ case 1:
+ return aCircuitData[1] == 0 ? "Equal" : "Unequal";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex > 0) {
+ return "";
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java
new file mode 100644
index 0000000000..6c02f8e575
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java
@@ -0,0 +1,93 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_Pulser
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_Pulser(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 1;
+ aCircuitData[1] = 16;
+ aCircuitData[4] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 1) {
+ aCircuitData[0] = 1;
+ }
+ if (aCircuitData[1] < 0) {
+ aCircuitData[1] = 0;
+ }
+ if (aCircuitData[1] > 16) {
+ aCircuitData[1] = 16;
+ }
+ if (aCircuitData[4] < 0) {
+ aCircuitData[4] = 0;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ byte tRedstone = aCircuitData[1] == 0 ? getWeakestNonZeroRedstone(aRedstoneCircuitBlock) : getStrongestRedstone(aRedstoneCircuitBlock);
+ if (aCircuitData[4] == 0) {
+ aCircuitData[5] = tRedstone;
+ }
+ if ((tRedstone > 0) || (aCircuitData[4] > 0))
+ {
+ int tmp40_39 = 4; int[] tmp40_38 = aCircuitData; int tmp42_41 = tmp40_38[tmp40_39];tmp40_38[tmp40_39] = (tmp42_41 + 1);
+ if ((tmp42_41 >= aCircuitData[0]) && (tRedstone <= 0)) {
+ aCircuitData[4] = 0;
+ }
+ }
+ aRedstoneCircuitBlock.setRedstone((byte)((aCircuitData[4] > 0) && (aCircuitData[4] <= aCircuitData[0]) ? (byte)aCircuitData[1] : (aCircuitData[1] <= 0) || (aCircuitData[1] > 15) ? (byte)aCircuitData[5] : 0), aRedstoneCircuitBlock.getOutputFacing());
+ }
+
+ public String getName()
+ {
+ return "Pulser";
+ }
+
+ public String getDescription()
+ {
+ return "Limits&Enlengths";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Length";
+ case 1:
+ return "RS Out";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex == 1)
+ {
+ if (aCircuitData[aCircuitDataIndex] == 16) {
+ return "HIGHEST";
+ }
+ if (aCircuitData[aCircuitDataIndex] == 0) {
+ return "LOWEST";
+ }
+ }
+ return aCircuitDataIndex > 1 ? "" : null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java
new file mode 100644
index 0000000000..036485bc22
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java
@@ -0,0 +1,94 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_Randomizer
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_Randomizer(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 1;
+ aCircuitData[4] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 1) {
+ aCircuitData[0] = 1;
+ }
+ if (aCircuitData[3] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[3] > 1) {
+ aCircuitData[3] = 1;
+ }
+ if (aCircuitData[4] < 0) {
+ aCircuitData[4] = 0;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[3] == 1)
+ {
+ if (getAnyRedstone(aRedstoneCircuitBlock)) {
+ aCircuitData[4] += 1;
+ } else {
+ aCircuitData[4] = 0;
+ }
+ }
+ else if (getAnyRedstone(aRedstoneCircuitBlock)) {
+ aCircuitData[4] = 0;
+ } else {
+ aCircuitData[4] += 1;
+ }
+ if (aCircuitData[4] >= aCircuitData[0])
+ {
+ aCircuitData[4] = 0;
+ aRedstoneCircuitBlock.setRedstone((byte)aRedstoneCircuitBlock.getRandom(16), aRedstoneCircuitBlock.getOutputFacing());
+ }
+ }
+
+ public String getName()
+ {
+ return "Randomizer";
+ }
+
+ public String getDescription()
+ {
+ return "Randomizes Redstone";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Delay";
+ case 3:
+ return aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF";
+ case 4:
+ return "Status";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex != 0) {
+ return "";
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java
new file mode 100644
index 0000000000..0cb8d09760
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java
@@ -0,0 +1,97 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_RedstoneMeter
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_RedstoneMeter(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 1;
+ aCircuitData[1] = 15;
+ aCircuitData[2] = 0;
+ aCircuitData[3] = 15;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 0) {
+ aCircuitData[0] = 0;
+ }
+ if (aCircuitData[0] > 15) {
+ aCircuitData[0] = 15;
+ }
+ if (aCircuitData[1] < 0) {
+ aCircuitData[1] = 0;
+ }
+ if (aCircuitData[1] > 15) {
+ aCircuitData[1] = 15;
+ }
+ if (aCircuitData[1] < aCircuitData[0]) {
+ aCircuitData[1] = aCircuitData[0];
+ }
+ if (aCircuitData[2] < 0) {
+ aCircuitData[2] = 0;
+ }
+ if (aCircuitData[2] > 1) {
+ aCircuitData[2] = 1;
+ }
+ if (aCircuitData[3] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[3] > 15) {
+ aCircuitData[3] = 15;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ byte tRedstone = getStrongestRedstone(aRedstoneCircuitBlock);
+ aRedstoneCircuitBlock.setRedstone((byte)(((tRedstone >= aCircuitData[0]) && (tRedstone <= aCircuitData[1]) ? 1 : 0) != (aCircuitData[2] != 0 ? 1 : 0) ? (byte)aCircuitData[3] : 0), aRedstoneCircuitBlock.getOutputFacing());
+ }
+
+ public String getName()
+ {
+ return "Redstone Meter";
+ }
+
+ public String getDescription()
+ {
+ return "Checks Boundaries";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Lower";
+ case 1:
+ return "Upper";
+ case 2:
+ return "Invert:";
+ case 3:
+ return "RS Out:";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex == 2) {
+ return aCircuitData[2] == 0 ? "OFF" : "ON";
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java
new file mode 100644
index 0000000000..ba96272d00
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java
@@ -0,0 +1,97 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_Repeater
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_Repeater(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 1;
+ aCircuitData[4] = 0;
+ aCircuitData[5] = -1;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 1) {
+ aCircuitData[0] = 1;
+ }
+ if (aCircuitData[4] < 0) {
+ aCircuitData[4] = 0;
+ }
+ if (aCircuitData[5] < -1) {
+ aCircuitData[5] = -1;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (getAnyRedstone(aRedstoneCircuitBlock))
+ {
+ aCircuitData[4] += 1;
+ if (aCircuitData[5] < 0) {
+ aCircuitData[5] = 0;
+ }
+ }
+ if ((aCircuitData[5] >= 0) && (aCircuitData[5] < aCircuitData[0])) {
+ aCircuitData[5] += 1;
+ }
+ if (aCircuitData[4] > 0)
+ {
+ if (aCircuitData[5] >= aCircuitData[0])
+ {
+ aCircuitData[4] -= 1;
+ aRedstoneCircuitBlock.setRedstone((byte)15, aRedstoneCircuitBlock.getOutputFacing());
+ }
+ else
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)0, aRedstoneCircuitBlock.getOutputFacing());
+ }
+ }
+ else
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)0, aRedstoneCircuitBlock.getOutputFacing());
+ aCircuitData[5] = -1;
+ }
+ }
+
+ public String getName()
+ {
+ return "Repeater";
+ }
+
+ public String getDescription()
+ {
+ return "Delays RS-Signal";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Delay";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex > 0) {
+ return "";
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java
new file mode 100644
index 0000000000..ef450cc7c2
--- /dev/null
+++ b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java
@@ -0,0 +1,124 @@
+package gregtech.common.redstonecircuits;
+
+import gregtech.api.interfaces.IRedstoneCircuitBlock;
+import gregtech.api.util.GT_CircuitryBehavior;
+
+public class GT_Circuit_Timer
+ extends GT_CircuitryBehavior
+{
+ public GT_Circuit_Timer(int aIndex)
+ {
+ super(aIndex);
+ }
+
+ public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ aCircuitData[0] = 2;
+ aCircuitData[1] = 1;
+ aCircuitData[2] = 2;
+ aCircuitData[4] = 0;
+ }
+
+ public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[0] < 2) {
+ aCircuitData[0] = 2;
+ }
+ if (aCircuitData[1] < 1) {
+ aCircuitData[1] = 1;
+ }
+ if (aCircuitData[2] < 2) {
+ aCircuitData[2] = 2;
+ }
+ if (aCircuitData[3] < 0) {
+ aCircuitData[3] = 0;
+ }
+ if (aCircuitData[3] > 1) {
+ aCircuitData[3] = 1;
+ }
+ if (aCircuitData[4] < 0) {
+ aCircuitData[4] = 0;
+ }
+ }
+
+ public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock)
+ {
+ if (aCircuitData[3] == 1)
+ {
+ if (getAnyRedstone(aRedstoneCircuitBlock)) {
+ aCircuitData[4] += 1;
+ } else {
+ aCircuitData[4] = 0;
+ }
+ }
+ else if (getAnyRedstone(aRedstoneCircuitBlock)) {
+ aCircuitData[4] = 0;
+ } else {
+ aCircuitData[4] += 1;
+ }
+ if (aCircuitData[4] >= aCircuitData[0])
+ {
+ if (aCircuitData[1] > 1)
+ {
+ if (aCircuitData[4] >= aCircuitData[0] + (aCircuitData[1] - 1) * aCircuitData[2])
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)15, aRedstoneCircuitBlock.getOutputFacing());
+ aCircuitData[4] = 0;
+ }
+ else
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)((aCircuitData[4] - aCircuitData[0]) % aCircuitData[2] == 0 ? 15 : 0), aRedstoneCircuitBlock.getOutputFacing());
+ }
+ }
+ else
+ {
+ aRedstoneCircuitBlock.setRedstone((byte)15, aRedstoneCircuitBlock.getOutputFacing());
+ aCircuitData[4] = 0;
+ }
+ }
+ else {
+ aRedstoneCircuitBlock.setRedstone((byte)0, aRedstoneCircuitBlock.getOutputFacing());
+ }
+ }
+
+ public String getName()
+ {
+ return "Timer";
+ }
+
+ public String getDescription()
+ {
+ return "Pulses Redstone";
+ }
+
+ public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ switch (aCircuitDataIndex)
+ {
+ case 0:
+ return "Delay";
+ case 1:
+ return "Pulses";
+ case 2:
+ return "Length";
+ case 3:
+ return aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF";
+ case 4:
+ return "Time";
+ }
+ return "";
+ }
+
+ public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex)
+ {
+ return false;
+ }
+
+ public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex)
+ {
+ if (aCircuitDataIndex == 3) {
+ return "";
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_CapeRenderer.java b/src/main/java/gregtech/common/render/GT_CapeRenderer.java
new file mode 100644
index 0000000000..6daf94c3b6
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_CapeRenderer.java
@@ -0,0 +1,105 @@
+package gregtech.common.render;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Collection;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBiped;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.potion.Potion;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.event.RenderPlayerEvent;
+import net.minecraftforge.client.event.RenderPlayerEvent.Specials.Pre;
+
+import org.lwjgl.opengl.GL11;
+
+public class GT_CapeRenderer
+ extends RenderPlayer
+{
+ private final ResourceLocation[] mCapes = { new ResourceLocation("gregtech:textures/BrainTechCape.png"), new ResourceLocation("gregtech:textures/GregTechCape.png"), new ResourceLocation("gregtech:textures/MrBrainCape.png"), new ResourceLocation("gregtech:textures/GregoriusCape.png") };
+ private final Collection<String> mCapeList;
+
+ public GT_CapeRenderer(Collection<String> aCapeList)
+ {
+ this.mCapeList = aCapeList;
+ setRenderManager(RenderManager.instance);
+ }
+
+ public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent)
+ {
+ AbstractClientPlayer aPlayer = (AbstractClientPlayer)aEvent.entityPlayer;
+ if (GT_Utility.getFullInvisibility(aPlayer))
+ {
+ aEvent.setCanceled(true);return;
+ }
+ float aPartialTicks = aEvent.partialRenderTick;
+ if (aPlayer.isInvisible()) {
+ return;
+ }
+ if (GT_Utility.getPotion(aPlayer, Integer.valueOf(Potion.invisibility.id).intValue())) {
+ return;
+ }
+ try
+ {
+ ResourceLocation tResource = null;
+ if (aPlayer.getDisplayName().equalsIgnoreCase("Friedi4321")) {
+ tResource = this.mCapes[0];
+ }
+ if (this.mCapeList.contains(aPlayer.getDisplayName().toLowerCase())) {
+ tResource = this.mCapes[1];
+ }
+ if (aPlayer.getDisplayName().equalsIgnoreCase("Mr_Brain")) {
+ tResource = this.mCapes[2];
+ }
+ if (aPlayer.getDisplayName().equalsIgnoreCase("GregoriusT")) {
+ tResource = this.mCapes[3];
+ }
+ if ((tResource != null) && (!aPlayer.getHideCape()))
+ {
+ bindTexture(tResource);
+ GL11.glPushMatrix();
+ GL11.glTranslatef(0.0F, 0.0F, 0.125F);
+ double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks);
+ double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks);
+ double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks);
+ float f6 = aPlayer.prevRenderYawOffset + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks;
+ double d3 = MathHelper.sin(f6 * 3.141593F / 180.0F);
+ double d4 = -MathHelper.cos(f6 * 3.141593F / 180.0F);
+ float f7 = (float)d1 * 10.0F;
+ float f8 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f9 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+ if (f7 < -6.0F) {
+ f7 = -6.0F;
+ }
+ if (f7 > 32.0F) {
+ f7 = 32.0F;
+ }
+ if (f8 < 0.0F) {
+ f8 = 0.0F;
+ }
+ float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks;
+ f7 += MathHelper.sin((aPlayer.prevDistanceWalkedModified + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) * 32.0F * f10;
+ if (aPlayer.isSneaking()) {
+ f7 += 25.0F;
+ }
+ GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F);
+ GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
+ ((ModelBiped)this.mainModel).renderCloak(0.0625F);
+ GL11.glPopMatrix();
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java b/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java
new file mode 100644
index 0000000000..aab095d5b7
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java
@@ -0,0 +1,184 @@
+package gregtech.common.render;
+
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Item;
+import gregtech.api.util.GT_Utility;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.client.renderer.texture.TextureManager;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.IItemRenderer.ItemRenderType;
+import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
+import net.minecraftforge.client.MinecraftForgeClient;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import org.lwjgl.opengl.GL11;
+
+public class GT_MetaGenerated_Item_Renderer
+ implements IItemRenderer
+{
+ public GT_MetaGenerated_Item_Renderer()
+ {
+ GT_MetaGenerated_Item tItem;
+ for (Iterator i$ = GT_MetaGenerated_Item.sInstances.values().iterator(); i$.hasNext(); MinecraftForgeClient.registerItemRenderer(tItem, this))
+ {
+ tItem = (GT_MetaGenerated_Item)i$.next();
+ if ((tItem == null) || (!tItem.useStandardMetaItemRenderer())) {}
+ }
+ }
+
+ public boolean handleRenderType(ItemStack aStack, IItemRenderer.ItemRenderType aType)
+ {
+ if ((GT_Utility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0)) {
+ return false;
+ }
+ return (aType == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) || (aType == IItemRenderer.ItemRenderType.INVENTORY) || (aType == IItemRenderer.ItemRenderType.EQUIPPED) || (aType == IItemRenderer.ItemRenderType.ENTITY);
+ }
+
+ public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType aType, ItemStack aStack, IItemRenderer.ItemRendererHelper aHelper)
+ {
+ if (GT_Utility.isStackInvalid(aStack)) {
+ return false;
+ }
+ return aType == IItemRenderer.ItemRenderType.ENTITY;
+ }
+
+ public void renderItem(IItemRenderer.ItemRenderType type, ItemStack aStack, Object... data)
+ {
+ if (GT_Utility.isStackInvalid(aStack)) {
+ return;
+ }
+ short aMetaData = (short)aStack.getItemDamage();
+ if (aMetaData < 0) {
+ return;
+ }
+ GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item)aStack.getItem();
+
+
+ GL11.glEnable(3042);
+ if (type == IItemRenderer.ItemRenderType.ENTITY) {
+ if (RenderItem.renderInFrame)
+ {
+ GL11.glScalef(0.85F, 0.85F, 0.85F);
+ GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glTranslated(-0.5D, -0.42D, 0.0D);
+ }
+ else
+ {
+ GL11.glTranslated(-0.5D, -0.42D, 0.0D);
+ }
+ }
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ if (aMetaData < aItem.mOffset)
+ {
+ IIconContainer aIcon = aItem.getIconContainer(aMetaData);
+ IIcon tOverlay = null;IIcon tFluidIcon = null;
+ IIcon tIcon;
+ if (aIcon == null)
+ {
+ tIcon = aStack.getIconIndex();
+ }
+ else
+ {
+ tIcon = aIcon.getIcon();
+ tOverlay = aIcon.getOverlayIcon();
+ }
+ if (tIcon == null) {
+ return;
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, true);
+ if ((tOverlay != null) && (tFluid != null) && (tFluid.getFluid() != null)) {
+ tFluidIcon = tFluid.getFluid().getIcon(tFluid);
+ }
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(770, 771);
+ if (tFluidIcon == null)
+ {
+ short[] tModulation = aItem.getRGBa(aStack);
+ GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F);
+ }
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ if (tFluidIcon != null)
+ {
+ assert (tFluid != null);
+ int tColor = tFluid.getFluid().getColor(tFluid);
+ GL11.glColor3f((tColor >> 16 & 0xFF) / 255.0F, (tColor >> 8 & 0xFF) / 255.0F, (tColor & 0xFF) / 255.0F);
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
+ GL11.glBlendFunc(770, 771);
+ GL11.glDepthFunc(514);
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tFluidIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tFluidIcon.getMaxU(), tFluidIcon.getMinV(), tFluidIcon.getMinU(), tFluidIcon.getMaxV(), tFluidIcon.getIconWidth(), tFluidIcon.getIconHeight(), 0.0625F);
+ }
+ GL11.glDepthFunc(515);
+ }
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ if (tOverlay != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(770, 771);
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tOverlay.getMaxU(), tOverlay.getMinV(), tOverlay.getMinU(), tOverlay.getMaxV(), tOverlay.getIconWidth(), tOverlay.getIconHeight(), 0.0625F);
+ }
+ }
+ }
+ else
+ {
+ IIcon tIcon;
+ if (aItem.mIconList[(aMetaData - aItem.mOffset)].length > 1)
+ {
+ Long[] tStats = (Long[])aItem.mElectricStats.get(Short.valueOf(aMetaData));
+
+ if ((tStats != null) && (tStats[3].longValue() < 0L))
+ {
+ long tCharge = aItem.getRealCharge(aStack);
+
+ if (tCharge <= 0L)
+ {
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][1];
+ }
+ else
+ {
+
+ if (tCharge >= tStats[0].longValue()) {
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][8];
+ } else {
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][(7 - (int)java.lang.Math.max(0L, java.lang.Math.min(5L, (tStats[0].longValue() - tCharge) * 6L / tStats[0].longValue())))];
+ }
+ }
+ }
+ else
+ {
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0];
+ }
+ }
+ else
+ {
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0];
+ }
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(770, 771);
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ }
+ GL11.glDisable(3042);
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java b/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java
new file mode 100644
index 0000000000..f905cc0eeb
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java
@@ -0,0 +1,208 @@
+package gregtech.common.render;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Utility;
+import java.util.HashMap;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.client.renderer.texture.TextureManager;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.IItemRenderer.ItemRenderType;
+import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
+import net.minecraftforge.client.MinecraftForgeClient;
+import org.lwjgl.opengl.GL11;
+
+public class GT_MetaGenerated_Tool_Renderer
+ implements IItemRenderer
+{
+ public GT_MetaGenerated_Tool_Renderer()
+ {
+ for (GT_MetaGenerated_Tool tItem : GT_MetaGenerated_Tool.sInstances.values()) {
+ if (tItem != null) {
+ MinecraftForgeClient.registerItemRenderer(tItem, this);
+ }
+ }
+ }
+
+ public boolean handleRenderType(ItemStack aStack, IItemRenderer.ItemRenderType aType)
+ {
+ if ((GT_Utility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0)) {
+ return false;
+ }
+ return (aType == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) || (aType == IItemRenderer.ItemRenderType.INVENTORY) || (aType == IItemRenderer.ItemRenderType.EQUIPPED) || (aType == IItemRenderer.ItemRenderType.ENTITY);
+ }
+
+ public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType aType, ItemStack aStack, IItemRenderer.ItemRendererHelper aHelper)
+ {
+ if (GT_Utility.isStackInvalid(aStack)) {
+ return false;
+ }
+ return aType == IItemRenderer.ItemRenderType.ENTITY;
+ }
+
+ public void renderItem(IItemRenderer.ItemRenderType aType, ItemStack aStack, Object... data)
+ {
+ if (GT_Utility.isStackInvalid(aStack)) {
+ return;
+ }
+ GT_MetaGenerated_Tool aItem = (GT_MetaGenerated_Tool)aStack.getItem();
+ GL11.glEnable(3042);
+ if (aType == IItemRenderer.ItemRenderType.ENTITY) {
+ if (RenderItem.renderInFrame)
+ {
+ GL11.glScalef(0.85F, 0.85F, 0.85F);
+ GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glTranslated(-0.5D, -0.42D, 0.0D);
+ }
+ else
+ {
+ GL11.glTranslated(-0.5D, -0.42D, 0.0D);
+ }
+ }
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+
+ IToolStats tToolStats = aItem.getToolStats(aStack);
+ if (tToolStats != null)
+ {
+ IIconContainer aIcon = tToolStats.getIcon(false, aStack);
+ if (aIcon != null)
+ {
+ IIcon tIcon = aIcon.getIcon();IIcon tOverlay = aIcon.getOverlayIcon();
+ if (tIcon != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ short[] tModulation = tToolStats.getRGBa(false, aStack);
+ GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ }
+ if (tOverlay != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tOverlay.getMaxU(), tOverlay.getMinV(), tOverlay.getMinU(), tOverlay.getMaxV(), tOverlay.getIconWidth(), tOverlay.getIconHeight(), 0.0625F);
+ }
+ }
+ }
+ aIcon = tToolStats.getIcon(true, aStack);
+ if (aIcon != null)
+ {
+ IIcon tIcon = aIcon.getIcon();IIcon tOverlay = aIcon.getOverlayIcon();
+ if (tIcon != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ short[] tModulation = tToolStats.getRGBa(true, aStack);
+ GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ }
+ if (tOverlay != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tOverlay.getMaxU(), tOverlay.getMinV(), tOverlay.getMinU(), tOverlay.getMaxV(), tOverlay.getIconWidth(), tOverlay.getIconHeight(), 0.0625F);
+ }
+ }
+ }
+ if ((aType == IItemRenderer.ItemRenderType.INVENTORY) && (GT_MetaGenerated_Tool.getPrimaryMaterial(aStack) != Materials._NULL))
+ {
+ long tDamage = GT_MetaGenerated_Tool.getToolDamage(aStack);long tMaxDamage = GT_MetaGenerated_Tool.getToolMaxDamage(aStack);
+ if (tDamage <= 0L) {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.DURABILITY_BAR[8];
+ } else if (tDamage >= tMaxDamage) {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.DURABILITY_BAR[0];
+ } else {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.DURABILITY_BAR[((int)java.lang.Math.max(0L, java.lang.Math.min(7L, (tMaxDamage - tDamage) * 8L / tMaxDamage)))];
+ }
+ if (aIcon != null)
+ {
+ IIcon tIcon = aIcon.getIcon();IIcon tOverlay = aIcon.getOverlayIcon();
+ if (tIcon != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ }
+ if (tOverlay != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tOverlay.getMaxU(), tOverlay.getMinV(), tOverlay.getMinU(), tOverlay.getMaxV(), tOverlay.getIconWidth(), tOverlay.getIconHeight(), 0.0625F);
+ }
+ }
+ }
+ Long[] tStats = aItem.getElectricStats(aStack);
+ if ((tStats != null) && (tStats[3].longValue() < 0L))
+ {
+ long tCharge = aItem.getRealCharge(aStack);
+ if (tCharge <= 0L) {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.ENERGY_BAR[0];
+ } else if (tCharge >= tStats[0].longValue()) {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.ENERGY_BAR[8];
+ } else {
+ aIcon = gregtech.api.enums.Textures.ItemIcons.ENERGY_BAR[(7 - (int)java.lang.Math.max(0L, java.lang.Math.min(6L, (tStats[0].longValue() - tCharge) * 7L / tStats[0].longValue())))];
+ }
+ }
+ else
+ {
+ aIcon = null;
+ }
+ if (aIcon != null)
+ {
+ IIcon tIcon = aIcon.getIcon();IIcon tOverlay = aIcon.getOverlayIcon();
+ if (tIcon != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
+ }
+ }
+ if (tOverlay != null)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(aIcon.getTextureFile());
+ GL11.glBlendFunc(770, 771);
+ if (aType.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, tOverlay.getMaxU(), tOverlay.getMinV(), tOverlay.getMinU(), tOverlay.getMaxV(), tOverlay.getIconWidth(), tOverlay.getIconHeight(), 0.0625F);
+ }
+ }
+ }
+ }
+ }
+ GL11.glDisable(3042);
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_RenderUtil.java b/src/main/java/gregtech/common/render/GT_RenderUtil.java
new file mode 100644
index 0000000000..708bf1934b
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_RenderUtil.java
@@ -0,0 +1,36 @@
+package gregtech.common.render;
+
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+
+public class GT_RenderUtil
+{
+ public static void renderItemIcon(IIcon icon, double size, double z, float nx, float ny, float nz)
+ {
+ renderItemIcon(icon, 0.0D, 0.0D, size, size, z, nx, ny, nz);
+ }
+
+ public static void renderItemIcon(IIcon icon, double xStart, double yStart, double xEnd, double yEnd, double z, float nx, float ny, float nz)
+ {
+ if (icon == null) {
+ return;
+ }
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(nx, ny, nz);
+ if (nz > 0.0F)
+ {
+ Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV());
+ Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV());
+ Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV());
+ Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV());
+ }
+ else
+ {
+ Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV());
+ Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV());
+ Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV());
+ Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV());
+ }
+ Tessellator.instance.draw();
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_Renderer_Block.java b/src/main/java/gregtech/common/render/GT_Renderer_Block.java
new file mode 100644
index 0000000000..b71c5abf97
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_Renderer_Block.java
@@ -0,0 +1,657 @@
+package gregtech.common.render;
+
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+import cpw.mods.fml.client.registry.RenderingRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity;
+import gregtech.api.interfaces.tileentity.ITexturedTileEntity;
+import gregtech.common.blocks.GT_Block_Machines;
+import gregtech.common.blocks.GT_Block_Ores;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import org.lwjgl.opengl.GL11;
+
+public class GT_Renderer_Block
+ implements ISimpleBlockRenderingHandler
+{
+ public final int mRenderID;
+ public static GT_Renderer_Block INSTANCE;
+
+ public GT_Renderer_Block()
+ {
+ this.mRenderID = RenderingRegistry.getNextAvailableRenderId();
+ INSTANCE = this;RenderingRegistry.registerBlockHandler(this);
+ }
+
+ public void renderInventoryBlock(Block aBlock, int aMeta, int aModelID, RenderBlocks aRenderer)
+ {
+ if ((aBlock instanceof GT_Block_Machines))
+ {
+ if ((aMeta > 0) && (aMeta < GregTech_API.METATILEENTITIES.length) && (GregTech_API.METATILEENTITIES[aMeta] != null) &&
+ (!GregTech_API.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer))) {
+ renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer);
+ }
+ }
+ else if ((aBlock instanceof GT_Block_Ores))
+ {
+ GT_TileEntity_Ores tTileEntity = new GT_TileEntity_Ores();
+ tTileEntity.mMetaData = ((short)aMeta);
+
+ aBlock.setBlockBoundsForItemRender();
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+
+ GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F);
+ renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)0), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F);
+ renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)1), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F);
+ renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)2), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F);
+ renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)3), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F);
+ renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)4), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F);
+ renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tTileEntity.getTexture((byte)5), true);
+ Tessellator.instance.draw();
+ }
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ }
+
+ private static void renderNormalInventoryMetaTileEntity(Block aBlock, int aMeta, RenderBlocks aRenderer)
+ {
+ if ((aMeta <= 0) || (aMeta >= GregTech_API.METATILEENTITIES.length)) {
+ return;
+ }
+ IMetaTileEntity tMetaTileEntity = GregTech_API.METATILEENTITIES[aMeta];
+ if (tMetaTileEntity == null) {
+ return;
+ }
+ aBlock.setBlockBoundsForItemRender();
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+
+ GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ if ((tMetaTileEntity.getBaseMetaTileEntity() instanceof IPipeRenderedTileEntity))
+ {
+ float tThickness = ((IPipeRenderedTileEntity)tMetaTileEntity.getBaseMetaTileEntity()).getThickNess();float sp = (1.0F - tThickness) / 2.0F;
+
+ aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F);
+ renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)0, (byte)9, (byte)-1, false, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F);
+ renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)1, (byte)9, (byte)-1, false, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F);
+ renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)2, (byte)9, (byte)-1, false, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F);
+ renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)3, (byte)9, (byte)-1, false, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F);
+ renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)4, (byte)9, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F);
+ renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)5, (byte)9, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+ }
+ else
+ {
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F);
+ renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)0, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F);
+ renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)1, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F);
+ renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)2, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F);
+ renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)3, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F);
+ renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)4, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F);
+ renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(tMetaTileEntity.getBaseMetaTileEntity(), (byte)5, (byte)4, (byte)-1, true, false), true);
+ Tessellator.instance.draw();
+ }
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ }
+
+ public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, RenderBlocks aRenderer)
+ {
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if (aTileEntity == null) {
+ return false;
+ }
+ if (((aTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity)aTileEntity).getMetaTileEntity() != null) && (((IGregTechTileEntity)aTileEntity).getMetaTileEntity().renderInWorld(aWorld, aX, aY, aZ, aBlock, aRenderer))) {
+ return true;
+ }
+ if ((aTileEntity instanceof IPipeRenderedTileEntity)) {
+ return renderPipeBlock(aWorld, aX, aY, aZ, aBlock, (IPipeRenderedTileEntity)aTileEntity, aRenderer);
+ }
+ return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer);
+ }
+
+ public static boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer)
+ {
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ if ((tTileEntity instanceof ITexturedTileEntity)) {
+ return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, new ITexture[][] { ((ITexturedTileEntity)tTileEntity).getTexture((byte) 0), ((ITexturedTileEntity)tTileEntity).getTexture((byte) 1), ((ITexturedTileEntity)tTileEntity).getTexture((byte) 2), ((ITexturedTileEntity)tTileEntity).getTexture((byte) 3), ((ITexturedTileEntity)tTileEntity).getTexture((byte) 4), ((ITexturedTileEntity)tTileEntity).getTexture((byte) 5) });
+ }
+ return false;
+ }
+
+ public static boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer, ITexture[][] aTextures)
+ {
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[0], true);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[1], true);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[2], true);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[3], true);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[4], true);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[5], true);
+ return true;
+ }
+
+ public static boolean renderPipeBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, IPipeRenderedTileEntity aTileEntity, RenderBlocks aRenderer)
+ {
+ byte aConnections = aTileEntity.getConnections();
+ if ((aConnections & 0xC0) != 0) {
+ return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer);
+ }
+ float tThickness = aTileEntity.getThickNess();
+ if (tThickness >= 0.99F) {
+ return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer);
+ }
+ float sp = (1.0F - tThickness) / 2.0F;
+
+ byte tConnections = 0;
+ for (byte i = 0; i < 6; i = (byte)(i + 1)) {
+ if ((aConnections & 1 << i) != 0) {
+ tConnections = (byte)(tConnections | 1 << (i + 2) % 6);
+ }
+ }
+ boolean[] tIsCovered = new boolean[6];
+ for (byte i = 0; i < 6; i = (byte)(i + 1)) {
+ tIsCovered[i] = (aTileEntity.getCoverIDAtSide(i) != 0 ? true : false);
+ }
+ if ((tIsCovered[0]) && (tIsCovered[1]) && (tIsCovered[2]) && (tIsCovered[3]) && (tIsCovered[4]) && (tIsCovered[5])) {
+ return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer);
+ }
+ ITexture[][] tIcons = new ITexture[6][];ITexture[][] tCovers = new ITexture[6][];
+ for (byte i = 0; i < 6; i = (byte)(i + 1))
+ {
+ tCovers[i] = aTileEntity.getTexture(i);
+ tIcons[i] = aTileEntity.getTextureUncovered(i);
+ }
+ if (tConnections == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ }
+ else if (tConnections == 3)
+ {
+ aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ }
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ }
+ }
+ else if (tConnections == 12)
+ {
+ aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, 1.0F, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ }
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ }
+ }
+ else if (tConnections == 48)
+ {
+ aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ }
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ }
+ }
+ else
+ {
+ if ((tConnections & 0x1) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(0.0F, sp, sp, sp, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ }
+ }
+ if ((tConnections & 0x2) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(sp + tThickness, sp, sp, 1.0F, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ }
+ }
+ if ((tConnections & 0x4) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, sp, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ }
+ }
+ if ((tConnections & 0x8) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(sp, sp + tThickness, sp, sp + tThickness, 1.0F, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ }
+ }
+ if ((tConnections & 0x10) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, sp);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[2], false);
+ }
+ }
+ if ((tConnections & 0x20) == 0)
+ {
+ aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ }
+ else
+ {
+ aBlock.setBlockBounds(sp, sp, sp + tThickness, sp + tThickness, sp + tThickness, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[1], false);
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[5], false);
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[3], false);
+ }
+ }
+ }
+ if (tIsCovered[0])
+ {
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ }
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ }
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ }
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[0], false);
+ }
+ }
+ if (tIsCovered[1])
+ {
+ aBlock.setBlockBounds(0.0F, 0.875F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ }
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ }
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ }
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[1], false);
+ }
+ }
+ if (tIsCovered[2])
+ {
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.125F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ }
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ }
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ }
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[2], false);
+ }
+ }
+ if (tIsCovered[3])
+ {
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.875F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ }
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ }
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ if (!tIsCovered[4]) {
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ }
+ if (!tIsCovered[5]) {
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[3], false);
+ }
+ }
+ if (tIsCovered[4])
+ {
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 0.125F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ }
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ }
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ }
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ }
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[4], false);
+ }
+ if (tIsCovered[5])
+ {
+ aBlock.setBlockBounds(0.875F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ if (!tIsCovered[0]) {
+ renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ }
+ if (!tIsCovered[1]) {
+ renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ }
+ if (!tIsCovered[2]) {
+ renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ }
+ if (!tIsCovered[3]) {
+ renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ }
+ renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[5], false);
+ }
+ aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+
+ return true;
+ }
+
+ public static void renderNegativeYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY - 1, aZ, 0))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY - 1 : aY, aZ));
+ }
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderYNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public static void renderPositiveYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY + 1, aZ, 1))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY + 1 : aY, aZ));
+ }
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderYPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public static void renderNegativeZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ - 1, 2))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ - 1 : aZ));
+ }
+ aRenderer.flipTexture = (!aFullBlock);
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderZNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public static void renderPositiveZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ + 1, 3))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ + 1 : aZ));
+ }
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderZPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public static void renderNegativeXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX - 1, aY, aZ, 4))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX - 1 : aX, aY, aZ));
+ }
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderXNeg(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public static void renderPositiveXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ, ITexture[] aIcon, boolean aFullBlock)
+ {
+ if (aWorld != null)
+ {
+ if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX + 1, aY, aZ, 5))) {
+ return;
+ }
+ Tessellator.instance.setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX + 1 : aX, aY, aZ));
+ }
+ aRenderer.flipTexture = (!aFullBlock);
+ if (aIcon != null) {
+ for (int i = 0; i < aIcon.length; i++) {
+ if (aIcon[i] != null) {
+ aIcon[i].renderXPos(aRenderer, aBlock, aX, aY, aZ);
+ }
+ }
+ }
+ aRenderer.flipTexture = false;
+ }
+
+ public boolean shouldRender3DInInventory(int aModel)
+ {
+ return true;
+ }
+
+ public int getRenderId()
+ {
+ return this.mRenderID;
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_Renderer_Entity_Arrow.java b/src/main/java/gregtech/common/render/GT_Renderer_Entity_Arrow.java
new file mode 100644
index 0000000000..ba656458f5
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_Renderer_Entity_Arrow.java
@@ -0,0 +1,23 @@
+package gregtech.common.render;
+
+import cpw.mods.fml.client.registry.RenderingRegistry;
+import net.minecraft.client.renderer.entity.RenderArrow;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class GT_Renderer_Entity_Arrow
+ extends RenderArrow
+{
+ private final ResourceLocation mTexture;
+
+ public GT_Renderer_Entity_Arrow(Class aArrowClass, String aTextureName)
+ {
+ this.mTexture = new ResourceLocation("gregtech:textures/entity/" + aTextureName + ".png");
+ RenderingRegistry.registerEntityRenderingHandler(aArrowClass, this);
+ }
+
+ protected ResourceLocation getEntityTexture(Entity p_110775_1_)
+ {
+ return this.mTexture;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java
new file mode 100644
index 0000000000..f8bf845ea8
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java
@@ -0,0 +1,75 @@
+package gregtech.common.tileentities.automation;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_ChestBuffer;
+import gregtech.common.gui.GT_GUIContainer_ChestBuffer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_ChestBuffer
+ extends GT_MetaTileEntity_Buffer
+{
+ public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items");
+ }
+
+ public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription)
+ {
+ super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription);
+ }
+
+ public GT_MetaTileEntity_ChestBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ChestBuffer(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ public ITexture getOverlayIcon()
+ {
+ return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_CHESTBUFFER);
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return aIndex < this.mInventory.length - 1;
+ }
+
+ protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer)
+ {
+ fillStacksIntoFirstSlots();
+ super.moveItems(aBaseMetaTileEntity, aTimer);
+ fillStacksIntoFirstSlots();
+ }
+
+ protected void fillStacksIntoFirstSlots()
+ {
+ for (int i = 0; i < this.mInventory.length - 1; i++) {
+ for (int j = i + 1; j < this.mInventory.length - 1; j++) {
+ if ((this.mInventory[j] != null) && ((this.mInventory[i] == null) || (GT_Utility.areStacksEqual(this.mInventory[i], this.mInventory[j])))) {
+ GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte)64, (byte)1, (byte)64, (byte)1);
+ }
+ }
+ }
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java
new file mode 100644
index 0000000000..09aac62b2e
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java
@@ -0,0 +1,88 @@
+package gregtech.common.tileentities.automation;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_Filter;
+import gregtech.common.gui.GT_GUIContainer_Filter;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Filter
+ extends GT_MetaTileEntity_Buffer
+{
+ public boolean bIgnoreNBT = false;
+ public boolean bInvertFilter = false;
+
+ public GT_MetaTileEntity_Filter(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 19, "Filtering incoming Items");
+ }
+
+ public GT_MetaTileEntity_Filter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Filter(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ public ITexture getOverlayIcon()
+ {
+ return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_FILTER);
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return aIndex < 9;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Filter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Filter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("bInvertFilter", this.bInvertFilter);
+ aNBT.setBoolean("bIgnoreNBT", this.bIgnoreNBT);
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ super.loadNBTData(aNBT);
+ this.bInvertFilter = aNBT.getBoolean("bInvertFilter");
+ this.bIgnoreNBT = aNBT.getBoolean("bIgnoreNBT");
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {
+ return false;
+ }
+ if (this.bInvertFilter)
+ {
+ for (byte i = 9; i < 18; i = (byte)(i + 1)) {
+ if (GT_Utility.areStacksEqual(this.mInventory[i], aStack, this.bIgnoreNBT)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return GT_Utility.areStacksEqual(this.mInventory[(aIndex + 9)], aStack, this.bIgnoreNBT);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java
new file mode 100644
index 0000000000..6790d1d717
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java
@@ -0,0 +1,107 @@
+package gregtech.common.tileentities.automation;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_Regulator;
+import gregtech.common.gui.GT_GUIContainer_Regulator;
+
+import java.util.Arrays;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Regulator
+ extends GT_MetaTileEntity_Buffer
+{
+ public int[] mTargetSlots = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ public GT_MetaTileEntity_Regulator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 19, "Regulating incoming Items");
+ }
+
+ public GT_MetaTileEntity_Regulator(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Regulator(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ public ITexture getOverlayIcon()
+ {
+ return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_REGULATOR);
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return aIndex < 9;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Regulator(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Regulator(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("mTargetSlot1", this.mTargetSlots[0]);
+ aNBT.setInteger("mTargetSlot2", this.mTargetSlots[1]);
+ aNBT.setInteger("mTargetSlot3", this.mTargetSlots[2]);
+ aNBT.setInteger("mTargetSlot4", this.mTargetSlots[3]);
+ aNBT.setInteger("mTargetSlot5", this.mTargetSlots[4]);
+ aNBT.setInteger("mTargetSlot6", this.mTargetSlots[5]);
+ aNBT.setInteger("mTargetSlot7", this.mTargetSlots[6]);
+ aNBT.setInteger("mTargetSlot8", this.mTargetSlots[7]);
+ aNBT.setInteger("mTargetSlot9", this.mTargetSlots[8]);
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ super.loadNBTData(aNBT);
+ this.mTargetSlots[0] = aNBT.getInteger("mTargetSlot1");
+ this.mTargetSlots[1] = aNBT.getInteger("mTargetSlot2");
+ this.mTargetSlots[2] = aNBT.getInteger("mTargetSlot3");
+ this.mTargetSlots[3] = aNBT.getInteger("mTargetSlot4");
+ this.mTargetSlots[4] = aNBT.getInteger("mTargetSlot5");
+ this.mTargetSlots[5] = aNBT.getInteger("mTargetSlot6");
+ this.mTargetSlots[6] = aNBT.getInteger("mTargetSlot7");
+ this.mTargetSlots[7] = aNBT.getInteger("mTargetSlot8");
+ this.mTargetSlots[8] = aNBT.getInteger("mTargetSlot9");
+ }
+
+ public void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer)
+ {
+ int i = 0;
+ for (int tCosts = 0; i < 9; i++) {
+ if (this.mInventory[(i + 9)] != null)
+ {
+ tCosts = GT_Utility.moveOneItemStackIntoSlot(getBaseMetaTileEntity(), getBaseMetaTileEntity().getTileEntityAtSide(getBaseMetaTileEntity().getBackFacing()), getBaseMetaTileEntity().getBackFacing(), this.mTargetSlots[i], Arrays.asList(new ItemStack[] { this.mInventory[(i + 9)] }), false, (byte)this.mInventory[(i + 9)].stackSize, (byte)this.mInventory[(i + 9)].stackSize, (byte)64, (byte)1) * 3;
+ if (tCosts > 0)
+ {
+ this.mSuccess = 50;getBaseMetaTileEntity().decreaseStoredEnergyUnits(tCosts, true); break;
+ }
+ }
+ }
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (GT_Utility.areStacksEqual(aStack, this.mInventory[(aIndex + 9)]));
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java
new file mode 100644
index 0000000000..46c0fde6f5
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java
@@ -0,0 +1,45 @@
+package gregtech.common.tileentities.automation;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.common.gui.GT_Container_SuperBuffer;
+import gregtech.common.gui.GT_GUIContainer_SuperBuffer;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_SuperBuffer
+ extends GT_MetaTileEntity_ChestBuffer
+{
+ public GT_MetaTileEntity_SuperBuffer(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 257, "Buffering up to 256 Stacks");
+ }
+
+ public GT_MetaTileEntity_SuperBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_SuperBuffer(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ public ITexture getOverlayIcon()
+ {
+ return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_SUPERBUFFER);
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_SuperBuffer(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_SuperBuffer(aPlayerInventory, aBaseMetaTileEntity);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java
new file mode 100644
index 0000000000..7af20757dd
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java
@@ -0,0 +1,159 @@
+package gregtech.common.tileentities.automation;
+
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_TypeFilter;
+import gregtech.common.gui.GT_GUIContainer_TypeFilter;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_TypeFilter
+ extends GT_MetaTileEntity_Buffer
+{
+ public boolean bNBTAllowed = false;
+ public boolean bInvertFilter = false;
+ public int mRotationIndex = 0;
+ public OrePrefixes mPrefix = OrePrefixes.ore;
+
+ public GT_MetaTileEntity_TypeFilter(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 11, "Filtering incoming Items by Type");
+ }
+
+ public GT_MetaTileEntity_TypeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_TypeFilter(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ public ITexture getOverlayIcon()
+ {
+ return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_TYPEFILTER);
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return aIndex < 9;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_TypeFilter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_TypeFilter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public void clickTypeIcon(boolean aRightClick)
+ {
+ if (getBaseMetaTileEntity().isServerSide())
+ {
+ for (int i = 0; i < OrePrefixes.values().length; i++) {
+ if (this.mPrefix == OrePrefixes.values()[i]) {
+ for (this.mPrefix = null; this.mPrefix == null; this.mPrefix = OrePrefixes.values()[i])
+ {
+ if (aRightClick)
+ {
+ do{
+ i--;
+ if (i < 0) {
+ i = OrePrefixes.values().length - 1;
+ }
+ }while(OrePrefixes.values()[i].mPrefixedItems.isEmpty());
+
+ }
+ else
+ {
+ do{
+ i++;
+ if (i >= OrePrefixes.values().length) {
+ i = 0;
+ }
+ }while(OrePrefixes.values()[i].mPrefixedItems.isEmpty());
+ }
+ if(!OrePrefixes.values()[i].mPrefixedItems.isEmpty() && OrePrefixes.values()[i].mPrefixInto == OrePrefixes.values()[i])
+ mPrefix = OrePrefixes.values()[i];
+ }
+ }
+ }
+ this.mRotationIndex = 0;
+ }
+ }
+
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ if ((getBaseMetaTileEntity().isServerSide()) && (aTick % 8L == 0L)) {
+ if (this.mPrefix.mPrefixedItems.isEmpty())
+ {
+ this.mInventory[9] = null;
+ }
+ else
+ {
+ this.mInventory[9] = GT_Utility.copyAmount(1L, new Object[] { this.mPrefix.mPrefixedItems.get(this.mRotationIndex = (this.mRotationIndex + 1) % this.mPrefix.mPrefixedItems.size()) });
+ if (this.mInventory[9].getItemDamage() == 32767) {
+ this.mInventory[9].setItemDamage(0);
+ }
+ this.mInventory[9].setStackDisplayName(this.mPrefix.toString());
+ }
+ }
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ super.saveNBTData(aNBT);
+ aNBT.setString("mPrefix", this.mPrefix.toString());
+ aNBT.setBoolean("bInvertFilter", this.bInvertFilter);
+ aNBT.setBoolean("bNBTAllowed", this.bNBTAllowed);
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ super.loadNBTData(aNBT);
+ this.mPrefix = OrePrefixes.getPrefix(aNBT.getString("mPrefix"), this.mPrefix);
+ this.bInvertFilter = aNBT.getBoolean("bInvertFilter");
+ this.bNBTAllowed = aNBT.getBoolean("bNBTAllowed");
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ boolean tAllowPrefix = this.mPrefix.contains(aStack);
+ if(this.mPrefix==OrePrefixes.ore){
+ ItemData tData = GT_OreDictUnificator.getItemData(aStack);
+ if(tData!=null&&tData.mPrefix!=null){
+ OrePrefixes tFix = tData.mPrefix;
+ if(tFix==OrePrefixes.oreBlackgranite||
+ tFix==OrePrefixes.oreDense||
+ tFix==OrePrefixes.oreEnd||
+ tFix==OrePrefixes.oreEndstone||
+ tFix==OrePrefixes.oreNether||
+ tFix==OrePrefixes.oreNetherrack||
+ tFix==OrePrefixes.oreNormal||
+ tFix==OrePrefixes.orePoor||
+ tFix==OrePrefixes.oreRedgranite||
+ tFix==OrePrefixes.oreRich||
+ tFix==OrePrefixes.oreSmall)tAllowPrefix=true;
+ }}
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && ((this.bNBTAllowed) || (!aStack.hasTagCompound())) && (tAllowPrefix != this.bInvertFilter);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java
new file mode 100644
index 0000000000..64b452e60c
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java
@@ -0,0 +1,330 @@
+package gregtech.common.tileentities.boilers;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public abstract class GT_MetaTileEntity_Boiler
+ extends GT_MetaTileEntity_BasicTank
+{
+ public int mTemperature = 20;
+ public int mProcessingEnergy = 0;
+ public int mLossTimer = 0;
+ public FluidStack mSteam = null;
+ public boolean mHadNoWater = false;
+
+ public GT_MetaTileEntity_Boiler(int aID, String aName, String aNameRegional, String aDescription, ITexture... aTextures)
+ {
+ super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Boiler(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ ITexture[] tmp = mTextures[aSide >= 2 ? aSide != aFacing ? 2 : ((byte)(aActive ? 4 : 3)) : aSide][aColorIndex + 1];
+ //mTextures[(aSide==aFacing?(aActive?4:3):aSide==GT_Utility.getOppositeSide(aFacing)?2:aSide==0?0:aSide==1?1:2)][aColorIndex+1];
+ if(aSide!=aFacing&&tmp.length==2){
+ tmp = new ITexture[]{tmp[0]};
+ }
+ return tmp;
+ }
+
+ public boolean isElectric()
+ {
+ return false;
+ }
+
+ public boolean isPneumatic()
+ {
+ return false;
+ }
+
+ public boolean isSteampowered()
+ {
+ return false;
+ }
+
+ public boolean isSimpleMachine()
+ {
+ return false;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean isAccessAllowed(EntityPlayer aPlayer)
+ {
+ return true;
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return true;
+ }
+
+ public int getProgresstime()
+ {
+ return this.mTemperature;
+ }
+
+ public int maxProgresstime()
+ {
+ return 500;
+ }
+
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer)
+ {
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ }
+ if (aPlayer != null) {
+ if (GT_Utility.areStacksEqual(aPlayer.getCurrentEquippedItem(), new ItemStack(Items.water_bucket, 1)))
+ {
+ fill(Materials.Water.getFluid(1000 * aPlayer.getCurrentEquippedItem().stackSize), true);
+ aPlayer.getCurrentEquippedItem().func_150996_a(Items.bucket);
+ }
+ else
+ {
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ }
+ }
+ return true;
+ }
+
+ public boolean doesFillContainers()
+ {
+ return true;
+ }
+
+ public boolean doesEmptyContainers()
+ {
+ return true;
+ }
+
+ public boolean canTankBeFilled()
+ {
+ return true;
+ }
+
+ public boolean canTankBeEmptied()
+ {
+ return true;
+ }
+
+ public boolean displaysItemStack()
+ {
+ return false;
+ }
+
+ public boolean displaysStackSize()
+ {
+ return false;
+ }
+
+ public boolean isFluidInputAllowed(FluidStack aFluid)
+ {
+ return GT_ModHandler.isWater(aFluid);
+ }
+
+ public FluidStack getDrainableStack()
+ {
+ return this.mSteam;
+ }
+
+ public FluidStack setDrainableStack(FluidStack aFluid)
+ {
+ this.mSteam = aFluid;return this.mSteam;
+ }
+
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCover)
+ {
+ return GregTech_API.getCoverBehavior(aCover.toStack()).isSimpleCover();
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("mLossTimer", this.mLossTimer);
+ aNBT.setInteger("mTemperature", this.mTemperature);
+ aNBT.setInteger("mProcessingEnergy", this.mProcessingEnergy);
+ if (this.mSteam != null) {
+ try
+ {
+ aNBT.setTag("mSteam", this.mSteam.writeToNBT(new NBTTagCompound()));
+ }
+ catch (Throwable e) {}
+ }
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ super.loadNBTData(aNBT);
+ this.mLossTimer = aNBT.getInteger("mLossTimer");
+ this.mTemperature = aNBT.getInteger("mTemperature");
+ this.mProcessingEnergy = aNBT.getInteger("mProcessingEnergy");
+ this.mSteam = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mSteam"));
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L))
+ {
+ if (this.mTemperature <= 20)
+ {
+ this.mTemperature = 20;
+ this.mLossTimer = 0;
+ }
+ if (++this.mLossTimer > 40)
+ {
+ this.mTemperature -= 1;
+ this.mLossTimer = 0;
+ }
+ for (byte i = 1; (this.mSteam != null) && (i < 6); i = (byte)(i + 1)) {
+ if (i != aBaseMetaTileEntity.getFrontFacing())
+ {
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(i);
+ if (tTileEntity != null)
+ {
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), Math.max(1, this.mSteam.amount / 2), false);
+ if (tDrained != null)
+ {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), tDrained, false);
+ if (tFilledAmount > 0) {
+ tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ }
+ if (aTick % 10L == 0L) {
+ if (this.mTemperature > 100)
+ {
+ if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0))
+ {
+ this.mHadNoWater = true;
+ }
+ else
+ {
+ if (this.mHadNoWater)
+ {
+ aBaseMetaTileEntity.doExplosion(2048L);
+ return;
+ }
+ this.mFluid.amount -= 1;
+ if (this.mSteam == null) {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ } else if (GT_ModHandler.isSteam(this.mSteam)) {
+ this.mSteam.amount += 150;
+ } else {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ }
+ }
+ }
+ else {
+ this.mHadNoWater = false;
+ }
+ }
+ if ((this.mSteam != null) &&
+ (this.mSteam.amount > 32000))
+ {
+ sendSound((byte)1);
+ this.mSteam.amount = 24000;
+ }
+ if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) &&
+ (this.mInventory[2] != null)) {
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Coal))))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Charcoal)))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], "fuelCoke"))
+ {
+ this.mProcessingEnergy += 640;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(2) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Lignite))))
+ {
+ this.mProcessingEnergy += 40;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(8) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ }
+ if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && (aTick % 12L == 0L))
+ {
+ this.mProcessingEnergy -= 2;
+ this.mTemperature += 1;
+ }
+ aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0);
+ }
+ }
+
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (aIndex == 1) || (aIndex == 3);
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return aIndex == 2;
+ }
+
+ public void doSound(byte aIndex, double aX, double aY, double aZ)
+ {
+ if (aIndex == 1)
+ {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(4)), 2, 1.0F, aX, aY, aZ);
+ for (int l = 0; l < 8; l++) {
+ getBaseMetaTileEntity().getWorld().spawnParticle("largesmoke", aX - 0.5D + Math.random(), aY, aZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D);
+ }
+ }
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+ public int getTankPressure()
+ {
+ return 100;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java
new file mode 100644
index 0000000000..e683eb09aa
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java
@@ -0,0 +1,176 @@
+package gregtech.common.tileentities.boilers;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.gui.GT_Container_Boiler;
+import gregtech.common.gui.GT_GUIContainer_Boiler;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaTileEntity_Boiler_Bronze
+ extends GT_MetaTileEntity_Boiler
+{
+ public GT_MetaTileEntity_Boiler_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "An early way to get Steam Power", new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Boiler_Bronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[5][17][];
+ for (byte i = -1; i < 16; i++)
+ {
+ rTextures[0][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[1][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+ rTextures[2][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+ rTextures[3][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT) };
+ rTextures[4][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) };
+ }
+ return rTextures;
+ }
+
+ public int maxProgresstime()
+ {
+ return 500;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 16000);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "BronzeBoiler.png", 16000);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Boiler_Bronze(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L))
+ {
+ if (this.mTemperature <= 20)
+ {
+ this.mTemperature = 20;
+ this.mLossTimer = 0;
+ }
+ if (++this.mLossTimer > 45)
+ {
+ this.mTemperature -= 1;
+ this.mLossTimer = 0;
+ }
+ for (byte i = 1; (this.mSteam != null) && (i < 6); i = (byte)(i + 1)) {
+ if (i != aBaseMetaTileEntity.getFrontFacing())
+ {
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(i);
+ if (tTileEntity != null)
+ {
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), Math.max(1, this.mSteam.amount / 2), false);
+ if (tDrained != null)
+ {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), tDrained, false);
+ if (tFilledAmount > 0) {
+ tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ }
+ if (aTick % 25L == 0L) {
+ if (this.mTemperature > 100)
+ {
+ if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0))
+ {
+ this.mHadNoWater = true;
+ }
+ else
+ {
+ if (this.mHadNoWater)
+ {
+ aBaseMetaTileEntity.doExplosion(2048L);
+ return;
+ }
+ this.mFluid.amount -= 1;
+ if (this.mSteam == null) {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ } else if (GT_ModHandler.isSteam(this.mSteam)) {
+ this.mSteam.amount += 150;
+ } else {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ }
+ }
+ }
+ else {
+ this.mHadNoWater = false;
+ }
+ }
+ if ((this.mSteam != null) &&
+ (this.mSteam.amount > 16000))
+ {
+ sendSound((byte)1);
+ this.mSteam.amount = 12000;
+ }
+ if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) &&
+ (this.mInventory[2] != null)) {
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Coal))))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ else if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Charcoal))))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], "fuelCoke"))
+ {
+ this.mProcessingEnergy += 640;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(2) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Lignite))))
+ {
+ this.mProcessingEnergy += 40;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(8) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ }
+ if ((this.mTemperature < 500) && (this.mProcessingEnergy > 0) && (aTick % 12L == 0L))
+ {
+ this.mProcessingEnergy -= 1;
+ this.mTemperature += 1;
+ }
+ aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java
new file mode 100644
index 0000000000..be715de602
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java
@@ -0,0 +1,160 @@
+package gregtech.common.tileentities.boilers;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.gui.GT_Container_Boiler;
+import gregtech.common.gui.GT_GUIContainer_Boiler;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaTileEntity_Boiler_Lava
+ extends GT_MetaTileEntity_Boiler
+{
+ public GT_MetaTileEntity_Boiler_Lava(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "A Boiler running off Lava", new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Boiler_Lava(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[5][17][];
+ for (byte i = -1; i < 16; i++){
+ rTextures[0][(i + 1)] = new ITexture [] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[1][(i + 1)] = new ITexture [] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+ rTextures[2][(i + 1)] = new ITexture [] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+ rTextures[3][(i + 1)] = new ITexture [] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT) };
+ rTextures[4][(i + 1)] = new ITexture [] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE) };
+ }
+ return rTextures;
+ }
+
+ public int maxProgresstime()
+ {
+ return 1000;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 32000);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SteelBoiler.png", 32000);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Boiler_Lava(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L))
+ {
+ if (this.mTemperature <= 20)
+ {
+ this.mTemperature = 20;
+ this.mLossTimer = 0;
+ }
+ if (++this.mLossTimer > 20)
+ {
+ this.mTemperature -= 1;
+ this.mLossTimer = 0;
+ }
+ for (byte i = 1; (this.mSteam != null) && (i < 6); i = (byte)(i + 1)) {
+ if (i != aBaseMetaTileEntity.getFrontFacing())
+ {
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(i);
+ if (tTileEntity != null)
+ {
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), Math.max(1, this.mSteam.amount / 2), false);
+ if (tDrained != null)
+ {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), tDrained, false);
+ if (tFilledAmount > 0) {
+ tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ }
+ if (aTick % 10L == 0L) {
+ if (this.mTemperature > 100)
+ {
+ if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0))
+ {
+ this.mHadNoWater = true;
+ }
+ else
+ {
+ if (this.mHadNoWater)
+ {
+ aBaseMetaTileEntity.doExplosion(2048L);
+ return;
+ }
+ this.mFluid.amount -= 1;
+ if (this.mSteam == null) {
+ this.mSteam = GT_ModHandler.getSteam(300L);
+ } else if (GT_ModHandler.isSteam(this.mSteam)) {
+ this.mSteam.amount += 300;
+ } else {
+ this.mSteam = GT_ModHandler.getSteam(300L);
+ }
+ }
+ }
+ else {
+ this.mHadNoWater = false;
+ }
+ }
+ if ((this.mSteam != null) &&
+ (this.mSteam.amount > 32000))
+ {
+ sendSound((byte)1);
+ this.mSteam.amount = 24000;
+ }
+ if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) &&
+ (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.bucket.get(Materials.Lava))))
+ {
+ this.mProcessingEnergy += 1000;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L));
+ }
+ if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && (aTick % 8L == 0L))
+ {
+ this.mProcessingEnergy -= 3;
+ this.mTemperature += 1;
+ }
+ aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0);
+ }
+ }
+
+ public final int fill(FluidStack aFluid, boolean doFill)
+ {
+ if ((GT_ModHandler.isLava(aFluid)) && (this.mProcessingEnergy < 50))
+ {
+ int tFilledAmount = Math.min(50, aFluid.amount);
+ if (doFill) {
+ this.mProcessingEnergy += tFilledAmount;
+ }
+ return tFilledAmount;
+ }
+ return super.fill(aFluid, doFill);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
new file mode 100644
index 0000000000..346b451147
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
@@ -0,0 +1,152 @@
+package gregtech.common.tileentities.boilers;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_Boiler;
+import gregtech.common.gui.GT_GUIContainer_Boiler;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaTileEntity_Boiler_Solar
+ extends GT_MetaTileEntity_Boiler
+{
+ public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Steam Power by the Sun", new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[4][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_SOLAR) };
+ rTextures[1][(i + 1)] = tmp1;
+ ITexture[] tmp2 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[2][(i + 1)] = tmp2;
+ ITexture[] tmp3 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+ rTextures[3][(i + 1)] = tmp3;
+ }
+ return rTextures;
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ return mTextures[aSide >= 2 ? ((byte)(aSide != aFacing ? 2 : 3)) : aSide][aColorIndex + 1];
+ }
+
+ public int maxProgresstime()
+ {
+ return 500;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 16000);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarBoiler.png", 16000);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Boiler_Solar(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L))
+ {
+ if (this.mTemperature <= 20)
+ {
+ this.mTemperature = 20;
+ this.mLossTimer = 0;
+ }
+ if (++this.mLossTimer > 45)
+ {
+ this.mTemperature -= 1;
+ this.mLossTimer = 0;
+ }
+ if (this.mSteam != null)
+ {
+ byte i = aBaseMetaTileEntity.getFrontFacing();
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(i);
+ if (tTileEntity != null)
+ {
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), Math.max(1, this.mSteam.amount / 2), false);
+ if (tDrained != null)
+ {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), tDrained, false);
+ if (tFilledAmount > 0) {
+ tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ if (aTick % 25L == 0L) {
+ if (this.mTemperature > 100)
+ {
+ if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0))
+ {
+ this.mHadNoWater = true;
+ }
+ else
+ {
+ if (this.mHadNoWater)
+ {
+ aBaseMetaTileEntity.doExplosion(2048L);
+ return;
+ }
+ this.mFluid.amount -= 1;
+ if (this.mSteam == null) {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ } else if (GT_ModHandler.isSteam(this.mSteam)) {
+ this.mSteam.amount += 150;
+ } else {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ }
+ }
+ }
+ else {
+ this.mHadNoWater = false;
+ }
+ }
+ if ((this.mSteam != null) &&
+ (this.mSteam.amount > 16000))
+ {
+ sendSound((byte)1);
+ this.mSteam.amount = 12000;
+ }
+ if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) && (aTick % 256L == 0L) && (!aBaseMetaTileEntity.getWorld().isThundering()))
+ {
+ boolean bRain = aBaseMetaTileEntity.getWorld().isRaining() && aBaseMetaTileEntity.getBiome().rainfall > 0.0F;
+ mProcessingEnergy += bRain && aBaseMetaTileEntity.getWorld().skylightSubtracted >= 4 || !aBaseMetaTileEntity.getSkyAtSide((byte)1) ? 0 : !bRain && aBaseMetaTileEntity.getWorld().isDaytime() ? 8 : 1;
+ }
+ if ((this.mTemperature < 500) && (this.mProcessingEnergy > 0) && (aTick % 12L == 0L))
+ {
+ this.mProcessingEnergy -= 1;
+ this.mTemperature += 1;
+ }
+ aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java
new file mode 100644
index 0000000000..e6e3f9181e
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java
@@ -0,0 +1,180 @@
+package gregtech.common.tileentities.boilers;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.gui.GT_Container_Boiler;
+import gregtech.common.gui.GT_GUIContainer_Boiler;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public class GT_MetaTileEntity_Boiler_Steel
+ extends GT_MetaTileEntity_Boiler
+{
+ public GT_MetaTileEntity_Boiler_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Faster than the Bronze Boiler", new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Boiler_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[5][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+rTextures[1][(i + 1)] = tmp1;
+ ITexture[] tmp2 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE) };
+rTextures[2][(i + 1)] = tmp2;
+ ITexture[] tmp4 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT) };
+rTextures[3][(i + 1)] = tmp4;
+ ITexture[] tmp5 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) };
+rTextures[4][(i + 1)] = tmp5;
+ }
+ return rTextures;
+ }
+
+ public int maxProgresstime()
+ {
+ return 1000;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 32000);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SteelBoiler.png", 32000);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Boiler_Steel(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L))
+ {
+ if (this.mTemperature <= 20)
+ {
+ this.mTemperature = 20;
+ this.mLossTimer = 0;
+ }
+ if (++this.mLossTimer > 40)
+ {
+ this.mTemperature -= 1;
+ this.mLossTimer = 0;
+ }
+ for (byte i = 1; (this.mSteam != null) && (i < 6); i = (byte)(i + 1)) {
+ if (i != aBaseMetaTileEntity.getFrontFacing())
+ {
+ IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(i);
+ if (tTileEntity != null)
+ {
+ FluidStack tDrained = aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), Math.max(1, this.mSteam.amount / 2), false);
+ if (tDrained != null)
+ {
+ int tFilledAmount = tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), tDrained, false);
+ if (tFilledAmount > 0) {
+ tTileEntity.fill(ForgeDirection.getOrientation(i).getOpposite(), aBaseMetaTileEntity.drain(ForgeDirection.getOrientation(i), tFilledAmount, true), true);
+ }
+ }
+ }
+ }
+ }
+ if (aTick % 10L == 0L) {
+ if (this.mTemperature > 100)
+ {
+ if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0))
+ {
+ this.mHadNoWater = true;
+ }
+ else
+ {
+ if (this.mHadNoWater)
+ {
+ aBaseMetaTileEntity.doExplosion(2048L);
+ return;
+ }
+ this.mFluid.amount -= 1;
+ if (this.mSteam == null) {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ } else if (GT_ModHandler.isSteam(this.mSteam)) {
+ this.mSteam.amount += 150;
+ } else {
+ this.mSteam = GT_ModHandler.getSteam(150L);
+ }
+ }
+ }
+ else {
+ this.mHadNoWater = false;
+ }
+ }
+ if ((this.mSteam != null) &&
+ (this.mSteam.amount > 32000))
+ {
+ sendSound((byte)1);
+ this.mSteam.amount = 24000;
+ }
+ if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) &&
+ (this.mInventory[2] != null)) {
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Coal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Coal))))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ else if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Charcoal))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Charcoal))))
+ {
+ this.mProcessingEnergy += 160;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(3) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], "fuelCoke"))
+ {
+ this.mProcessingEnergy += 640;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(2) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L));
+ }
+ }
+ else if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Lignite))) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Lignite))))
+ {
+ this.mProcessingEnergy += 40;
+ aBaseMetaTileEntity.decrStackSize(2, 1);
+ if (aBaseMetaTileEntity.getRandomNumber(8) == 0) {
+ aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L));
+ }
+ }
+ }
+ if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && (aTick % 12L == 0L))
+ {
+ this.mProcessingEnergy -= 2;
+ this.mTemperature += 1;
+ }
+ aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java
new file mode 100644
index 0000000000..4ed569dcc2
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java
@@ -0,0 +1,126 @@
+package gregtech.common.tileentities.generators;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.*;
+import gregtech.api.objects.GT_ArrayList;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_DieselGenerator
+ extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_DieselGenerator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Requires liquid Fuel", new ITexture[0]);
+ onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_DieselGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_DieselGenerator(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sDieselFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+ public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "DieselGenerator.efficiency.tier."+this.mTier, (100 - this.mTier * 10));
+}
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public int getFuelValue(ItemStack aStack)
+ {
+ int rValue = Math.max(GT_ModHandler.getFuelCanValue(aStack) * 6 / 5, super.getFuelValue(aStack));
+ if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) {
+ rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3);
+ }
+ return rValue;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_FluidNaquadahReactor.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_FluidNaquadahReactor.java
new file mode 100644
index 0000000000..fef02461b1
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_FluidNaquadahReactor.java
@@ -0,0 +1,108 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_FluidNaquadahReactor
+ extends GT_MetaTileEntity_BasicGenerator
+{
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return (aSide > 1) && (aSide != getBaseMetaTileEntity().getFrontFacing()) && (aSide != getBaseMetaTileEntity().getBackFacing());
+ }
+
+ public GT_MetaTileEntity_FluidNaquadahReactor(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Requires Enriched Naquadah Cells", new ITexture[0]);onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_FluidNaquadahReactor(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_FluidNaquadahReactor(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sFluidNaquadahReactorFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+ public int getEfficiency()
+ {
+ return mEfficiency;
+ }
+
+ public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "FluidNaquadah.efficiency.tier."+this.mTier, 100);
+}
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_FRONT) };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_BACK) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_BOTTOM) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_TOP) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_FRONT_ACTIVE) };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_BACK_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_BOTTOM_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_TOP_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java
new file mode 100644
index 0000000000..488771a691
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_GasTurbine
+ extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_GasTurbine(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Requires flammable Gasses", new ITexture[0]);
+onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_GasTurbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_GasTurbine(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sTurbineFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "GasTurbine.efficiency.tier."+this.mTier, (100 - this.mTier * 10));
+}
+
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_FRONT), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_BACK) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_BOTTOM) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_TOP) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_SIDE) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_FRONT_ACTIVE), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_BACK_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_BOTTOM_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_TOP_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java
new file mode 100644
index 0000000000..06935e6137
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_MagicEnergyConverter
+ extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_MagicEnergyConverter(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Put your strange stuff in here", new ITexture[0]);
+onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_MagicEnergyConverter(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_MagicEnergyConverter(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sMagicFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyConverter.efficiency.tier."+this.mTier, 100-this.mTier*10);
+}
+
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE) };
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java
new file mode 100644
index 0000000000..18add4535b
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java
@@ -0,0 +1,304 @@
+package gregtech.common.tileentities.generators;
+
+import static gregtech.api.enums.GT_Values.V;
+
+import java.util.ArrayList;
+
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.aspects.IEssentiaContainerItem;
+import thaumcraft.api.visnet.VisNetHandler;
+import cpw.mods.fml.common.Loader;
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.item.EntityEnderCrystal;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemEnchantedBook;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_MagicalEnergyAbsorber extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public static boolean sAllowMultipleEggs = true;
+ public static GT_MetaTileEntity_MagicalEnergyAbsorber mActiveSiphon = null;
+ public static int sEnergyPerEnderCrystal = 32;
+ public static int sEnergyFromVis = 12800;
+ public static final ArrayList<EntityEnderCrystal> sUsedDragonCrystalList = new ArrayList();
+ public EntityEnderCrystal mTargetedCrystal;
+ public static int sDragonEggEnergyPerTick = 128;
+ public static boolean isThaumcraftLoaded;
+
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_MagicalEnergyAbsorber(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Feasts on magic close to it", new ITexture[0]);
+ onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_MagicalEnergyAbsorber(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_MagicalEnergyAbsorber(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sMagicFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+ public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyAbsorber.efficiency.tier."+this.mTier, 100-this.mTier*10);
+ this.sAllowMultipleEggs = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyAbsorber.AllowMultipleEggs", false);
+ this.sEnergyPerEnderCrystal = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyAbsorber.EnergyPerTick.EnderCrystal", 32);
+ this.sEnergyFromVis = (GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyAbsorber.EnergyPerVisDivisor", 2500)*10);
+ this.sDragonEggEnergyPerTick = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MagicEnergyAbsorber.EnergyPerTick", 2048);
+ this.isThaumcraftLoaded = Loader.isModLoaded("Thaumcraft");
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() + aBaseMetaTileEntity.getEUCapacity()) {
+ //Dragon Egg
+ if(hasEgg()&&aTick%10==0){
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(sDragonEggEnergyPerTick*getEfficiency()*10, false);
+ if ((mActiveSiphon != this) && (!sAllowMultipleEggs)) {
+ if ((mActiveSiphon == null) || (mActiveSiphon.getBaseMetaTileEntity() == null) || (mActiveSiphon.getBaseMetaTileEntity().isInvalidTileEntity()) || (!mActiveSiphon.hasEgg())) {
+ mActiveSiphon = this;
+ } else {
+ Block tEgg = mActiveSiphon.getBaseMetaTileEntity().getBlockOffset(0, 1, 0);
+ if(!getBaseMetaTileEntity().getWorld().getChunkFromBlockCoords(mActiveSiphon.getBaseMetaTileEntity().getXCoord(), mActiveSiphon.getBaseMetaTileEntity().getZCoord()).isChunkLoaded&&(tEgg==Blocks.dragon_egg||tEgg.getUnlocalizedName().equals("tile.dragonEgg")))
+ {getBaseMetaTileEntity().doExplosion(Integer.MAX_VALUE);}else{
+ mActiveSiphon=this;
+ }
+
+ }
+ }
+ }
+ //Energyzed node
+ if(isThaumcraftLoaded){
+ try{
+ World tmpWorld = this.getBaseMetaTileEntity().getWorld();
+ int tmpX = this.getBaseMetaTileEntity().getXCoord();
+ int tmpY = this.getBaseMetaTileEntity().getYCoord();
+ int tmpZ = this.getBaseMetaTileEntity().getZCoord();
+ int fire = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.FIRE, 1000);
+ int earth = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.EARTH, 1000);
+ int air = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.AIR, 1000);
+ int destruction = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.ENTROPY, 1000);
+ int order = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.ORDER, 1000);
+ int water = VisNetHandler.drainVis(tmpWorld, tmpX, tmpY, tmpZ, Aspect.WATER, 1000);
+ int visEU = (int) (Math.pow(fire, 4)+Math.pow(earth, 4)+Math.pow(air, 4)+Math.pow(destruction, 4)+Math.pow(order, 4)+Math.pow(water, 4));
+ int mult = 85;
+ if(fire>4)mult+=15;
+ if(earth>4)mult+=15;
+ if(air>4)mult+=15;
+ if(destruction>4)mult+=15;
+ if(order>4)mult+=15;
+ if(water>4)mult+=15;
+ visEU = (visEU*mult) / 100;
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(Math.min(maxEUOutput(), visEU*getEfficiency()/this.sEnergyFromVis), false);
+ }catch (Throwable e){}
+ }
+ //EnderCrystal
+
+ if (sEnergyPerEnderCrystal > 0) {
+ if (this.mTargetedCrystal == null)
+ {
+ ArrayList<EntityEnderCrystal> tList = (ArrayList)getBaseMetaTileEntity().getWorld().getEntitiesWithinAABB(EntityEnderCrystal.class, AxisAlignedBB.getBoundingBox(getBaseMetaTileEntity().getXCoord() - 64, getBaseMetaTileEntity().getYCoord() - 64, getBaseMetaTileEntity().getZCoord() - 64, getBaseMetaTileEntity().getXCoord() + 64, getBaseMetaTileEntity().getYCoord() + 64, getBaseMetaTileEntity().getZCoord() + 64));
+ if ((tList != null) && (!tList.isEmpty()))
+ {
+ tList.removeAll(sUsedDragonCrystalList);
+ if (tList.size() > 0)
+ {
+ this.mTargetedCrystal = ((EntityEnderCrystal)tList.get(0));
+ if (this.mTargetedCrystal != null) {
+ sUsedDragonCrystalList.add(this.mTargetedCrystal);
+ }
+ }
+ }
+ }
+ else if (this.mTargetedCrystal.isEntityAlive())
+ {
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(sEnergyPerEnderCrystal * 10, false);
+ }
+ else
+ {
+ sUsedDragonCrystalList.remove(this.mTargetedCrystal);
+ this.mTargetedCrystal = null;
+ }
+ }
+
+ //Absorb entchantments
+ try
+ {
+ if ((this.mInventory[0] != null) && (this.mInventory[1] == null))
+ {
+ if(isThaumcraftLoaded && this.mInventory[0].getItem() instanceof IEssentiaContainerItem){
+ AspectList tAspect = ((IEssentiaContainerItem)this.mInventory[0].getItem()).getAspects(this.mInventory[0]);
+ TC_Aspects tValue = TC_Aspects.valueOf(tAspect.getAspects()[0].getTag().toUpperCase());
+ int tEU = (tValue.mValue*tAspect.getAmount((Aspect) tValue.mAspect)*100);
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(tEU, true);
+ ItemStack tStack = this.mInventory[0].copy();
+ tStack.setTagCompound(null);
+ tStack.setItemDamage(0);
+ tStack.stackSize=1;
+ this.mInventory[1]=tStack;
+ this.mInventory[0].stackSize--;
+ if(this.mInventory[0].stackSize<1){this.mInventory[0]=null;}
+
+ }else{
+ if ((this.mInventory[0].isItemEnchanted()) && (this.mInventory[0].getItem().getItemEnchantability() > 0))
+ {
+ NBTTagList tEnchantments = this.mInventory[0].getEnchantmentTagList();
+ if (tEnchantments != null)
+ {
+ for (int i = 0; i < tEnchantments.tagCount(); i++)
+ {
+ short tID = ((NBTTagCompound)tEnchantments.getCompoundTagAt(i)).getShort("id");
+ short tLevel = ((NBTTagCompound)tEnchantments.getCompoundTagAt(i)).getShort("lvl");
+ if ((tID > -1) && (tID < Enchantment.enchantmentsList.length))
+ {
+ Enchantment tEnchantment = Enchantment.enchantmentsList[tID];
+ if (tEnchantment != null) {
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(1000000 * tLevel / (tEnchantment.getMaxLevel() * tEnchantment.getWeight()), true);
+ }
+ }
+ }
+ this.mInventory[0].stackTagCompound.removeTag("ench");
+ }
+ }
+ else if ((this.mInventory[0].getItem() instanceof ItemEnchantedBook))
+ {
+ NBTTagList tEnchantments = ((ItemEnchantedBook)this.mInventory[0].getItem()).func_92110_g(this.mInventory[0]);
+ if (tEnchantments != null)
+ {
+ for (int i = 0; i < tEnchantments.tagCount(); i++)
+ {
+ short tID = ((NBTTagCompound)tEnchantments.getCompoundTagAt(i)).getShort("id");
+ short tLevel = ((NBTTagCompound)tEnchantments.getCompoundTagAt(i)).getShort("lvl");
+ if ((tID > -1) && (tID < Enchantment.enchantmentsBookList.length))
+ {
+ Enchantment tEnchantment = Enchantment.enchantmentsBookList[tID];
+ if (tEnchantment != null) {
+ getBaseMetaTileEntity().increaseStoredEnergyUnits(1000000 * tLevel / (tEnchantment.getMaxLevel() * tEnchantment.getWeight()), true);
+ }
+ }
+ }
+ this.mInventory[0] = new ItemStack(Items.book, 1);
+ }
+ }
+ this.mInventory[1] = this.mInventory[0];
+ this.mInventory[0] = null;
+ }
+ }}
+ catch (Throwable e){}
+ }
+ }
+
+ public void inValidate()
+ {
+ if (mActiveSiphon == this) {
+ mActiveSiphon = null;
+ }
+ }
+
+ public boolean hasEgg()
+ {
+ Block above = getBaseMetaTileEntity().getBlockOffset(0, 1, 0);
+ if(above==null||Blocks.air==above){return false;}
+ return Blocks.dragon_egg == above || above.getUnlocalizedName().equals("tile.dragonEgg");
+ }
+
+ @Override public long maxEUStore(){return Math.max(getEUVar(), V[mTier] * 16000 + getMinimumStoredEU());}
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE) };
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java
new file mode 100644
index 0000000000..c547432901
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_PlasmaGenerator
+ extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_PlasmaGenerator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Plasma into energy", new ITexture[0]);
+onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_PlasmaGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_PlasmaGenerator(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sPlasmaFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 16000;
+ }
+
+public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "PlasmaGenerator.efficiency.tier."+this.mTier, (10 + (this.mTier * 10)));
+}
+
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW) };
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SolidNaquadahReactor.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SolidNaquadahReactor.java
new file mode 100644
index 0000000000..ef569485d5
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SolidNaquadahReactor.java
@@ -0,0 +1,108 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_SolidNaquadahReactor
+ extends GT_MetaTileEntity_BasicGenerator
+{
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return (aSide > 1) && (aSide != getBaseMetaTileEntity().getFrontFacing()) && (aSide != getBaseMetaTileEntity().getBackFacing());
+ }
+
+ public GT_MetaTileEntity_SolidNaquadahReactor(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Requires Enriched Naquadah Bolts", new ITexture[0]);onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_SolidNaquadahReactor(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_SolidNaquadahReactor(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return GT_Recipe.GT_Recipe_Map.sSmallNaquadahReactorFuels;
+ }
+
+ public int getCapacity()
+ {
+ return 0;
+ }
+
+ public int getEfficiency()
+ {
+ return mEfficiency;
+ }
+
+ public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "SolidNaquadah.efficiency.tier."+this.mTier, 80);
+}
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT) };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE) };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java
new file mode 100644
index 0000000000..6a82eed4d2
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java
@@ -0,0 +1,123 @@
+package gregtech.common.tileentities.generators;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_SteamTurbine
+ extends GT_MetaTileEntity_BasicGenerator
+{
+
+ public int mEfficiency;
+ public boolean isOutputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public GT_MetaTileEntity_SteamTurbine(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, "Requires Steam to run", new ITexture[0]);
+onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_SteamTurbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+onConfigLoad();
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_SteamTurbine(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipes()
+ {
+ return null;
+ }
+
+ public int getCapacity()
+ {
+ return 24000 * this.mTier;
+ }
+
+public void onConfigLoad()
+ {
+ this.mEfficiency =GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "SteamTurbine.efficiency.tier."+this.mTier, (200 / consumedFluidPerOperation(GT_ModHandler.getSteam(1L))));
+}
+
+ public int getEfficiency()
+ {
+ return this.mEfficiency;
+ }
+
+ public int getFuelValue(FluidStack aLiquid)
+ {
+ return GT_ModHandler.isSteam(aLiquid) ? 1 : 0;
+ }
+
+ public int consumedFluidPerOperation(FluidStack aLiquid)
+ {
+ return 2 + this.mTier;
+ }
+
+ public ITexture[] getFront(byte aColor)
+ {
+ return new ITexture[] { super.getFront(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_FRONT), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBack(byte aColor)
+ {
+ return new ITexture[] { super.getBack(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_BACK) };
+ }
+
+ public ITexture[] getBottom(byte aColor)
+ {
+ return new ITexture[] { super.getBottom(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_BOTTOM) };
+ }
+
+ public ITexture[] getTop(byte aColor)
+ {
+ return new ITexture[] { super.getTop(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_TOP) };
+ }
+
+ public ITexture[] getSides(byte aColor)
+ {
+ return new ITexture[] { super.getSides(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_SIDE) };
+ }
+
+ public ITexture[] getFrontActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_FRONT_ACTIVE), Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] };
+ }
+
+ public ITexture[] getBackActive(byte aColor)
+ {
+ return new ITexture[] { super.getBackActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_BACK_ACTIVE) };
+ }
+
+ public ITexture[] getBottomActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_BOTTOM_ACTIVE) };
+ }
+
+ public ITexture[] getTopActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_TOP_ACTIVE) };
+ }
+
+ public ITexture[] getSidesActive(byte aColor)
+ {
+ return new ITexture[] { super.getSidesActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java
new file mode 100644
index 0000000000..9ee2253cf9
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java
@@ -0,0 +1,41 @@
+package gregtech.common.tileentities.machines;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull_NonElectric;
+import gregtech.api.objects.GT_RenderedTexture;
+
+public class GT_MetaTileEntity_BasicHull_Bronze
+ extends GT_MetaTileEntity_BasicHull_NonElectric
+{
+ public GT_MetaTileEntity_BasicHull_Bronze(int aID, String aName, String aNameRegional, int aTier, String aDescription)
+ {
+ super(aID, aName, aNameRegional, aTier, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicHull_Bronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_BasicHull_Bronze(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[3][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {
+ rTextures[0][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[1][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[2][(i + 1)] = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ }
+ return rTextures;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java
new file mode 100644
index 0000000000..3d8812661b
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java
@@ -0,0 +1,42 @@
+package gregtech.common.tileentities.machines;
+
+import gregtech.api.enums.*;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull_NonElectric;
+import gregtech.api.objects.GT_RenderedTexture;
+
+public class GT_MetaTileEntity_BasicHull_BronzeBricks
+ extends GT_MetaTileEntity_BasicHull_NonElectric
+{
+ public GT_MetaTileEntity_BasicHull_BronzeBricks(int aID, String aName, String aNameRegional, int aTier, String aDescription)
+ {
+ super(aID, aName, aNameRegional, aTier, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicHull_BronzeBricks(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_BasicHull_BronzeBricks(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[3][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 = { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[1][(i + 1)] =tmp1;
+ ITexture[] tmp2 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[2][(i + 1)] = tmp2;
+ }
+ return rTextures;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java
new file mode 100644
index 0000000000..00e4481d9d
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java
@@ -0,0 +1,43 @@
+package gregtech.common.tileentities.machines;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull_NonElectric;
+import gregtech.api.objects.GT_RenderedTexture;
+
+public class GT_MetaTileEntity_BasicHull_Steel
+ extends GT_MetaTileEntity_BasicHull_NonElectric
+{
+ public GT_MetaTileEntity_BasicHull_Steel(int aID, String aName, String aNameRegional, int aTier, String aDescription)
+ {
+ super(aID, aName, aNameRegional, aTier, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicHull_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_BasicHull_Steel(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[3][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[1][(i + 1)] = tmp1;
+ ITexture[] tmp2 = { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[2][(i + 1)] =tmp2;
+ }
+ return rTextures;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java
new file mode 100644
index 0000000000..8107961725
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java
@@ -0,0 +1,43 @@
+package gregtech.common.tileentities.machines;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull_NonElectric;
+import gregtech.api.objects.GT_RenderedTexture;
+
+public class GT_MetaTileEntity_BasicHull_SteelBricks
+ extends GT_MetaTileEntity_BasicHull_NonElectric
+{
+ public GT_MetaTileEntity_BasicHull_SteelBricks(int aID, String aName, String aNameRegional, int aTier, String aDescription)
+ {
+ super(aID, aName, aNameRegional, aTier, aDescription);
+ }
+
+ public GT_MetaTileEntity_BasicHull_SteelBricks(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_BasicHull_SteelBricks(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[3][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[1][(i + 1)] = tmp1;
+ ITexture[] tmp2 ={ new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) };
+rTextures[2][(i + 1)] = tmp2;
+ }
+ return rTextures;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java
new file mode 100644
index 0000000000..bf498a22d1
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java
@@ -0,0 +1,109 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.CraftingManager;
+
+public class GT_MetaTileEntity_Boxinator
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_Boxinator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Puts things into Boxes", 2, 1, "Packager.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_BOXINATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_BOXINATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_BOXINATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_BOXINATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_BOXINATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_BOXINATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_BOXINATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_BOXINATOR) });
+ }
+
+ public GT_MetaTileEntity_Boxinator(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 2, 1, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Boxinator(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeList()
+ {
+ return GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes;
+ }
+
+ public int checkRecipe()
+ {
+ int tCheck = super.checkRecipe();
+ if (tCheck != 0) {
+ return tCheck;
+ }
+ if ((GT_Utility.isStackValid(getInputAt(0))) && (GT_Utility.isStackValid(getInputAt(1))) && (GT_Utility.getContainerItem(getInputAt(0), true) == null))
+ {
+ if ((ItemList.Schematic_1by1.isStackEqual(getInputAt(1))) && (getInputAt(0).stackSize >= 1))
+ {
+ this.mOutputItems[0] = GT_ModHandler.getRecipeOutput(new ItemStack[] { getInputAt(0) });
+ if (this.mOutputItems[0] != null) {
+ if (canOutput(new ItemStack[] { this.mOutputItems[0] }))
+ {
+ getInputAt(0).stackSize -= 1;
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (16 / (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ return 0;
+ }
+ if ((ItemList.Schematic_2by2.isStackEqual(getInputAt(1))) && (getInputAt(0).stackSize >= 4))
+ {
+ this.mOutputItems[0] = GT_ModHandler.getRecipeOutput(new ItemStack[] { getInputAt(0), getInputAt(0), null, getInputAt(0), getInputAt(0) });
+ if (this.mOutputItems[0] != null) {
+ if (canOutput(new ItemStack[] { this.mOutputItems[0] }))
+ {
+ getInputAt(0).stackSize -= 4;
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (32 / (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ return 0;
+ }
+ if ((ItemList.Schematic_3by3.isStackEqual(getInputAt(1))) && (getInputAt(0).stackSize >= 9))
+ {
+ this.mOutputItems[0] = GT_ModHandler.getRecipeOutput(new ItemStack[] { getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0), getInputAt(0) });
+ if (this.mOutputItems[0] != null) {
+ if (canOutput(new ItemStack[] { this.mOutputItems[0] }))
+ {
+ getInputAt(0).stackSize -= 9;
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (64 / (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ return 0;
+ }
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack))
+ {
+ if ((ItemList.Schematic_1by1.isStackEqual(getInputAt(1))) || (ItemList.Schematic_2by2.isStackEqual(getInputAt(1))) || (ItemList.Schematic_3by3.isStackEqual(getInputAt(1)))) {
+ if(GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes.findRecipe(getBaseMetaTileEntity(), true, gregtech.api.enums.GT_Values.V[this.mTier], null, new ItemStack[] { GT_Utility.copyAmount(64L, new Object[] { aStack }), getInputAt(1) }) != null){return true;}
+ if(ItemList.Schematic_1by1.isStackEqual(getInputAt(1))&&GT_ModHandler.getRecipeOutput(new ItemStack[] { aStack })!=null)return true;
+ if(ItemList.Schematic_2by2.isStackEqual(getInputAt(1))&&GT_ModHandler.getRecipeOutput(new ItemStack[] { aStack, aStack, null, aStack, aStack })!=null){return true;}
+ if(ItemList.Schematic_3by3.isStackEqual(getInputAt(1))&&(GT_ModHandler.getRecipeOutput(new ItemStack[] { aStack,aStack,aStack,aStack,aStack,aStack,aStack,aStack,aStack })!=null)){return true;}
+ }else{return GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes.containsInput(aStack);}
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java
new file mode 100644
index 0000000000..8be43c1b94
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java
@@ -0,0 +1,65 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Disassembler
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_Disassembler(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Disassembles Machines at " + (50 + 10 * aTier) + "% Efficiency", 1, 9, "Disassembler.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_DISASSEMBLER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_DISASSEMBLER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_DISASSEMBLER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_DISASSEMBLER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_DISASSEMBLER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_DISASSEMBLER) });
+ }
+
+ public GT_MetaTileEntity_Disassembler(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 9, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Disassembler(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public int checkRecipe()
+ {
+ if ((getInputAt(0) != null) && (isOutputEmpty()))
+ {
+ NBTTagCompound tNBT = getInputAt(0).getTagCompound();
+ if (tNBT != null)
+ {
+ tNBT = tNBT.getCompoundTag("GT.CraftingComponents");
+ if (tNBT != null)
+ {
+ getInputAt(0).stackSize -= 1;
+ this.mEUt = (16 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = 80;
+ for (int i = 0; i < this.mOutputItems.length; i++) {
+ if (getBaseMetaTileEntity().getRandomNumber(100) < 50 + 10 * this.mTier)
+ {
+ this.mOutputItems[i] = GT_Utility.loadItem(tNBT, "Ingredient." + i);
+ if (this.mOutputItems[i] != null) {
+ this.mMaxProgresstime *= 1.7;
+ }
+ }
+ }
+ return 2;
+ }
+ }
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (aStack.getTagCompound() != null) && (aStack.getTagCompound().getCompoundTag("GT.CraftingComponents") != null);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java
new file mode 100644
index 0000000000..1932ad49f3
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java
@@ -0,0 +1,77 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Config;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_Massfabricator
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public static int sUUAperUUM = 1;
+ public static int sUUASpeedBonus = 4;
+ public static int sDurationMultiplier = 3215;
+ public static boolean sRequiresUUA = false;
+
+ public GT_MetaTileEntity_Massfabricator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "UUM = Matter * Fabrication Squared", 1, 1, "Massfabricator.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_MASSFAB_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_MASSFAB), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB) });
+ }
+
+ public GT_MetaTileEntity_Massfabricator(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Massfabricator(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public void onConfigLoad(GT_Config aConfig)
+ {
+ super.onConfigLoad(aConfig);
+ sDurationMultiplier = aConfig.get(ConfigCategories.machineconfig, "Massfabricator.UUM_Duration_Multiplier", sDurationMultiplier);
+ sUUAperUUM = aConfig.get(ConfigCategories.machineconfig, "Massfabricator.UUA_per_UUM", sUUAperUUM);
+ sUUASpeedBonus = aConfig.get(ConfigCategories.machineconfig, "Massfabricator.UUA_Speed_Bonus", sUUASpeedBonus);
+ sRequiresUUA = aConfig.get(ConfigCategories.machineconfig, "Massfabricator.UUA_Requirement", sRequiresUUA);
+ Materials.UUAmplifier.mChemicalFormula = ("Mass Fabricator Eff/Speed Bonus: x" + sUUASpeedBonus);
+ }
+
+ public int checkRecipe()
+ {
+ FluidStack tFluid = getDrainableStack();
+ if ((tFluid == null) || (tFluid.amount < getCapacity()))
+ {
+ this.mOutputFluid = Materials.UUMatter.getFluid(1L);
+ this.mEUt = ((int)gregtech.api.enums.GT_Values.V[this.mTier]);
+ this.mMaxProgresstime = (sDurationMultiplier / (1 << this.mTier - 1));
+ if (((tFluid = getFillableStack()) != null) && (tFluid.amount >= sUUAperUUM) && (tFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L))))
+ {
+ tFluid.amount -= sUUAperUUM;
+ this.mMaxProgresstime /= sUUASpeedBonus;
+ return 2;
+ }
+ return (sRequiresUUA) || (ItemList.Circuit_Integrated.isStackEqual(getInputAt(0), true, true)) ? 1 : 2;
+ }
+ return 0;
+ }
+
+ public boolean isFluidInputAllowed(FluidStack aFluid)
+ {
+ return aFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L));
+ }
+
+ public int getCapacity()
+ {
+ return Math.max(sUUAperUUM, 1000);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java
new file mode 100644
index 0000000000..871835020d
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java
@@ -0,0 +1,79 @@
+package gregtech.common.tileentities.machines.basic;
+
+import static gregtech.api.enums.GT_Values.V;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.eventhandler.Event;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingSpawnEvent;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_SpawnEventHandler;
+
+public class GT_MetaTileEntity_MonsterRepellent extends GT_MetaTileEntity_TieredMachineBlock {
+
+ public int mRange = 16;
+
+ public GT_MetaTileEntity_MonsterRepellent(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 0, "Reprells nasty Creatures. Range: "+(4 + (12*aTier))+" unpowered / "+(16 + (48*aTier))+" powered");
+ }
+
+ public GT_MetaTileEntity_MonsterRepellent(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aInvSlotCount, aDescription, aTextures);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_MonsterRepellent(this.mName, this.mTier, this.mInventory.length, this.mDescription, this.mTextures);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1], (aSide != 1) ? null : aActive ? new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER) };
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide()) {
+ int[] tCoords = new int[]{aBaseMetaTileEntity.getXCoord(),aBaseMetaTileEntity.getYCoord(),aBaseMetaTileEntity.getZCoord(),aBaseMetaTileEntity.getWorld().provider.dimensionId};
+ if((aTimer%600 == 0)&&!GT_SpawnEventHandler.mobReps.contains(tCoords)){
+ GT_SpawnEventHandler.mobReps.add(tCoords);
+ }
+ if(aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()) && aBaseMetaTileEntity.decreaseStoredEnergyUnits(1 << (this.mTier*2), false)){
+ mRange = 16 + (48*mTier);
+ }else{
+ mRange = 4 + (12*mTier);
+ }}
+ }
+
+ @Override
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
+ int[] tCoords = new int[]{aBaseMetaTileEntity.getXCoord(),aBaseMetaTileEntity.getYCoord(),aBaseMetaTileEntity.getZCoord(),aBaseMetaTileEntity.getWorld().provider.dimensionId};
+ GT_SpawnEventHandler.mobReps.add(tCoords);
+ }
+
+ @Override
+ public void onRemoval() {
+ int[] tCoords = new int[]{this.getBaseMetaTileEntity().getXCoord(),this.getBaseMetaTileEntity().getYCoord(),this.getBaseMetaTileEntity().getZCoord(),this.getBaseMetaTileEntity().getWorld().provider.dimensionId};
+ GT_SpawnEventHandler.mobReps.remove(tCoords);
+ }
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return true;}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return 512;}
+ @Override public long maxEUStore() {return 512+V[mTier]*50;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxAmperesIn() {return 2;}
+ @Override public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return false;}
+ @Override public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {return false;}
+ @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) {return null;}
+ @Override public void saveNBTData(NBTTagCompound aNBT) {}
+ @Override public void loadNBTData(NBTTagCompound aNBT) {}
+ }
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java
new file mode 100644
index 0000000000..35110b6adf
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java
@@ -0,0 +1,159 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_PotionBrewer
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_PotionBrewer(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Brewing your Drinks", 1, 0, "PotionBrewer.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_POTIONBREWER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_POTIONBREWER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_POTIONBREWER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_POTIONBREWER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_POTIONBREWER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_POTIONBREWER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_POTIONBREWER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_POTIONBREWER) });
+ }
+
+ public GT_MetaTileEntity_PotionBrewer(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 0, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_PotionBrewer(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeList()
+ {
+ return GT_Recipe.GT_Recipe_Map.sBrewingRecipes;
+ }
+
+ public int checkRecipe()
+ {
+ int tCheck = super.checkRecipe();
+ if (tCheck != 0) {
+ return tCheck;
+ }
+ FluidStack aFluid = getFillableStack();
+ if ((getDrainableStack() == null) && (aFluid != null) && (getInputAt(0) != null))
+ {
+ String tInputName = aFluid.getFluid().getName();
+ if (tInputName.startsWith("potion."))
+ {
+ tInputName = tInputName.replaceFirst("potion.", "");
+ int tFirstDot = tInputName.indexOf('.') + 1;
+ String tModifier = tFirstDot <= 0 ? "" : tInputName.substring(tFirstDot);
+ if (!tModifier.isEmpty()) {
+ tInputName = tInputName.replaceFirst("." + tModifier, "");
+ }
+ if (GT_Utility.areStacksEqual(new ItemStack(Items.fermented_spider_eye, 1, 0), getInputAt(0)))
+ {
+ if (tInputName.equals("poison")) {
+ return setOutput("potion.damage" + tModifier);
+ }
+ if (tInputName.equals("health")) {
+ return setOutput("potion.damage" + tModifier);
+ }
+ if (tInputName.equals("waterbreathing")) {
+ return setOutput("potion.damage" + tModifier);
+ }
+ if (tInputName.equals("nightvision")) {
+ return setOutput("potion.invisibility" + tModifier);
+ }
+ if (tInputName.equals("fireresistance")) {
+ return setOutput("potion.slowness" + tModifier);
+ }
+ if (tInputName.equals("speed")) {
+ return setOutput("potion.slowness" + tModifier);
+ }
+ if (tInputName.equals("strength")) {
+ return setOutput("potion.weakness" + tModifier);
+ }
+ if (tInputName.equals("regen")) {
+ return setOutput("potion.poison" + tModifier);
+ }
+ return setOutput("potion.weakness");
+ }
+ if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), getInputAt(0)))
+ {
+ if (!tModifier.startsWith("strong")) {
+ return setOutput("potion." + tInputName + ".strong" + (tModifier.isEmpty() ? "" : new StringBuilder().append(".").append(tModifier).toString()));
+ }
+ if (tModifier.startsWith("long")) {
+ return setOutput("potion." + tInputName + tModifier.replaceFirst("long", ""));
+ }
+ return setOutput("potion.thick");
+ }
+ if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), getInputAt(0)))
+ {
+ if (!tModifier.startsWith("long")) {
+ return setOutput("potion." + tInputName + ".long" + (tModifier.isEmpty() ? "" : new StringBuilder().append(".").append(tModifier).toString()));
+ }
+ if (tModifier.startsWith("strong")) {
+ return setOutput("potion." + tInputName + tModifier.replaceFirst("strong", ""));
+ }
+ return setOutput("potion.mundane");
+ }
+ if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L), getInputAt(0)))
+ {
+ if (!tInputName.endsWith(".splash")) {
+ return setOutput("potion." + tInputName + ".splash");
+ }
+ return setOutput("potion.mundane");
+ }
+ }
+ }
+ return 0;
+ }
+
+ private final int setOutput(String aFluidName)
+ {
+ this.mOutputFluid = FluidRegistry.getFluidStack(aFluidName, 750);
+ if (this.mOutputFluid == null)
+ {
+ this.mOutputFluid = FluidRegistry.getFluidStack("potion.mundane", getFillableStack().amount);
+ getInputAt(0).stackSize -= 1;
+ getFillableStack().amount = 0;
+ this.mEUt = (4 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ return 2;
+ }
+ if (getFillableStack().amount < 750) {
+ return 0;
+ }
+ getInputAt(0).stackSize -= 1;
+ getFillableStack().amount -= 750;
+ this.mEUt = (4 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ return 2;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (getRecipeList().containsInput(aStack));
+ }
+
+ public boolean isFluidInputAllowed(FluidStack aFluid)
+ {
+ return (aFluid.getFluid().getName().startsWith("potion.")) || (super.isFluidInputAllowed(aFluid));
+ }
+
+ public int getCapacity()
+ {
+ return 750;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Printer.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Printer.java
new file mode 100644
index 0000000000..b4058f8830
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Printer.java
@@ -0,0 +1,65 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Printer
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_Printer(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "It can copy Books and paint Stuff", 1, 1, "Printer.png", GT_Recipe.GT_Recipe_Map.sPrinterRecipes.mNEIName, new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Printer(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 2, 2, aGUIName, aNEIName);
+ }
+
+ public int checkRecipe()
+ {
+ if (getOutputAt(0) != null)
+ {
+ this.mOutputBlocked += 1;
+ }
+ else if ((GT_Utility.isStackValid(getInputAt(0))) && (getInputAt(0).stackSize > 0) &&
+ (GT_Utility.isStackInvalid(getSpecialSlot())) &&
+ (OrePrefixes.block.contains(getInputAt(0))))
+ {
+ ArrayList<ItemStack> tList = GT_OreDictUnificator.getOres(GT_OreDictUnificator.getAssociation(getInputAt(0)));
+ if (tList.size() > 1)
+ {
+ tList.add(tList.get(0));
+ int i = 0;
+ for (int j = tList.size() - 1; i < j; i++) {
+ if (GT_Utility.areStacksEqual(getInputAt(0), (ItemStack)tList.get(i)))
+ {
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { tList.get(i + 1) });
+ this.mEUt = (1 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ this.mMaxProgresstime = (32 / (1 << this.mTier - 1));
+ getInputAt(0).stackSize -= 1;
+ return 2;
+ }
+ }
+ }
+ }
+ this.mMaxProgresstime = 0;
+ return 0;
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
new file mode 100644
index 0000000000..40020ef435
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
@@ -0,0 +1,380 @@
+package gregtech.common.tileentities.machines.basic;
+
+import static gregtech.api.enums.GT_Values.V;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.ChunkPosition;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidBlock;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_BasicTank;
+import gregtech.api.gui.GT_GUIContainer_BasicTank;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
+
+ public ArrayList<ChunkPosition> mPumpList = new ArrayList();
+ public int mPumpTimer = 0;
+ public int mPumpCountBelow = 0;
+ public Block mPumpedBlock1 = null;
+ public Block mPumpedBlock2 = null;
+
+ public GT_MetaTileEntity_Pump(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "The best way of emptying Oceans!");
+ }
+
+ public GT_MetaTileEntity_Pump(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription,aTextures);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Pump(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setString("mPumpedBlock1", this.mPumpedBlock1 == null ? "" : this.mPumpedBlock1.getUnlocalizedName());
+ aNBT.setString("mPumpedBlock2", this.mPumpedBlock2 == null ? "" : this.mPumpedBlock2.getUnlocalizedName());
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ this.mPumpedBlock1 = Block.getBlockFromName(aNBT.getString("mPumpedBlock1"));
+ this.mPumpedBlock2 = Block.getBlockFromName(aNBT.getString("mPumpedBlock2"));
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_BasicTank(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_BasicTank(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ }
+ @Override
+ public boolean doesFillContainers() {
+ return true;
+ }
+ @Override
+ public boolean doesEmptyContainers() {
+ return false;
+ }
+ @Override
+ public boolean canTankBeFilled() {
+ return false;
+ }
+ @Override
+ public boolean canTankBeEmptied() {
+ return true;
+ }
+ @Override
+ public boolean displaysItemStack() {
+ return true;
+ }
+ @Override
+ public boolean displaysStackSize() {
+ return false;
+ }
+
+ @Override
+ public boolean isFluidInputAllowed(FluidStack aFluid) {
+ return false;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (getBaseMetaTileEntity().isServerSide()) {
+ this.mPumpTimer -= 1;
+ if ((getBaseMetaTileEntity() instanceof BaseTileEntity)) {
+ ((BaseTileEntity) getBaseMetaTileEntity()).ignoreUnloadedChunks = false;
+ }
+ this.doTickProfilingInThisTick = true;
+ this.mPumpCountBelow = 0;
+ IGregTechTileEntity tTileEntity;
+ for (int i = 1; (i < 21) && ((tTileEntity = getBaseMetaTileEntity().getIGregTechTileEntityAtSideAndDistance((byte) 0, i)) != null)
+ && (tTileEntity.getMetaTileEntity() != null) && ((tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Pump)); i++) {
+ getBaseMetaTileEntity().setActive(tTileEntity.isActive());
+ this.mPumpCountBelow += 1;
+ ((GT_MetaTileEntity_Pump) tTileEntity.getMetaTileEntity()).mPumpTimer -= 1;
+ }
+ if (this.mPumpCountBelow <= 0) {
+ if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().isUniversalEnergyStored(16*((int)Math.pow(4, this.mTier))))
+ && ((this.mFluid == null) || (this.mFluid.amount + 1000 <= getCapacity()))) {
+ boolean tMovedOneDown = false;
+ if ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 100L == 0L)) {
+ tMovedOneDown = moveOneDown();
+ }
+ if ((GT_Utility.isBlockInvalid(this.mPumpedBlock1)) || (GT_Utility.isBlockInvalid(this.mPumpedBlock2))) {
+ getFluidAt(getBaseMetaTileEntity().getXCoord(), getYOfPumpHead() - 1, getBaseMetaTileEntity().getZCoord());
+ if ((GT_Utility.isBlockInvalid(this.mPumpedBlock1)) || (GT_Utility.isBlockInvalid(this.mPumpedBlock2))) {
+ getFluidAt(getBaseMetaTileEntity().getXCoord(), getYOfPumpHead(), getBaseMetaTileEntity().getZCoord() + 1);
+ }
+ if ((GT_Utility.isBlockInvalid(this.mPumpedBlock1)) || (GT_Utility.isBlockInvalid(this.mPumpedBlock2))) {
+ getFluidAt(getBaseMetaTileEntity().getXCoord(), getYOfPumpHead(), getBaseMetaTileEntity().getZCoord() - 1);
+ }
+ if ((GT_Utility.isBlockInvalid(this.mPumpedBlock1)) || (GT_Utility.isBlockInvalid(this.mPumpedBlock2))) {
+ getFluidAt(getBaseMetaTileEntity().getXCoord() + 1, getYOfPumpHead(), getBaseMetaTileEntity().getZCoord());
+ }
+ if ((GT_Utility.isBlockInvalid(this.mPumpedBlock1)) || (GT_Utility.isBlockInvalid(this.mPumpedBlock2))) {
+ getFluidAt(getBaseMetaTileEntity().getXCoord() - 1, getYOfPumpHead(), getBaseMetaTileEntity().getZCoord());
+ }
+ } else if (getYOfPumpHead() < getBaseMetaTileEntity().getYCoord()) {
+ if ((tMovedOneDown) || ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 200L == 100L)) || (getBaseMetaTileEntity().getTimer() % 72000L == 100L)) {
+ this.mPumpList.clear();
+ int y = getBaseMetaTileEntity().getYCoord() - 1;
+ for (int yHead = getYOfPumpHead(); (this.mPumpList.isEmpty()) && (y >= yHead); y--) {
+ scanForFluid(getBaseMetaTileEntity().getXCoord(), y, getBaseMetaTileEntity().getZCoord(), this.mPumpList, getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord(), 10*((int)Math.pow(1.6, this.mTier)));
+ }
+ }
+ if ((!tMovedOneDown) && (this.mPumpTimer <= 0)) {
+ while ((!this.mPumpList.isEmpty())
+ && (!consumeFluid(((ChunkPosition) this.mPumpList.get(this.mPumpList.size() - 1)).chunkPosX,
+ ((ChunkPosition) this.mPumpList.get(this.mPumpList.size() - 1)).chunkPosY,
+ ((ChunkPosition) this.mPumpList.remove(this.mPumpList.size() - 1)).chunkPosZ))) {
+ }
+ this.mPumpTimer = 160/((int)Math.pow(2, this.mTier));
+ }
+ }
+ }
+ getBaseMetaTileEntity().setActive(!this.mPumpList.isEmpty());
+ }
+ }
+ }
+
+ private boolean moveOneDown() {
+ if ((this.mInventory[0] == null) || (this.mInventory[0].stackSize < 1)
+ || (!GT_Utility.areStacksEqual(this.mInventory[0], GT_ModHandler.getIC2Item("miningPipe", 1L)))) {
+ return false;
+ }
+ int yHead = getYOfPumpHead();
+ if (yHead <= 0) {
+ return false;
+ }
+ if ((!consumeFluid(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord()))&& (!getBaseMetaTileEntity().getAir(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord()))) {
+
+ return false;
+ }
+ if (!(getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord(),GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))))) {
+ return false;
+ }
+ if (yHead != getBaseMetaTileEntity().getYCoord()) {
+ getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord(), yHead, getBaseMetaTileEntity().getZCoord(),GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipe", 1L)));
+ }
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ return true;
+ }
+
+ private int getYOfPumpHead() {
+ int y = getBaseMetaTileEntity().getYCoord() - 1;
+ while (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord(), y, getBaseMetaTileEntity().getZCoord()) == GT_Utility
+ .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipe", 1L))) {
+ y--;
+ }
+ if (y == getBaseMetaTileEntity().getYCoord() - 1) {
+ if (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord(), y, getBaseMetaTileEntity().getZCoord()) != GT_Utility
+ .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))) {
+ return y + 1;
+ }
+ } else if (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord(), y, getBaseMetaTileEntity().getZCoord()) != GT_Utility
+ .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))&&this.mInventory[0] != null&&this.mInventory[0].stackSize>0&&GT_Utility.areStacksEqual(this.mInventory[0], GT_ModHandler.getIC2Item("miningPipe", 1L))) {
+ getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord(), y, getBaseMetaTileEntity().getZCoord(),
+ GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L)));
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+
+ }
+ return y;
+ }
+
+ private void scanForFluid(int aX, int aY, int aZ, ArrayList<ChunkPosition> aList, int mX, int mZ, int mDist) {
+ doTickProfilingInThisTick = false;
+ ArrayList tList1 = new ArrayList();
+ ArrayList tList2 = new ArrayList();
+ tList1.add(new ChunkPosition(aX, aY, aZ));
+ while(!tList1.isEmpty())
+ {
+ Iterator i$ = tList1.iterator();
+ do
+ {
+ if(!i$.hasNext())
+ break;
+ ChunkPosition tPos = (ChunkPosition)i$.next();
+ if(tPos.chunkPosX < mX + mDist)
+ addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(tPos.chunkPosX + 1, tPos.chunkPosY, tPos.chunkPosZ, tList2, aList);
+ if(tPos.chunkPosX > mX - mDist)
+ addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(tPos.chunkPosX - 1, tPos.chunkPosY, tPos.chunkPosZ, tList2, aList);
+ if(tPos.chunkPosZ < mZ + mDist)
+ addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ + 1, tList2, aList);
+ if(tPos.chunkPosZ > mZ - mDist)
+ addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ - 1, tList2, aList);
+ addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(tPos.chunkPosX, tPos.chunkPosY + 1, tPos.chunkPosZ, tList2, aList);
+ ChunkPosition tCoordinate = new ChunkPosition(aX, aY + 1, aZ);
+ if(tPos.chunkPosX == mX && tPos.chunkPosZ == mZ && tPos.chunkPosY < getBaseMetaTileEntity().getYCoord() && !aList.contains(tCoordinate) && !tList2.contains(tCoordinate))
+ tList2.add(tCoordinate);
+ } while(true);
+ aList.addAll(tList2);
+ tList1 = tList2;
+ tList2 = new ArrayList();
+ }
+ for(int y = getBaseMetaTileEntity().getYCoord(); y >= aY; y--)
+ aList.remove(new ChunkPosition(aX, y, aZ));
+ }
+
+ private boolean addToFirstListIfFluidAndNotAlreadyAddedToAnyOfTheLists(int aX, int aY, int aZ, ArrayList<ChunkPosition> aList1,
+ ArrayList<ChunkPosition> aList2) {
+ ChunkPosition tCoordinate = new ChunkPosition(aX, aY, aZ);
+ if ((!aList1.contains(tCoordinate)) && (!aList2.contains(tCoordinate))) {
+ Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ);
+ if ((this.mPumpedBlock1 == aBlock) || (this.mPumpedBlock2 == aBlock)) {
+ aList1.add(tCoordinate);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void getFluidAt(int aX, int aY, int aZ) {
+ Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ);
+ if (GT_Utility.isBlockValid(aBlock)) {
+ if ((aBlock == Blocks.water) || (aBlock == Blocks.flowing_water)) {
+ this.mPumpedBlock1 = Blocks.water;
+ this.mPumpedBlock2 = Blocks.flowing_water;
+ return;
+ }
+ if ((aBlock == Blocks.lava) || (aBlock == Blocks.flowing_lava)) {
+ this.mPumpedBlock1 = Blocks.lava;
+ this.mPumpedBlock2 = Blocks.flowing_lava;
+ return;
+ }
+ if ((aBlock instanceof IFluidBlock)) {
+ this.mPumpedBlock1 = aBlock;
+ this.mPumpedBlock2 = aBlock;
+ return;
+ }
+ }
+ this.mPumpedBlock1 = null;
+ this.mPumpedBlock2 = null;
+ }
+
+ private boolean consumeFluid(int aX, int aY, int aZ) {
+ Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ);
+ int aMeta = getBaseMetaTileEntity().getMetaID(aX, aY, aZ);
+ if ((GT_Utility.isBlockValid(aBlock)) && ((this.mPumpedBlock1 == aBlock) || (this.mPumpedBlock2 == aBlock))) {
+ if ((aBlock == Blocks.water) || (aBlock == Blocks.flowing_water)) {
+ if (aMeta == 0) {
+ if (this.mFluid == null) {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(16*((int)Math.pow(4, this.mTier)), true);
+ this.mFluid = GT_ModHandler.getWater(1000L);
+ } else if (GT_ModHandler.isWater(this.mFluid)) {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(16*((int)Math.pow(4, this.mTier)), true);
+ this.mFluid.amount += 1000;
+ } else {
+ return false;
+ }
+ } else {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(4*((int)Math.pow(4, this.mTier)), true);
+ }
+ }
+ if ((aBlock == Blocks.lava) || (aBlock == Blocks.flowing_lava)) {
+ if (aMeta == 0) {
+ if (this.mFluid == null) {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(16*((int)Math.pow(4, this.mTier)), true);
+ this.mFluid = GT_ModHandler.getLava(1000L);
+ } else if (GT_ModHandler.isLava(this.mFluid)) {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(16*((int)Math.pow(4, this.mTier)), true);
+ this.mFluid.amount += 1000;
+ } else {
+ return false;
+ }
+ } else {
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(4*((int)Math.pow(4, this.mTier)), true);
+ }
+ }
+ if ((aBlock instanceof IFluidBlock)) {
+ if (this.mFluid == null) {
+ this.mFluid = ((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, true);
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(this.mFluid == null ? 1000 : this.mFluid.amount, true);
+ }else if(this.mFluid.isFluidEqual(((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, false))){
+ this.getBaseMetaTileEntity().getWorld().setBlockToAir( aX, aY, aZ);
+ this.mFluid.amount += 1000;
+ getBaseMetaTileEntity().decreaseStoredEnergyUnits(16*((int)Math.pow(4, this.mTier)), true);
+ }else {
+ return false;
+ }
+ }
+ getBaseMetaTileEntity().getWorld().setBlock(aX, aY, aZ,Blocks.air,0,2);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isOverclockerUpgradable() {return false;}
+ @Override public boolean isTransformerUpgradable() {return false;}
+ @Override public boolean isElectric() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return true;}
+ @Override public boolean isOutputFacing(byte aSide) {return false;}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return V[mTier]*16;}
+ @Override public long maxEUStore() {return V[mTier]*64;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxSteamStore() {return maxEUStore();}
+ @Override public long maxAmperesIn() {return 2;}
+ @Override public int getStackDisplaySlot() {return 2;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+
+ @Override
+ public int getCapacity() {
+ return 16000*this.mTier;
+ }
+ @Override
+ public int getTankPressure() {
+ return 100;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1], (aSide == 0||aSide ==1) ? null : new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ADV_PUMP) };
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return getTexturesInactive(aBaseTexture);
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] {
+ new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ADV_PUMP),new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ADV_PUMP),
+ new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ADV_PUMP),new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_ADV_PUMP),};
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java
new file mode 100644
index 0000000000..c5a0ecfc92
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java
@@ -0,0 +1,119 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Element;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.behaviors.Behaviour_DataOrb;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_Replicator
+ extends GT_MetaTileEntity_BasicMachine
+{
+ private static int sHeaviestElementMass = 0;
+
+ public GT_MetaTileEntity_Replicator(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Producing Elemental Matter", 1, 1, "Replicator.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_REPLICATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_REPLICATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_REPLICATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_REPLICATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_REPLICATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_REPLICATOR), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_REPLICATOR_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_REPLICATOR) });
+ }
+
+ public GT_MetaTileEntity_Replicator(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Replicator(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public int checkRecipe()
+ {
+ FluidStack tFluid = getFillableStack();
+ if ((tFluid != null) && (tFluid.isFluidEqual(Materials.UUMatter.getFluid(1L))))
+ {
+ ItemStack tDataOrb = getSpecialSlot();
+ if ((ItemList.Tool_DataOrb.isStackEqual(tDataOrb, false, true)) && (Behaviour_DataOrb.getDataTitle(tDataOrb).equals("Elemental-Scan")))
+ {
+ Materials tMaterial = (Materials)Element.get(Behaviour_DataOrb.getDataName(tDataOrb)).mLinkedMaterials.get(0);
+ long tMass = tMaterial.getMass();
+ if ((tFluid.amount >= tMass) && (tMass > 0L))
+ {
+ this.mEUt = ((int)gregtech.api.enums.GT_Values.V[this.mTier]);
+ this.mMaxProgresstime = ((int)(tMass * 512L / (1 << this.mTier - 1)));
+ if ((this.mOutputItems[0] = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, 1L)) == null)
+ {
+ if ((this.mOutputItems[0] = GT_OreDictUnificator.get(OrePrefixes.cell, tMaterial, 1L)) != null) {
+ if ((this.mOutputFluid = GT_Utility.getFluidForFilledItem(this.mOutputItems[0], true)) == null)
+ {
+ if (ItemList.Cell_Empty.isStackEqual(getInputAt(0))) {
+ if (canOutput(new ItemStack[] { this.mOutputItems[0] }))
+ {
+ getInputAt(0).stackSize -= 1; FluidStack
+ tmp231_230 = tFluid;tmp231_230.amount = ((int)(tmp231_230.amount - tMass));
+ return 2;
+ }
+ }
+ }
+ else
+ {
+ this.mOutputItems[0] = null;
+ if ((getDrainableStack() == null) || ((getDrainableStack().isFluidEqual(this.mOutputFluid)) && (getDrainableStack().amount < 16000)))
+ {
+ FluidStack tmp287_286 = tFluid;tmp287_286.amount = ((int)(tmp287_286.amount - tMass));
+ return 2;
+ }
+ }
+ }
+ }
+ else if (canOutput(new ItemStack[] { this.mOutputItems[0] }))
+ {
+ FluidStack tmp322_321 = tFluid;tmp322_321.amount = ((int)(tmp322_321.amount - tMass));
+ return 2;
+ }
+ }
+ }
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (ItemList.Cell_Empty.isStackEqual(aStack));
+ }
+
+ public boolean isFluidInputAllowed(FluidStack aFluid)
+ {
+ return aFluid.isFluidEqual(Materials.UUMatter.getFluid(1L));
+ }
+
+ public int getCapacity()
+ {
+ if ((sHeaviestElementMass == 0) && (GregTech_API.sPostloadFinished))
+ {
+ Materials tMaterial;
+ for (Iterator i$ = Materials.VALUES.iterator(); i$.hasNext(); sHeaviestElementMass = Math.max(sHeaviestElementMass, (int)tMaterial.getMass()))
+ {
+ tMaterial = (Materials)i$.next();
+ if ((tMaterial.mElement == null) || (tMaterial.mElement.mIsIsotope)) {}
+ }
+ }
+ return sHeaviestElementMass;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java
new file mode 100644
index 0000000000..aab40f712d
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java
@@ -0,0 +1,82 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_RockBreaker
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_RockBreaker(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Put Lava and Water adjacent", 1, 1, "RockBreaker.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER) });
+ }
+
+ public GT_MetaTileEntity_RockBreaker(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_RockBreaker(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeList()
+ {
+ return GT_Recipe.GT_Recipe_Map.sRockBreakerFakeRecipes;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (getRecipeList().containsInput(aStack));
+ }
+
+ public int checkRecipe()
+ {
+ IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity();
+ if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.water) || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.water) || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.water) || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.water))
+ {
+ ItemStack tOutput = null;
+ if (aBaseMetaTileEntity.getBlockOffset(0, 1, 0) == Blocks.lava) {
+ tOutput = new ItemStack(Blocks.stone, 1);
+ } else if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.lava) || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.lava) || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.lava) || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.lava)) {
+ tOutput = new ItemStack(Blocks.cobblestone, 1);
+ }
+ if (tOutput != null) {
+ if (GT_Utility.areStacksEqual(getInputAt(0), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L)))
+ {
+ tOutput = new ItemStack(Blocks.obsidian, 1);
+ if (canOutput(new ItemStack[] { tOutput }))
+ {
+ getInputAt(0).stackSize -= 1;
+ this.mOutputItems[0] = tOutput;
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ else if (canOutput(new ItemStack[] { tOutput }))
+ {
+ this.mOutputItems[0] = tOutput;
+ this.mMaxProgresstime = (16 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ }
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java
new file mode 100644
index 0000000000..6b53904fb4
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java
@@ -0,0 +1,215 @@
+package gregtech.common.tileentities.machines.basic;
+
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IIndividual;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Element;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.behaviors.Behaviour_DataOrb;
+
+import java.util.Map;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_Scanner
+ extends GT_MetaTileEntity_BasicMachine
+{
+ public GT_MetaTileEntity_Scanner(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 1, "Scans Crops and other things.", 1, 1, "Scanner.png", "", new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_SCANNER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_SCANNER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_SCANNER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_SCANNER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_SCANNER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_SCANNER), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_ACTIVE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER) });
+ }
+
+ public GT_MetaTileEntity_Scanner(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName)
+ {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Scanner(this.mName, this.mTier, this.mDescription, this.mTextures, this.mGUIName, this.mNEIName);
+ }
+
+ public int checkRecipe()
+ {
+ ItemStack aStack = getInputAt(0);
+ if (getOutputAt(0) != null)
+ {
+ this.mOutputBlocked += 1;
+ }
+ else if ((GT_Utility.isStackValid(aStack)) && (aStack.stackSize > 0))
+ {
+ if ((getFillableStack() != null) && (getFillableStack().containsFluid(Materials.Honey.getFluid(100L)))) {
+ try
+ {
+ Object tIndividual = AlleleManager.alleleRegistry.getIndividual(aStack);
+ if (tIndividual != null)
+ {
+ if (((IIndividual)tIndividual).analyze())
+ {
+ getFillableStack().amount -= 100;
+ this.mOutputItems[0] = GT_Utility.copy(new Object[] { aStack });
+ aStack.stackSize = 0;
+ NBTTagCompound tNBT = new NBTTagCompound();
+ ((IIndividual)tIndividual).writeToNBT(tNBT);
+ this.mOutputItems[0].setTagCompound(tNBT);
+ this.mMaxProgresstime = (500 / (1 << this.mTier - 1));
+ this.mEUt = (2 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ this.mOutputItems[0] = GT_Utility.copy(new Object[] { aStack });
+ aStack.stackSize = 0;
+ this.mMaxProgresstime = 1;
+ this.mEUt = 1;
+ return 2;
+ }
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ if (ItemList.IC2_Crop_Seeds.isStackEqual(aStack, true, true))
+ {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) {
+ tNBT = new NBTTagCompound();
+ }
+ if (tNBT.getByte("scan") < 4)
+ {
+ tNBT.setByte("scan", (byte)4);
+ this.mMaxProgresstime = (160 / (1 << this.mTier - 1));
+ this.mEUt = (8 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ }
+ else
+ {
+ this.mMaxProgresstime = 1;
+ this.mEUt = 1;
+ }
+ aStack.stackSize -= 1;
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { aStack });
+ this.mOutputItems[0].setTagCompound(tNBT);
+ return 2;
+ }
+ if (ItemList.Tool_DataOrb.isStackEqual(getSpecialSlot(), false, true))
+ {
+ if (ItemList.Tool_DataOrb.isStackEqual(aStack, false, true))
+ {
+ aStack.stackSize -= 1;
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { getSpecialSlot() });
+ this.mMaxProgresstime = (512 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ ItemData tData = GT_OreDictUnificator.getAssociation(aStack);
+ if ((tData != null) && ((tData.mPrefix == OrePrefixes.dust) || (tData.mPrefix == OrePrefixes.cell)) && (tData.mMaterial.mMaterial.mElement != null) && (!tData.mMaterial.mMaterial.mElement.mIsIsotope) && (tData.mMaterial.mMaterial != Materials.Magic) && (tData.mMaterial.mMaterial.getMass() > 0L))
+ {
+ getSpecialSlot().stackSize -= 1;
+ aStack.stackSize -= 1;
+
+ this.mOutputItems[0] = ItemList.Tool_DataOrb.get(1L, new Object[0]);
+ Behaviour_DataOrb.setDataTitle(this.mOutputItems[0], "Elemental-Scan");
+ Behaviour_DataOrb.setDataName(this.mOutputItems[0], tData.mMaterial.mMaterial.mElement.name());
+ this.mMaxProgresstime = ((int)(tData.mMaterial.mMaterial.getMass() * 8192L / (1 << this.mTier - 1)));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true))
+ {
+ if (ItemList.Tool_DataStick.isStackEqual(aStack, false, true))
+ {
+ aStack.stackSize -= 1;
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { getSpecialSlot() });
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ if (aStack.getItem() == Items.written_book)
+ {
+ getSpecialSlot().stackSize -= 1;
+ aStack.stackSize -= 1;
+
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { getSpecialSlot() });
+ this.mOutputItems[0].setTagCompound(aStack.getTagCompound());
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ if (aStack.getItem() == Items.filled_map)
+ {
+ getSpecialSlot().stackSize -= 1;
+ aStack.stackSize -= 1;
+
+ this.mOutputItems[0] = GT_Utility.copyAmount(1L, new Object[] { getSpecialSlot() });
+ this.mOutputItems[0].setTagCompound(GT_Utility.getNBTContainingShort(new NBTTagCompound(), "map_id", (short)aStack.getItemDamage()));
+ this.mMaxProgresstime = (128 / (1 << this.mTier - 1));
+ this.mEUt = (32 * (1 << this.mTier - 1) * (1 << this.mTier - 1));
+ return 2;
+ }
+ }
+ }
+ return 0;
+ }
+
+@Override
+public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (mProgresstime>=(mMaxProgresstime-1)) {try{
+ if(this.mOutputItems[0].getUnlocalizedName().equals("gt.metaitem.01.32707")){
+ GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "scanning");}}catch (Exception e){}
+ }
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+}
+
+
+ public GT_Recipe.GT_Recipe_Map getRecipeList()
+ {
+ return GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes;
+ }
+
+ public int getCapacity()
+ {
+ return 1000;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (getRecipeList().containsInput(aStack));
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(212)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java
new file mode 100644
index 0000000000..e0c6225a61
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java
@@ -0,0 +1,340 @@
+package gregtech.common.tileentities.machines.basic;
+
+import static gregtech.api.enums.GT_Values.V;
+import net.minecraft.client.particle.EntityFX;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityHanging;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.boss.EntityDragonPart;
+import net.minecraft.entity.effect.EntityWeatherEffect;
+import net.minecraft.entity.item.EntityBoat;
+import net.minecraft.entity.item.EntityEnderCrystal;
+import net.minecraft.entity.item.EntityEnderEye;
+import net.minecraft.entity.item.EntityFireworkRocket;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.item.EntityMinecart;
+import net.minecraft.entity.item.EntityTNTPrimed;
+import net.minecraft.entity.item.EntityXPOrb;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.entity.projectile.EntityFireball;
+import net.minecraft.entity.projectile.EntityFishHook;
+import net.minecraft.entity.projectile.EntityThrowable;
+import net.minecraft.init.Blocks;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_Teleporter;
+import gregtech.common.gui.GT_GUIContainer_FusionReactor;
+import gregtech.common.gui.GT_GUIContainer_Teleporter;
+
+public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank{
+
+ public int mTargetX = 0;
+ public int mTargetY = 0;
+ public int mTargetZ = 0;
+ public int mTargetD = 0;
+ public boolean mDebug = false;
+ public boolean hasEgg = false;
+ public static boolean sInterDimensionalTeleportAllowed = true;
+
+ public GT_MetaTileEntity_Teleporter(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "Teleport long distances with this little device.");
+ }
+
+ public GT_MetaTileEntity_Teleporter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ this.hasEgg = checkForEgg();
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_Teleporter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_Teleporter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Teleporter(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public String[] getInfoData()
+ {
+ return new String[] { "Coordinates:", "X: " + this.mTargetX, "Y: " + this.mTargetY, "Z: " + this.mTargetZ, "Dimension: " + this.mTargetD };
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1], (aSide !=this.getBaseMetaTileEntity().getFrontFacing()) ? null : aActive ? new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER) };
+ }
+
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ aNBT.setInteger("mTargetX", this.mTargetX);
+ aNBT.setInteger("mTargetY", this.mTargetY);
+ aNBT.setInteger("mTargetZ", this.mTargetZ);
+ aNBT.setInteger("mTargetD", this.mTargetD);
+ aNBT.setBoolean("mDebug", this.mDebug);
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ this.mTargetX = aNBT.getInteger("mTargetX");
+ this.mTargetY = aNBT.getInteger("mTargetY");
+ this.mTargetZ = aNBT.getInteger("mTargetZ");
+ this.mTargetD = aNBT.getInteger("mTargetD");
+ this.mDebug = aNBT.getBoolean("mDebug");
+ }
+
+ public void onConfigLoad(GT_Config aConfig)
+ {
+ sInterDimensionalTeleportAllowed = aConfig.get(ConfigCategories.machineconfig, "Teleporter.Interdimensional", true);
+ }
+
+ public void onFirstTick()
+ {
+ if (getBaseMetaTileEntity().isServerSide())
+ {
+ if ((this.mTargetX == 0) && (this.mTargetY == 0) && (this.mTargetZ == 0) && (this.mTargetD == 0))
+ {
+ this.mTargetX = getBaseMetaTileEntity().getXCoord();
+ this.mTargetY = getBaseMetaTileEntity().getYCoord();
+ this.mTargetZ = getBaseMetaTileEntity().getZCoord();
+ this.mTargetD = getBaseMetaTileEntity().getWorld().provider.dimensionId;
+ }
+ this.hasEgg = checkForEgg();
+ }
+ }
+
+ public boolean checkForEgg()
+ {
+ for (byte i = -5; i <= 5; i = (byte)(i + 1)) {
+ for (byte j = -5; j <= 5; j = (byte)(j + 1)) {
+ for (byte k = -5; k <= 5; k = (byte)(k + 1)) {
+ if (getBaseMetaTileEntity().getBlockOffset(i, j, k) == Blocks.dragon_egg) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean hasDimensionalTeleportCapability()
+ {
+ return (this.mDebug) || (this.hasEgg);
+ }
+
+ public boolean isDimensionalTeleportAvailable()
+ {
+ return (this.mDebug) || ((hasDimensionalTeleportCapability()) && (GT_Utility.isRealDimension(this.mTargetD)) && (GT_Utility.isRealDimension(getBaseMetaTileEntity().getWorld().provider.dimensionId)));
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (getBaseMetaTileEntity().isServerSide())
+ {
+ if (getBaseMetaTileEntity().getTimer() % 100L == 50L) {
+ this.hasEgg = checkForEgg();
+ }
+ if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().getRedstone()))
+ {
+ if(getBaseMetaTileEntity().decreaseStoredEnergyUnits(8192, false)){
+ int tDistance = distanceCalculation();
+ for (Object tObject : getBaseMetaTileEntity().getWorld().getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) + 2))) {
+ if (((tObject instanceof Entity)) && (!((Entity)tObject).isDead))
+ {
+ Entity tEntity = (Entity)tObject;
+ if (getBaseMetaTileEntity().decreaseStoredEnergyUnits((int)(tDistance * tDistance * weightCalculation(tEntity)), false))
+ {
+ if (tEntity.ridingEntity != null) {
+ tEntity.mountEntity(null);
+ }
+ if (tEntity.riddenByEntity != null) {
+ tEntity.riddenByEntity.mountEntity(null);
+ }
+ if ((this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) || (!isDimensionalTeleportAvailable()) || (!GT_Utility.moveEntityToDimensionAtCoords(tEntity, this.mTargetD, this.mTargetX + 0.5D, this.mTargetY + 0.5D, this.mTargetZ + 0.5D))) {
+ if ((tEntity instanceof EntityLivingBase)) {
+ ((EntityLivingBase)tEntity).setPositionAndUpdate(this.mTargetX + 0.5D, this.mTargetY + 0.5D, this.mTargetZ + 0.5D);
+ } else {
+ tEntity.setPosition(this.mTargetX + 0.5D, this.mTargetY + 0.5D, this.mTargetZ + 0.5D);
+ }
+ }
+ }
+ }
+ }}
+ getBaseMetaTileEntity().setActive(true);
+ }
+ else
+ {
+ getBaseMetaTileEntity().setActive(false);
+ }
+ }
+ }
+
+ private int distanceCalculation()
+ {
+ return Math.abs(((this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId) && (isDimensionalTeleportAvailable()) ? 100 : 1) * (int)Math.sqrt(Math.pow(getBaseMetaTileEntity().getXCoord() - this.mTargetX, 2.0D) + Math.pow(getBaseMetaTileEntity().getYCoord() - this.mTargetY, 2.0D) + Math.pow(getBaseMetaTileEntity().getZCoord() - this.mTargetZ, 2.0D)));
+ }
+
+ private static float weightCalculation(Entity aEntity)
+ {
+ try
+ {
+ if ((aEntity instanceof EntityFX)) {
+ return -1.0F;
+ }
+ }
+ catch (Throwable e) {}
+ if ((aEntity instanceof EntityFishHook)) {
+ return -1.0F;
+ }
+ if ((aEntity instanceof EntityDragonPart)) {
+ return -1.0F;
+ }
+ if ((aEntity instanceof EntityWeatherEffect)) {
+ return -1.0F;
+ }
+ if ((aEntity instanceof EntityPlayer))
+ {
+ EntityPlayer tPlayer = (EntityPlayer)aEntity;
+ int tCount = 64;
+ for (int i = 0; i < 36; i++) {
+ if (tPlayer.inventory.getStackInSlot(i) != null) {
+ tCount += (tPlayer.inventory.getStackInSlot(i).getMaxStackSize() > 1 ? tPlayer.inventory.getStackInSlot(i).stackSize : 64);
+ }
+ }
+ for (int i = 0; i < 4; i++) {
+ if (tPlayer.inventory.armorInventory[i] != null) {
+ tCount += 256;
+ }
+ }
+ return Math.min(5.0F, tCount / 666.6F);
+ }
+ if (GT_Utility.getClassName(aEntity).equals("EntityItnt")) {
+ return 5.0F;
+ }
+ if (GT_Utility.getClassName(aEntity).equals("EntityNuke")) {
+ return 50.0F;
+ }
+ if ((aEntity instanceof EntityArrow)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityBoat)) {
+ return 0.1F;
+ }
+ if ((aEntity instanceof EntityEnderCrystal)) {
+ return 2.0F;
+ }
+ if ((aEntity instanceof EntityEnderEye)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityFireball)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityFireworkRocket)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityHanging)) {
+ return 0.005F;
+ }
+ if ((aEntity instanceof EntityItem)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityLiving)) {
+ return 0.5F;
+ }
+ if ((aEntity instanceof EntityMinecart)) {
+ return 0.1F;
+ }
+ if ((aEntity instanceof EntityThrowable)) {
+ return 0.001F;
+ }
+ if ((aEntity instanceof EntityTNTPrimed)) {
+ return 5.0F;
+ }
+ if ((aEntity instanceof EntityXPOrb)) {
+ return 0.001F;
+ }
+ return -1.0F;
+ }
+
+ @Override public boolean isSimpleMachine() {return false;}
+ @Override public boolean isOverclockerUpgradable() {return false;}
+ @Override public boolean isTransformerUpgradable() {return false;}
+ @Override public boolean isElectric() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isEnetInput() {return true;}
+ @Override public boolean isInputFacing(byte aSide) {return true;}
+ @Override public boolean isOutputFacing(byte aSide) {return false;}
+ @Override public boolean isTeleporterCompatible() {return false;}
+ @Override public long getMinimumStoredEU() {return V[mTier]*16;}
+ @Override public long maxEUStore() {return 100000000;}
+ @Override public long maxEUInput() {return V[mTier];}
+ @Override public long maxSteamStore() {return maxEUStore();}
+ @Override public long maxAmperesIn() {return 2;}
+ @Override public int getStackDisplaySlot() {return 2;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+ @Override
+ public boolean doesFillContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean doesEmptyContainers() {
+ return false;
+ }
+
+ @Override
+ public boolean canTankBeFilled() {
+ return true;
+ }
+
+ @Override
+ public boolean canTankBeEmptied() {
+ return false;
+ }
+
+ @Override
+ public boolean displaysItemStack() {
+ return false;
+ }
+
+ @Override
+ public boolean displaysStackSize() {
+ return false;
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ return null;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java
new file mode 100644
index 0000000000..f510d064bb
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java
@@ -0,0 +1,402 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_BronzeBlastFurnace;
+import gregtech.common.gui.GT_GUIContainer_BronzeBlastFurnace;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_MetaTileEntity_BronzeBlastFurnace
+ extends MetaTileEntity
+{
+ public int mMaxProgresstime = 0;
+ public int mUpdate = 5;
+ public int mProgresstime = 0;
+ public boolean mMachine = false;
+ private static final ITexture[] FACING_SIDE = { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS) };
+ private static final ITexture[] FACING_FRONT = { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBLASTFURNACE) };
+ private static final ITexture[] FACING_ACTIVE = { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBLASTFURNACE_ACTIVE) };
+ public ItemStack mOutputItem1;
+ public ItemStack mOutputItem2;
+
+ public GT_MetaTileEntity_BronzeBlastFurnace(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, 4);
+ }
+
+ public GT_MetaTileEntity_BronzeBlastFurnace(String aName)
+ {
+ super(aName, 4);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "To get your first Steel", "Multiblock: 3x3x4 hollow with opening on top", "32 Bronze Plated Bricks required" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return aActive ? FACING_ACTIVE : FACING_FRONT;
+ }
+ return FACING_SIDE;
+ }
+
+ public boolean isSteampowered()
+ {
+ return false;
+ }
+
+ public boolean isElectric()
+ {
+ return false;
+ }
+
+ public boolean isPneumatic()
+ {
+ return false;
+ }
+
+ public boolean isEnetInput()
+ {
+ return false;
+ }
+
+ public boolean isEnetOutput()
+ {
+ return false;
+ }
+
+ public boolean isInputFacing(byte aSide)
+ {
+ return false;
+ }
+
+ public boolean isOutputFacing(byte aSide)
+ {
+ return false;
+ }
+
+ public boolean isTeleporterCompatible()
+ {
+ return false;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean isAccessAllowed(EntityPlayer aPlayer)
+ {
+ return true;
+ }
+
+ public int getProgresstime()
+ {
+ return this.mProgresstime;
+ }
+
+ public int maxProgresstime()
+ {
+ return this.mMaxProgresstime;
+ }
+
+ public int increaseProgress(int aProgress)
+ {
+ this.mProgresstime += aProgress;return this.mMaxProgresstime - this.mProgresstime;
+ }
+
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID)
+ {
+ return (GregTech_API.getCoverBehavior(aCoverID.toStack()).isSimpleCover()) && (super.allowCoverOnSide(aSide, aCoverID));
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_BronzeBlastFurnace(this.mName);
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ aNBT.setInteger("mProgresstime", this.mProgresstime);
+ aNBT.setInteger("mMaxProgresstime", this.mMaxProgresstime);
+ if (this.mOutputItem1 != null)
+ {
+ NBTTagCompound tNBT = new NBTTagCompound();
+ this.mOutputItem1.writeToNBT(tNBT);
+ aNBT.setTag("mOutputItem1", tNBT);
+ }
+ if (this.mOutputItem2 != null)
+ {
+ NBTTagCompound tNBT = new NBTTagCompound();
+ this.mOutputItem2.writeToNBT(tNBT);
+ aNBT.setTag("mOutputItem2", tNBT);
+ }
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ this.mUpdate = 5;
+ this.mProgresstime = aNBT.getInteger("mProgresstime");
+ this.mMaxProgresstime = aNBT.getInteger("mMaxProgresstime");
+ this.mOutputItem1 = GT_Utility.loadItem(aNBT, "mOutputItem1");
+ this.mOutputItem2 = GT_Utility.loadItem(aNBT, "mOutputItem2");
+ }
+
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer)
+ {
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ }
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_Container_BronzeBlastFurnace(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BronzeBlastFurnace(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ private boolean checkMachine()
+ {
+ int xDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetZ;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 3; j++) {
+ for (int k = -1; k < 2; k++) {
+ if ((xDir + i != 0) || (j != 0) || (zDir + k != 0)) {
+ if ((i != 0) || (j == -1) || (k != 0))
+ {
+ if ((getBaseMetaTileEntity().getBlockOffset(xDir + i, j, zDir + k) != GregTech_API.sBlockCasings1) || (getBaseMetaTileEntity().getMetaIDOffset(xDir + i, j, zDir + k) != 10)) {
+ return false;
+ }
+ }
+ else if ((!GT_Utility.arrayContains(getBaseMetaTileEntity().getBlockOffset(xDir + i, j, zDir + k), new Object[] { Blocks.lava, Blocks.flowing_lava, null })) && (!getBaseMetaTileEntity().getAirOffset(xDir + i, j, zDir + k))) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ public void onMachineBlockUpdate()
+ {
+ this.mUpdate = 5;
+ }
+
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer)
+ {
+ if ((aBaseMetaTileEntity.isClientSide()) &&
+ (aBaseMetaTileEntity.isActive())) {
+ aBaseMetaTileEntity.getWorld().spawnParticle("largesmoke", aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1) + Math.random(), aBaseMetaTileEntity.getOffsetY(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1) + Math.random(), 0.0D, 0.3D, 0.0D);
+ }
+ if (aBaseMetaTileEntity.isServerSide())
+ {
+ if (this.mUpdate-- == 0) {
+ this.mMachine = checkMachine();
+ }
+ if (this.mMachine) {
+ if (this.mMaxProgresstime > 0)
+ {
+ if (++this.mProgresstime >= this.mMaxProgresstime)
+ {
+ addOutputProducts();
+ this.mOutputItem1 = null;
+ this.mOutputItem2 = null;
+ this.mProgresstime = 0;
+ this.mMaxProgresstime = 0;
+ try{GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "steel");}catch(Exception e){}
+ }
+ }
+ else if (aBaseMetaTileEntity.isAllowedToWork()) {
+ checkRecipe();
+ }
+ }
+ aBaseMetaTileEntity.setActive((this.mMaxProgresstime > 0) && (this.mMachine));
+ if (aBaseMetaTileEntity.isActive())
+ {
+ if (aBaseMetaTileEntity.getAir(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1)))
+ {
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1), Blocks.lava, 1, 2);
+ this.mUpdate = 1;
+ }
+ if (aBaseMetaTileEntity.getAir(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord() + 1, aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1)))
+ {
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord() + 1, aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1), Blocks.lava, 1, 2);
+ this.mUpdate = 1;
+ }
+ }
+ else
+ {
+ if (aBaseMetaTileEntity.getBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1)) == Blocks.lava)
+ {
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1), Blocks.air, 0, 2);
+ this.mUpdate = 1;
+ }
+ if (aBaseMetaTileEntity.getBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord() + 1, aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1)) == Blocks.lava)
+ {
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1), aBaseMetaTileEntity.getYCoord() + 1, aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1), Blocks.air, 0, 2);
+ this.mUpdate = 1;
+ }
+ }
+ }
+ }
+
+ private void addOutputProducts()
+ {
+ if (this.mOutputItem1 != null) {
+ if (this.mInventory[2] == null) {
+ this.mInventory[2] = GT_Utility.copy(new Object[] { this.mOutputItem1 });
+ } else if (GT_Utility.areStacksEqual(this.mInventory[2], this.mOutputItem1)) {
+ this.mInventory[2].stackSize = Math.min(this.mOutputItem1.getMaxStackSize(), this.mOutputItem1.stackSize + this.mInventory[2].stackSize);
+ }
+ }
+ if (this.mOutputItem2 != null) {
+ if (this.mInventory[3] == null) {
+ this.mInventory[3] = GT_Utility.copy(new Object[] { this.mOutputItem2 });
+ } else if (GT_Utility.areStacksEqual(this.mInventory[3], this.mOutputItem2)) {
+ this.mInventory[3].stackSize = Math.min(this.mOutputItem2.getMaxStackSize(), this.mOutputItem2.stackSize + this.mInventory[3].stackSize);
+ }
+ }
+ }
+
+ private boolean spaceForOutput(ItemStack aStack1, ItemStack aStack2)
+ {
+ if (((this.mInventory[2] == null) || (aStack1 == null) || ((this.mInventory[2].stackSize + aStack1.stackSize <= this.mInventory[2].getMaxStackSize()) && (GT_Utility.areStacksEqual(this.mInventory[2], aStack1)))) && (
+ (this.mInventory[3] == null) || (aStack2 == null) || ((this.mInventory[3].stackSize + aStack2.stackSize <= this.mInventory[3].getMaxStackSize()) && (GT_Utility.areStacksEqual(this.mInventory[3], aStack2))))) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean checkRecipe()
+ {
+ if (!this.mMachine) {
+ return false;
+ }
+ if ((this.mInventory[0] != null) && (this.mInventory[1] != null) && (this.mInventory[0].stackSize >= 1)) {
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[0], "dustIron")) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[0], "ingotIron")))
+ {
+ if ((this.mInventory[1].getItem() == Items.coal) && (this.mInventory[1].stackSize >= 4) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 4);
+ this.mMaxProgresstime = 7200;
+ return true;
+ }
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "fuelCoke")) && (this.mInventory[1].stackSize >= 2) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 2);
+ this.mMaxProgresstime = 4800;
+ return true;
+ }
+ if ((this.mInventory[0].stackSize >= 9) && ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCoal")) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCharcoal"))) && (this.mInventory[1].stackSize >= 4) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 9L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 9);
+ getBaseMetaTileEntity().decrStackSize(1, 4);
+ this.mMaxProgresstime = 64800;
+ return true;
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[0], "dustSteel"))
+ {
+ if ((this.mInventory[1].getItem() == Items.coal) && (this.mInventory[1].stackSize >= 2) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 2);
+ this.mMaxProgresstime = 3600;
+ return true;
+ }
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "fuelCoke")) && (this.mInventory[1].stackSize >= 1) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 2L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 1);
+ this.mMaxProgresstime = 2400;
+ return true;
+ }
+ if ((this.mInventory[0].stackSize >= 9) && ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCoal")) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCharcoal"))) && (this.mInventory[1].stackSize >= 2) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 9L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 2L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 9);
+ getBaseMetaTileEntity().decrStackSize(1, 2);
+ this.mMaxProgresstime = 32400;
+ return true;
+ }
+ }
+ else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[0], "blockIron"))
+ {
+ if ((this.mInventory[1].getItem() == Items.coal) && (this.mInventory[1].stackSize >= 36) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 9L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 36);
+ this.mMaxProgresstime = 64800;
+ return true;
+ }
+ if ((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "fuelCoke")) && (this.mInventory[1].stackSize >= 18) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 9L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 18);
+ this.mMaxProgresstime = 43200;
+ return true;
+ }
+ if (((GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCoal")) || (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[1], "blockCharcoal"))) && (this.mInventory[1].stackSize >= 4) && (spaceForOutput(this.mOutputItem1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 9L), this.mOutputItem2 = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L))))
+ {
+ getBaseMetaTileEntity().decrStackSize(0, 1);
+ getBaseMetaTileEntity().decrStackSize(1, 4);
+ this.mMaxProgresstime = 64800;
+ return true;
+ }
+ }
+ }
+ this.mOutputItem1 = null;
+ this.mOutputItem2 = null;
+ return false;
+ }
+
+ public boolean isGivingInformation()
+ {
+ return false;
+ }
+
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return aIndex > 1;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (aIndex < 2) {}
+ return !GT_Utility.areStacksEqual(aStack, this.mInventory[0]);
+ }
+
+ public byte getTileEntityBaseType()
+ {
+ return 0;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
new file mode 100644
index 0000000000..632cdcbd6f
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
@@ -0,0 +1,192 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import scala.actors.threadpool.Arrays;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_DistillationTower
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ public GT_MetaTileEntity_DistillationTower(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_DistillationTower(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_DistillationTower(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Distillation Tower", "Size: 3x6x3 (Hollow)", "Controller (front bottom)", "1x Input Hatch (bottom)", "5x Output Hatch (one each height level besides botton)","1x Output Bus (Botton)", "1x Energy Hatch (anywhere)", "1x Maintenance Hatch (anywhere)", "Clean Stainless Steel Casings for the rest (26 at least!)" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[49], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[49] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "VacuumFreezer.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ return GT_Recipe.GT_Recipe_Map.sDistillationRecipes;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+
+ long tVoltage = getMaxInputVoltage();
+ byte tTier = (byte)Math.max(1, GT_Utility.getTier(tVoltage));
+ if(this.mInputHatches.size()>0&&this.mInputHatches.get(0)!=null&&this.mInputHatches.get(0).mFluid!=null&&this.mInputHatches.get(0).mFluid.amount>0){
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sDistillationRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], new FluidStack[]{this.mInputHatches.get(0).mFluid}, new ItemStack[] {});
+ if (tRecipe != null) {
+ if (tRecipe.isRecipeInputEqual(true, new FluidStack[]{this.mInputHatches.get(0).mFluid}, new ItemStack[] {}))
+ {
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
+ this.mMaxProgresstime = (tRecipe.mDuration / (1 << tTier - 1));
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = tRecipe.mDuration;
+ while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)])
+ {
+ this.mEUt *= 4;
+ this.mMaxProgresstime /= 2;
+ }
+ }
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+ this.mOutputItems = new ItemStack[] { tRecipe.getOutput(0) };
+ this.mOutputFluids = tRecipe.mFluidOutputs;
+ updateSlots();
+ return true;
+ }
+ }}
+
+ return false;
+ }
+ private static boolean controller;
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 1, zDir)) {
+ return false;
+ }
+ int tAmount = 0;
+ controller=false;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = 0; h < 6; h++) {
+ if (!(i==0&&j==0&&(h>0&&h<5)))//((h > 0)&&(h<5)) || (((xDir + i != 0) || (zDir + j != 0)) && ((i != 0) || (j != 0)))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, h, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 49)) && (!addInputToMachineList(tTileEntity, 49)) && (!addOutputToMachineList(tTileEntity, 49)) && (!addEnergyInputToMachineList(tTileEntity, 49))&&(!ignoreController(aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j))))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j) != GregTech_API.sBlockCasings4) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j) != 1) {
+ return false;
+ }
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ if(this.mInputHatches.size()!=1||this.mOutputBusses.size()!=1||this.mInputBusses.size()!=0||this.mOutputHatches.size()!=5){return false;}
+ int height = this.getBaseMetaTileEntity().getYCoord();
+ if(this.mInputHatches.get(0).getBaseMetaTileEntity().getYCoord()!=height||this.mOutputBusses.get(0).getBaseMetaTileEntity().getYCoord()!=height){return false;}
+ GT_MetaTileEntity_Hatch_Output[] tmpHatches = new GT_MetaTileEntity_Hatch_Output[5];
+ for(int i=0;i< this.mOutputHatches.size();i++){
+ int hatchNumber = this.mOutputHatches.get(i).getBaseMetaTileEntity().getYCoord()-1-height;
+ if(tmpHatches[hatchNumber]==null){
+ tmpHatches[hatchNumber]=this.mOutputHatches.get(i);
+ }else{return false;}
+ }
+ this.mOutputHatches.clear();
+ for(int i=0;i< tmpHatches.length;i++){
+ this.mOutputHatches.add(tmpHatches[i]);
+ }
+ return tAmount >= 26;
+ }
+
+ public boolean ignoreController(Block tTileEntity){
+ if(!controller&&tTileEntity == GregTech_API.sBlockMachines){return true;}
+ return false;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 1;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java
new file mode 100644
index 0000000000..8e77293c43
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java
@@ -0,0 +1,243 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_ElectricBlastFurnace
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ private int mHeatingCapacity = 0;
+
+ public GT_MetaTileEntity_ElectricBlastFurnace(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_ElectricBlastFurnace(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ElectricBlastFurnace(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Blast Furnace", "Size: 3x3x4 (Hollow)", "Controller (front middle at bottom)", "16x Heating Coils (two middle Layers, hollow)", "1x Input (one of bottom)", "1x Output (one of bottom)", "1x Energy Hatch (one of bottom)", "1x Maintenance Hatch (one of bottom)", "1x Muffler Hatch (top middle)", "Heat Proof Machine Casings for the rest" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[11], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[11] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ElectricBlastFurnace.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ return GT_Recipe.GT_Recipe_Map.sBlastRecipes;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ for (int i = 0; i < tInputList.size() - 1; i++) {
+ for (int j = i + 1; j < tInputList.size(); j++) {
+ if (GT_Utility.areStacksEqual((ItemStack)tInputList.get(i), (ItemStack)tInputList.get(j))) {
+ if (((ItemStack)tInputList.get(i)).stackSize >= ((ItemStack)tInputList.get(j)).stackSize)
+ {
+ tInputList.remove(j--);
+ }
+ else
+ {
+ tInputList.remove(i--); break;
+ }
+ }
+ }
+ }
+ ItemStack[] tInputs = (ItemStack[])Arrays.copyOfRange(tInputList.toArray(new ItemStack[tInputList.size()]), 0, 2);
+
+ ArrayList<FluidStack> tFluidList = getStoredFluids();
+ for (int i = 0; i < tFluidList.size() - 1; i++) {
+ for (int j = i + 1; j < tFluidList.size(); j++) {
+ if (GT_Utility.areFluidsEqual((FluidStack)tFluidList.get(i), (FluidStack)tFluidList.get(j))) {
+ if (((FluidStack)tFluidList.get(i)).amount >= ((FluidStack)tFluidList.get(j)).amount)
+ {
+ tFluidList.remove(j--);
+ }
+ else
+ {
+ tFluidList.remove(i--); break;
+ }
+ }
+ }
+ }
+ FluidStack[] tFluids = (FluidStack[])Arrays.copyOfRange(tFluidList.toArray(new FluidStack[tInputList.size()]), 0, 1);
+ if (tInputList.size() > 0)
+ {
+ long tVoltage = getMaxInputVoltage();
+ byte tTier = (byte)Math.max(1, GT_Utility.getTier(tVoltage));
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sBlastRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], tFluids, tInputs);
+ if ((tRecipe != null) && (this.mHeatingCapacity >= tRecipe.mSpecialValue) && (tRecipe.isRecipeInputEqual(true, tFluids, tInputs)))
+ {
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
+ this.mMaxProgresstime = (tRecipe.mDuration / (1 << tTier - 1));
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = tRecipe.mDuration;
+ while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)])
+ {
+ this.mEUt *= 4;
+ this.mMaxProgresstime /= 2;
+ }
+ }
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+ this.mOutputItems = new ItemStack[] { tRecipe.getOutput(0), tRecipe.getOutput(1) };
+ updateSlots();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+
+ this.mHeatingCapacity = 0;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 1, zDir)) {
+ return false;
+ }
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 2, zDir)) {
+ return false;
+ }
+ addMufflerToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir, 3, zDir), 11);
+
+ byte tUsedMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + 1, 2, zDir);
+ switch (tUsedMeta)
+ {
+ case 12:
+ this.mHeatingCapacity = 1800; break;
+ case 13:
+ this.mHeatingCapacity = 2700; break;
+ case 14:
+ this.mHeatingCapacity = 3600; break;
+ default:
+ return false;
+ }
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((i != 0) || (j != 0))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 2, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 2, zDir + j) != tUsedMeta) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 1, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 1, zDir + j) != tUsedMeta) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 3, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 3, zDir + j) != 11) {
+ return false;
+ }
+ }
+ }
+ }
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((xDir + i != 0) || (zDir + j != 0))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 0, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 11)) && (!addInputToMachineList(tTileEntity, 11)) && (!addOutputToMachineList(tTileEntity, 11)) && (!addEnergyInputToMachineList(tTileEntity, 11)))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 0, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 0, zDir + j) != 11) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ this.mHeatingCapacity += 100 * (GT_Utility.getTier(getMaxInputVoltage()) - 2);
+ return true;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 10;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 2;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
new file mode 100644
index 0000000000..8a5a1d6b84
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
@@ -0,0 +1,445 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.metatileentity.implementations.*;
+import gregtech.common.gui.GT_GUIContainer_FusionReactor;
+import net.minecraft.block.Block;
+import net.minecraft.client.multiplayer.WorldClient;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldType;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract class GT_MetaTileEntity_FusionComputer extends GT_MetaTileEntity_MultiBlockBase {
+
+ public GT_Recipe mLastRecipe;
+ public int mEUStore;
+
+ public GT_MetaTileEntity_FusionComputer(int aID, String aName, String aNameRegional, int tier) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_FusionComputer(String aName) {
+ super(aName);
+ }
+
+ public abstract int tier();
+
+ public abstract long maxEUStore();
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_MultiMachine(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_FusionReactor(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "FusionComputer.png", GT_Recipe.GT_Recipe_Map.sFusionRecipes.mNEIName);
+ }
+
+ public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity);
+
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aStack) {
+
+ return aSide != getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ int xCenter = getBaseMetaTileEntity().getXCoord() + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX * 5;
+ int yCenter = getBaseMetaTileEntity().getYCoord();
+ int zCenter = getBaseMetaTileEntity().getZCoord() + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ * 5;
+ if (((isAdvancedMachineCasing(xCenter + 5, yCenter, zCenter)) || (xCenter + 5 == getBaseMetaTileEntity().getXCoord()))
+ && ((isAdvancedMachineCasing(xCenter - 5, yCenter, zCenter)) || (xCenter - 5 == getBaseMetaTileEntity().getXCoord()))
+ && ((isAdvancedMachineCasing(xCenter, yCenter, zCenter + 5)) || (zCenter + 5 == getBaseMetaTileEntity().getZCoord()))
+ && ((isAdvancedMachineCasing(xCenter, yCenter, zCenter - 5)) || (zCenter - 5 == getBaseMetaTileEntity().getZCoord())) && (checkCoils(xCenter, yCenter, zCenter))
+ && (checkHulls(xCenter, yCenter, zCenter)) && (checkUpperOrLowerHulls(xCenter, yCenter + 1, zCenter)) && (checkUpperOrLowerHulls(xCenter, yCenter - 1, zCenter))
+ && (addIfEnergyInjector(xCenter + 4, yCenter, zCenter + 3, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter + 4, yCenter, zCenter - 3, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter + 4, yCenter, zCenter + 5, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter + 4, yCenter, zCenter - 5, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter - 4, yCenter, zCenter + 3, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 4, yCenter, zCenter - 3, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter - 4, yCenter, zCenter + 5, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 4, yCenter, zCenter - 5, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter + 3, yCenter, zCenter + 4, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 3, yCenter, zCenter + 4, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter + 5, yCenter, zCenter + 4, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 5, yCenter, zCenter + 4, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter + 3, yCenter, zCenter - 4, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 3, yCenter, zCenter - 4, aBaseMetaTileEntity))
+ && (addIfEnergyInjector(xCenter + 5, yCenter, zCenter - 4, aBaseMetaTileEntity)) && (addIfEnergyInjector(xCenter - 5, yCenter, zCenter - 4, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter + 1, yCenter, zCenter - 5, aBaseMetaTileEntity)) && (addIfExtractor(xCenter + 1, yCenter, zCenter + 5, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter - 1, yCenter, zCenter - 5, aBaseMetaTileEntity)) && (addIfExtractor(xCenter - 1, yCenter, zCenter + 5, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter + 1, yCenter, zCenter - 7, aBaseMetaTileEntity)) && (addIfExtractor(xCenter + 1, yCenter, zCenter + 7, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter - 1, yCenter, zCenter - 7, aBaseMetaTileEntity)) && (addIfExtractor(xCenter - 1, yCenter, zCenter + 7, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter + 5, yCenter, zCenter - 1, aBaseMetaTileEntity)) && (addIfExtractor(xCenter + 5, yCenter, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter - 5, yCenter, zCenter - 1, aBaseMetaTileEntity)) && (addIfExtractor(xCenter - 5, yCenter, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter + 7, yCenter, zCenter - 1, aBaseMetaTileEntity)) && (addIfExtractor(xCenter + 7, yCenter, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfExtractor(xCenter - 7, yCenter, zCenter - 1, aBaseMetaTileEntity)) && (addIfExtractor(xCenter - 7, yCenter, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter + 1, yCenter + 1, zCenter - 6, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 1, yCenter + 1, zCenter + 6, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 1, yCenter + 1, zCenter - 6, aBaseMetaTileEntity)) && (addIfInjector(xCenter - 1, yCenter + 1, zCenter + 6, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 6, yCenter + 1, zCenter + 1, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 6, yCenter + 1, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 6, yCenter + 1, zCenter - 1, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 6, yCenter + 1, zCenter - 1, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter + 1, yCenter - 1, zCenter - 6, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 1, yCenter - 1, zCenter + 6, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 1, yCenter - 1, zCenter - 6, aBaseMetaTileEntity)) && (addIfInjector(xCenter - 1, yCenter - 1, zCenter + 6, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 6, yCenter - 1, zCenter + 1, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 6, yCenter - 1, zCenter + 1, aBaseMetaTileEntity))
+ && (addIfInjector(xCenter - 6, yCenter - 1, zCenter - 1, aBaseMetaTileEntity)) && (addIfInjector(xCenter + 6, yCenter - 1, zCenter - 1, aBaseMetaTileEntity))
+ && (this.mEnergyHatches.size() >= 1) && (this.mOutputHatches.size() >= 1) && (this.mInputHatches.size() >= 2)) {
+ if (this.mEnergyHatches != null) {
+ for (int i = 0; i < this.mEnergyHatches.size(); i++) {
+ if (this.mEnergyHatches.get(i).mTier < tier())
+ return false;
+ }
+ }
+ if (this.mOutputHatches != null) {
+ for (int i = 0; i < this.mOutputHatches.size(); i++) {
+ if (this.mOutputHatches.get(i).mTier < tier())
+ return false;
+ }
+ }
+ if (this.mInputHatches != null) {
+ for (int i = 0; i < this.mInputHatches.size(); i++) {
+ if (this.mInputHatches.get(i).mTier < tier())
+ return false;
+ }
+ }
+ mWrench = true;
+ mScrewdriver = true;
+ mSoftHammer = true;
+ mHardHammer = true;
+ mSolderingTool = true;
+ mCrowbar = true;
+ return true;
+ }
+ return false;
+ }
+
+ private boolean checkTier(byte tier, ArrayList<GT_MetaTileEntity_Hatch> list) {
+ if (list != null) {
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i).mTier < tier) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ private boolean checkCoils(int aX, int aY, int aZ) {
+ return (isFusionCoil(aX + 6, aY, aZ - 1)) && (isFusionCoil(aX + 6, aY, aZ)) && (isFusionCoil(aX + 6, aY, aZ + 1)) && (isFusionCoil(aX + 5, aY, aZ - 3)) && (isFusionCoil(aX + 5, aY, aZ - 2))
+ && (isFusionCoil(aX + 5, aY, aZ + 2)) && (isFusionCoil(aX + 5, aY, aZ + 3)) && (isFusionCoil(aX + 4, aY, aZ - 4)) && (isFusionCoil(aX + 4, aY, aZ + 4))
+ && (isFusionCoil(aX + 3, aY, aZ - 5)) && (isFusionCoil(aX + 3, aY, aZ + 5)) && (isFusionCoil(aX + 2, aY, aZ - 5)) && (isFusionCoil(aX + 2, aY, aZ + 5))
+ && (isFusionCoil(aX + 1, aY, aZ - 6)) && (isFusionCoil(aX + 1, aY, aZ + 6)) && (isFusionCoil(aX, aY, aZ - 6)) && (isFusionCoil(aX, aY, aZ + 6)) && (isFusionCoil(aX - 1, aY, aZ - 6))
+ && (isFusionCoil(aX - 1, aY, aZ + 6)) && (isFusionCoil(aX - 2, aY, aZ - 5)) && (isFusionCoil(aX - 2, aY, aZ + 5)) && (isFusionCoil(aX - 3, aY, aZ - 5))
+ && (isFusionCoil(aX - 3, aY, aZ + 5)) && (isFusionCoil(aX - 4, aY, aZ - 4)) && (isFusionCoil(aX - 4, aY, aZ + 4)) && (isFusionCoil(aX - 5, aY, aZ - 3))
+ && (isFusionCoil(aX - 5, aY, aZ - 2)) && (isFusionCoil(aX - 5, aY, aZ + 2)) && (isFusionCoil(aX - 5, aY, aZ + 3)) && (isFusionCoil(aX - 6, aY, aZ - 1))
+ && (isFusionCoil(aX - 6, aY, aZ)) && (isFusionCoil(aX - 6, aY, aZ + 1));
+ }
+
+ private boolean checkUpperOrLowerHulls(int aX, int aY, int aZ) {
+ return (isAdvancedMachineCasing(aX + 6, aY, aZ)) && (isAdvancedMachineCasing(aX + 5, aY, aZ - 3)) && (isAdvancedMachineCasing(aX + 5, aY, aZ - 2))
+ && (isAdvancedMachineCasing(aX + 5, aY, aZ + 2)) && (isAdvancedMachineCasing(aX + 5, aY, aZ + 3)) && (isAdvancedMachineCasing(aX + 4, aY, aZ - 4))
+ && (isAdvancedMachineCasing(aX + 4, aY, aZ + 4)) && (isAdvancedMachineCasing(aX + 3, aY, aZ - 5)) && (isAdvancedMachineCasing(aX + 3, aY, aZ + 5))
+ && (isAdvancedMachineCasing(aX + 2, aY, aZ - 5)) && (isAdvancedMachineCasing(aX + 2, aY, aZ + 5)) && (isAdvancedMachineCasing(aX, aY, aZ - 6))
+ && (isAdvancedMachineCasing(aX, aY, aZ + 6)) && (isAdvancedMachineCasing(aX - 2, aY, aZ - 5)) && (isAdvancedMachineCasing(aX - 2, aY, aZ + 5))
+ && (isAdvancedMachineCasing(aX - 3, aY, aZ - 5)) && (isAdvancedMachineCasing(aX - 3, aY, aZ + 5)) && (isAdvancedMachineCasing(aX - 4, aY, aZ - 4))
+ && (isAdvancedMachineCasing(aX - 4, aY, aZ + 4)) && (isAdvancedMachineCasing(aX - 5, aY, aZ - 3)) && (isAdvancedMachineCasing(aX - 5, aY, aZ - 2))
+ && (isAdvancedMachineCasing(aX - 5, aY, aZ + 2)) && (isAdvancedMachineCasing(aX - 5, aY, aZ + 3)) && (isAdvancedMachineCasing(aX - 6, aY, aZ));
+ }
+
+ private boolean checkHulls(int aX, int aY, int aZ) {
+ return (isAdvancedMachineCasing(aX + 6, aY, aZ - 3)) && (isAdvancedMachineCasing(aX + 6, aY, aZ - 2)) && (isAdvancedMachineCasing(aX + 6, aY, aZ + 2))
+ && (isAdvancedMachineCasing(aX + 6, aY, aZ + 3)) && (isAdvancedMachineCasing(aX + 3, aY, aZ - 6)) && (isAdvancedMachineCasing(aX + 3, aY, aZ + 6))
+ && (isAdvancedMachineCasing(aX + 2, aY, aZ - 6)) && (isAdvancedMachineCasing(aX + 2, aY, aZ + 6)) && (isAdvancedMachineCasing(aX - 2, aY, aZ - 6))
+ && (isAdvancedMachineCasing(aX - 2, aY, aZ + 6)) && (isAdvancedMachineCasing(aX - 3, aY, aZ - 6)) && (isAdvancedMachineCasing(aX - 3, aY, aZ + 6))
+ && (isAdvancedMachineCasing(aX - 7, aY, aZ)) && (isAdvancedMachineCasing(aX + 7, aY, aZ)) && (isAdvancedMachineCasing(aX, aY, aZ - 7)) && (isAdvancedMachineCasing(aX, aY, aZ + 7))
+ && (isAdvancedMachineCasing(aX - 6, aY, aZ - 3)) && (isAdvancedMachineCasing(aX - 6, aY, aZ - 2)) && (isAdvancedMachineCasing(aX - 6, aY, aZ + 2))
+ && (isAdvancedMachineCasing(aX - 6, aY, aZ + 3)) && (isAdvancedMachineCasing(aX - 4, aY, aZ - 2)) && (isAdvancedMachineCasing(aX - 4, aY, aZ + 2))
+ && (isAdvancedMachineCasing(aX + 4, aY, aZ - 2)) && (isAdvancedMachineCasing(aX + 4, aY, aZ + 2)) && (isAdvancedMachineCasing(aX - 2, aY, aZ - 4))
+ && (isAdvancedMachineCasing(aX - 2, aY, aZ + 4)) && (isAdvancedMachineCasing(aX + 2, aY, aZ - 4)) && (isAdvancedMachineCasing(aX + 2, aY, aZ + 4));
+ }
+
+ private boolean addIfEnergyInjector(int aX, int aY, int aZ, IGregTechTileEntity aBaseMetaTileEntity) {
+ if (addEnergyInputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntity(aX, aY, aZ), 53)) {
+ return true;
+ }
+ return isAdvancedMachineCasing(aX, aY, aZ);
+ }
+
+ private boolean addIfInjector(int aX, int aY, int aZ, IGregTechTileEntity aTileEntity) {
+ if (addInputToMachineList(aTileEntity.getIGregTechTileEntity(aX, aY, aZ), 53)) {
+ return true;
+ }
+ return isAdvancedMachineCasing(aX, aY, aZ);
+ }
+
+ private boolean addIfExtractor(int aX, int aY, int aZ, IGregTechTileEntity aTileEntity) {
+ if (addOutputToMachineList(aTileEntity.getIGregTechTileEntity(aX, aY, aZ), 53)) {
+ return true;
+ }
+ return isAdvancedMachineCasing(aX, aY, aZ);
+ }
+
+ private boolean isAdvancedMachineCasing(int aX, int aY, int aZ) {
+ return (getBaseMetaTileEntity().getBlock(aX, aY, aZ) == getCasing()) && (getBaseMetaTileEntity().getMetaID(aX, aY, aZ) == getCasingMeta());
+ }
+
+ public abstract Block getCasing();
+
+ public abstract int getCasingMeta();
+
+ private boolean isFusionCoil(int aX, int aY, int aZ) {
+ return (getBaseMetaTileEntity().getBlock(aX, aY, aZ) == getFusionCoil() && (getBaseMetaTileEntity().getMetaID(aX, aY, aZ) == getFusionCoilMeta()));
+ }
+
+ public abstract Block getFusionCoil();
+
+ public abstract int getFusionCoilMeta();
+
+ public abstract String[] getDescription();
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ ITexture[] sTexture;
+ if (aSide == aFacing) {
+ sTexture = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, Dyes.getModulation(-1, Dyes._NULL.mRGBa)), new GT_RenderedTexture(getIconOverlay()) };
+ } else {
+ if (!aActive) {
+ sTexture = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) };
+ } else {
+ sTexture = new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) };
+ }
+ }
+ return sTexture;
+ }
+
+ public abstract IIconContainer getIconOverlay();
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack aStack) {
+ return true;
+ }
+
+ public int overclock(int mStartEnergy) {
+ if (tierOverclock() == 1) {
+ return 1;
+ }
+ if (tierOverclock() == 2) {
+ return mStartEnergy < 160000000 ? 2 : 1;
+ }
+ return mStartEnergy < 160000000 ? 4 : mStartEnergy > 320000000 ? 2 : 1;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack aStack) {
+ ArrayList<FluidStack> tFluidList = getStoredFluids();
+ for (int i = 0; i < tFluidList.size() - 1; i++) {
+ for (int j = i + 1; j < tFluidList.size(); j++) {
+ if (GT_Utility.areFluidsEqual((FluidStack) tFluidList.get(i), (FluidStack) tFluidList.get(j))) {
+ if (((FluidStack) tFluidList.get(i)).amount >= ((FluidStack) tFluidList.get(j)).amount) {
+ tFluidList.remove(j--);
+ } else {
+ tFluidList.remove(i--);
+ break;
+ }
+ }
+ }
+ }
+ if (tFluidList.size() > 1) {
+ FluidStack[] tFluids = tFluidList.toArray(new FluidStack[tFluidList.size()]);
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sFusionRecipes.findRecipe(this.getBaseMetaTileEntity(), this.mLastRecipe, false, GT_Values.V[8], tFluids, new ItemStack[] {});
+ if (tRecipe == null&&!mRunningOnLoad) {
+ turnCasingActive(false);
+ this.mLastRecipe = null;
+ return false;
+ }
+ if (mRunningOnLoad||tRecipe.isRecipeInputEqual(true, tFluids, new ItemStack[] {})) {
+ this.mLastRecipe = tRecipe;
+ this.mEUt = (this.mLastRecipe.mEUt * overclock(this.mLastRecipe.mSpecialValue));
+ this.mMaxProgresstime = this.mLastRecipe.mDuration / overclock(this.mLastRecipe.mSpecialValue);
+ this.mEfficiencyIncrease = 10000;
+ this.mOutputFluids = this.mLastRecipe.mFluidOutputs;
+ turnCasingActive(true);
+ mRunningOnLoad=false;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public abstract int tierOverclock();
+
+ public boolean turnCasingActive(boolean status) {
+ if (this.mEnergyHatches != null) {
+ for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) {
+ hatch.mMachineBlock = status ? (byte) 52 : (byte) 53;
+ }
+ }
+ if (this.mOutputHatches != null) {
+ for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) {
+ hatch.mMachineBlock = status ? (byte) 52 : (byte) 53;
+ }
+ }
+ if (this.mInputHatches != null) {
+ for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) {
+ hatch.mMachineBlock = status ? (byte) 52 : (byte) 53;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (mEfficiency < 0)
+ mEfficiency = 0;
+ if(mRunningOnLoad&&checkMachine(aBaseMetaTileEntity, mInventory[1])){
+ this.mEUStore = (int) aBaseMetaTileEntity.getStoredEU();
+ checkRecipe(mInventory[1]);}
+ if (--mUpdate == 0 || --mStartUpCheck == 0) {
+ mInputHatches.clear();
+ mInputBusses.clear();
+ mOutputHatches.clear();
+ mOutputBusses.clear();
+ mDynamoHatches.clear();
+ mEnergyHatches.clear();
+ mMufflerHatches.clear();
+ mMaintenanceHatches.clear();
+ mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]);
+ }
+ if (mStartUpCheck < 0) {
+ if (mMachine) {
+ if (this.mEnergyHatches != null) {
+ for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches)
+ if (isValidMetaTileEntity(tHatch)) {
+ if (aBaseMetaTileEntity.getStoredEU() + (2048 * tierOverclock()) < maxEUStore()
+ && tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(2048 * tierOverclock(), false)) {
+ aBaseMetaTileEntity.increaseStoredEnergyUnits(2048 * tierOverclock(), true);
+ }
+ }
+ }
+ if (this.mEUStore <= 0 && mMaxProgresstime > 0) {
+ stopMachine();
+ }
+ if (getRepairStatus() > 0) {
+ if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) {
+ this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt, true);
+ if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) {
+ if (mOutputItems != null)for (ItemStack tStack : mOutputItems )if (tStack != null)addOutput(tStack);
+ if (mOutputFluids != null)for (FluidStack tStack : mOutputFluids)if (tStack != null)addOutput(tStack);
+ mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)));
+ mOutputItems = null;
+ mProgresstime = 0;
+ mMaxProgresstime = 0;
+ mEfficiencyIncrease = 0;
+ if (mOutputFluids != null && mOutputFluids.length > 0) {
+ GT_Mod.instance.achievements.issueAchivementHatchFluid(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), mOutputFluids[0]);
+ }
+ this.mEUStore = (int) aBaseMetaTileEntity.getStoredEU();
+ if (aBaseMetaTileEntity.isAllowedToWork())
+ checkRecipe(mInventory[1]);
+ }
+ } else {
+ if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ turnCasingActive(mMaxProgresstime > 0);
+ if (aBaseMetaTileEntity.isAllowedToWork()) {
+ this.mEUStore = (int) aBaseMetaTileEntity.getStoredEU();
+ if (checkRecipe(mInventory[1]) && aBaseMetaTileEntity.getStoredEU() >= this.mLastRecipe.mSpecialValue) {
+ aBaseMetaTileEntity.decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue, true);
+ }
+ }
+ if (mMaxProgresstime <= 0)
+ mEfficiency = Math.max(0, mEfficiency - 1000);
+ }
+ }
+ } else {
+ this.mLastRecipe = null;
+ stopMachine();
+ }
+ } else {
+ turnCasingActive(false);
+ this.mLastRecipe = null;
+ stopMachine();
+ }
+ }
+ aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mWrench ? 0 : 1) | (mScrewdriver ? 0 : 2) | (mSoftHammer ? 0 : 4) | (mHardHammer ? 0 : 8)
+ | (mSolderingTool ? 0 : 16) | (mCrowbar ? 0 : 32) | (mMachine ? 0 : 64));
+ aBaseMetaTileEntity.setActive(mMaxProgresstime > 0);
+ }
+ }
+
+ @Override
+ public boolean onRunningTick(ItemStack aStack) {
+ if (mEUt < 0) {
+ if (!drainEnergyInput(((long) -mEUt * 10000) / Math.max(1000, mEfficiency))) {
+ this.mLastRecipe = null;
+ stopMachine();
+ return false;
+ }
+ }
+ if (this.mEUStore <= 0) {
+ this.mLastRecipe = null;
+ stopMachine();
+ return false;
+ }
+ return true;
+ }
+
+ public boolean drainEnergyInput(long aEU) {
+ return false;
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack aStack) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public int getDamageToComponent(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public int getAmountOfOutputs() {
+ return 0;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack aStack) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java
new file mode 100644
index 0000000000..3c23afcbb5
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java
@@ -0,0 +1,53 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_FusionComputer1 extends GT_MetaTileEntity_FusionComputer{
+
+ public GT_MetaTileEntity_FusionComputer1(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional, 6);
+ }
+
+ public GT_MetaTileEntity_FusionComputer1(String aName) {super(aName);}
+
+ @Override
+ public int tier() {return 6;}
+
+ @Override
+ public long maxEUStore() {return 160000000L*(Math.min(16, this.mEnergyHatches.size()))/16L;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_FusionComputer1(mName);
+ }
+ @Override
+ public int getCasingMeta() {return 6;}
+
+ @Override
+ public Block getFusionCoil() {return GregTech_API.sBlockCasings1;}
+
+ @Override
+ public int getFusionCoilMeta() {return 15;}
+
+ public String[] getDescription()
+ {return new String[] { "It's over 9000!!!","LuV Casings around Superconducting Coils","2-16 Input Hatches","1-16 Output Hatches","1-16 Energy Hatches","All Hatches must be LuV or better","2048EU/t and 10mio EU Cap per Energy Hatch" };}
+
+ @Override
+ public int tierOverclock() {return 1;}
+
+ @Override
+ public Block getCasing() {
+ return GregTech_API.sBlockCasings1;
+ }
+
+ @Override
+ public IIconContainer getIconOverlay() {
+ return Textures.BlockIcons.OVERLAY_FUSION1;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java
new file mode 100644
index 0000000000..d101875ba2
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java
@@ -0,0 +1,52 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_FusionComputer2 extends GT_MetaTileEntity_FusionComputer{
+
+ public GT_MetaTileEntity_FusionComputer2(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional, 6);
+ }
+
+ public GT_MetaTileEntity_FusionComputer2(String aName) {super(aName);}
+
+ @Override
+ public int tier() {return 7;}
+
+ @Override
+ public long maxEUStore() {return 320000000L*(Math.min(16, this.mEnergyHatches.size()))/16L;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_FusionComputer2(mName);
+ }
+ @Override
+ public int getCasingMeta() {return 6;}
+
+ @Override
+ public Block getFusionCoil() {return GregTech_API.sBlockCasings4;}
+
+ @Override
+ public int getFusionCoilMeta() {return 7;}
+
+ public String[] getDescription()
+ {return new String[] { "It's over 9000!!!","Fusion Casings around Fusion Coils","2-16 Input Hatches","1-16 Output Hatches","1-16 Energy Hatches","All Hatches must be ZPMV or better","4096EU/t and 20mio EU Cap per Energy Hatch" };}
+
+ @Override
+ public int tierOverclock() {return 2;}
+
+ @Override
+ public Block getCasing() {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ @Override
+ public IIconContainer getIconOverlay() {
+ return Textures.BlockIcons.OVERLAY_FUSION2;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java
new file mode 100644
index 0000000000..b7334bd449
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java
@@ -0,0 +1,54 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_FusionComputer3 extends GT_MetaTileEntity_FusionComputer{
+
+ public GT_MetaTileEntity_FusionComputer3(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional, 6);
+ }
+
+ public GT_MetaTileEntity_FusionComputer3(String aName) {super(aName);}
+
+ @Override
+ public int tier() {return 8;}
+
+ @Override
+ public long maxEUStore() {return 640000000L*(Math.min(16, this.mEnergyHatches.size()))/16L;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_FusionComputer3(mName);
+ }
+ @Override
+ public int getCasingMeta() {return 8;}
+
+ @Override
+ public Block getFusionCoil() {return GregTech_API.sBlockCasings4;}
+
+ @Override
+ public int getFusionCoilMeta() {return 7;}
+
+ public String[] getDescription()
+ {return new String[] { "A SUN DOWN ON EARTH","Fusion Casings MK II around Fusion Coils","2-16 Input Hatches","1-16 Output Hatches","1-16 Energy Hatches","All Hatches must be UV or better","8192EU/t and 40mio EU Cap per Energy Hatch" };}
+
+ @Override
+ public int tierOverclock() {return 4;}
+
+ @Override
+ public Block getCasing() {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ @Override
+ public IIconContainer getIconOverlay() {
+ return Textures.BlockIcons.OVERLAY_FUSION3;
+ }
+
+}
+
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
new file mode 100644
index 0000000000..3a6a51fa46
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
@@ -0,0 +1,303 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+
+public class GT_MetaTileEntity_HeatExchanger extends GT_MetaTileEntity_MultiBlockBase{
+ public GT_MetaTileEntity_HeatExchanger(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_HeatExchanger(String aName)
+ {
+ super(aName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Heat Exchanger", "Size: 3x3x4", "Controller (front middle at bottom)", "3x3x4 of Stable Titanium Casing (hollow, Min 24!)", "2 Titanium Pipe Casing Blocks inside the Hollow Casing", "1x Distillated Water Input (one of the Casings)","min 1 Steam Output (one of the Casings)", "1x Maintenance Hatch (one of the Casings)", "1x Hot Fluid Input (botton Center)", "1x Cold Fluid Output (top Center)" };
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ superheated = aNBT.getBoolean("superheated");
+ super.loadNBTData(aNBT);}
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setBoolean("superheated", superheated);
+ super.saveNBTData(aNBT);}
+
+ public GT_MetaTileEntity_Hatch_Input mInputHotFluidHatch;
+ public GT_MetaTileEntity_Hatch_Output mOutputColdFluidHatch;
+ public boolean superheated=false;
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[50], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[50] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeBoiler.png");
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack) {
+ if (mInputHotFluidHatch.getFluid() == null)
+ return true;
+
+ int fluidAmountToConsume = mInputHotFluidHatch.getFluidAmount(); // how much fluid is in hatch
+
+ int superheated_threshold = 4000; // default: must have 4000L per second to generate superheated steam
+ float efficiency = 1f; // default: operate at 100% efficiency with no integrated circuitry
+ float penalty_per_config = 0.015f; // penalize 1.5% efficiency per circuitry level (1-25)
+ int shs_reduction_per_config = 150; // reduce threshold 150L/s per circuitry level (1-25)
+ float steam_output_multiplier = 4f; // default: multiply output by 4
+ float penalty = 0.0f; // penalty to apply to output based on circuitry level (1-25).
+ boolean do_lava = false;
+
+ // Do we have an integrated circuit with a valid configuration?
+ if (mInventory[1] != null && mInventory[1].getUnlocalizedName().startsWith("gt.integrated_circuit")) {
+ int circuit_config = mInventory[1].getItemDamage();
+ if (circuit_config >= 1 && circuit_config <= 25) {
+ // If so, apply the penalty and reduced threshold.
+ penalty = (circuit_config - 1) * penalty_per_config;
+ superheated_threshold -= (shs_reduction_per_config * (circuit_config - 1));
+ }
+ }
+ efficiency -= penalty;
+
+ // If we're working with lava, adjust the threshold and multipliers accordingly.
+ if (GT_ModHandler.isLava(mInputHotFluidHatch.getFluid())) {
+ superheated_threshold /= 4;
+ do_lava = true;
+ } else if (mInputHotFluidHatch.getFluid().isFluidEqual(FluidRegistry.getFluidStack("ic2hotcoolant", 1))) {
+ steam_output_multiplier = 0.5f;
+ } else {
+ // If we're working with neither, fail out
+ return false;
+ }
+
+ superheated = fluidAmountToConsume >= superheated_threshold; // set the internal superheated flag if we have enough hot fluid. Used in the onRunningTick method.
+ fluidAmountToConsume = Math.min(fluidAmountToConsume, superheated_threshold * 2); // Don't consume too much hot fluid per second
+ mInputHotFluidHatch.drain(fluidAmountToConsume, true);
+ this.mMaxProgresstime = 20;
+ this.mEUt = (int) (fluidAmountToConsume * steam_output_multiplier * efficiency);
+ if (do_lava) {
+ mOutputColdFluidHatch.fill(FluidRegistry.getFluidStack("ic2pahoehoelava", fluidAmountToConsume), true);
+ this.mEfficiencyIncrease = 80;
+ } else {
+ mOutputColdFluidHatch.fill(FluidRegistry.getFluidStack("ic2coolant", fluidAmountToConsume), true);
+ this.mEfficiencyIncrease = 80;
+ }
+ return true;
+ }
+
+ private float water;
+ private int useWater(float input) {
+ water = water + input;
+ int usage = (int) water;
+ water = water - (int) usage;
+ return usage;
+ }
+
+ public boolean onRunningTick(ItemStack aStack) {
+ if (this.mEUt > 0) {
+ int tGeneratedEU = (int) (this.mEUt * 2L * this.mEfficiency / 10000L); // APPROXIMATELY how much steam to generate.
+ if (tGeneratedEU > 0) {
+
+ if (superheated)
+ tGeneratedEU /= 2; // We produce half as much superheated steam if necessary
+
+ int distilledConsumed = useWater(tGeneratedEU / 160f); // how much distilled water to consume
+ //tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect 1:160 ratio with distilled water consumption
+
+ FluidStack distilledStack = GT_ModHandler.getDistilledWater(distilledConsumed);
+ if (depleteInput(distilledStack)) // Consume the distilled water
+ {
+ if (superheated) {
+ addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU)); // Generate superheated steam
+ } else {
+ addOutput(GT_ModHandler.getSteam(tGeneratedEU)); // Generate regular steam
+ }
+ } else {
+ explodeMultiblock(); // Generate crater
+ }
+ }
+ return true;
+ }
+ return true;
+ }
+ private static boolean controller;
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+
+ int tCasingAmount = 0;int tFireboxAmount = 0;controller=false;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((i != 0) || (j != 0))
+ {
+ for (int k = 0; k <= 3; k++) {
+ if (!addOutputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, k, zDir + j), 50)&&!addInputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, k, zDir + j), 50)&&!addMaintenanceToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, k, zDir + j), 50)&&!ignoreController(aBaseMetaTileEntity.getBlockOffset(xDir + i, k, zDir + j)))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, k, zDir + j) != getCasingBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, k, zDir + j) != getCasingMeta()) {
+ return false;
+ }
+ tCasingAmount++;
+ }
+ }
+ }else{
+ if(!addHotFluidInputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 0, zDir + j), 50)){
+ return false;
+ }
+ if(!addColdFluidOutputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 3, zDir + j), 50)){
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 1, zDir + j) != getPipeBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 1, zDir + j) != getPipeMeta()) {
+ return false;
+ }
+
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 2, zDir + j) != getPipeBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 2, zDir + j) != getPipeMeta()) {
+ return false;
+ }
+ }
+ }
+ }
+ return (tCasingAmount >= 24);
+ }
+
+ public boolean ignoreController(Block tTileEntity){
+ if(!controller&&tTileEntity == GregTech_API.sBlockMachines){return true;}
+ return false;
+ }
+
+ public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ mOutputColdFluidHatch = (GT_MetaTileEntity_Hatch_Output)aMetaTileEntity;
+ return true;
+ }
+ return false;
+ }
+
+ public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ ((GT_MetaTileEntity_Hatch)aMetaTileEntity).mMachineBlock = (byte)aBaseCasingIndex;
+ ((GT_MetaTileEntity_Hatch_Input)aMetaTileEntity).mRecipeMap = getRecipeMap();
+ mInputHotFluidHatch = (GT_MetaTileEntity_Hatch_Input)aMetaTileEntity;
+ return true;
+ }
+ return false;
+ }
+
+ public Block getCasingBlock()
+ {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ public byte getCasingMeta()
+ {
+ return 2;
+ }
+
+ public byte getCasingTextureIndex()
+ {
+ return 50;
+ }
+
+ public Block getPipeBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getPipeMeta()
+ {
+ return 14;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 1;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_HeatExchanger(this.mName);
+ }
+ }
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java
new file mode 100644
index 0000000000..fdc206b3f9
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java
@@ -0,0 +1,174 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_MetaTileEntity_ImplosionCompressor
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ public GT_MetaTileEntity_ImplosionCompressor(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_ImplosionCompressor(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ImplosionCompressor(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Implosion Compressor", "Size: 3x3x3 (Hollow)", "Controller (front centered)", "1x Input (anywhere)", "1x Output (anywhere)", "1x Energy Hatch (anywhere)", "1x Maintenance Hatch (anywhere)", "1x Muffler Hatch (anywhere)", "Solid Steel Casings for the rest (16 at least!)" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[16], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[16] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ImplosionCompressor.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ return GT_Recipe.GT_Recipe_Map.sImplosionRecipes;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ for (int i = 0; i < tInputList.size() - 1; i++) {
+ for (int j = i + 1; j < tInputList.size(); j++) {
+ if (GT_Utility.areStacksEqual((ItemStack)tInputList.get(i), (ItemStack)tInputList.get(j))) {
+ if (((ItemStack)tInputList.get(i)).stackSize >= ((ItemStack)tInputList.get(j)).stackSize)
+ {
+ tInputList.remove(j--);
+ }
+ else
+ {
+ tInputList.remove(i--); break;
+ }
+ }
+ }
+ }
+ ItemStack[] tInputs = (ItemStack[])Arrays.copyOfRange(tInputList.toArray(new ItemStack[tInputList.size()]), 0, 2);
+ if (tInputList.size() > 0)
+ {
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sImplosionRecipes.findRecipe(getBaseMetaTileEntity(), false, 9223372036854775807L, null, tInputs);
+ if ((tRecipe != null) && (tRecipe.isRecipeInputEqual(true, null, tInputs)))
+ {
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+
+ this.mEUt = (-tRecipe.mEUt);
+ this.mMaxProgresstime = Math.max(1, tRecipe.mDuration);
+ this.mOutputItems = new ItemStack[] { tRecipe.getOutput(0), tRecipe.getOutput(1) };
+ sendLoopStart((byte)20);
+ updateSlots();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 20) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(5)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 0, zDir)) {
+ return false;
+ }
+ int tAmount = 0;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = -1; h < 2; h++) {
+ if ((h != 0) || (((xDir + i != 0) || (zDir + j != 0)) && ((i != 0) || (j != 0))))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, h, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 16)) && (!addMufflerToMachineList(tTileEntity, 16)) && (!addInputToMachineList(tTileEntity, 16)) && (!addOutputToMachineList(tTileEntity, 16)) && (!addEnergyInputToMachineList(tTileEntity, 16)))
+ {
+ Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j);
+ byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j);
+ if (((tBlock != GregTech_API.sBlockCasings2) || (tMeta != 0)) && ((tBlock != GregTech_API.sBlockCasings3) || (tMeta != 4))) {
+ return false;
+ }
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ return tAmount >= 16;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 1000;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 2;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java
new file mode 100644
index 0000000000..3a30fc43bc
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java
@@ -0,0 +1,259 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map_Fuel;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract class GT_MetaTileEntity_LargeBoiler
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ public GT_MetaTileEntity_LargeBoiler(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_LargeBoiler(String aName)
+ {
+ super(aName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Large Boiler", "Size: 3x3x5", "Controller (front middle in Fireboxes)", "3x3 of Fire Boxes (bottom Layer, Min 3!)", "3x3x4 of Casing (above Fireboxes, hollow, Min 24!)", "3 Pipe Casing Blocks inside the Hollow Casing", "1x Input (one of Fireboxes)", "1x Maintenance Hatch (one of Fireboxes)", "1x Muffler Hatch (one of Fireboxes)", "1x Fluid Output (one of Main Casing)" };
+ }
+
+ public abstract Block getCasingBlock();
+
+ public abstract byte getCasingMeta();
+
+ public abstract byte getCasingTextureIndex();
+
+ public abstract Block getPipeBlock();
+
+ public abstract byte getPipeMeta();
+
+ public abstract Block getFireboxBlock();
+
+ public abstract byte getFireboxMeta();
+
+ public abstract byte getFireboxTextureIndex();
+
+ public abstract int getEUt();
+
+ public abstract int getEfficiencyIncrease();
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[getCasingTextureIndex()], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[getCasingTextureIndex()] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeBoiler.png");
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+ for (GT_Recipe tRecipe : GT_Recipe.GT_Recipe_Map.sDieselFuels.mRecipeList)
+ {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true);
+ if ((tFluid != null) && (tRecipe.mSpecialValue > 1))
+ {
+ tFluid.amount = 1000;
+ if (depleteInput(tFluid))
+ {
+ this.mMaxProgresstime = (tRecipe.mSpecialValue / 2);
+ this.mEUt = getEUt();
+ this.mEfficiencyIncrease = (this.mMaxProgresstime * getEfficiencyIncrease() * 4);
+ return true;
+ }
+ }
+ }
+ for (GT_Recipe tRecipe : GT_Recipe.GT_Recipe_Map.sDenseLiquidFuels.mRecipeList)
+ {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true);
+ if (tFluid != null)
+ {
+ tFluid.amount = 1000;
+ if (depleteInput(tFluid))
+ {
+ this.mMaxProgresstime = Math.max(1, tRecipe.mSpecialValue * 2);
+ this.mEUt = getEUt();
+ this.mEfficiencyIncrease = (this.mMaxProgresstime * getEfficiencyIncrease());
+ return true;
+ }
+ }
+ }
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ if (!tInputList.isEmpty()) {
+ for (ItemStack tInput : tInputList) {
+ if ((GT_Utility.getFluidForFilledItem(tInput, true) == null) && ((this.mMaxProgresstime = GT_ModHandler.getFuelValue(tInput) / 80) > 0))
+ {
+ this.mEUt = getEUt();
+ this.mEfficiencyIncrease = (this.mMaxProgresstime * getEfficiencyIncrease());
+ this.mOutputItems = new ItemStack[] { GT_Utility.getContainerItem(tInput, true) };
+ tInput.stackSize -= 1;
+ updateSlots();
+ return true;
+ }
+ }
+ }
+ this.mMaxProgresstime = 0;
+ this.mEUt = 0;
+ return false;
+ }
+
+ public boolean onRunningTick(ItemStack aStack)
+ {
+ if (this.mEUt > 0)
+ {
+ int tGeneratedEU = (int)(this.mEUt * 2L * this.mEfficiency / 10000L);
+ if (tGeneratedEU > 0) {
+ long amount = (tGeneratedEU + 160) / 160;
+ if (depleteInput(Materials.Water.getFluid(amount)) || depleteInput(GT_ModHandler.getDistilledWater(amount))) {
+ addOutput(GT_ModHandler.getSteam(tGeneratedEU));
+ } else {
+ explodeMultiblock();
+ }
+ }
+ return true;
+ }
+ return true;
+ }
+
+private boolean firstRun = true;
+
+@Override
+public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (mProgresstime>0&&firstRun) {firstRun = false;try{
+ GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "extremepressure");}catch (Exception e){}
+ }
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+}
+
+
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+
+ int tCasingAmount = 0;int tFireboxAmount = 0;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((i != 0) || (j != 0))
+ {
+ for (int k = 1; k <= 4; k++) {
+ if (!addOutputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, k, zDir + j), getCasingTextureIndex()))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, k, zDir + j) != getCasingBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, k, zDir + j) != getCasingMeta()) {
+ return false;
+ }
+ tCasingAmount++;
+ }
+ }
+ }
+ else
+ {
+ for (int k = 1; k <= 3; k++)
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, k, zDir + j) != getPipeBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, k, zDir + j) != getPipeMeta()) {
+ return false;
+ }
+ }
+ if (!addOutputToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 4, zDir + j), getCasingTextureIndex()))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 4, zDir + j) != getCasingBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 4, zDir + j) != getCasingMeta()) {
+ return false;
+ }
+ tCasingAmount++;
+ }
+ }
+ }
+ }
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((xDir + i != 0) || (zDir + j != 0))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 0, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, getFireboxTextureIndex())) && (!addInputToMachineList(tTileEntity, getFireboxTextureIndex())) && (!addMufflerToMachineList(tTileEntity, getFireboxTextureIndex())))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 0, zDir + j) != getFireboxBlock()) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 0, zDir + j) != getFireboxMeta()) {
+ return false;
+ }
+ tFireboxAmount++;
+ }
+ }
+ }
+ }
+ return (tCasingAmount >= 24) && (tFireboxAmount >= 3);
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 10;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 1;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java
new file mode 100644
index 0000000000..2df675ef41
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java
@@ -0,0 +1,75 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_LargeBoiler_Bronze
+ extends GT_MetaTileEntity_LargeBoiler
+{
+ public GT_MetaTileEntity_LargeBoiler_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_LargeBoiler_Bronze(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_LargeBoiler_Bronze(this.mName);
+ }
+
+ public Block getCasingBlock()
+ {
+ return GregTech_API.sBlockCasings1;
+ }
+
+ public byte getCasingMeta()
+ {
+ return 10;
+ }
+
+ public byte getCasingTextureIndex()
+ {
+ return 10;
+ }
+
+ public Block getPipeBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getPipeMeta()
+ {
+ return 12;
+ }
+
+ public Block getFireboxBlock()
+ {
+ return GregTech_API.sBlockCasings3;
+ }
+
+ public byte getFireboxMeta()
+ {
+ return 13;
+ }
+
+ public byte getFireboxTextureIndex()
+ {
+ return 45;
+ }
+
+ public int getEUt()
+ {
+ return 400;
+ }
+
+ public int getEfficiencyIncrease()
+ {
+ return 16;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java
new file mode 100644
index 0000000000..29f0901eae
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java
@@ -0,0 +1,75 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_LargeBoiler_Steel
+ extends GT_MetaTileEntity_LargeBoiler
+{
+ public GT_MetaTileEntity_LargeBoiler_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_LargeBoiler_Steel(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_LargeBoiler_Steel(this.mName);
+ }
+
+ public Block getCasingBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getCasingMeta()
+ {
+ return 0;
+ }
+
+ public byte getCasingTextureIndex()
+ {
+ return 16;
+ }
+
+ public Block getPipeBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getPipeMeta()
+ {
+ return 13;
+ }
+
+ public Block getFireboxBlock()
+ {
+ return GregTech_API.sBlockCasings3;
+ }
+
+ public byte getFireboxMeta()
+ {
+ return 14;
+ }
+
+ public byte getFireboxTextureIndex()
+ {
+ return 46;
+ }
+
+ public int getEUt()
+ {
+ return 600;
+ }
+
+ public int getEfficiencyIncrease()
+ {
+ return 12;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java
new file mode 100644
index 0000000000..7d11836a19
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java
@@ -0,0 +1,75 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_LargeBoiler_Titanium
+ extends GT_MetaTileEntity_LargeBoiler
+{
+ public GT_MetaTileEntity_LargeBoiler_Titanium(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_LargeBoiler_Titanium(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_LargeBoiler_Titanium(this.mName);
+ }
+
+ public Block getCasingBlock()
+ {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ public byte getCasingMeta()
+ {
+ return 2;
+ }
+
+ public byte getCasingTextureIndex()
+ {
+ return 50;
+ }
+
+ public Block getPipeBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getPipeMeta()
+ {
+ return 14;
+ }
+
+ public Block getFireboxBlock()
+ {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ public byte getFireboxMeta()
+ {
+ return 3;
+ }
+
+ public byte getFireboxTextureIndex()
+ {
+ return 51;
+ }
+
+ public int getEUt()
+ {
+ return 800;
+ }
+
+ public int getEfficiencyIncrease()
+ {
+ return 8;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java
new file mode 100644
index 0000000000..c3c3cbecfe
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java
@@ -0,0 +1,75 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.block.Block;
+
+public class GT_MetaTileEntity_LargeBoiler_TungstenSteel
+ extends GT_MetaTileEntity_LargeBoiler
+{
+ public GT_MetaTileEntity_LargeBoiler_TungstenSteel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_LargeBoiler_TungstenSteel(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_LargeBoiler_TungstenSteel(this.mName);
+ }
+
+ public Block getCasingBlock()
+ {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ public byte getCasingMeta()
+ {
+ return 0;
+ }
+
+ public byte getCasingTextureIndex()
+ {
+ return 48;
+ }
+
+ public Block getPipeBlock()
+ {
+ return GregTech_API.sBlockCasings2;
+ }
+
+ public byte getPipeMeta()
+ {
+ return 15;
+ }
+
+ public Block getFireboxBlock()
+ {
+ return GregTech_API.sBlockCasings3;
+ }
+
+ public byte getFireboxMeta()
+ {
+ return 15;
+ }
+
+ public byte getFireboxTextureIndex()
+ {
+ return 47;
+ }
+
+ public int getEUt()
+ {
+ return 1000;
+ }
+
+ public int getEfficiencyIncrease()
+ {
+ return 4;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java
new file mode 100644
index 0000000000..d8b765c82a
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java
@@ -0,0 +1,192 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+
+public abstract class GT_MetaTileEntity_LargeTurbine extends GT_MetaTileEntity_MultiBlockBase{
+
+ public GT_MetaTileEntity_LargeTurbine(int aID, String aName, String aNameRegional){super(aID, aName, aNameRegional);}
+ public GT_MetaTileEntity_LargeTurbine(String aName){super(aName);}
+
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack aStack) {
+ return getMaxEfficiency(aStack) > 0;
+ }
+
+ protected int baseEff=0;
+ protected int optFlow=0;
+ protected int counter=0;
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ byte tSide = getBaseMetaTileEntity().getBackFacing();
+ if ((getBaseMetaTileEntity().getAirAtSideAndDistance(getBaseMetaTileEntity().getBackFacing(), 1)) && (getBaseMetaTileEntity().getAirAtSideAndDistance(getBaseMetaTileEntity().getBackFacing(), 2)))
+ {
+ int tAirCount = 0;
+ for (byte i = -1; i < 2; i = (byte)(i + 1)) {
+ for (byte j = -1; j < 2; j = (byte)(j + 1)) {
+ for (byte k = -1; k < 2; k = (byte)(k + 1)) {
+ if (getBaseMetaTileEntity().getAirOffset(i, j, k)) {
+ tAirCount++;
+ }
+ }
+ }
+ }
+ if (tAirCount != 10) {
+ return false;
+ }
+ for (byte i = 2; i < 6; i = (byte)(i + 1))
+ {
+ IGregTechTileEntity tTileEntity;
+ if ((null != (tTileEntity = getBaseMetaTileEntity().getIGregTechTileEntityAtSideAndDistance(i, 2))) &&
+ (tTileEntity.getFrontFacing() == getBaseMetaTileEntity().getFrontFacing()) && (tTileEntity.getMetaTileEntity() != null) &&
+ ((tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbine))) {
+ return false;
+ }
+ }
+ int tX = getBaseMetaTileEntity().getXCoord();int tY = getBaseMetaTileEntity().getYCoord();int tZ = getBaseMetaTileEntity().getZCoord();
+ for (byte i = -1; i < 2; i = (byte)(i + 1)) {
+ for (byte j = -1; j < 2; j = (byte)(j + 1)) {
+ if ((i != 0) || (j != 0)) {
+ for (byte k = 0; k < 4; k = (byte)(k + 1)) {
+ if (((i == 0) || (j == 0)) && ((k == 1) || (k == 2)))
+ {
+ if (getBaseMetaTileEntity().getBlock(tX + (tSide == 5 ? k : tSide == 4 ? -k : i), tY + j, tZ + (tSide == 2 ? -k : tSide == 3 ? k : i)) == getCasingBlock() && getBaseMetaTileEntity().getMetaID(tX + (tSide == 5 ? k : tSide == 4 ? -k : i), tY + j, tZ + (tSide == 2 ? -k : tSide == 3 ? k : i)) == getCasingMeta())
+ {}else if (!addToMachineList(getBaseMetaTileEntity().getIGregTechTileEntity(tX + (tSide == 5 ? k : tSide == 4 ? -k : i), tY + j, tZ + (tSide == 2 ? -k : tSide == 3 ? k : i)))) {
+ return false;
+ }
+ }
+ else if (getBaseMetaTileEntity().getBlock(tX + (tSide == 5 ? k : tSide == 4 ? -k : i), tY + j, tZ + (tSide == 2 ? -k : tSide == 3 ? k : i)) == getCasingBlock()&& getBaseMetaTileEntity().getMetaID(tX + (tSide == 5 ? k : tSide == 4 ? -k : i), tY + j, tZ + (tSide == 2 ? -k : tSide == 3 ? k : i)) == getCasingMeta())
+ {}else {return false;
+ }
+ }
+ }
+ }
+ }
+ this.mDynamoHatches.clear();
+ IGregTechTileEntity tTileEntity = getBaseMetaTileEntity().getIGregTechTileEntityAtSideAndDistance(getBaseMetaTileEntity().getBackFacing(), 3);
+ if ((tTileEntity != null) && (tTileEntity.getMetaTileEntity() != null)) {
+ if ((tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Dynamo)) {
+ this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo)tTileEntity.getMetaTileEntity());
+ ((GT_MetaTileEntity_Hatch)tTileEntity.getMetaTileEntity()).mMachineBlock = getCasingTextureIndex();
+ } else {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public abstract Block getCasingBlock();
+
+ public abstract byte getCasingMeta();
+
+ public abstract byte getCasingTextureIndex();
+
+ private boolean addToMachineList(IGregTechTileEntity tTileEntity){
+ return ((addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex())) || (addInputToMachineList(tTileEntity, getCasingTextureIndex())) || (addOutputToMachineList(tTileEntity, getCasingTextureIndex()))|| (addMufflerToMachineList(tTileEntity, getCasingTextureIndex())));
+ }
+
+
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack aStack) {
+ ArrayList<FluidStack> tFluids = getStoredFluids();
+ if (tFluids.size() > 0) {
+ if (baseEff == 0 || optFlow == 0 || counter >= 1000 || this.getBaseMetaTileEntity().hasWorkJustBeenEnabled()
+ || this.getBaseMetaTileEntity().hasInventoryBeenModified()) {
+ counter = 0;
+ baseEff = (int) ((50.0F
+ + (10.0F * ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack))) * 100);
+ optFlow = (int) Math.max(Float.MIN_NORMAL,
+ ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack).getSpeedMultiplier()
+ * ((GT_MetaGenerated_Tool) aStack.getItem()).getPrimaryMaterial(aStack).mToolSpeed
+ * 50);
+ } else {
+ counter++;
+ }
+ }
+
+ int newPower = fluidIntoPower(tFluids, optFlow, baseEff); // How much the turbine should be producing with this flow
+ int difference = newPower - this.mEUt; // difference between current output and new output
+
+ // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in power level (per tick)
+ // This is how much the turbine can actually change during this tick
+ int maxChangeAllowed = Math.max(10, (int) Math.ceil(Math.abs(difference) * 0.01));
+
+ if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change
+ int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative.
+ this.mEUt += change; // Apply the change
+ }
+ else
+ this.mEUt = newPower;
+
+ if (mEUt <= 0) {
+
+// this.mEfficiencyIncrease = (-10);
+ this.mEfficiency = 0;
+ //stopMachine();
+ return false;
+ } else {
+ this.mMaxProgresstime = 1;
+ this.mEfficiencyIncrease = (10);
+ return true;
+ }
+ }
+
+ abstract int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff);
+
+ @Override
+ public int getDamageToComponent(ItemStack aStack) {
+ return 1;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ if (GT_Utility.isStackInvalid(aStack)) {
+ return 0;
+ }
+ if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) {
+ return 10000;
+ }
+ return 0;
+ }
+
+ @Override
+ public int getAmountOfOutputs() {return 0;}
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack aStack) {return true;}
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java
new file mode 100644
index 0000000000..2f750ab914
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java
@@ -0,0 +1,116 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+public class GT_MetaTileEntity_LargeTurbine_Gas extends GT_MetaTileEntity_LargeTurbine{
+
+ public GT_MetaTileEntity_LargeTurbine_Gas(int aID, String aName, String aNameRegional){super(aID, aName, aNameRegional);}
+ public GT_MetaTileEntity_LargeTurbine_Gas(String aName){super(aName);}
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex+1], aFacing == aSide ? aActive ? new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE_ACTIVE5):new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE5) : Textures.BlockIcons.CASING_BLOCKS[57]};
+ }
+
+
+ public String[] getDescription()
+ {
+ return new String[] {
+ "Controller Block for the Large Gas Turbine",
+ "Size: 3x3x4 (Hollow)", "Controller (front centered)",
+ "1x Input Hatch (side centered)",
+ "1x Dynamo Hatch (back centered)",
+ "1x Maintenance Hatch (side centered)",
+ "1x Muffler Hatch (side centered)",
+ "Turbine Casings for the rest (24 at least!)",
+ "Needs a Turbine Item (inside controller GUI)"};
+ }
+
+ public int getFuelValue(FluidStack aLiquid) {
+ if (aLiquid == null || GT_Recipe_Map.sTurbineFuels == null) return 0;
+ FluidStack tLiquid;
+ Collection<GT_Recipe> tRecipeList = GT_Recipe_Map.sTurbineFuels.mRecipeList;
+ if (tRecipeList != null) for (GT_Recipe tFuel : tRecipeList) if ((tLiquid = GT_Utility.getFluidForFilledItem(tFuel.getRepresentativeInput(0), true)) != null) if (aLiquid.isFluidEqual(tLiquid)) return tFuel.mSpecialValue;
+ return 0;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {return new GT_MetaTileEntity_LargeTurbine_Gas(mName);}
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+ @Override
+ public byte getCasingMeta() {
+ return 9;
+ }
+ @Override
+ public byte getCasingTextureIndex() {
+ return 46;
+ }
+ @Override
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 10;
+ }
+
+ @Override
+ int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) {
+ int tEU = 0;
+
+ int actualOptimalFlow = 0;
+
+ if (aFluids.size() >= 1) {
+ FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. Doesn't matter which one. Ignore the rest!
+ int fuelValue = getFuelValue(firstFuelType);
+ actualOptimalFlow = (int) (aOptFlow / fuelValue);
+
+ int remainingFlow = (int) (actualOptimalFlow * 1.25f); // Allowed to use up to 125% of optimal flow. Variable required outside of loop for multi-hatch scenarios.
+ int flow = 0;
+ int totalFlow = 0;
+
+ for (int i = 0; i < aFluids.size(); i++) {
+ if (aFluids.get(i).isFluidEqual(firstFuelType)) {
+ flow = aFluids.get(i).amount; // Get all (steam) in hatch
+ flow = Math.min(flow, Math.min(remainingFlow, (int) (actualOptimalFlow * 1.25f))); // try to use up to 125% of optimal flow w/o exceeding remainingFlow
+ depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount
+ remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches
+ totalFlow += flow; // track total input used
+ }
+ }
+
+ tEU = (int) (Math.min((float) actualOptimalFlow, totalFlow) * fuelValue);
+
+ if (totalFlow != actualOptimalFlow) {
+ float efficiency = 1.0f - Math.abs(((totalFlow - (float) actualOptimalFlow) / actualOptimalFlow));
+ if (efficiency < 0)
+ efficiency = 0; // Can happen with really ludicrously poor inefficiency.
+ tEU *= efficiency;
+ tEU = Math.max(1, tEU * aBaseEff / 10000);
+ } else {
+ tEU = tEU * aBaseEff / 10000;
+ }
+
+ return tEU;
+
+ }
+ return 0;
+ }
+
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java
new file mode 100644
index 0000000000..d57aa52db8
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java
@@ -0,0 +1,96 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+
+public class GT_MetaTileEntity_LargeTurbine_HPSteam extends GT_MetaTileEntity_LargeTurbine{
+
+ public GT_MetaTileEntity_LargeTurbine_HPSteam(int aID, String aName, String aNameRegional){super(aID, aName, aNameRegional);}
+ public GT_MetaTileEntity_LargeTurbine_HPSteam(String aName){super(aName);}
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex+1], aFacing == aSide ? aActive ? new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE_ACTIVE5):new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE5) : Textures.BlockIcons.CASING_BLOCKS[57]};
+ }
+
+
+ public String[] getDescription()
+ {
+ return new String[] {
+ "Controller Block for the Large High Pressure Steam Turbine",
+ "Size: 3x3x4 (Hollow)", "Controller (front centered)",
+ "1x Input Hatch (side centered)", "1x Output Hatch(side centered)",
+ "1x Dynamo Hatch (back centered)",
+ "1x Maintenance Hatch (side centered)",
+ "Turbine Casings for the rest (24 at least!)",
+ "Needs a Turbine Item (inside controller GUI)" };
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {return new GT_MetaTileEntity_LargeTurbine_HPSteam(mName);}
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+ @Override
+ public byte getCasingMeta() {
+ return 9;
+ }
+ @Override
+ public byte getCasingTextureIndex() {
+ return 46;
+ }
+ @Override
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 0;
+ }
+ public boolean achievement=false;
+
+ @Override
+ int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) {
+ int tEU = 0;
+ int totalFlow = 0; // Byproducts are based on actual flow
+ int flow = 0;
+ int remainingFlow = (int) (aOptFlow * 1.25f); // Allowed to use up to 125% of optimal flow
+
+ for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) {
+ if (aFluids.get(i).getFluid().getUnlocalizedName(aFluids.get(i)).equals("ic2.fluidSuperheatedSteam")) {
+ flow = aFluids.get(i).amount; // Get all (steam) in hatch
+ flow = Math.min(flow, Math.min(remainingFlow, (int) (aOptFlow * 1.25f))); // try to use up to 125% of optimal flow w/o exceeding remainingFlow
+ depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount
+ remainingFlow -= flow; // track amount we're allowed to keep depleting from hatches
+ totalFlow += flow; // track total used
+ if(!achievement){
+ try{GT_Mod.instance.achievements.issueAchievement(this.getBaseMetaTileEntity().getWorld().getPlayerEntityByName(this.getBaseMetaTileEntity().getOwnerName()), "efficientsteam");}catch(Exception e){}
+ achievement=true;
+ }
+ }
+ }
+
+ tEU = (int) (Math.min((float) aOptFlow, totalFlow));
+ addOutput(GT_ModHandler.getSteam(totalFlow));
+ if (totalFlow > 0 && totalFlow != aOptFlow) {
+ float efficiency = 1.0f - Math.abs(((totalFlow - (float) aOptFlow) / aOptFlow));
+ tEU *= efficiency;
+ tEU = Math.max(1, tEU * aBaseEff / 10000);
+ } else {
+ tEU = tEU * aBaseEff / 10000;
+ }
+
+ return tEU;
+ }
+
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java
new file mode 100644
index 0000000000..5b7ea5c362
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java
@@ -0,0 +1,115 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+public class GT_MetaTileEntity_LargeTurbine_Plasma extends GT_MetaTileEntity_LargeTurbine{
+
+ public GT_MetaTileEntity_LargeTurbine_Plasma(int aID, String aName, String aNameRegional){super(aID, aName, aNameRegional);}
+ public GT_MetaTileEntity_LargeTurbine_Plasma(String aName){super(aName);}
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex+1], aFacing == aSide ? aActive ? new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE_ACTIVE5):new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE5) : Textures.BlockIcons.CASING_BLOCKS[57]};
+ }
+
+
+ public String[] getDescription()
+ {
+ return new String[] {
+ "Controller Block for the Large Plasma Generator",
+ "Size: 3x3x4 (Hollow)", "Controller (front centered)",
+ "1x Input Hatch (side centered)",
+ "1x Dynamo Hatch (back centered)",
+ "1x Maintenance Hatch (side centered)",
+ "Turbine Casings for the rest (24 at least!)",
+ "Needs a Turbine Item (inside controller GUI)" };
+ }
+
+ public int getFuelValue(FluidStack aLiquid) {
+ if (aLiquid == null || GT_Recipe_Map.sTurbineFuels == null) return 0;
+ FluidStack tLiquid;
+ Collection<GT_Recipe> tRecipeList = GT_Recipe_Map.sPlasmaFuels.mRecipeList;
+ if (tRecipeList != null) for (GT_Recipe tFuel : tRecipeList) if ((tLiquid = GT_Utility.getFluidForFilledItem(tFuel.getRepresentativeInput(0), true)) != null) if (aLiquid.isFluidEqual(tLiquid)) return tFuel.mSpecialValue;
+ return 0;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {return new GT_MetaTileEntity_LargeTurbine_Plasma(mName);}
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+ @Override
+ public byte getCasingMeta() {
+ return 9;
+ }
+ @Override
+ public byte getCasingTextureIndex() {
+ return 46;
+ }
+ @Override
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) {
+ aOptFlow *= 20;
+ int tEU = 0;
+
+ int actualOptimalFlow = 0;
+
+ if (aFluids.size() >= 1) {
+ FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. Doesn't matter which one. Ignore the rest!
+ int fuelValue = getFuelValue(firstFuelType);
+ actualOptimalFlow = (int) ((aOptFlow + fuelValue -1 )/ fuelValue);
+ int remainingFlow = (int) (actualOptimalFlow * 1.25f); // Allowed to use up to 125% of optimal flow. Variable required outside of loop for multi-hatch scenarios.
+ int flow = 0;
+ int totalFlow = 0;
+
+ for (int i = 0; i < aFluids.size(); i++) {
+ if (aFluids.get(i).isFluidEqual(firstFuelType)) {
+ flow = aFluids.get(i).amount; // Get all (steam) in hatch
+ flow = Math.min(flow, Math.min(remainingFlow, (int) (actualOptimalFlow * 1.25f))); // try to use up to 125% of optimal flow w/o exceeding remainingFlow
+ depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount
+ remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches
+ totalFlow += flow; // track total input used
+ }
+ }
+
+ tEU = (int) (Math.min((float) actualOptimalFlow, totalFlow) * fuelValue);
+
+ if (totalFlow != actualOptimalFlow) {
+ float efficiency = 1.0f - Math.abs(((totalFlow - (float) actualOptimalFlow) / actualOptimalFlow));
+ if (efficiency < 0)
+ efficiency = 0; // Can happen with really ludicrously poor inefficiency.
+ tEU *= efficiency;
+ tEU = Math.max(1, tEU * aBaseEff / 10000);
+ } else {
+ tEU = tEU * aBaseEff / 10000;
+ }
+ return tEU;
+
+ }
+ return 0;
+ }
+
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java
new file mode 100644
index 0000000000..7a3f45037a
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java
@@ -0,0 +1,105 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+
+public class GT_MetaTileEntity_LargeTurbine_Steam extends GT_MetaTileEntity_LargeTurbine{
+
+ public GT_MetaTileEntity_LargeTurbine_Steam(int aID, String aName, String aNameRegional){super(aID, aName, aNameRegional);}
+ public GT_MetaTileEntity_LargeTurbine_Steam(String aName){super(aName);}
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex+1], aFacing == aSide ? aActive ? new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE_ACTIVE5):new GT_RenderedTexture(Textures.BlockIcons.LARGETURBINE5) : Textures.BlockIcons.CASING_BLOCKS[57]};
+ }
+
+
+ public String[] getDescription()
+ {
+ return new String[] {
+ "Controller Block for the Large Steam Turbine",
+ "Size: 3x3x4 (Hollow)", "Controller (front centered)",
+ "1x Input Hatch (side centered)", "1x Output Hatch(side centered)",
+ "1x Dynamo Hatch (back centered)",
+ "1x Maintenance Hatch (side centered)",
+ "Turbine Casings for the rest (24 at least!)",
+ "Needs a Turbine Item (inside controller GUI)" };
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {return new GT_MetaTileEntity_LargeTurbine_Steam(mName);}
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+ @Override
+ public byte getCasingMeta() {
+ return 9;
+ }
+ @Override
+ public byte getCasingTextureIndex() {
+ return 46;
+ }
+ @Override
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 0;
+ }
+
+ private float water;
+ private int useWater(float input){
+ water = water + input;
+ int usage = (int)water;
+ water = water - (int)usage;
+ return usage;
+ }
+
+ private boolean achievement = false;
+
+ @Override
+ int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) {
+ int tEU = 0;
+ int totalFlow = 0; // Byproducts are based on actual flow
+ int flow = 0;
+ int remainingFlow = (int) (aOptFlow * 1.25f); // Allowed to use up to 125% of optimal flow. Variable required outside of loop for multi-hatch scenarios.
+
+ for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and track totals.
+ String fluidName = aFluids.get(i).getFluid().getUnlocalizedName(aFluids.get(i));
+ if (fluidName.equals("fluid.steam") || fluidName.equals("ic2.fluidSteam") || fluidName.equals("fluid.mfr.steam.still.name")) {
+ flow = aFluids.get(i).amount; // Get all (steam) in hatch
+ flow = Math.min(flow, Math.min(remainingFlow, (int) (aOptFlow * 1.25f))); // try to use up to 125% of optimal flow w/o exceeding remainingFlow
+ depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount
+ remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches
+ totalFlow += flow; // track total input used
+ if(!achievement){
+ try{GT_Mod.instance.achievements.issueAchievement(this.getBaseMetaTileEntity().getWorld().getPlayerEntityByName(this.getBaseMetaTileEntity().getOwnerName()), "muchsteam");}catch(Exception e){}
+ achievement=true;
+ }
+ }
+ }
+
+ tEU = (int) (Math.min((float) aOptFlow, totalFlow));
+ int waterToOutput = useWater(totalFlow / 160.0f);
+ addOutput(GT_ModHandler.getDistilledWater(waterToOutput));
+ if (totalFlow > 0 && totalFlow != aOptFlow) {
+ float efficiency = 1.0f - Math.abs(((totalFlow - (float) aOptFlow) / aOptFlow));
+ tEU *= efficiency;
+ tEU = Math.max(1, tEU * aBaseEff / 20000);
+ } else {
+ tEU = tEU * aBaseEff / 20000;
+ }
+
+ return tEU;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java
new file mode 100644
index 0000000000..fc2a8a908b
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java
@@ -0,0 +1,189 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_MetaTileEntity_MultiFurnace
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ private int mLevel = 0;
+
+ public GT_MetaTileEntity_MultiFurnace(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_MultiFurnace(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_MultiFurnace(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Smelts up to 6-18 Items at once", "Controller Block for the Multi Smelter", "Size: 3x3x3 (Hollow)", "Controller (front middle at bottom)", "8x Heating Coils (middle Layer, hollow)", "1x Input (one of bottom)", "1x Output (one of bottom)", "1x Energy Hatch (one of bottom)", "1x Maintenance Hatch (one of bottom)", "1x Muffler Hatch (top middle)", "Heat Proof Machine Casings for the rest" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[11], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[11] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "MultiFurnace.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ return GT_Recipe.GT_Recipe_Map.sFurnaceRecipes;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ if (!tInputList.isEmpty())
+ {
+ byte tTier = (byte)Math.max(1, GT_Utility.getTier(getMaxInputVoltage()));
+
+ int j = 0;
+ this.mOutputItems = new ItemStack[6 * this.mLevel];
+ for (int i = 0; (i < 100) && (j < this.mOutputItems.length); i++) {
+ if (null != (this.mOutputItems[j] = GT_ModHandler.getSmeltingOutput((ItemStack)tInputList.get(i % tInputList.size()), true, null))) {
+ j++;
+ }
+ }
+ if (j > 0)
+ {
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+
+ this.mEUt = (-4 * (1 << tTier - 1) * (1 << tTier - 1) * this.mLevel);
+ this.mMaxProgresstime = Math.max(1, 512 / (1 << tTier - 1));
+ }
+ updateSlots();
+ return true;
+ }
+ return false;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+
+ this.mLevel = 0;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 1, zDir)) {
+ return false;
+ }
+ addMufflerToMachineList(aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir, 2, zDir), 11);
+
+ byte tUsedMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + 1, 1, zDir);
+ switch (tUsedMeta)
+ {
+ case 12:
+ this.mLevel = 1; break;
+ case 13:
+ this.mLevel = 2; break;
+ case 14:
+ this.mLevel = 3; break;
+ default:
+ return false;
+ }
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((i != 0) || (j != 0))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 1, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 1, zDir + j) != tUsedMeta) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 2, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 2, zDir + j) != 11) {
+ return false;
+ }
+ }
+ }
+ }
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ if ((xDir + i != 0) || (zDir + j != 0))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, 0, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 11)) && (!addInputToMachineList(tTileEntity, 11)) && (!addOutputToMachineList(tTileEntity, 11)) && (!addEnergyInputToMachineList(tTileEntity, 11)))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 0, zDir + j) != GregTech_API.sBlockCasings1) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 0, zDir + j) != 11) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 20;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 18;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
new file mode 100644
index 0000000000..a3478adce8
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
@@ -0,0 +1,298 @@
+package gregtech.common.tileentities.machines.multi;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+
+public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_MultiBlockBase{
+
+ public GT_MetaTileEntity_ProcessingArray(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_ProcessingArray(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ProcessingArray(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Processing Array",
+ "Size: 3x3x3 (Hollow)",
+ "Controller (front centered)",
+ "1x Input (anywhere)",
+ "1x Output (anywhere)",
+ "1x Energy Hatch (anywhere)",
+ "1x Maintenance Hatch (anywhere)",
+ "Robust Tungstensteel Casings for the rest (16 at least!)",
+ "Place up to 16 Single Block GT Machines into the GUI Inventory",
+ "They will work the same way as placed directly in world"};
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[48], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[48] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "VacuumFreezer.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ if(mInventory[1]==null)return null;
+ String tmp = mInventory[1].getUnlocalizedName().replaceAll("gt.blockmachines.basicmachine.", "");
+ if(tmp.startsWith("centrifuge")){
+ return GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes;
+ }else if(tmp.startsWith("electrolyzer")){
+ return GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes;
+ }else if(tmp.startsWith("alloysmelter")){
+ return GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes;
+ }else if(tmp.startsWith("assembler")){
+ return GT_Recipe.GT_Recipe_Map.sAssemblerRecipes;
+ }else if(tmp.startsWith("compressor")){
+ return GT_Recipe.GT_Recipe_Map.sCompressorRecipes;
+ }else if(tmp.startsWith("extractor")){
+ return GT_Recipe.GT_Recipe_Map.sExtractorRecipes;
+ }else if(tmp.startsWith("macerator")){
+ return GT_Recipe.GT_Recipe_Map.sMaceratorRecipes;
+ }else if(tmp.startsWith("recycler")){
+ return GT_Recipe.GT_Recipe_Map.sRecyclerRecipes;
+ }else if(tmp.startsWith("thermalcentrifuge")){
+ return GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes;
+ }else if(tmp.startsWith("orewasher")){
+ return GT_Recipe.GT_Recipe_Map.sOreWasherRecipes;
+ }else if(tmp.startsWith("chemicalreactor")){
+ return GT_Recipe.GT_Recipe_Map.sChemicalRecipes;
+ }else if(tmp.startsWith("chemicalbath")){
+ return GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes;
+ }else if(tmp.startsWith("electromagneticseparator")){
+ return GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes;
+ }else if(tmp.startsWith("autoclave")){
+ return GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes;
+ }else if(tmp.startsWith("mixer")){
+ return GT_Recipe.GT_Recipe_Map.sMixerRecipes;
+ }else if(tmp.startsWith("hammer")){
+ return GT_Recipe.GT_Recipe_Map.sHammerRecipes;
+ }else if(tmp.startsWith("sifter")){
+ return GT_Recipe.GT_Recipe_Map.sSifterRecipes;
+ }else if(tmp.startsWith("extruder")){
+ return GT_Recipe.GT_Recipe_Map.sExtruderRecipes;
+ }else if(tmp.startsWith("laserengraver")){
+ return GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes;
+ }else if(tmp.startsWith("bender")){
+ return GT_Recipe.GT_Recipe_Map.sBenderRecipes;
+ }else if(tmp.startsWith("wiremill")){
+ return GT_Recipe.GT_Recipe_Map.sWiremillRecipes;
+ }else if(tmp.startsWith("arcfurnace")){
+ return GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes;
+ }
+ return null;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ if(aStack!=null&&aStack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.")){
+ return true;}
+ return false;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ GT_Recipe mLastRecipe;
+ public boolean checkRecipe(ItemStack aStack){
+ if(!isCorrectMachinePart(mInventory[1])){return false;}
+ GT_Recipe.GT_Recipe_Map map = getRecipeMap();
+ if(map==null){return false;}
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ int tTier = 0;
+ if(mInventory[1].getUnlocalizedName().endsWith("1")){tTier=1;}
+ if(mInventory[1].getUnlocalizedName().endsWith("2")){tTier=2;}
+ if(mInventory[1].getUnlocalizedName().endsWith("3")){tTier=3;}
+ if(mInventory[1].getUnlocalizedName().endsWith("4")){tTier=4;}
+ if(mInventory[1].getUnlocalizedName().endsWith("5")){tTier=5;}
+ for (int i = 0; i < tInputList.size() - 1; i++) {
+ for (int j = i + 1; j < tInputList.size(); j++) {
+ if (GT_Utility.areStacksEqual((ItemStack)tInputList.get(i), (ItemStack)tInputList.get(j))) {
+ if (((ItemStack)tInputList.get(i)).stackSize >= ((ItemStack)tInputList.get(j)).stackSize)
+ {
+ tInputList.remove(j--);
+ }
+ else
+ {
+ tInputList.remove(i--); break;
+ }
+ }
+ }
+ }
+ ItemStack[] tInputs = (ItemStack[])Arrays.copyOfRange(tInputList.toArray(new ItemStack[tInputList.size()]), 0, 2);
+
+ ArrayList<FluidStack> tFluidList = getStoredFluids();
+ for (int i = 0; i < tFluidList.size() - 1; i++) {
+ for (int j = i + 1; j < tFluidList.size(); j++) {
+ if (GT_Utility.areFluidsEqual((FluidStack)tFluidList.get(i), (FluidStack)tFluidList.get(j))) {
+ if (((FluidStack)tFluidList.get(i)).amount >= ((FluidStack)tFluidList.get(j)).amount)
+ {
+ tFluidList.remove(j--);
+ }
+ else
+ {
+ tFluidList.remove(i--); break;
+ }
+ }
+ }
+ }
+ FluidStack[] tFluids = (FluidStack[])Arrays.copyOfRange(tFluidList.toArray(new FluidStack[tInputList.size()]), 0, 1);
+ if(tInputList.size() > 0 || tFluids.length>0){
+ GT_Recipe tRecipe = map.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, gregtech.api.enums.GT_Values.V[tTier], tFluids, tInputs);
+ if (tRecipe != null) {
+ if(tRecipe.mFluidInputs!=null){
+
+ }
+ mLastRecipe = tRecipe;
+ this.mEUt = 0;
+ this.mOutputItems = null;
+ this.mOutputFluids = null;
+ int machines = Math.min(16,mInventory[1].stackSize);
+ int i = 0;
+ for(;i<machines;i++){
+ if(!tRecipe.isRecipeInputEqual(true, tFluids, tInputs)){if(i==0){return false;}
+ break;}
+ }
+ this.mMaxProgresstime = tRecipe.mDuration;
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
+ this.mMaxProgresstime = (tRecipe.mDuration / (1 << tTier - 1));
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = tRecipe.mDuration;
+ while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)])
+ {
+ this.mEUt *= 4;
+ this.mMaxProgresstime /= 2;
+ }
+ }
+ this.mEUt*=i;
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+ ItemStack[] tOut = new ItemStack[tRecipe.mOutputs.length];
+ for(int h = 0;h<tRecipe.mOutputs.length;h++){
+ tOut[h] = tRecipe.getOutput(h).copy();
+ tOut[h].stackSize =0;
+ }FluidStack tFOut=null;
+ if(tRecipe.getFluidOutput(0)!=null) tFOut = tRecipe.getFluidOutput(0).copy();
+ for(int f =0; f < tOut.length ; f++){
+ if(tRecipe.mOutputs[f]!=null&&tOut[f]!=null){
+ for(int g =0;g<i;g++){
+ if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(f)) tOut[f].stackSize += tRecipe.mOutputs[f].stackSize;
+ }
+ }
+ }
+ if(tFOut!=null){
+ int tSize = tFOut.amount;
+ tFOut.amount = tSize * i;
+ }
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+ List<ItemStack> overStacks = new ArrayList<ItemStack>();
+ for(int f =0; f < tOut.length ; f++){
+ if(tOut[f].getMaxStackSize()<tOut[f].stackSize){
+ while(tOut[f].getMaxStackSize()<tOut[f].stackSize){
+ ItemStack tmp = tOut[f].copy();
+ tmp.stackSize = tmp.getMaxStackSize();
+ tOut[f].stackSize = tOut[f].stackSize - tOut[f].getMaxStackSize();
+ overStacks.add(tmp);
+ }
+ }
+ }
+ if(overStacks.size()>0){
+ ItemStack[] tmp = new ItemStack[overStacks.size()];
+ tmp = overStacks.toArray(tmp);
+ tOut = ArrayUtils.addAll(tOut, tmp);
+ }
+ List<ItemStack> tSList = new ArrayList<ItemStack>();
+ for(ItemStack tS : tOut){
+ if(tS.stackSize>0)tSList.add(tS);
+ }
+ tOut = tSList.toArray(new ItemStack[tSList.size()]);
+ this.mOutputItems = tOut;
+ this.mOutputFluids = new FluidStack[]{tFOut};
+ updateSlots();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 0, zDir)) {
+ return false;
+ }
+ int tAmount = 0;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = -1; h < 2; h++) {
+ if ((h != 0) || (((xDir + i != 0) || (zDir + j != 0)) && ((i != 0) || (j != 0))))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, h, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 48)) && (!addInputToMachineList(tTileEntity, 48)) && (!addOutputToMachineList(tTileEntity, 48)) && (!addEnergyInputToMachineList(tTileEntity, 48)))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j) != GregTech_API.sBlockCasings4) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j) != 0) {
+ return false;
+ }
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ return tAmount >= 16;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack){return 10000;}
+ public int getPollutionPerTick(ItemStack aStack){return 0;}
+ public int getDamageToComponent(ItemStack aStack){return 0;}
+ public int getAmountOfOutputs(){return 1;}
+ public boolean explodesOnComponentBreak(ItemStack aStack){return false;}
+ } \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java
new file mode 100644
index 0000000000..c0d4af2582
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java
@@ -0,0 +1,169 @@
+package gregtech.common.tileentities.machines.multi;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.ArrayList;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GT_MetaTileEntity_VacuumFreezer
+ extends GT_MetaTileEntity_MultiBlockBase
+{
+ public GT_MetaTileEntity_VacuumFreezer(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_VacuumFreezer(String aName)
+ {
+ super(aName);
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_VacuumFreezer(this.mName);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { "Controller Block for the Vacuum Freezer", "Size: 3x3x3 (Hollow)", "Controller (front centered)", "1x Input (anywhere)", "1x Output (anywhere)", "1x Energy Hatch (anywhere)", "1x Maintenance Hatch (anywhere)", "Frost Proof Casings for the rest (16 at least!)" };
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[17], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER) };
+ }
+ return new ITexture[] { Textures.BlockIcons.CASING_BLOCKS[17] };
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "VacuumFreezer.png");
+ }
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap()
+ {
+ return GT_Recipe.GT_Recipe_Map.sVacuumRecipes;
+ }
+
+ public boolean isCorrectMachinePart(ItemStack aStack)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean checkRecipe(ItemStack aStack)
+ {
+ ArrayList<ItemStack> tInputList = getStoredInputs();
+ for (ItemStack tInput : tInputList)
+ {
+ long tVoltage = getMaxInputVoltage();
+ byte tTier = (byte)Math.max(1, GT_Utility.getTier(tVoltage));
+
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sVacuumRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], null, new ItemStack[] { tInput });
+ if (tRecipe != null) {
+ if (tRecipe.isRecipeInputEqual(true, null, new ItemStack[] { tInput }))
+ {
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
+ this.mMaxProgresstime = (tRecipe.mDuration / (1 << tTier - 1));
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = tRecipe.mDuration;
+ while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)])
+ {
+ this.mEUt *= 4;
+ this.mMaxProgresstime /= 2;
+ }
+ }
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+ this.mOutputItems = new ItemStack[] { tRecipe.getOutput(0) };
+ updateSlots();
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack)
+ {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 0, zDir)) {
+ return false;
+ }
+ int tAmount = 0;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = -1; h < 2; h++) {
+ if ((h != 0) || (((xDir + i != 0) || (zDir + j != 0)) && ((i != 0) || (j != 0))))
+ {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i, h, zDir + j);
+ if ((!addMaintenanceToMachineList(tTileEntity, 17)) && (!addInputToMachineList(tTileEntity, 17)) && (!addOutputToMachineList(tTileEntity, 17)) && (!addEnergyInputToMachineList(tTileEntity, 17)))
+ {
+ if (aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j) != GregTech_API.sBlockCasings2) {
+ return false;
+ }
+ if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j) != 1) {
+ return false;
+ }
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ return tAmount >= 16;
+ }
+
+ public int getMaxEfficiency(ItemStack aStack)
+ {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getDamageToComponent(ItemStack aStack)
+ {
+ return 0;
+ }
+
+ public int getAmountOfOutputs()
+ {
+ return 1;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java
new file mode 100644
index 0000000000..ce722b63a7
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java
@@ -0,0 +1,116 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_AlloySmelter_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_AlloySmelter_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Combination Smelter", 2, 1, true);
+ }
+
+ public GT_MetaTileEntity_AlloySmelter_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 2, 1, true);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_AlloySmelter_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeAlloySmelter.png", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mUnlocalizedName);
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[1], null, getAllInputs());
+ if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) && (tRecipe.isRecipeInputEqual(true, null, getAllInputs())))
+ {
+ this.mOutputItems[0] = tRecipe.getOutput(0);
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = (tRecipe.mDuration * 2);
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = (tRecipe.mDuration * 2);
+ }
+ return 2;
+ }
+ return 0;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(208)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java
new file mode 100644
index 0000000000..3de31757be
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java
@@ -0,0 +1,116 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_AlloySmelter_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_AlloySmelter_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Combination Smelter", 2, 1, true);
+ }
+
+ public GT_MetaTileEntity_AlloySmelter_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 2, 1, true);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_AlloySmelter_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelAlloySmelter.png", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mUnlocalizedName);
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[2], null, getAllInputs());
+ if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) && (tRecipe.isRecipeInputEqual(true, null, getAllInputs())))
+ {
+ this.mOutputItems[0] = tRecipe.getOutput(0);
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * 3);
+ this.mMaxProgresstime = tRecipe.mDuration;
+ }
+ else
+ {
+ this.mEUt = (tRecipe.mEUt * 3);
+ this.mMaxProgresstime = tRecipe.mDuration;
+ }
+ return 2;
+ }
+ return 0;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(208)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java
new file mode 100644
index 0000000000..f69dd2ad45
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Compressor_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_Compressor_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Compressing Items", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Compressor_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeCompressor.png", "ic2.compressor");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Compressor_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getCompressorOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 2;
+ this.mMaxProgresstime = 800;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getCompressorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(203)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java
new file mode 100644
index 0000000000..f448e8b4e8
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Compressor_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_Compressor_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Compressing Items", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Compressor_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelCompressor.png", "ic2.compressor");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Compressor_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getCompressorOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 6;
+ this.mMaxProgresstime = 400;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getCompressorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(203)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java
new file mode 100644
index 0000000000..03c31a5b07
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Extractor_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_Extractor_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Extractor_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeExtractor.png", "ic2.extractor");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Extractor_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getExtractorOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 2;
+ this.mMaxProgresstime = 800;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getExtractorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(200)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java
new file mode 100644
index 0000000000..f30adfc533
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Extractor_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_Extractor_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Extractor_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelExtractor.png", "ic2.extractor");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Extractor_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getExtractorOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 6;
+ this.mMaxProgresstime = 400;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getExtractorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(200)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java
new file mode 100644
index 0000000000..8cdaf470c8
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java
@@ -0,0 +1,116 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_ForgeHammer_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_ForgeHammer_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_ForgeHammer_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ForgeHammer_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeHammer.png", GT_Recipe.GT_Recipe_Map.sHammerRecipes.mUnlocalizedName, (byte)6, (byte)3);
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[1], null, getAllInputs());
+ if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) && (tRecipe.isRecipeInputEqual(true, null, getAllInputs())))
+ {
+ this.mOutputItems[0] = tRecipe.getOutput(0);
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = (tRecipe.mDuration * 2);
+ }
+ else
+ {
+ this.mEUt = tRecipe.mEUt;
+ this.mMaxProgresstime = (tRecipe.mDuration * 2);
+ }
+ return 2;
+ }
+ return 0;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(1)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java
new file mode 100644
index 0000000000..a8e4159809
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java
@@ -0,0 +1,116 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_MetaTileEntity_ForgeHammer_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_ForgeHammer_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_ForgeHammer_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_ForgeHammer_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelHammer.png", GT_Recipe.GT_Recipe_Map.sHammerRecipes.mUnlocalizedName, (byte)6, (byte)3);
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[2], null, getAllInputs());
+ if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) && (tRecipe.isRecipeInputEqual(true, null, getAllInputs())))
+ {
+ this.mOutputItems[0] = tRecipe.getOutput(0);
+ if (tRecipe.mEUt <= 16)
+ {
+ this.mEUt = (tRecipe.mEUt * 3);
+ this.mMaxProgresstime = tRecipe.mDuration;
+ }
+ else
+ {
+ this.mEUt = (tRecipe.mEUt * 3);
+ this.mMaxProgresstime = tRecipe.mDuration;
+ }
+ return 2;
+ }
+ return 0;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(1)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java
new file mode 100644
index 0000000000..0a4f86fc3f
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Furnace_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_Furnace_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, true);
+ }
+
+ public GT_MetaTileEntity_Furnace_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, true);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeFurnace.png", "smelting");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Furnace_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 4;
+ this.mMaxProgresstime = 256;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(207)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java
new file mode 100644
index 0000000000..12b915af13
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java
@@ -0,0 +1,112 @@
+package gregtech.common.tileentities.machines.steam;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Furnace_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_Furnace_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, true);
+ }
+
+ public GT_MetaTileEntity_Furnace_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, true);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelFurnace.png", "smelting");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Furnace_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public int checkRecipe()
+ {
+ if (null != (this.mOutputItems[0] = GT_ModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0))))
+ {
+ this.mEUt = 12;
+ this.mMaxProgresstime = 128;
+ return 2;
+ }
+ return 0;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(207)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java
new file mode 100644
index 0000000000..6a28464ec7
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java
@@ -0,0 +1,132 @@
+package gregtech.common.tileentities.machines.steam;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MetaTileEntity_Macerator_Bronze
+ extends GT_MetaTileEntity_BasicMachine_Bronze
+{
+ public GT_MetaTileEntity_Macerator_Bronze(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Macerator_Bronze(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeMacerator.png", "ic2.macerator");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Macerator_Bronze(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) && (aBaseMetaTileEntity.getFrontFacing() != 1) && (aBaseMetaTileEntity.getCoverIDAtSide((byte)1) == 0) && (!aBaseMetaTileEntity.getOpacityAtSide((byte)1)))
+ {
+ Random tRandom = aBaseMetaTileEntity.getWorld().rand;
+ aBaseMetaTileEntity.getWorld().spawnParticle("smoke", aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F, 0.0D, 0.0D, 0.0D);
+ }
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe_Map tMap = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes;
+ if (tMap == null) return DID_NOT_FIND_RECIPE;
+ GT_Recipe tRecipe = tMap.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, V[1], null, null, getAllInputs());
+ if (tRecipe == null) return DID_NOT_FIND_RECIPE;
+ if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe;
+ if (!canOutput(tRecipe)) {mOutputBlocked++; return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS;}
+ if(tRecipe.getOutput(0)!=null) mOutputItems[0] = tRecipe.getOutput(0);
+ this.mEUt = 2;
+ this.mMaxProgresstime = 800;
+ getInputAt(0).stackSize-=tRecipe.mInputs[0].stackSize;
+ return FOUND_AND_SUCCESSFULLY_USED_RECIPE;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getMaceratorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(201)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java
new file mode 100644
index 0000000000..59b13f6e70
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java
@@ -0,0 +1,131 @@
+package gregtech.common.tileentities.machines.steam;
+
+import static gregtech.api.enums.GT_Values.V;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class GT_MetaTileEntity_Macerator_Steel
+ extends GT_MetaTileEntity_BasicMachine_Steel
+{
+ public GT_MetaTileEntity_Macerator_Steel(int aID, String aName, String aNameRegional)
+ {
+ super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, false);
+ }
+
+ public GT_MetaTileEntity_Macerator_Steel(String aName, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aDescription, aTextures, 1, 1, false);
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity)
+ {
+ return new GT_GUIContainer_BasicMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelMacerator.png", "ic2.macerator");
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Macerator_Steel(this.mName, this.mDescription, this.mTextures);
+ }
+
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick)
+ {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) && (aBaseMetaTileEntity.getFrontFacing() != 1) && (aBaseMetaTileEntity.getCoverIDAtSide((byte)1) == 0) && (!aBaseMetaTileEntity.getOpacityAtSide((byte)1)))
+ {
+ Random tRandom = aBaseMetaTileEntity.getWorld().rand;
+ aBaseMetaTileEntity.getWorld().spawnParticle("smoke", aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F, 0.0D, 0.0D, 0.0D);
+ }
+ }
+
+ public int checkRecipe()
+ {
+ GT_Recipe_Map tMap = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes;
+ if (tMap == null) return DID_NOT_FIND_RECIPE;
+ GT_Recipe tRecipe = tMap.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, V[1], null, null, getAllInputs());
+ if (tRecipe == null) return DID_NOT_FIND_RECIPE;
+ if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe;
+ if (!canOutput(tRecipe)) {mOutputBlocked++; return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS;}
+ if(tRecipe.getOutput(0)!=null) mOutputItems[0] = tRecipe.getOutput(0);
+ this.mEUt = 6;
+ this.mMaxProgresstime = 400;
+ getInputAt(0).stackSize-=tRecipe.mInputs[0].stackSize;
+ return FOUND_AND_SUCCESSFULLY_USED_RECIPE;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) {return false;}
+ return GT_ModHandler.getMaceratorOutput(GT_Utility.copyAmount(64L, new Object[] { aStack }), false, null) != null;
+ }
+
+ public void startSoundLoop(byte aIndex, double aX, double aY, double aZ)
+ {
+ super.startSoundLoop(aIndex, aX, aY, aZ);
+ if (aIndex == 1) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(201)), 10, 1.0F, aX, aY, aZ);
+ }
+ }
+
+ public void startProcess()
+ {
+ sendLoopStart((byte)1);
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getSideFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getFrontFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getTopFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR) };
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingActive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE) };
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor)
+ {
+ return new ITexture[] { super.getBottomFacingInactive(aColor)[0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR) };
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java
new file mode 100644
index 0000000000..f0beaa4584
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java
@@ -0,0 +1,197 @@
+package gregtech.common.tileentities.storage;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Locker
+ extends GT_MetaTileEntity_TieredMachineBlock
+{
+ public byte mType = 0;
+
+ public GT_MetaTileEntity_Locker(int aID, String aName, String aNameRegional, int aTier)
+ {
+ super(aID, aName, aNameRegional, aTier, 4, "Stores and recharges Armor", new ITexture[0]);
+ }
+
+ public GT_MetaTileEntity_Locker(String aName, int aTier, String aDescription, ITexture[][][] aTextures)
+ {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ public String[] getDescription()
+ {
+ return new String[] { this.mDescription, "Click with Screwdriver to change Style" };
+ }
+
+ public ITexture[][][] getTextureSet(ITexture[] aTextures)
+ {
+ ITexture[][][] rTextures = new ITexture[3][17][];
+ for (byte i = -1; i < 16; i = (byte)(i + 1))
+ {ITexture[] tmp0 ={ Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(i + 1)] };
+ rTextures[0][(i + 1)] = tmp0;
+ ITexture[] tmp1 ={ Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(i + 1)], Textures.BlockIcons.OVERLAYS_ENERGY_IN[this.mTier] };
+rTextures[1][(i + 1)] = tmp1;
+ ITexture[] tmp2 = { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(i + 1)], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_LOCKER) };
+rTextures[2][(i + 1)] =tmp2;
+ }
+ return rTextures;
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone)
+ {
+ if (aSide == aFacing) {
+ return new ITexture[] { this.mTextures[2][(aColorIndex + 1)][0], this.mTextures[2][(aColorIndex + 1)][1], Textures.BlockIcons.LOCKERS[java.lang.Math.abs(this.mType % Textures.BlockIcons.LOCKERS.length)] };
+ }
+ return this.mTextures[0][(aColorIndex + 1)];
+ }
+
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity)
+ {
+ return new GT_MetaTileEntity_Locker(this.mName, this.mTier, this.mDescription, this.mTextures);
+ }
+
+ public boolean isSimpleMachine()
+ {
+ return false;
+ }
+
+ public boolean isElectric()
+ {
+ return true;
+ }
+
+ public boolean isValidSlot(int aIndex)
+ {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing)
+ {
+ return aFacing > 1;
+ }
+
+ public boolean isEnetInput()
+ {
+ return true;
+ }
+
+ public boolean isInputFacing(byte aSide)
+ {
+ return aSide == getBaseMetaTileEntity().getBackFacing();
+ }
+
+ public boolean isTeleporterCompatible()
+ {
+ return false;
+ }
+
+ public long maxEUStore()
+ {
+ return gregtech.api.enums.GT_Values.V[this.mTier] * maxAmperesIn();
+ }
+
+ public long maxEUInput()
+ {
+ return gregtech.api.enums.GT_Values.V[this.mTier];
+ }
+
+ public long maxAmperesIn()
+ {
+ return this.mInventory.length * 2;
+ }
+
+ public int rechargerSlotStartIndex()
+ {
+ return 0;
+ }
+
+ public int rechargerSlotCount()
+ {
+ return getBaseMetaTileEntity().isAllowedToWork() ? this.mInventory.length : 0;
+ }
+
+ public boolean isAccessAllowed(EntityPlayer aPlayer)
+ {
+ return true;
+ }
+
+ public void saveNBTData(NBTTagCompound aNBT)
+ {
+ aNBT.setByte("mType", this.mType);
+ }
+
+ public void loadNBTData(NBTTagCompound aNBT)
+ {
+ this.mType = aNBT.getByte("mType");
+ }
+
+ public void onValueUpdate(byte aValue)
+ {
+ this.mType = aValue;
+ }
+
+ public byte getUpdateData()
+ {
+ return this.mType;
+ }
+
+ public void doSound(byte aIndex, double aX, double aY, double aZ)
+ {
+ if (aIndex == 16) {
+ GT_Utility.doSoundAtClient((String)GregTech_API.sSoundList.get(Integer.valueOf(3)), 1, 1.0F);
+ }
+ }
+
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ)
+ {
+ if (aSide == getBaseMetaTileEntity().getFrontFacing()) {
+ this.mType = ((byte)(this.mType + 1));
+ }
+ }
+
+ public boolean allowCoverOnSide(byte aSide, GT_ItemStack aStack)
+ {
+ return aSide != getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ)
+ {
+ if ((aBaseMetaTileEntity.isServerSide()) && (aSide == aBaseMetaTileEntity.getFrontFacing()))
+ {
+ for (int i = 0; i < 4; i++)
+ {
+ ItemStack tSwapStack = this.mInventory[i];
+ this.mInventory[i] = aPlayer.inventory.armorInventory[i];
+ aPlayer.inventory.armorInventory[i] = tSwapStack;
+ }
+ aPlayer.inventoryContainer.detectAndSendChanges();
+ sendSound((byte)16);
+ }
+ return true;
+ }
+
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return false;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java
new file mode 100644
index 0000000000..08428153aa
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java
@@ -0,0 +1,237 @@
+package gregtech.common.tileentities.storage;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Container_1by1;
+import gregtech.api.gui.GT_Container_2by2;
+import gregtech.api.gui.GT_Container_3by3;
+import gregtech.api.gui.GT_Container_4by4;
+import gregtech.api.gui.GT_Container_BasicTank;
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.gui.GT_GUIContainer_1by1;
+import gregtech.api.gui.GT_GUIContainer_2by2;
+import gregtech.api.gui.GT_GUIContainer_3by3;
+import gregtech.api.gui.GT_GUIContainer_4by4;
+import gregtech.api.gui.GT_GUIContainer_BasicTank;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_Container_QuantumChest;
+import gregtech.common.gui.GT_GUIContainer_QuantumChest;
+
+public class GT_MetaTileEntity_QuantumChest extends GT_MetaTileEntity_TieredMachineBlock{
+ public GT_MetaTileEntity_QuantumChest(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "This Chest stores "+((int)((Math.pow(6, aTier))*270000))+" Blocks");
+ }
+
+
+ public int mItemCount = 0;
+ public ItemStack mItemStack = null;
+
+ public GT_MetaTileEntity_QuantumChest(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+ @Override public boolean isValidSlot(int aIndex) {return true;}
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_QuantumChest(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+// public void onRightclick(EntityPlayer aPlayer)
+// {
+// ItemStack tPlayerItem = aPlayer.inventory.getCurrentItem();
+// if (tPlayerItem == null)
+// {
+// if (this.mItemID > 0)
+// {
+// for (int i = 0; (this.mItemCount < getMaxItemCount()) && (i < aPlayer.field_71071_by.func_70302_i_()); i++)
+// {
+// if ((aPlayer.field_71071_by.func_70301_a(i) != null) && (aPlayer.field_71071_by.func_70301_a(i).field_77993_c == this.mItemID) && (aPlayer.field_71071_by.func_70301_a(i).func_77960_j() == this.mItemMeta) && (!aPlayer.field_71071_by.func_70301_a(i).func_77942_o()))
+// {
+// this.mItemCount += aPlayer.field_71071_by.func_70301_a(i).field_77994_a;
+// if (aPlayer.field_71071_by.func_70301_a(i).field_77994_a == 111)
+// {
+// this.mItemCount = (getMaxItemCount() + 192 - (this.mItemCount + (this.mInventory[0] == null ? 0 : this.mInventory[0].field_77994_a) + (this.mInventory[1] == null ? 0 : this.mInventory[1].field_77994_a) + (this.mInventory[2] == null ? 0 : this.mInventory[2].field_77994_a)));
+// }
+// else if (this.mItemCount > getMaxItemCount())
+// {
+// aPlayer.field_71071_by.func_70301_a(i).field_77994_a = (this.mItemCount - getMaxItemCount());
+// this.mItemCount = getMaxItemCount();
+// }
+// else
+// {
+// aPlayer.field_71071_by.func_70301_a(i).field_77994_a = 0;
+// }
+// }
+// if ((aPlayer.field_71071_by.func_70301_a(i) != null) && (aPlayer.field_71071_by.func_70301_a(i).field_77994_a <= 0)) {
+// aPlayer.field_71071_by.func_70299_a(i, null);
+// }
+// }
+// GT_Utility.sendChatToPlayer(aPlayer, this.mItemCount + (this.mInventory[0] == null ? 0 : this.mInventory[0].field_77994_a) + (this.mInventory[1] == null ? 0 : this.mInventory[1].field_77994_a) + (this.mInventory[2] == null ? 0 : this.mInventory[2].field_77994_a) + " of " + new ItemStack(this.mItemID, 1, this.mItemMeta).func_82833_r());
+// }
+// }
+// if (aPlayer.field_71069_bz != null) {
+// aPlayer.field_71069_bz.func_75142_b();
+// }
+// }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_QuantumChest(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_QuantumChest(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+
+ if (getBaseMetaTileEntity().isServerSide()&& getBaseMetaTileEntity().isAllowedToWork())
+ {
+ if ((getItemCount() <= 0) ){
+ this.mItemStack = null;
+ this.mItemCount = 0;
+ }
+ if (this.mItemStack == null&&this.mInventory[0]!=null)
+ {
+ this.mItemStack = mInventory[0].copy();
+ }
+ if ((this.mInventory[0]!=null)&&(this.mItemCount < getMaxItemCount()) && GT_Utility.areStacksEqual(this.mInventory[0],this.mItemStack))
+ {
+ this.mItemCount += this.mInventory[0].stackSize;
+ if (this.mItemCount > getMaxItemCount())
+ {
+ this.mInventory[0].stackSize = (this.mItemCount - getMaxItemCount());
+ this.mItemCount = getMaxItemCount();
+ }
+ else
+ {
+ this.mInventory[0] = null;
+ }
+ }
+ if (this.mInventory[1] == null&&mItemStack!=null)
+ {
+ this.mInventory[1] = mItemStack.copy();
+ this.mInventory[1].stackSize = Math.min(mItemStack.getMaxStackSize(), this.mItemCount);
+ this.mItemCount -= this.mInventory[1].stackSize;
+ }
+ else if ((this.mItemCount > 0) && GT_Utility.areStacksEqual(this.mInventory[1],this.mItemStack)&&this.mInventory[1].getMaxStackSize()>this.mInventory[1].stackSize)
+ {
+ int tmp = Math.min(this.mItemCount, this.mInventory[1].getMaxStackSize()-this.mInventory[1].stackSize);
+ this.mInventory[1].stackSize += tmp;
+ this.mItemCount -= tmp;
+ }
+ if(this.mItemStack!=null){
+ this.mInventory[2]= this.mItemStack.copy();
+ }else{this.mInventory[2]=null;}
+ }
+ }
+
+ private int getItemCount()
+ {
+ return this.mItemCount;
+ }
+
+ public int getProgresstime()
+ {
+ return this.mItemCount + (this.mInventory[0] == null ? 0 : this.mInventory[0].stackSize) + (this.mInventory[1] == null ? 0 : this.mInventory[1].stackSize);
+ }
+
+ public int maxProgresstime()
+ {
+ return getMaxItemCount();
+ }
+
+ public int getMaxItemCount()
+ {
+ return (int) (((Math.pow(6, mTier))*270000) - 128);
+ }
+
+ public void setItemCount(int aCount)
+ {
+ this.mItemCount = aCount;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public String[] getInfoData() {
+
+ if(mItemStack==null){
+ return new String[]{
+ "Quantum Chest",
+ "Stored Items:",
+ "No Items",
+ Integer.toString(0),
+ Integer.toString(getMaxItemCount())};
+ }
+ return new String[] {
+ "Quantum Chest",
+ "Stored Items:",
+ mItemStack.getDisplayName(),
+ Integer.toString(mItemCount),
+ Integer.toString(getMaxItemCount())};
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setInteger("mItemCount", this.mItemCount);
+ if(this.mItemStack!=null)
+ aNBT.setTag("mItemStack", this.mItemStack.writeToNBT(new NBTTagCompound()));
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ if(aNBT.hasKey("mItemCount"))
+ this.mItemCount = aNBT.getInteger("mItemCount");
+ if(aNBT.hasKey("mItemStack"))
+ this.mItemStack = ItemStack.loadItemStackFromNBT((NBTTagCompound) aNBT.getTag("mItemStack"));
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity,byte aSide, byte aFacing, byte aColorIndex, boolean aActive,boolean aRedstone) {
+ if(aBaseMetaTileEntity.getFrontFacing()==0&&aSide==4){return new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1],new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_QCHEST)}; }
+ return aSide == aBaseMetaTileEntity.getFrontFacing() ? new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1],new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_QCHEST)} :new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]};//aSide != aFacing ? mMachineBlock != 0 ? new ITexture[] {Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]} : new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]} : mMachineBlock != 0 ? aActive ? getTexturesActive(Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]) : getTexturesInactive(Textures.BlockIcons.CASING_BLOCKS[mMachineBlock]) : aActive ? getTexturesActive(Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]) : getTexturesInactive(Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ return new ITexture[0][0][0];
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java
new file mode 100644
index 0000000000..a27feb5814
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java
@@ -0,0 +1,129 @@
+package gregtech.common.tileentities.storage;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.*;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_QuantumTank
+ extends GT_MetaTileEntity_BasicTank
+{
+ public GT_MetaTileEntity_QuantumTank(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3, "Stores "+((int)(Math.pow(6, aTier)*267000))+"L of fluid");
+ }
+
+ public GT_MetaTileEntity_QuantumTank(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ return new ITexture[0][0][0];
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
+ return aSide ==1 ? new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1],new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_QTANK)} :new ITexture[] {Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex+1]};
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override public boolean isSimpleMachine() {return true;}
+ @Override public boolean isFacingValid(byte aFacing) {return true;}
+ @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ }
+
+ @Override
+ public final byte getUpdateData() {
+ return 0x00;
+ }
+
+ @Override
+ public boolean doesFillContainers() {
+ return true;
+ }
+
+ @Override
+ public boolean doesEmptyContainers() {
+ return true;
+ }
+
+ @Override
+ public boolean canTankBeFilled() {
+ return true;
+ }
+
+ @Override
+ public boolean canTankBeEmptied() {
+ return true;
+ }
+
+ @Override
+ public boolean displaysItemStack() {
+ return true;
+ }
+
+ @Override
+ public boolean displaysStackSize() {
+ return false;
+ }
+
+ @Override
+ public String[] getInfoData() {
+
+ if(mFluid==null){
+ return new String[]{
+ "Quantum Tank",
+ "Stored Fluid:",
+ "No Fluid",
+ Integer.toString(0)+"L",
+ Integer.toString(getCapacity())+"L"};
+ }
+ return new String[] {
+ "Quantum Tank",
+ "Stored Fluid:",
+ mFluid.getLocalizedName(),
+ Integer.toString(mFluid.amount)+"L",
+ Integer.toString(getCapacity())+"L"};
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_QuantumTank(mName, mTier, mDescription, mTextures);
+ }
+
+ @Override
+ public int getCapacity() {
+ return (int) (Math.pow(6, mTier)*267000);
+ }
+
+ @Override
+ public int getTankPressure() {
+ return 100;
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tools/GT_Tool.java b/src/main/java/gregtech/common/tools/GT_Tool.java
new file mode 100644
index 0000000000..30995b6dc9
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool.java
@@ -0,0 +1,170 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.EntityDamageSource;
+import net.minecraft.util.IChatComponent;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public abstract class GT_Tool
+ implements IToolStats
+{
+ public static final Enchantment[] FORTUNE_ENCHANTMENT = { Enchantment.fortune };
+ public static final Enchantment[] LOOTING_ENCHANTMENT = { Enchantment.looting };
+ public static final Enchantment[] ZERO_ENCHANTMENTS = new Enchantment[0];
+ public static final int[] ZERO_ENCHANTMENT_LEVELS = new int[0];
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity)
+ {
+ return aOriginalHurtResistance;
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isGrafter()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return false;
+ }
+
+ public boolean isRangedWeapon()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return true;
+ }
+
+ public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity)
+ {
+ return GT_DamageSources.getCombatDamage((aPlayer instanceof EntityPlayer) ? "player" : "mob", aPlayer, (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase)aEntity) : null);
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new EntityDamageSource((aPlayer instanceof EntityPlayer) ? "player" : "mob", aPlayer).func_151519_b(aEntity);
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ return 0;
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public Enchantment[] getEnchantments(ItemStack aStack)
+ {
+ return ZERO_ENCHANTMENTS;
+ }
+
+ public int[] getEnchantmentLevels(ItemStack aStack)
+ {
+ return ZERO_ENCHANTMENT_LEVELS;
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ aPlayer.triggerAchievement(AchievementList.openInventory);
+ aPlayer.triggerAchievement(AchievementList.mineWood);
+ aPlayer.triggerAchievement(AchievementList.buildWorkBench);
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ return aOriginalDamage;
+ }
+
+ public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ return aOriginalDamage;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java
new file mode 100644
index 0000000000..28cd415aed
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java
@@ -0,0 +1,146 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_Axe
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("axe"))) || (aBlock.getMaterial() == Material.wood);
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ int rAmount = 0;
+ if ((GregTech_API.sTimber) && (!aPlayer.isSneaking()) && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))))
+ {
+ int tY = aY + 1;
+ for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++)
+ {
+ if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock) || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) {
+ break;
+ }
+ rAmount++;
+ }
+ }
+ return rAmount;
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.toolHeadAxe.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been chopped by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java b/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java
new file mode 100644
index 0000000000..a1e2921153
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java
@@ -0,0 +1,100 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+
+import java.util.List;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_BranchCutter
+ extends GT_Tool
+{
+ public float getBaseDamage()
+ {
+ return 2.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.25F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 0.25F;
+ }
+
+ public boolean isGrafter()
+ {
+ return true;
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ if (aBlock.getMaterial() == Material.leaves)
+ {
+ aEvent.dropChance = Math.min(1.0F, Math.max(aEvent.dropChance, (aStack.getItem().getHarvestLevel(aStack, "") + 1) * 0.2F));
+ if (aBlock == Blocks.leaves)
+ {
+ aDrops.clear();
+ if (((aMetaData & 0x3) == 0) && (aPlayer.worldObj.rand.nextInt(9) <= aFortune * 2)) {
+ aDrops.add(new ItemStack(Items.apple, 1, 0));
+ } else {
+ aDrops.add(new ItemStack(Blocks.sapling, 1, aMetaData & 0x3));
+ }
+ }
+ else if (aBlock == Blocks.leaves2)
+ {
+ aDrops.clear();
+ aDrops.add(new ItemStack(Blocks.sapling, 1, (aMetaData & 0x3) + 4));
+ }
+ else if (aBlock == GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("rubberLeaves", 1L)))
+ {
+ aDrops.clear();
+ aDrops.add(GT_ModHandler.getIC2Item("rubberSapling", 1L));
+ }
+ }
+ return 0;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("grafter"))) || (aBlock.getMaterial() == Material.leaves);
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.GRAFTER : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been trimmed by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java b/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java
new file mode 100644
index 0000000000..5c96cbb38e
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java
@@ -0,0 +1,99 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_ButcheryKnife
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 400;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.0F;
+ }
+
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity)
+ {
+ return aOriginalHurtResistance * 2;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.1F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public Enchantment[] getEnchantments(ItemStack aStack)
+ {
+ return LOOTING_ENCHANTMENT;
+ }
+
+ public int[] getEnchantmentLevels(ItemStack aStack)
+ {
+ return new int[] { (2 + GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality) / 2 };
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.BUTCHERYKNIFE : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " has butchered " + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java b/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java
new file mode 100644
index 0000000000..1db0c0be0a
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java
@@ -0,0 +1,81 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_BuzzSaw
+ extends GT_Tool_Saw
+{
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 300;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(104));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(105));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(104));
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ return false;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadBuzzSaw.mTextureIndex] : Textures.ItemIcons.HANDLE_BUZZSAW;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got buzzed by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java
new file mode 100644
index 0000000000..0847a6dbb4
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java
@@ -0,0 +1,55 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Chainsaw_HV
+ extends GT_Tool_Chainsaw_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 1600;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 12800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 3200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 4.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 4.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 4.0F;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_HV;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java
new file mode 100644
index 0000000000..987ec8be11
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java
@@ -0,0 +1,114 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Chainsaw_LV
+ extends GT_Tool_Saw
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(104));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(105));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(104));
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "brrrr");}catch(Exception e){}
+ }
+
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_LV;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was massacred by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java
new file mode 100644
index 0000000000..2c46049a98
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java
@@ -0,0 +1,55 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Chainsaw_MV
+ extends GT_Tool_Chainsaw_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 3200;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 800;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 3.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_MV;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java b/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java
new file mode 100644
index 0000000000..87c30b4a50
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java
@@ -0,0 +1,145 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import gregtech.common.items.behaviors.Behaviour_Crowbar;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Crowbar
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return true;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ if (aBlock.getMaterial() == Material.circuits) {
+ return true;
+ }
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ if ((tTool == null) || (tTool.equals("")))
+ {
+ for (Iterator i$ = GT_MetaGenerated_Tool_01.INSTANCE.mToolStats.values().iterator(); i$.hasNext(); i$.next())
+ {
+ if (((i$ instanceof GT_Tool_Crowbar)) && (!((IToolStats)i$).isMinableBlock(aBlock, aMetaData))) {return false;}
+ }
+ return true;
+ }
+ return tTool.equals("crowbar");
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.CROWBAR : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : null;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Crowbar(1, 1000));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was removed by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java
new file mode 100644
index 0000000000..03167c1665
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java
@@ -0,0 +1,64 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.common.GT_Proxy;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Drill_HV
+ extends GT_Tool_Drill_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return GT_Mod.gregtechproxy.mHardRock ? 400 : 800;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 1600;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 12800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 3200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 9.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 4.0F;
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "highpowerdrill");}catch(Exception e){}
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_HV;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java
new file mode 100644
index 0000000000..852910948d
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java
@@ -0,0 +1,132 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.GT_Proxy;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Drill_LV
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return GT_Mod.gregtechproxy.mHardRock ? 25 : 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 3.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(106));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(106));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(106));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(106));
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && ((tTool.equals("pickaxe")) || (tTool.equals("shovel")))) || (aBlock.getMaterial() == Material.rock) || (aBlock.getMaterial() == Material.iron) || (aBlock.getMaterial() == Material.anvil) || (aBlock.getMaterial() == Material.sand) || (aBlock.getMaterial() == Material.grass) || (aBlock.getMaterial() == Material.ground) || (aBlock.getMaterial() == Material.snow) || (aBlock.getMaterial() == Material.clay) || (aBlock.getMaterial() == Material.glass);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_LV;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ aPlayer.triggerAchievement(AchievementList.buildPickaxe);
+ aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "driltime");}catch(Exception e){}
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got the Drill! (by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + ")");
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java
new file mode 100644
index 0000000000..4548e4632b
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java
@@ -0,0 +1,57 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.common.GT_Proxy;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Drill_MV
+ extends GT_Tool_Drill_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return GT_Mod.gregtechproxy.mHardRock ? 100 : 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 3200;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 800;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 6.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_MV;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_File.java b/src/main/java/gregtech/common/tools/GT_Tool_File.java
new file mode 100644
index 0000000000..29d04f819e
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_File.java
@@ -0,0 +1,124 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_File
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return (tTool != null) && (tTool.equals("file"));
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadFile.mTextureIndex] : Textures.ItemIcons.HANDLE_FILE;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been filed D for 'Dead' by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java
new file mode 100644
index 0000000000..f7212b9ad8
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java
@@ -0,0 +1,190 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.behaviors.Behaviour_Prospecting;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityIronGolem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_HardHammer
+ extends GT_Tool
+{
+ public static final List<String> mEffectiveList = Arrays.asList(new String[] { EntityIronGolem.class.getName(), "EntityTowerGuardian" });
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ String tName = aEntity.getClass().getName();
+ tName = tName.substring(tName.lastIndexOf(".") + 1);
+ return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage;
+ }
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity)
+ {
+ return aOriginalHurtResistance * 2;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.75F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(1));
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(2));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && ((tTool.equals("hammer")) || (tTool.equals("pickaxe")))) || (aBlock.getMaterial() == Material.rock) || (aBlock.getMaterial() == Material.glass) || (aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce) || (GT_Recipe.GT_Recipe_Map.sHammerRecipes.containsInput(new ItemStack(aBlock, 1, aMetaData)));
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ int rConversions = 0;
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(null, true, 2147483647L, null, new ItemStack[] { new ItemStack(aBlock, 1, aMetaData) });
+ if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData)))
+ {
+ for (ItemStack tDrop : aDrops)
+ {
+ tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(null, true, 2147483647L, null, new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { tDrop }) });
+ if (tRecipe != null)
+ {
+ ItemStack tHammeringOutput = tRecipe.getOutput(0);
+ if (tHammeringOutput != null)
+ {
+ rConversions += tDrop.stackSize;
+ tDrop.stackSize *= tHammeringOutput.stackSize;
+ tHammeringOutput.stackSize = tDrop.stackSize;
+ GT_Utility.setStack(tDrop, tHammeringOutput);
+ }
+ }
+ }
+ }
+ else
+ {
+ aDrops.clear();
+ aDrops.add(tRecipe.getOutput(0));
+ rConversions++;
+ }
+ return rConversions;
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHammer.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Prospecting(1, 1000));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was squashed by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "tools");}catch(Exception e){}
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java b/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java
new file mode 100644
index 0000000000..3e6f46879a
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java
@@ -0,0 +1,128 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Hoe;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Hoe
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.75F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("hoe"))) || (aBlock.getMaterial() == Material.gourd);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHoe.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Hoe(100));
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ aPlayer.triggerAchievement(AchievementList.buildHoe);
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been called a stupid Hoe by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java
new file mode 100644
index 0000000000..43043f9da0
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java
@@ -0,0 +1,121 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Proxy;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_JackHammer
+ extends GT_Tool_Drill_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return GT_Mod.gregtechproxy.mHardRock ? 200 : 400;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 3200;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 800;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 12.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("pickaxe"))) || (aBlock.getMaterial() == Material.rock) || (aBlock.getMaterial() == Material.glass) || (aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce);
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ int rConversions = 0;
+ GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(null, true, 2147483647L, null, new ItemStack[] { new ItemStack(aBlock, 1, aMetaData) });
+ if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData)))
+ {
+ for (ItemStack tDrop : aDrops)
+ {
+ tRecipe = GT_Recipe.GT_Recipe_Map.sHammerRecipes.findRecipe(null, true, 2147483647L, null, new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { tDrop }) });
+ if (tRecipe != null)
+ {
+ ItemStack tHammeringOutput = tRecipe.getOutput(0);
+ if (tHammeringOutput != null)
+ {
+ rConversions += tDrop.stackSize;
+ tDrop.stackSize *= tHammeringOutput.stackSize;
+ tHammeringOutput.stackSize = tDrop.stackSize;
+ GT_Utility.setStack(tDrop, tHammeringOutput);
+ }
+ }
+ }
+ }
+ else
+ {
+ aDrops.clear();
+ aDrops.add(tRecipe.getOutput(0));
+ rConversions++;
+ }
+ return rConversions;
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "hammertime");}catch(Exception e){}
+ }
+
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.JACKHAMMER : null;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been jackhammered into pieces by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Knife.java b/src/main/java/gregtech/common/tools/GT_Tool_Knife.java
new file mode 100644
index 0000000000..962d7e5c1d
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Knife.java
@@ -0,0 +1,59 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Knife
+ extends GT_Tool_Sword
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.5F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.KNIFE : null;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText("<" + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + "> " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " what are you doing?, " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + "?!? STAHP!!!");
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java b/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java
new file mode 100644
index 0000000000..7284fe2289
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java
@@ -0,0 +1,124 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Mortar
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ return false;
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.MORTAR : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was grounded by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java b/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java
new file mode 100644
index 0000000000..a0bb3271c2
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java
@@ -0,0 +1,128 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.GT_Proxy;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Pickaxe
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return GT_Mod.gregtechproxy.mHardRock ? 25 : 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("pickaxe"))) || (aBlock.getMaterial() == Material.rock) || (aBlock.getMaterial() == Material.iron) || (aBlock.getMaterial() == Material.anvil) || (aBlock.getMaterial() == Material.glass);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPickaxe.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ aPlayer.triggerAchievement(AchievementList.buildPickaxe);
+ aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "flintpick");}catch(Exception e){}
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got mined by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Plow.java b/src/main/java/gregtech/common/tools/GT_Tool_Plow.java
new file mode 100644
index 0000000000..5f120bf38a
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Plow.java
@@ -0,0 +1,81 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntitySnowman;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.server.management.ItemInWorldManager;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_Plow
+ extends GT_Tool
+{
+ private ThreadLocal<Object> sIsHarvestingRightNow = new ThreadLocal();
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ return (aEntity instanceof EntitySnowman) ? aOriginalDamage * 4.0F : aOriginalDamage;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.0F;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("plow"))) || (aBlock.getMaterial() == Material.snow) || (aBlock.getMaterial() == Material.craftedSnow);
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ int rConversions = 0;
+ if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP)))
+ {
+ this.sIsHarvestingRightNow.set(this);
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int k = -1; k < 2; k++) {
+ if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem().getDigSpeed(aStack, aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) > 0.0F) && (((EntityPlayerMP)aPlayer).theItemInWorldManager.tryHarvestBlock(aX + i, aY + j, aZ + k))) {
+ rConversions++;
+ }
+ }
+ }
+ }
+ this.sIsHarvestingRightNow.set(null);
+ }
+ return rConversions;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPlow.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " plew through the yard of " + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java b/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java
new file mode 100644
index 0000000000..e8f406ee4c
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java
@@ -0,0 +1,90 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.behaviors.Behaviour_Plunger_Fluid;
+import gregtech.common.items.behaviors.Behaviour_Plunger_Item;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Plunger
+ extends GT_Tool
+{
+ public float getBaseDamage()
+ {
+ return 1.25F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 0.25F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return (tTool != null) && (tTool.equals("plunger"));
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.PLUNGER : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Plunger_Item(getToolDamagePerDropConversion()));
+ aItem.addItemBehavior(aID, new Behaviour_Plunger_Fluid(getToolDamagePerDropConversion()));
+ try
+ {
+ Object tObject = GT_Utility.callConstructor("gregtech.common.items.behaviors.Behaviour_Plunger_Essentia", 0, null, false, new Object[] { Integer.valueOf(getToolDamagePerDropConversion()) });
+ if ((tObject instanceof IItemBehaviour)) {
+ aItem.addItemBehavior(aID, (IItemBehaviour)tObject);
+ }
+ }
+ catch (Throwable e) {}
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got stuck trying to escape through a Pipe while fighting " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java b/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java
new file mode 100644
index 0000000000..619a6b3986
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java
@@ -0,0 +1,65 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_RollingPin
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ return false;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.ROLLING_PIN : null;
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got flattened by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Saw.java b/src/main/java/gregtech/common/tools/GT_Tool_Saw.java
new file mode 100644
index 0000000000..0a406971b8
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Saw.java
@@ -0,0 +1,142 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.common.IShearable;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_Saw
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.75F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ if ((aBlock.getMaterial() == Material.leaves) && ((aBlock instanceof IShearable)))
+ {
+ aPlayer.worldObj.setBlock(aX, aY, aZ, aBlock, aMetaData, 0);
+ if (((IShearable)aBlock).isShearable(aStack, aPlayer.worldObj, aX, aY, aZ))
+ {
+ ArrayList<ItemStack> tDrops = ((IShearable)aBlock).onSheared(aStack, aPlayer.worldObj, aX, aY, aZ, aFortune);
+ aDrops.clear();
+ aDrops.addAll(tDrops);
+ aEvent.dropChance = 1.0F;
+ }
+ aPlayer.worldObj.setBlock(aX, aY, aZ, Blocks.air, 0, 0);
+ }
+ else if (((aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce)) && (aDrops.isEmpty()))
+ {
+ aDrops.add(new ItemStack(aBlock, 1, aMetaData));
+ aPlayer.worldObj.setBlockToAir(aX, aY, aZ);
+ aEvent.dropChance = 1.0F;
+ return 1;
+ }
+ return 0;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && ((tTool.equals("axe")) || (tTool.equals("saw")))) || (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) || (aBlock.getMaterial() == Material.wood) || (aBlock.getMaterial() == Material.cactus) || (aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSaw.mTextureIndex] : Textures.ItemIcons.HANDLE_SAW;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was getting cut down by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java b/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java
new file mode 100644
index 0000000000..62bb1720f0
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java
@@ -0,0 +1,134 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Scoop
+ extends GT_Tool
+{
+ public static Material sBeeHiveMaterial;
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("scoop"))) || (aBlock.getMaterial() == sBeeHiveMaterial);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.SCOOP : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ try
+ {
+ Object tObject = GT_Utility.callConstructor("gregtech.common.items.behaviors.Behaviour_Scoop", 0, null, false, new Object[] { Integer.valueOf(200) });
+ if ((tObject instanceof IItemBehaviour)) {
+ aItem.addItemBehavior(aID, (IItemBehaviour)tObject);
+ }
+ }
+ catch (Throwable e) {}
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got scooped up by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java
new file mode 100644
index 0000000000..41e972874e
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java
@@ -0,0 +1,144 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Screwdriver;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityCaveSpider;
+import net.minecraft.entity.monster.EntitySpider;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Screwdriver
+ extends GT_Tool
+{
+ public static final List<String> mEffectiveList = Arrays.asList(new String[] { EntityCaveSpider.class.getName(), EntitySpider.class.getName(), "EntityTFHedgeSpider", "EntityTFKingSpider", "EntityTFSwarmSpider", "EntityTFTowerBroodling" });
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ String tName = aEntity.getClass().getName();
+ tName = tName.substring(tName.lastIndexOf(".") + 1);
+ return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage;
+ }
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(100));
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("screwdriver"))) || (aBlock.getMaterial() == Material.circuits);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] : Textures.ItemIcons.HANDLE_SCREWDRIVER;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Screwdriver(1, 200));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " is screwed! (by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + ")");
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java
new file mode 100644
index 0000000000..43186f3ae3
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java
@@ -0,0 +1,32 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Screwdriver_LV
+ extends GT_Tool_Screwdriver
+{
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 200;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] : Textures.ItemIcons.HANDLE_ELECTRIC_SCREWDRIVER;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Sense.java b/src/main/java/gregtech/common/tools/GT_Tool_Sense.java
new file mode 100644
index 0000000000..ff8f48af61
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Sense.java
@@ -0,0 +1,80 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Sense;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.server.management.ItemInWorldManager;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
+
+public class GT_Tool_Sense
+ extends GT_Tool
+{
+ private ThreadLocal<Object> sIsHarvestingRightNow = new ThreadLocal();
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && ((tTool.equals("sense")) || (tTool.equals("scythe")))) || (aBlock.getMaterial() == Material.plants) || (aBlock.getMaterial() == Material.leaves);
+ }
+
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent)
+ {
+ int rConversions = 0;
+ if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP)))
+ {
+ this.sIsHarvestingRightNow.set(this);
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int k = -1; k < 2; k++) {
+ if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem().getDigSpeed(aStack, aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) > 0.0F) && (((EntityPlayerMP)aPlayer).theItemInWorldManager.tryHarvestBlock(aX + i, aY + j, aZ + k))) {
+ rConversions++;
+ }
+ }
+ }
+ }
+ this.sIsHarvestingRightNow.set(null);
+ }
+ return rConversions;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSense.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Sense(getToolDamagePerBlockBreak()));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " has taken the Soul of " + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java b/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java
new file mode 100644
index 0000000000..27029337ea
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java
@@ -0,0 +1,116 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Shovel
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("shovel"))) || (aBlock.getMaterial() == Material.sand) || (aBlock.getMaterial() == Material.grass) || (aBlock.getMaterial() == Material.ground) || (aBlock.getMaterial() == Material.snow) || (aBlock.getMaterial() == Material.clay);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadShovel.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got dug up by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java
new file mode 100644
index 0000000000..fe89fffa71
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java
@@ -0,0 +1,135 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_SoftHammer;
+import java.util.Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_SoftHammer
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity)
+ {
+ return aOriginalHurtResistance * 2;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.1F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 8.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public String getEntityHitSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(101));
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return (tTool != null) && (tTool.equals("softhammer"));
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHammer.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_SoftHammer(100));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " was hammered to death by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java b/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java
new file mode 100644
index 0000000000..fa496cdce4
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java
@@ -0,0 +1,138 @@
+package gregtech.common.tools;
+
+import java.util.Arrays;
+import java.util.List;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Screwdriver;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityCaveSpider;
+import net.minecraft.entity.monster.EntitySpider;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Soldering_Iron extends GT_Tool{
+ public static final List<String> mEffectiveList = Arrays.asList(new String[] { EntityCaveSpider.class.getName(), EntitySpider.class.getName(), "EntityTFHedgeSpider", "EntityTFKingSpider", "EntityTFSwarmSpider", "EntityTFTowerBroodling" });
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ String tName = aEntity.getClass().getName();
+ tName = tName.substring(tName.lastIndexOf(".") + 1);
+ return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage;
+ }
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 1000;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 500;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 1000;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 500;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(100));
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMiningTool()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("soldering_iron"))) || (aBlock.getMaterial() == Material.circuits);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[49] : Textures.ItemIcons.HANDLE_SOLDERING;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Screwdriver(1, 200));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " got soldert! (by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + ")");
+ }
+ }
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Sword.java b/src/main/java/gregtech/common/tools/GT_Tool_Sword.java
new file mode 100644
index 0000000000..90579dcbfc
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Sword.java
@@ -0,0 +1,122 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+
+public class GT_Tool_Sword
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 100;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 4.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("sword"))) || (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.gourd) || (aBlock.getMaterial() == Material.vine) || (aBlock.getMaterial() == Material.web) || (aBlock.getMaterial() == Material.cloth) || (aBlock.getMaterial() == Material.carpet) || (aBlock.getMaterial() == Material.plants) || (aBlock.getMaterial() == Material.cactus) || (aBlock.getMaterial() == Material.cake) || (aBlock.getMaterial() == Material.tnt) || (aBlock.getMaterial() == Material.sponge);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSword.mTextureIndex] : Textures.ItemIcons.HANDLE_SWORD;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ aPlayer.triggerAchievement(AchievementList.buildSword);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java
new file mode 100644
index 0000000000..7640c4fe8a
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java
@@ -0,0 +1,27 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public abstract class GT_Tool_Turbine extends GT_Tool{
+ public abstract float getBaseDamage();
+ @Override public boolean isMinableBlock(Block aBlock, byte aMetaData) {return false;}
+ @Override public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {return aIsToolHead ? getTurbineIcon(): null;}
+ @Override public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) {return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : null;}
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " put " + EnumChatFormatting.RED +
+ aEntity.getCommandSenderName()+"s" + EnumChatFormatting.WHITE + " head into a turbine");
+ }
+ public abstract IIconContainer getTurbineIcon();
+ public abstract float getSpeedMultiplier();
+ public abstract float getMaxDurabilityMultiplier();
+ public ItemStack getBrokenItem(ItemStack aStack){return null;}
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java
new file mode 100644
index 0000000000..f2ec5a737f
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java
@@ -0,0 +1,11 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+
+public class GT_Tool_Turbine_Huge extends GT_Tool_Turbine {
+ @Override public float getSpeedMultiplier() {return 4.0F;}
+ @Override public float getMaxDurabilityMultiplier() {return 4.0F;}
+ @Override public float getBaseDamage() {return 3.0F;}
+ @Override public IIconContainer getTurbineIcon() {return Textures.ItemIcons.TURBINE_HUGE;}
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java
new file mode 100644
index 0000000000..ed0713cd7b
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java
@@ -0,0 +1,11 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+
+public class GT_Tool_Turbine_Large extends GT_Tool_Turbine {
+ @Override public float getSpeedMultiplier() {return 3.0F;}
+ @Override public float getMaxDurabilityMultiplier() {return 3.0F;}
+ @Override public float getBaseDamage() {return 5.0F;}
+ @Override public IIconContainer getTurbineIcon() {return Textures.ItemIcons.TURBINE_LARGE;}
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java
new file mode 100644
index 0000000000..a29ad632d6
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java
@@ -0,0 +1,11 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+
+public class GT_Tool_Turbine_Normal extends GT_Tool_Turbine {
+ @Override public float getSpeedMultiplier() {return 2.0F;}
+ @Override public float getMaxDurabilityMultiplier() {return 2.0F;}
+ @Override public float getBaseDamage() {return 2.5F;}
+ @Override public IIconContainer getTurbineIcon() {return Textures.ItemIcons.TURBINE;}
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java
new file mode 100644
index 0000000000..4292ab73fb
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java
@@ -0,0 +1,12 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+
+public class GT_Tool_Turbine_Small extends GT_Tool_Turbine {
+ @Override public float getSpeedMultiplier() {return 1.0F;}
+ @Override public float getMaxDurabilityMultiplier() {return 1.0F;}
+ @Override public float getBaseDamage() {return 0.0F;}
+ @Override public IIconContainer getTurbineIcon() {return Textures.ItemIcons.TURBINE_SMALL;}
+
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java b/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java
new file mode 100644
index 0000000000..d5f6c0223d
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java
@@ -0,0 +1,137 @@
+package gregtech.common.tools;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Crowbar;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_UniversalSpade
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 100;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 0.75F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return true;
+ }
+
+ public boolean isCrowbar()
+ {
+ return true;
+ }
+
+ public boolean isWeapon()
+ {
+ return true;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && ((tTool.equals("shovel")) || (tTool.equals("axe")) || (tTool.equals("saw")) || (tTool.equals("sword")) || (tTool.equals("crowbar")))) || (aBlock.getMaterial() == Material.sand) || (aBlock.getMaterial() == Material.grass) || (aBlock.getMaterial() == Material.ground) || (aBlock.getMaterial() == Material.snow) || (aBlock.getMaterial() == Material.clay) || (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) || (aBlock.getMaterial() == Material.wood) || (aBlock.getMaterial() == Material.cactus) || (aBlock.getMaterial() == Material.circuits) || (aBlock.getMaterial() == Material.gourd) || (aBlock.getMaterial() == Material.web) || (aBlock.getMaterial() == Material.cloth) || (aBlock.getMaterial() == Material.carpet) || (aBlock.getMaterial() == Material.plants) || (aBlock.getMaterial() == Material.cake) || (aBlock.getMaterial() == Material.tnt) || (aBlock.getMaterial() == Material.sponge);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadUniversalSpade.mTextureIndex] : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Crowbar(2, 2000));
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer)
+ {
+ super.onToolCrafted(aStack, aPlayer);
+ aPlayer.triggerAchievement(AchievementList.buildSword);
+ try{GT_Mod.instance.achievements.issueAchievement(aPlayer, "unitool");}catch(Exception e){}
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE + " has been digged by " + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java b/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java
new file mode 100644
index 0000000000..4d9a4afdb7
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java
@@ -0,0 +1,119 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_WireCutter
+ extends GT_Tool
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.25F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return null;
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return null;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return (tTool != null) && (tTool.equals("cutter"));
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.WIRE_CUTTER : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " has cut the Cable for the Life Support Machine of " + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java
new file mode 100644
index 0000000000..2b68b6eaa2
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java
@@ -0,0 +1,144 @@
+package gregtech.common.tools;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.common.items.behaviors.Behaviour_Wrench;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityIronGolem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class GT_Tool_Wrench
+ extends GT_Tool
+{
+ public static final List<String> mEffectiveList = Arrays.asList(new String[] { EntityIronGolem.class.getName(), "EntityTowerGuardian" });
+
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ String tName = aEntity.getClass().getName();
+ tName = tName.substring(tName.lastIndexOf(".") + 1);
+ return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage;
+ }
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 3.0F;
+ }
+
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity)
+ {
+ return aOriginalHurtResistance * 2;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public String getCraftingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(100));
+ }
+
+ public String getEntityHitSound()
+ {
+ return null;
+ }
+
+ public String getBreakingSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(0));
+ }
+
+ public String getMiningSound()
+ {
+ return (String)GregTech_API.sSoundList.get(Integer.valueOf(100));
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public boolean isCrowbar()
+ {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData)
+ {
+ String tTool = aBlock.getHarvestTool(aMetaData);
+ return ((tTool != null) && (tTool.equals("wrench"))) || (aBlock.getMaterial() == Material.piston) || (aBlock == Blocks.hopper) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper);
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack)
+ {
+ return null;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? Textures.ItemIcons.WRENCH : null;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : null;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID)
+ {
+ aItem.addItemBehavior(aID, new Behaviour_Wrench(100));
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity)
+ {
+ return new ChatComponentText(EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + EnumChatFormatting.WHITE + " threw a Monkey Wrench into the Plans of " + EnumChatFormatting.RED + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java
new file mode 100644
index 0000000000..e3b565dc3b
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java
@@ -0,0 +1,67 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Wrench_HV
+ extends GT_Tool_Wrench_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 1600;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 12800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 3200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 2.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 4.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 4.0F;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_HV;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java
new file mode 100644
index 0000000000..5cd294e158
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java
@@ -0,0 +1,74 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Wrench_LV
+ extends GT_Tool_Wrench
+{
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, EntityPlayer aPlayer)
+ {
+ return aOriginalDamage;
+ }
+
+ public int getToolDamagePerBlockBreak()
+ {
+ return 50;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 800;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 200;
+ }
+
+ public int getBaseQuality()
+ {
+ return 0;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.0F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 1.0F;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_LV;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java
new file mode 100644
index 0000000000..212bc0cdf2
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java
@@ -0,0 +1,67 @@
+package gregtech.common.tools;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.ItemIcons;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import net.minecraft.item.ItemStack;
+
+public class GT_Tool_Wrench_MV
+ extends GT_Tool_Wrench_LV
+{
+ public int getToolDamagePerBlockBreak()
+ {
+ return 200;
+ }
+
+ public int getToolDamagePerDropConversion()
+ {
+ return 400;
+ }
+
+ public int getToolDamagePerContainerCraft()
+ {
+ return 3200;
+ }
+
+ public int getToolDamagePerEntityAttack()
+ {
+ return 800;
+ }
+
+ public int getBaseQuality()
+ {
+ return 1;
+ }
+
+ public float getBaseDamage()
+ {
+ return 1.5F;
+ }
+
+ public float getSpeedMultiplier()
+ {
+ return 3.0F;
+ }
+
+ public float getMaxDurabilityMultiplier()
+ {
+ return 2.0F;
+ }
+
+ public boolean canBlock()
+ {
+ return false;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] : Textures.ItemIcons.POWER_UNIT_MV;
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack)
+ {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+}
diff --git a/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java b/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java
new file mode 100644
index 0000000000..c44d52a9b3
--- /dev/null
+++ b/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java
@@ -0,0 +1,13 @@
+package gregtech.loaders.load;
+
+import gregtech.api.util.GT_Log;
+import java.io.PrintStream;
+
+public class GT_CoverBehaviorLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding Cover Behaviors");
+ }
+}
diff --git a/src/main/java/gregtech/loaders/load/GT_FuelLoader.java b/src/main/java/gregtech/loaders/load/GT_FuelLoader.java
new file mode 100644
index 0000000000..d5934ebb33
--- /dev/null
+++ b/src/main/java/gregtech/loaders/load/GT_FuelLoader.java
@@ -0,0 +1,35 @@
+package gregtech.loaders.load;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map_Fuel;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_FuelLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Initializing various Fuels.");
+ new GT_Recipe(new ItemStack(Items.lava_bucket), new ItemStack(Blocks.obsidian), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Electrum, 1L), 30, 2);
+
+ GT_Recipe.GT_Recipe_Map.sSmallNaquadahReactorFuels.addRecipe(true, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.NaquadahEnriched, 1L) }, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadah, 1L) }, null, null, null, 0, 0, 25000);
+ GT_Recipe.GT_Recipe_Map.sLargeNaquadahReactorFuels.addRecipe(true, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahEnriched, 1L) }, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1L) }, null, null, null, 0, 0, 200000);
+ GT_Recipe.GT_Recipe_Map.sFluidNaquadahReactorFuels.addRecipe(true, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NaquadahEnriched, 1L) }, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L) }, null, null, null, 0, 0, 200000);
+
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1L, 4), null, 4, 5);
+ GT_Values.RA.addFuel(new ItemStack(Items.experience_bottle, 1), null, 10, 5);
+ GT_Values.RA.addFuel(new ItemStack(Items.ghast_tear, 1), null, 50, 5);
+ GT_Values.RA.addFuel(new ItemStack(Blocks.beacon, 1), null, Materials.NetherStar.mFuelPower * 2, Materials.NetherStar.mFuelType);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/load/GT_ItemIterator.java b/src/main/java/gregtech/loaders/load/GT_ItemIterator.java
new file mode 100644
index 0000000000..169365a44b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/load/GT_ItemIterator.java
@@ -0,0 +1,302 @@
+package gregtech.loaders.load;
+
+import buildcraft.api.tools.IToolWrench;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.io.PrintStream;
+import java.util.Iterator;
+
+import mods.railcraft.api.core.items.IToolCrowbar;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemFood;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.RegistryNamespaced;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+public class GT_ItemIterator
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Scanning for certain kinds of compatible Machineblocks.");
+ ItemStack tStack2;
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2 })))
+ {
+ GT_ModHandler.addPulverisationRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L), null, 0, false);
+ GT_ModHandler.addSmeltingRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L));
+ }
+ if (null != (tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack2 = GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Bronze, 1L), tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2 })))
+ {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingRawMachineTier00, tStack);
+ GT_ModHandler.addPulverisationRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L), null, 0, false);
+ GT_ModHandler.addSmeltingRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L));
+ }
+ ItemStack tStack3;
+ if (null != (tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), tStack3 = new ItemStack(Blocks.glass, 1, 0), tStack2, tStack3, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), tStack3, tStack2, tStack3, tStack2 }))) {
+ GT_ModHandler.addPulverisationRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L), 0, false);
+ }
+ if (null != (tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), tStack3 = new ItemStack(Blocks.glass, 1, 0), tStack2, tStack3, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), tStack3, tStack2, tStack3, tStack2 }))) {
+ GT_ModHandler.addPulverisationRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L), 0, false);
+ }
+ GT_Log.out.println("GT_Mod: Registering various Tools to be usable on GregTech Machines");
+ GregTech_API.registerScrewdriver(GT_ModHandler.getRecipeOutput(new ItemStack[] { null, new ItemStack(Items.iron_ingot, 1), null, new ItemStack(Items.stick, 1) }));
+ GregTech_API.registerScrewdriver(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Items.iron_ingot, 1), null, null, null, new ItemStack(Items.stick, 1) }));
+
+ GT_Log.out.println("GT_Mod: Adding Food Recipes to the Automatic Canning Machine. (also during the following Item Iteration)");
+ GT_Values.RA.addCannerRecipe(new ItemStack(Items.rotten_flesh, 1, 32767), ItemList.IC2_Food_Can_Empty.get(4L, new Object[0]), ItemList.IC2_Food_Can_Spoiled.get(4L, new Object[0]), null, 200, 1);
+ GT_Values.RA.addCannerRecipe(new ItemStack(Items.spider_eye, 1, 32767), ItemList.IC2_Food_Can_Empty.get(2L, new Object[0]), ItemList.IC2_Food_Can_Spoiled.get(2L, new Object[0]), null, 100, 1);
+ GT_Values.RA.addCannerRecipe(ItemList.Food_Poisonous_Potato.get(1L, new Object[0]), ItemList.IC2_Food_Can_Empty.get(2L, new Object[0]), ItemList.IC2_Food_Can_Spoiled.get(2L, new Object[0]), null, 100, 1);
+ GT_Values.RA.addCannerRecipe(new ItemStack(Items.cake, 1, 32767), ItemList.IC2_Food_Can_Empty.get(12L, new Object[0]), ItemList.IC2_Food_Can_Filled.get(12L, new Object[0]), null, 600, 1);
+ GT_Values.RA.addCannerRecipe(new ItemStack(Items.mushroom_stew, 1, 32767), ItemList.IC2_Food_Can_Empty.get(6L, new Object[0]), ItemList.IC2_Food_Can_Filled.get(6L, new Object[0]), new ItemStack(Items.bowl, 1), 300, 1);
+
+ GT_Log.out.println("GT_Mod: Scanning ItemList.");
+
+ Iterator tIterator = Item.itemRegistry.iterator();
+ while (tIterator.hasNext())
+ {
+ Object tObject;
+ if (((tObject = tIterator.next()) != null) && ((tObject instanceof Item)) && (!(tObject instanceof GT_Generic_Item)))
+ {
+ Item tItem = (Item)tObject;
+ String tName;
+ if ((tName = tItem.getUnlocalizedName()) != null)
+ {
+ try
+ {
+ if ((tItem instanceof IToolCrowbar)) {
+ if ((!tItem.isDamageable()) && (!GT_ModHandler.isElectricItem(new ItemStack(tItem, 1, 0))))
+ {
+ if ((GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "infiniteDurabilityRCCrowbars", false)) &&
+ (GT_ModHandler.removeRecipeByOutput(new ItemStack(tItem, 1, 32767)))) {
+ GT_Log.out.println("GT_Mod: Removed infinite RC Crowbar: " + tName);
+ }
+ }
+ else if (GregTech_API.registerCrowbar(new ItemStack(tItem, 1, 32767))) {
+ GT_Log.out.println("GT_Mod: Registered valid RC Crowbar: " + tName);
+ }
+ }
+ }
+ catch (Throwable e) {}
+ try
+ {
+ if ((tItem instanceof IToolWrench)) {
+ if ((!tItem.isDamageable()) && (!GT_ModHandler.isElectricItem(new ItemStack(tItem, 1, 0))))
+ {
+ if ((GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "infiniteDurabilityBCWrenches", false)) &&
+ (GT_ModHandler.removeRecipeByOutput(new ItemStack(tItem, 1, 32767)))) {
+ GT_Log.out.println("GT_Mod: Removed infinite BC Wrench: " + tName);
+ }
+ }
+ else if (GregTech_API.registerWrench(new ItemStack(tItem, 1, 32767))) {
+ GT_Log.out.println("GT_Mod: Registered valid BC Wrench: " + tName);
+ }
+ }
+ }
+ catch (Throwable e) {}
+ Block tBlock = GT_Utility.getBlockFromStack(new ItemStack(tItem, 1, 0));
+ if (tBlock != null)
+ {
+ if (tName.endsWith("beehives"))
+ {
+ tBlock.setHarvestLevel("scoop", 0);
+ gregtech.common.tools.GT_Tool_Scoop.sBeeHiveMaterial = tBlock.getMaterial();
+ }
+ if (OrePrefixes.stone.mDefaultStackSize < tItem.getItemStackLimit(new ItemStack(tItem, 1, 0))) {
+ try
+ {
+ if ((tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.stone)) || (tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.netherrack)) || (tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.end_stone))) {
+ tItem.setMaxStackSize(OrePrefixes.stone.mDefaultStackSize);
+ }
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ if (((tItem instanceof ItemFood)) && (tItem != ItemList.IC2_Food_Can_Filled.getItem()) && (tItem != ItemList.IC2_Food_Can_Spoiled.getItem()))
+ {
+ int tFoodValue = ((ItemFood)tItem).func_150905_g(new ItemStack(tItem, 1, 0));
+ if (tFoodValue > 0) {
+ GT_Values.RA.addCannerRecipe(new ItemStack(tItem, 1, 32767), ItemList.IC2_Food_Can_Empty.get(tFoodValue, new Object[0]), ItemList.IC2_Food_Can_Filled.get(tFoodValue, new Object[0]), GT_Utility.getContainerItem(new ItemStack(tItem, 1, 0), true), tFoodValue * 100, 1);
+ }
+ }
+ if ((tItem instanceof IFluidContainerItem)) {
+ GT_OreDictUnificator.addToBlacklist(new ItemStack(tItem, 1, 32767));
+ }
+ if ((tName.equals("item.ItemSensorLocationCard")) || (tName.equals("item.ItemEnergySensorLocationCard")) || (tName.equals("item.ItemEnergyArrayLocationCard")) || (tName.equals("item.ItemTextCard"))) {
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(tItem, 1, 32767), null, ItemList.Circuit_Basic.get(2L, new Object[0]), 200, 32);
+ }
+ if (tName.equals("item.ItemTimeCard")) {
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(tItem, 1, 32767), null, ItemList.Circuit_Basic.get(1L, new Object[0]), 100, 32);
+ }
+ if (tName.equals("tile.ArsMagica:ore_vinteum")) {
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Vinteum, new ItemStack(tItem, 1, 0));
+ }
+ if (tName.equals("item.ArsMagica:purified_vinteum")) {
+ GT_Values.RA.addFuel(new ItemStack(tItem, 1, 0), null, 256, 5);
+ }
+ if ((tName.equals("item.fieryBlood")) || (tName.equals("item.fieryTears"))) {
+ GT_Values.RA.addFuel(new ItemStack(tItem, 1, 0), null, 2048, 5);
+ }
+ if (tName.equals("tile.TFRoots"))
+ {
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(tItem, 1, 0), new ItemStack(Items.stick, 2), new ItemStack(Items.stick, 1), 30);
+ GT_ModHandler.addSawmillRecipe(new ItemStack(tItem, 1, 0), new ItemStack(Items.stick, 4), new ItemStack(Items.stick, 2));
+ GT_Values.RA.addFuel(new ItemStack(tItem, 1, 1), new ItemStack(Items.stick, 4), 32, 5);
+ }
+ if (tName.equals("item.tconstruct.manual")) {
+ GT_OreDictUnificator.registerOre("bookTinkersManual", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ArsMagica:spell_parchment")) {
+ GT_OreDictUnificator.registerOre("paperArsSpellParchment", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ArsMagica:spell_recipe")) {
+ GT_OreDictUnificator.registerOre("paperArsSpellRecipe", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ArsMagica:spell_book")) {
+ GT_OreDictUnificator.registerOre("bookArsSpells", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.myst.page")) {
+ GT_OreDictUnificator.registerOre("paperMystcraft", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.myst.agebook")) {
+ GT_OreDictUnificator.registerOre("bookMystcraftAge", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.myst.linkbook")) {
+ GT_OreDictUnificator.registerOre("bookMystcraftLink", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.myst.notebook")) {
+ GT_OreDictUnificator.registerOre("bookNotes", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.itemManuelBook")) {
+ GT_OreDictUnificator.registerOre("bookWritten", new ItemStack(tItem, 1, 0));
+ }
+ if (tName.equals("item.blueprintItem")) {
+ GT_OreDictUnificator.registerOre("paperBlueprint", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ccprintout"))
+ {
+ GT_OreDictUnificator.registerOre("paperWritten", new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre("paperWritten", new ItemStack(tItem, 1, 1));
+ GT_OreDictUnificator.registerOre("bookWritten", new ItemStack(tItem, 1, 2));
+ }
+ if (tName.equals("item.blueprintItem")) {
+ GT_OreDictUnificator.registerOre("paperBlueprint", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.wirelessmap")) {
+ GT_OreDictUnificator.registerOre("paperMap", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ItemResearchNotes")) {
+ GT_OreDictUnificator.registerOre("paperResearch", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ItemThaumonomicon")) {
+ GT_OreDictUnificator.registerOre("bookThaumonomicon", new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("item.ligniteCoal")) {
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Lignite, new ItemStack(tItem, 1, 0));
+ }
+ if ((tName.equals("tile.extrabiomes.redrock")) || (tName.equals("tile.bop.redRocks")))
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 2));
+ }
+ if (tName.equals("tile.rpstone"))
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, new ItemStack(tItem, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 4));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 5));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 6));
+ }
+ if ((tName.equals("tile.sedimentaryStone")) || ((tName.equals("tile.igneousStone")) || (tName.equals("tile.igneousStoneBrick")) || (tName.equals("tile.igneousCobblestone"))))
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(tItem, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Rhyolite, new ItemStack(tItem, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Andesite, new ItemStack(tItem, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Gabbro, new ItemStack(tItem, 1, 4));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 5));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Komatiite, new ItemStack(tItem, 1, 6));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Dacite, new ItemStack(tItem, 1, 7));
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(tItem, 1, 8));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(tItem, 1, 9));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Rhyolite, new ItemStack(tItem, 1, 10));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Andesite, new ItemStack(tItem, 1, 11));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Gabbro, new ItemStack(tItem, 1, 12));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, new ItemStack(tItem, 1, 13));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Komatiite, new ItemStack(tItem, 1, 14));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Dacite, new ItemStack(tItem, 1, 15));
+ }
+ if ((tName.equals("tile.metamorphicStone")) || (tName.equals("tile.metamorphicStoneBrick")) || (tName.equals("tile.metamorphicCobblestone")))
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Gneiss, new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Eclogite, new ItemStack(tItem, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, new ItemStack(tItem, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Quartzite, new ItemStack(tItem, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Blueschist, new ItemStack(tItem, 1, 4));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Greenschist, new ItemStack(tItem, 1, 5));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Soapstone, new ItemStack(tItem, 1, 6));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Migmatite, new ItemStack(tItem, 1, 7));
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Gneiss, new ItemStack(tItem, 1, 8));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Eclogite, new ItemStack(tItem, 1, 9));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, new ItemStack(tItem, 1, 10));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Quartzite, new ItemStack(tItem, 1, 11));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Blueschist, new ItemStack(tItem, 1, 12));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Greenschist, new ItemStack(tItem, 1, 13));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Soapstone, new ItemStack(tItem, 1, 14));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Migmatite, new ItemStack(tItem, 1, 15));
+ }
+ if (tName.equals("tile.blockCosmeticSolid"))
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 0));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 1));
+ }
+ if (tName.equals("tile.enderchest")) {
+ GT_OreDictUnificator.registerOre(OreDictNames.enderChest, new ItemStack(tItem, 1, 32767));
+ }
+ if (tName.equals("tile.autoWorkbenchBlock")) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWorkBench, new ItemStack(tItem, 1, 0));
+ }
+ if (tName.equals("tile.pumpBlock"))
+ {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingPump, new ItemStack(tItem, 1, 0));
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "BCPump", false)) {
+ GT_ModHandler.removeRecipeByOutput(new ItemStack(tItem, 1, 0));
+ }
+ }
+ if (tName.equals("tile.tankBlock")) {
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingTank, new ItemStack(tItem, 1, 0));
+ }
+ if (tName.equals("item.drawplateDiamond")) {
+ GT_OreDictUnificator.registerOre(ToolDictNames.craftingToolDrawplate, new ItemStack(tItem, 1, 32767));
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java b/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java
new file mode 100644
index 0000000000..0d22d1b36a
--- /dev/null
+++ b/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java
@@ -0,0 +1,160 @@
+package gregtech.loaders.load;
+
+import gregtech.GT_Mod;
+import gregtech.api.util.GT_Log;
+import gregtech.common.GT_Proxy;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_SonictronLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Loading Sonictron Sounds");
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.iron_block, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.harp");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gold_block, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.pling");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.bd");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.log, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.bassattack");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.planks, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.bass");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.hat");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sand, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("note.snare");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(25));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.record_cat, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("streaming.");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(12));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.tnt, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.explode");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(3));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.fire, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("fire.fire");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.flint_and_steel, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("fire.ignite");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lava, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("liquid.lavapop");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.water, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("liquid.water");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.water_bucket, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("liquid.splash");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.lava_bucket, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.fizz");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.portal, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("portal.portal");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("portal.travel");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal_frame, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("portal.trigger");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass_pane, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.glass");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_pearl, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.orb");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_eye, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.levelup");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone_button, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.click");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.cobblestone, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("damage.fallbig");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.dirt, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("damage.fallsmall");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_sword, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("damage.hurtflesh");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.diamond_sword, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.hurt");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bow, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.bow");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.arrow, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.drr");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.fishing_rod, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.bowhit");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_shovel, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.break");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bucket, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.breath");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.potionitem, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.drink");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.glass_bottle, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.burp");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.ender_chest == null ? Blocks.obsidian : Blocks.ender_chest, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.chestopen");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.chest, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.chestclosed");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_door, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.door_open");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.wooden_door, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.door_close");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.porkchop, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("random.eat");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.wool, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("step.cloth");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.grass, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("step.grass");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gravel, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("step.gravel");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.snow, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("step.snow");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.piston, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("tile.piston.out");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sticky_piston, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("tile.piston.in");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.mossy_cobblestone, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("ambient.cave.cave");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lapis_block, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("ambient.weather.rain");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.diamond_block, 1));
+ GT_Mod.gregtechproxy.mSoundNames.add("ambient.weather.thunder");
+ GT_Mod.gregtechproxy.mSoundCounts.add(Integer.valueOf(1));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GT_Achievements.java b/src/main/java/gregtech/loaders/misc/GT_Achievements.java
new file mode 100644
index 0000000000..73c29a3237
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GT_Achievements.java
@@ -0,0 +1,500 @@
+package gregtech.loaders.misc;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.ThaumcraftApiHelper;
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
+import cpw.mods.fml.common.gameevent.PlayerEvent.ItemSmeltedEvent;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.blocks.GT_Block_Casings1;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import gregtech.common.items.GT_MetaGenerated_Item_01;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.Achievement;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.stats.StatBase;
+import net.minecraftforge.common.AchievementPage;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_Achievements {
+
+ public HashMap<String, Achievement> achievementList;
+ public HashMap<String, Boolean> issuedAchievements;
+public int adjX = 5;
+public int adjY = 9;
+
+ public GT_Achievements() {
+ this.achievementList = new HashMap();
+ this.issuedAchievements = new HashMap();
+ for (int i = 0; i < oreList.size(); i++) {
+ if (GT_Values.D1 && this.achievementList.get(oreList.get(i).name()) == null) {
+ GT_Log.out.println("achievement." + oreList.get(i).name() + "=Find " + oreList.get(i).name() + " Ore");
+ GT_Log.out.println("achievement." + oreList.get(i).name() + ".desc=Height: " + (oreStats.get(i)[0]) + "-" + (oreStats.get(i)[1]) + ", Chance: "+ (oreStats.get(i)[2]) + ", " + (oreStats.get(i)[3] == 1 ? "Overworld" : "") + "/" + (oreStats.get(i)[4] == 1 ? "Nether" : "") + "/"+ (oreStats.get(i)[5] == 1 ? "End" : ""));
+ }
+ registerOreAchievement(oreList.get(i));
+ }
+ registerAchievement("flintpick", 0, 0, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(2, 1, Materials.Flint, Materials.Wood, null), "", false);
+ registerAchievement("crops", -4, 0, GT_ModHandler.getIC2Item("crop", 1L), "flintpick", false);
+ registerAchievement("havestlead", -4, 2, ItemList.Crop_Drop_Plumbilia.get(1, new Object[] {}), "crops", false);
+ registerAchievement("havestcopper", -2, 1, ItemList.Crop_Drop_Coppon.get(1, new Object[] {}), "crops", false);
+ registerAchievement("havesttin", -2, -1, ItemList.Crop_Drop_Tine.get(1, new Object[] {}), "crops", false);
+ registerAchievement("havestoil", -4, -4, ItemList.Crop_Drop_OilBerry.get(1, new Object[] {}), "crops", false);
+ registerAchievement("havestiron", -2, -3, ItemList.Crop_Drop_Ferru.get(1, new Object[] {}), "crops", false);
+ registerAchievement("havestgold", -2, -6, ItemList.Crop_Drop_Aurelia.get(1, new Object[] {}), "havestiron", false);
+ registerAchievement("havestsilver", -4, -5, ItemList.Crop_Drop_Argentia.get(1, new Object[] {}), "havestiron", false);
+ registerAchievement("havestemeralds", -2, -8, ItemList.Crop_Drop_BobsYerUncleRanks.get(1, new Object[] {}), "havestgold", false);
+
+ registerAchievement("tools", 0, 4, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(12, 1, Materials.Iron, Materials.Wood, null), "flintpick", false);
+ registerAchievement("driltime", 2, 4, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(100, 1, Materials.BlueSteel, Materials.StainlessSteel, null),"tools", false);
+ registerAchievement("brrrr", 2, 6, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(110, 1, Materials.BlueSteel, Materials.StainlessSteel, null),"driltime", false);
+ registerAchievement("highpowerdrill", 3, 5,GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(104, 1, Materials.TungstenSteel, Materials.TungstenSteel, null), "driltime", false);
+ registerAchievement("hammertime", 3, 7,GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(130, 1, Materials.TungstenSteel, Materials.TungstenSteel, null), "highpowerdrill", false);
+ registerAchievement("repair", 4, 5, ItemList.Machine_HV_Disassembler.get(1, new Object[] {}), "highpowerdrill", false);
+
+ registerAchievement("unitool", -2, 4, GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(32, 1, Materials.Steel, Materials.Iron, null), "tools", false);
+ registerAchievement("recycling", -4, 4, ItemList.Machine_LV_ArcFurnace.get(1, new Object[] {}), "unitool", false);
+
+ registerAchievement("crushed", 0, 6, GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Tin, 1L), "tools", false);
+ registerAchievement("cleandust", 0, 10, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), "crushed", false);
+ registerAchievement("washing", -2, 6, GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Iron, 1L), "crushed", false);
+ registerAchievement("spinit", -4, 6, GT_OreDictUnificator.get(OrePrefixes.crushedCentrifuged, Materials.Redstone, 1L), "crushed", false);
+ registerAchievement("newfuel", -4, 8, ItemList.ThoriumCell_4.get(1, new Object[] {}), "spinit", false);
+ registerAchievement("newmetal", -4, 10, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 1L), "newfuel", false);
+ registerAchievement("reflect", -2, 9, ItemList.Neutron_Reflector.get(1, new Object[] {}), "newfuel", false);
+
+ registerAchievement("bronze", 2, 0, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 1L), "flintpick", false);
+ registerAchievement("simplyeco", 2, 2, ItemList.Machine_Bronze_Boiler_Solar.get(1, new Object[] {}), "bronze", false);
+ registerAchievement("firststeam", 2, -2, ItemList.Machine_Bronze_Boiler.get(1, new Object[] {}), "bronze", false);
+ registerAchievement("alloysmelter", 2, -4, ItemList.Machine_Bronze_AlloySmelter.get(1, new Object[] {}), "firststeam", false);
+ registerAchievement("macerator", 0, -2, ItemList.Machine_Bronze_Macerator.get(1, new Object[] {}), "firststeam", false);
+ registerAchievement("extract", 0, -4, ItemList.Machine_Bronze_Extractor.get(1, new Object[] {}), "alloysmelter", false);
+
+ registerAchievement("smallparts", 0, -8, ItemList.Circuit_Primitive.get(1, new Object[] {}), "extract", false);
+ registerAchievement("bettercircuits", 0, -10, ItemList.Circuit_Good.get(1, new Object[] {}), "smallparts", false);
+ registerAchievement("stepforward", -2, -10, ItemList.Circuit_Advanced.get(1, new Object[] {}), "bettercircuits", false);
+ registerAchievement("energyflow", -4, -10, ItemList.Circuit_Master.get(1, new Object[] {}), "stepforward", false);
+ registerAchievement("orbs", -6, -10, ItemList.Energy_LapotronicOrb.get(1, new Object[] {}), "energyflow", false);
+ registerAchievement("thatspower", -8, -10, ItemList.Energy_LapotronicOrb2.get(1, new Object[] {}), "orbs", false);
+ registerAchievement("datasaving", -2, -12, ItemList.Tool_DataOrb.get(1, new Object[] {}), "stepforward", false);
+ registerAchievement("superbuffer", 0, -12, ItemList.Automation_SuperBuffer_LV.get(1, new Object[] {}), "datasaving", false);
+ registerAchievement("newstorage", -2, -14, ItemList.Quantum_Chest_HV.get(1, new Object[] {}), "superbuffer", false);
+ registerAchievement("whereistheocean", 2, -14, ItemList.Quantum_Tank_IV.get(1, new Object[] {}), "superbuffer", false);
+ registerAchievement("luck", 2, -6, ItemList.ZPM.get(1, new Object[] {}), "", false);
+
+ registerAchievement("steel", 4, 0, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), "bronze", false);
+ registerAchievement("highpressure", 4, 2, ItemList.Machine_Steel_Boiler.get(1, new Object[] {}), "steel", false);
+ registerAchievement("extremepressure", 4, 4, ItemList.Machine_Multi_LargeBoiler_Steel.get(1, new Object[] {}), "highpressure", false);
+ registerAchievement("cheapermac", 6, 1, ItemList.Machine_LV_Hammer.get(1, new Object[] {}), "steel", false);
+ registerAchievement("complexalloys", 6, 3, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.BlueSteel, 1L), "cheapermac", false);
+
+ registerAchievement("magneticiron", 4, -2, GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L), "steel", false);
+ registerAchievement("lvmotor", 4, -6, ItemList.Electric_Motor_LV.get(1, new Object[] {}), "magneticiron", false);
+ registerAchievement("pumpcover", 2, -8, ItemList.Electric_Pump_LV.get(1, new Object[] {}), "lvmotor", false);
+ registerAchievement("closeit", 2, -10, ItemList.Cover_Shutter.get(1, new Object[] {}), "pumpcover", false);
+ registerAchievement("slurp", 2, -12, ItemList.Pump_HV.get(1, new Object[] {}), "closeit", false);
+ registerAchievement("transport", 4, -10, ItemList.Conveyor_Module_LV.get(1, new Object[] {}), "lvmotor", false);
+ registerAchievement("manipulation", 4, -12, ItemList.Cover_Controller.get(1, new Object[] {}), "transport", false);
+ registerAchievement("buffer", 4, -14, ItemList.Automation_ChestBuffer_LV.get(1, new Object[] {}), "manipulation", false);
+ registerAchievement("complexmachines", 6, -9, ItemList.Robot_Arm_LV.get(1, new Object[] {}), "lvmotor", false);
+ registerAchievement("avengers", 8, -11, ItemList.Machine_LV_Assembler.get(1, new Object[] {}), "complexmachines", false);
+ registerAchievement("filterregulate", 10, -11, ItemList.Component_Filter.get(1, new Object[] {}), "avengers", false);
+
+ registerAchievement("steampower", 6, -6, ItemList.Generator_Steam_Turbine_LV.get(1, new Object[] {}), "lvmotor", false);
+ registerAchievement("batterys", 6, -4, ItemList.Battery_Buffer_2by2_MV.get(1, new Object[] {}), "steampower", false);
+ registerAchievement("badweather", 6, -8, ItemList.Casing_FireHazard.get(1, new Object[] {}), "steampower", false);
+ registerAchievement("electricproblems", 7, -7, ItemList.Casing_ExplosionHazard.get(1, new Object[] {}), "steampower", false);
+ registerAchievement("ebf", 8, -6, ItemList.Machine_Multi_BlastFurnace.get(1, new Object[] {}), "steampower", false);
+ registerAchievement("energyhatch", 12, -6, ItemList.Hatch_Energy_LV.get(1, new Object[] {}), "ebf", false);
+
+ registerAchievement("gtaluminium", 8, 0, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Aluminium, 1L), "steel", false);
+ registerAchievement("highpowersmelt", 8, 2, ItemList.Machine_Multi_Furnace.get(1, new Object[] {}), "gtaluminium", false);
+ registerAchievement("oilplant", 8, 4, ItemList.Distillation_Tower.get(1, new Object[] {}), "highpowersmelt", false);
+ registerAchievement("factory", 8, 6, ItemList.Processing_Array.get(1, new Object[] {}), "oilplant", false);
+ registerAchievement("upgradeebf", 8, -2, ItemList.Hatch_Energy_MV.get(1, new Object[] {}), "gtaluminium", false);
+ registerAchievement("maintainance", 10, -2, ItemList.Hatch_Maintenance.get(1, new Object[] {}), "upgradeebf", false);
+
+ registerAchievement("titan", 10, 0, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L), "gtaluminium", false);
+ registerAchievement("magic", 10, 4, ItemList.MagicEnergyConverter_LV.get(1, new Object[] {}), "titan", false);
+ registerAchievement("highmage", 10, 6, ItemList.MagicEnergyAbsorber_HV.get(1, new Object[] {}), "magic", false);
+ registerAchievement("artificaldia", 11, 2, ItemList.IC2_Industrial_Diamond.get(1, new Object[] {}), "titan", false);
+ registerAchievement("muchsteam", 12, 1, ItemList.LargeSteamTurbine.get(1, new Object[] {}), "titan", false);
+ registerAchievement("efficientsteam", 12, 3, ItemList.LargeSteamTurbine.get(1, new Object[] {}), "muchsteam", false);
+
+ registerAchievement("upgrade", 14, 0, ItemList.Casing_Coil_Kanthal.get(1, new Object[] {}), "titan", false);
+ registerAchievement("tungsten", 16, 0, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tungsten, 1L), "upgrade", false);
+ registerAchievement("hightech", 15, -1, ItemList.Field_Generator_LV.get(1, new Object[] {}), "tungsten", false);
+ registerAchievement("amplifier", 17, -3, ItemList.Machine_LV_Amplifab.get(1, new Object[] {}), "hightech", false);
+ registerAchievement("scanning", 13, -2, ItemList.Machine_HV_Scanner.get(1, new Object[] {}), "hightech", false);
+ registerAchievement("alienpower", 14, -4, ItemList.Generator_Naquadah_Mark_I.get(1, new Object[] {}), "hightech", false);
+ registerAchievement("universal", 15, -6, ItemList.Machine_LV_Massfab.get(1, new Object[] {}), "hightech", false);
+ registerAchievement("replication", 17, -6, ItemList.Machine_LV_Replicator.get(1, new Object[] {}), "universal", false);
+
+ registerAchievement("upgrade2", 16, 6, ItemList.Casing_Coil_Nichrome.get(1, new Object[] {}), "tungsten", false);
+ registerAchievement("tungstensteel", 14, 6, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L), "upgrade2", false);
+ registerAchievement("conducting", 12, 6, ItemList.Casing_Coil_Superconductor.get(1, new Object[] {}), "tungstensteel", false);
+ registerAchievement("fusion", 14, 8, ItemList.FusionComputer_LuV.get(1, new Object[] {}), "tungstensteel", false);
+ registerAchievement("higherefficency", 14, 10, ItemList.Generator_Plasma_IV.get(1, new Object[] {}), "fusion", false);
+ registerAchievement("advancing", 12, 8, ItemList.FusionComputer_ZPMV.get(1, new Object[] {}), "fusion", false);
+ registerAchievement("tothelimit", 12, 10, ItemList.Generator_Plasma_LuV.get(1, new Object[] {}), "advancing", false);
+ registerAchievement("denseaspossible", 10, 10, ItemList.FusionComputer_UV.get(1, new Object[] {}), "tothelimit", false);
+ registerAchievement("fullefficiency", 10, 12, ItemList.Generator_Plasma_ZPMV.get(1, new Object[] {}), "denseaspossible", false);
+ registerAchievement("whatnow", 8, 10, ItemList.ZPM2.get(1, new Object[] {}), "denseaspossible", false);
+
+ if(GT_Mod.gregtechproxy.mAchievements){
+ AchievementPage.registerAchievementPage(new AchievementPage("GregTech 5", (Achievement[]) this.achievementList.values().toArray(
+ new Achievement[this.achievementList.size()])));
+ MinecraftForge.EVENT_BUS.register(this);
+ FMLCommonHandler.instance().bus().register(this);}
+ }
+
+ public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, Achievement requirement, boolean special) {
+ if(!GT_Mod.gregtechproxy.mAchievements){return null;};
+ Achievement achievement = new Achievement(textId, textId, this.adjX + x, this.adjY+y, icon, requirement);
+ if (special) {
+ achievement.setSpecial();
+ }
+ achievement.registerStat();
+ if (GT_Values.D2) {
+ GT_Log.out.println("achievement." + textId + "=");
+ GT_Log.out.println("achievement." + textId + ".desc=");
+ }
+ this.achievementList.put(textId, achievement);
+ return achievement;
+ }
+
+ public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, String requirement, boolean special) {
+ if(!GT_Mod.gregtechproxy.mAchievements){return null;};
+ Achievement achievement = new Achievement(textId, textId, this.adjX + x, this.adjY+y, icon, getAchievement(requirement));
+ if (special) {
+ achievement.setSpecial();
+ }
+ achievement.registerStat();
+ if (GT_Values.D2) {
+ GT_Log.out.println("achievement." + textId + "=");
+ GT_Log.out.println("achievement." + textId + ".desc=");
+ }
+ this.achievementList.put(textId, achievement);
+ return achievement;
+ }
+
+ public static List<Materials> oreList = new ArrayList<Materials>();
+ public static List<Integer[]> oreStats = new ArrayList<Integer[]>();
+
+ public static void registerOre(Materials aMaterial, int min, int max, int chance, boolean overworld, boolean nether, boolean end) {
+ if (aMaterial != Materials._NULL) {
+ oreList.add(aMaterial);
+ }
+ oreStats.add(new Integer[] { min, max, chance, overworld ? 1 : 0, nether ? 1 : 0, end ? 1 : 0 });
+ }
+
+ public static int oreReg = -1;
+
+ public Achievement registerOreAchievement(Materials aMaterial) {
+ if (this.achievementList.get(aMaterial.name()) == null) {
+ oreReg++;
+ return registerAchievement(aMaterial.name(), -(6 + oreReg % 5), ((oreReg) / 5) - 8, new ItemStack(GregTech_API.sBlockOres1, 1,
+ aMaterial.mMetaItemSubID), AchievementList.openInventory, false);
+ }
+ return null;
+ }
+
+ public void issueAchievement(EntityPlayer entityplayer, String textId) {
+ if(entityplayer==null||!GT_Mod.gregtechproxy.mAchievements){
+ return;
+ }
+// if (this.achievementList.containsKey(textId)) {
+// if(this.issuedAchievements.containsKey((entityplayer.getDisplayName()+textId))){
+// return;
+// }else{
+// this.issuedAchievements.put((entityplayer.getDisplayName()+textId), true);
+ entityplayer.triggerAchievement((StatBase) this.achievementList.get(textId));
+// }
+// }
+ }
+
+ public Achievement getAchievement(String textId) {
+ if (this.achievementList.containsKey(textId)) {
+ return (Achievement) this.achievementList.get(textId);
+ }
+ return null;
+ }
+
+ public void issueAchivementHatch(EntityPlayer player, ItemStack stack){
+ if (player == null||stack==null) {
+ return;
+ }
+ ItemData data = GT_OreDictUnificator.getItemData(stack);
+
+ if (data != null) {
+ if (data.mPrefix == OrePrefixes.ingot) {
+ if(data.mMaterial.mMaterial==Materials.Aluminium){
+ issueAchievement(player, "gtaluminium");
+ }else if(data.mMaterial.mMaterial==Materials.Titanium){
+ issueAchievement(player, "titan");
+ }else if(data.mMaterial.mMaterial==Materials.BlueSteel){
+ issueAchievement(player, "complexalloys");
+ }else if(data.mMaterial.mMaterial==Materials.Tungsten){
+ issueAchievement(player, "tungsten");
+ }else if(data.mMaterial.mMaterial==Materials.TungstenSteel){
+ issueAchievement(player, "tungstensteel");
+ }
+
+
+ }}
+ if(stack.getUnlocalizedName().equals("ic2.itemPartIndustrialDiamond")){
+ issueAchievement(player, "artificaldia");
+ }
+ }
+
+ public void issueAchivementHatchFluid(EntityPlayer player, FluidStack fluid){
+ if (player == null||fluid==null) {
+ return;
+ }
+ if(fluid.getFluid().getUnlocalizedName().equals("fluid.plasma.helium")){
+ issueAchievement(player, "fusion");
+ }else if(fluid.getFluid().getUnlocalizedName().equals("fluid.molten.europium")){
+ issueAchievement(player, "advancing");
+ }else if(fluid.getFluid().getUnlocalizedName().equals("fluid.molten.americium")){
+ issueAchievement(player, "tothelimit");
+ }else if(fluid.getFluid().getUnlocalizedName().equals("fluid.molten.neutronium")){
+ issueAchievement(player, "denseaspossible");
+ }else if(fluid.getFluid().getUnlocalizedName().equals("fluid.plasma.nitrogen")){
+ issueAchievement(player, "higherefficency");
+ }
+ }
+
+ @SubscribeEvent
+ public void onCrafting(ItemCraftedEvent event) {
+ EntityPlayer player = event.player;
+ ItemStack stack = event.crafting;
+ if (player == null||stack==null) {
+ return;
+ }
+ ItemData data = GT_OreDictUnificator.getItemData(stack);
+ if (data != null) {
+ if (data.mPrefix == OrePrefixes.dust&&data.mMaterial.mMaterial == Materials.Bronze) {
+ issueAchievement(player, "bronze");
+ }else if(data.mPrefix == OrePrefixes.circuit&&data.mMaterial.mMaterial == Materials.Advanced){
+ issueAchievement(player, "stepforward");
+ }
+ }
+ if(stack.getUnlocalizedName().startsWith("gt.metaitem.")){
+ if(stack.getUnlocalizedName().equals("gt.metaitem.01.2300")){
+ issueAchievement(player, "bronze");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32700")){
+ issueAchievement(player, "smallparts");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.23354")){
+ issueAchievement(player, "magneticiron");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32600")){
+ issueAchievement(player, "lvmotor");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32610")){
+ issueAchievement(player, "pumpcover");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32630")){
+ issueAchievement(player, "transport");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32650")){
+ issueAchievement(player, "complexmachines");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32670")){
+ issueAchievement(player, "hightech");
+ }
+ }else if(stack.getUnlocalizedName().equals("ic2.blockCrop")){
+ issueAchievement(player, "crops");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.")){
+ if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.arcfurnace.tier.")){
+ issueAchievement(player, "recycling");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.disassembler.tier.")){
+ issueAchievement(player, "repair");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.boiler.solar")){
+ issueAchievement(player, "simplyeco");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.boiler.bronze")){
+ issueAchievement(player, "firststeam");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.boiler.steel")){
+ issueAchievement(player, "highpressure");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.bronzemachine.macerator")){
+ issueAchievement(player, "macerator");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.bronzemachine.alloysmelter")){
+ issueAchievement(player, "alloysmelter");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.bronzemachine.extractor")){
+ issueAchievement(player, "extract");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.disassembler.tier.")){
+ issueAchievement(player, "repair");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.automation.superbuffer.tier.")){
+ issueAchievement(player, "superbuffer");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.quantum.tank.tier.")){
+ issueAchievement(player, "whereistheocean");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.disassembler.tier.")){
+ issueAchievement(player, "repair");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.quantum.chest.tier.")){
+ issueAchievement(player, "newstorage");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.hammer.tier.")){
+ issueAchievement(player, "cheapermac");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.automation.chestbuffer.tier.")){
+ issueAchievement(player, "buffer");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicgenerator.steamturbine.tier.")){
+ issueAchievement(player, "steampower");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.pump.tier.")){
+ issueAchievement(player, "slurp");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.assembler.tier.")){
+ issueAchievement(player, "avengers");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.multimachine.blastfurnace")){
+ issueAchievement(player, "ebf");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.batterybuffer.")){
+ issueAchievement(player, "batterys");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.hatch.energy.tier.02")){
+ issueAchievement(player, "upgradeebf");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.multimachine.multifurnace")){
+ issueAchievement(player, "highpowersmelt");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.hatch.energy.tier.01")){
+ issueAchievement(player, "energyhatch");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.multimachine.processingarray")){
+ issueAchievement(player, "factory");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.basicgenerator.magicenergyconverter.tier.01")){
+ issueAchievement(player, "magic");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.basicgenerator.magicenergyabsorber.tier.03")){
+ issueAchievement(player, "highmage");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.amplifab.tier.")){
+ issueAchievement(player, "amplifier");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.massfab.tier.")){
+ issueAchievement(player, "universal");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicgenerator.naquadah.tier.")){
+ issueAchievement(player, "alienpower");
+ }else if(stack.getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.replicator.tier.")){
+ issueAchievement(player, "replication");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.basicgenerator.plasmagenerator.tier.07")){
+ issueAchievement(player, "fullefficiency");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.multimachine.largeturbine")){
+ issueAchievement(player, "muchsteam");
+ }else if(stack.getUnlocalizedName().equals("gt.blockmachines.multimachine.largehpturbine")){
+ issueAchievement(player, "efficientsteam");
+ }
+ }else if(stack.getUnlocalizedName().equals("gt.Thoriumcell")){
+ issueAchievement(player, "newfuel");
+ }else if(stack.getUnlocalizedName().equals("gt.neutronreflector")){
+ issueAchievement(player, "reflect");
+ }else if(stack.getUnlocalizedName().equals("gt.blockcasings.13")){
+ issueAchievement(player, "upgrade");
+ }else if(stack.getUnlocalizedName().equals("gt.blockcasings.14")){
+ issueAchievement(player, "upgrade2");
+ }else if(stack.getUnlocalizedName().equals("gt.blockcasings.15")){
+ issueAchievement(player, "conducting");
+ }
+ }
+
+ @SubscribeEvent
+ public void onSmelting(ItemSmeltedEvent event) {
+ EntityPlayer player = event.player;
+ ItemStack stack = event.smelting;
+ if (player == null||stack==null) {
+ return;
+ }
+ if (stack.getItem() == Items.bread) {
+ event.player.triggerAchievement(AchievementList.makeBread);
+ }
+ }
+
+ @SubscribeEvent
+ public void onItemPickup(EntityItemPickupEvent event) {
+ EntityPlayer player = event.entityPlayer;
+ ItemStack stack = event.item.getEntityItem();
+ if (player == null||stack==null) {
+ return;
+ }
+// System.out.println("Pickup: "+stack.getUnlocalizedName());
+ ItemData data = GT_OreDictUnificator.getItemData(stack);
+ if (data != null) {
+ if (data.mPrefix == OrePrefixes.dust) {
+ if(data.mMaterial.mMaterial == Materials.Lutetium){
+ issueAchievement(player, "newmetal");
+ }
+ issueAchievement(player, "cleandust");
+ } else if (data.mPrefix == OrePrefixes.ore || data.mPrefix == OrePrefixes.oreBlackgranite || data.mPrefix == OrePrefixes.oreEndstone
+ || data.mPrefix == OrePrefixes.oreNetherrack || data.mPrefix == OrePrefixes.oreRedgranite) {
+ for (int i = 0; i < data.getAllMaterialStacks().size(); i++) {
+ issueAchievement(player, data.getAllMaterialStacks().get(i).mMaterial.name());
+ if(data.getAllMaterialStacks().get(i).mMaterial == Materials.AnyIron){issueAchievement(player, "iron");}
+ }
+ }else if(data.mPrefix == OrePrefixes.crushed){
+ issueAchievement(player, "crushed");
+ }else if(data.mPrefix == OrePrefixes.crushedPurified){
+ issueAchievement(player, "washing");
+ }else if(data.mPrefix == OrePrefixes.crushedCentrifuged){
+ issueAchievement(player, "spinit");
+ }else if(data.mMaterial.mMaterial == Materials.Steel){
+ if(data.mPrefix == OrePrefixes.ingot && stack.stackSize == stack.getMaxStackSize()){
+ issueAchievement(player, "steel");
+ }else if(data.mPrefix == OrePrefixes.nugget && Loader.isModLoaded("Thaumcraft")){
+ if(ThaumcraftApiHelper.isResearchComplete(player.getDisplayName(), "GT_IRON_TO_STEEL")){
+ issueAchievement(player, "steel");
+ }
+ }
+ }else if(data.mPrefix == OrePrefixes.circuit&&data.mMaterial.mMaterial == Materials.Advanced){
+ issueAchievement(player, "stepforward");
+ }
+ }
+ if(stack.getUnlocalizedName().startsWith("gt.metaitem.")){
+ if(stack.getUnlocalizedName().equals("gt.metaitem.02.32500")){
+ issueAchievement(player, "havestlead");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32501")){
+ issueAchievement(player, "havestsilver");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32503")){
+ issueAchievement(player, "havestiron");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32504")){
+ issueAchievement(player, "havestgold");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32530")){
+ issueAchievement(player, "havestcopper");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32540")){
+ issueAchievement(player, "havesttin");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32510")){
+ issueAchievement(player, "havestoil");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.02.32511")){
+ issueAchievement(player, "havestemeralds");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32706")){
+ issueAchievement(player, "energyflow");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32702")){
+ issueAchievement(player, "bettercircuits");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32707")){
+ issueAchievement(player, "datasaving");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32597")){
+ issueAchievement(player, "orbs");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32599")){
+ issueAchievement(player, "thatspower");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32598")){
+ issueAchievement(player, "luck");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32749")){
+ issueAchievement(player, "closeit");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32730")){
+ issueAchievement(player, "manipulation");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32729")){
+ issueAchievement(player, "filterregulate");
+ }else if(stack.getUnlocalizedName().equals("gt.metaitem.01.32605")){
+ issueAchievement(player, "whatnow");
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java b/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java
new file mode 100644
index 0000000000..f4a73c87d7
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java
@@ -0,0 +1,26 @@
+package gregtech.loaders.misc;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class GT_CoverLoader
+ implements Runnable
+{
+ public void run()
+ {
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ GregTech_API.registerCover(new ItemStack(Blocks.carpet, 1, i), new GT_CopiedBlockTexture(Blocks.wool, 0, i), null);
+ }
+ GregTech_API.registerCover(GT_ModHandler.getIC2Item("reactorVent", 1L), new GT_RenderedTexture(Textures.BlockIcons.VENT_NORMAL), null);
+ GregTech_API.registerCover(GT_ModHandler.getIC2Item("reactorVentCore", 1L), new GT_RenderedTexture(Textures.BlockIcons.VENT_NORMAL), null);
+ GregTech_API.registerCover(GT_ModHandler.getIC2Item("reactorVentGold", 1L), new GT_RenderedTexture(Textures.BlockIcons.VENT_ADVANCED), null);
+ GregTech_API.registerCover(GT_ModHandler.getIC2Item("reactorVentSpread", 1L), new GT_RenderedTexture(Textures.BlockIcons.VENT_NORMAL), null);
+ GregTech_API.registerCover(GT_ModHandler.getIC2Item("reactorVentDiamond", 1L), new GT_RenderedTexture(Textures.BlockIcons.VENT_ADVANCED), null);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingAll.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingAll.java
new file mode 100644
index 0000000000..f153e5daf0
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingAll.java
@@ -0,0 +1,19 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingAll implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingAll()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (((aStack.getItem() instanceof net.minecraft.item.ItemBlock)) && (aPrefix.mDefaultStackSize < aStack.getItem().getItemStackLimit(aStack))) aStack.getItem().setMaxStackSize(aPrefix.mDefaultStackSize);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingArrows.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingArrows.java
new file mode 100644
index 0000000000..4100022ea4
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingArrows.java
@@ -0,0 +1,43 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Utility.ItemNBT;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingArrows implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingArrows()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) if (tPrefix.name().startsWith("arrowGt")) { tPrefix.add(this);
+ }
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ ItemStack tOutput = GT_Utility.copyAmount(1L, new Object[] { aStack });GT_Utility.updateItemStack(tOutput);
+ GT_Utility.ItemNBT.addEnchantment(tOutput, Enchantment.smite, EnchantmentHelper.getEnchantmentLevel(Enchantment.smite.effectId, tOutput) + 3);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.HolyWater.getFluid(25L), tOutput, null, null, null, 100, 2);
+
+ tOutput = GT_Utility.copyAmount(1L, new Object[] { aStack });GT_Utility.updateItemStack(tOutput);
+ GT_Utility.ItemNBT.addEnchantment(tOutput, Enchantment.fireAspect, EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, tOutput) + 3);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.FierySteel.getFluid(25L), tOutput, null, null, null, 100, 2);
+
+ tOutput = GT_Utility.copyAmount(1L, new Object[] { aStack });GT_Utility.updateItemStack(tOutput);
+ GT_Utility.ItemNBT.addEnchantment(tOutput, Enchantment.fireAspect, EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, tOutput) + 1);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Blaze.getMolten(18L), tOutput, null, null, null, 100, 2);
+
+ tOutput = GT_Utility.copyAmount(1L, new Object[] { aStack });GT_Utility.updateItemStack(tOutput);
+ GT_Utility.ItemNBT.addEnchantment(tOutput, Enchantment.knockback, EnchantmentHelper.getEnchantmentLevel(Enchantment.knockback.effectId, tOutput) + 1);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Rubber.getMolten(18L), tOutput, null, null, null, 100, 2);
+
+ tOutput = GT_Utility.copyAmount(1L, new Object[] { aStack });GT_Utility.updateItemStack(tOutput);
+ GT_Utility.ItemNBT.addEnchantment(tOutput, gregtech.api.enchants.Enchantment_EnderDamage.INSTANCE, EnchantmentHelper.getEnchantmentLevel(gregtech.api.enchants.Enchantment_EnderDamage.INSTANCE.effectId, tOutput) + 1);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Mercury.getFluid(25L), tOutput, null, null, null, 100, 2);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBattery.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBattery.java
new file mode 100644
index 0000000000..dd6984d904
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBattery.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingBattery implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingBattery()
+ {
+ OrePrefixes.battery.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial == Materials.Lithium) {
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getIC2Item("cropnalyzer", 1L, 32767), ItemList.Tool_Scanner.getAlmostBroken(1L, new Object[0]), 12800, 16);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java
new file mode 100644
index 0000000000..eda781bd19
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingBeans implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingBeans()
+ {
+ OrePrefixes.beans.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("beansCocoa")) GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java
new file mode 100644
index 0000000000..98f08594cc
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java
@@ -0,0 +1,68 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingBlock()
+ {
+ OrePrefixes.block.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L), null, (int)Math.max(aMaterial.getMass() * 10L, 1L), 30);
+
+ ItemStack tStack1 = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L);ItemStack tStack2 = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);ItemStack tStack3 = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L);
+
+ GT_ModHandler.removeRecipe(new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+
+ if (tStack1 != null) GT_ModHandler.removeRecipe(new ItemStack[] { tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1 });
+ if (tStack2 != null) GT_ModHandler.removeRecipe(new ItemStack[] { tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2 });
+ if (tStack3 != null) { GT_ModHandler.removeRecipe(new ItemStack[] { tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3 });
+ }
+ if (aMaterial.mStandardMoltenFluid != null) { GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), aMaterial.getMolten(1296L), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L), 288, 8);
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockcrafting, OrePrefixes.block.get(aMaterial).toString(), false)) {
+ if ((tStack1 == null) && (tStack2 == null) && (tStack3 != null)) GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L), new Object[] { "XXX", "XXX", "XXX", Character.valueOf('X'), OrePrefixes.dust.get(aMaterial) });
+ if (tStack2 != null) GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L), new Object[] { "XXX", "XXX", "XXX", Character.valueOf('X'), OrePrefixes.gem.get(aMaterial) });
+ if (tStack1 != null) { GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L), new Object[] { "XXX", "XXX", "XXX", Character.valueOf('X'), OrePrefixes.ingot.get(aMaterial) });
+ }
+ }
+ if (tStack1 != null) tStack1.stackSize = 9;
+ if (tStack2 != null) tStack2.stackSize = 9;
+ if (tStack3 != null) { tStack3.stackSize = 9;
+ }
+ GT_Values.RA.addForgeHammerRecipe(aStack, tStack2, 100, 24);
+
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockdecrafting, OrePrefixes.block.get(aMaterial).toString(), tStack2 != null)) {
+ if (tStack3 != null) GT_ModHandler.addShapelessCraftingRecipe(tStack3, new Object[] { OrePrefixes.block.get(aMaterial) });
+ if (tStack2 != null) GT_ModHandler.addShapelessCraftingRecipe(tStack2, new Object[] { OrePrefixes.block.get(aMaterial) });
+ if (tStack1 != null) { GT_ModHandler.addShapelessCraftingRecipe(tStack1, new Object[] { OrePrefixes.block.get(aMaterial) });
+ }
+ }
+ switch (aMaterial) {
+ case Mercury:
+ System.err.println("'blockQuickSilver'?, In which Ice Desert can you actually place this as a solid Block?");
+ break;
+ case Iron: case WroughtIron:
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Rod.get(0L, new Object[0]), ItemList.IC2_ShaftIron.get(1L, new Object[0]), 640, 120);
+ GT_Values.RA.addAssemblerRecipe(ItemList.IC2_Compressed_Coal_Ball.get(8L, new Object[0]), GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), 400, 4);
+ break;
+ case Steel:
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Rod.get(0L, new Object[0]), ItemList.IC2_ShaftSteel.get(1L, new Object[0]), 1280, 120);
+ GT_Values.RA.addAssemblerRecipe(ItemList.IC2_Compressed_Coal_Ball.get(8L, new Object[0]), GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), 400, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java
new file mode 100644
index 0000000000..7303c8a7cb
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java
@@ -0,0 +1,26 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.block.material.Material;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingBolt implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingBolt()
+ {
+ OrePrefixes.bolt.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L), null, (int)Math.max(aMaterial.getMass() / 8L, 1L), 4);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java
new file mode 100644
index 0000000000..73c6e3e168
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java
@@ -0,0 +1,104 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCell
+ implements IOreRecipeRegistrator
+{
+ public ProcessingCell()
+ {
+ OrePrefixes.cell.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial == Materials.Empty)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ if (aModName.equalsIgnoreCase("AtomicScience")) {
+ GT_ModHandler.addExtractionRecipe(ItemList.Cell_Empty.get(1L, new Object[0]), aStack);
+ }
+ }
+ else
+ {
+ if (aMaterial.mFuelPower > 0) {
+ GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.getFluidForFilledItem(aStack, true) == null ? GT_Utility.getContainerItem(aStack, true) : null, aMaterial.mFuelPower, aMaterial.mFuelType);
+ }
+ if ((aMaterial.mMaterialList.size() > 0) && ((aMaterial.mExtraData & 0x3) != 0))
+ {
+ int tAllAmount = 0;
+ MaterialStack tMat2;
+ for (Iterator i$ = aMaterial.mMaterialList.iterator(); i$.hasNext(); tAllAmount = (int)(tAllAmount + tMat2.mAmount)) {
+ tMat2 = (MaterialStack)i$.next();
+ }
+ long tItemAmount = 0L;long tCapsuleCount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { aStack }) * -tAllAmount;long tDensityMultiplier = aMaterial.getDensity() > 3628800L ? aMaterial.getDensity() / 3628800L : 1L;
+ ArrayList<ItemStack> tList = new ArrayList();
+ for ( MaterialStack tMat : aMaterial.mMaterialList) {
+ if (tMat.mAmount > 0L)
+ {
+ ItemStack tStack;
+ if (tMat.mMaterial == Materials.Air)
+ {
+ tStack = ItemList.Cell_Air.get(tMat.mAmount * tDensityMultiplier / 2L, new Object[0]);
+ }
+ else
+ {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
+ if (tStack == null) {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
+ }
+ }
+ if (tItemAmount + tMat.mAmount * 3628800L <= aStack.getMaxStackSize() * aMaterial.getDensity())
+ {
+ tItemAmount += tMat.mAmount * 3628800L;
+ if (tStack != null)
+ {
+ ItemStack tmp397_395 = tStack;tmp397_395.stackSize = ((int)(tmp397_395.stackSize * tDensityMultiplier));
+ while ((tStack.stackSize > 64) && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64 < 0L ? tList.size() < 5 : tList.size() < 6) && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64 <= 64L))
+ {
+ tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64;
+ tList.add(GT_Utility.copyAmount(64L, new Object[] { tStack }));
+ tStack.stackSize -= 64;
+ }
+ if (tStack.stackSize > 0) {
+ if (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { tStack }) <= 64L) {
+ if (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { tStack }) < 0L ? tList.size() < 5 : tList.size() < 6)
+ {
+ tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { tStack });
+ tList.add(tStack);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ tItemAmount = (tItemAmount * tDensityMultiplier % aMaterial.getDensity() > 0L ? 1 : 0) + tItemAmount * tDensityMultiplier / aMaterial.getDensity();
+ if (tList.size() > 0)
+ {
+ if ((aMaterial.mExtraData & 0x1) != 0) {
+ //GT_Values.RA.addElectrolyzerRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount > 0L ? (int)tCapsuleCount : 0, (ItemStack)tList.get(0), tList.size() < 2 ? null : (ItemStack)tList.get(1), tList.size() < 3 ? null : (ItemStack)tList.get(2), tList.size() < 4 ? null : (ItemStack)tList.get(3), tList.size() < 5 ? null : (ItemStack)tList.get(4), tList.size() < 6 ? null : tCapsuleCount < 0L ? ItemList.Cell_Empty.get(-tCapsuleCount, new Object[0]) : (ItemStack)tList.get(5), (int)Math.max(1L, Math.abs(aMaterial.getProtons() * 8L * tItemAmount)), Math.min(4, tList.size()) * 30);
+ GT_Values.RA.addElectrolyzerRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount <= 0L ? 0 : (int)tCapsuleCount, (ItemStack)tList.get(0), tList.size() >= 2 ? (ItemStack)tList.get(1) : null, tList.size() >= 3 ? (ItemStack)tList.get(2) : null, tList.size() >= 4 ? (ItemStack)tList.get(3) : null, tList.size() >= 5 ? (ItemStack)tList.get(4) : null, tCapsuleCount >= 0L ? tList.size() >= 6 ? (ItemStack)tList.get(5) : null : ItemList.Cell_Empty.get(-tCapsuleCount, new Object[0]), (int)Math.max(1L, Math.abs(aMaterial.getProtons() * 8L * tItemAmount)), Math.min(4, tList.size()) * 30);
+ }
+ if ((aMaterial.mExtraData & 0x2) != 0) {
+ //GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount > 0L ? (int)tCapsuleCount : 0, (ItemStack)tList.get(0), tList.size() < 2 ? null : (ItemStack)tList.get(1), tList.size() < 3 ? null : (ItemStack)tList.get(2), tList.size() < 4 ? null : (ItemStack)tList.get(3), tList.size() < 5 ? null : (ItemStack)tList.get(4), tList.size() < 6 ? null : tCapsuleCount < 0L ? ItemList.Cell_Empty.get(-tCapsuleCount, new Object[0]) : (ItemStack)tList.get(5), (int)Math.max(1L, Math.abs(aMaterial.getMass() * 2L * tItemAmount)));
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount <= 0L ? 0 : (int)tCapsuleCount, (ItemStack)tList.get(0), tList.size() >= 2 ? (ItemStack)tList.get(1) : null, tList.size() >= 3 ? (ItemStack)tList.get(2) : null, tList.size() >= 4 ? (ItemStack)tList.get(3) : null, tList.size() >= 5 ? (ItemStack)tList.get(4) : null, tCapsuleCount >= 0L ? tList.size() >= 6 ? (ItemStack)tList.get(5) : null : ItemList.Cell_Empty.get(-tCapsuleCount, new Object[0]), (int)Math.max(1L, Math.abs(aMaterial.getMass() * 2L * tItemAmount)));
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCellPlasma.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCellPlasma.java
new file mode 100644
index 0000000000..de3e48ab77
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCellPlasma.java
@@ -0,0 +1,27 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCellPlasma implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCellPlasma()
+ {
+ OrePrefixes.cellPlasma.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial == Materials.Empty) {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ } else {
+ GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.getFluidForFilledItem(aStack, true) == null ? GT_Utility.getContainerItem(aStack, true) : null, (int)Math.max(1024L, 1024L * aMaterial.getMass()), 4);
+ GT_Values.RA.addVacuumFreezerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), gregtech.api.util.GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java
new file mode 100644
index 0000000000..9164641d3c
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCircuit implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCircuit()
+ {
+ OrePrefixes.circuit.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ switch (aMaterial) {
+ case Good: case Advanced: case Data: case Elite: case Master: case Ultimate:
+ if (!gregtech.api.util.GT_OreDictUnificator.isBlacklisted(aStack)) GT_ModHandler.removeRecipeByOutput(aStack);
+ break;
+ case Primitive:
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Circuit_Primitive.get(1L, new Object[0]), new Object[] { GT_ModHandler.getIC2Item("casingadviron", 1L), OrePrefixes.wireGt01.get(Materials.RedAlloy), OrePrefixes.wireGt01.get(Materials.RedAlloy), OrePrefixes.wireGt01.get(Materials.Tin) });
+ break;
+ case Basic:
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), new Object[] { "WWW", "CPC", "WWW", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Primitive), Character.valueOf('W'), OreDictNames.craftingWireCopper, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), new Object[] { "WCW", "WPW", "WCW", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Primitive), Character.valueOf('W'), OreDictNames.craftingWireCopper, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), new Object[] { ItemList.Circuit_Integrated.getWildcard(1L, new Object[0]) });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java
new file mode 100644
index 0000000000..24a28193c4
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java
@@ -0,0 +1,26 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCompressed implements IOreRecipeRegistrator
+{
+ public ProcessingCompressed()
+ {
+ OrePrefixes.compressed.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GregTech_API.registerCover(aStack, new GT_RenderedTexture(aMaterial.mIconSet.mTextures[72], aMaterial.mRGBa, false), null);
+ GT_RecipeRegistrator.registerUsagesForMaterials(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, false);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
new file mode 100644
index 0000000000..6fd802eba7
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
@@ -0,0 +1,61 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCrafting()
+ {
+ OrePrefixes.crafting.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals(OreDictNames.craftingQuartz.toString())) {
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.redstone_torch, 3, 32767), GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Concrete.getMolten(144L), new ItemStack(net.minecraft.init.Items.comparator, 1, 0), 800, 1);
+ } else if (aOreDictName.equals(OreDictNames.craftingWireCopper.toString())) {
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getIC2Item("frequencyTransmitter", 1L), 800, 1);
+ } else if (aOreDictName.equals(OreDictNames.craftingWireTin.toString())) {
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getIC2Item("frequencyTransmitter", 1L), 800, 1);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensBlue.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 13), 2000, 1920);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 13), 2000, 1920);
+ GT_Values.RA.addLaserEngraverRecipe(ItemList.IC2_LapotronCrystal.getWildcard(1L, new Object[0]), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Crystal_Chip_Master.get(3L, new Object[0]), 256, 480);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensYellow.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 14), 2000, 1920);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 14), 2000, 1920);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensCyan.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 15), 2000, 1920);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 15), 2000, 1920);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensRed.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Redstone, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), 50, 120);
+
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Copper, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Wiring_Basic.get(1L, new Object[0]), 64, 30);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.AnnealedCopper, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Wiring_Basic.get(1L, new Object[0]), 64, 30);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Wiring_Advanced.get(1L, new Object[0]), 64, 120);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Wiring_Advanced.get(1L, new Object[0]), 64, 120);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Wiring_Elite.get(1L, new Object[0]), 64, 480);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensGreen.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Olivine, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1L, new Object[0]), 256, 480);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Emerald, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1L, new Object[0]), 256, 480);
+ } else if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString())) {
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 19), 2000, 1920);
+ GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 19), 2000, 1920);
+
+ GT_Values.RA.addLaserEngraverRecipe(new ItemStack(Blocks.sandstone, 1, 2), GT_Utility.copyAmount(0L, new Object[] { aStack }), new ItemStack(Blocks.sandstone, 1, 1), 50, 16);
+ GT_Values.RA.addLaserEngraverRecipe(new ItemStack(Blocks.stone, 1, 0), GT_Utility.copyAmount(0L, new Object[] { aStack }), new ItemStack(Blocks.stonebrick, 1, 3), 50, 16);
+ GT_Values.RA.addLaserEngraverRecipe(new ItemStack(Blocks.quartz_block, 1, 0), GT_Utility.copyAmount(0L, new Object[] { aStack }), new ItemStack(Blocks.quartz_block, 1, 1), 50, 16);
+ GT_Values.RA.addLaserEngraverRecipe(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartz", 1L), GT_Utility.copyAmount(0L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartzChiseled", 1L), 50, 16);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java
new file mode 100644
index 0000000000..9155ecac45
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java
@@ -0,0 +1,51 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCrop()
+ {
+ OrePrefixes.crop.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, net.minecraft.item.ItemStack aStack)
+ {
+ GT_ModHandler.addCompressionRecipe(gregtech.api.util.GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.IC2_PlantballCompressed.get(1L, new Object[0]));
+ if (aOreDictName.equals("cropTea")) {
+ GT_Values.RA.addBrewingRecipe(aStack, FluidRegistry.WATER, FluidRegistry.getFluid("potion.tea"), false);
+ GT_Values.RA.addBrewingRecipe(aStack, GT_ModHandler.getDistilledWater(1L).getFluid(), FluidRegistry.getFluid("potion.tea"), false);
+ } else if (aOreDictName.equals("cropGrape")) {
+ GT_Values.RA.addBrewingRecipe(aStack, FluidRegistry.WATER, FluidRegistry.getFluid("potion.grapejuice"), false);
+ GT_Values.RA.addBrewingRecipe(aStack, GT_ModHandler.getDistilledWater(1L).getFluid(), FluidRegistry.getFluid("potion.grapejuice"), false);
+ } else if (aOreDictName.equals("cropChilipepper")) {
+ GT_ModHandler.addPulverisationRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L));
+ } else if (aOreDictName.equals("cropCoffee")) {
+ GT_ModHandler.addPulverisationRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L));
+ } else if (aOreDictName.equals("cropPotato")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Raw_PotatoChips.get(1L, new Object[0]), 64, 4);
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Stripes.get(0L, new Object[0]), ItemList.Food_Raw_Fries.get(1L, new Object[0]), 64, 4);
+ GT_Values.RA.addBrewingRecipe(aStack, FluidRegistry.WATER, FluidRegistry.getFluid("potion.potatojuice"), true);
+ GT_Values.RA.addBrewingRecipe(aStack, GT_ModHandler.getDistilledWater(1L).getFluid(), FluidRegistry.getFluid("potion.potatojuice"), true);
+ } else if (aOreDictName.equals("cropLemon")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Lemon.get(4L, new Object[0]), 64, 4);
+ GT_Values.RA.addBrewingRecipe(aStack, FluidRegistry.WATER, FluidRegistry.getFluid("potion.lemonjuice"), false);
+ GT_Values.RA.addBrewingRecipe(aStack, GT_ModHandler.getDistilledWater(1L).getFluid(), FluidRegistry.getFluid("potion.lemonjuice"), false);
+ GT_Values.RA.addBrewingRecipe(aStack, FluidRegistry.getFluid("potion.vodka"), FluidRegistry.getFluid("potion.leninade"), true);
+ } else if (aOreDictName.equals("cropTomato")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Tomato.get(4L, new Object[0]), 64, 4);
+ } else if (aOreDictName.equals("cropCucumber")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Cucumber.get(4L, new Object[0]), 64, 4);
+ } else if (aOreDictName.equals("cropOnion")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Onion.get(4L, new Object[0]), 64, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedCentrifuged.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedCentrifuged.java
new file mode 100644
index 0000000000..0af27d1bb1
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedCentrifuged.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCrushedCentrifuged implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCrushedCentrifuged()
+ {
+ OrePrefixes.crushedCentrifuged.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), 10, 16);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, GT_Utility.selectItemInList(2, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L), 10, false);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedPurified.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedPurified.java
new file mode 100644
index 0000000000..384187f2ff
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedPurified.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCrushedPurified implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCrushedPurified()
+ {
+ OrePrefixes.crushedPurified.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addThermalCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), (int)Math.min(5000L, Math.abs(aMaterial.getMass() * 20L)), new Object[] { GT_OreDictUnificator.get(OrePrefixes.crushedCentrifuged, aMaterial.mMacerateInto, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L) });
+ ItemStack tGem = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
+ if (tGem != null) GT_Values.RA.addSifterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, tGem, 1L), GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, tGem, 1L), tGem, GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, tGem, 1L), GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, tGem, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, tGem, 1L) }, new int[] { 100, 400, 1500, 2000, 4000, 5000 }, 800, 16);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java
new file mode 100644
index 0000000000..92faac979c
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingCrystallized implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingCrystallized()
+ {
+ OrePrefixes.crystal.add(this);
+ OrePrefixes.crystalline.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), 10, 16);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), null, 10, false);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java
new file mode 100644
index 0000000000..bb24587ee7
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java
@@ -0,0 +1,36 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingDirty()
+ {
+ OrePrefixes.clump.add(this);
+ OrePrefixes.shard.add(this);
+ OrePrefixes.crushed.add(this);
+ OrePrefixes.dirtyGravel.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, net.minecraft.item.ItemStack aStack)
+ {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), 10, 16);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), 1L), GT_OreDictUnificator.get(OrePrefixes.dust, GT_Utility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L), 10, false);
+ GT_ModHandler.addOreWasherRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), 1000, new Object[] { GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, GT_Utility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L) });
+ GT_ModHandler.addThermalCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), (int)Math.min(5000L, Math.abs(aMaterial.getMass() * 20L)), new Object[] { GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedCentrifuged : OrePrefixes.dust, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L) });
+
+ if (aMaterial.contains(SubTag.WASHING_MERCURY)) GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Mercury.getFluid(1000L), GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new int[] { 10000, 7000, 4000 }, 800, 8);
+ if (aMaterial.contains(SubTag.WASHING_SODIUMPERSULFATE)) GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.SodiumPersulfate.getFluid(1000L), GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new int[] { 10000, 7000, 4000 }, 800, 8);
+ for (Materials tMaterial : aMaterial.mOreByProducts) {
+ if (tMaterial.contains(SubTag.WASHING_MERCURY)) GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Mercury.getFluid(1000L), GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial.mMacerateInto, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new int[] { 10000, 7000, 4000 }, 800, 8);
+ if (tMaterial.contains(SubTag.WASHING_SODIUMPERSULFATE)) GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.SodiumPersulfate.getFluid(1000L), GT_OreDictUnificator.get(aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial.mMacerateInto, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new int[] { 10000, 7000, 4000 }, 800, 8);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java
new file mode 100644
index 0000000000..0800d24479
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java
@@ -0,0 +1,166 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingDust()
+ {
+ OrePrefixes.dust.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower, aMaterial.mFuelType);
+ if (GT_Utility.getFluidForFilledItem(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), true) == null) GT_Values.RA.addCannerRecipe(aStack, ItemList.Cell_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), null, 100, 1);
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtDust, aMaterial, 1L), 100, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtDust, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1);
+ if (!aMaterial.mBlastFurnaceRequired) {
+ GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+ if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GT_RecipeRegistrator.registerReverseArcSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }), aMaterial, aPrefix.mMaterialAmount, null, null, null);
+ }
+ }
+
+ ItemStack tStack;
+if ((null != (tStack = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L))) && (!aMaterial.contains(SubTag.NO_SMELTING)))
+{
+ if (aMaterial.mBlastFurnaceRequired)
+ {
+ GT_ModHandler.removeFurnaceSmelting(aStack);
+ GT_Values.RA.addBlastRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, tStack, 1L) : GT_Utility.copyAmount(1L, new Object[] { tStack }), null, (int)Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial.mBlastFurnaceTemp);
+ if (aMaterial.mBlastFurnaceTemp <= 1000) {
+ GT_ModHandler.addRCBlastFurnaceRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.copyAmount(1L, new Object[] { tStack }), aMaterial.mBlastFurnaceTemp);
+ }
+ }
+ else
+ {
+ GT_ModHandler.addSmeltingRecipe(aStack, tStack);
+ }
+}
+else if (!aMaterial.contains(SubTag.NO_WORKING))
+{
+ if ((!OrePrefixes.block.isIgnored(aMaterial)) &&
+ (null == GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))) {
+ GT_ModHandler.addCompressionRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L));
+ }
+ if (((OrePrefixes.block.isIgnored(aMaterial)) || (null == GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))) && (aMaterial != Materials.GraniteRed) && (aMaterial != Materials.GraniteBlack) && (aMaterial != Materials.Glass) && (aMaterial != Materials.Obsidian) && (aMaterial != Materials.Glowstone) && (aMaterial != Materials.Paper)) {
+ GT_ModHandler.addCompressionRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L));
+ }
+}
+
+
+
+ if ((aMaterial.mMaterialList.size() > 0) && ((aMaterial.mExtraData & 0x3) != 0)) {
+ long tItemAmount = 0L;long tCapsuleCount = 0L;long tDensityMultiplier = aMaterial.getDensity() > 3628800L ? aMaterial.getDensity() / 3628800L : 1L;
+ ArrayList<ItemStack> tList = new ArrayList();
+ for (MaterialStack tMat : aMaterial.mMaterialList) if (tMat.mAmount > 0L)
+ {
+ if (tMat.mMaterial == Materials.Air) {
+ tStack = ItemList.Cell_Air.get(tMat.mAmount / 2L, new Object[0]);
+ } else {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
+ if (tStack == null)
+ tStack = GT_OreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
+ }
+ if (tItemAmount + tMat.mAmount * 3628800L <= aStack.getMaxStackSize() * aMaterial.getDensity()) {
+ tItemAmount += tMat.mAmount * 3628800L;
+ if (tStack != null) {
+ ItemStack tmp793_791 = tStack;tmp793_791.stackSize = ((int)(tmp793_791.stackSize * tDensityMultiplier));
+ while ((tStack.stackSize > 64) && (tList.size() < 6) && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64 <= 64L)) {
+ tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64;
+ tList.add(GT_Utility.copyAmount(64L, new Object[] { tStack }));
+ tStack.stackSize -= 64;
+ }
+ if ((tStack.stackSize > 0) && (tList.size() < 6)) { if (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { tStack }) <= 64L) {
+ tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { tStack });
+ tList.add(tStack);
+ }
+ }
+ }
+ }
+ }
+ tItemAmount = (tItemAmount * tDensityMultiplier % aMaterial.getDensity() > 0L ? 1 : 0) + tItemAmount * tDensityMultiplier / aMaterial.getDensity();
+ if (tList.size() > 0) {
+ FluidStack tFluid = null;
+ for (int i = 0; i < tList.size(); i++) { if ((!ItemList.Cell_Air.isStackEqual(tList.get(i))) && ((tFluid = GT_Utility.getFluidForFilledItem((ItemStack)tList.get(i), true)) != null)) {
+ tFluid.amount *= ((ItemStack)tList.get(i)).stackSize;
+ tCapsuleCount -= GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(new ItemStack[] { (ItemStack)tList.get(i) });
+ tList.remove(i);
+ break;
+ }
+ }
+ if ((aMaterial.mExtraData & 0x1) != 0) GT_Values.RA.addElectrolyzerRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount > 0L ? ItemList.Cell_Empty.get(tCapsuleCount, new Object[0]) : null, null, tFluid, (ItemStack)tList.get(0), tList.size() < 2 ? null : (ItemStack)tList.get(1), tList.size() < 3 ? null : (ItemStack)tList.get(2), tList.size() < 4 ? null : (ItemStack)tList.get(3), tList.size() < 5 ? null : (ItemStack)tList.get(4), tList.size() < 6 ? null : (ItemStack)tList.get(5), null, (int)Math.max(1L, Math.abs(aMaterial.getProtons() * 2L * tItemAmount)), Math.min(4, tList.size()) * 30);
+ if ((aMaterial.mExtraData & 0x2) != 0) { GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(tItemAmount, new Object[] { aStack }), tCapsuleCount > 0L ? ItemList.Cell_Empty.get(tCapsuleCount, new Object[0]) : null, null, tFluid, (ItemStack)tList.get(0), tList.size() < 2 ? null : (ItemStack)tList.get(1), tList.size() < 3 ? null : (ItemStack)tList.get(2), tList.size() < 4 ? null : (ItemStack)tList.get(3), tList.size() < 5 ? null : (ItemStack)tList.get(4), tList.size() < 6 ? null : (ItemStack)tList.get(5), null, (int)Math.max(1L, Math.abs(aMaterial.getMass() * 4L * tItemAmount)), Math.min(4, tList.size()) * 5);
+ }
+ }
+ }
+ if (aMaterial.contains(SubTag.CRYSTALLISABLE)) {
+ GT_Values.RA.addAutoclaveRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Water.getFluid(200L), GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 7000, 2000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getDistilledWater(200L), GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 9000, 1500, 24);
+ }
+
+ switch (aMaterial) {
+ case _NULL:
+ break;
+ case Glass:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack(net.minecraft.init.Blocks.glass));
+ break;
+ case NetherQuartz: case Quartz: case CertusQuartz:
+ if (gregtech.api.GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Recipes.disabledrecipes, "QuartzDustSmeltingIntoAESilicon", true)) GT_ModHandler.removeFurnaceSmelting(aStack);
+ break;
+ case MeatRaw:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L));
+ break;
+ case Mercury:
+ System.err.println("Quicksilver Dust?, To melt that, you don't even need a Furnace...");
+ break;
+ case Tetrahedrite: case Chalcopyrite: case Malachite:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 6L));
+ break;
+ case Pentlandite:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 6L));
+ break;
+ case Garnierite:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Nickel, 1L));
+ break;
+ case Cassiterite: case CassiteriteSand:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L));
+ break;
+ case Magnetite: case VanadiumMagnetite: case BasalticMineralSand: case GraniticMineralSand:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 3L));
+ break;
+ case YellowLimonite: case BrownLimonite: case BandedIron:
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L));
+ break;
+ case Coal:
+ GT_ModHandler.addLiquidTransposerFillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Water.getFluid(125L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L), 125);
+ break;
+ case HydratedCoal:
+ GT_ModHandler.addLiquidTransposerEmptyRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Water.getFluid(125L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), 125);
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
+ break;
+ case Diamond:
+ GT_Values.RA.addImplosionRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), 32, ItemList.IC2_Industrial_Diamond.get(3L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L));
+ break;
+ case Opal: case Olivine: case Emerald: case Ruby: case Sapphire: case GreenSapphire: case Topaz: case BlueTopaz: case Tanzanite:
+ GT_Values.RA.addImplosionRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), 24, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L));
+ break;
+ case FoolsRuby: case GarnetRed: case GarnetYellow: case Jasper: case Amber: case Monazite: case Forcicium: case Forcillium: case Force:
+ GT_Values.RA.addImplosionRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), 16, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustImpure.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustImpure.java
new file mode 100644
index 0000000000..dd8f1e1dba
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustImpure.java
@@ -0,0 +1,65 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ProcessingDustImpure implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingDustImpure()
+ {
+ OrePrefixes.dustPure.add(this);
+ OrePrefixes.dustImpure.add(this);
+ OrePrefixes.dustRefined.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ Materials tByProduct = (Materials)GT_Utility.selectItemInList(aPrefix == OrePrefixes.dustRefined ? 2 : aPrefix == OrePrefixes.dustPure ? 1 : 0, aMaterial, aMaterial.mOreByProducts);
+
+ if (aPrefix == OrePrefixes.dustPure) {
+ if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD)) GT_Values.RA.addElectromagneticSeparatorRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L), new int[] { 10000, 4000, 2000 }, 400, 24);
+ if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_IRON)) GT_Values.RA.addElectromagneticSeparatorRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L), new int[] { 10000, 4000, 2000 }, 400, 24);
+ if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM)) { GT_Values.RA.addElectromagneticSeparatorRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neodymium, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Neodymium, 1L), new int[] { 10000, 4000, 2000 }, 400, 24);
+ }
+ }
+ if (aMaterial.contains(SubTag.CRYSTALLISABLE)) {
+ GT_Values.RA.addAutoclaveRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Water.getFluid(200L), GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 9000, 2000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), gregtech.api.util.GT_ModHandler.getDistilledWater(200L), GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 9500, 1500, 24);
+ }
+
+ ItemStack tStack = GT_OreDictUnificator.get(OrePrefixes.dustTiny, tByProduct, GT_OreDictUnificator.get(OrePrefixes.nugget, tByProduct, 1L), 1L);
+ if (tStack == null) {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dustSmall, tByProduct, 1L);
+ if (tStack == null) {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dust, tByProduct, GT_OreDictUnificator.get(OrePrefixes.gem, tByProduct, 1L), 1L);
+ if (tStack == null) {
+ tStack = GT_OreDictUnificator.get(OrePrefixes.cell, tByProduct, 1L);
+ if (tStack == null) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), 0, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), null, null, null, null, null, (int)Math.max(1L, aMaterial.getMass()));
+ } else {
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(tStack, true);
+ if (tFluid == null) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), 1, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L), tStack, null, null, null, null, (int)Math.max(1L, aMaterial.getMass() * 72L));
+ } else {
+ tFluid.amount /= 10;
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, tFluid, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), null, null, null, null, null, null, (int)Math.max(1L, aMaterial.getMass() * 8L), 5);
+ }
+ }
+ } else {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), 0, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L), tStack, null, null, null, null, (int)Math.max(1L, aMaterial.getMass() * 72L));
+ }
+ } else {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), 0, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L), tStack, null, null, null, null, (int)Math.max(1L, aMaterial.getMass() * 16L));
+ }
+ } else {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), 0, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), tStack, null, null, null, null, (int)Math.max(1L, aMaterial.getMass() * 8L));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustSmall.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustSmall.java
new file mode 100644
index 0000000000..16d91881d5
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustSmall.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingDustSmall implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingDustSmall()
+ {
+ OrePrefixes.dustSmall.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), ItemList.Schematic_Dust.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), 100, 4);
+ if (!aMaterial.mBlastFurnaceRequired) {
+ GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+ if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GT_RecipeRegistrator.registerReverseArcSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }), aMaterial, aPrefix.mMaterialAmount, null, null, null);
+ }
+ }
+ if (aMaterial.mBlastFurnaceRequired) {
+ GT_Values.RA.addBlastRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), null, (int)Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial.mBlastFurnaceTemp);
+ } else {
+ gregtech.api.util.GT_ModHandler.addAlloySmelterRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), ItemList.Shape_Mold_Ingot.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 130, 3, true);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustTiny.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustTiny.java
new file mode 100644
index 0000000000..760785cf9d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDustTiny.java
@@ -0,0 +1,39 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingDustTiny implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingDustTiny()
+ {
+ OrePrefixes.dustTiny.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), ItemList.Schematic_Dust.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), 100, 4);
+ if (!aMaterial.mBlastFurnaceRequired) {
+ GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+ if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GT_RecipeRegistrator.registerReverseArcSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }), aMaterial, aPrefix.mMaterialAmount, null, null, null);
+ }
+ }
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMELTING)) {
+ if (aMaterial.mBlastFurnaceRequired) {
+ GT_Values.RA.addBlastRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), null, (int)Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial.mBlastFurnaceTemp);
+ GT_ModHandler.removeFurnaceSmelting(aStack);
+ } else {
+ GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 1L));
+ GT_ModHandler.addAlloySmelterRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), ItemList.Shape_Mold_Ingot.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 130, 3, true);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java
new file mode 100644
index 0000000000..007943f178
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidRegistry;
+
+public class ProcessingDye implements IOreRecipeRegistrator
+{
+ public ProcessingDye()
+ {
+ OrePrefixes.dye.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ Dyes aDye = Dyes.get(aOreDictName);
+ if ((aDye.mIndex >= 0) && (aDye.mIndex < 16) &&
+ (GT_Utility.getContainerItem(aStack, true) == null)) {
+ GT_ModHandler.addAlloySmelterRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 8L), GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack(Blocks.stained_glass, 8, 15 - aDye.mIndex), 200, 8, false);
+ GT_ModHandler.addAlloySmelterRecipe(new ItemStack(Blocks.glass, 8, 32767), GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack(Blocks.stained_glass, 8, 15 - aDye.mIndex), 200, 8, false);
+ GT_Values.RA.addMixerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, null, Materials.Water.getFluid(144L), FluidRegistry.getFluidStack("dye.watermixed." + aDye.name().toLowerCase(), 144), null, 16, 4);
+ GT_Values.RA.addMixerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, null, GT_ModHandler.getDistilledWater(144L), FluidRegistry.getFluidStack("dye.watermixed." + aDye.name().toLowerCase(), 144), null, 16, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java
new file mode 100644
index 0000000000..38d4727498
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingFoil implements IOreRecipeRegistrator
+{
+ public ProcessingFoil()
+ {
+ OrePrefixes.foil.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GregTech_API.registerCover(aStack, new GT_RenderedTexture(aMaterial.mIconSet.mTextures[70], aMaterial.mRGBa, false), null);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java
new file mode 100644
index 0000000000..1e9e57172d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java
@@ -0,0 +1,39 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingFood()
+ {
+ OrePrefixes.food.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("foodCheese")) {
+ GT_Values.RA.addSlicerRecipe(aStack, ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Cheese.get(4L, new Object[0]), 64, 4);
+ GT_OreDictUnificator.addItemData(aStack, new gregtech.api.objects.ItemData(Materials.Cheese, 3628800L, new MaterialStack[0]));
+ } else if (aOreDictName.equals("foodDough")) {
+ GT_ModHandler.removeFurnaceSmelting(aStack);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Food_Flat_Dough.get(1L, new Object[0]), 16, 4);
+
+ GT_Values.RA.addMixerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), null, null, null, null, ItemList.Food_Dough_Sugar.get(2L, new Object[0]), 32, 8);
+ GT_Values.RA.addMixerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L), null, null, null, null, ItemList.Food_Dough_Chocolate.get(2L, new Object[0]), 32, 8);
+ GT_Values.RA.addMixerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chocolate, 1L), null, null, null, null, ItemList.Food_Dough_Chocolate.get(2L, new Object[0]), 32, 8);
+
+ GT_Values.RA.addFormingPressRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Mold_Bun.get(0L, new Object[0]), ItemList.Food_Raw_Bun.get(1L, new Object[0]), 128, 4);
+ GT_Values.RA.addFormingPressRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Bread.get(0L, new Object[0]), ItemList.Food_Raw_Bread.get(1L, new Object[0]), 256, 4);
+ GT_Values.RA.addFormingPressRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), ItemList.Shape_Mold_Baguette.get(0L, new Object[0]), ItemList.Food_Raw_Baguette.get(1L, new Object[0]), 384, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java
new file mode 100644
index 0000000000..dc224f20ae
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGear()
+ {
+ OrePrefixes.gearGt.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ if (aMaterial.mStandardMoltenFluid != null) GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Gear.get(0L, new Object[0]), aMaterial.getMolten(576L), GT_OreDictUnificator.get(aPrefix, aMaterial, 1L), 128, 8);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGearSmall.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGearSmall.java
new file mode 100644
index 0000000000..4a403ff1a8
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGearSmall.java
@@ -0,0 +1,22 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGearSmall implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGearSmall()
+ {
+ OrePrefixes.gearGtSmall.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mStandardMoltenFluid != null) GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Gear_Small.get(0L, new Object[0]), aMaterial.getMolten(144L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 16, 8);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java
new file mode 100644
index 0000000000..33f2e0ac8d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java
@@ -0,0 +1,56 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGem()
+ {
+ OrePrefixes.gem.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) { GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower * 2, aMaterial.mFuelType);
+ }
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtGem, aMaterial, 1L), 100, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtGem, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1);
+
+ if (!OrePrefixes.block.isIgnored(aMaterial)) GT_ModHandler.addCompressionRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L));
+ if (!aMaterial.contains(SubTag.NO_SMELTING)) { GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L));
+ }
+ if (aMaterial.contains(SubTag.NO_SMASHING)) {
+ GT_Values.RA.addForgeHammerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L), 64, 16);
+ } else {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int)Math.max(aMaterial.getMass(), 1L), 16);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 24);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 4L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 5L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 9L, 1L), 96);
+ }
+
+ if (!aMaterial.contains(SubTag.NO_WORKING)) { GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L), (int)Math.max(aMaterial.getMass(), 1L), 16);
+ }
+ gregtech.api.util.GT_RecipeRegistrator.registerUsagesForMaterials(GT_Utility.copyAmount(1L, new Object[] { aStack }), OrePrefixes.plate.get(aMaterial).toString(), !aMaterial.contains(SubTag.NO_SMASHING));
+
+ switch (aMaterial) {
+ case _NULL:
+ break;
+ case Coal: case Charcoal: if (gregtech.api.GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Recipes.disabledrecipes, "torchesFromCoal", false)) GT_ModHandler.removeRecipe(new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, new ItemStack(net.minecraft.init.Items.stick, 1, 0) });
+ break;
+ case CertusQuartz:
+ GT_Values.RA.addElectrolyzerRecipe(aStack, 0, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 1), null, null, null, null, null, 2000, 30);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemChipped.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemChipped.java
new file mode 100644
index 0000000000..788b333945
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemChipped.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGemChipped implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGemChipped()
+ {
+ OrePrefixes.gemChipped.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower / 2, aMaterial.mFuelType);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 1L), (int)Math.max(aMaterial.getMass(), 1L), 8);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemExquisite.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemExquisite.java
new file mode 100644
index 0000000000..0d08921295
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemExquisite.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGemExquisite implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGemExquisite()
+ {
+ OrePrefixes.gemExquisite.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower * 8, aMaterial.mFuelType);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 3L), GT_OreDictUnificator.getDust(aMaterial, aPrefix.mMaterialAmount - OrePrefixes.stickLong.mMaterialAmount * 3L), (int)Math.max(aMaterial.getMass() * 10L, 1L), 16);
+ GT_Values.RA.addForgeHammerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L), 64, 16);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawed.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawed.java
new file mode 100644
index 0000000000..26a5eb414f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawed.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGemFlawed implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGemFlawed()
+ {
+ OrePrefixes.gemFlawed.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower, aMaterial.mFuelType);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 2L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L), (int)Math.max(aMaterial.getMass(), 1L), 12);
+ GT_Values.RA.addForgeHammerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L), 64, 16);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawless.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawless.java
new file mode 100644
index 0000000000..fd413de227
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGemFlawless.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingGemFlawless implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingGemFlawless()
+ {
+ OrePrefixes.gemFlawless.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower * 4, aMaterial.mFuelType);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L), GT_OreDictUnificator.getDust(aMaterial, aPrefix.mMaterialAmount - OrePrefixes.stickLong.mMaterialAmount), (int)Math.max(aMaterial.getMass() * 5L, 1L), 16);
+ GT_Values.RA.addForgeHammerRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L), 64, 16);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot1.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot1.java
new file mode 100644
index 0000000000..066e0d3dab
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot1.java
@@ -0,0 +1,63 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngot1 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngot1()
+ {
+ OrePrefixes.ingot.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mFuelPower > 0) { GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower, aMaterial.mFuelType);
+ }
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, aMaterial, 1L), 100, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1);
+
+ if (aMaterial.mStandardMoltenFluid != null) GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Ingot.get(0L, new Object[0]), aMaterial.getMolten(144L), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), 32, 8);
+ GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+ GT_RecipeRegistrator.registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false);
+ if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GT_RecipeRegistrator.registerReverseArcSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }), aMaterial, aPrefix.mMaterialAmount, null, null, null);
+ }
+ if (!aMaterial.contains(SubTag.NO_SMASHING)) {
+ GT_Values.RA.addWiremillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.copy(new Object[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L), GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 8L) }), 100, 4);
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int)Math.max(aMaterial.getMass(), 1L), 16);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 24);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 4L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 5L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 9L, 1L), 96);
+ }
+
+
+
+ if (!OrePrefixes.block.isIgnored(aMaterial)) GT_ModHandler.addCompressionRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L));
+ if (!aMaterial.contains(SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 2L), (int)Math.max(aMaterial.getMass() * 5L, 1L), 16);
+ if (!aMaterial.contains(SubTag.NO_SMELTING)) {
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Mold_Nugget.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 9L), 100, 1);
+ if ((GT_ModHandler.getSmeltingOutput(aStack, false, null) == null) && (GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 1L) != null) && (!GT_ModHandler.addSmeltingRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 9L)))) GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 9L), new Object[] { aOreDictName }); }
+ ItemStack tStack;
+ if ((null != (tStack = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))) && (
+ (aMaterial.mBlastFurnaceRequired) || (aMaterial.contains(SubTag.NO_SMELTING)))) { GT_ModHandler.removeFurnaceSmelting(tStack);
+ }
+
+ GT_RecipeRegistrator.registerUsagesForMaterials(GT_Utility.copyAmount(1L, new Object[] { aStack }), OrePrefixes.plate.get(aMaterial).toString(), !aMaterial.contains(SubTag.NO_SMASHING));
+
+ if (aMaterial == Materials.Mercury) {
+ System.err.println("Quicksilver Ingots?, Don't tell me there is an Armor made of that highly toxic and very likely to be melting Material!");
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot2.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot2.java
new file mode 100644
index 0000000000..9521a1ce83
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot2.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngot2 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngot2()
+ {
+ OrePrefixes.ingotDouble.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 96);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot3.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot3.java
new file mode 100644
index 0000000000..171f0746bf
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot3.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngot3 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngot3()
+ {
+ OrePrefixes.ingotTriple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L), 96);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot4.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot4.java
new file mode 100644
index 0000000000..d0a241680d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot4.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngot4 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngot4()
+ {
+ OrePrefixes.ingotQuadruple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 96);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot5.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot5.java
new file mode 100644
index 0000000000..d08e598897
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot5.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngot5 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngot5()
+ {
+ OrePrefixes.ingotQuintuple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 96);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngotHot.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngotHot.java
new file mode 100644
index 0000000000..939e4f2f1b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngotHot.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingIngotHot implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingIngotHot()
+ {
+ OrePrefixes.ingotHot.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addVacuumFreezerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java
new file mode 100644
index 0000000000..63d5c7715d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java
@@ -0,0 +1,70 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingItem implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingItem()
+ {
+ OrePrefixes.item.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (GT_OreDictUnificator.getItemData(aStack) == null)
+ {
+
+ if (!aOreDictName.equals("itemCertusQuartz"))
+ {
+
+ if (!aOreDictName.equals("itemNetherQuartz"))
+ {
+
+ if (aOreDictName.equals("itemSilicon")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Silicon, 3628800L, new MaterialStack[0]));
+ GT_Values.RA.addFormingPressRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 19), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 20), 200, 16);
+ }
+ else if (aOreDictName.equals("itemWheat")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Wheat, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemManganese")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Manganese, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemSalt")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Salt, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemMagnesium")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Magnesium, 3628800L, new MaterialStack[0]));
+ }
+ else if ((aOreDictName.equals("itemPhosphorite")) || (aOreDictName.equals("itemPhosphorus"))) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Phosphorus, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemSulfur")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Sulfur, 3628800L, new MaterialStack[0]));
+ }
+ else if ((aOreDictName.equals("itemAluminum")) || (aOreDictName.equals("itemAluminium"))) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Aluminium, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemSaltpeter")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Saltpeter, 3628800L, new MaterialStack[0]));
+ }
+ else if (aOreDictName.equals("itemUranium")) {
+ GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Uranium, 3628800L, new MaterialStack[0]));
+ }
+ else {
+ //System.out.println("Item Name: " + aOreDictName + " !!!Unknown Item detected!!! Please report to GregTech Intergalactical for additional compatiblity. This is not an Error, it's just an Information.");
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLeaves.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLeaves.java
new file mode 100644
index 0000000000..39d0cec058
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLeaves.java
@@ -0,0 +1,15 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingLeaves implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingLeaves()
+ {
+ OrePrefixes.treeLeaves.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) {}
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java
new file mode 100644
index 0000000000..0e00bb6cae
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.objects.GT_MultiTexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingLens implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingLens()
+ {
+ OrePrefixes.lens.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GregTech_API.registerCover(aStack, new GT_MultiTexture(new gregtech.api.interfaces.ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[2][0], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_LENS, aMaterial.mRGBa, false) }), new gregtech.common.covers.GT_Cover_Lens(aMaterial.mColor.mIndex));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java
new file mode 100644
index 0000000000..6d747ab018
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java
@@ -0,0 +1,86 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Proxy;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingLog()
+ {
+ OrePrefixes.log.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("logRubber")) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, Materials.Methane.getGas(60L), ItemList.IC2_Resin.get(1L, new Object[0]), GT_ModHandler.getIC2Item("plantBall", 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), null, null, new int[] { 5000, 3750, 2500, 2500 }, 200, 20);
+ GT_ModHandler.addSawmillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.IC2_Resin.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 16L));
+ GT_ModHandler.addExtractionRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L), ItemList.IC2_Resin.get(1L, new Object[0]), 33, false);
+ } else {
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), 80, false);
+ }
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 2L), gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "sLf", Character.valueOf('L'), GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+ GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), 160, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), Materials.SeedOil.getFluid(50L), ItemList.FR_Stick.get(1L, new Object[0]), 16, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), Materials.SeedOil.getFluid(250L), ItemList.FR_Casing_Impregnated.get(1L, new Object[0]), 64, 16);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Creosote.getFluid(1000L), GT_ModHandler.getModItem("Railcraft", "tile.railcraft.cube", 1L, 8), null, null, null, 16, 16);
+
+ int aMeta = aStack.getItemDamage();
+
+ if (aMeta == 32767) {
+ if ((GT_Utility.areStacksEqual(GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1L, new Object[] { aStack }), false, null), new ItemStack(Items.coal, 1, 1))) &&
+ (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "wood2charcoalsmelting", false))) { GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }));
+ }
+ for (int i = 0; i < 16; i++) {
+ if ((GT_Utility.areStacksEqual(GT_ModHandler.getSmeltingOutput(new ItemStack(aStack.getItem(), 1, i), false, null), new ItemStack(Items.coal, 1, 1))) &&
+ (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "wood2charcoalsmelting", false))) { GT_ModHandler.removeFurnaceSmelting(new ItemStack(aStack.getItem(), 1, i));
+ }
+ ItemStack tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(aStack.getItem(), 1, i) });
+ if (tStack != null) {
+ ItemStack tPlanks = GT_Utility.copy(new Object[] { tStack });
+ tPlanks.stackSize = (tPlanks.stackSize * 3 / 2);
+ GT_Values.RA.addCutterRecipe(new ItemStack(aStack.getItem(), 1, i), Materials.Lubricant.getFluid(1L), GT_Utility.copy(new Object[] { tPlanks }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), 200, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(aStack.getItem(), 1, i), GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4, new Object[] { tStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), 200, 8);
+ GT_ModHandler.addSawmillRecipe(new ItemStack(aStack.getItem(), 1, i), tPlanks, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L));
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(aStack.getItem(), 1, i) });
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4, new Object[] { tStack }), new Object[] { "s", "L", Character.valueOf('L'), new ItemStack(aStack.getItem(), 1, i) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(tStack.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), new Object[] { tStack }), new Object[] { new ItemStack(aStack.getItem(), 1, i) });
+ }
+ }
+ } else {
+ if ((GT_Utility.areStacksEqual(GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1L, new Object[] { aStack }), false, null), new ItemStack(Items.coal, 1, 1))) &&
+ (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "wood2charcoalsmelting", false))) { GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }));
+ }
+ ItemStack tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+ if (tStack != null) {
+ ItemStack tPlanks = GT_Utility.copy(new Object[] { tStack });
+ tPlanks.stackSize = (tPlanks.stackSize * 3 / 2);
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.Lubricant.getFluid(1L), GT_Utility.copy(new Object[] { tPlanks }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), 200, 8);
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4, new Object[] { tStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L), 200, 8);
+ GT_ModHandler.addSawmillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), tPlanks, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L));
+ GT_ModHandler.removeRecipe(new ItemStack[] { GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4, new Object[] { tStack }), new Object[] { "s", "L", Character.valueOf('L'), GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(tStack.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), new Object[] { tStack }), new Object[] { GT_Utility.copyAmount(1L, new Object[] { aStack }) });
+ }
+ }
+
+ if ((GT_Utility.areStacksEqual(GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1L, new Object[] { aStack }), false, null), new ItemStack(Items.coal, 1, 1))) &&
+ (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "wood2charcoalsmelting", false))) GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1L, new Object[] { aStack }));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java
new file mode 100644
index 0000000000..a28b6912c0
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java
@@ -0,0 +1,38 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_RecipeRegistrator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingNugget implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingNugget()
+ {
+ OrePrefixes.nugget.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial == Materials.Iron) GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 1L));
+ if (!aMaterial.contains(SubTag.NO_WORKING)) GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L), null, (int)Math.max(aMaterial.getMass() / 4L, 1L), 8);
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), aMaterial.contains(SubTag.SMELTING_TO_GEM) ? ItemList.Shape_Mold_Ball.get(0L, new Object[0]) : ItemList.Shape_Mold_Ingot.get(0L, new Object[0]), GT_OreDictUnificator.get(aMaterial.contains(SubTag.SMELTING_TO_GEM) ? OrePrefixes.gem : OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 200, 2);
+ if (aMaterial.mStandardMoltenFluid != null) GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Nugget.get(0L, new Object[0]), aMaterial.getMolten(16L), GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L), 16, 4);
+ GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+ GT_RecipeRegistrator.registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false);
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().matterCannon().registerAmmo(GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L), aMaterial.getMass());;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java
new file mode 100644
index 0000000000..7af18315ed
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java
@@ -0,0 +1,118 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import java.util.ArrayList;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingOre()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) if ((tPrefix.name().startsWith("ore")) && (tPrefix != OrePrefixes.orePoor) && (tPrefix != OrePrefixes.oreSmall) && (tPrefix != OrePrefixes.oreRich) && (tPrefix != OrePrefixes.oreNormal)) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ boolean tIsRich = (aPrefix == OrePrefixes.oreNether) || (aPrefix == OrePrefixes.oreEnd) || (aPrefix == OrePrefixes.oreDense);
+
+ if (aMaterial == Materials.Oilsands) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, Materials.Oil.getFluid(tIsRich ? 1000L : 500L), new ItemStack(net.minecraft.init.Blocks.sand, 1, 0), null, null, null, null, null, new int[] { tIsRich ? '?' : '?' }, tIsRich ? 2000 : 1000, 5);
+ } else {
+ registerStandardOreRecipes(aPrefix, aMaterial, GT_Utility.copyAmount(1L, new Object[] { aStack }), Math.max(1, gregtech.api.GregTech_API.sOPStuff.get(gregtech.api.enums.ConfigCategories.Materials.oreprocessingoutputmultiplier, aMaterial.toString(), 1)) * (tIsRich ? 2 : 1));
+ }
+ }
+
+ private ArrayList<Materials> mAlreadyListedOres = new ArrayList(1000);
+
+ private boolean registerStandardOreRecipes(OrePrefixes aPrefix, Materials aMaterial, ItemStack aOreStack, int aMultiplier) {
+ if ((aOreStack == null) || (aMaterial == null)) return false;
+ GT_ModHandler.addValuableOre(GT_Utility.getBlockFromStack(aOreStack), aOreStack.getItemDamage(), aMaterial.mOreValue);
+ Materials tMaterial = aMaterial.mOreReplacement;Materials tPrimaryByMaterial = null;Materials tSecondaryByMaterial = null;
+ aMultiplier = Math.max(1, aMultiplier);
+ aOreStack = GT_Utility.copyAmount(1L, new Object[] { aOreStack });
+ aOreStack.stackSize = 1;
+
+
+ ItemStack tIngot = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+ ItemStack tGem = GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial, 1L);
+ ItemStack tSmeltInto = tIngot == null ? null : aMaterial.contains(SubTag.SMELTING_TO_GEM) ? GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial.mDirectSmelting, GT_OreDictUnificator.get(OrePrefixes.crystal, tMaterial.mDirectSmelting, GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial, GT_OreDictUnificator.get(OrePrefixes.crystal, tMaterial, 1L), 1L), 1L), 1L) : tIngot;
+
+ ItemStack tSmall = GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMaterial, 1L);
+ ItemStack tDust = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, tGem, 1L);
+ ItemStack tCleaned = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, tMaterial, tDust, 1L);
+ ItemStack tCrushed = GT_OreDictUnificator.get(OrePrefixes.crushed, tMaterial, aMaterial.mOreMultiplier * aMultiplier);
+ ItemStack tPrimaryByProduct = null;ItemStack tPrimaryByProductSmall = null;ItemStack tSecondaryByProduct = null;ItemStack tSecondaryByProductSmall = null;
+
+ if (tCrushed == null) {
+ tCrushed = GT_OreDictUnificator.get(OrePrefixes.dustImpure, tMaterial, GT_Utility.copyAmount(aMaterial.mOreMultiplier * aMultiplier, new Object[] { tCleaned, tDust, tGem }), aMaterial.mOreMultiplier * aMultiplier);
+ }
+
+ ArrayList<ItemStack> tByProductStacks = new ArrayList();
+
+ for (Materials tMat : aMaterial.mOreByProducts) {
+ ItemStack tByProduct = GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+ if (tByProduct != null) tByProductStacks.add(tByProduct);
+ if (tPrimaryByProduct == null) {
+ tPrimaryByMaterial = tMat;
+ tPrimaryByProduct = GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+ tPrimaryByProductSmall = GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L);
+ if (tPrimaryByProductSmall == null) tPrimaryByProductSmall = GT_OreDictUnificator.get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+ }
+ if ((tSecondaryByProduct == null) || (tSecondaryByMaterial == tPrimaryByMaterial)) {
+ tSecondaryByMaterial = tMat;
+ tSecondaryByProduct = GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+ tSecondaryByProductSmall = GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L);
+ if (tSecondaryByProductSmall == null) { tSecondaryByProductSmall = GT_OreDictUnificator.get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+ }
+ }
+ }
+ if ((!tByProductStacks.isEmpty()) && (!this.mAlreadyListedOres.contains(aMaterial))) {
+ this.mAlreadyListedOres.add(aMaterial);
+ gregtech.api.util.GT_Recipe.GT_Recipe_Map.sByProductList.addFakeRecipe(false, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ore, aMaterial, aOreStack, 1L) }, (ItemStack[])tByProductStacks.toArray(new ItemStack[tByProductStacks.size()]), null, null, null, null, 0, 0, 0);
+ }
+
+ if (tPrimaryByMaterial == null) tPrimaryByMaterial = tMaterial;
+ if (tPrimaryByProduct == null) tPrimaryByProduct = tDust;
+ if (tPrimaryByProductSmall == null) { tPrimaryByProductSmall = tSmall;
+ }
+ if (tSecondaryByMaterial == null) tSecondaryByMaterial = tPrimaryByMaterial;
+ if (tSecondaryByProduct == null) tSecondaryByProduct = tPrimaryByProduct;
+ if (tSecondaryByProductSmall == null) { tSecondaryByProductSmall = tPrimaryByProductSmall;
+ }
+ boolean tHasSmelting = false;
+
+ if (tSmeltInto != null) {
+ if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
+ GT_ModHandler.removeFurnaceSmelting(aOreStack);
+ } else {
+ GT_ModHandler.addInductionSmelterRecipe(aOreStack, new ItemStack(net.minecraft.init.Blocks.sand, 1), GT_Utility.mul(aMultiplier * (aMaterial.contains(SubTag.INDUCTIONSMELTING_LOW_OUTPUT) ? 1 : 2) * aMaterial.mSmeltingMultiplier, new Object[] { tSmeltInto }), ItemList.TE_Slag_Rich.get(1L, new Object[0]), 300 * aMultiplier, 10 * aMultiplier);
+ GT_ModHandler.addInductionSmelterRecipe(aOreStack, ItemList.TE_Slag_Rich.get(aMultiplier, new Object[0]), GT_Utility.mul(aMultiplier * (aMaterial.contains(SubTag.INDUCTIONSMELTING_LOW_OUTPUT) ? 2 : 3) * aMaterial.mSmeltingMultiplier, new Object[] { tSmeltInto }), ItemList.TE_Slag.get(aMultiplier, new Object[0]), 300 * aMultiplier, 95);
+ tHasSmelting = GT_ModHandler.addSmeltingRecipe(aOreStack, GT_Utility.copyAmount(aMultiplier * aMaterial.mSmeltingMultiplier, new Object[] { tSmeltInto }));
+ }
+
+ if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_TRIPLE)) {
+ GT_Values.RA.addBlastRecipe(aOreStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier), null, null, GT_Utility.mul(aMultiplier * 3 * aMaterial.mSmeltingMultiplier, new Object[] { tSmeltInto }), ItemList.TE_Slag.get(1L, new Object[] { GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L) }), tSmeltInto.stackSize * 500, 120, 1500);
+ } else if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_DOUBLE)) {
+ GT_Values.RA.addBlastRecipe(aOreStack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier), null, null, GT_Utility.mul(aMultiplier * 2 * aMaterial.mSmeltingMultiplier, new Object[] { tSmeltInto }), ItemList.TE_Slag.get(1L, new Object[] { GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L) }), tSmeltInto.stackSize * 500, 120, 1500);
+ }
+ }
+
+ if (!tHasSmelting) {
+ tHasSmelting = GT_ModHandler.addSmeltingRecipe(aOreStack, GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial.mDirectSmelting, Math.max(1, aMultiplier * aMaterial.mSmeltingMultiplier / 2)));
+ }
+
+ if (tCrushed != null) {
+ GT_Values.RA.addForgeHammerRecipe(aOreStack, GT_Utility.copy(new Object[] { GT_Utility.copyAmount(tCrushed.stackSize, new Object[] { tGem }), tCrushed }), 16, 10);
+ GT_ModHandler.addPulverisationRecipe(aOreStack, GT_Utility.mul(2L, new Object[] { tCrushed }), tMaterial.contains(SubTag.PULVERIZING_CINNABAR) ? GT_OreDictUnificator.get(OrePrefixes.crystal, Materials.Cinnabar, GT_OreDictUnificator.get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1L, new Object[] { tPrimaryByProduct }), 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1L, new Object[] { tPrimaryByProduct }), 1L), tPrimaryByProduct == null ? 0 : tPrimaryByProduct.stackSize * 10 * aMultiplier * aMaterial.mByProductMultiplier, GT_OreDictUnificator.getDust(aPrefix.mSecondaryMaterial), 50, true);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java
new file mode 100644
index 0000000000..e901389866
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java
@@ -0,0 +1,36 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingOrePoor implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingOrePoor()
+ {
+ OrePrefixes.orePoor.add(this);
+ OrePrefixes.oreSmall.add(this);
+ OrePrefixes.oreNormal.add(this);
+ OrePrefixes.oreRich.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ int aMultiplier = 1;
+ switch (aPrefix) {
+ case oreSmall: aMultiplier = 1; break;
+ case orePoor: aMultiplier = 2; break;
+ case oreNormal: aMultiplier = 3; break;
+ case oreRich: aMultiplier = 4;
+ }
+ if (aMaterial != null) {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, aMultiplier), 16, 10);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 2 * aMultiplier), GT_OreDictUnificator.get(OrePrefixes.dustTiny, GT_Utility.selectItemInList(0, aMaterial, aMaterial.mOreByProducts), 1L), 5 * aMultiplier, GT_OreDictUnificator.getDust(aPrefix.mSecondaryMaterial), 100, true);
+ if (aMaterial.contains(gregtech.api.enums.SubTag.NO_SMELTING)) GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mDirectSmelting, aMultiplier));
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java
new file mode 100644
index 0000000000..93e24bc336
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java
@@ -0,0 +1,42 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ private final OrePrefixes[] mSmeltingPrefixes = { OrePrefixes.crushed, OrePrefixes.crushedPurified, OrePrefixes.crushedCentrifuged, OrePrefixes.dustImpure, OrePrefixes.dustPure, OrePrefixes.dustRefined };
+
+ public ProcessingOreSmelting() {
+ for (OrePrefixes tPrefix : this.mSmeltingPrefixes) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeFurnaceSmelting(aStack);
+ if (!aMaterial.contains(SubTag.NO_SMELTING)) {
+ if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
+ GT_Values.RA.addBlastRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), null, (int)Math.max(aMaterial.getMass() / 4L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial.mBlastFurnaceTemp);
+ if (aMaterial.mBlastFurnaceTemp <= 1000) GT_ModHandler.addRCBlastFurnaceRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), aMaterial.mBlastFurnaceTemp * 2);
+ } else {
+ switch (aPrefix) {
+ case crushed: case crushedPurified: case crushedCentrifuged:
+ ItemStack tStack = GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mDirectSmelting, aMaterial.mDirectSmelting == aMaterial ? 10L : 3L);
+ if (tStack == null) tStack = GT_OreDictUnificator.get(aMaterial.contains(SubTag.SMELTING_TO_GEM) ? OrePrefixes.gem : OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+ if ((tStack == null) && (!aMaterial.contains(SubTag.SMELTING_TO_GEM))) tStack = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+ GT_ModHandler.addSmeltingRecipe(aStack, tStack);
+ break;
+ default:
+ GT_ModHandler.addSmeltingRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L));
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeLarge.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeLarge.java
new file mode 100644
index 0000000000..a149407bca
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeLarge.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPipeLarge implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPipeLarge()
+ {
+ OrePrefixes.pipeLarge.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if ((!aMaterial.contains(SubTag.NO_WORKING)) && ((aMaterial.contains(SubTag.WOOD)) || (!aMaterial.contains(SubTag.NO_SMASHING)))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PHP", "P P", "PWP", Character.valueOf('P'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial) : OrePrefixes.plate.get(aMaterial), Character.valueOf('H'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSoftHammer : ToolDictNames.craftingToolHardHammer, Character.valueOf('W'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw : ToolDictNames.craftingToolWrench });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeMedium.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeMedium.java
new file mode 100644
index 0000000000..229b72ddf0
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeMedium.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPipeMedium implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPipeMedium()
+ {
+ OrePrefixes.pipeMedium.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if ((!aMaterial.contains(SubTag.NO_WORKING)) && ((aMaterial.contains(SubTag.WOOD)) || (!aMaterial.contains(SubTag.NO_SMASHING)))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "W H", "PPP", Character.valueOf('P'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial) : OrePrefixes.plate.get(aMaterial), Character.valueOf('H'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSoftHammer : ToolDictNames.craftingToolHardHammer, Character.valueOf('W'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw : ToolDictNames.craftingToolWrench });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeRestrictive.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeRestrictive.java
new file mode 100644
index 0000000000..b38a58a55f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeRestrictive.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPipeRestrictive implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPipeRestrictive()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) if (tPrefix.name().startsWith("pipeRestrictive")) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ gregtech.api.enums.GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(aOreDictName.replaceFirst("Restrictive", ""), null, 1L, false, true), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Steel, aPrefix.mSecondaryMaterial.mAmount / OrePrefixes.ring.mMaterialAmount), GT_Utility.copyAmount(1L, new Object[] { aStack }), (int)(aPrefix.mSecondaryMaterial.mAmount * 400L / OrePrefixes.ring.mMaterialAmount), 4);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeSmall.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeSmall.java
new file mode 100644
index 0000000000..d95a2b908f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipeSmall.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPipeSmall implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPipeSmall()
+ {
+ OrePrefixes.pipeSmall.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if ((!aMaterial.contains(SubTag.NO_WORKING)) && ((aMaterial.contains(SubTag.WOOD)) || (!aMaterial.contains(SubTag.NO_SMASHING)))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(6L, new Object[] { aStack }), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PWP", "P P", "PHP", Character.valueOf('P'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial) : OrePrefixes.plate.get(aMaterial), Character.valueOf('H'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSoftHammer : ToolDictNames.craftingToolHardHammer, Character.valueOf('W'), aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw : ToolDictNames.craftingToolWrench });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java
new file mode 100644
index 0000000000..22d4e88cee
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java
@@ -0,0 +1,59 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlank implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlank()
+ {
+ OrePrefixes.plank.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.startsWith("plankWood")) {
+ GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), null, 10, 8);
+ GT_Values.RA.addCNCRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Wood, 1L), 800, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), new ItemStack(Blocks.noteblock, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 1L), new ItemStack(Blocks.jukebox, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 1L), ItemList.Crate_Empty.get(1L, new Object[0]), 200, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.screw, Materials.WroughtIron, 1L), ItemList.Crate_Empty.get(1L, new Object[0]), 200, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 1L), ItemList.Crate_Empty.get(1L, new Object[0]), 200, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.wooden_button, 1), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new ItemStack(Blocks.wooden_pressure_plate, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new ItemStack(Blocks.trapdoor, 1), 300, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new ItemStack(Blocks.crafting_table, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(6L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new ItemStack(Items.wooden_door, 1), 600, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), new ItemStack(Blocks.chest, 1), 800, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(6L, new Object[] { aStack }), new ItemStack(Items.book, 3), new ItemStack(Blocks.bookshelf, 1), 400, 4);
+
+ if (aStack.getItemDamage() == 32767) {
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ ItemStack tStack = GT_Utility.copyMetaData(i, new Object[] { aStack });ItemStack tOutput = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack, tStack, tStack });
+ if ((tOutput != null) && (tOutput.stackSize >= 3)) {
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { tStack }), GT_Utility.copyAmount(tOutput.stackSize / 3, new Object[] { tOutput }), null, 25, 4);
+ GT_ModHandler.removeRecipe(new ItemStack[] { tStack, tStack, tStack });
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(tOutput.stackSize / 3, new Object[] { tOutput }), new Object[] { "sP", Character.valueOf('P'), tStack });
+ }
+ }
+ } else {
+ ItemStack tOutput = GT_ModHandler.getRecipeOutput(new ItemStack[] { aStack, aStack, aStack });
+ if ((tOutput != null) && (tOutput.stackSize >= 3)) {
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.copyAmount(tOutput.stackSize / 3, new Object[] { tOutput }), null, 25, 4);
+ GT_ModHandler.removeRecipe(new ItemStack[] { aStack, aStack, aStack });
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(tOutput.stackSize / 3, new Object[] { tOutput }), new Object[] { "sP", Character.valueOf('P'), aStack });
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate1.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate1.java
new file mode 100644
index 0000000000..96fe6a47f0
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate1.java
@@ -0,0 +1,67 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate1 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlate1()
+ {
+ OrePrefixes.plate.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GT_ModHandler.removeRecipe(new ItemStack[] { aStack });
+
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtPlate, aMaterial, 1L), 100, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtPlate, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1);
+
+ if (aMaterial.mStandardMoltenFluid != null) { GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Plate.get(0L, new Object[0]), aMaterial.getMolten(144L), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), 32, 8);
+ }
+ switch (aMaterial) {
+ case Iron: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.iron_block, 1, 0), null); break;
+ case Gold: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.gold_block, 1, 0), null); break;
+ case Diamond: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.diamond_block, 1, 0), null); break;
+ case Emerald: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.emerald_block, 1, 0), null); break;
+ case Lapis: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.lapis_block, 1, 0), null); break;
+ case Coal: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.coal_block, 1, 0), null); break;
+ case Redstone: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.redstone_block, 1, 0), null); break;
+ case Glowstone: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.glowstone, 1, 0), null); break;
+ case NetherQuartz: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.quartz_block, 1, 0), null); break;
+ case Obsidian: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.obsidian, 1, 0), null); break;
+ case Stone: GregTech_API.registerCover(aStack, new GT_CopiedBlockTexture(Blocks.stone, 1, 0), null); break;
+ case GraniteBlack: GregTech_API.registerCover(aStack, new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.GRANITE_BLACK_SMOOTH), null); break;
+ case GraniteRed: GregTech_API.registerCover(aStack, new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.GRANITE_RED_SMOOTH), null); break;
+ case Concrete: GregTech_API.registerCover(aStack, new GT_RenderedTexture(gregtech.api.enums.Textures.BlockIcons.CONCRETE_LIGHT_SMOOTH), null); break;
+ default: GregTech_API.registerCover(aStack, new GT_RenderedTexture(aMaterial.mIconSet.mTextures[71], aMaterial.mRGBa, false), null);
+ }
+
+ if (aMaterial.mFuelPower > 0) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, aMaterial.mFuelPower, aMaterial.mFuelType);
+ GT_Utility.removeSimpleIC2MachineRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_ModHandler.getCompressorRecipeList(), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L));
+ GT_Values.RA.addImplosionRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), 2 , GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny,Materials.DarkAsh,1L));
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) { GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L), (int)Math.max(aMaterial.getMass() / 2L, 1L), 16);
+ }
+ if (aMaterial == Materials.Paper) GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Recipes.harderrecipes, aStack, true) ? 2L : 3L, new Object[] { aStack }), new Object[] { "XXX", Character.valueOf('X'), new ItemStack(net.minecraft.init.Items.reeds, 1, 32767) });
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, 4L), (int)Math.max(aMaterial.getMass() * 1L, 1L), 24);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 4L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 5L, 1L), 96);
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 9L, 1L), 96);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate2.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate2.java
new file mode 100644
index 0000000000..c64ba8a85f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate2.java
@@ -0,0 +1,36 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate2 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlate2()
+ {
+ OrePrefixes.plateDouble.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+
+ GregTech_API.registerCover(aStack, new gregtech.api.objects.GT_RenderedTexture(aMaterial.mIconSet.mTextures[72], aMaterial.mRGBa, false), null);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 96);
+ }
+ if ((!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) && (GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Tools.hammerdoubleplate, OrePrefixes.plate.get(aMaterial).toString(), true))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.plate.get(aMaterial), Character.valueOf('B'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial) });
+ } else {
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L), gregtech.api.enums.ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), Materials.Glue.getFluid(10L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 64, 8);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate3.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate3.java
new file mode 100644
index 0000000000..4c0a4bc3c7
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate3.java
@@ -0,0 +1,36 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate3 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlate3()
+ {
+ OrePrefixes.plateTriple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+
+ GregTech_API.registerCover(aStack, new gregtech.api.objects.GT_RenderedTexture(aMaterial.mIconSet.mTextures[73], aMaterial.mRGBa, false), null);
+
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 3L, 1L), 96);
+ }
+ if ((!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) && (GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Tools.hammertripleplate, OrePrefixes.plate.get(aMaterial).toString(), true))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.plateDouble.get(aMaterial), Character.valueOf('B'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial) });
+ } else {
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 3L), gregtech.api.enums.ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), Materials.Glue.getFluid(20L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 96, 8);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate4.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate4.java
new file mode 100644
index 0000000000..a9c6fab4c7
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate4.java
@@ -0,0 +1,32 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate4 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlate4()
+ {
+ OrePrefixes.plateQuadruple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GregTech_API.registerCover(aStack, new gregtech.api.objects.GT_RenderedTexture(aMaterial.mIconSet.mTextures[74], aMaterial.mRGBa, false), null);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addCNCRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L), (int)Math.max(aMaterial.getMass() * 2L, 1L), 32);
+ if ((!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) && (GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Tools.hammerquadrupleplate, OrePrefixes.plate.get(aMaterial).toString(), true))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.plateTriple.get(aMaterial), Character.valueOf('B'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial) });
+ } else {
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L), gregtech.api.enums.ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), Materials.Glue.getFluid(30L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 128, 8);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate5.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate5.java
new file mode 100644
index 0000000000..602c96f750
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate5.java
@@ -0,0 +1,31 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate5 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlate5()
+ {
+ OrePrefixes.plateQuintuple.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GregTech_API.registerCover(aStack, new gregtech.api.objects.GT_RenderedTexture(aMaterial.mIconSet.mTextures[75], aMaterial.mRGBa, false), null);
+ if ((!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) && (GregTech_API.sRecipeFile.get(gregtech.api.enums.ConfigCategories.Tools.hammerquintupleplate, OrePrefixes.plate.get(aMaterial).toString(), true))) {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "I", "B", "h", Character.valueOf('I'), OrePrefixes.plateQuadruple.get(aMaterial), Character.valueOf('B'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { ToolDictNames.craftingToolForgeHammer, OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial), OrePrefixes.plate.get(aMaterial) });
+ } else {
+ gregtech.api.enums.GT_Values.RA.addAssemblerRecipe(gregtech.api.util.GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 5L), ItemList.Circuit_Integrated.getWithDamage(0L, 5L, new Object[0]), Materials.Glue.getFluid(40L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 160, 8);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate9.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate9.java
new file mode 100644
index 0000000000..e4e7241404
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate9.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_ModHandler;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlate9 implements IOreRecipeRegistrator
+{
+ public ProcessingPlate9()
+ {
+ OrePrefixes.plateDense.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ GregTech_API.registerCover(aStack, new GT_RenderedTexture(aMaterial.mIconSet.mTextures[76], aMaterial.mRGBa, false), null);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlateAlloy.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlateAlloy.java
new file mode 100644
index 0000000000..16dacfe822
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlateAlloy.java
@@ -0,0 +1,33 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPlateAlloy implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPlateAlloy()
+ {
+ OrePrefixes.plateAlloy.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("plateAlloyCarbon")) {
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("generator", 1L), GT_Utility.copyAmount(4L, new Object[] { aStack }), GT_ModHandler.getIC2Item("windMill", 1L), 6400, 8);
+ }
+ else if (aOreDictName.equals("plateAlloyAdvanced")) {
+ GT_ModHandler.addAlloySmelterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack(Blocks.glass, 3, 32767), GT_ModHandler.getIC2Item("reinforcedGlass", 4L), 400, 4, false);
+ GT_ModHandler.addAlloySmelterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 3L), GT_ModHandler.getIC2Item("reinforcedGlass", 4L), 400, 4, false);
+ }
+ else if (aOreDictName.equals("plateAlloyIridium")) {
+ GT_ModHandler.removeRecipeByOutput(aStack);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java
new file mode 100644
index 0000000000..c1b8aec791
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingPure implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingPure()
+ {
+ OrePrefixes.crushedPurified.add(this);
+ OrePrefixes.cleanGravel.add(this);
+ OrePrefixes.reduced.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), 10, 16);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), 1L), GT_OreDictUnificator.get(OrePrefixes.dust, GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts), 1L), 10, false);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java
new file mode 100644
index 0000000000..66efcc6309
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingRecycling implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingRecycling()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) if ((tPrefix.mIsMaterialBased) && (tPrefix.mMaterialAmount > 0L) && (tPrefix.mIsContainer)) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if ((aMaterial != Materials.Empty) && (GT_Utility.getFluidForFilledItem(aStack, true) == null)) GT_Values.RA.addCannerRecipe(aStack, null, GT_Utility.getContainerItem(aStack, true), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, aPrefix.mMaterialAmount / 3628800L), (int)Math.max(aMaterial.getMass() / 2L, 1L), 2);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java
new file mode 100644
index 0000000000..1cb9eca0df
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java
@@ -0,0 +1,27 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingSand implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingSand()
+ {
+ OrePrefixes.sand.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("sandCracked")) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), -1, gregtech.api.util.GT_ModHandler.getFuelCan(25000), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 8L), null, null, null, new ItemStack(Blocks.sand, 10), 2500);
+ } else if (aOreDictName.equals("sandOil")) {
+ GT_Values.RA.addCentrifugeRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), 1, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L), new ItemStack(Blocks.sand, 1, 0), null, null, null, null, 1000);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java
new file mode 100644
index 0000000000..53b4f6fdfa
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingSaplings implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingSaplings()
+ {
+ OrePrefixes.treeSapling.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L), null, 0, false);
+ GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Wood, 1L), 16, 8);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
new file mode 100644
index 0000000000..7c601eeba2
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
@@ -0,0 +1,107 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingShaping()
+ {
+ OrePrefixes.ingot.add(this);
+ OrePrefixes.dust.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (((aMaterial == Materials.Glass) || (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null)) && (!aMaterial.contains(SubTag.NO_SMELTING))) {
+ int tAmount = (int)(aPrefix.mMaterialAmount / 3628800L);
+ if ((tAmount > 0) && (tAmount <= 64) && (aPrefix.mMaterialAmount % 3628800L == 0L)) {
+ int tVoltageMultiplier = aMaterial.mBlastFurnaceTemp >= 2800 ? 64 : 16;
+
+ if (aMaterial.contains(SubTag.NO_SMASHING)) {
+ tVoltageMultiplier /= 4;
+ }
+ else if (aPrefix.name().startsWith(OrePrefixes.dust.name())) { return;
+ }
+
+ if (!OrePrefixes.block.isIgnored(aMaterial.mSmeltInto)) {
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), ItemList.Shape_Extruder_Block.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount), 10 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(9L, new Object[] { aStack }), ItemList.Shape_Mold_Block.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount), 5 * tAmount, 4 * tVoltageMultiplier);
+ }
+ if ((aPrefix != OrePrefixes.ingot) || (aMaterial != aMaterial.mSmeltInto)) {
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Ingot.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, tAmount), 10, 4 * tVoltageMultiplier);
+ }
+
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Pipe_Tiny.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, tAmount * 2), 4 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Pipe_Small.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, tAmount), 8 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), ItemList.Shape_Extruder_Pipe_Medium.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, tAmount), 24 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(6L, new Object[] { aStack }), ItemList.Shape_Extruder_Pipe_Large.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, tAmount), 48 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(12L, new Object[] { aStack }), ItemList.Shape_Extruder_Pipe_Huge.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, tAmount), 96 * tAmount, 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Plate.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 1L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Rod.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 6 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Wire.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, tAmount * 2), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 6 * tVoltageMultiplier);
+ if (tAmount * 8 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Bolt.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, tAmount * 8), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ if (tAmount * 4 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Ring.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, tAmount * 4), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 6 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Extruder_Sword.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), ItemList.Shape_Extruder_Pickaxe.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 3L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Shovel.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 1L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), ItemList.Shape_Extruder_Axe.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 3L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Extruder_Hoe.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(6L, new Object[] { aStack }), ItemList.Shape_Extruder_Hammer.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 6L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Extruder_File.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Extruder_Saw.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 8 * tVoltageMultiplier);
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), ItemList.Shape_Extruder_Gear.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 5L * tAmount, tAmount), 8 * tVoltageMultiplier);
+
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Plate.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 2L * tAmount, tAmount), 2 * tVoltageMultiplier);
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.Shape_Mold_Gear.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount), (int)Math.max(aMaterial.getMass() * 10L * tAmount, tAmount), 2 * tVoltageMultiplier);
+ switch (aMaterial.mSmeltInto) {
+ case Glass:
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Bottle.get(0L, new Object[0]), new ItemStack(Items.glass_bottle, 1), tAmount * 32, 16);
+ GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Mold_Bottle.get(0L, new Object[0]), new ItemStack(Items.glass_bottle, 1), tAmount * 64, 4);
+ break;
+ case Steel:
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingadviron", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingadviron", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ case Iron: case WroughtIron:
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Cell.get(0L, new Object[0]), GT_ModHandler.getIC2Item("fuelRod", tAmount), tAmount * 128, 32);
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingiron", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingiron", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ if (tAmount * 31 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(31L, new Object[] { aStack }), ItemList.Shape_Mold_Anvil.get(0L, new Object[0]), new ItemStack(Blocks.anvil, 1, 0), tAmount * 512, 4 * tVoltageMultiplier);
+ break;
+ case Tin:
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Extruder_Cell.get(0L, new Object[0]), ItemList.Cell_Empty.get(tAmount, new Object[0]), tAmount * 128, 32);
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingtin", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingtin", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ case Lead:
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casinglead", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casinglead", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ case Copper: case AnnealedCopper:
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingcopper", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingcopper", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ case Bronze:
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingbronze", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casingbronze", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ case Gold:
+ if (tAmount * 2 <= 64) GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Shape_Extruder_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casinggold", tAmount * 2), tAmount * 32, 3 * tVoltageMultiplier);
+ if (tAmount * 2 <= 64) GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Shape_Mold_Casing.get(0L, new Object[0]), GT_ModHandler.getIC2Item("casinggold", tAmount * 3), tAmount * 128, 1 * tVoltageMultiplier);
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java
new file mode 100644
index 0000000000..a79ce45fb3
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingSlab implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingSlab()
+ {
+ OrePrefixes.slab.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.startsWith("slabWood")) {
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), Materials.Creosote.getFluid(1000L), ItemList.RC_Tie_Wood.get(1L, new Object[0]), null, null, null, 200, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java
new file mode 100644
index 0000000000..6a1084fe28
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java
@@ -0,0 +1,26 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingStick()
+ {
+ OrePrefixes.stick.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L), null, (int)Math.max(aMaterial.getMass() * 2L, 1L), 4);
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L), (int)Math.max(aMaterial.getMass(), 1L), 16);
+ GT_Values.RA.addWiremillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_Utility.copy(new Object[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L) }), 50, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java
new file mode 100644
index 0000000000..b3249e9435
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingStickLong()
+ {
+ OrePrefixes.stickLong.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (!aMaterial.contains(SubTag.NO_WORKING)) GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L), null, (int)Math.max(aMaterial.getMass(), 1L), 4);
+ if (!aMaterial.contains(SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L), 200, 16);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java
new file mode 100644
index 0000000000..c581536e3d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java
@@ -0,0 +1,72 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingStone
+ implements IOreRecipeRegistrator
+{
+ public ProcessingStone()
+ {
+ OrePrefixes.stone.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ Block aBlock = GT_Utility.getBlockFromStack(aStack);
+ switch (aMaterial) {
+ case _NULL:
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(3L, new Object[] { aStack }), new ItemStack(Blocks.redstone_torch, 2), Materials.Redstone.getMolten(144L), new ItemStack(Items.repeater, 1), 100, 4);
+ break;
+ case Sand:
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new ItemStack(Blocks.sand, 1, 0), null, 10, false);
+ break;
+ case Endstone:
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Endstone, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungsten, 1L), 5, false);
+ break;
+ case Netherrack:
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Netherrack, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L), 5, false);
+ break;
+ case NetherBrick:
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.nether_brick_fence, 1), 100, 4);
+ break;
+ case Obsidian:
+ if (aBlock != Blocks.air) aBlock.setResistance(20.0F);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_Utility.copyAmount(5L, new Object[] { aStack }), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 6), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1L), GT_Utility.copyAmount(3L, new Object[] { aStack }), Materials.Glass.getMolten(720L), new ItemStack(Blocks.beacon, 1, 0), 32, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.IC2_Compressed_Coal_Ball.get(8L, new Object[0]), ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1L), new ItemStack(Blocks.ender_chest, 1), 400, 4);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_ModHandler.getModItem("Railcraft", "cube.crushed.obsidian", 1L, GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L)), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), 10, true);
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), null, 200, 32);
+ break;
+ case Concrete:
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), null, 100, 32);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L));
+ break;
+ case Redrock: case Marble: case Basalt: case Quartzite:
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), 10, false);
+ break;
+ case Flint:
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 2L), new ItemStack(Items.flint, 1), 50, false);
+ break;
+ case GraniteBlack:
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), null, 200, 32);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1L), 1, false);
+ break;
+ case GraniteRed:
+ GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), null, 200, 32);
+ GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Uranium, 1L), 1, false);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java
new file mode 100644
index 0000000000..75cc12fc76
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java
@@ -0,0 +1,28 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingStoneCobble implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingStoneCobble()
+ {
+ OrePrefixes.stoneCobble.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Blocks.lever, 1), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), new ItemStack(Blocks.furnace, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(7L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), new ItemStack(Blocks.dropper, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(7L, new Object[] { aStack }), new ItemStack(Items.bow, 1, 0), Materials.Redstone.getMolten(144L), new ItemStack(Blocks.dispenser, 1), 400, 4);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneVarious.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneVarious.java
new file mode 100644
index 0000000000..a3bc85037c
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneVarious.java
@@ -0,0 +1,32 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingStoneVarious implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingStoneVarious()
+ {
+ OrePrefixes.stone.add(this);
+ OrePrefixes.stoneCobble.add(this);
+ OrePrefixes.stoneBricks.add(this);
+ OrePrefixes.stoneChiseled.add(this);
+ OrePrefixes.stoneCracked.add(this);
+ OrePrefixes.stoneMossy.add(this);
+ OrePrefixes.stoneMossyBricks.add(this);
+ OrePrefixes.stoneSmooth.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, gregtech.api.enums.Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aPrefix == OrePrefixes.stoneSmooth) {
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.stone_button, 1), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new ItemStack(Blocks.stone_pressure_plate, 1), 200, 4);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadArrow.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadArrow.java
new file mode 100644
index 0000000000..2824a17b4e
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadArrow.java
@@ -0,0 +1,22 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadArrow implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadArrow()
+ {
+ OrePrefixes.toolHeadArrow.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aMaterial.mStandardMoltenFluid != null) GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Arrow.get(0L, new Object[0]), aMaterial.getMolten(36L), GT_Utility.copyAmount(1L, new Object[] { aStack }), 16, 4);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadAxe.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadAxe.java
new file mode 100644
index 0000000000..8c6ac19bfd
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadAxe.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadAxe implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadAxe()
+ {
+ OrePrefixes.toolHeadAxe.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(6, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadBuzzSaw.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadBuzzSaw.java
new file mode 100644
index 0000000000..77ea257e8d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadBuzzSaw.java
@@ -0,0 +1,24 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadBuzzSaw implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadBuzzSaw()
+ {
+ OrePrefixes.toolHeadBuzzSaw.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(140, 1, aMaterial, Materials.StainlessSteel, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PBM", "dXG", "SGP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(140, 1, aMaterial, Materials.StainlessSteel, new long[] { 75000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PBM", "dXG", "SGP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(140, 1, aMaterial, Materials.StainlessSteel, new long[] { 50000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PBM", "dXG", "SGP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadChainsaw.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadChainsaw.java
new file mode 100644
index 0000000000..f61b8d0ce6
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadChainsaw.java
@@ -0,0 +1,30 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadChainsaw implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadChainsaw()
+ {
+ OrePrefixes.toolHeadChainsaw.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(110, 1, aMaterial, Materials.StainlessSteel, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(112, 1, aMaterial, Materials.Titanium, new long[] { 400000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(114, 1, aMaterial, Materials.TungstenSteel, new long[] { 1600000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(110, 1, aMaterial, Materials.StainlessSteel, new long[] { 75000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(112, 1, aMaterial, Materials.Titanium, new long[] { 300000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(114, 1, aMaterial, Materials.TungstenSteel, new long[] { 1200000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(110, 1, aMaterial, Materials.StainlessSteel, new long[] { 50000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(112, 1, aMaterial, Materials.Titanium, new long[] { 200000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(114, 1, aMaterial, Materials.TungstenSteel, new long[] { 800000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadDrill.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadDrill.java
new file mode 100644
index 0000000000..d58cab1c51
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadDrill.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadDrill implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadDrill()
+ {
+ OrePrefixes.toolHeadDrill.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(100, 1, aMaterial, Materials.StainlessSteel, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(100, 1, aMaterial, Materials.StainlessSteel, new long[] { 75000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(100, 1, aMaterial, Materials.StainlessSteel, new long[] { 50000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(102, 1, aMaterial, Materials.Titanium, new long[] { 400000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(102, 1, aMaterial, Materials.Titanium, new long[] { 300000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(102, 1, aMaterial, Materials.Titanium, new long[] { 200000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(104, 1, aMaterial, Materials.TungstenSteel, new long[] { 1600000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(104, 1, aMaterial, Materials.TungstenSteel, new long[] { 1200000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(104, 1, aMaterial, Materials.TungstenSteel, new long[] { 800000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]) });
+
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(130, 1, aMaterial, Materials.Titanium, new long[] { 1600000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "PRP", "MPB", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Piston_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('R'), OrePrefixes.spring.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(130, 1, aMaterial, Materials.Titanium, new long[] { 1200000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "PRP", "MPB", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Piston_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('R'), OrePrefixes.spring.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(130, 1, aMaterial, Materials.Titanium, new long[] { 800000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "PRP", "MPB", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Piston_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('R'), OrePrefixes.spring.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadFile.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadFile.java
new file mode 100644
index 0000000000..f89367b418
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadFile.java
@@ -0,0 +1,25 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadFile implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadFile()
+ {
+ OrePrefixes.toolHeadFile.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(18, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ if ((!aMaterial.contains(SubTag.NO_SMASHING)) && (!aMaterial.contains(SubTag.BOUNCY))) {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(18, 1, aMaterial, aMaterial.mHandleMaterial, null), GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "P", "P", "S", Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('S'), OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHammer.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHammer.java
new file mode 100644
index 0000000000..c459495b29
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHammer.java
@@ -0,0 +1,53 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadHammer implements IOreRecipeRegistrator
+{
+ public ProcessingToolHeadHammer()
+ {
+ OrePrefixes.toolHeadHammer.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if ((aMaterial != Materials.Stone) && (aMaterial != Materials.Flint)) {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats((aMaterial.contains(SubTag.BOUNCY)) || (aMaterial.contains(SubTag.WOOD)) ? 14 : 12, 1, aMaterial, aMaterial.mHandleMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats((aMaterial.contains(SubTag.BOUNCY)) || (aMaterial.contains(SubTag.WOOD)) ? 14 : 12, 1, aMaterial, aMaterial.mHandleMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XX ", "XXS", "XX ", Character.valueOf('X'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(Materials.Wood) : OrePrefixes.ingot.get(aMaterial), Character.valueOf('S'), OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats((aMaterial.contains(SubTag.BOUNCY)) || (aMaterial.contains(SubTag.WOOD)) ? 14 : 12, 1, aMaterial, aMaterial.mHandleMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XX ", "XXS", "XX ", Character.valueOf('X'), aMaterial == Materials.Wood ? OrePrefixes.plank.get(Materials.Wood) : OrePrefixes.gem.get(aMaterial), Character.valueOf('S'), OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ if (aMaterial != Materials.Rubber) GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(44, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "xRR", " SR", "S f", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Rubber) });
+ if ((!aMaterial.contains(SubTag.WOOD)) && (!aMaterial.contains(SubTag.BOUNCY)) && (!aMaterial.contains(SubTag.NO_SMASHING))) {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(16, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "IhI", "III", " I ", Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(20, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "hDS", "DSD", "SDf", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('D'), Dyes.dyeBlue });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(22, 1, aMaterial, aMaterial.mHandleMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " fS", " Sh", "W ", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('W'), OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(26, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PfP", "hPd", "STS", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('T'), OrePrefixes.screw.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(28, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SWS", "SSS", "xSh", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('W'), new ItemStack(Blocks.wool, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(30, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PfP", "PdP", "STS", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), Character.valueOf('T'), OrePrefixes.screw.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(34, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "fPh", " S ", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('P'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(36, 1, aMaterial, aMaterial, null), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPf", "PP ", "Sh ", Character.valueOf('S'), OrePrefixes.stick.get(aMaterial), Character.valueOf('P'), OrePrefixes.plate.get(aMaterial) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(160, 1, aMaterial, Materials.Rubber, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "LBf", "Sd ", "P ", 'B', OrePrefixes.bolt.get(aMaterial), 'P', OrePrefixes.plate.get(Materials.Rubber),'S',OrePrefixes.stick.get(Materials.Iron),'L',ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+
+// GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(1L,OrePrefixes.turbineBlade.get(aMaterial)), gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "B", "B", "B", 'S', OrePrefixes.screw.get(aMaterial), 'B', OrePrefixes.plate.get(aMaterial) });
+
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 4L),GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Magnalium, 1L),GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(170, 1, aMaterial, aMaterial, null), 160, 100);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 8L),GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 1L),GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(172, 1, aMaterial, aMaterial, null), 320, 400);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 12L),GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 1L),GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(174, 1, aMaterial, aMaterial, null), 640, 1600);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 16L),GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Americium, 1L),GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(176, 1, aMaterial, aMaterial, null), 1280, 6400);
+}
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHoe.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHoe.java
new file mode 100644
index 0000000000..c1cbd49738
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadHoe.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadHoe implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadHoe()
+ {
+ OrePrefixes.toolHeadHoe.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(8, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPickaxe.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPickaxe.java
new file mode 100644
index 0000000000..d5ff3c78c5
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPickaxe.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadPickaxe implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadPickaxe()
+ {
+ OrePrefixes.toolHeadPickaxe.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(2, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPlow.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPlow.java
new file mode 100644
index 0000000000..3f758089eb
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadPlow.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadPlow implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadPlow()
+ {
+ OrePrefixes.toolHeadPlow.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(42, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSaw.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSaw.java
new file mode 100644
index 0000000000..11cb511384
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSaw.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadSaw implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadSaw()
+ {
+ OrePrefixes.toolHeadSaw.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(10, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSense.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSense.java
new file mode 100644
index 0000000000..78a3762c2e
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSense.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadSense implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadSense()
+ {
+ OrePrefixes.toolHeadSense.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(40, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadShovel.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadShovel.java
new file mode 100644
index 0000000000..d8b6bf32ae
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadShovel.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadShovel implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadShovel()
+ {
+ OrePrefixes.toolHeadShovel.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(4, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSword.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSword.java
new file mode 100644
index 0000000000..fcf3680e1f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadSword.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadSword implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadSword()
+ {
+ OrePrefixes.toolHeadSword.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(0, 1, aMaterial, aMaterial.mHandleMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadUniversalSpade.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadUniversalSpade.java
new file mode 100644
index 0000000000..119be3c013
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadUniversalSpade.java
@@ -0,0 +1,21 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadUniversalSpade implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadUniversalSpade()
+ {
+ OrePrefixes.toolHeadUniversalSpade.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(32, 1, aMaterial, aMaterial, null), new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial), OrePrefixes.screw.get(aMaterial), ToolDictNames.craftingToolScrewdriver });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadWrench.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadWrench.java
new file mode 100644
index 0000000000..87434b86ed
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHeadWrench.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingToolHeadWrench implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingToolHeadWrench()
+ {
+ OrePrefixes.toolHeadWrench.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(120, 1, aMaterial, Materials.StainlessSteel, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(122, 1, aMaterial, Materials.Titanium, new long[] { 400000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(124, 1, aMaterial, Materials.TungstenSteel, new long[] { 1600000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(120, 1, aMaterial, Materials.StainlessSteel, new long[] { 75000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(122, 1, aMaterial, Materials.Titanium, new long[] { 300000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(124, 1, aMaterial, Materials.TungstenSteel, new long[] { 1200000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(120, 1, aMaterial, Materials.StainlessSteel, new long[] { 50000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(122, 1, aMaterial, Materials.Titanium, new long[] { 200000L, 128L, 2L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_MV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Titanium), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.Titanium), Character.valueOf('B'), ItemList.Battery_RE_MV_Sodium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(124, 1, aMaterial, Materials.TungstenSteel, new long[] { 800000L, 512L, 3L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "SXd", "GMG", "PBP", Character.valueOf('X'), aOreDictName, Character.valueOf('M'), ItemList.Electric_Motor_HV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), Character.valueOf('B'), ItemList.Battery_RE_HV_Sodium.get(1L, new Object[0]) });
+
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(150, 1, aMaterial, Materials.StainlessSteel, new long[] { 100000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PdX", "MGS", "GBP", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Lithium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(150, 1, aMaterial, Materials.StainlessSteel, new long[] { 75000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PdX", "MGS", "GBP", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Cadmium.get(1L, new Object[0]) });
+ GT_ModHandler.addCraftingRecipe(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(150, 1, aMaterial, Materials.StainlessSteel, new long[] { 50000L, 32L, 1L, -1L }), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PdX", "MGS", "GBP", Character.valueOf('X'), OrePrefixes.stickLong.get(aMaterial), Character.valueOf('M'), ItemList.Electric_Motor_LV.get(1L, new Object[0]), Character.valueOf('S'), OrePrefixes.screw.get(Materials.StainlessSteel), Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('G'), OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), Character.valueOf('B'), ItemList.Battery_RE_LV_Sodium.get(1L, new Object[0]) });
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java
new file mode 100644
index 0000000000..b906df684d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java
@@ -0,0 +1,45 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IOreRecipeRegistrator;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingTransforming
+ implements IOreRecipeRegistrator
+{
+ public ProcessingTransforming()
+ {
+ for (OrePrefixes tPrefix : OrePrefixes.values()) if (((tPrefix.mMaterialAmount > 0L) && (!tPrefix.mIsContainer) && (!tPrefix.mIsEnchantable)) || (tPrefix == OrePrefixes.plank)) tPrefix.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aPrefix == OrePrefixes.plank) aPrefix = OrePrefixes.plate;
+ switch (aMaterial) {
+ case Wood:
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.SeedOil.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 120L, true)), GT_OreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.SeedOilLin.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 80L, true)), GT_OreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.SeedOilHemp.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 80L, true)), GT_OreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ break;
+ case Iron:
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.FierySteel.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 250L, true)), GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addPolarizerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L), (int)Math.max(16L, aPrefix.mMaterialAmount * 128L / 3628800L), 16);
+ break;
+ case WroughtIron:
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.FierySteel.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 225L, true)), GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addPolarizerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L), (int)Math.max(16L, aPrefix.mMaterialAmount * 128L / 3628800L), 16);
+ break;
+ case Steel:
+ GT_Values.RA.addChemicalBathRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), Materials.FierySteel.getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 200L, true)), GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addPolarizerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(aPrefix, Materials.SteelMagnetic, 1L), (int)Math.max(16L, aPrefix.mMaterialAmount * 128L / 3628800L), 16);
+ break;
+ case Neodymium:
+ GT_Values.RA.addPolarizerRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(aPrefix, Materials.NeodymiumMagnetic, 1L), (int)Math.max(16L, aPrefix.mMaterialAmount * 128L / 3628800L), 256);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java
new file mode 100644
index 0000000000..9f33c7703c
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.oreprocessing;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWax implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWax()
+ {
+ OrePrefixes.wax.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ if (aOreDictName.equals("waxMagical")) GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[] { aStack }), null, 6, 5);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire01.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire01.java
new file mode 100644
index 0000000000..30ddd5de97
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire01.java
@@ -0,0 +1,44 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.api.features.IP2PTunnelRegistry;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire01 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire01()
+ {
+ OrePrefixes.wireGt01.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L), new Object[] { aOreDictName, OrePrefixes.plate.get(Materials.Rubber) });
+ if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
+ GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 2L), 100, 8);
+ GT_Values.RA.addWiremillRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L), 200, 8);
+ }
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1L), GT_OreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L), 100, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1L), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(2L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L), 150, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(4L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L), 200, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(8L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L), 300, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(12L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 12L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L), 400, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_Utility.copyAmount(16L, new Object[] { aStack }), ItemList.Circuit_Integrated.getWithDamage(0L, 16L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L), 500, 8);
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(GT_OreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L), TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire02.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire02.java
new file mode 100644
index 0000000000..6fe6f80eee
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire02.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire02 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire02()
+ {
+ OrePrefixes.wireGt02.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1L), GT_OreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L), 150, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1L), 150, 8);
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L), new Object[] { aOreDictName, OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L), new Object[] { aOreDictName });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial) });
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(GT_OreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L), TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire04.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire04.java
new file mode 100644
index 0000000000..bd81db8bf6
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire04.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire04 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire04()
+ {
+ OrePrefixes.wireGt04.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 2L), GT_OreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L), 200, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 2L), 200, 8);
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L), new Object[] { aOreDictName, OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 4L), new Object[] { aOreDictName });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt02.get(aMaterial), OrePrefixes.wireGt02.get(aMaterial) });
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(GT_OreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L), TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire08.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire08.java
new file mode 100644
index 0000000000..74b489f4e3
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire08.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire08 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire08()
+ {
+ OrePrefixes.wireGt08.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 3L), GT_OreDictUnificator.get(OrePrefixes.cableGt08, aMaterial, 1L), 300, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt08, aMaterial, 1L), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 3L), 300, 8);
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt08, aMaterial, 1L), new Object[] { aOreDictName, OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 8L), new Object[] { aOreDictName });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt04.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(GT_OreDictUnificator.get(OrePrefixes.cableGt08, aMaterial, 1L), TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire12.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire12.java
new file mode 100644
index 0000000000..b23c6a1308
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire12.java
@@ -0,0 +1,34 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire12 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire12()
+ {
+ OrePrefixes.wireGt12.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 4L), GT_OreDictUnificator.get(OrePrefixes.cableGt12, aMaterial, 1L), 400, 8);
+ GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt12, aMaterial, 1L), GT_Utility.copyAmount(1L, new Object[] { aStack }), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 4L), 400, 8);
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt12, aMaterial, 1L), new Object[] { aOreDictName, OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 12L), new Object[] { aOreDictName });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt08.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(GT_OreDictUnificator.get(OrePrefixes.cableGt12, aMaterial, 1L), TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire16.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire16.java
new file mode 100644
index 0000000000..5a9a5170be
--- /dev/null
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire16.java
@@ -0,0 +1,30 @@
+package gregtech.loaders.oreprocessing;
+
+import appeng.api.config.TunnelType;
+import appeng.core.Api;
+import gregtech.GT_Mod;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+
+public class ProcessingWire16 implements gregtech.api.interfaces.IOreRecipeRegistrator
+{
+ public ProcessingWire16()
+ {
+ OrePrefixes.wireGt16.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 16L), new Object[] { aOreDictName });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt08.get(aMaterial), OrePrefixes.wireGt08.get(aMaterial) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_Utility.copyAmount(1L, new Object[] { aStack }), new Object[] { OrePrefixes.wireGt12.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
+
+ if(GT_Mod.gregtechproxy.mAE2Integration){
+ Api.INSTANCE.registries().p2pTunnel().addNewAttunement(aStack, TunnelType.IC2_POWER);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java b/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java
new file mode 100644
index 0000000000..ffa1779ba2
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java
@@ -0,0 +1,54 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Proxy;
+import java.util.Set;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemAxe;
+import net.minecraft.item.ItemPickaxe;
+
+public class GT_BlockResistanceLoader
+ implements Runnable
+{
+ public void run()
+ {
+ if (GT_Mod.gregtechproxy.mHardRock)
+ {
+ Blocks.stone.setHardness(16.0F);
+ Blocks.brick_block.setHardness(32.0F);
+ Blocks.hardened_clay.setHardness(32.0F);
+ Blocks.stained_hardened_clay.setHardness(32.0F);
+ Blocks.cobblestone.setHardness(12.0F);
+ Blocks.stonebrick.setHardness(24.0F);
+ }
+ Blocks.stone.setResistance(10.0F);
+ Blocks.cobblestone.setResistance(10.0F);
+ Blocks.stonebrick.setResistance(10.0F);
+ Blocks.brick_block.setResistance(20.0F);
+ Blocks.hardened_clay.setResistance(15.0F);
+ Blocks.stained_hardened_clay.setResistance(15.0F);
+
+
+
+ Blocks.bed.setHarvestLevel("axe", 0);
+ Blocks.hay_block.setHarvestLevel("axe", 0);
+ Blocks.tnt.setHarvestLevel("pickaxe", 0);
+ Blocks.sponge.setHarvestLevel("axe", 0);
+ Blocks.monster_egg.setHarvestLevel("pickaxe", 0);
+
+ GT_Utility.callMethod(Material.tnt, "func_85158_p", true, false, false, new Object[0]);
+ GT_Utility.callMethod(Material.tnt, "setAdventureModeExempt", true, false, false, new Object[0]);
+
+ Set tSet = (Set)GT_Utility.getFieldContent(ItemAxe.class, "field_150917_c", true, true);
+ tSet.add(Blocks.bed);
+ tSet.add(Blocks.hay_block);
+ tSet.add(Blocks.sponge);
+
+ tSet = (Set)GT_Utility.getFieldContent(ItemPickaxe.class, "field_150915_c", true, true);
+ tSet.add(Blocks.monster_egg);
+ tSet.add(Blocks.tnt);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java b/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java
new file mode 100644
index 0000000000..09f7bb47a2
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java
@@ -0,0 +1,119 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.GT_Proxy;
+import java.io.PrintStream;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.WeightedRandomChestContent;
+import net.minecraftforge.common.ChestGenHooks;
+
+public class GT_BookAndLootLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding worldgenerated Chest Content.");
+ if (GT_Mod.gregtechproxy.mIncreaseDungeonLoot)
+ {
+ ChestGenHooks tChest = ChestGenHooks.getInfo("bonusChest");tChest.setMax(tChest.getMax() + 8);tChest.setMin(tChest.getMin() + 4);
+ tChest = ChestGenHooks.getInfo("dungeonChest");tChest.setMax(tChest.getMax() + 6);tChest.setMin(tChest.getMin() + 3);
+ tChest = ChestGenHooks.getInfo("pyramidDesertyChest");tChest.setMax(tChest.getMax() + 8);tChest.setMin(tChest.getMin() + 4);
+ tChest = ChestGenHooks.getInfo("pyramidJungleChest");tChest.setMax(tChest.getMax() + 16);tChest.setMin(tChest.getMin() + 8);
+ tChest = ChestGenHooks.getInfo("pyramidJungleDispenser");tChest.setMax(tChest.getMax() + 2);tChest.setMin(tChest.getMin() + 1);
+ tChest = ChestGenHooks.getInfo("mineshaftCorridor");tChest.setMax(tChest.getMax() + 4);tChest.setMin(tChest.getMin() + 2);
+ tChest = ChestGenHooks.getInfo("villageBlacksmith");tChest.setMax(tChest.getMax() + 12);tChest.setMin(tChest.getMin() + 6);
+ tChest = ChestGenHooks.getInfo("strongholdCrossing");tChest.setMax(tChest.getMax() + 8);tChest.setMin(tChest.getMin() + 4);
+ tChest = ChestGenHooks.getInfo("strongholdCorridor");tChest.setMax(tChest.getMax() + 6);tChest.setMin(tChest.getMin() + 3);
+ tChest = ChestGenHooks.getInfo("strongholdLibrary");tChest.setMax(tChest.getMax() + 16);tChest.setMin(tChest.getMin() + 8);
+ }
+ ChestGenHooks.addItem("bonusChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L, new Object[0]), 8, 16, 2));
+
+
+
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L, new Object[0]), 4, 8, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L, new Object[0]), 8, 16, 80));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L), 1, 6, 120));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 6, 30));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 6, 60));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 1, 6, 60));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L), 1, 6, 60));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L), 1, 6, 10));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 6, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 6, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 1, 6, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L), 1, 6, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 6, 20));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 1, 6, 40));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L), 1, 6, 40));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L), 1, 6, 40));
+ ChestGenHooks.addItem("dungeonChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 3, 40));
+
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L, new Object[0]), 4, 8, 2));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L), 4, 16, 12));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Platinum, 1L), 2, 8, 4));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 2, 8, 4));
+ ChestGenHooks.addItem("pyramidDesertyChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L), 2, 8, 4));
+
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(ItemList.Coin_Gold_Ancient.get(1L, new Object[0]), 16, 64, 10));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(ItemList.ZPM.getWithCharge(1L, 2147483647, new Object[0]), 1, 1, 1));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 4, 16, 12));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 2, 8, 4));
+ ChestGenHooks.addItem("pyramidJungleChest", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L), 2, 8, 4));
+
+ ChestGenHooks.addItem("pyramidJungleDispenser", new WeightedRandomChestContent(new ItemStack(Items.fire_charge, 1), 2, 8, 30));
+ ChestGenHooks.addItem("pyramidJungleDispenser", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.arrowGtWood, Materials.DamascusSteel, 1L), 8, 16, 20));
+
+
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L), 1, 4, 12));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 4, 3));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 4, 6));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 1, 4, 6));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 1, 4, 2));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L), 1, 4, 2));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 4, 2));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 1, 4, 4));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L), 1, 4, 4));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 4, 2));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 4, 2));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.DamascusSteel, 1L), 1, 4, 1));
+ ChestGenHooks.addItem("mineshaftCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.DamascusSteel, 1L), 1, 4, 1));
+
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L, new Object[0]), 1, 1, 1));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 4, 6));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L), 2, 8, 6));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L), 2, 8, 12));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 4, 12, 12));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 4, 12, 12));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Brass, 1L), 4, 12, 12));
+ ChestGenHooks.addItem("villageBlacksmith", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L), 4, 12, 1));
+
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L, new Object[0]), 4, 8, 6));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L, new Object[0]), 1, 1, 10));
+
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, Materials.DamascusSteel, 1L), 4, 8, 6));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, Materials.Steel, 1L), 8, 16, 12));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, Materials.Bronze, 1L), 8, 16, 12));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, Materials.Manganese, 1L), 4, 8, 12));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtDust, Materials.Neodymium, 1L), 4, 8, 6));
+ ChestGenHooks.addItem("strongholdCrossing", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.crateGtDust, Materials.Chrome, 1L), 2, 4, 6));
+
+ ChestGenHooks.addItem("strongholdCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.DamascusSteel, 1L), 1, 4, 6));
+ ChestGenHooks.addItem("strongholdCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.DamascusSteel, 1L), 1, 4, 6));
+ ChestGenHooks.addItem("strongholdCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.arrowGtWood, Materials.DamascusSteel, 1L), 16, 48, 6));
+ ChestGenHooks.addItem("strongholdCorridor", new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.arrowGtWood, Materials.SterlingSilver, 1L), 8, 24, 6));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java
new file mode 100644
index 0000000000..acb3d8009b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java
@@ -0,0 +1,665 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Proxy;
+
+import java.io.PrintStream;
+
+import appeng.api.features.IP2PTunnelRegistry;
+import appeng.core.Api;
+import cpw.mods.fml.common.Loader;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class GT_CraftingRecipeLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding nerfed Vanilla Recipes.");
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.bucket, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "XhX", " X ", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron) });
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.Bucket", true)) {
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.bucket, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "X X", " X ", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ }
+ ItemStack tMat = new ItemStack(Items.iron_ingot);
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.PressurePlate", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, tMat, null, null, null, null, null, null, null }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "XXh", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ }
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.Door", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, tMat, null, tMat, tMat, null, tMat, tMat, null }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "XX ", "XXh", "XX ", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ }
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.Cauldron", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, null, tMat, tMat, null, tMat, tMat, tMat, tMat }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "X X", "XhX", "XXX", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ }
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.Hopper", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, null, tMat, tMat, new ItemStack(Blocks.chest, 1, 0), tMat, null, tMat, null }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "XwX", "XCX", " X ", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron), Character.valueOf('C'), "craftingChest" });
+ }
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Iron.Bars", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, tMat, tMat, tMat, tMat, tMat, null, null, null })))
+ {
+ tStack.stackSize /= 2;
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { " w ", "XXX", "XXX", Character.valueOf('X'), OrePrefixes.stick.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ }
+ }
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("ironFence", 6L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[] { "XXX", "XXX", " w ", Character.valueOf('X'), OrePrefixes.stick.get(Materials.AnyIron), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.AnyIron) });
+
+ tMat = new ItemStack(Items.gold_ingot);
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Gold.PressurePlate", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, tMat, null, null, null, null, null, null, null }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "XXh", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Gold), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('I'), OrePrefixes.ingot.get(Materials.Gold) });
+ }
+ }
+ tMat = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L);
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, "Rubber.Sheet", true))
+ {
+ ItemStack tStack;
+ if (null != (tStack = GT_ModHandler.removeRecipe(new ItemStack[] { tMat, tMat, tMat, tMat, tMat, tMat, null, null, null }))) {
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES, new Object[] { "XXX", "XXX", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Rubber) });
+ }
+ }
+ GT_ModHandler.removeRecipeByOutput(ItemList.Bottle_Empty.get(1L, new Object[0]));
+ GT_ModHandler.removeRecipeByOutput(ItemList.IC2_Spray_WeedEx.get(1L, new Object[0]));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("reBattery", 1L));
+
+ ItemStack tStack = GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Blocks.planks, 1, 0), null, null, new ItemStack(Blocks.planks, 1, 0) });
+ if (tStack != null)
+ {
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4, new Object[] { tStack }), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "s", "P", "P", Character.valueOf('P'), OrePrefixes.plank.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(GT_Utility.copyAmount(GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize / 2 : tStack.stackSize, new Object[] { tStack }), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "P", "P", Character.valueOf('P'), OrePrefixes.plank.get(Materials.Wood) });
+ }
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.wooden_pressure_plate, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "PP", Character.valueOf('P'), OrePrefixes.plank.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stone_button, 2, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "S", "S", Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stone_pressure_plate, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "SS", Character.valueOf('S'), OrePrefixes.stone });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.stone_button, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.stone });
+
+ GT_Log.out.println("GT_Mod: Adding Vanilla Convenience Recipes.");
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stonebrick, 1, 3), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "f", "X", Character.valueOf('X'), new ItemStack(Blocks.double_stone_slab, 1, 8) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.gravel, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(Blocks.cobblestone, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.cobblestone, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(Blocks.stone, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stonebrick, 1, 2), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "h", "X", Character.valueOf('X'), new ItemStack(Blocks.stonebrick, 1, 0) });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.double_stone_slab, 1, 8), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 0) });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.double_stone_slab, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 8) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.double_stone_slab, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.cobblestone, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 3) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.brick_block, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 4) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stonebrick, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 5) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.nether_brick, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 6) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.quartz_block, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 7) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.double_stone_slab, 1, 8), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.stone_slab, 1, 8) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 1) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 2), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 2) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 3), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 3) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 4), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 4) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 5), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 5) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 6), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 6) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.planks, 1, 7), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "B", "B", Character.valueOf('B'), new ItemStack(Blocks.wooden_slab, 1, 7) });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.stick, 2, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "s", "X", Character.valueOf('X'), new ItemStack(Blocks.deadbush, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.stick, 2, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "s", "X", Character.valueOf('X'), new ItemStack(Blocks.tallgrass, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.stick, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "s", "X", Character.valueOf('X'), OrePrefixes.treeSapling });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.comparator, 1, 0), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " T ", "TQT", "SSS", Character.valueOf('Q'), OreDictNames.craftingQuartz, Character.valueOf('S'), OrePrefixes.stoneSmooth, Character.valueOf('T'), OreDictNames.craftingRedstoneTorch });
+
+ GT_Log.out.println("GT_Mod: Adding Tool Recipes.");
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { " h ", "PwP", "WPW", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('W'), ItemList.Component_Minecart_Wheels_Iron });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " h ", "PwP", "WPW", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('W'), ItemList.Component_Minecart_Wheels_Steel });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.chest_minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "X", "C", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('X'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.furnace_minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "X", "C", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('X'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.hopper_minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "X", "C", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('X'), new ItemStack(Blocks.hopper, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.tnt_minecart, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "X", "C", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('X'), new ItemStack(Blocks.tnt, 1, 32767) });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.chainmail_helmet, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "RRR", "RhR", Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.chainmail_chestplate, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "RhR", "RRR", "RRR", Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.chainmail_leggings, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "RRR", "RhR", "R R", Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.chainmail_boots, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { "R R", "RhR", Character.valueOf('R'), OrePrefixes.ring.get(Materials.Steel) });
+
+ GT_Log.out.println("GT_Mod: Adding Wool and Color releated Recipes.");
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeOrange });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 2), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeMagenta });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 3), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightBlue });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 4), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeYellow });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 5), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLime });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 6), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePink });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 7), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGray });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 8), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightGray });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 9), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeCyan });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 10), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePurple });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 11), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlue });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 12), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBrown });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 13), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGreen });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 14), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeRed });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Blocks.wool, 1, 15), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlack });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.stained_glass, 8, 0), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "GGG", "GDG", "GGG", Character.valueOf('G'), new ItemStack(Blocks.glass, 1), Character.valueOf('D'), Dyes.dyeWhite });
+
+ GT_Log.out.println("GT_Mod: Putting a Potato on a Stick.");
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Packaged_PotatoChips.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_PotatoChips });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Packaged_ChiliChips.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_ChiliChips });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Packaged_Fries.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.plateDouble.get(Materials.Paper), ItemList.Food_Fries });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Chum_On_Stick.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Chum });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Potato_On_Stick.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Raw_Potato });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Potato_On_Stick_Roasted.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Baked_Potato });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Dough.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.bucket.get(Materials.Water), OrePrefixes.dust.get(Materials.Wheat) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Dough_Sugar.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Sugar) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Dough_Chocolate.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Cocoa) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Dough_Chocolate.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Chocolate) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Flat_Dough.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", ToolDictNames.craftingToolRollingPin });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Bun.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough" });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Bread.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", "foodDough" });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Baguette.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "foodDough", "foodDough", "foodDough" });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Cake.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_ChiliChips.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_PotatoChips, OrePrefixes.dust.get(Materials.Chili) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Buns.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Breads.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Baguettes.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Buns });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Bread.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Breads });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sliced_Baguette.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguettes });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Meat.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Buns, OrePrefixes.dust.get(Materials.MeatCooked) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Chum.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Chum });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Meat.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, OrePrefixes.dust.get(Materials.MeatCooked) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Burger_Chum.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Chum });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Bacon.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_porkchop, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Steak.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_beef, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Bacon.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, new ItemStack(Items.cooked_porkchop, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Sandwich_Steak.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, new ItemStack(Items.cooked_beef, 1) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Bacon.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_porkchop, 1), new ItemStack(Items.cooked_porkchop, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Steak.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_beef, 1), new ItemStack(Items.cooked_beef, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Bacon.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, new ItemStack(Items.cooked_porkchop, 1), new ItemStack(Items.cooked_porkchop, 1) });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Large_Sandwich_Steak.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, new ItemStack(Items.cooked_beef, 1), new ItemStack(Items.cooked_beef, 1) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Pizza_Veggie.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Pizza_Cheese.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Food_Raw_Pizza_Meat.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { ItemList.Food_Flat_Dough, OrePrefixes.dust.get(Materials.MeatCooked) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Cheese.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "foodCheese" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Lemon.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "cropLemon" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Tomato.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "cropTomato" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Onion.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "cropOnion" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Cucumber.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "cropCucumber" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), ItemList.Food_Baked_Bun });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Bread.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), ItemList.Food_Baked_Bread });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Sliced_Baguette.get(2L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), ItemList.Food_Baked_Baguette });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Raw_PotatoChips.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), "cropPotato" });
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Raw_Cookie.get(4L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "kX", Character.valueOf('X'), ItemList.Food_Dough_Chocolate });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Food_Raw_Fries.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "k", "X", Character.valueOf('X'), "cropPotato" });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.bowl, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "k", "X", Character.valueOf('X'), OrePrefixes.plank.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Rubber, 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "k", "X", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Rubber) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadArrow, Materials.Flint, 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "f", "X", Character.valueOf('X'), new ItemStack(Items.flint, 1, 32767) });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Items.arrow, 1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES, new Object[] { " H", " S ", "F ", Character.valueOf('H'), new ItemStack(Items.flint, 1, 32767), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood), Character.valueOf('F'), OreDictNames.craftingFeather });
+
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Blocks.planks), null, new ItemStack(Blocks.planks), null, new ItemStack(Blocks.planks) });
+ GT_ModHandler.removeRecipeByOutput(ItemList.Food_Baked_Bread.get(1L, new Object[0]));
+ GT_ModHandler.removeRecipeByOutput(new ItemStack(Items.cookie, 1));
+ GT_ModHandler.removeRecipe(new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L) });
+ if (null != GT_Utility.setStack(GT_ModHandler.getRecipeOutput(true, new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L) }), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "bronzeingotcrafting", true) ? 1L : 2L))) {
+ GT_Log.out.println("GT_Mod: Changed Forestrys Bronze Recipe");
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "enchantmenttable", false))
+ {
+ GT_Log.out.println("GT_Mod: Removing the Recipe of the Enchantment Table, to have more Fun at enchanting with the Anvil and Books from Dungeons.");
+ GT_ModHandler.removeRecipeByOutput(new ItemStack(Blocks.enchanting_table, 1));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "enderchest", false)) {
+ GT_ModHandler.removeRecipeByOutput(new ItemStack(Blocks.ender_chest, 1));
+ }
+ tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L);
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getRecipeOutput(new ItemStack[] { null, new ItemStack(Blocks.sand, 1, 0), null, null, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L), null, null, new ItemStack(Blocks.sand, 1, 0), null }), new Object[] { "S", "A", "S", Character.valueOf('A'), OrePrefixes.dust.get(Materials.Apatite), Character.valueOf('S'), new ItemStack(Blocks.sand, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack, tStack, tStack, tStack, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L), tStack, tStack, tStack, tStack }), new Object[] { "SSS", "SAS", "SSS", Character.valueOf('A'), OrePrefixes.dust.get(Materials.Apatite), Character.valueOf('S'), OrePrefixes.dust.get(Materials.Ash) });
+
+ GT_Log.out.println("GT_Mod: Adding Mixed Metal Ingot Recipes.");
+ GT_ModHandler.removeRecipeByOutput(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Nickel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(2L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(3L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(4L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.Tungsten), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(5L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(5L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(6L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(5L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(5L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Zinc) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(6L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "X", "Y", "Z", Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('Y'), OrePrefixes.plate.get(Materials.Brass), Character.valueOf('Z'), OrePrefixes.plate.get(Materials.Aluminium) });
+
+ GT_Log.out.println("GT_Mod: Adding Rolling Machine Recipes.");
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rail_Standard.get(4L, new Object[0]), new Object[] { "X X", "X X", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Aluminium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rail_Standard.get(32L, new Object[0]), new Object[] { "X X", "X X", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Titanium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rail_Standard.get(32L, new Object[0]), new Object[] { "X X", "X X", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Tungsten).toString() });
+
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rail_Reinforced.get(32L, new Object[0]), new Object[] { "X X", "X X", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.TungstenSteel).toString() });
+
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rebar.get(2L, new Object[0]), new Object[] { " X", " X ", "X ", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Aluminium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rebar.get(16L, new Object[0]), new Object[] { " X", " X ", "X ", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Titanium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rebar.get(16L, new Object[0]), new Object[] { " X", " X ", "X ", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Tungsten).toString() });
+ GT_ModHandler.addRollingMachineRecipe(ItemList.RC_Rebar.get(48L, new Object[0]), new Object[] { " X", " X ", "X ", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.TungstenSteel).toString() });
+
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.light.blue", 8L), new Object[] { "XXX", " X ", "XXX", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Aluminium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.purple", 64L), new Object[] { "XXX", " X ", "XXX", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Titanium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.black", 64L), new Object[] { "XXX", " X ", "XXX", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Tungsten).toString() });
+
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.light.blue", 8L), new Object[] { "X X", "XXX", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Aluminium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.purple", 64L), new Object[] { "X X", "XXX", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Titanium).toString() });
+ GT_ModHandler.addRollingMachineRecipe(GT_ModHandler.getModItem("Railcraft", "post.metal.black", 64L), new Object[] { "X X", "XXX", "X X", Character.valueOf('X'), OrePrefixes.ingot.get(Materials.Tungsten).toString() });
+
+ GT_Log.out.println("GT_Mod: Replacing Railcraft Recipes with slightly more OreDicted Variants");
+
+ long tBitMask = GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES | GT_ModHandler.RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT;
+ char tHammer = ' ';char tFile = ' ';char tWrench = ' ';
+ OrePrefixes tIngot = OrePrefixes.ingot;
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "railcraft_stuff_use_tools", true))
+ {
+ tHammer = 'h';tFile = 'f';tWrench = 'w';
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "railcraft_stuff_use_plates", true)) {
+ tIngot = OrePrefixes.plate;
+ }
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.gear", 2L, 3), tBitMask | GT_ModHandler.RecipeBits.MIRRORED, new Object[] { tHammer + "" + tFile, "XX", "XX", Character.valueOf('X'), tIngot.get(Materials.Tin) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 0), tBitMask, new Object[] { tHammer + "X ", "XGX", " X" + tFile, Character.valueOf('X'), OrePrefixes.nugget.get(Materials.Gold), Character.valueOf('G'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 3) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 1), tBitMask, new Object[] { tHammer + "X ", "XGX", " X" + tFile, Character.valueOf('X'), tIngot.get(Materials.AnyIron), Character.valueOf('G'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 3) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 2), tBitMask, new Object[] { tHammer + "X ", "XGX", " X" + tFile, Character.valueOf('X'), tIngot.get(Materials.Steel), Character.valueOf('G'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 3) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 0), tBitMask, new Object[] { tWrench + "PP", tHammer + "PP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 1), tBitMask, new Object[] { "GPG", "PGP", "GPG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('G'), new ItemStack(Blocks.glass_pane, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 2), tBitMask, new Object[] { "BPB", "PLP", "BPB", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('B'), new ItemStack(Blocks.iron_bars, 1, 32767), Character.valueOf('L'), new ItemStack(Blocks.lever, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 3), tBitMask, new Object[] { tWrench + "P", tHammer + "P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 4), tBitMask, new Object[] { tWrench + "P", tHammer + "P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 5), tBitMask, new Object[] { "BBB", "BFB", "BOB", Character.valueOf('B'), OrePrefixes.ingot.get(Materials.Brick), Character.valueOf('F'), new ItemStack(Items.fire_charge, 1, 32767), Character.valueOf('O'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 6), tBitMask, new Object[] { "PUP", "BFB", "POP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), new ItemStack(Blocks.iron_bars, 1, 32767), Character.valueOf('F'), new ItemStack(Items.fire_charge, 1, 32767), Character.valueOf('U'), OrePrefixes.bucket.get(Materials.Empty), Character.valueOf('O'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 7), tBitMask | GT_ModHandler.RecipeBits.MIRRORED, new Object[] { "PPP", tHammer + "G" + tWrench, "OTO", Character.valueOf('P'), OrePrefixes.nugget.get(Materials.Gold), Character.valueOf('O'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 0), Character.valueOf('G'), new ItemStack(Blocks.glass, 1, 32767), Character.valueOf('T'), OreDictNames.craftingPiston });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 8), tBitMask | GT_ModHandler.RecipeBits.MIRRORED, new Object[] { "PPP", tHammer + "G" + tWrench, "OTO", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('O'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 1), Character.valueOf('G'), new ItemStack(Blocks.glass, 1, 32767), Character.valueOf('T'), OreDictNames.craftingPiston });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 9), tBitMask | GT_ModHandler.RecipeBits.MIRRORED, new Object[] { "PPP", tHammer + "G" + tWrench, "OTO", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('O'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 2), Character.valueOf('G'), new ItemStack(Blocks.glass, 1, 32767), Character.valueOf('T'), OreDictNames.craftingPiston });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 10), tBitMask, new Object[] { " E ", " O ", "OIO", Character.valueOf('I'), tIngot.get(Materials.Gold), Character.valueOf('E'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('O'), OrePrefixes.stone.get(Materials.Obsidian) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 11), tBitMask, new Object[] { "OOO", "OEO", "OOO", Character.valueOf('E'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('O'), OrePrefixes.stone.get(Materials.Obsidian) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 12), tBitMask, new Object[] { "GPG", "PAP", "GPG", Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('A'), OreDictNames.craftingAnvil, Character.valueOf('G'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 2) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 13), tBitMask, new Object[] { tWrench + "PP", tHammer + "PP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 14), tBitMask, new Object[] { "GPG", "PGP", "GPG", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('G'), new ItemStack(Blocks.glass_pane, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.beta", 8L, 15), tBitMask, new Object[] { "BPB", "PLP", "BPB", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), new ItemStack(Blocks.iron_bars, 1, 32767), Character.valueOf('L'), new ItemStack(Blocks.lever, 1, 32767) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.RC_ShuntingWireFrame.get(6L, new Object[0]), tBitMask, new Object[] { "PPP", "R" + tWrench + "R", "RRR", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('R'), ItemList.RC_Rebar.get(1L, new Object[0]) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 0), tBitMask, new Object[] { "IOI", "GEG", "IOI", Character.valueOf('I'), tIngot.get(Materials.Gold), Character.valueOf('G'), OrePrefixes.gem.get(Materials.Diamond), Character.valueOf('E'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('O'), OrePrefixes.stone.get(Materials.Obsidian) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 3L, 1), tBitMask, new Object[] { "BPB", "P" + tWrench + "P", "BPB", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), OrePrefixes.block.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 2), tBitMask, new Object[] { "IOI", "GEG", "IOI", Character.valueOf('I'), tIngot.get(Materials.Gold), Character.valueOf('G'), OrePrefixes.gem.get(Materials.Emerald), Character.valueOf('E'), OrePrefixes.gem.get(Materials.EnderPearl), Character.valueOf('O'), OrePrefixes.stone.get(Materials.Obsidian) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 4L, 3), tBitMask, new Object[] { "PPP", "PFP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 5), tBitMask, new Object[] { " N ", "RCR", Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('N'), OrePrefixes.stone.get(Materials.Netherrack), Character.valueOf('C'), new ItemStack(Items.cauldron, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 6), tBitMask, new Object[] { "SGS", "EDE", "SGS", Character.valueOf('E'), OrePrefixes.gem.get(Materials.Emerald), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('G'), new ItemStack(Blocks.glass_pane, 1, 32767), Character.valueOf('D'), new ItemStack(Blocks.dispenser, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 8), tBitMask, new Object[] { "IPI", "PCP", "IPI", Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('I'), tIngot.get(Materials.AnyIron), Character.valueOf('C'), new ItemStack(Blocks.crafting_table, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 9), tBitMask, new Object[] { " I ", " T ", " D ", Character.valueOf('I'), new ItemStack(Blocks.iron_bars, 1, 32767), Character.valueOf('T'), GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 4), Character.valueOf('D'), new ItemStack(Blocks.dispenser, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 10), tBitMask, new Object[] { " I ", "RTR", " D ", Character.valueOf('I'), new ItemStack(Blocks.iron_bars, 1, 32767), Character.valueOf('T'), GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 4), Character.valueOf('D'), new ItemStack(Blocks.dispenser, 1, 32767), Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 10), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RTR", Character.valueOf('T'), GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 9), Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 11), tBitMask, new Object[] { "PCP", "CSC", "PCP", Character.valueOf('P'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('C'), new ItemStack(Items.golden_carrot, 1, 0) });
+ if(GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "DisableRCBlastFurnace", false)){
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 4L,12));
+ }
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 1L, 13), tBitMask, new Object[] { "TSB", "SCS", "PSP", Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('S'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), OreDictNames.craftingBook, Character.valueOf('C'), new ItemStack(Blocks.crafting_table, 1, 32767), Character.valueOf('T'), new ItemStack(Items.diamond_pickaxe, 1, 0) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 6L, 14), tBitMask, new Object[] { "PPP", "ISI", "PPP", Character.valueOf('P'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('I'), tIngot.get(Materials.AnyIron), Character.valueOf('S'), "slimeball" });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.alpha", 4L, 15), tBitMask, new Object[] { "PDP", "DBD", "PDP", Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('B'), OrePrefixes.block.get(Materials.Steel), Character.valueOf('D'), OrePrefixes.gem.get(Materials.Diamond) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "machine.epsilon", 1L, 0), tBitMask, new Object[] { "PWP", "WWW", "PWP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron), Character.valueOf('W'), OrePrefixes.wireGt02.get(Materials.Copper) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "tool.crowbar", 1L, 0), tBitMask, new Object[] { tHammer + "DS", "DSD", "SD" + tFile, Character.valueOf('S'), OrePrefixes.ingot.get(Materials.Iron), Character.valueOf('D'), Dyes.dyeRed });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "tool.crowbar.reinforced", 1L, 0), tBitMask, new Object[] { tHammer + "DS", "DSD", "SD" + tFile, Character.valueOf('S'), OrePrefixes.ingot.get(Materials.Steel), Character.valueOf('D'), Dyes.dyeRed });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "tool.whistle.tuner", 1L, 0), tBitMask | GT_ModHandler.RecipeBits.MIRRORED, new Object[] { "S" + tHammer + "S", "SSS", " S" + tFile, Character.valueOf('S'), OrePrefixes.nugget.get(Materials.Iron) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.turbine.blade", 1L, 0), tBitMask, new Object[] { "S" + tFile, "S ", "S" + tHammer, Character.valueOf('S'), tIngot.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.turbine.disk", 1L, 0), tBitMask, new Object[] { "SSS", "SBS", "SSS", Character.valueOf('B'), OrePrefixes.block.get(Materials.Steel), Character.valueOf('S'), GT_ModHandler.getModItem("Railcraft", "part.turbine.blade", 1L, 0) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "part.turbine.rotor", 1L, 0), tBitMask, new Object[] { "SSS", " " + tWrench + " ", Character.valueOf('S'), GT_ModHandler.getModItem("Railcraft", "part.turbine.disk", 1L, 0) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "borehead.iron", 1L, 0), tBitMask, new Object[] { "SSS", "SBS", "SSS", Character.valueOf('B'), OrePrefixes.block.get(Materials.Iron), Character.valueOf('S'), tIngot.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "borehead.steel", 1L, 0), tBitMask, new Object[] { "SSS", "SBS", "SSS", Character.valueOf('B'), OrePrefixes.block.get(Materials.Steel), Character.valueOf('S'), tIngot.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "borehead.diamond", 1L, 0), tBitMask, new Object[] { "SSS", "SBS", "SSS", Character.valueOf('B'), OrePrefixes.block.get(Materials.Diamond), Character.valueOf('S'), tIngot.get(Materials.Steel) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "cart.loco.steam.solid", 1L, 0), tBitMask, new Object[] { "TTF", "TTF", "BCC", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('T'), GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 4), Character.valueOf('F'), GT_ModHandler.getModItem("Railcraft", "machine.beta", 1L, 5), Character.valueOf('B'), new ItemStack(Blocks.iron_bars, 1, 32767) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "cart.loco.electric", 1L, 0), tBitMask, new Object[] { "LP" + tWrench, "PEP", "GCG", Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('E'), GT_ModHandler.getModItem("Railcraft", "machine.epsilon", 1L, 0), Character.valueOf('G'), GT_ModHandler.getModItem("Railcraft", "part.gear", 1L, 2), Character.valueOf('L'), new ItemStack(Blocks.redstone_lamp, 1, 32767), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getModItem("Railcraft", "cart.bore", 1L, 0), tBitMask, new Object[] { "BCB", "FCF", tHammer + "A" + tWrench, Character.valueOf('C'), new ItemStack(Items.minecart, 1), Character.valueOf('A'), new ItemStack(Items.chest_minecart, 1), Character.valueOf('F'), OreDictNames.craftingFurnace, Character.valueOf('B'), OrePrefixes.block.get(Materials.Steel) });
+
+ GT_Log.out.println("GT_Mod: Beginning to add regular Crafting Recipes.");
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("scaffold", 4L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", " S ", "S S", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "NPT", "CCC", "HPT", Character.valueOf('H'), OrePrefixes.cell.get(Materials.Helium), Character.valueOf('N'), OrePrefixes.cell.get(Materials.Nitrogen), Character.valueOf('T'), OrePrefixes.pipeTiny.get(Materials.TungstenSteel), Character.valueOf('P'), ItemList.Electric_Pump_LV, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.NiobiumTitanium) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "NPT", "CCC", "HPT", Character.valueOf('H'), OrePrefixes.cell.get(Materials.Helium), Character.valueOf('N'), OrePrefixes.cell.get(Materials.Nitrogen), Character.valueOf('T'), OrePrefixes.pipeTiny.get(Materials.TungstenSteel), Character.valueOf('P'), ItemList.Electric_Pump_LV, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.VanadiumGallium) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "NPT", "CCC", "NPT", Character.valueOf('N'), OrePrefixes.cell.get(Materials.Nitrogen), Character.valueOf('T'), OrePrefixes.pipeTiny.get(Materials.TungstenSteel), Character.valueOf('P'), ItemList.Electric_Pump_LV, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.YttriumBariumCuprate) });
+ GT_ModHandler.addCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "NPT", "CCC", "NPT", Character.valueOf('N'), OrePrefixes.cell.get(Materials.Nitrogen), Character.valueOf('T'), OrePrefixes.pipeTiny.get(Materials.TungstenSteel), Character.valueOf('P'), ItemList.Electric_Pump_LV, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.Naquadah) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.stick.get(Materials.AnyIron), OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Redstone) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Gold.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Iron.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Bronze.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Copper.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Tin.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Lead.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Lead) });
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Item_Casing_Steel.get(1L, new Object[0]), new Object[] { "h P", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.torch, 2), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "C", "S", Character.valueOf('C'), OrePrefixes.dust.get(Materials.Sulfur), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.torch, 6), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "C", "S", Character.valueOf('C'), OrePrefixes.dust.get(Materials.Phosphorus), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Wood) });
+
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.piston, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", "CBC", "CRC", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('C'), OrePrefixes.stoneCobble, Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('B'), OrePrefixes.ingot.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.piston, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", "CBC", "CRC", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('C'), OrePrefixes.stoneCobble, Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('B'), OrePrefixes.ingot.get(Materials.AnyBronze) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.piston, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", "CBC", "CRC", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('C'), OrePrefixes.stoneCobble, Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('B'), OrePrefixes.ingot.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.piston, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", "CBC", "CRC", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('C'), OrePrefixes.stoneCobble, Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('B'), OrePrefixes.ingot.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.piston, 1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "WWW", "CBC", "CRC", Character.valueOf('W'), OrePrefixes.plank.get(Materials.Wood), Character.valueOf('C'), OrePrefixes.stoneCobble, Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('B'), OrePrefixes.ingot.get(Materials.Titanium) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("reactorVent", 1L,1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "AIA", "I I", "AIA", Character.valueOf('I'), new ItemStack(Blocks.iron_bars, 1), Character.valueOf('A'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_ModHandler.getIC2Item("reactorPlatingExplosive", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { GT_ModHandler.getIC2Item("reactorPlating", 1L), OrePrefixes.plate.get(Materials.Lead) });
+ if (!Materials.Steel.mBlastFurnaceRequired) {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Coal) });
+ }
+ if (GT_Mod.gregtechproxy.mNerfDustCrafting)
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Electrum, 6L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Gold) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Zinc) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Brass, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Zinc) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Tin) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Bronze, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tin) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Invar, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Nickel) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cupronickel, 6L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Nichrome, 15L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Chrome) });
+ }
+ else
+ {
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 2L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Gold) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 4L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Zinc) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Zinc) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 4L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Tin) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tin) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Invar, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Nickel) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cupronickel, 2L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nichrome, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Chrome) });
+ }
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RoseGold, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SterlingSilver, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackBronze, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BismuthBronze, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Bismuth), OrePrefixes.dust.get(Materials.Zinc), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.BlackBronze), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Steel) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RedSteel, 8L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.SterlingSilver), OrePrefixes.dust.get(Materials.BismuthBronze), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlueSteel, 8L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.RoseGold), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel), OrePrefixes.dust.get(Materials.BlackSteel) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ultimet, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Chrome), OrePrefixes.dust.get(Materials.Chrome), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Molybdenum) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CobaltBrass, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Aluminium), OrePrefixes.dust.get(Materials.Cobalt) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 9L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.Manganese), OrePrefixes.dust.get(Materials.Chrome) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.YttriumBariumCuprate, 6L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Yttrium), OrePrefixes.dust.get(Materials.Barium), OrePrefixes.dust.get(Materials.Barium), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Kanthal, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Aluminium), OrePrefixes.dust.get(Materials.Chrome) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ultimet, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dustTiny.get(Materials.Cobalt), OrePrefixes.dustTiny.get(Materials.Cobalt), OrePrefixes.dustTiny.get(Materials.Cobalt), OrePrefixes.dustTiny.get(Materials.Cobalt), OrePrefixes.dustTiny.get(Materials.Cobalt), OrePrefixes.dustTiny.get(Materials.Chrome), OrePrefixes.dustTiny.get(Materials.Chrome), OrePrefixes.dustTiny.get(Materials.Nickel), OrePrefixes.dustTiny.get(Materials.Molybdenum) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CobaltBrass, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Brass), OrePrefixes.dustTiny.get(Materials.Aluminium), OrePrefixes.dustTiny.get(Materials.Cobalt) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Nickel), OrePrefixes.dustTiny.get(Materials.Manganese), OrePrefixes.dustTiny.get(Materials.Chrome) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.YttriumBariumCuprate, 6L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dustTiny.get(Materials.Yttrium), OrePrefixes.dustTiny.get(Materials.Barium), OrePrefixes.dustTiny.get(Materials.Barium), OrePrefixes.dustTiny.get(Materials.AnyCopper), OrePrefixes.dustTiny.get(Materials.AnyCopper), OrePrefixes.dustTiny.get(Materials.AnyCopper) });
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Kanthal, 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dustTiny.get(Materials.Iron), OrePrefixes.dustTiny.get(Materials.Aluminium), OrePrefixes.dustTiny.get(Materials.Chrome) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.LiveRoot), OrePrefixes.dustTiny.get(Materials.Gold) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Items.gunpowder, 3), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Sulfur), OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
+ GT_ModHandler.addShapelessCraftingRecipe(new ItemStack(Items.gunpowder, 2), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Charcoal), OrePrefixes.dust.get(Materials.Sulfur), OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
+
+ GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 5L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { OrePrefixes.dust.get(Materials.Potassium), OrePrefixes.cell.get(Materials.Nitrogen), OrePrefixes.cell.get(Materials.Oxygen), OrePrefixes.cell.get(Materials.Oxygen), OrePrefixes.cell.get(Materials.Oxygen) });
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("carbonFiber", 1L));
+
+ if(GT_Mod.gregtechproxy.mDisableIC2Cables){
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("copperCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("goldCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("insulatedIronCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("glassFiberCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("tinCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("ironCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("insulatedTinCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("detectorCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("splitterCableItem", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("electrolyzer", 1L));
+
+ if(Loader.isModLoaded("NotEnoughItems")){
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("copperCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("goldCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("insulatedIronCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("glassFiberCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("tinCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("ironCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("insulatedTinCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("detectorCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("splitterCableItem", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("electrolyzer", 1L));
+ }
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("batBox", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("batBox", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "PCP","BBB","PPP", 'C', OrePrefixes.cableGt01.get(Materials.Tin), 'P', OrePrefixes.plank.get(Materials.Wood), 'B', OrePrefixes.battery.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("mfeUnit", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("mfeUnit", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "CEC","EME","CEC", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'E', OrePrefixes.battery.get(Materials.Elite), 'M', GT_ModHandler.getIC2Item("machine", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("lvTransformer", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("lvTransformer", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "PCP","POP","PCP", 'C', OrePrefixes.cableGt01.get(Materials.Tin),'O', GT_ModHandler.getIC2Item("coil", 1L), 'P', OrePrefixes.plank.get(Materials.Wood)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("mvTransformer", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("mvTransformer", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "CMC", 'C', OrePrefixes.cableGt01.get(Materials.Copper),'M', GT_ModHandler.getIC2Item("machine", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("hvTransformer", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("hvTransformer", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {" C ","IMB"," C ",'C', OrePrefixes.cableGt01.get(Materials.Gold),'M', GT_ModHandler.getIC2Item("mvTransformer", 1L),'I', OrePrefixes.circuit.get(Materials.Basic),'B', OrePrefixes.battery.get(Materials.Advanced)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("evTransformer", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("evTransformer", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {" C ","IMB"," C ",'C', OrePrefixes.cableGt01.get(Materials.Aluminium),'M', GT_ModHandler.getIC2Item("hvTransformer", 1L),'I', OrePrefixes.circuit.get(Materials.Advanced),'B', OrePrefixes.battery.get(Materials.Master)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("cesuUnit", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("cesuUnit", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PCP","BBB","PPP",'C', OrePrefixes.cableGt01.get(Materials.Copper),'P', OrePrefixes.plate.get(Materials.Bronze),'B', OrePrefixes.battery.get(Materials.Advanced)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("luminator", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("teleporter", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("teleporter", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"GFG","CMC","GDG",'C', OrePrefixes.cableGt01.get(Materials.Platinum),'G', OrePrefixes.circuit.get(Materials.Advanced),'D', OrePrefixes.gem.get(Materials.Diamond), 'M', GT_ModHandler.getIC2Item("machine", 1L), 'F', GT_ModHandler.getIC2Item("frequencyTransmitter", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("energyOMat", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("energyOMat", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"RBR","CMC",'C', OrePrefixes.cableGt01.get(Materials.Copper),'R', OrePrefixes.dust.get(Materials.Redstone),'B', OrePrefixes.battery.get(Materials.Basic), 'M', GT_ModHandler.getIC2Item("machine", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("advBattery", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("advBattery", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"CTC","TST","TLT",'C', OrePrefixes.cableGt01.get(Materials.Copper),'S', OrePrefixes.dust.get(Materials.Sulfur),'L', OrePrefixes.dust.get(Materials.Lead), 'T', GT_ModHandler.getIC2Item("casingbronze", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("boatElectric", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("boatElectric", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"CCC","XWX","XXX",'C', OrePrefixes.cableGt01.get(Materials.Copper),'X', OrePrefixes.plate.get(Materials.Iron), 'W', GT_ModHandler.getIC2Item("waterMill", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("cropnalyzer", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("cropnalyzer", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"CC ","RGR","RIR",'C', OrePrefixes.cableGt01.get(Materials.Copper),'R', OrePrefixes.dust.get(Materials.Redstone),'G', OrePrefixes.block.get(Materials.Glass), 'I', OrePrefixes.circuit.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("coil", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("coil", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"CCC","CXC","CCC",'C', OrePrefixes.wireGt01.get(Materials.Copper),'X', OrePrefixes.ingot.get(Materials.AnyIron)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("powerunit", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("powerunit", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"BCA","BIM","BCA",'C', OrePrefixes.cableGt01.get(Materials.Copper),'B', OrePrefixes.battery.get(Materials.Basic),'A', GT_ModHandler.getIC2Item("casingiron", 1L), 'I', OrePrefixes.circuit.get(Materials.Basic),'M', GT_ModHandler.getIC2Item("elemotor", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("powerunitsmall", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("powerunitsmall", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {" CA","BIM"," CA",'C', OrePrefixes.cableGt01.get(Materials.Copper),'B', OrePrefixes.battery.get(Materials.Basic),'A', GT_ModHandler.getIC2Item("casingiron", 1L), 'I', OrePrefixes.circuit.get(Materials.Basic),'M', GT_ModHandler.getIC2Item("elemotor", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("remote", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("remote", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {" C ","TLT"," F ",'C', OrePrefixes.cableGt01.get(Materials.Copper),'L', OrePrefixes.dust.get(Materials.Lapis),'T', GT_ModHandler.getIC2Item("casingtin", 1L),'F', GT_ModHandler.getIC2Item("frequencyTransmitter", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("odScanner", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("odScanner", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PGP","CBC","WWW",'W', OrePrefixes.cableGt01.get(Materials.Copper),'G', OrePrefixes.dust.get(Materials.Glowstone),'B', OrePrefixes.battery.get(Materials.Advanced),'C', OrePrefixes.circuit.get(Materials.Advanced),'P', GT_ModHandler.getIC2Item("casinggold", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("ovScanner", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("ovScanner", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PDP","GCG","WSW",'W', OrePrefixes.cableGt01.get(Materials.Gold),'G', OrePrefixes.dust.get(Materials.Glowstone),'D', OrePrefixes.battery.get(Materials.Elite),'C', OrePrefixes.circuit.get(Materials.Advanced),'P', GT_ModHandler.getIC2Item("casinggold", 1L),'S', GT_ModHandler.getIC2Item("odScanner", 1L)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("solarHelmet", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("staticBoots", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("staticBoots", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"I I","IWI","CCC",'C', OrePrefixes.cableGt01.get(Materials.Copper),'I', OrePrefixes.ingot.get(Materials.Iron),'W', new ItemStack(Blocks.wool)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("ecMeter", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("ecMeter", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {" G ","CIC","C C",'C', OrePrefixes.cableGt01.get(Materials.Copper),'G', OrePrefixes.dust.get(Materials.Glowstone),'I', OrePrefixes.circuit.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("obscurator", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("obscurator", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"RER","CAC","RRR",'C', OrePrefixes.cableGt01.get(Materials.Gold),'R', OrePrefixes.dust.get(Materials.Redstone),'E', OrePrefixes.battery.get(Materials.Advanced), 'A', OrePrefixes.circuit.get(Materials.Advanced)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("overclockerUpgrade", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("overclockerUpgrade", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"CCC","WEW",'W', OrePrefixes.cableGt01.get(Materials.Copper),'C', GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 1), 'E', OrePrefixes.circuit.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("transformerUpgrade", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("transformerUpgrade", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"GGG","WTW","GEG",'W', OrePrefixes.cableGt01.get(Materials.Gold),'T', GT_ModHandler.getIC2Item("mvTransformer", 1L),'E', OrePrefixes.circuit.get(Materials.Basic),'G', OrePrefixes.block.get(Materials.Glass)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("energyStorageUpgrade", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("energyStorageUpgrade", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PPP","WBW","PEP",'W', OrePrefixes.cableGt01.get(Materials.Copper),'E', OrePrefixes.circuit.get(Materials.Basic),'P', OrePrefixes.plank.get(Materials.Wood),'B', OrePrefixes.battery.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("ejectorUpgrade", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("ejectorUpgrade", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PHP","WEW",'W', OrePrefixes.cableGt01.get(Materials.Copper),'E', OrePrefixes.circuit.get(Materials.Basic),'P', new ItemStack(Blocks.piston),'H', new ItemStack(Blocks.hopper)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("suBattery", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("suBattery", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"W","C","R",'W', OrePrefixes.cableGt01.get(Materials.Copper),'C', OrePrefixes.dust.get(Materials.HydratedCoal),'R', OrePrefixes.dust.get(Materials.Redstone)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("frequencyTransmitter", 1L));
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("pullingUpgrade", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("pullingUpgrade", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] {"PHP","WEW",'W', OrePrefixes.cableGt01.get(Materials.Copper),'P', new ItemStack(Blocks.sticky_piston),'R', new ItemStack(Blocks.hopper),'E',OrePrefixes.circuit.get(Materials.Basic)});
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("cutter", 1L));
+ codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("cutter", 1L));
+ }else{GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("glassFiberCableItem", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "GGG", "EDE", "GGG", Character.valueOf('G'), new ItemStack(Blocks.glass, 1, 32767), Character.valueOf('D'), OrePrefixes.dust.get(Materials.Silver), Character.valueOf('E'), ItemList.IC2_Energium_Dust.get(1L, new Object[0]) });}
+
+ GT_ModHandler.removeRecipeByOutput(ItemList.IC2_Energium_Dust.get(1L, new Object[0]));
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.gregtechrecipes, "energycrystalruby", true)) {
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Energium_Dust.get(9L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RDR", "DRD", "RDR", Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('D'), OrePrefixes.dust.get(Materials.Ruby) });
+ } else {
+ GT_ModHandler.addCraftingRecipe(ItemList.IC2_Energium_Dust.get(9L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RDR", "DRD", "RDR", Character.valueOf('R'), OrePrefixes.dust.get(Materials.Redstone), Character.valueOf('D'), OrePrefixes.dust.get(Materials.Diamond) });
+ }
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("lapotronCrystal", 1L));
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("lapotronCrystal", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "LCL", "LSL", "LCL", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('S'), GT_ModHandler.getIC2Item("energyCrystal", 1L, 32767), Character.valueOf('L'), OrePrefixes.dust.get(Materials.Lazurite) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("lapotronCrystal", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "LCL", "LSL", "LCL", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('S'), GT_ModHandler.getIC2Item("energyCrystal", 1L, 32767), Character.valueOf('L'), OrePrefixes.dust.get(Materials.Lapis) });
+
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("luminator", 16L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RTR", "GHG", "GGG", Character.valueOf('H'), OrePrefixes.cell.get(Materials.Helium), Character.valueOf('T'), OrePrefixes.ingot.get(Materials.Tin), Character.valueOf('R'), OrePrefixes.ingot.get(Materials.AnyIron), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("luminator", 16L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RTR", "GHG", "GGG", Character.valueOf('H'), OrePrefixes.cell.get(Materials.Mercury), Character.valueOf('T'), OrePrefixes.ingot.get(Materials.Tin), Character.valueOf('R'), OrePrefixes.ingot.get(Materials.AnyIron), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ GT_ModHandler.removeRecipe(new ItemStack[] { tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), tStack, tStack, tStack, new ItemStack(Items.coal, 1, 0), tStack, tStack, tStack, tStack });
+ GT_ModHandler.removeRecipe(new ItemStack[] { tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), tStack, tStack, tStack, new ItemStack(Items.coal, 1, 1), tStack, tStack, tStack, tStack });
+ GT_ModHandler.removeRecipe(new ItemStack[] { null, tStack = new ItemStack(Items.coal, 1), null, tStack, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), tStack, null, tStack, null });
+
+ GT_ModHandler.removeFurnaceSmelting(new ItemStack(Blocks.hopper));
+
+ GT_Log.out.println("GT_Mod: Applying harder Recipes for several Blocks.");
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "blockbreaker", false)) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Blocks.cobblestone, 1), new ItemStack(Items.iron_pickaxe, 1), new ItemStack(Blocks.cobblestone, 1), new ItemStack(Blocks.cobblestone, 1), new ItemStack(Blocks.piston, 1), new ItemStack(Blocks.cobblestone, 1), new ItemStack(Blocks.cobblestone, 1), new ItemStack(Items.redstone, 1), new ItemStack(Blocks.cobblestone, 1) }), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "RGR", "RPR", "RCR", Character.valueOf('G'), OreDictNames.craftingGrinder, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('R'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('P'), OreDictNames.craftingPiston });
+ }
+ if ((GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "beryliumreflector", true)) &&
+ (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("reactorReflectorThick", 1L,1)))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("reactorReflectorThick", 1L,1), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " N ", "NBN", " N ", Character.valueOf('B'), OrePrefixes.plate.get(Materials.Beryllium), Character.valueOf('N'), GT_ModHandler.getIC2Item("reactorReflector", 1L, 1) });
+ }
+ if (GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L) != null)
+ {
+ tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L), new ItemStack(Items.redstone, 1), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L), new ItemStack(Items.diamond_pickaxe, 1), GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L) });
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "quarry", true))
+ {
+ GT_ModHandler.removeRecipeByOutput(tStack);
+ GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "ICI", "GIG", "DPD", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('D'), OrePrefixes.gear.get(Materials.Diamond), Character.valueOf('G'), OrePrefixes.gear.get(Materials.Gold), Character.valueOf('I'), OrePrefixes.gear.get(Materials.Steel), Character.valueOf('P'), GT_ModHandler.getIC2Item("diamondDrill", 1L, 32767) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "quarry", false)) {
+ GT_ModHandler.removeRecipeByOutput(tStack);
+ }
+ }
+ GT_Log.out.println("GT_Mod: Applying Recipes for Tools");
+ if ((GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "nanosaber", true)) &&
+ (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("nanoSaber", 1L)))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("nanoSaber", 1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "PI ", "PI ", "CLC", Character.valueOf('L'), OrePrefixes.battery.get(Materials.Master), Character.valueOf('I'), OrePrefixes.plateAlloy.get("Iridium"), Character.valueOf('P'), OrePrefixes.plate.get(Materials.Platinum), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master) });
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "namefix", true)) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.removeRecipeByOutput(new ItemStack(Items.flint_and_steel, 1)) ? new ItemStack(Items.flint_and_steel, 1) : null, GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "S ", " F", Character.valueOf('F'), new ItemStack(Items.flint, 1), Character.valueOf('S'), "nuggetSteel" });
+ }
+ if (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("diamondDrill", 1L))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("diamondDrill", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " D ", "DMD", "TAT", Character.valueOf('M'), GT_ModHandler.getIC2Item("miningDrill", 1L, 32767), Character.valueOf('D'), OreDictNames.craftingIndustrialDiamond, Character.valueOf('T'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('A'), OrePrefixes.circuit.get(Materials.Advanced) });
+ }
+ if (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("miningDrill", 1L))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("miningDrill", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " S ", "SCS", "SBS", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('B'), OrePrefixes.battery.get(Materials.Basic), Character.valueOf('S'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "electricsteeltools", true) ? OrePrefixes.plate.get(Materials.StainlessSteel) : OrePrefixes.plate.get(Materials.Iron) });
+ }
+ if (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("chainsaw", 1L))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("chainsaw", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "BS ", "SCS", " SS", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('B'), OrePrefixes.battery.get(Materials.Basic), Character.valueOf('S'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "electricsteeltools", true) ? OrePrefixes.plate.get(Materials.StainlessSteel) : OrePrefixes.plate.get(Materials.Iron) });
+ }
+ if (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("electricHoe", 1L))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("electricHoe", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { "SS ", " C ", " B ", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('B'), OrePrefixes.battery.get(Materials.Basic), Character.valueOf('S'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "electricsteeltools", true) ? OrePrefixes.plate.get(Materials.StainlessSteel) : OrePrefixes.plate.get(Materials.Iron) });
+ }
+ if (GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("electricTreetap", 1L))) {
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("electricTreetap", 1L), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[] { " B ", "SCS", "S ", Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('B'), OrePrefixes.battery.get(Materials.Basic), Character.valueOf('S'), GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "electricsteeltools", true) ? OrePrefixes.plate.get(Materials.StainlessSteel) : OrePrefixes.plate.get(Materials.Iron) });
+ }
+ GT_Log.out.println("GT_Mod: Removing Q-Armor Recipes if configured.");
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "QHelmet", false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("quantumHelmet", 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "QPlate", false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("quantumBodyarmor", 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "QLegs", false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("quantumLeggings", 1L));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "QBoots", false)) {
+ GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("quantumBoots", 1L));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_CropLoader.java b/src/main/java/gregtech/loaders/postload/GT_CropLoader.java
new file mode 100644
index 0000000000..bb9f1cf507
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_CropLoader.java
@@ -0,0 +1,54 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_BaseCrop;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_OreDictUnificator;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_CropLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Register Crops to IC2.");
+ try
+ {
+ new GT_BaseCrop(124, "Indigo", "Eloraam", ItemList.Crop_Drop_Indigo.get(1L, new Object[0]), null, ItemList.Crop_Drop_Indigo.get(4L, new Object[0]), 2, 4, 0, 1, 4, 1, 1, 0, 4, 0, new String[] { "Flower", "Color", "Ingredient" });
+ new GT_BaseCrop(125, "Flax", "Eloraam", new ItemStack(Items.string, 1), null, null, 2, 4, 0, 1, 4, 1, 1, 2, 0, 1, new String[] { "Silk", "Vine", "Addictive" });
+ new GT_BaseCrop(126, "Oilberries", "Spacetoad", ItemList.Crop_Drop_OilBerry.get(1L, new Object[0]), null, null, 9, 4, 0, 1, 4, 6, 1, 2, 1, 12, new String[] { "Fire", "Dark", "Reed", "Rotten", "Coal", "Oil" });
+ new GT_BaseCrop(127, "Bobsyeruncleranks", "GenerikB", ItemList.Crop_Drop_BobsYerUncleRanks.get(1L, new Object[0]), new ItemStack[] { new ItemStack(Items.emerald, 1) }, null, 11, 4, 0, 1, 4, 4, 0, 8, 2, 9, new String[] { "Shiny", "Vine", "Emerald", "Berylium", "Crystal" });
+ new GT_BaseCrop(128, "Diareed", "Direwolf20", GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1L), new ItemStack[] { new ItemStack(Items.diamond, 1) }, null, 12, 4, 0, 1, 4, 5, 0, 10, 2, 10, new String[] { "Fire", "Shiny", "Reed", "Coal", "Diamond", "Crystal" });
+ new GT_BaseCrop(129, "Withereed", "CovertJaguar", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), new ItemStack[] { new ItemStack(Items.coal, 1), new ItemStack(Items.coal, 1) }, null, 8, 4, 0, 1, 4, 2, 0, 4, 1, 3, new String[] { "Fire", "Undead", "Reed", "Coal", "Rotten", "Wither" });
+ new GT_BaseCrop(130, "Blazereed", "Mr. Brain", new ItemStack(Items.blaze_powder, 1), new ItemStack[] { new ItemStack(Items.blaze_rod, 1) }, null, 6, 4, 0, 1, 4, 0, 4, 1, 0, 0, new String[] { "Fire", "Blaze", "Reed", "Sulfur" });
+ new GT_BaseCrop(131, "Eggplant", "Link", new ItemStack(Items.egg, 1), new ItemStack[] { new ItemStack(Items.chicken, 1), new ItemStack(Items.feather, 1), new ItemStack(Items.feather, 1), new ItemStack(Items.feather, 1) }, null, 6, 3, 900, 2, 3, 0, 4, 1, 0, 0, new String[] { "Chicken", "Egg", "Edible", "Feather", "Flower", "Addictive" });
+ new GT_BaseCrop(132, "Corium", "Gregorius Techneticies", new ItemStack(Items.leather, 1), null, null, 6, 4, 0, 1, 4, 0, 2, 3, 1, 0, new String[] { "Cow", "Silk", "Vine" });
+ new GT_BaseCrop(133, "Corpseplant", "Mr. Kenny", new ItemStack(Items.rotten_flesh, 1), new ItemStack[] { ItemList.Dye_Bonemeal.get(1L, new Object[0]), ItemList.Dye_Bonemeal.get(1L, new Object[0]), new ItemStack(Items.bone, 1) }, null, 5, 4, 0, 1, 4, 0, 2, 1, 0, 3, new String[] { "Toxic", "Undead", "Vine", "Edible", "Rotten" });
+ new GT_BaseCrop(134, "Creeperweed", "General Spaz", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L), null, null, 7, 4, 0, 1, 4, 3, 0, 5, 1, 3, new String[] { "Creeper", "Vine", "Explosive", "Fire", "Sulfur", "Saltpeter", "Coal" });
+ new GT_BaseCrop(135, "Enderbloom", "RichardG", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnderPearl, 1L), new ItemStack[] { new ItemStack(Items.ender_pearl, 1), new ItemStack(Items.ender_pearl, 1), new ItemStack(Items.ender_eye, 1) }, null, 10, 4, 0, 1, 4, 5, 0, 2, 1, 6, new String[] { "Ender", "Flower", "Shiny" });
+ new GT_BaseCrop(136, "Meatrose", "VintageBeef", new ItemStack(Items.dye, 1, 9), new ItemStack[] { new ItemStack(Items.beef, 1), new ItemStack(Items.porkchop, 1), new ItemStack(Items.chicken, 1), new ItemStack(Items.fish, 1) }, null, 7, 4, 1500, 1, 4, 0, 4, 1, 3, 0, new String[] { "Edible", "Flower", "Cow", "Fish", "Chicken", "Pig" });
+ new GT_BaseCrop(137, "Milkwart", "Mr. Brain", ItemList.Crop_Drop_MilkWart.get(1L, new Object[0]), null, ItemList.Crop_Drop_MilkWart.get(4L, new Object[0]), 6, 3, 900, 1, 3, 0, 3, 0, 1, 0, new String[] { "Edible", "Milk", "Cow" });
+ new GT_BaseCrop(138, "Slimeplant", "Neowulf", new ItemStack(Items.slime_ball, 1), null, null, 6, 4, 0, 3, 4, 3, 0, 0, 0, 2, new String[] { "Slime", "Bouncy", "Sticky", "Bush" });
+ new GT_BaseCrop(139, "Spidernip", "Mr. Kenny", new ItemStack(Items.string, 1), new ItemStack[] { new ItemStack(Items.spider_eye, 1), new ItemStack(Blocks.web, 1) }, null, 4, 4, 600, 1, 4, 2, 1, 4, 1, 3, new String[] { "Toxic", "Silk", "Spider", "Flower", "Ingredient", "Addictive" });
+ new GT_BaseCrop(140, "Tearstalks", "Neowulf", new ItemStack(Items.ghast_tear, 1), null, null, 8, 4, 0, 1, 4, 1, 2, 0, 0, 0, new String[] { "Healing", "Nether", "Ingredient", "Reed", "Ghast" });
+ new GT_BaseCrop(141, "Tine", "Gregorius Techneticies", ItemList.Crop_Drop_Tine.get(1L, new Object[0]), null, null, 5, 3, 0, 2, 3, 2, 0, 3, 0, 0, new String[] { "Shiny", "Metal", "Pine", "Tin", "Bush" });
+ new GT_BaseCrop(142, "Coppon", "Mr. Brain", ItemList.Crop_Drop_Coppon.get(1L, new Object[0]), null, null, 6, 3, 0, 2, 3, 2, 0, 1, 1, 1, new String[] { "Shiny", "Metal", "Cotton", "Copper", "Bush" });
+ new GT_BaseCrop(143, "Brown Mushrooms", "Mr. Brain", new ItemStack(Blocks.brown_mushroom, 1), null, new ItemStack(Blocks.brown_mushroom, 4), 1, 3, 0, 1, 3, 0, 2, 0, 0, 2, new String[] { "Edible", "Mushroom", "Ingredient" });
+ new GT_BaseCrop(144, "Red Mushrooms", "Mr. Kenny", new ItemStack(Blocks.red_mushroom, 1), null, new ItemStack(Blocks.red_mushroom, 4), 1, 3, 0, 1, 3, 0, 1, 3, 0, 2, new String[] { "Toxic", "Mushroom", "Ingredient" });
+ new GT_BaseCrop(145, "Argentia", "Eloraam", ItemList.Crop_Drop_Argentia.get(1L, new Object[0]), null, null, 7, 4, 0, 3, 4, 2, 0, 1, 0, 0, new String[] { "Shiny", "Metal", "Silver", "Reed" });
+ new GT_BaseCrop(146, "Plumbilia", "KingLemming", ItemList.Crop_Drop_Plumbilia.get(1L, new Object[0]), null, null, 6, 4, 0, 3, 4, 2, 0, 3, 1, 1, new String[] { "Heavy", "Metal", "Lead", "Reed" });
+ new GT_BaseCrop(147, "Steeleafranks", "Benimatic", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steeleaf, 1L), new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steeleaf, 1L) }, null, 10, 4, 0, 1, 4, 3, 0, 7, 2, 8, new String[] { "Metal", "Vine", "Iron" });
+ new GT_BaseCrop(148, "Liveroots", "Benimatic", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1L), new ItemStack[] { ItemList.TF_LiveRoot.get(1L, new Object[0]) }, null, 8, 4, 0, 1, 4, 2, 0, 5, 2, 6, new String[] { "Wood", "Vine" });
+ }
+ catch (Throwable e)
+ {
+ GT_Log.err.println("GT_Mod: Failed to register Crops to IC2.");
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java b/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java
new file mode 100644
index 0000000000..6d5e177f02
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java
@@ -0,0 +1,84 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Log;
+import gregtech.common.GT_Proxy;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+
+public class GT_ItemMaxStacksizeLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Changing maximum Stacksizes if configured.");
+
+ ItemList.Upgrade_Overclocker.getItem().setMaxStackSize(GT_Mod.gregtechproxy.mUpgradeCount);
+ Items.cake.setMaxStackSize(64);
+ Items.wooden_door.setMaxStackSize(8);
+ Items.iron_door.setMaxStackSize(8);
+ if (OrePrefixes.plank.mDefaultStackSize < 64)
+ {
+ Item.getItemFromBlock(Blocks.wooden_slab).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.double_wooden_slab).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.oak_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.jungle_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.birch_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.spruce_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.acacia_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.dark_oak_stairs).setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+ }
+ if (OrePrefixes.block.mDefaultStackSize < 64)
+ {
+ Item.getItemFromBlock(Blocks.stone_slab).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.double_stone_slab).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.brick_stairs).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.nether_brick_stairs).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.sandstone_stairs).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.stone_stairs).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.stone_brick_stairs).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.packed_ice).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.ice).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.soul_sand).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.glowstone).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.snow).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.snow).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.iron_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.gold_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.emerald_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.lapis_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.diamond_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.clay).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.redstone_lamp).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.dirt).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.grass).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.mycelium).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.gravel).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.sand).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.brick_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.wool).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.melon_block).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.pumpkin).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.lit_pumpkin).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.dispenser).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.obsidian).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.piston).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.sticky_piston).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.crafting_table).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.glass).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.jukebox).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.anvil).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.chest).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.trapped_chest).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.noteblock).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.mob_spawner).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.bookshelf).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.furnace).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ Item.getItemFromBlock(Blocks.lit_furnace).setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
new file mode 100644
index 0000000000..aa21c38939
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
@@ -0,0 +1,1489 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TC_Aspects;
+//import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_DummyWorld;
+import gregtech.common.GT_IteratorRandom;
+import ic2.api.item.IC2Items;
+import ic2.api.recipe.IMachineRecipeManager;
+import ic2.core.Ic2Items;
+
+import java.io.PrintStream;
+import java.util.Arrays;
+
+import cofh.api.modhelpers.ThaumcraftHelper;
+import cpw.mods.fml.common.Loader;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.ThaumcraftApiHelper;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.aspects.IEssentiaContainerItem;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_MachineRecipeLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding non-OreDict Machine Recipes.");
+ try
+ {
+ GT_Utility.removeSimpleIC2MachineRecipe(GT_Values.NI, ic2.api.recipe.Recipes.metalformerExtruding.getRecipes(), ItemList.Cell_Empty.get(3L, new Object[0]));
+ GT_Utility.removeSimpleIC2MachineRecipe(ItemList.IC2_Energium_Dust.get(1L, new Object[0]), ic2.api.recipe.Recipes.compressor.getRecipes(), GT_Values.NI);
+ GT_Utility.removeSimpleIC2MachineRecipe(new ItemStack(Items.gunpowder), ic2.api.recipe.Recipes.extractor.getRecipes(), GT_Values.NI);
+ GT_Utility.removeSimpleIC2MachineRecipe(new ItemStack(Blocks.wool, 1, 32767), ic2.api.recipe.Recipes.extractor.getRecipes(), GT_Values.NI);
+ }
+ catch (Throwable e) {}
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.wheat_seeds, 1, 32767), GT_Values.NI, Materials.SeedOil.getFluid(5L), 10000, 32, 2);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.melon_seeds, 1, 32767), GT_Values.NI, Materials.SeedOil.getFluid(3L), 10000, 32, 2);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.pumpkin_seeds, 1, 32767), GT_Values.NI, Materials.SeedOil.getFluid(6L), 10000, 32, 2);
+ try
+ {
+ GT_DummyWorld tWorld = (GT_DummyWorld)GT_Values.DW;
+ while (tWorld.mRandom.mIterationStep > 0) {
+ GT_Values.RA.addFluidExtractionRecipe(GT_Utility.copyAmount(1L, new Object[] { ForgeHooks.getGrassSeed(tWorld) }), GT_Values.NI, Materials.SeedOil.getFluid(5L), 10000, 64, 2);
+ }
+ }
+ catch (Throwable e)
+ {
+ GT_Log.out.println("GT_Mod: failed to iterate somehow, maybe it's your Forge Version causing it. But it's not that important\n");
+ e.printStackTrace(GT_Log.err);
+ }
+ GT_Values.RA.addPrinterRecipe(GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L), FluidRegistry.getFluidStack("squidink", 36), GT_Values.NI, ItemList.Paper_Punch_Card_Empty.get(1L, new Object[0]), 100, 2);
+ GT_Values.RA.addPrinterRecipe(ItemList.Paper_Punch_Card_Empty.get(1L, new Object[0]), FluidRegistry.getFluidStack("squidink", 36), ItemList.Tool_DataStick.getWithName(0L, "With Punch Card Data", new Object[0]), ItemList.Paper_Punch_Card_Encoded.get(1L, new Object[0]), 100, 2);
+ GT_Values.RA.addPrinterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3L), FluidRegistry.getFluidStack("squidink", 144), ItemList.Tool_DataStick.getWithName(0L, "With Scanned Book Data", new Object[0]), ItemList.Paper_Printed_Pages.get(1L, new Object[0]), 400, 2);
+ GT_Values.RA.addPrinterRecipe(new ItemStack(Items.map, 1, 32767), FluidRegistry.getFluidStack("squidink", 144), ItemList.Tool_DataStick.getWithName(0L, "With Scanned Map Data", new Object[0]), new ItemStack(Items.filled_map, 1, 0), 400, 2);
+ GT_Values.RA.addPrinterRecipe(new ItemStack(Items.book, 1, 32767), FluidRegistry.getFluidStack("squidink", 144), GT_Values.NI, GT_Utility.getWrittenBook("Manual_Printer", ItemList.Book_Written_01.get(1L, new Object[0])), 400, 2);
+ for (OrePrefixes tPrefix : Arrays.asList(new OrePrefixes[] { OrePrefixes.dust, OrePrefixes.dustSmall, OrePrefixes.dustTiny }))
+ {
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.EnderPearl, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Blaze, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.EnderEye, 1L * tPrefix.mMaterialAmount), (int)(100L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Gold, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Silver, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Electrum, 2L * tPrefix.mMaterialAmount), (int)(200L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Iron, 2L), GT_OreDictUnificator.get(tPrefix, Materials.Nickel, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Invar, 3L * tPrefix.mMaterialAmount), (int)(300L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Iron, 4L), GT_OreDictUnificator.get(tPrefix, Materials.Invar, 3L), GT_OreDictUnificator.get(tPrefix, Materials.Manganese, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Chrome, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.StainlessSteel, 9L * tPrefix.mMaterialAmount), (int)(900L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Iron, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Aluminium, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Chrome, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Kanthal, 3L * tPrefix.mMaterialAmount), (int)(300L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 3L), GT_OreDictUnificator.get(tPrefix, Materials.Barium, 2L), GT_OreDictUnificator.get(tPrefix, Materials.Yttrium, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.YttriumBariumCuprate, 6L * tPrefix.mMaterialAmount), (int)(600L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 3L), GT_OreDictUnificator.get(tPrefix, Materials.Zinc, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Brass, 4L * tPrefix.mMaterialAmount), (int)(400L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 3L), GT_OreDictUnificator.get(tPrefix, Materials.Tin, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Bronze, 4L * tPrefix.mMaterialAmount), (int)(400L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Nickel, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Cupronickel, 2L * tPrefix.mMaterialAmount), (int)(200L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Gold, 4L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.RoseGold, 5L * tPrefix.mMaterialAmount), (int)(500L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Silver, 4L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.SterlingSilver, 5L * tPrefix.mMaterialAmount), (int)(500L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Copper, 3L), GT_OreDictUnificator.get(tPrefix, Materials.Electrum, 2L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.BlackBronze, 5L * tPrefix.mMaterialAmount), (int)(500L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Bismuth, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Brass, 4L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.BismuthBronze, 5L * tPrefix.mMaterialAmount), (int)(500L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.BlackBronze, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Nickel, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Steel, 3L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.BlackSteel, 5L * tPrefix.mMaterialAmount), (int)(500L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.SterlingSilver, 1L), GT_OreDictUnificator.get(tPrefix, Materials.BismuthBronze, 1L), GT_OreDictUnificator.get(tPrefix, Materials.BlackSteel, 4L), GT_OreDictUnificator.get(tPrefix, Materials.Steel, 2L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.RedSteel, 8L * tPrefix.mMaterialAmount), (int)(800L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.RoseGold, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Brass, 1L), GT_OreDictUnificator.get(tPrefix, Materials.BlackSteel, 4L), GT_OreDictUnificator.get(tPrefix, Materials.Steel, 2L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.BlueSteel, 8L * tPrefix.mMaterialAmount), (int)(800L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Cobalt, 5L), GT_OreDictUnificator.get(tPrefix, Materials.Chrome, 2L), GT_OreDictUnificator.get(tPrefix, Materials.Nickel, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Molybdenum, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Ultimet, 9L * tPrefix.mMaterialAmount), (int)(900L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Brass, 7L), GT_OreDictUnificator.get(tPrefix, Materials.Aluminium, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Cobalt, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.CobaltBrass, 9L * tPrefix.mMaterialAmount), (int)(900L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Saltpeter, 2L), GT_OreDictUnificator.get(tPrefix, Materials.Sulfur, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Coal, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Gunpowder, 4L * tPrefix.mMaterialAmount), (int)(400L * tPrefix.mMaterialAmount / 3628800L), 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(tPrefix, Materials.Saltpeter, 2L), GT_OreDictUnificator.get(tPrefix, Materials.Sulfur, 1L), GT_OreDictUnificator.get(tPrefix, Materials.Charcoal, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.getDust(Materials.Gunpowder, 3L * tPrefix.mMaterialAmount), (int)(300L * tPrefix.mMaterialAmount / 3628800L), 8);
+ }
+ GT_Values.RA.addMixerRecipe(new ItemStack(Items.rotten_flesh, 1, 0), new ItemStack(Items.fermented_spider_eye, 1, 0), ItemList.IC2_Scrap.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1L), FluidRegistry.getFluidStack("potion.purpledrink", 750), FluidRegistry.getFluidStack("sludge", 1000), ItemList.Food_Chum.get(4L, new Object[0]), 128, 24);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(1000L), GT_Values.NF, ItemList.Food_Dough.get(2L, new Object[0]), 32, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L), ItemList.Food_PotatoChips.get(1L, new Object[0]), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, ItemList.Food_ChiliChips.get(1L, new Object[0]), 32, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 3L), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(500L), Materials.Concrete.getMolten(576L), GT_Values.NI, 20, 16);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Redstone, 5L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ruby, 4L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, ItemList.IC2_Energium_Dust.get(1L, new Object[0]), 100, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 5L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ruby, 4L), GT_Values.NI, GT_Values.NI, GT_Values.NF, GT_Values.NF, ItemList.IC2_Energium_Dust.get(9L, new Object[0]), 900, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), new ItemStack(Blocks.brown_mushroom, 1), new ItemStack(Items.spider_eye, 1), GT_Values.NI, GT_Values.NF, GT_Values.NF, new ItemStack(Items.fermented_spider_eye, 1), 100, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2L), 100, 8);
+ GT_Values.RA.addMixerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 9L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 9L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 18L), 900, 8);
+ GT_Values.RA.addMixerRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1L), GT_Values.NI, Materials.Water.getFluid(500L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2L), 20, 16);
+ GT_Values.RA.addMixerRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1L), GT_Values.NI, GT_ModHandler.getDistilledWater(500L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2L), 20, 16);
+ GT_Values.RA.addMixerRecipe(ItemList.IC2_Fertilizer.get(1L, new Object[0]), new ItemStack(Blocks.dirt, 8, 32767), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(1000L), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "soil", 8L, 0), 64, 16);
+ GT_Values.RA.addMixerRecipe(ItemList.FR_Fertilizer.get(1L, new Object[0]), new ItemStack(Blocks.dirt, 8, 32767), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(1000L), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "soil", 8L, 0), 64, 16);
+ GT_Values.RA.addMixerRecipe(ItemList.FR_Compost.get(1L, new Object[0]), new ItemStack(Blocks.dirt, 8, 32767), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(1000L), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "soil", 8L, 0), 64, 16);
+ GT_Values.RA.addMixerRecipe(ItemList.FR_Mulch.get(1L, new Object[0]), new ItemStack(Blocks.dirt, 8, 32767), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(1000L), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "soil", 9L, 0), 64, 16);
+ GT_Values.RA.addMixerRecipe(new ItemStack(Blocks.sand, 1, 32767), new ItemStack(Blocks.dirt, 1, 32767), GT_Values.NI, GT_Values.NI, Materials.Water.getFluid(250L), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "soil", 2L, 1), 16, 16);
+
+ GT_Values.RA.addExtruderRecipe(ItemList.FR_Wax.get(1L, new Object[0]), ItemList.Shape_Extruder_Cell.get(0L, new Object[0]), ItemList.FR_WaxCapsule.get(1L, new Object[0]), 64, 16);
+ GT_Values.RA.addExtruderRecipe(ItemList.FR_RefractoryWax.get(1L, new Object[0]), ItemList.Shape_Extruder_Cell.get(0L, new Object[0]), ItemList.FR_RefractoryCapsule.get(1L, new Object[0]), 128, 16);
+
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.IC2_ReBattery.get(1L, new Object[0]), Materials.Redstone.getMolten(288L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.Battery_SU_LV_Mercury.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.Mercury.getFluid(1000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_MV.get(1L, new Object[0]), ItemList.Battery_SU_MV_Mercury.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.Mercury.getFluid(4000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_HV.get(1L, new Object[0]), ItemList.Battery_SU_HV_Mercury.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.Mercury.getFluid(16000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_LV.get(1L, new Object[0]), ItemList.Battery_SU_LV_SulfuricAcid.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.SulfuricAcid.getFluid(1000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_MV.get(1L, new Object[0]), ItemList.Battery_SU_MV_SulfuricAcid.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.SulfuricAcid.getFluid(4000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.Battery_Hull_HV.get(1L, new Object[0]), ItemList.Battery_SU_HV_SulfuricAcid.getWithCharge(1L, Integer.MAX_VALUE, new Object[0]), Materials.SulfuricAcid.getFluid(16000L), GT_Values.NF);
+ GT_Values.RA.addFluidCannerRecipe(ItemList.TF_Vial_FieryTears.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), GT_Values.NF, Materials.FierySteel.getFluid(250L));
+
+ Materials tMaterial = Materials.Iron;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Iron.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.WroughtIron;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Iron.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Gold;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Gold.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Bronze;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Bronze.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Copper;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Copper.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.AnnealedCopper;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Copper.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Tin;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Tin.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Lead;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Lead.get(1L, new Object[0]), 16, 8);
+ }
+ tMaterial = Materials.Steel;
+ if (tMaterial.mStandardMoltenFluid != null) {
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Casing.get(0L, new Object[0]), tMaterial.getMolten(72L), ItemList.IC2_Item_Casing_Steel.get(1L, new Object[0]), 16, 8);
+ }
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Ball.get(0L, new Object[0]), Materials.Mercury.getFluid(1000L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L), 128, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Ball.get(0L, new Object[0]), Materials.Water.getFluid(250L), new ItemStack(Items.snowball, 1, 0), 128, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Ball.get(0L, new Object[0]), GT_ModHandler.getDistilledWater(250L), new ItemStack(Items.snowball, 1, 0), 128, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), Materials.Water.getFluid(1000L), new ItemStack(Blocks.snow, 1, 0), 512, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), GT_ModHandler.getDistilledWater(1000L), new ItemStack(Blocks.snow, 1, 0), 512, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), Materials.Lava.getFluid(1000L), new ItemStack(Blocks.obsidian, 1, 0), 1024, 16);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), Materials.Concrete.getMolten(144L), new ItemStack(GregTech_API.sBlockConcretes, 1, 8), 12, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), Materials.Glowstone.getMolten(576L), new ItemStack(Blocks.glowstone, 1, 0), 12, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), Materials.Glass.getMolten(144L), new ItemStack(Blocks.glass, 1, 0), 12, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Plate.get(0L, new Object[0]), Materials.Glass.getMolten(144L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Glass, 1L), 12, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Bottle.get(0L, new Object[0]), Materials.Glass.getMolten(144L), ItemList.Bottle_Empty.get(1L, new Object[0]), 12, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Cylinder.get(0L, new Object[0]), Materials.Milk.getFluid(250L), ItemList.Food_Cheese.get(1L, new Object[0]), 1024, 4);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Cylinder.get(0L, new Object[0]), Materials.Cheese.getMolten(144L), ItemList.Food_Cheese.get(1L, new Object[0]), 64, 8);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Anvil.get(0L, new Object[0]), Materials.Iron.getMolten(4464L), new ItemStack(Blocks.anvil, 1, 0), 128, 16);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Anvil.get(0L, new Object[0]), Materials.WroughtIron.getMolten(4464L), new ItemStack(Blocks.anvil, 1, 0), 128, 16);
+ GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Anvil.get(0L, new Object[0]), Materials.Steel.getMolten(4464L), GT_ModHandler.getModItem("Railcraft", "tile.railcraft.anvil", 1L, 0), 128, 16);
+
+ GT_Values.RA.addChemicalBathRecipe(ItemList.Food_Raw_Fries.get(1L, new Object[0]), Materials.FryingOilHot.getFluid(10L), ItemList.Food_Fries.get(1L, new Object[0]), GT_Values.NI, GT_Values.NI, null, 16, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_ModHandler.getIC2Item("dynamite", 1L), Materials.Glue.getFluid(10L), GT_ModHandler.getIC2Item("stickyDynamite", 1L), GT_Values.NI, GT_Values.NI, null, 16, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1L), Materials.Concrete.getMolten(144L), GT_ModHandler.getIC2Item("reinforcedStone", 1L), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), Materials.Water.getFluid(125L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L), GT_Values.NI, GT_Values.NI, null, 12, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), Materials.Water.getFluid(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1L), Materials.Water.getFluid(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 100, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Items.reeds, 1, 32767), Materials.Water.getFluid(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), GT_ModHandler.getDistilledWater(125L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L), GT_Values.NI, GT_Values.NI, null, 12, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), GT_ModHandler.getDistilledWater(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1L), GT_ModHandler.getDistilledWater(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 100, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Items.reeds, 1, 32767), GT_ModHandler.getDistilledWater(100L), new ItemStack(Items.paper, 1, 0), GT_Values.NI, GT_Values.NI, null, 100, 8);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 1), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 2), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 3), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 4), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 5), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 6), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 7), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 8), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 9), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 10), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 11), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 12), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 13), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 14), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 15), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.wool, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 1), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 2), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 3), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 4), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 5), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 6), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 7), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 8), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 9), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 10), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 11), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 12), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 13), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 14), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.carpet, 1, 15), Materials.Chlorine.getFluid(25L), new ItemStack(Blocks.carpet, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, 32767), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.hardened_clay, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.stained_glass, 1, 32767), Materials.Chlorine.getFluid(50L), new ItemStack(Blocks.glass, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.stained_glass_pane, 1, 32767), Materials.Chlorine.getFluid(20L), new ItemStack(Blocks.glass_pane, 1, 0), GT_Values.NI, GT_Values.NI, null, 400, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 8), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 0), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 9), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 1), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 10), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 2), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 11), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 3), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 12), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 4), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 13), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 5), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 14), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 6), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 15), Materials.Water.getFluid(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 7), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 8), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 0), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 9), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 1), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 10), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 2), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 11), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 3), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 12), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 4), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 13), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 5), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 14), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 6), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(GregTech_API.sBlockConcretes, 1, 15), GT_ModHandler.getDistilledWater(250L), new ItemStack(GregTech_API.sBlockConcretes, 1, 7), GT_Values.NI, GT_Values.NI, null, 200, 4);
+ for (int j = 0; j < Dyes.dyeRed.getSizeOfFluidList(); j++) {
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1L), Dyes.dyeRed.getFluidDye(j, 72L), GT_ModHandler.getModItem("BuildCraft|Transport", "pipeWire", 4L, 0), GT_Values.NI, GT_Values.NI, null, 32, 16);
+ }
+ for (int j = 0; j < Dyes.dyeBlue.getSizeOfFluidList(); j++) {
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1L), Dyes.dyeBlue.getFluidDye(j, 72L), GT_ModHandler.getModItem("BuildCraft|Transport", "pipeWire", 4L, 1), GT_Values.NI, GT_Values.NI, null, 32, 16);
+ }
+ for (int j = 0; j < Dyes.dyeGreen.getSizeOfFluidList(); j++) {
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1L), Dyes.dyeGreen.getFluidDye(j, 72L), GT_ModHandler.getModItem("BuildCraft|Transport", "pipeWire", 4L, 2), GT_Values.NI, GT_Values.NI, null, 32, 16);
+ }
+ for (int j = 0; j < Dyes.dyeYellow.getSizeOfFluidList(); j++) {
+ GT_Values.RA.addChemicalBathRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1L), Dyes.dyeYellow.getFluidDye(j, 72L), GT_ModHandler.getModItem("BuildCraft|Transport", "pipeWire", 4L, 3), GT_Values.NI, GT_Values.NI, null, 32, 16);
+ }
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ for (int j = 0; j < Dyes.VALUES[i].getSizeOfFluidList(); j++)
+ {
+ if (i != 15) {
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.wool, 1, 0), Dyes.VALUES[i].getFluidDye(j, 144L), new ItemStack(Blocks.wool, 1, 15 - i), GT_Values.NI, GT_Values.NI, null, 64, 2);
+ }
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.glass, 1, 0), Dyes.VALUES[i].getFluidDye(j, 18L), new ItemStack(Blocks.stained_glass, 1, 15 - i), GT_Values.NI, GT_Values.NI, null, 64, 2);
+ GT_Values.RA.addChemicalBathRecipe(new ItemStack(Blocks.hardened_clay, 1, 0), Dyes.VALUES[i].getFluidDye(j, 18L), new ItemStack(Blocks.stained_hardened_clay, 1, 15 - i), GT_Values.NI, GT_Values.NI, null, 64, 2);
+ }
+ }
+ GT_Values.RA.addFluidExtractionRecipe(ItemList.Dye_SquidInk.get(1L, new Object[0]), GT_Values.NI, FluidRegistry.getFluidStack("squidink", 144), 10000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(ItemList.Dye_Indigo.get(1L, new Object[0]), GT_Values.NI, FluidRegistry.getFluidStack("indigo", 144), 10000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(ItemList.Crop_Drop_Indigo.get(1L, new Object[0]), GT_Values.NI, FluidRegistry.getFluidStack("indigo", 144), 10000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(ItemList.Crop_Drop_MilkWart.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L), GT_ModHandler.getMilk(150L), 1000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(ItemList.Crop_Drop_OilBerry.get(1L, new Object[0]), GT_Values.NI, Materials.Oil.getFluid(100L), 10000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.fish, 1, 0), GT_Values.NI, Materials.FishOil.getFluid(4L), 10000, 16, 4);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.fish, 1, 1), GT_Values.NI, Materials.FishOil.getFluid(6L), 10000, 16, 4);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.fish, 1, 2), GT_Values.NI, Materials.FishOil.getFluid(7L), 10000, 16, 4);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.fish, 1, 3), GT_Values.NI, Materials.FishOil.getFluid(3L), 10000, 16, 4);
+ GT_Values.RA.addFluidExtractionRecipe(new ItemStack(Items.coal, 1, 1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L), Materials.Creosote.getFluid(100L), 1000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L), ItemList.IC2_Plantball.get(1L, new Object[0]), Materials.Creosote.getFluid(5L), 100, 16, 4);
+ GT_Values.RA.addFluidExtractionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), Materials.Water.getFluid(100L), 10000, 32, 4);
+ GT_Values.RA.addFluidExtractionRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L), GT_Values.NI, Materials.Mercury.getFluid(1000L), 10000, 128, 4);
+ GT_Values.RA.addFluidExtractionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Monazite, 1L), GT_Values.NI, Materials.Helium.getFluid(200L), 10000, 64, 64);
+
+ GT_Values.RA.addFluidSmelterRecipe(new ItemStack(Items.snowball, 1, 0), GT_Values.NI, Materials.Water.getFluid(250L), 10000, 32, 4);
+ GT_Values.RA.addFluidSmelterRecipe(new ItemStack(Blocks.snow, 1, 0), GT_Values.NI, Materials.Water.getFluid(1000L), 10000, 128, 4);
+ GT_Values.RA.addFluidSmelterRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L), GT_Values.NI, Materials.Ice.getSolid(1000L), 10000, 128, 4);
+ GT_Values.RA.addFluidSmelterRecipe(GT_ModHandler.getModItem("Forestry", "phosphor", 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphor, 1L), Materials.Lava.getFluid(800L), 1000, 256, 128);
+
+ GT_Values.RA.addAutoclaveRecipe(ItemList.IC2_Energium_Dust.get(9L, new Object[0]), Materials.Water.getFluid(1000L), ItemList.IC2_EnergyCrystal.get(1L, new Object[0]), 10000, 500, 256);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 0), Materials.Water.getFluid(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10), 10000, 2000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 600), Materials.Water.getFluid(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 11), 10000, 2000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 1200), Materials.Water.getFluid(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 12), 10000, 2000, 24);
+ GT_Values.RA.addAutoclaveRecipe(ItemList.IC2_Energium_Dust.get(9L, new Object[0]), GT_ModHandler.getDistilledWater(1000L), ItemList.IC2_EnergyCrystal.get(1L, new Object[0]), 10000, 250, 256);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 0), GT_ModHandler.getDistilledWater(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10), 10000, 1000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 600), GT_ModHandler.getDistilledWater(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 11), 10000, 1000, 24);
+ GT_Values.RA.addAutoclaveRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 1L, 1200), GT_ModHandler.getDistilledWater(200L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 12), 10000, 1000, 24);
+
+ GT_Values.RA.addSlicerRecipe(ItemList.Food_Dough_Chocolate.get(1L, new Object[0]), ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Raw_Cookie.get(4L, new Object[0]), 128, 4);
+ GT_Values.RA.addSlicerRecipe(ItemList.Food_Baked_Bun.get(1L, new Object[0]), ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Bun.get(2L, new Object[0]), 128, 4);
+ GT_Values.RA.addSlicerRecipe(ItemList.Food_Baked_Bread.get(1L, new Object[0]), ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Bread.get(2L, new Object[0]), 128, 4);
+ GT_Values.RA.addSlicerRecipe(ItemList.Food_Baked_Baguette.get(1L, new Object[0]), ItemList.Shape_Slicer_Flat.get(0L, new Object[0]), ItemList.Food_Sliced_Baguette.get(2L, new Object[0]), 128, 4);
+
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 1), 100, 120);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 1), 100, 120);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 2), 200, 120);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 3), 100, 480);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 2L, 4), 200, 120);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherQuartz, 1L), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 5), 300, 120);
+ GT_Values.RA.addFormingPressRecipe(new ItemStack(Items.comparator, 1, 32767), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 6), 300, 120);
+ GT_Values.RA.addFormingPressRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 13), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 16), 200, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CertusQuartz, 1L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 13), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 16), 200, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 14), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 17), 200, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 15), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 18), 200, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 1L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 0L, 19), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 20), 200, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 1L), ItemList.Circuit_Parts_Wiring_Basic.get(4L, new Object[0]), ItemList.Circuit_Board_Basic.get(1L, new Object[0]), 32, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 1L), ItemList.Circuit_Parts_Wiring_Advanced.get(4L, new Object[0]), ItemList.Circuit_Board_Advanced.get(1L, new Object[0]), 32, 64);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 2L), ItemList.Circuit_Parts_Wiring_Elite.get(4L, new Object[0]), ItemList.Circuit_Board_Elite.get(1L, new Object[0]), 32, 256);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lapis, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), ItemList.Circuit_Parts_Advanced.get(2L, new Object[0]), 32, 64);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lazurite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), ItemList.Circuit_Parts_Advanced.get(2L, new Object[0]), 32, 64);
+ GT_Values.RA.addFormingPressRecipe(ItemList.Food_Dough_Sugar.get(4L, new Object[0]), ItemList.Shape_Mold_Cylinder.get(0L, new Object[0]), ItemList.Food_Raw_Cake.get(1L, new Object[0]), 384, 4);
+ GT_Values.RA.addFormingPressRecipe(new ItemStack(Blocks.glass, 1, 32767), ItemList.Shape_Mold_Arrow.get(0L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0]), 64, 4);
+ for (Materials tMat : Materials.VALUES) {
+ if ((tMat.mStandardMoltenFluid != null) && (tMat.contains(SubTag.SOLDERING_MATERIAL)))
+ {
+ int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1 : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2;
+
+ GT_Values.RA.addAssemblerRecipe(ItemList.IC2_Item_Casing_Steel.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1L), tMat.getMolten(144L * tMultiplier / 8L), ItemList.Circuit_Primitive.get(1L, new Object[0]), 16, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Board_Basic.get(1L, new Object[0]), ItemList.Circuit_Primitive.get(2L, new Object[0]), tMat.getMolten(144L * tMultiplier / 4L), ItemList.Circuit_Basic.get(1L, new Object[0]), 32, 16);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Basic.get(1L, new Object[0]), ItemList.Circuit_Primitive.get(2L, new Object[0]), tMat.getMolten(144L * tMultiplier / 4L), ItemList.Circuit_Good.get(1L, new Object[0]), 32, 16);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Board_Advanced.get(1L, new Object[0]), ItemList.Circuit_Parts_Advanced.get(2L, new Object[0]), tMat.getMolten(144L * tMultiplier / 2L), ItemList.Circuit_Advanced.get(1L, new Object[0]), 32, 64);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Board_Advanced.get(1L, new Object[0]), ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1L, new Object[0]), tMat.getMolten(144L * tMultiplier / 2L), ItemList.Circuit_Data.get(1L, new Object[0]), 32, 64);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Board_Elite.get(1L, new Object[0]), ItemList.Circuit_Data.get(3L, new Object[0]), tMat.getMolten(144L * tMultiplier / 1L), ItemList.Circuit_Elite.get(1L, new Object[0]), 32, 256);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Board_Elite.get(1L, new Object[0]), ItemList.Circuit_Parts_Crystal_Chip_Master.get(3L, new Object[0]), tMat.getMolten(144L * tMultiplier / 1L), ItemList.Circuit_Master.get(1L, new Object[0]), 32, 256);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Data.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Plastic, 2L), tMat.getMolten(144L * tMultiplier / 2L), ItemList.Tool_DataStick.get(1L, new Object[0]), 128, 64);
+ for (ItemStack tPlate : new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L) })
+ {
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.lever, 1, 32767), tPlate, tMat.getMolten(144L * tMultiplier / 2L), ItemList.Cover_Controller.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.redstone_torch, 1, 32767), tPlate, tMat.getMolten(144L * tMultiplier / 2L), ItemList.Cover_ActivityDetector.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.heavy_weighted_pressure_plate, 1, 32767), tPlate, tMat.getMolten(144L * tMultiplier / 2L), ItemList.Cover_FluidDetector.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.light_weighted_pressure_plate, 1, 32767), tPlate, tMat.getMolten(144L * tMultiplier / 2L), ItemList.Cover_ItemDetector.get(1L, new Object[0]), 800, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("ecMeter", 1L), tPlate, tMat.getMolten(144L * tMultiplier / 2L), ItemList.Cover_EnergyDetector.get(1L, new Object[0]), 800, 16);
+ }
+ }
+ }
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.redstone_torch, 2, 32767), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), Materials.Concrete.getMolten(144L), new ItemStack(Items.repeater, 1, 0), 800, 1);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.leather, 1, 32767), new ItemStack(Items.lead, 1, 32767), Materials.Glue.getFluid(50L), new ItemStack(Items.name_tag, 1, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 8L), new ItemStack(Items.compass, 1, 32767), GT_Values.NF, new ItemStack(Items.map, 1, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tantalum, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Manganese, 1L), Materials.Plastic.getMolten(144L), ItemList.Battery_RE_ULV_Tantalum.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Elite.get(2L, new Object[0]), ItemList.Circuit_Parts_Crystal_Chip_Elite.get(18L, new Object[0]), GT_Values.NF, ItemList.Tool_DataOrb.get(1L, new Object[0]), 512, 256);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Circuit_Master.get(2L, new Object[0]), ItemList.Circuit_Parts_Crystal_Chip_Master.get(18L, new Object[0]), GT_Values.NF, ItemList.Energy_LapotronicOrb.get(1L, new Object[0]), 512, 1024);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 4L), ItemList.Energy_LapotronicOrb.get(8L, new Object[0]), GT_Values.NF, ItemList.Energy_LapotronicOrb2.get(1L, new Object[0]), 2048, 4096);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 16L), ItemList.Energy_LapotronicOrb2.get(8L, new Object[0]), GT_Values.NF, ItemList.ZPM2.get(1L, new Object[0]), 32768, 4096);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfLife1", 4L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfLife2", 1L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping1", 4L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping2", 1L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping2", 4L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping3", 1L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfLife2", 1L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfLife1", 4L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping2", 1L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping1", 4L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping3", 1L, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("TwilightForest", "item.charmOfKeeping2", 4L, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 16), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 20), Materials.Redstone.getMolten(144L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 23), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 17), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 20), Materials.Redstone.getMolten(144L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 24), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 18), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 20), Materials.Redstone.getMolten(144L), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 22), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1L), new ItemStack(Blocks.sand, 1, 32767), GT_Values.NF, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 2L, 0), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1L), new ItemStack(Blocks.sand, 1, 32767), GT_Values.NF, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 2L, 600), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Fluix, 1L), new ItemStack(Blocks.sand, 1, 32767), GT_Values.NF, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemCrystalSeed", 2L, 1200), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.FR_Wax.get(6L, new Object[0]), new ItemStack(Items.string, 1, 32767), Materials.Water.getFluid(600L), GT_ModHandler.getModItem("Forestry", "candle", 24L, 0), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.FR_Wax.get(2L, new Object[0]), ItemList.FR_Silk.get(1L, new Object[0]), Materials.Water.getFluid(200L), GT_ModHandler.getModItem("Forestry", "candle", 8L, 0), 16, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.FR_Silk.get(9L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 9L, new Object[0]), Materials.Water.getFluid(500L), GT_ModHandler.getModItem("Forestry", "craftingMaterial", 1L, 3), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("Forestry", "propolis", 5L, 2), ItemList.Circuit_Integrated.getWithDamage(0L, 5L, new Object[0]), GT_Values.NF, GT_ModHandler.getModItem("Forestry", "craftingMaterial", 1L, 1), 16, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("Forestry", "sturdyMachine", 1L, 0), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 4L), Materials.Water.getFluid(5000L), ItemList.FR_Casing_Hardened.get(1L, new Object[0]), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), GT_Values.NF, ItemList.FR_Casing_Sturdy.get(1L, new Object[0]), 32, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 6L), Materials.Water.getFluid(1000L), GT_ModHandler.getModItem("Forestry", "chipsets", 1L, 0), 16, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 6L), Materials.Water.getFluid(1000L), GT_ModHandler.getModItem("Forestry", "chipsets", 1L, 1), 32, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 6L), Materials.Water.getFluid(1000L), GT_ModHandler.getModItem("Forestry", "chipsets", 1L, 2), 48, 24);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.WroughtIron, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 6L), Materials.Water.getFluid(1000L), GT_ModHandler.getModItem("Forestry", "chipsets", 1L, 2), 48, 24);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 6L), Materials.Water.getFluid(1000L), GT_ModHandler.getModItem("Forestry", "chipsets", 1L, 3), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Blocks.wool, 1, 32767), Materials.Creosote.getFluid(1000L), new ItemStack(Blocks.torch, 6, 0), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getModItem("Forestry", "craftingMaterial", 5L, 1), ItemList.Circuit_Integrated.getWithDamage(0L, 5L, new Object[0]), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L), 64, 8);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.piston, 1, 32767), new ItemStack(Items.slime_ball, 1, 32767), GT_Values.NF, new ItemStack(Blocks.sticky_piston, 1, 0), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.piston, 1, 32767), ItemList.IC2_Resin.get(1L, new Object[0]), GT_Values.NF, new ItemStack(Blocks.sticky_piston, 1, 0), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.piston, 1, 32767), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.Glue.getFluid(100L), new ItemStack(Blocks.sticky_piston, 1, 0), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 3L), GT_ModHandler.getIC2Item("carbonMesh", 3L), Materials.Glue.getFluid(300L), ItemList.Duct_Tape.get(1L, new Object[0]), 100, 64);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3L), new ItemStack(Items.leather, 1, 32767), Materials.Glue.getFluid(20L), new ItemStack(Items.book, 1, 0), 32, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Paper_Printed_Pages.get(1L, new Object[0]), new ItemStack(Items.leather, 1, 32767), Materials.Glue.getFluid(20L), new ItemStack(Items.written_book, 1, 0), 32, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.IC2_Item_Casing_Tin.get(4L, new Object[0]), new ItemStack(Blocks.glass_pane, 1, 32767), GT_Values.NF, ItemList.Cell_Universal_Fluid.get(1L, new Object[0]), 128, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Baked_Cake.get(1L, new Object[0]), new ItemStack(Items.egg, 1, 0), Materials.Milk.getFluid(3000L), new ItemStack(Items.cake, 1, 0), 100, 8);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Buns.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Bread.get(2L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Breads.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Baguette.get(2L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Baguettes.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Buns.get(1L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Bun.get(2L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Breads.get(1L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Bread.get(2L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Baguettes.get(1L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_Values.NF, ItemList.Food_Sliced_Baguette.get(2L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L), GT_Values.NF, ItemList.Food_Burger_Meat.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Buns.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L), GT_Values.NF, ItemList.Food_Burger_Meat.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), ItemList.Food_Chum.get(1L, new Object[0]), GT_Values.NF, ItemList.Food_Burger_Chum.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Buns.get(1L, new Object[0]), ItemList.Food_Chum.get(1L, new Object[0]), GT_Values.NF, ItemList.Food_Burger_Chum.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Bun.get(2L, new Object[0]), ItemList.Food_Sliced_Cheese.get(3L, new Object[0]), GT_Values.NF, ItemList.Food_Burger_Cheese.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Sliced_Buns.get(1L, new Object[0]), ItemList.Food_Sliced_Cheese.get(3L, new Object[0]), GT_Values.NF, ItemList.Food_Burger_Cheese.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Flat_Dough.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L), GT_Values.NF, ItemList.Food_Raw_Pizza_Meat.get(1L, new Object[0]), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.Food_Flat_Dough.get(1L, new Object[0]), ItemList.Food_Sliced_Cheese.get(3L, new Object[0]), GT_Values.NF, ItemList.Food_Raw_Pizza_Cheese.get(1L, new Object[0]), 100, 4);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 0), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.AnnealedCopper, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 0), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 1), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 2), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 3), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.WroughtIron, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 3), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 4), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 5), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 7), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 8), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 9), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 10), 64, 32);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lapis, 5L), Materials.Glass.getMolten(72L), GT_ModHandler.getModItem("Forestry", "thermionicTubes", 4L, 11), 64, 32);
+
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.Oil.getFluid(16L), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), Materials.Oil.getFluid(16L), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), Materials.Oil.getFluid(16L), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), Materials.Oil.getFluid(16L), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), Materials.Oil.getFluid(16L), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ if(FluidRegistry.getFluid("oilgc") != null){
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(FluidRegistry.getFluid("oilgc"), 16), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(FluidRegistry.getFluid("oilgc"), 16), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(FluidRegistry.getFluid("oilgc"), 16), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new FluidStack(FluidRegistry.getFluid("oilgc"), 16), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new FluidStack(FluidRegistry.getFluid("oilgc"), 16), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(FluidRegistry.getFluid("oilgc"), 64), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)},null, 16, 64);
+ }
+
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(ItemList.sOilLight, 32), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(ItemList.sOilLight, 32), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(ItemList.sOilLight, 32), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new FluidStack(ItemList.sOilLight, 32), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new FluidStack(ItemList.sOilLight, 32), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(ItemList.sOilMedium, 16), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(ItemList.sOilMedium, 16), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(ItemList.sOilMedium, 16), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new FluidStack(ItemList.sOilMedium, 16), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new FluidStack(ItemList.sOilMedium, 16), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(ItemList.sOilHeavy, 8), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(ItemList.sOilHeavy, 8), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(ItemList.sOilHeavy, 8), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new FluidStack(ItemList.sOilHeavy, 8), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new FluidStack(ItemList.sOilHeavy, 8), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(ItemList.sOilExtraHeavy, 4), Materials.Fuel.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(ItemList.sOilExtraHeavy, 4), Materials.Glyceryl.getFluid(1L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(ItemList.sOilExtraHeavy, 4), Materials.Methane.getGas(15L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new FluidStack(ItemList.sOilExtraHeavy, 4), Materials.Lubricant.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new FluidStack(ItemList.sOilExtraHeavy, 4), Materials.SulfuricAcid.getFluid(16L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new FluidStack(ItemList.sNaturalGas, 16), Materials.Methane.getGas(30L), 32, 16, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), Materials.Creosote.getFluid(3L), Materials.Lubricant.getFluid(1L), 16, 24, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), Materials.SeedOil.getFluid(4L), Materials.Lubricant.getFluid(1L), 16, 24, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), Materials.FishOil.getFluid(3L), Materials.Lubricant.getFluid(1L), 16, 24, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.Biomass.getFluid(40L), Materials.Ethanol.getFluid(12L), 16, 24, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 5L, new Object[0]), Materials.Biomass.getFluid(40L), Materials.Water.getFluid(12L), 16, 24, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 5L, new Object[0]), Materials.Water.getFluid(5L), GT_ModHandler.getDistilledWater(4L), 16, 8, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), FluidRegistry.getFluidStack("potion.potatojuice", 2), FluidRegistry.getFluidStack("potion.vodka", 1), 16, 16, true);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), FluidRegistry.getFluidStack("potion.lemonade", 2), FluidRegistry.getFluidStack("potion.alcopops", 1), 16, 16, true);
+
+ GT_Values.RA.addFluidHeaterRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.Water.getFluid(6L), Materials.Water.getGas(960L), 30, 32);
+ GT_Values.RA.addFluidHeaterRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_ModHandler.getDistilledWater(6L), Materials.Water.getGas(960L), 30, 32);
+ GT_Values.RA.addFluidHeaterRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.SeedOil.getFluid(16L), Materials.FryingOilHot.getFluid(16L), 16, 32);
+ GT_Values.RA.addFluidHeaterRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), Materials.FishOil.getFluid(16L), Materials.FryingOilHot.getFluid(16L), 16, 32);
+
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Talc, 1L), FluidRegistry.getFluid("oil"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 1L), FluidRegistry.getFluid("oil"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), FluidRegistry.getFluid("oil"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Talc, 1L), FluidRegistry.getFluid("creosote"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 1L), FluidRegistry.getFluid("creosote"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), FluidRegistry.getFluid("creosote"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Talc, 1L), FluidRegistry.getFluid("seedoil"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 1L), FluidRegistry.getFluid("seedoil"), FluidRegistry.getFluid("lubricant"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), FluidRegistry.getFluid("seedoil"), FluidRegistry.getFluid("lubricant"), false);
+ for (Fluid tFluid : new Fluid[] { FluidRegistry.WATER, GT_ModHandler.getDistilledWater(1L).getFluid() })
+ {
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L), tFluid, FluidRegistry.getFluid("milk"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), tFluid, FluidRegistry.getFluid("potion.wheatyjuice"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L), tFluid, FluidRegistry.getFluid("potion.mineralwater"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), tFluid, FluidRegistry.getFluid("potion.mineralwater"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), tFluid, FluidRegistry.getFluid("potion.mineralwater"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L), tFluid, FluidRegistry.getFluid("potion.mineralwater"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 1L), tFluid, FluidRegistry.getFluid("potion.saltywater"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RockSalt, 1L), tFluid, FluidRegistry.getFluid("potion.saltywater"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), tFluid, FluidRegistry.getFluid("potion.thick"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.magma_cream, 1, 0), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fermented_spider_eye, 1, 0), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.spider_eye, 1, 0), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.speckled_melon, 1, 0), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.ghast_tear, 1, 0), tFluid, FluidRegistry.getFluid("potion.mundane"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.nether_wart, 1, 0), tFluid, FluidRegistry.getFluid("potion.awkward"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Blocks.red_mushroom, 1, 0), tFluid, FluidRegistry.getFluid("potion.poison"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fish, 1, 3), tFluid, FluidRegistry.getFluid("potion.poison.strong"), true);
+ GT_Values.RA.addBrewingRecipe(ItemList.IC2_Grin_Powder.get(1L, new Object[0]), tFluid, FluidRegistry.getFluid("potion.poison.strong"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.reeds, 1, 0), tFluid, FluidRegistry.getFluid("potion.reedwater"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.apple, 1, 0), tFluid, FluidRegistry.getFluid("potion.applejuice"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.golden_apple, 1, 0), tFluid, FluidRegistry.getFluid("potion.goldenapplejuice"), true);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.golden_apple, 1, 1), tFluid, FluidRegistry.getFluid("potion.idunsapplejuice"), true);
+ GT_Values.RA.addBrewingRecipe(ItemList.IC2_Hops.get(1L, new Object[0]), tFluid, FluidRegistry.getFluid("potion.hopsjuice"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L), tFluid, FluidRegistry.getFluid("potion.darkcoffee"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L), tFluid, FluidRegistry.getFluid("potion.chillysauce"), false);
+
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(1L, new Object[0]), 100);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(1L, new Object[0]), 100);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(4L, new Object[0]), 400);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(4L, new Object[0]), 400);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(4L, new Object[0]), 400);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(4L, new Object[0]), 400);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(3L, new Object[0]), 300);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L), new FluidStack(tFluid, 1000), GT_Values.NF, ItemList.IC2_Fertilizer.get(2L, new Object[0]), 200);
+ }
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L), FluidRegistry.getFluid("potion.chillysauce"), FluidRegistry.getFluid("potion.hotsauce"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L), FluidRegistry.getFluid("potion.hotsauce"), FluidRegistry.getFluid("potion.diabolosauce"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L), FluidRegistry.getFluid("potion.diabolosauce"), FluidRegistry.getFluid("potion.diablosauce"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L), FluidRegistry.getFluid("milk"), FluidRegistry.getFluid("potion.coffee"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L), FluidRegistry.getFluid("milk"), FluidRegistry.getFluid("potion.darkchocolatemilk"), false);
+ GT_Values.RA.addBrewingRecipe(ItemList.IC2_Hops.get(1L, new Object[0]), FluidRegistry.getFluid("potion.wheatyjuice"), FluidRegistry.getFluid("potion.wheatyhopsjuice"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), FluidRegistry.getFluid("potion.hopsjuice"), FluidRegistry.getFluid("potion.wheatyhopsjuice"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.tea"), FluidRegistry.getFluid("potion.sweettea"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.coffee"), FluidRegistry.getFluid("potion.cafeaulait"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.cafeaulait"), FluidRegistry.getFluid("potion.laitaucafe"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.lemonjuice"), FluidRegistry.getFluid("potion.lemonade"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.darkcoffee"), FluidRegistry.getFluid("potion.darkcafeaulait"), true);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.darkchocolatemilk"), FluidRegistry.getFluid("potion.chocolatemilk"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L), FluidRegistry.getFluid("potion.tea"), FluidRegistry.getFluid("potion.icetea"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L), FluidRegistry.getFluid("potion.lemonade"), FluidRegistry.getFluid("potion.cavejohnsonsgrenadejuice"), true);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fish, 1, 3), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.waterbreathing"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.magma_cream, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.fireresistance"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.golden_carrot, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.nightvision"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fermented_spider_eye, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.weakness"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.spider_eye, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.poison"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.speckled_melon, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.health"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.ghast_tear, 1, 0), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.regen"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.speed"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L), FluidRegistry.getFluid("potion.awkward"), FluidRegistry.getFluid("potion.strength"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.mundane"), FluidRegistry.getFluid("potion.purpledrink"), true);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fermented_spider_eye, 1, 0), FluidRegistry.getFluid("potion.mundane"), FluidRegistry.getFluid("potion.weakness"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.fermented_spider_eye, 1, 0), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.weakness"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.spider_eye, 1, 0), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.poison.strong"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.speckled_melon, 1, 0), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.health.strong"), false);
+ GT_Values.RA.addBrewingRecipe(new ItemStack(Items.ghast_tear, 1, 0), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.regen.strong"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.speed.strong"), false);
+ GT_Values.RA.addBrewingRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L), FluidRegistry.getFluid("potion.thick"), FluidRegistry.getFluid("potion.strength.strong"), false);
+
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("milk", 50), FluidRegistry.getFluidStack("potion.mundane", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.lemonjuice", 50), FluidRegistry.getFluidStack("potion.limoncello", 25), 1024, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.applejuice", 50), FluidRegistry.getFluidStack("potion.cider", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.goldenapplejuice", 50), FluidRegistry.getFluidStack("potion.goldencider", 25), 1024, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.idunsapplejuice", 50), FluidRegistry.getFluidStack("potion.notchesbrew", 25), 1024, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.reedwater", 50), FluidRegistry.getFluidStack("potion.rum", 25), 1024, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.rum", 50), FluidRegistry.getFluidStack("potion.piratebrew", 10), 2048, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.grapejuice", 50), FluidRegistry.getFluidStack("potion.wine", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.wine", 50), FluidRegistry.getFluidStack("potion.vinegar", 10), 2048, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.wheatyjuice", 50), FluidRegistry.getFluidStack("potion.scotch", 25), 1024, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.scotch", 50), FluidRegistry.getFluidStack("potion.glenmckenner", 10), 2048, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.wheatyhopsjuice", 50), FluidRegistry.getFluidStack("potion.beer", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.hopsjuice", 50), FluidRegistry.getFluidStack("potion.darkbeer", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.darkbeer", 50), FluidRegistry.getFluidStack("potion.dragonblood", 10), 2048, true);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.awkward", 50), FluidRegistry.getFluidStack("potion.weakness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.mundane", 50), FluidRegistry.getFluidStack("potion.weakness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.thick", 50), FluidRegistry.getFluidStack("potion.weakness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.poison", 50), FluidRegistry.getFluidStack("potion.damage", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.health", 50), FluidRegistry.getFluidStack("potion.damage", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.waterbreathing", 50), FluidRegistry.getFluidStack("potion.damage", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.nightvision", 50), FluidRegistry.getFluidStack("potion.invisibility", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.fireresistance", 50), FluidRegistry.getFluidStack("potion.slowness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.speed", 50), FluidRegistry.getFluidStack("potion.slowness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.strength", 50), FluidRegistry.getFluidStack("potion.weakness", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.regen", 50), FluidRegistry.getFluidStack("potion.poison", 25), 1024, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.poison.strong", 50), FluidRegistry.getFluidStack("potion.damage.strong", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.health.strong", 50), FluidRegistry.getFluidStack("potion.damage.strong", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.speed.strong", 50), FluidRegistry.getFluidStack("potion.slowness.strong", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.strength.strong", 50), FluidRegistry.getFluidStack("potion.weakness.strong", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.regen.strong", 50), FluidRegistry.getFluidStack("potion.poison.strong", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.poison.long", 50), FluidRegistry.getFluidStack("potion.damage.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.waterbreathing.long", 50), FluidRegistry.getFluidStack("potion.damage.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.nightvision.long", 50), FluidRegistry.getFluidStack("potion.invisibility.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.fireresistance.long", 50), FluidRegistry.getFluidStack("potion.slowness.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.speed.long", 50), FluidRegistry.getFluidStack("potion.slowness.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.strength.long", 50), FluidRegistry.getFluidStack("potion.weakness.long", 10), 2048, false);
+ GT_Values.RA.addFermentingRecipe(FluidRegistry.getFluidStack("potion.regen.long", 50), FluidRegistry.getFluidStack("potion.poison.long", 10), 2048, false);
+
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_PotatoChips.get(1L, new Object[0]), ItemList.Food_PotatoChips.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Potato_On_Stick.get(1L, new Object[0]), ItemList.Food_Potato_On_Stick_Roasted.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bun.get(1L, new Object[0]), ItemList.Food_Baked_Bun.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bread.get(1L, new Object[0]), ItemList.Food_Baked_Bread.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L, new Object[0]), ItemList.Food_Baked_Baguette.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Pizza_Veggie.get(1L, new Object[0]), ItemList.Food_Baked_Pizza_Veggie.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Pizza_Cheese.get(1L, new Object[0]), ItemList.Food_Baked_Pizza_Cheese.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Pizza_Meat.get(1L, new Object[0]), ItemList.Food_Baked_Pizza_Meat.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L, new Object[0]), ItemList.Food_Baked_Baguette.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cake.get(1L, new Object[0]), ItemList.Food_Baked_Cake.get(1L, new Object[0]));
+ GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cookie.get(1L, new Object[0]), new ItemStack(Items.cookie, 1));
+ GT_ModHandler.addSmeltingRecipe(new ItemStack(Items.slime_ball, 1), ItemList.IC2_Resin.get(1L, new Object[0]));
+
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.bookshelf, 1, 32767), new ItemStack(Items.book, 3, 0));
+ GT_ModHandler.addExtractionRecipe(new ItemStack(Items.slime_ball, 1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 2L));
+ GT_ModHandler.addExtractionRecipe(ItemList.IC2_Resin.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 3L));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getIC2Item("rubberSapling", 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getIC2Item("rubberLeaves", 16L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
+ GT_ModHandler.addExtractionRecipe(ItemList.Cell_Air.get(1L, new Object[0]), ItemList.Cell_Empty.get(1L, new Object[0]));
+ if(Loader.isModLoaded("ExtrabiomesXL")){
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "waterplant1", 1, 0), new ItemStack(Items.dye,4,2));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "vines", 1, 0), new ItemStack(Items.dye,4,1));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 11), new ItemStack(Items.dye,4,11));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 10), new ItemStack(Items.dye,4,5));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 9), new ItemStack(Items.dye,4,14));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 8), new ItemStack(Items.dye,4,14));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 7), new ItemStack(Items.dye,4,1));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 6), new ItemStack(Items.dye,4,1));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 5), new ItemStack(Items.dye,4,11));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 0), new ItemStack(Items.dye,4,9));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 4), new ItemStack(Items.dye,4,11));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 3), new ItemStack(Items.dye,4,13));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower1", 1, 3), new ItemStack(Items.dye,4,5));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 2), new ItemStack(Items.dye,4,5));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower1", 1, 1), new ItemStack(Items.dye,4,12));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 15), new ItemStack(Items.dye,4,11));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 14), new ItemStack(Items.dye,4,1));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 13), new ItemStack(Items.dye,4,9));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 12), new ItemStack(Items.dye,4,14));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 11), new ItemStack(Items.dye,4,7));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower1", 1, 7), new ItemStack(Items.dye,4,7));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower1", 1, 2), new ItemStack(Items.dye,4,11));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower3", 1, 13), new ItemStack(Items.dye,4,6));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 6), new ItemStack(Items.dye,4,12));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 5), new ItemStack(Items.dye,4,10));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 2), new ItemStack(Items.dye,4,1));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 1), new ItemStack(Items.dye,4,9));
+ GT_ModHandler.addExtractionRecipe(GT_ModHandler.getModItem("ExtrabiomesXL", "flower2", 1, 0), new ItemStack(Items.dye,4,13));
+ }
+
+ GT_ModHandler.addCompressionRecipe(ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), ItemList.IC2_Industrial_Diamond.get(1L, new Object[0]));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1L), GT_ModHandler.getIC2Item("Uran238", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1L), GT_ModHandler.getIC2Item("Uran235", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1L), GT_ModHandler.getIC2Item("Plutonium", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1L), GT_ModHandler.getIC2Item("smallUran235", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L), GT_ModHandler.getIC2Item("smallPlutonium", 1L));
+ GT_ModHandler.addCompressionRecipe(new ItemStack(Blocks.ice, 2, 32767), new ItemStack(Blocks.packed_ice, 1, 0));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L), new ItemStack(Blocks.ice, 1, 0));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 4L), GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartz", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 8L, 10), GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartz", 1L));
+ GT_ModHandler.addCompressionRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 8L, 11), new ItemStack(Blocks.quartz_block, 1, 0));
+ GT_ModHandler.addCompressionRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 8L, 12), GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockFluix", 1L));
+ GT_ModHandler.addCompressionRecipe(new ItemStack(Items.quartz, 4, 0), new ItemStack(Blocks.quartz_block, 1, 0));
+ GT_ModHandler.addCompressionRecipe(new ItemStack(Items.wheat, 9, 0), new ItemStack(Blocks.hay_block, 1, 0));
+ GT_ModHandler.addCompressionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 4L), new ItemStack(Blocks.glowstone, 1));
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Graphite, 9L), GT_Values.NI, 500, 48);
+ GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L));
+ GT_ModHandler.addSmeltingRecipe(GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+ GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L));
+ GT_ModHandler.addSmeltingRecipe(GT_OreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+ GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L));
+ GT_ModHandler.addSmeltingRecipe(GT_OreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+ GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L));
+ GT_ModHandler.addSmeltingRecipe(GT_OreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+ GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L));
+ GT_ModHandler.addSmeltingRecipe(GT_OreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+
+ GT_ModHandler.addPulverisationRecipe(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockSkyStone", 1L, 32767), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 45), GT_Values.NI, 0, false);
+ GT_ModHandler.addPulverisationRecipe(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockSkyChest", 1L, 32767), GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 8L, 45), GT_Values.NI, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.blaze_rod, 1), new ItemStack(Items.blaze_powder, 3), new ItemStack(Items.blaze_powder, 1), 50, false);
+ GT_ModHandler.addPulverisationRecipe(GT_ModHandler.getModItem("Railcraft", "cube.crushed.obsidian", 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L), GT_Values.NI, 0, true);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.flint, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Flint, 4L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Flint, 1L), 40, true);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.red_mushroom, 1, 32767), ItemList.IC2_Grin_Powder.get(1L, new Object[0]));
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.item_frame, 1, 32767), new ItemStack(Items.leather, 1), GT_OreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 4L), 95, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Items.bow, 1, 0), new ItemStack(Items.string, 3), GT_OreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 3L), 95, false);
+
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.stonebrick, 1, 0), new ItemStack(Blocks.stonebrick, 1, 2), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.stone, 1, 0), new ItemStack(Blocks.cobblestone, 1, 0), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.cobblestone, 1, 0), new ItemStack(Blocks.gravel, 1, 0), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.sandstone, 1, 32767), new ItemStack(Blocks.sand, 1, 0), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.ice, 1, 0), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.packed_ice, 1, 0), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 2L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.hardened_clay, 1, 0), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.brick_block, 1, 0), new ItemStack(Items.brick, 3, 0), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.nether_brick, 1, 0), new ItemStack(Items.netherbrick, 3, 0), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.stained_glass, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.glass, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.stained_glass_pane, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3L), 16, 10);
+ GT_Values.RA.addForgeHammerRecipe(new ItemStack(Blocks.glass_pane, 1, 32767), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3L), 16, 10);
+
+ GT_Values.RA.addForgeHammerRecipe(GT_ModHandler.getModItem("HardcoreEnderExpansion", "endium_ore", 1), GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Endium,1), 16, 10);
+ GT_ModHandler.addPulverisationRecipe(GT_ModHandler.getModItem("HardcoreEnderExpansion", "endium_ore", 1), GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Endium,2),GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone,1),50,GT_Values.NI,0, true);
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Endium, GT_ModHandler.getModItem("HardcoreEnderExpansion", "endium_ingot", 1), true, true);
+
+ GT_Values.RA.addAmplifier(ItemList.IC2_Scrap.get(9L, new Object[0]), 180, 1);
+ GT_Values.RA.addAmplifier(ItemList.IC2_Scrapbox.get(1L, new Object[0]), 180, 1);
+
+ GT_Values.RA.addBoxingRecipe(ItemList.IC2_Scrap.get(9L, new Object[0]), ItemList.Schematic_3by3.get(0L, new Object[0]), ItemList.IC2_Scrapbox.get(1L, new Object[0]), 16, 1);
+ GT_Values.RA.addBoxingRecipe(ItemList.Food_Fries.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L), ItemList.Food_Packaged_Fries.get(1L, new Object[0]), 64, 16);
+ GT_Values.RA.addBoxingRecipe(ItemList.Food_PotatoChips.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), ItemList.Food_Packaged_PotatoChips.get(1L, new Object[0]), 64, 16);
+ GT_Values.RA.addBoxingRecipe(ItemList.Food_ChiliChips.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), ItemList.Food_Packaged_ChiliChips.get(1L, new Object[0]), 64, 16);
+
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 3L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silicon, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ElectricalSteel, 4L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 2L), (int)Math.max(Materials.ElectricalSteel.getMass() / 40L, 1L) * Materials.ElectricalSteel.mBlastFurnaceTemp, 480, Materials.ElectricalSteel.mBlastFurnaceTemp);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tungsten, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.TungstenSteel, 2L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), (int)Math.max(Materials.TungstenSteel.getMass() / 80L, 1L) * Materials.TungstenSteel.mBlastFurnaceTemp, 480, Materials.TungstenSteel.mBlastFurnaceTemp);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Vanadium, 3L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gallium, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.VanadiumGallium, 4L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 2L), (int)Math.max(Materials.VanadiumGallium.getMass() / 40L, 1L) * Materials.VanadiumGallium.mBlastFurnaceTemp, 480, Materials.VanadiumGallium.mBlastFurnaceTemp);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Niobium, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.NiobiumTitanium, 2L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), (int)Math.max(Materials.NiobiumTitanium.getMass() / 80L, 1L) * Materials.NiobiumTitanium.mBlastFurnaceTemp, 480, Materials.NiobiumTitanium.mBlastFurnaceTemp);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Nickel, 4L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Chrome, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Nichrome, 5L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 2L), (int)Math.max(Materials.Nichrome.getMass() / 32L, 1L) * Materials.Nichrome.mBlastFurnaceTemp, 480, Materials.Nichrome.mBlastFurnaceTemp);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ruby, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L), 400, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L), 320, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GreenSapphire, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L), 400, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L), 320, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_Values.NI, 400, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), GT_Values.NI, 320, 100, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ilmenite, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 4L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Titanium, 4L), 800, 500, 1700);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ilmenite, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 5L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Titanium, 5L), 640, 500, 1700);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Galena, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 4L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Lead, 4L), 400, 500, 1500);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Galena, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 5L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Lead, 5L), 320, 500, 1500);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnetite, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 4L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 400, 500, 1000);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Magnetite, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 5L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Ash, 1L), 320, 500, 1000);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 500, 120, 1000);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.PigIron, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 100, 120, 1000);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.WroughtIron, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 100, 120, 1000);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ShadowIron, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ShadowSteel, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 500, 120, 1100);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.MeteoricIron, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.MeteoricSteel, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L), 500, 120, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.AnnealedCopper, 1L), GT_Values.NI, 500, 120, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L), GT_Values.NI, Materials.Oxygen.getGas(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.AnnealedCopper, 1L), GT_Values.NI, 500, 120, 1200);
+ GT_Values.RA.addBlastRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ElectricalSteel, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DarkSteel, 1L), GT_Values.NI, 4000, 360, 2000);
+
+ GT_Values.RA.addCannerRecipe(GT_ModHandler.getIC2Item("fuelRod", 1), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 1L), GT_ModHandler.getIC2Item("reactorLithiumCell", 1,1) , null, 16, 64);
+ GT_Values.RA.addFluidExtractionRecipe(GT_ModHandler.getIC2Item("TritiumCell", 1), GT_ModHandler.getIC2Item("fuelRod", 1), Materials.Tritium.getGas(32), 10000, 16, 64);
+ GT_Values.RA.addCannerRecipe( GT_ModHandler.getIC2Item("fuelRod", 1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium,3), ItemList.ThoriumCell_1.get(1L, new Object[0]), null, 30, 16);
+ GT_Values.RA.addCannerRecipe( GT_ModHandler.getIC2Item("fuelRod", 1), GT_ModHandler.getIC2Item("UranFuel",1), GT_ModHandler.getIC2Item("reactorUraniumSimple",1,1), null, 30, 16);
+ GT_Values.RA.addCannerRecipe( GT_ModHandler.getIC2Item("fuelRod", 1), GT_ModHandler.getIC2Item("MOXFuel",1), GT_ModHandler.getIC2Item("reactorMOXSimple",1,1), null, 30, 16);
+
+ GT_Values.RA.addFusionReactorRecipe(Materials.Lithium.getMolten(16), Materials.Tungsten.getMolten(16), Materials.Iridium.getMolten(16), 32, 32768, 300000000);
+ GT_Values.RA.addFusionReactorRecipe(Materials.Deuterium.getGas(125), Materials.Tritium.getGas(125), Materials.Helium.getPlasma(125), 16, 4096, 40000000); //Mark 1 Cheap //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Deuterium.getGas(125), Materials.Helium_3.getGas(125), Materials.Helium.getPlasma(125), 16, 2048, 60000000); //Mark 1 Expensive //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Carbon.getMolten(125), Materials.Helium_3.getGas(125), Materials.Oxygen.getPlasma(125), 32, 4096, 80000000); //Mark 1 Expensive //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Aluminium.getMolten(16), Materials.Lithium.getMolten(16), Materials.Sulfur.getPlasma(125), 32, 10240, 240000000); //Mark 2 Cheap
+ GT_Values.RA.addFusionReactorRecipe(Materials.Beryllium.getMolten(16), Materials.Deuterium.getGas(375), Materials.Nitrogen.getPlasma(175), 16, 16384, 180000000); //Mark 2 Expensive //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Silicon.getMolten(16), Materials.Magnesium.getMolten(16), Materials.Iron.getPlasma(125), 32, 8192, 360000000); //Mark 3 Cheap //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Potassium.getMolten(16), Materials.Fluorine.getGas(125), Materials.Nickel.getPlasma(125), 16, 32768, 480000000); //Mark 3 Expensive //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Beryllium.getMolten(16), Materials.Tungsten.getMolten(16), Materials.Platinum.getMolten(16), 32, 32768, 150000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Neodymium.getMolten(16), Materials.Hydrogen.getGas(48), Materials.Europium.getMolten(16), 64, 24576, 150000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Lutetium.getMolten(16), Materials.Chrome.getMolten(16), Materials.Americium.getMolten(16), 96, 49152, 200000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Plutonium.getMolten(16), Materials.Thorium.getMolten(16), Materials.Naquadah.getMolten(16), 64, 32768, 300000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Americium.getMolten(16), Materials.Naquadria.getMolten(16), Materials.Neutronium.getMolten(1), 1200, 98304, 600000000); //
+
+ GT_Values.RA.addFusionReactorRecipe(Materials.Tungsten.getMolten(16), Materials.Helium.getGas(16), Materials.Osmium.getMolten(16), 64, 24578, 150000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Manganese.getMolten(16), Materials.Hydrogen.getGas(16), Materials.Iron.getMolten(16), 64, 8192, 120000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Mercury.getFluid(16), Materials.Magnesium.getMolten(16), Materials.Uranium.getMolten(16), 64, 49152, 240000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Gold.getMolten(16), Materials.Aluminium.getMolten(16), Materials.Uranium.getMolten(16), 64, 49152, 240000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Uranium.getMolten(16), Materials.Helium.getGas(16), Materials.Plutonium.getMolten(16), 128, 49152, 480000000); //
+ GT_Values.RA.addFusionReactorRecipe(Materials.Vanadium.getMolten(16), Materials.Hydrogen.getGas(125), Materials.Chrome.getMolten(16), 64, 24576, 140000000); //
+
+ GT_ModHandler.removeRecipeByOutput(ItemList.IC2_Fertilizer.get(1L, new Object[0]));
+ GT_Values.RA.addImplosionRecipe(ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), 8, ItemList.IC2_Industrial_Diamond.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L));
+ GT_Values.RA.addFluidExtractionRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite,1L), null, Materials.Glass.getMolten(250), 10000, 600, 28);//(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SiliconDioxide,1L), GT_OreDictUnificator.get(OrePrefixes.dust,Materials.SiliconDioxide,2L),GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glass,1L)/** GT_Utility.fillFluidContainer(Materials.Glass.getMolten(1000), ItemList.Cell_Empty.get(1, new Object[0]), true, true)**/, 600, 16);
+
+ GT_Values.RA.addDistillationTowerRecipe(Materials.Oil.getFluid(64L), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)},null, 16, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(ItemList.sOilLight, 128), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)}, null, 16, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(ItemList.sOilMedium, 64), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)}, null, 16, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(ItemList.sOilHeavy, 32), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)}, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.HydratedCoal, 1L), 24, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(ItemList.sOilExtraHeavy, 16), new FluidStack[]{Materials.Lubricant.getFluid(16L) , Materials.Fuel.getFluid(64L), Materials.SulfuricAcid.getFluid(64L), Materials.Glyceryl.getFluid(4L), Materials.Methane.getGas(60L)}, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.HydratedCoal, 1L), 24, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(ItemList.sNaturalGas, 64), new FluidStack[]{Materials.Methane.getGas(120L)}, null, 16, 64);
+ GT_Values.RA.addDistillationTowerRecipe(Materials.Creosote.getFluid(24L), new FluidStack[]{Materials.Lubricant.getFluid(12L)}, null, 16, 96);
+ GT_Values.RA.addDistillationTowerRecipe(Materials.SeedOil.getFluid(32L), new FluidStack[]{Materials.Lubricant.getFluid(12L)}, null, 16, 96);
+ GT_Values.RA.addDistillationTowerRecipe(Materials.FishOil.getFluid(24L), new FluidStack[]{Materials.Lubricant.getFluid(12L)}, null, 16, 96);
+ GT_Values.RA.addDistillationTowerRecipe(Materials.Biomass.getFluid(150L), new FluidStack[]{Materials.Ethanol.getFluid(60L),Materials.Water.getFluid(60L)}, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 1L), 25, 64);
+ GT_Values.RA.addDistillationTowerRecipe(Materials.Water.getFluid(288L), new FluidStack[]{GT_ModHandler.getDistilledWater(260L)}, null, 16, 64);
+ GT_Values.RA.addDistillationTowerRecipe(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 250), new FluidStack[]{new FluidStack(FluidRegistry.getFluid("ic2biogas"), 8000),Materials.Water.getFluid(125L)}, ItemList.IC2_Fertilizer.get(1, new Object[0]), 150, 512);
+ GT_Values.RA.addFuel(GT_ModHandler.getIC2Item("biogasCell", 1L), null, 32, 1);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new FluidStack(FluidRegistry.getFluid("ic2biomass"), 1), new FluidStack(FluidRegistry.getFluid("ic2biogas"),32), 20, 30, false);
+ GT_Values.RA.addDistilleryRecipe(ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new FluidStack(FluidRegistry.getFluid("ic2biomass"), 4), Materials.Water.getFluid(2), 80, 30, false);
+
+
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 6), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "GluttonyShard", 1L), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "FMResource", 1L, 3), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,1), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,2), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,3), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,4), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,5), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ForbiddenMagic", "NetherShard", 1L,6), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("TaintedMagic", "WarpedShard", 1L), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("TaintedMagic", "FluxShard", 1L), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("TaintedMagic", "EldritchShard", 1L), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ThaumicTinkerer", "kamiResource", 1L,6), null, 720, 5);
+ GT_Values.RA.addFuel(GT_ModHandler.getModItem("ThaumicTinkerer", "kamiResource", 1L,7), null, 720, 5);
+
+ GT_Values.RA.addElectrolyzerRecipe(GT_Values.NI, ItemList.Cell_Empty.get(1L, new Object[0]), Materials.Water.getFluid(3000L), Materials.Hydrogen.getGas(2000L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 1500, 30);
+ GT_Values.RA.addElectrolyzerRecipe(GT_Values.NI, ItemList.Cell_Empty.get(1L, new Object[0]), GT_ModHandler.getDistilledWater(3000L), Materials.Hydrogen.getGas(2000L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 1500, 30);
+ GT_Values.RA.addElectrolyzerRecipe(GT_ModHandler.getIC2Item("electrolyzedWaterCell", 3L), 0, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 30, 30);
+ GT_Values.RA.addElectrolyzerRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L), 0, GT_ModHandler.getIC2Item("electrolyzedWaterCell", 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, 490, 30);
+ GT_Values.RA.addElectrolyzerRecipe(ItemList.Dye_Bonemeal.get(3L, new Object[0]), 0, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, 98, 26);
+ GT_Values.RA.addElectrolyzerRecipe(new ItemStack(Blocks.sand, 8), 0, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, 500, 25);
+
+
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), Materials.Water.getFluid(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), Materials.Water.getFluid(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), Materials.Water.getFluid(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), GT_ModHandler.getDistilledWater(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), GT_ModHandler.getDistilledWater(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), GT_ModHandler.getDistilledWater(1000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3L), 500);
+
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1L), 1000);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L), GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1L), 1000);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), Materials.Oxygen.getGas(3000L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 5L), 500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), GT_Values.NI, Materials.Hydrogen.getGas(4000L), Materials.Methane.getGas(5000L), GT_Values.NI, 3500);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), GT_Values.NI, Materials.Water.getFluid(2000L), Materials.SulfuricAcid.getFluid(3000L), GT_Values.NI, 1150);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), Materials.Oxygen.getGas(4000L), Materials.SodiumPersulfate.getFluid(6000L), GT_Values.NI, 8000);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), Materials.Water.getFluid(2000L), Materials.Glyceryl.getFluid(4000L), ItemList.Cell_Empty.get(1L, new Object[0]), 2700);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 1L), GT_Values.NI, Materials.Glyceryl.getFluid(250L), Materials.NitroFuel.getFluid(1250L), ItemList.Cell_Empty.get(1L, new Object[0]), 250);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glyceryl, 1L), GT_Values.NI, Materials.Fuel.getFluid(4000L), Materials.NitroFuel.getFluid(5000L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L), GT_Values.NI, Materials.Oxygen.getGas(2000L), Materials.NitrogenDioxide.getGas(3000L), ItemList.Cell_Empty.get(1L, new Object[0]), 1250);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 2L), GT_Values.NI, Materials.Nitrogen.getGas(1000L), Materials.NitrogenDioxide.getGas(3000L), ItemList.Cell_Empty.get(2L, new Object[0]), 1250);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), GT_Values.NI, Materials.Hydrogen.getGas(2000L), GT_ModHandler.getDistilledWater(3000L), ItemList.Cell_Empty.get(1L, new Object[0]), 10);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), GT_Values.NI, Materials.Oxygen.getGas(500L), GT_ModHandler.getDistilledWater(1500L), ItemList.Cell_Empty.get(1L, new Object[0]), 5);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L), Materials.Glass.getMolten(864L), GT_Values.NF, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.glass", 6L), 50);
+
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8L), new ItemStack(Items.melon, 1, 32767), new ItemStack(Items.speckled_melon, 1, 0), 50);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8L), new ItemStack(Items.carrot, 1, 32767), new ItemStack(Items.golden_carrot, 1, 0), 50);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 8L), new ItemStack(Items.apple, 1, 32767), new ItemStack(Items.golden_apple, 1, 0), 50);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Gold, 8L), new ItemStack(Items.apple, 1, 32767), new ItemStack(Items.golden_apple, 1, 1), 50);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1L), 50);
+ GT_Values.RA.addChemicalRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L), new ItemStack(Items.slime_ball, 1, 32767), new ItemStack(Items.magma_cream, 1, 0), 50);
+
+ GT_Values.RA.addBenderRecipe(ItemList.IC2_Mixed_Metal_Ingot.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Advanced, 1L), 100, 8);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 6L), ItemList.RC_Rail_Standard.get(2L, new Object[0]), 200, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 6L), ItemList.RC_Rail_Standard.get(4L, new Object[0]), 400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 6L), ItemList.RC_Rail_Standard.get(5L, new Object[0]), 400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 6L), ItemList.RC_Rail_Standard.get(3L, new Object[0]), 300, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 6L), ItemList.RC_Rail_Standard.get(8L, new Object[0]), 800, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 6L), ItemList.RC_Rail_Standard.get(12L, new Object[0]), 1200, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 6L), ItemList.RC_Rail_Standard.get(16L, new Object[0]), 1600, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 6L), ItemList.RC_Rail_Reinforced.get(24L, new Object[0]), 2400, 30);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 12L), ItemList.RC_Rebar.get(4L, new Object[0]), 200, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 12L), ItemList.RC_Rebar.get(8L, new Object[0]), 400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 12L), ItemList.RC_Rebar.get(10L, new Object[0]), 400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 12L), ItemList.RC_Rebar.get(8L, new Object[0]), 400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 12L), ItemList.RC_Rebar.get(16L, new Object[0]), 800, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 12L), ItemList.RC_Rebar.get(24L, new Object[0]), 1200, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 12L), ItemList.RC_Rebar.get(32L, new Object[0]), 1600, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 12L), ItemList.RC_Rebar.get(48L, new Object[0]), 2400, 15);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 12L), ItemList.Cell_Empty.get(6L, new Object[0]), 1200, 8);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 12L), new ItemStack(Items.bucket, 4, 0), 800, 4);
+ GT_Values.RA.addBenderRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 12L), new ItemStack(Items.bucket, 4, 0), 800, 4);
+ GT_Values.RA.addBenderRecipe(ItemList.IC2_Item_Casing_Iron.get(2L, new Object[0]), GT_ModHandler.getIC2Item("fuelRod", 1L), 100, 8);
+ GT_Values.RA.addBenderRecipe(ItemList.IC2_Item_Casing_Tin.get(1L, new Object[0]), ItemList.IC2_Food_Can_Empty.get(1L, new Object[0]), 100, 8);
+
+ GT_Values.RA.addVacuumFreezerRecipe(GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 32767), GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L,1), 100);
+ GT_Values.RA.addVacuumFreezerRecipe(GT_ModHandler.getIC2Item("reactorCoolantTriple", 1L, 32767), GT_ModHandler.getIC2Item("reactorCoolantTriple", 1L,1), 300);
+ GT_Values.RA.addVacuumFreezerRecipe(GT_ModHandler.getIC2Item("reactorCoolantSix", 1L, 32767), GT_ModHandler.getIC2Item("reactorCoolantSix", 1L,1), 600);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_He_1.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_He_1.get(1L, new Object[0]), 600);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_He_3.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_He_3.get(1L, new Object[0]), 1800);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_He_6.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_He_6.get(1L, new Object[0]), 3600);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_NaK_1.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_NaK_1.get(1L, new Object[0]), 600);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_NaK_3.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_NaK_3.get(1L, new Object[0]),1800);
+ GT_Values.RA.addVacuumFreezerRecipe(ItemList.Reactor_Coolant_NaK_6.getWildcard(1L, new Object[0]), ItemList.Reactor_Coolant_NaK_6.get(1L, new Object[0]),3600);
+ GT_Values.RA.addVacuumFreezerRecipe(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L), 50);
+
+ GT_Values.RA.addAlloySmelterRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 2L), ItemList.TE_Hardened_Glass.get(2L, new Object[0]), 200, 16);
+ GT_Values.RA.addAlloySmelterRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 2L), ItemList.TE_Hardened_Glass.get(2L, new Object[0]), 200, 16);
+
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("BuildCraft|Transport", "item.buildcraftPipe.pipestructurecobblestone", 1L, 0), GT_ModHandler.getModItem("BuildCraft|Transport", "pipePlug", 8L, 0), GT_Values.NI, 32, 16);
+ for (int i = 0; i < 16; i++) {
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.stained_glass, 3, i), new ItemStack(Blocks.stained_glass_pane, 8, i), GT_Values.NI, 50, 8);
+ }
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.glass, 3, 0), new ItemStack(Blocks.glass_pane, 8, 0), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.stone, 1, 0), new ItemStack(Blocks.stone_slab, 2, 0), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.stone_slab, 2, 1), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.cobblestone, 1, 0), new ItemStack(Blocks.stone_slab, 2, 3), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.brick_block, 1, 0), new ItemStack(Blocks.stone_slab, 2, 4), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.stonebrick, 1, 0), new ItemStack(Blocks.stone_slab, 2, 5), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.nether_brick, 1, 0), new ItemStack(Blocks.stone_slab, 2, 6), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.quartz_block, 1, 32767), new ItemStack(Blocks.stone_slab, 2, 7), GT_Values.NI, 25, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.glowstone, 1, 0), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Glowstone, 4L), GT_Values.NI, 100, 16);
+
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), ItemList.IC2_Item_Casing_Iron.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), ItemList.IC2_Item_Casing_Iron.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L), ItemList.IC2_Item_Casing_Gold.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Bronze, 1L), ItemList.IC2_Item_Casing_Bronze.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 1L), ItemList.IC2_Item_Casing_Copper.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnnealedCopper, 1L), ItemList.IC2_Item_Casing_Copper.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 1L), ItemList.IC2_Item_Casing_Tin.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 1L), ItemList.IC2_Item_Casing_Lead.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ GT_Values.RA.addCutterRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L), ItemList.IC2_Item_Casing_Steel.get(2L, new Object[0]), GT_Values.NI, 50, 16);
+ for (byte i = 0; i < 16; i = (byte)(i + 1)) {
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wool, 2, i), new ItemStack(Blocks.carpet, 3, i), GT_Values.NI, 50, 8);
+ }
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 0), ItemList.Plank_Oak.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 1), ItemList.Plank_Spruce.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 2), ItemList.Plank_Birch.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 3), ItemList.Plank_Jungle.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 4), ItemList.Plank_Acacia.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(new ItemStack(Blocks.wooden_slab, 1, 5), ItemList.Plank_DarkOak.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 0), ItemList.Plank_Larch.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 1), ItemList.Plank_Teak.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 2), ItemList.Plank_Acacia_Green.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 3), ItemList.Plank_Lime.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 4), ItemList.Plank_Chestnut.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 5), ItemList.Plank_Wenge.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 6), ItemList.Plank_Baobab.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs1", 1L, 7), ItemList.Plank_Sequoia.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 0), ItemList.Plank_Kapok.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 1), ItemList.Plank_Ebony.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 2), ItemList.Plank_Mahagony.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 3), ItemList.Plank_Balsa.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 4), ItemList.Plank_Willow.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 5), ItemList.Plank_Walnut.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 6), ItemList.Plank_Greenheart.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs2", 1L, 7), ItemList.Plank_Cherry.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 0), ItemList.Plank_Mahoe.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 1), ItemList.Plank_Poplar.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 2), ItemList.Plank_Palm.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 3), ItemList.Plank_Papaya.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 4), ItemList.Plank_Pine.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 5), ItemList.Plank_Plum.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 6), ItemList.Plank_Maple.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+ GT_Values.RA.addCutterRecipe(GT_ModHandler.getModItem("Forestry", "slabs3", 1L, 7), ItemList.Plank_Citrus.get(2L, new Object[0]), GT_Values.NI, 50, 8);
+
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Cupronickel, 1L), ItemList.Shape_Mold_Credit.get(0L, new Object[0]), ItemList.Credit_Greg_Cupronickel.get(4L, new Object[0]), 100, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Brass, 1L), ItemList.Shape_Mold_Credit.get(0L, new Object[0]), ItemList.Coin_Doge.get(4L, new Object[0]), 100, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), ItemList.Shape_Mold_Credit.get(0L, new Object[0]), ItemList.Credit_Iron.get(4L, new Object[0]), 100, 16);
+ GT_Values.RA.addFormingPressRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), ItemList.Shape_Mold_Credit.get(0L, new Object[0]), ItemList.Credit_Iron.get(4L, new Object[0]), 100, 16);
+
+ if(!GT_Mod.gregtechproxy.mDisableIC2Cables){
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 1L), GT_ModHandler.getIC2Item("copperCableItem", 3L), 100, 2);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnnealedCopper, 1L), GT_ModHandler.getIC2Item("copperCableItem", 3L), 100, 2);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 1L), GT_ModHandler.getIC2Item("tinCableItem", 4L), 150, 1);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), GT_ModHandler.getIC2Item("ironCableItem", 6L), 200, 2);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), GT_ModHandler.getIC2Item("ironCableItem", 6L), 200, 2);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L), GT_ModHandler.getIC2Item("goldCableItem", 6L), 200, 1);}
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 8L), GT_ModHandler.getIC2Item("carbonFiber", 1L), 400, 2);
+ GT_Values.RA.addWiremillRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphene, 1L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Graphene, 1L), 400, 2);
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "torchesFromCoal", false)) {
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.coal, 1, 32767), new ItemStack(Blocks.torch, 4), 400, 1);
+ }
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 2L), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new ItemStack(Blocks.light_weighted_pressure_plate, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2L), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new ItemStack(Blocks.heavy_weighted_pressure_plate, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 6L), ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new ItemStack(Items.iron_door, 1), 600, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 7L), ItemList.Circuit_Integrated.getWithDamage(0L, 7L, new Object[0]), new ItemStack(Items.cauldron, 1), 700, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1L), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_ModHandler.getIC2Item("ironFence", 1L), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 3L), ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new ItemStack(Blocks.iron_bars, 4), 300, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 2L), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), new ItemStack(Blocks.heavy_weighted_pressure_plate, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 6L), ItemList.Circuit_Integrated.getWithDamage(0L, 6L, new Object[0]), new ItemStack(Items.iron_door, 1), 600, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 7L), ItemList.Circuit_Integrated.getWithDamage(0L, 7L, new Object[0]), new ItemStack(Items.cauldron, 1), 700, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1L), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), GT_ModHandler.getIC2Item("ironFence", 1L), 100, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 3L), ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new ItemStack(Blocks.iron_bars, 4), 300, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3L), ItemList.Circuit_Integrated.getWithDamage(0L, 3L, new Object[0]), new ItemStack(Blocks.fence, 1), 300, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2L), new ItemStack(Blocks.tripwire_hook, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2L), new ItemStack(Blocks.tripwire_hook, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3L), new ItemStack(Items.string, 3, 32767), new ItemStack(Items.bow, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 3L), ItemList.Component_Minecart_Wheels_Iron.get(2L, new Object[0]), new ItemStack(Items.minecart, 1), 500, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 3L), ItemList.Component_Minecart_Wheels_Iron.get(2L, new Object[0]), new ItemStack(Items.minecart, 1), 400, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 3L), ItemList.Component_Minecart_Wheels_Steel.get(2L, new Object[0]), new ItemStack(Items.minecart, 1), 300, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2L), ItemList.Component_Minecart_Wheels_Iron.get(1L, new Object[0]), 500, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2L), ItemList.Component_Minecart_Wheels_Iron.get(1L, new Object[0]), 400, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Steel, 2L), ItemList.Component_Minecart_Wheels_Steel.get(1L, new Object[0]), 300, 2);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.hopper, 1, 32767), new ItemStack(Items.hopper_minecart, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.tnt, 1, 32767), new ItemStack(Items.tnt_minecart, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.chest, 1, 32767), new ItemStack(Items.chest_minecart, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemStack(Items.chest_minecart, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.furnace, 1, 32767), new ItemStack(Items.furnace_minecart, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.tripwire_hook, 1), new ItemStack(Blocks.chest, 1, 32767), new ItemStack(Blocks.trapped_chest, 1), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.stone, 1, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), new ItemStack(Blocks.stonebrick, 1, 0), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.sandstone, 1, 0), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.sandstone, 1, 2), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.sandstone, 1, 1), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.sandstone, 1, 0), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.sandstone, 1, 2), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), new ItemStack(Blocks.sandstone, 1, 0), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_ULV.get(1L, new Object[0]), 25, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_LV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_MV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_HV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_EV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_IV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Chrome, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_LuV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_ZPM.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_UV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8L), ItemList.Circuit_Integrated.getWithDamage(0L, 8L, new Object[0]), ItemList.Casing_MAX.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 2L), ItemList.Casing_ULV.get(1L, new Object[0]), ItemList.Hull_ULV.get(1L, new Object[0]), 25, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 2L), ItemList.Casing_LV.get(1L, new Object[0]), ItemList.Hull_LV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2L), ItemList.Casing_MV.get(1L, new Object[0]), ItemList.Hull_MV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2L), ItemList.Casing_MV.get(1L, new Object[0]), ItemList.Hull_MV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2L), ItemList.Casing_HV.get(1L, new Object[0]), ItemList.Hull_HV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2L), ItemList.Casing_EV.get(1L, new Object[0]), ItemList.Hull_EV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2L), ItemList.Casing_IV.get(1L, new Object[0]), ItemList.Hull_IV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Tungsten, 2L), ItemList.Casing_LuV.get(1L, new Object[0]), ItemList.Hull_LuV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Osmium, 2L), ItemList.Casing_ZPM.get(1L, new Object[0]), ItemList.Hull_ZPM.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Osmium, 2L), ItemList.Casing_UV.get(1L, new Object[0]), ItemList.Hull_UV.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 2L), ItemList.Casing_MAX.get(1L, new Object[0]), ItemList.Hull_MAX.get(1L, new Object[0]), 50, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 2L), GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1L), ItemList.Battery_Hull_LV.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6L), GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), 2400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6L), GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2L), ItemList.Battery_Hull_MV.get(1L, new Object[0]), 2400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 18L), GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4L), ItemList.Battery_Hull_HV.get(1L, new Object[0]), 3200, 8);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Items.string, 4, 32767), new ItemStack(Items.slime_ball, 1, 32767), new ItemStack(Items.lead, 2), 200, 2);
+ GT_Values.RA.addAssemblerRecipe(ItemList.IC2_Compressed_Coal_Ball.get(8L, new Object[0]), new ItemStack(Blocks.brick_block, 1), ItemList.IC2_Compressed_Coal_Chunk.get(1L, new Object[0]), 400, 4);
+
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("waterMill", 2L), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_ModHandler.getIC2Item("generator", 1L), 6400, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("batPack", 1L, 32767), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), ItemList.IC2_ReBattery.get(6L, new Object[0]), 800, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.stone_slab, 3, 0), ItemList.RC_Rebar.get(1L, new Object[0]), ItemList.RC_Tie_Stone.get(1L, new Object[0]), 128, 8);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack(Blocks.stone_slab, 3, 7), ItemList.RC_Rebar.get(1L, new Object[0]), ItemList.RC_Tie_Stone.get(1L, new Object[0]), 128, 8);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 9L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 2L), GT_Values.NF, ItemList.RC_ShuntingWire.get(4L, new Object[0]), 1600, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 9L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 2L), GT_Values.NF, ItemList.RC_ShuntingWire.get(4L, new Object[0]), 1600, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 3L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 3L), Materials.Blaze.getMolten(432L), ItemList.RC_Rail_HS.get(8L, new Object[0]), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Rail_Standard.get(3L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 3L), Materials.Redstone.getMolten(432L), ItemList.RC_Rail_Adv.get(8L, new Object[0]), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Rail_Standard.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 1L), ItemList.RC_Rail_Electric.get(1L, new Object[0]), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Rail_Standard.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 1L), ItemList.RC_Rail_Electric.get(1L, new Object[0]), 50, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Tie_Wood.get(6L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), ItemList.RC_Rail_Wooden.get(6L, new Object[0]), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Tie_Wood.get(6L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), ItemList.RC_Rail_Wooden.get(6L, new Object[0]), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Tie_Wood.get(4L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), ItemList.RC_Bed_Wood.get(1L, new Object[0]), 200, 4);
+ GT_Values.RA.addAssemblerRecipe(ItemList.RC_Tie_Stone.get(4L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 4L, new Object[0]), ItemList.RC_Bed_Stone.get(1L, new Object[0]), 200, 4);
+ for (ItemStack tRail : new ItemStack[] { ItemList.RC_Rail_Standard.get(6L, new Object[0]), ItemList.RC_Rail_Adv.get(6L, new Object[0]), ItemList.RC_Rail_Reinforced.get(6L, new Object[0]), ItemList.RC_Rail_Electric.get(6L, new Object[0]), ItemList.RC_Rail_HS.get(6L, new Object[0]), ItemList.RC_Rail_Wooden.get(6L, new Object[0]) }) {
+ for (ItemStack tBed : new ItemStack[] { ItemList.RC_Bed_Wood.get(1L, new Object[0]), ItemList.RC_Bed_Stone.get(1L, new Object[0]) })
+ {
+ GT_Values.RA.addAssemblerRecipe(tBed, tRail, GT_ModHandler.getRecipeOutput(new ItemStack[] { tRail, GT_Values.NI, tRail, tRail, tBed, tRail, tRail, GT_Values.NI, tRail }), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(tBed, tRail, Materials.Redstone.getMolten(144L), GT_ModHandler.getRecipeOutput(new ItemStack[] { tRail, GT_Values.NI, tRail, tRail, tBed, tRail, tRail, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), tRail }), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(tBed, tRail, Materials.Redstone.getMolten(288L), GT_ModHandler.getRecipeOutput(new ItemStack[] { tRail, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), tRail, tRail, tBed, tRail, tRail, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), tRail }), 400, 4);
+ }
+ }
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("carbonFiber", 2L), ItemList.Circuit_Integrated.getWithDamage(0L, 2L, new Object[0]), GT_ModHandler.getIC2Item("carbonMesh", 1L), 800, 2);
+
+ GT_Values.RA.addAssemblerRecipe(ItemList.NC_SensorCard.getWildcard(1L, new Object[0]), ItemList.Circuit_Integrated.getWithDamage(0L, 1L, new Object[0]), ItemList.Circuit_Basic.get(3L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 4L), GT_ModHandler.getIC2Item("generator", 1L), GT_ModHandler.getIC2Item("waterMill", 2L), 6400, 8);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5L), new ItemStack(Blocks.chest, 1, 32767), new ItemStack(Blocks.hopper), 800, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5L), new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemStack(Blocks.hopper), 800, 2);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5L), new ItemStack(Blocks.chest, 1, 32767), new ItemStack(Blocks.hopper), 800, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5L), new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemStack(Blocks.hopper), 800, 2);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Magnalium, 2L), GT_ModHandler.getIC2Item("generator", 1L), GT_ModHandler.getIC2Item("windMill", 1L), 6400, 8);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L), new ItemStack(Items.blaze_powder, 1, 0), new ItemStack(Items.ender_eye, 1, 0), 400, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 6L), new ItemStack(Items.blaze_rod, 1, 0), new ItemStack(Items.ender_eye, 6, 0), 2500, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.gear, Materials.CobaltBrass, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), ItemList.Component_Sawblade_Diamond.get(1L, new Object[0]), 1600, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 5L), new ItemStack(Blocks.tnt, 3, 32767), GT_ModHandler.getIC2Item("industrialTnt", 5L), 800, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 4L), new ItemStack(Blocks.sand, 4, 32767), new ItemStack(Blocks.tnt, 1), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 4L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 4L), new ItemStack(Blocks.redstone_lamp, 1), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Blocks.redstone_torch, 1), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 4L), new ItemStack(Items.compass, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 4L), new ItemStack(Items.compass, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 4L), new ItemStack(Items.clock, 1), 400, 4);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), new ItemStack(Blocks.torch, 2), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L), new ItemStack(Blocks.torch, 6), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), ItemList.IC2_Resin.get(1L, new Object[0]), new ItemStack(Blocks.torch, 6), 400, 1);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 8L), new ItemStack(Items.flint, 1), ItemList.IC2_Compressed_Coal_Ball.get(1L, new Object[0]), 400, 4);
+ if(!GT_Mod.gregtechproxy.mDisableIC2Cables){
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("tinCableItem", 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L), GT_ModHandler.getIC2Item("insulatedTinCableItem", 1L), 100, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("copperCableItem", 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L), GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L), 100, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("goldCableItem", 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 2L), GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L), 200, 2);
+ GT_Values.RA.addAssemblerRecipe(GT_ModHandler.getIC2Item("ironCableItem", 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 3L), GT_ModHandler.getIC2Item("insulatedIronCableItem", 1L), 300, 2);
+ }
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.wooden_sword, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Stone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.stone_sword, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.iron_sword, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.golden_sword, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Diamond, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), new ItemStack(Items.diamond_sword, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Bronze, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), ItemList.Tool_Sword_Bronze.getUndamaged(1L, new Object[0]), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L), ItemList.Tool_Sword_Steel.getUndamaged(1L, new Object[0]), 100, 16);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.wooden_pickaxe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Stone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.stone_pickaxe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.iron_pickaxe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.golden_pickaxe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Diamond, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.diamond_pickaxe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Bronze, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Pickaxe_Bronze.getUndamaged(1L, new Object[0]), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Pickaxe_Steel.getUndamaged(1L, new Object[0]), 100, 16);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.wooden_shovel, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Stone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.stone_shovel, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.iron_shovel, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.golden_shovel, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Diamond, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.diamond_shovel, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Bronze, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Shovel_Bronze.getUndamaged(1L, new Object[0]), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Shovel_Steel.getUndamaged(1L, new Object[0]), 100, 16);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.wooden_axe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Stone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.stone_axe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.iron_axe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.golden_axe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Diamond, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.diamond_axe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Bronze, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Axe_Bronze.getUndamaged(1L, new Object[0]), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Axe_Steel.getUndamaged(1L, new Object[0]), 100, 16);
+
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Wood, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.wooden_hoe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Stone, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.stone_hoe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.iron_hoe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.golden_hoe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Diamond, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), new ItemStack(Items.diamond_hoe, 1), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Bronze, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Hoe_Bronze.getUndamaged(1L, new Object[0]), 100, 16);
+ GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Steel, 1L), GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L), ItemList.Tool_Hoe_Steel.getUndamaged(1L, new Object[0]), 100, 16);
+
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Items.lava_bucket), ItemList.Cell_Empty.get(1L, new Object[0]) });
+ GT_ModHandler.removeRecipe(new ItemStack[] { new ItemStack(Items.water_bucket), ItemList.Cell_Empty.get(1L, new Object[0]) });
+
+ GT_ModHandler.removeFurnaceSmelting(ItemList.IC2_Resin.get(1L, new Object[0]));
+
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.golden_apple, 1, 1), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(9216L), new ItemStack(Items.gold_ingot, 64), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 9216, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.golden_apple, 1, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), new ItemStack(Items.gold_ingot, 7), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 9216, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.golden_carrot, 1, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), new ItemStack(Items.gold_nugget, 6), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 9216, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.speckled_melon, 1, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), new ItemStack(Items.gold_nugget, 6), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 9216, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.mushroom_stew, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), new ItemStack(Items.bowl, 16, 0), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.apple, 32, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.bread, 64, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.porkchop, 12, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cooked_porkchop, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.beef, 12, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cooked_beef, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.fish, 12, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cooked_fished, 16, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.chicken, 12, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cooked_chicken, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.melon, 64, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.pumpkin, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.rotten_flesh, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.spider_eye, 32, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.carrot, 16, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(ItemList.Food_Raw_Potato.get(16L, new Object[0]), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(ItemList.Food_Poisonous_Potato.get(12L, new Object[0]), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(ItemList.Food_Baked_Potato.get(24L, new Object[0]), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cookie, 64, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.cake, 8, 0), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.brown_mushroom_block, 12, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.red_mushroom_block, 12, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.brown_mushroom, 32, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.red_mushroom, 32, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.nether_wart, 32, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getIC2Item("terraWart", 16L), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getModItem("TwilightForest", "item.meefRaw", 12L, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getModItem("TwilightForest", "item.meefSteak", 16L, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getModItem("TwilightForest", "item.venisonRaw", 12L, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getModItem("TwilightForest", "item.venisonCooked", 16L, 32767), GT_Values.NI, GT_Values.NF, Materials.Methane.getGas(1152L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 4608, 5);
+
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.sand, 1, 1), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 5000, 100, 5000 }, 50, 30);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.dirt, 1, 32767), GT_Values.NI, GT_Values.NF, GT_Values.NF, ItemList.IC2_Plantball.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 1250, 5000, 5000 }, 250, 30);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.grass, 1, 32767), GT_Values.NI, GT_Values.NF, GT_Values.NF, ItemList.IC2_Plantball.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 2500, 5000, 5000 }, 250, 30);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.mycelium, 1, 32767), GT_Values.NI, GT_Values.NF, GT_Values.NF, new ItemStack(Blocks.brown_mushroom, 1), new ItemStack(Blocks.red_mushroom, 1), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, new int[] { 2500, 2500, 5000, 5000 }, 650, 30);
+ GT_Values.RA.addCentrifugeRecipe(ItemList.IC2_Resin.get(1L, new Object[0]), GT_Values.NI, GT_Values.NF, Materials.Glue.getFluid(100L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 2L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1L), ItemList.IC2_Plantball.get(1L, new Object[0]), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 10000, 5000, 5000 }, 300, 5);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 2L), 0, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L), ItemList.TE_Slag.get(1L, new Object[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L) }), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, 250);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Items.magma_cream, 1), 0, new ItemStack(Items.blaze_powder, 1), new ItemStack(Items.slime_ball, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, 500);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 2000, 200 }, 800, 320);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium241, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 2000, 3000 }, 1600, 320);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 5000, 1000 }, 3200, 320);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Naquadria, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Naquadah, 1L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 2000, 3000 }, 6400, 640);
+ GT_Values.RA.addCentrifugeRecipe(GT_Values.NI, GT_Values.NI, Materials.Hydrogen.getGas(160L), Materials.Deuterium.getGas(40L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 160, 20);
+ GT_Values.RA.addCentrifugeRecipe(GT_Values.NI, GT_Values.NI, Materials.Deuterium.getGas(160L), Materials.Tritium.getGas(40L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 160, 80);
+ GT_Values.RA.addCentrifugeRecipe(GT_Values.NI, GT_Values.NI, Materials.Helium.getGas(80L), Materials.Helium_3.getGas(5L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 160, 80);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Redstone, 2L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Gold, 2L), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, null, 488, 80);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L), GT_Values.NI, GT_Values.NF, Materials.Helium.getGas(120L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungsten, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Platinum, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 625, 625, 9000, 0, 0, 0 }, 320, 20);
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Redstone, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Sulfur, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Coal, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1L), GT_Values.NI, GT_Values.NI, new int[] { 5625, 9900, 5625, 625, 0, 0 }, 160, 20);
+ GT_Values.RA.addCentrifugeRecipe(new ItemStack(Blocks.soul_sand, 1), GT_Values.NI, GT_Values.NF, Materials.Oil.getFluid(80L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Saltpeter, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Coal, 1L), new ItemStack(Blocks.sand, 1), GT_Values.NI, GT_Values.NI, GT_Values.NI, new int[] { 8000, 2000, 9000, 0, 0, 0 }, 200, 80);
+ GT_Values.RA.addCentrifugeRecipe(GT_Values.NI, GT_Values.NI, Materials.Lava.getFluid(100L), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tantalum, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungsten, 1L), new int[] { 2000, 1000, 250, 250, 250, 125 }, 80, 80);
+ GT_Values.RA.addCentrifugeRecipe(GT_Values.NI, GT_Values.NI,FluidRegistry.getFluidStack("ic2pahoehoelava", 100), GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 1L), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tantalum, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungsten, 1L), new int[] { 2000, 1000, 250, 250, 250, 125 }, 40, 80);
+
+ GT_Values.RA.addCentrifugeRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 1L), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neodymium, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Yttrium, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lanthanum, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cerium, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cadmium, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Caesium, 1L), new int[] { 2500, 2500, 2500, 2500, 2500, 2500 }, 64, 20);
+ GT_Values.RA.addCentrifugeRecipe(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 45), GT_Values.NI, GT_Values.NF, GT_Values.NF, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.BasalticMineralSand, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Olivine, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Obsidian, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Basalt, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Flint, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.RareEarth, 1L), new int[] { 2000, 2000, 2000, 2000, 2000, 2000 }, 64, 20);
+
+ GT_Utility.removeSimpleIC2MachineRecipe(new ItemStack(Blocks.cobblestone), GT_ModHandler.getMaceratorRecipeList(), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L));
+ GT_Utility.removeSimpleIC2MachineRecipe(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lapis, 1L), GT_ModHandler.getMaceratorRecipeList(), ItemList.IC2_Plantball.get(1L, new Object[0]));
+ GT_Utility.removeSimpleIC2MachineRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), GT_ModHandler.getMaceratorRecipeList(), ItemList.IC2_Plantball.get(1L, new Object[0]));
+ GT_Utility.removeSimpleIC2MachineRecipe(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), GT_ModHandler.getMaceratorRecipeList(), ItemList.IC2_Plantball.get(1L, new Object[0]));
+
+ if (GregTech_API.sThaumcraftCompat != null)
+ {
+ String tKey = "GT_WOOD_TO_CHARCOAL";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way of making charcoal magically instead of using regular ovens for this purpose.<BR><BR>To create charcoal from wood you first need an air-free environment, some vacuus essentia is needed for that, then you need to incinerate the wood using ignis essentia and wait until all the water inside the wood is burned away.<BR><BR>This method however doesn't create creosote oil as byproduct.");
+
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Charcoal Transmutation", "Turning wood into charcoal", new String[] { "ALUMENTUM" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), 2, 0, 13, 5, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 10L), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 8L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 8L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.log.get(Materials.Wood), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) })) });
+
+ tKey = "GT_FILL_WATER_BUCKET";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way of filling a bucket with aqua essentia in order to simply get water.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Water Transmutation", "Filling buckets with water", null, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), 2, 0, 16, 5, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 4L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L), GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, GT_OreDictUnificator.get(OrePrefixes.capsule, Materials.Empty, 1L), GT_OreDictUnificator.get(OrePrefixes.capsule, Materials.Water, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L) })) });
+
+ tKey = "GT_TRANSZINC";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply zinc by steeping zinc nuggets in metallum harvested from other metals.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Zinc Transmutation", "Transformation of metals into zinc", new String[] { "TRANSTIN" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 1L), 2, 1, 9, 13, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Zinc), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L) })) });
+
+ tKey = "GT_TRANSANTIMONY";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply antimony by steeping antimony nuggets in metallum harvested from other metals.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Antimony Transmutation", "Transformation of metals into antimony", new String[] { "GT_TRANSZINC", "TRANSLEAD" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 1L), 2, 1, 9, 14, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Antimony), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L) })) });
+
+ tKey = "GT_TRANSNICKEL";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply nickel by steeping nickel nuggets in metallum harvested from other metals.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Nickel Transmutation", "Transformation of metals into nickel", new String[] { "TRANSLEAD" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 1L), 2, 1, 9, 15, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Nickel), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) })) });
+
+ tKey = "GT_TRANSCOBALT";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply cobalt by steeping cobalt nuggets in metallum harvested from other metals.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Cobalt Transmutation", "Transformation of metals into cobalt", new String[] { "GT_TRANSNICKEL" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 1L), 2, 1, 9, 16, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Cobalt), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L) })) });
+
+ tKey = "GT_TRANSBISMUTH";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply bismuth by steeping bismuth nuggets in metallum harvested from other metals.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Bismuth Transmutation", "Transformation of metals into bismuth", new String[] { "GT_TRANSCOBALT" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 1L), 2, 1, 11, 17, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Bismuth), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L) })) });
+
+ tKey = "GT_IRON_TO_STEEL";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way of making Iron harder by just re-ordering its components.<BR><BR>This Method can be used to create a Material called Steel, which is used in many non-Thaumaturgic applications.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Steel Transmutation", "Transforming iron to steel", new String[] { "TRANSIRON", "GT_WOOD_TO_CHARCOAL" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), 3, 0, 13, 8, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Iron), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L) })) });
+
+ tKey = "GT_TRANSBRONZE";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way of creating Alloys using the already known transmutations of Copper and Tin.<BR><BR>This Method can be used to create a Bronze directly without having to go through an alloying process.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Bronze Transmutation", "Transformation of metals into bronze", new String[] { "TRANSTIN", "TRANSCOPPER" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 1L), 2, 0, 13, 11, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Bronze), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L) })) });
+
+ tKey = "GT_TRANSELECTRUM";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Electrum as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Electrum Transmutation", "Transformation of metals into electrum", new String[] { "GT_TRANSBRONZE", "TRANSGOLD", "TRANSSILVER" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 1L), 2, 1, 11, 11, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Electrum), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L) })) });
+
+ tKey = "GT_TRANSBRASS";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Brass as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Brass Transmutation", "Transformation of metals into brass", new String[] { "GT_TRANSBRONZE", "GT_TRANSZINC" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 1L), 2, 1, 11, 12, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Brass), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L) })) });
+
+ tKey = "GT_TRANSINVAR";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Invar as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Invar Transmutation", "Transformation of metals into invar", new String[] { "GT_TRANSBRONZE", "GT_TRANSNICKEL" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 1L), 2, 1, 11, 15, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Invar), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L) })) });
+
+ tKey = "GT_TRANSCUPRONICKEL";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Cupronickel as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Cupronickel Transmutation", "Transformation of metals into cupronickel", new String[] { "GT_TRANSBRONZE", "GT_TRANSNICKEL" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 1L), 2, 1, 11, 16, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Cupronickel), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) })) });
+
+ tKey = "GT_TRANSBATTERYALLOY";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Battery Alloy as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Battery Alloy Transmutation", "Transformation of metals into battery alloy", new String[] { "GT_TRANSBRONZE", "GT_TRANSANTIMONY" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 1L), 2, 1, 11, 13, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.BatteryAlloy), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L) })) });
+
+ tKey = "GT_TRANSSOLDERINGALLOY";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Soldering Alloy as well.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Soldering Alloy Transmutation", "Transformation of metals into soldering alloy", new String[] { "GT_TRANSBRONZE", "GT_TRANSANTIMONY" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 1L), 2, 1, 11, 14, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.SolderingAlloy), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L) })) });
+
+ tKey = "GT_ADVANCEDMETALLURGY";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Now that you have discovered all the basic metals, you can finally move on to the next Level of magic metallurgy and create more advanced metals");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Advanced Metallurgic Transmutation", "Mastering the basic metals", new String[] { "GT_TRANSBISMUTH", "GT_IRON_TO_STEEL", "GT_TRANSSOLDERINGALLOY", "GT_TRANSBATTERYALLOY", "GT_TRANSBRASS", "GT_TRANSELECTRUM", "GT_TRANSCUPRONICKEL", "GT_TRANSINVAR" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), 3, 0, 16, 14, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 50L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 20L), new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 20L), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTIO, 20L), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 20L), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 20L) }), null, new Object[] { "gt.research.page.1." + tKey });
+
+ tKey = "GT_TRANSALUMINIUM";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "You have discovered a way to multiply aluminium by steeping aluminium nuggets in metallum harvested from other metals.<BR><BR>This transmutation is slightly harder to achieve, because aluminium has special properties, which require more order to achieve the desired result.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Aluminium Transmutation", "Transformation of metals into aluminium", new String[] { "GT_ADVANCEDMETALLURGY" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 1L), 4, 0, 19, 14, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Aluminium), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L) })) });
+
+ tKey = "GT_CRYSTALLISATION";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey, "Sometimes when processing your Crystal Shards they become a pile of Dust instead of the mostly required Shard.<BR><BR>You have finally found a way to reverse this Process by using Vitreus Essentia for recrystallising the Shards.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey, "Shard Recrystallisation", "Fixing your precious crystals", new String[] { "ALCHEMICALMANUFACTURE" }, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), 3, 0, -11, -3, Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L) }), null, new Object[] { "gt.research.page.1." + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.Amber), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Amber, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedOrder), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEntropy), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedAir), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEarth), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedFire), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })), GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedWater), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack[] { new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L) })) });
+
+ tKey = "GT_MAGICENERGY";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey,
+ "While trying to find new ways to integrate magic into your industrial factories, you have discovered a way to convert magical energy into electrical power.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey,
+ "Magic Energy Conversion",
+ "Magic to Power",
+ new String[] {"ARCANEBORE"},
+ "ARTIFICE",
+ ItemList.MagicEnergyConverter_LV.get(1L, new Object[0]),
+ 3, 0, -3, 10,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)}),
+ null, new Object[] { "gt.research.page.1." + tKey,
+ GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_LV.get(1L, new Object[0]),
+ new ItemStack[]{
+ new ItemStack(Blocks.beacon),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Advanced, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L),
+ ItemList.Sensor_MV.get(2L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Advanced, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L),
+ ItemList.Sensor_MV.get(2L, new Object[0])
+ },
+ ItemList.MagicEnergyConverter_LV.get(1L, new Object[0]),
+ 5,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L) }))});
+
+ tKey = "GT_MAGICENERGY2";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey,
+ "Attempts to increase the output of your Magic Energy generators have resulted in significant improvements.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey,
+ "Adept Magic Energy Conversion",
+ "Magic to Power",
+ new String[] {"GT_MAGICENERGY"},
+ "ARTIFICE",
+ ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]),
+ 1, 1, -4, 12,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)}),
+ null, new Object[] { "gt.research.page.1." + tKey,
+ GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_MV.get(1L, new Object[0]),
+ new ItemStack[]{
+ new ItemStack(Blocks.beacon),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Data, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L),
+ ItemList.Sensor_HV.get(2L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Data, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Iridium, 1L),
+ ItemList.Sensor_HV.get(2L, new Object[0])
+ },
+ ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]),
+ 6,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L) }))});
+
+ tKey = "GT_MAGICENERGY3";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey,
+ "Attempts to further increase the output of your Magic Energy generators have resulted in great improvements.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey,
+ "Master Magic Energy Conversion",
+ "Magic to Power",
+ new String[] {"GT_MAGICENERGY2"},
+ "ARTIFICE",
+ ItemList.MagicEnergyConverter_HV.get(1L, new Object[0]),
+ 1, 1, -4, 14,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 40L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 20L)}),
+ null, new Object[] { "gt.research.page.1." + tKey,
+ GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_HV.get(1L, new Object[0]),
+ new ItemStack[]{
+ new ItemStack(Blocks.beacon),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Elite, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plateDouble,Materials.Thaumium, 1L),
+ ItemList.Field_Generator_MV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Elite, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plateDouble,Materials.Europium, 1L),
+ ItemList.Field_Generator_MV.get(1L, new Object[0])
+ },
+ ItemList.MagicEnergyConverter_HV.get(1L, new Object[0]),
+ 8,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L) }))});
+
+
+
+
+ tKey = "GT_MAGICABSORB";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey,
+ "Research into magical energy conversion methods has identified a way to convert surrounding energies into electrical power.");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey,
+ "Magic Energy Absorption",
+ "Harvesting Magic",
+ new String[] {"GT_MAGICENERGY"},
+ "ARTIFICE",
+ ItemList.MagicEnergyAbsorber_LV.get(1L, new Object[0]),
+ 3, 0, -2, 12,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)}),
+ null, new Object[] { "gt.research.page.1." + tKey,
+ GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_LV.get(1L, new Object[0]),
+ new ItemStack[]{
+ ItemList.MagicEnergyConverter_LV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Advanced, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L),
+ ItemList.Sensor_MV.get(2L, new Object[0])
+ },
+ ItemList.MagicEnergyAbsorber_LV.get(1L, new Object[0]),
+ 6,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 16L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 4L) }))});
+
+ tKey = "GT_MAGICABSORB2";
+ GT_LanguageManager.addStringLocalization("gt.research.page.1." + tKey,
+ "Moar output! Drain all the Magic!");
+ GregTech_API.sThaumcraftCompat.addResearch(tKey,
+ "Improved Magic Energy Absorption",
+ "Harvesting Magic",
+ new String[] {"GT_MAGICABSORB"},
+ "ARTIFICE",
+ ItemList.MagicEnergyAbsorber_EV.get(1L, new Object[0]),
+ 3, 1, -2, 14,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITO, 10L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)}),
+ null, new Object[] { "gt.research.page.1." + tKey,
+ GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_MV.get(1L, new Object[0]),
+ new ItemStack[]{
+ ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Advanced, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L),
+ ItemList.Sensor_HV.get(2L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Advanced, 1L),
+ GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Thaumium, 1L)
+ },
+ ItemList.MagicEnergyAbsorber_MV.get(1L, new Object[0]),
+ 6,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 32L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 8L) }))
+
+
+
+ , GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_HV.get(1L, new Object[0]),
+ new ItemStack[]{
+ ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Elite, 1L),
+ GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1, 16),
+ ItemList.Field_Generator_MV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Elite, 1L),
+ GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1, 16)
+ },
+ ItemList.MagicEnergyAbsorber_HV.get(1L, new Object[0]),
+ 8,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 16L) }))
+
+
+ ,GregTech_API.sThaumcraftCompat.addInfusionRecipe(tKey,
+ ItemList.Hull_EV.get(1L, new Object[0]),
+ new ItemStack[]{
+ ItemList.MagicEnergyConverter_HV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Master, 1L),
+ GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1, 16),
+ ItemList.Field_Generator_HV.get(1L, new Object[0]),
+ GT_OreDictUnificator.get(OrePrefixes.circuit,Materials.Master, 1L),
+ GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1, 16)
+ },
+ ItemList.MagicEnergyAbsorber_EV.get(1L, new Object[0]),
+ 10,
+ Arrays.asList(new TC_Aspects.TC_AspectStack[] {
+ new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 256L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 64L) }))
+ });
+
+ }
+ for (MaterialStack[] tMats : this.mAlloySmelterList)
+ {
+ ItemStack tDust1 = GT_OreDictUnificator.get(OrePrefixes.dust, tMats[0].mMaterial, tMats[0].mAmount);
+ ItemStack tDust2 = GT_OreDictUnificator.get(OrePrefixes.dust, tMats[1].mMaterial, tMats[1].mAmount);
+ ItemStack tIngot1 = GT_OreDictUnificator.get(OrePrefixes.ingot, tMats[0].mMaterial, tMats[0].mAmount);
+ ItemStack tIngot2 = GT_OreDictUnificator.get(OrePrefixes.ingot, tMats[1].mMaterial, tMats[1].mAmount);
+ ItemStack tOutputIngot = GT_OreDictUnificator.get(OrePrefixes.ingot, tMats[2].mMaterial, tMats[2].mAmount);
+ if (tOutputIngot != GT_Values.NI)
+ {
+ GT_ModHandler.addAlloySmelterRecipe(tIngot1, tDust2, tOutputIngot, (int)tMats[2].mAmount * 50, 16, false);
+ GT_ModHandler.addAlloySmelterRecipe(tIngot1, tIngot2, tOutputIngot, (int)tMats[2].mAmount * 50, 16, false);
+ GT_ModHandler.addAlloySmelterRecipe(tDust1, tIngot2, tOutputIngot, (int)tMats[2].mAmount * 50, 16, false);
+ GT_ModHandler.addAlloySmelterRecipe(tDust1, tDust2, tOutputIngot, (int)tMats[2].mAmount * 50, 16, false);
+ }
+ }
+ }
+
+ private final MaterialStack[][] mAlloySmelterList = { { new MaterialStack(Materials.Tetrahedrite, 3L), new MaterialStack(Materials.Tin, 1L), new MaterialStack(Materials.Bronze, 3L) }, { new MaterialStack(Materials.Tetrahedrite, 3L), new MaterialStack(Materials.Zinc, 1L), new MaterialStack(Materials.Brass, 3L) }, { new MaterialStack(Materials.Copper, 3L), new MaterialStack(Materials.Tin, 1L), new MaterialStack(Materials.Bronze, 4L) }, { new MaterialStack(Materials.Copper, 3L), new MaterialStack(Materials.Zinc, 1L), new MaterialStack(Materials.Brass, 4L) }, { new MaterialStack(Materials.Copper, 1L), new MaterialStack(Materials.Nickel, 1L), new MaterialStack(Materials.Cupronickel, 2L) }, { new MaterialStack(Materials.Copper, 1L), new MaterialStack(Materials.Redstone, 4L), new MaterialStack(Materials.RedAlloy, 1L) }, { new MaterialStack(Materials.AnnealedCopper, 3L), new MaterialStack(Materials.Tin, 1L), new MaterialStack(Materials.Bronze, 4L) }, { new MaterialStack(Materials.AnnealedCopper, 3L), new MaterialStack(Materials.Zinc, 1L), new MaterialStack(Materials.Brass, 4L) }, { new MaterialStack(Materials.AnnealedCopper, 1L), new MaterialStack(Materials.Nickel, 1L), new MaterialStack(Materials.Cupronickel, 2L) }, { new MaterialStack(Materials.AnnealedCopper, 1L), new MaterialStack(Materials.Redstone, 4L), new MaterialStack(Materials.RedAlloy, 1L) }, { new MaterialStack(Materials.Iron, 1L), new MaterialStack(Materials.Tin, 1L), new MaterialStack(Materials.TinAlloy, 2L) }, { new MaterialStack(Materials.WroughtIron, 1L), new MaterialStack(Materials.Tin, 1L), new MaterialStack(Materials.TinAlloy, 2L) }, { new MaterialStack(Materials.Iron, 2L), new MaterialStack(Materials.Nickel, 1L), new MaterialStack(Materials.Invar, 3L) }, { new MaterialStack(Materials.WroughtIron, 2L), new MaterialStack(Materials.Nickel, 1L), new MaterialStack(Materials.Invar, 3L) }, { new MaterialStack(Materials.Tin, 9L), new MaterialStack(Materials.Antimony, 1L), new MaterialStack(Materials.SolderingAlloy, 10L) }, { new MaterialStack(Materials.Lead, 4L), new MaterialStack(Materials.Antimony, 1L), new MaterialStack(Materials.BatteryAlloy, 5L) }, { new MaterialStack(Materials.Gold, 1L), new MaterialStack(Materials.Silver, 1L), new MaterialStack(Materials.Electrum, 2L) }, { new MaterialStack(Materials.Magnesium, 1L), new MaterialStack(Materials.Aluminium, 2L), new MaterialStack(Materials.Magnalium, 3L) }, { new MaterialStack(Materials.Silver, 1L), new MaterialStack(Materials.Nikolite, 4L), new MaterialStack(Materials.BlueAlloy, 1L) } };
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java b/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java
new file mode 100644
index 0000000000..46fb2aab52
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java
@@ -0,0 +1,17 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+
+public class GT_MinableRegistrator
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding Blocks to the Miners Valuable List.");
+ GT_ModHandler.addValuableOre(Blocks.glowstone, 0, 1);
+ GT_ModHandler.addValuableOre(Blocks.soul_sand, 0, 1);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java b/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java
new file mode 100644
index 0000000000..e90c65b69e
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java
@@ -0,0 +1,64 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.ConfigCategories.Recipes;
+import gregtech.api.enums.ItemList;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+
+import java.io.PrintStream;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_RecyclerBlacklistLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Adding Stuff to the Recycler Blacklist.");
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "easymobgrinderrecycling", true))
+ {
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Items.arrow, 1, 0));
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Items.bone, 1, 0));
+ GT_ModHandler.addToRecyclerBlackList(ItemList.Dye_Bonemeal.get(1L, new Object[0]));
+
+
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Items.rotten_flesh, 1, 0));
+
+
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Items.string, 1, 0));
+
+
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Items.egg, 1, 0));
+ }
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.disabledrecipes, "easystonerecycling", true))
+ {
+ ItemStack tStack = new ItemStack(Blocks.cobblestone, 1, 0);
+ while (tStack != null)
+ {
+ GT_ModHandler.addToRecyclerBlackList(tStack);
+ tStack = GT_ModHandler.getRecipeOutput(new ItemStack[] { tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack });
+ }
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Blocks.cobblestone_wall, 1, 32767));
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Blocks.sandstone_stairs, 1, 32767));
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Blocks.stone_stairs, 1, 32767));
+ GT_ModHandler.addToRecyclerBlackList(new ItemStack(Blocks.stone_brick_stairs, 1, 32767));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getSmeltingOutput(new ItemStack(Blocks.stone, 1, 0), false, null));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.glass, 1, 0), null, null, new ItemStack(Blocks.glass, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.stone, 1, 0), null, null, new ItemStack(Blocks.stone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.cobblestone, 1, 0), null, null, new ItemStack(Blocks.cobblestone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.stone, 1, 0), null, new ItemStack(Blocks.stone, 1, 0), null, new ItemStack(Blocks.stone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.stone, 1, 0), new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.stone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.cobblestone, 1, 0), new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.cobblestone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.sandstone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.sand, 1, 0), new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.sand, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.sandstone, 1, 0), new ItemStack(Blocks.sandstone, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.glass, 1, 0) }));
+ GT_ModHandler.addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack[] { new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.glass, 1, 0) }));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java b/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java
new file mode 100644
index 0000000000..45765581c3
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java
@@ -0,0 +1,107 @@
+package gregtech.loaders.postload;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+
+import java.io.PrintStream;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_ScrapboxDropLoader
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: (re-)adding Scrapbox Drops.");
+
+ GT_ModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.wooden_hoe));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_axe));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_sword));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_shovel));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_pickaxe));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.sign));
+ GT_ModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.stick));
+ GT_ModHandler.addScrapboxDrop(5.0F, new ItemStack(Blocks.dirt));
+ GT_ModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.grass));
+ GT_ModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.gravel));
+ GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Blocks.pumpkin));
+ GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Blocks.soul_sand));
+ GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Blocks.netherrack));
+ GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.bone));
+ GT_ModHandler.addScrapboxDrop(9.0F, new ItemStack(Items.rotten_flesh));
+ GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_porkchop));
+ GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_beef));
+ GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_chicken));
+ GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.apple));
+ GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.bread));
+ GT_ModHandler.addScrapboxDrop(0.1F, new ItemStack(Items.cake));
+ GT_ModHandler.addScrapboxDrop(1.0F, ItemList.IC2_Food_Can_Filled.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(2.0F, ItemList.IC2_Food_Can_Spoiled.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(0.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1L));
+ GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, ItemList.Cell_Empty.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(5.0F, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L));
+ GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.leather));
+ GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.feather));
+ GT_ModHandler.addScrapboxDrop(0.7F, GT_ModHandler.getIC2Item("plantBall", 1L));
+ GT_ModHandler.addScrapboxDrop(3.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L));
+ GT_ModHandler.addScrapboxDrop(0.6F, new ItemStack(Items.slime_ball));
+ GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
+ GT_ModHandler.addScrapboxDrop(2.7F, GT_ModHandler.getIC2Item("suBattery", 1L));
+ GT_ModHandler.addScrapboxDrop(3.6F, ItemList.Circuit_Primitive.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(0.8F, ItemList.Circuit_Parts_Advanced.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(1.8F, ItemList.Circuit_Board_Basic.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(0.4F, ItemList.Circuit_Board_Advanced.get(1L, new Object[0]));
+ GT_ModHandler.addScrapboxDrop(0.2F, ItemList.Circuit_Board_Elite.get(1L, new Object[0]));
+ if(!GT_Mod.gregtechproxy.mDisableIC2Cables){
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L));
+ GT_ModHandler.addScrapboxDrop(0.4F, GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L));}
+ GT_ModHandler.addScrapboxDrop(0.9F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L));
+ GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L));
+ GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
+ GT_ModHandler.addScrapboxDrop(2.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 1L));
+ GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L));
+ GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 1L));
+ GT_ModHandler.addScrapboxDrop(1.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L));
+ GT_ModHandler.addScrapboxDrop(1.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bauxite, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L));
+ GT_ModHandler.addScrapboxDrop(1.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L));
+ GT_ModHandler.addScrapboxDrop(1.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lazurite, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Pyrite, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L));
+ GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodalite, 1L));
+ GT_ModHandler.addScrapboxDrop(4.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1L));
+ GT_ModHandler.addScrapboxDrop(4.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L));
+ GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GarnetRed, 1L));
+ GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GarnetYellow, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L));
+ GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 1L));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_UUMRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_UUMRecipeLoader.java
new file mode 100644
index 0000000000..7954ee9360
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_UUMRecipeLoader.java
@@ -0,0 +1,7 @@
+package gregtech.loaders.postload;
+
+public class GT_UUMRecipeLoader
+ implements Runnable
+{
+ public void run() {}
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java b/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java
new file mode 100644
index 0000000000..b8e1f4300a
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java
@@ -0,0 +1,136 @@
+package gregtech.loaders.postload;
+
+import cpw.mods.fml.common.Loader;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Config;
+import gregtech.common.GT_Worldgen_GT_Ore_Layer;
+import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces;
+import gregtech.common.GT_Worldgen_Stone;
+import gregtech.common.GT_Worldgenerator;
+
+public class GT_Worldgenloader
+ implements Runnable
+{
+ public void run()
+ {
+ boolean tPFAA = (GregTech_API.sWorldgenFile.get(ConfigCategories.general, "AutoDetectPFAA", true)) && (Loader.isModLoaded("PFAAGeologica"));
+
+ new GT_Worldgenerator();
+
+ new GT_Worldgen_Stone("overworld.stone.blackgranite.tiny", true, GregTech_API.sBlockGranites, 0, 0, 1, 50, 48, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.blackgranite.small", true, GregTech_API.sBlockGranites, 0, 0, 1, 100, 96, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.blackgranite.medium", true, GregTech_API.sBlockGranites, 0, 0, 1, 200, 144, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.blackgranite.large", true, GregTech_API.sBlockGranites, 0, 0, 1, 300, 192, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.blackgranite.huge", true, GregTech_API.sBlockGranites, 0, 0, 1, 400, 240, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.redgranite.tiny", true, GregTech_API.sBlockGranites, 8, 0, 1, 50, 48, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.redgranite.small", true, GregTech_API.sBlockGranites, 8, 0, 1, 100, 96, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.redgranite.medium", true, GregTech_API.sBlockGranites, 8, 0, 1, 200, 144, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.redgranite.large", true, GregTech_API.sBlockGranites, 8, 0, 1, 300, 192, 0, 120, null, false);
+ new GT_Worldgen_Stone("overworld.stone.redgranite.huge", true, GregTech_API.sBlockGranites, 8, 0, 1, 400, 240, 0, 120, null, false);
+
+ new GT_Worldgen_Stone("nether.stone.blackgranite.tiny", false, GregTech_API.sBlockGranites, 0, -1, 1, 50, 48, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.blackgranite.small", false, GregTech_API.sBlockGranites, 0, -1, 1, 100, 96, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.blackgranite.medium", false, GregTech_API.sBlockGranites, 0, -1, 1, 200, 144, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.blackgranite.large", false, GregTech_API.sBlockGranites, 0, -1, 1, 300, 192, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.blackgranite.huge", false, GregTech_API.sBlockGranites, 0, -1, 1, 400, 240, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.redgranite.tiny", false, GregTech_API.sBlockGranites, 8, -1, 1, 50, 48, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.redgranite.small", false, GregTech_API.sBlockGranites, 8, -1, 1, 100, 96, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.redgranite.medium", false, GregTech_API.sBlockGranites, 8, -1, 1, 200, 144, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.redgranite.large", false, GregTech_API.sBlockGranites, 8, -1, 1, 300, 192, 0, 120, null, false);
+ new GT_Worldgen_Stone("nether.stone.redgranite.huge", false, GregTech_API.sBlockGranites, 8, -1, 1, 400, 240, 0, 120, null, false);
+
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.copper", true, 60, 120, 32, !tPFAA, true, true, Materials.Copper);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.tin", true, 60, 120, 32, !tPFAA, true, true, Materials.Tin);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.bismuth", true, 80, 120, 8, !tPFAA, true, false, Materials.Bismuth);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.coal", true, 60, 100, 24, !tPFAA, false, false, Materials.Coal);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.iron", true, 40, 80, 16, !tPFAA, true, true, Materials.Iron);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.lead", true, 40, 80, 16, !tPFAA, true, true, Materials.Lead);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.zinc", true, 30, 60, 12, !tPFAA, true, true, Materials.Zinc);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.gold", true, 20, 40, 8, !tPFAA, true, true, Materials.Gold);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.silver", true, 20, 40, 8, !tPFAA, true, true, Materials.Silver);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.nickel", true, 20, 40, 8, !tPFAA, true, true, Materials.Nickel);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.lapis", true, 20, 40, 4, !tPFAA, false, false, Materials.Lapis);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.diamond", true, 5, 10, 2, !tPFAA, true, false, Materials.Diamond);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.emerald", true, 5, 250, 1, !tPFAA, true, false, Materials.Emerald);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.ruby", true, 5, 250, 1, !tPFAA, true, false, Materials.Ruby);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.sapphire", true, 5, 250, 1, !tPFAA, true, false, Materials.Sapphire);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.greensapphire", true, 5, 250, 1, !tPFAA, true, false, Materials.GreenSapphire);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.olivine", true, 5, 250, 1, !tPFAA, true, false, Materials.Olivine);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.topaz", true, 5, 250, 1, !tPFAA, true, false, Materials.Topaz);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.tanzanite", true, 5, 250, 1, !tPFAA, true, false, Materials.Tanzanite);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.amethyst", true, 5, 250, 1, !tPFAA, true, false, Materials.Amethyst);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.opal", true, 5, 250, 1, !tPFAA, true, false, Materials.Opal);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.jasper", true, 5, 250, 1, !tPFAA, true, false, Materials.Jasper);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.bluetopaz", true, 5, 250, 1, !tPFAA, true, false, Materials.BlueTopaz);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.amber", true, 5, 250, 1, !tPFAA, true, false, Materials.Amber);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.foolsruby", true, 5, 250, 1, !tPFAA, true, false, Materials.FoolsRuby);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.garnetred", true, 5, 250, 1, !tPFAA, true, false, Materials.GarnetRed);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.garnetyellow", true, 5, 250, 1, !tPFAA, true, false, Materials.GarnetYellow);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.redstone", true, 5, 20, 8, !tPFAA, true, false, Materials.Redstone);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.platinum", true, 20, 40, 8, false, false, true, Materials.Platinum);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.iridium", true, 20, 40, 8, false, false, true, Materials.Iridium);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.netherquartz", true, 30, 120, 64, false, true, false, Materials.NetherQuartz);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.saltpeter", true, 10, 60, 8, false, true, false, Materials.Saltpeter);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.sulfur_n", true, 10, 60, 32, false, true, false, Materials.Sulfur);
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.sulfur_o", true, 5, 15, 8, !tPFAA, false, false, Materials.Sulfur);
+
+ int i = 0;
+ for (int j = GregTech_API.sWorldgenFile.get("worldgen", "AmountOfCustomSmallOreSlots", 16); i < j; i++) {
+ new GT_Worldgen_GT_Ore_SmallPieces("ore.small.custom." + (i < 10 ? "0" : "") + i, false, 0, 0, 0, false, false, false, Materials._NULL);
+ }
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.naquadah", false, 10, 60, 10, 5, 32, false, false, true, Materials.Naquadah, Materials.Naquadah, Materials.Naquadah, Materials.NaquadahEnriched);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.lignite", true, 50, 130, 160, 8, 32, !tPFAA, false, false, Materials.Lignite, Materials.Lignite, Materials.Lignite, Materials.Coal);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.coal", true, 50, 80, 80, 6, 32, !tPFAA, false, false, Materials.Coal, Materials.Coal, Materials.Coal, Materials.Lignite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.magnetite", true, 50, 120, 160, 3, 32, !tPFAA, true, false, Materials.Magnetite, Materials.Magnetite, Materials.Iron, Materials.VanadiumMagnetite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.gold", true, 60, 80, 160, 3, 32, !tPFAA, false, false, Materials.Magnetite, Materials.Magnetite, Materials.VanadiumMagnetite, Materials.Gold);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.iron", true, 10, 40, 120, 4, 24, !tPFAA, true, false, Materials.BrownLimonite, Materials.YellowLimonite, Materials.BandedIron, Materials.Malachite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.cassiterite", true, 40, 120, 50, 5, 24, !tPFAA, false, true, Materials.Tin, Materials.Tin, Materials.Cassiterite, Materials.Tin);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.tetrahedrite", true, 80, 120, 70, 4, 24, !tPFAA, true, false, Materials.Tetrahedrite, Materials.Tetrahedrite, Materials.Copper, Materials.Stibnite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.netherquartz", true, 40, 80, 80, 5, 24, false, true, false, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.sulfur", true, 5, 20, 100, 5, 24, false, true, false, Materials.Sulfur, Materials.Sulfur, Materials.Pyrite, Materials.Sphalerite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.copper", true, 10, 30, 80, 4, 24, !tPFAA, true, false, Materials.Chalcopyrite, Materials.Iron, Materials.Pyrite, Materials.Copper);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.bauxite", true, 50, 90, 80, 4, 24, !tPFAA, tPFAA, false, Materials.Bauxite, Materials.Bauxite, Materials.Aluminium, Materials.Ilmenite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.salts", true, 50, 60, 50, 3, 24, !tPFAA, false, false, Materials.RockSalt, Materials.Salt, Materials.Lepidolite, Materials.Spodumene);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.redstone", true, 10, 40, 60, 3, 24, !tPFAA, true, false, Materials.Redstone, Materials.Redstone, Materials.Ruby, Materials.Cinnabar);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.soapstone", true, 10, 40, 40, 3, 16, !tPFAA, false, false, Materials.Soapstone, Materials.Talc, Materials.Glauconite, Materials.Pentlandite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.nickel", true, 10, 40, 40, 3, 16, !tPFAA, true, true, Materials.Garnierite, Materials.Nickel, Materials.Cobaltite, Materials.Pentlandite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.platinum", true, 40, 50, 5, 3, 16, !tPFAA, false, true, Materials.Cooperite, Materials.Palladium, Materials.Platinum, Materials.Iridium);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.pitchblende", true, 10, 40, 40, 3, 16, !tPFAA, false, false, Materials.Pitchblende, Materials.Pitchblende, Materials.Uranium, Materials.Uraninite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.plutonium", true, 20, 30, 10, 3, 16, !tPFAA, false, false, Materials.Uraninite, Materials.Uraninite, Materials.Plutonium, Materials.Uranium);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.monazite", true, 20, 40, 30, 3, 16, !tPFAA, tPFAA, false, Materials.Bastnasite, Materials.Bastnasite, Materials.Monazite, Materials.Neodymium);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.molybdenum", true, 20, 50, 5, 3, 16, !tPFAA, false, true, Materials.Wulfenite, Materials.Molybdenite, Materials.Molybdenum, Materials.Powellite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.tungstate", true, 20, 50, 10, 3, 16, !tPFAA, false, true, Materials.Scheelite, Materials.Scheelite, Materials.Tungstate, Materials.Lithium);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.sapphire", true, 10, 40, 60, 3, 16, !tPFAA, tPFAA, tPFAA, Materials.Almandine, Materials.Pyrope, Materials.Sapphire, Materials.GreenSapphire);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.manganese", true, 20, 30, 20, 3, 16, !tPFAA, false, true, Materials.Grossular, Materials.Spessartine, Materials.Pyrolusite, Materials.Tantalite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.quartz", true, 40, 80, 60, 3, 16, !tPFAA, tPFAA, false, Materials.Quartzite, Materials.Barite, Materials.CertusQuartz, Materials.CertusQuartz);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.diamond", true, 5, 20, 40, 2, 16, !tPFAA, false, false, Materials.Graphite, Materials.Graphite, Materials.Diamond, Materials.Coal);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.olivine", true, 10, 40, 60, 3, 16, !tPFAA, false, true, Materials.Bentonite, Materials.Magnesite, Materials.Olivine, Materials.Glauconite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.apatite", true, 40, 60, 60, 3, 16, !tPFAA, false, false, Materials.Apatite, Materials.Apatite, Materials.Phosphorus, Materials.Phosphate);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.galena", true, 30, 60, 40, 5, 16, !tPFAA, false, false, Materials.Galena, Materials.Galena, Materials.Silver, Materials.Lead);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.lapis", true, 20, 50, 40, 5, 16, !tPFAA, false, true, Materials.Lazurite, Materials.Sodalite, Materials.Lapis, Materials.Calcite);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.beryllium", true, 5, 30, 30, 3, 16, !tPFAA, false, true, Materials.Beryllium, Materials.Beryllium, Materials.Emerald, Materials.Thorium);
+
+ i = 0;
+ for (int j = GregTech_API.sWorldgenFile.get("worldgen", "AmountOfCustomLargeVeinSlots", 16); i < j; i++) {
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom." + (i < 10 ? "0" : "") + i, false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ }
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.00", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.01", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.02", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.03", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.04", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.05", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.06", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.07", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.08", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.09", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.10", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.11", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.12", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.13", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.14", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ new GT_Worldgen_GT_Ore_Layer("ore.mix.custom.15", false, 0, 0, 0, 0, 0, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java b/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java
new file mode 100644
index 0000000000..305b3b7bca
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java
@@ -0,0 +1,33 @@
+package gregtech.loaders.preload;
+
+import gregtech.api.util.GT_Log;
+import gregtech.common.redstonecircuits.GT_Circuit_BasicLogic;
+import gregtech.common.redstonecircuits.GT_Circuit_BitAnd;
+import gregtech.common.redstonecircuits.GT_Circuit_CombinationLock;
+import gregtech.common.redstonecircuits.GT_Circuit_Equals;
+import gregtech.common.redstonecircuits.GT_Circuit_Pulser;
+import gregtech.common.redstonecircuits.GT_Circuit_Randomizer;
+import gregtech.common.redstonecircuits.GT_Circuit_RedstoneMeter;
+import gregtech.common.redstonecircuits.GT_Circuit_Repeater;
+import gregtech.common.redstonecircuits.GT_Circuit_Timer;
+import java.io.PrintStream;
+
+public class GT_Loader_CircuitBehaviors
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Register Redstone Circuit behaviours.");
+ new GT_Circuit_Timer(0);
+ new GT_Circuit_BasicLogic(1);
+ new GT_Circuit_Repeater(2);
+ new GT_Circuit_Pulser(3);
+ new GT_Circuit_RedstoneMeter(4);
+
+ new GT_Circuit_Randomizer(8);
+
+ new GT_Circuit_CombinationLock(16);
+ new GT_Circuit_BitAnd(17);
+ new GT_Circuit_Equals(18);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java b/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java
new file mode 100644
index 0000000000..c0ceb5ea3b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java
@@ -0,0 +1,179 @@
+package gregtech.loaders.preload;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_Loader_ItemData
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Loading Item Data Tags");
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "item.giantPick", 1L, 0), new ItemData(Materials.Stone, 696729600L, new MaterialStack[] { new MaterialStack(Materials.Wood, 464486400L) }));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "item.giantSword", 1L, 0), new ItemData(Materials.Stone, 464486400L, new MaterialStack[] { new MaterialStack(Materials.Wood, 232243200L) }));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "tile.GiantLog", 1L, 32767), new ItemData(Materials.Wood, 232243200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "tile.GiantCobble", 1L, 32767), new ItemData(Materials.Stone, 232243200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "tile.GiantObsidian", 1L, 32767), new ItemData(Materials.Obsidian, 232243200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "item.minotaurAxe", 1L, 0), new ItemData(Materials.Diamond, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 2L) }));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "item.armorShards", 1L, 0), new ItemData(Materials.Knightmetal, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("TwilightForest", "item.shardCluster", 1L, 0), new ItemData(Materials.Knightmetal, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.TF_LiveRoot.get(1L, new Object[0]), new ItemData(Materials.LiveRoot, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10), new ItemData(Materials.CertusQuartz, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 11), new ItemData(Materials.NetherQuartz, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 12), new ItemData(Materials.Fluix, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.quartz_block, 1, 32767), new ItemData(Materials.NetherQuartz, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartz", 1L, 32767), new ItemData(Materials.CertusQuartz, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartzPillar", 1L, 32767), new ItemData(Materials.CertusQuartz, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("appliedenergistics2", "tile.BlockQuartzChiseled", 1L, 32767), new ItemData(Materials.CertusQuartz, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.wheat, 1, 32767), new ItemData(Materials.Wheat, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.hay_block, 1, 32767), new ItemData(Materials.Wheat, 32659200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.glowstone, 1, 32767), new ItemData(Materials.Glowstone, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.redstone_lamp, 1, 32767), new ItemData(Materials.Glowstone, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.lit_redstone_lamp, 1, 32767), new ItemData(Materials.Glowstone, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L) }));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Forestry", "craftingMaterial", 1L, 5), new ItemData(Materials.Ice, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.clay_ball, 1, 32767), new ItemData(Materials.Clay, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.clay, 1, 32767), new ItemData(Materials.Clay, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stained_hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.brick_block, 1, 32767), new ItemData(Materials.Clay, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("Uran238", 1L), new ItemData(Materials.Uranium, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("Uran235", 1L), new ItemData(Materials.Uranium235, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("Plutonium", 1L), new ItemData(Materials.Plutonium, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("smallUran235", 1L), new ItemData(Materials.Uranium235, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("smallPlutonium", 1L), new ItemData(Materials.Plutonium, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Iron.get(1L, new Object[0]), new ItemData(Materials.Iron, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Gold.get(1L, new Object[0]), new ItemData(Materials.Gold, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Bronze.get(1L, new Object[0]), new ItemData(Materials.Bronze, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Copper.get(1L, new Object[0]), new ItemData(Materials.Copper, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Tin.get(1L, new Object[0]), new ItemData(Materials.Tin, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Lead.get(1L, new Object[0]), new ItemData(Materials.Lead, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Steel.get(1L, new Object[0]), new ItemData(Materials.Steel, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.book, 1, 32767), new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.written_book, 1, 32767), new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.writable_book, 1, 32767), new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.enchanted_book, 1, 32767), new ItemData(Materials.Paper, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.golden_apple, 1, 1), new ItemData(Materials.Gold, OrePrefixes.block.mMaterialAmount * 8L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.golden_apple, 1, 0), new ItemData(Materials.Gold, OrePrefixes.ingot.mMaterialAmount * 8L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.golden_carrot, 1, 0), new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.speckled_melon, 1, 0), new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.minecart, 1), new ItemData(Materials.Iron, 18144000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.iron_door, 1), new ItemData(Materials.Iron, 21772800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.cauldron, 1), new ItemData(Materials.Iron, 25401600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.iron_bars, 8, 32767), new ItemData(Materials.Iron, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getIC2Item("ironFurnace", 1L), new ItemData(Materials.Iron, 18144000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Food_Can_Empty.get(1L, new Object[0]), new ItemData(Materials.Tin, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Fuel_Rod_Empty.get(1L, new Object[0]), new ItemData(Materials.Iron, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(ItemList.IC2_Fuel_Can_Empty.get(1L, new Object[0]), new ItemData(Materials.Tin, 25401600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.light_weighted_pressure_plate, 1, 32767), new ItemData(Materials.Gold, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.heavy_weighted_pressure_plate, 1, 32767), new ItemData(Materials.Iron, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Railcraft", "tile.railcraft.anvil", 1L, 0), new ItemData(Materials.Steel, 108864000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Railcraft", "tile.railcraft.anvil", 1L, 1), new ItemData(Materials.Steel, 72576000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Railcraft", "tile.railcraft.anvil", 1L, 2), new ItemData(Materials.Steel, 36288000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 0), new ItemData(Materials.Iron, 108864000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 1), new ItemData(Materials.Iron, 72576000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 2), new ItemData(Materials.Iron, 36288000L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.hopper, 1, 32767), new ItemData(Materials.Iron, 18144000L, new MaterialStack[] { new MaterialStack(Materials.Wood, 29030400L) }));
+ GT_OreDictUnificator.addItemData(ItemList.Cell_Universal_Fluid.get(1L, new Object[0]), new ItemData(Materials.Tin, 7257600L, new MaterialStack[] { new MaterialStack(Materials.Glass, 1360800L) }));
+ GT_OreDictUnificator.addItemData(ItemList.Cell_Empty.get(1L, new Object[0]), new ItemData(Materials.Tin, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.tripwire_hook, 1, 32767), new ItemData(Materials.Iron, OrePrefixes.ring.mMaterialAmount * 2L, new MaterialStack[] { new MaterialStack(Materials.Wood, 3628800L) }));
+ GT_OreDictUnificator.addItemData(ItemList.Bottle_Empty.get(1L, new Object[0]), new ItemData(Materials.Glass, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.potionitem, 1, 32767), new ItemData(Materials.Glass, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stained_glass, 1, 32767), new ItemData(Materials.Glass, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.glass, 1, 32767), new ItemData(Materials.Glass, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stained_glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.clock, 1, 32767), new ItemData(Materials.Gold, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.compass, 1, 32767), new ItemData(Materials.Iron, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.iron_horse_armor, 1, 32767), new ItemData(Materials.Iron, 29030400L, new MaterialStack[] { new MaterialStack(Materials.Leather, 21772800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.golden_horse_armor, 1, 32767), new ItemData(Materials.Gold, 29030400L, new MaterialStack[] { new MaterialStack(Materials.Leather, 21772800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.diamond_horse_armor, 1, 32767), new ItemData(Materials.Diamond, 29030400L, new MaterialStack[] { new MaterialStack(Materials.Leather, 21772800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.leather, 1, 32767), new ItemData(Materials.Leather, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.beacon, 1, 32767), new ItemData(Materials.NetherStar, 3628800L, new MaterialStack[] { new MaterialStack(Materials.Obsidian, 10886400L), new MaterialStack(Materials.Glass, 18144000L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.enchanting_table, 1, 32767), new ItemData(Materials.Diamond, 7257600L, new MaterialStack[] { new MaterialStack(Materials.Obsidian, 14515200L), new MaterialStack(Materials.Paper, 10886400L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ender_chest, 1, 32767), new ItemData(Materials.EnderEye, 3628800L, new MaterialStack[] { new MaterialStack(Materials.Obsidian, 29030400L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.bookshelf, 1, 32767), new ItemData(Materials.Paper, 32659200L, new MaterialStack[] { new MaterialStack(Materials.Wood, 21772800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.lever, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[] { new MaterialStack(Materials.Wood, 1814400L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow_layer, 1, 32767), new ItemData(Materials.Snow, -1L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.sand, 1, 32767), new ItemData(Materials.Sand, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.sandstone, 1, 32767), new ItemData(Materials.Sand, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 0), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 8), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 0), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 8), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 1), new ItemData(Materials.Sand, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 9), new ItemData(Materials.Sand, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 1), new ItemData(Materials.Sand, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 9), new ItemData(Materials.Sand, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 2), new ItemData(Materials.Wood, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 10), new ItemData(Materials.Wood, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 2), new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 10), new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 3), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 11), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 3), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 11), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 5), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 13), new ItemData(Materials.Stone, 1814400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 5), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.double_stone_slab, 1, 13), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.lit_furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stonebrick, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.mossy_cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_button, 1, 32767), new ItemData(Materials.Stone, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.stone_pressure_plate, 1, 32767), new ItemData(Materials.Stone, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ladder, 1, 32767), new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.wooden_button, 1, 32767), new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.wooden_pressure_plate, 1, 32767), new ItemData(Materials.Wood, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.fence, 1, 32767), new ItemData(Materials.Wood, 5443200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.bowl, 1, 32767), new ItemData(Materials.Wood, 3628800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.sign, 1, 32767), new ItemData(Materials.Wood, 7257600L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Items.wooden_door, 1, 32767), new ItemData(Materials.Wood, 21772800L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.chest, 1, 32767), new ItemData(Materials.Wood, 29030400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemData(Materials.Wood, 32659200L, new MaterialStack[] { new MaterialStack(Materials.Iron, OrePrefixes.ring.mMaterialAmount * 2L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.unlit_redstone_torch, 1, 32767), new ItemData(Materials.Wood, 1814400L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.redstone_torch, 1, 32767), new ItemData(Materials.Wood, 1814400L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.noteblock, 1, 32767), new ItemData(Materials.Wood, 29030400L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.jukebox, 1, 32767), new ItemData(Materials.Wood, 29030400L, new MaterialStack[] { new MaterialStack(Materials.Diamond, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.crafting_table, 1, 32767), new ItemData(Materials.Wood, 14515200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.piston, 1, 32767), new ItemData(Materials.Stone, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Wood, 10886400L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.sticky_piston, 1, 32767), new ItemData(Materials.Stone, 14515200L, new MaterialStack[] { new MaterialStack(Materials.Wood, 10886400L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.dispenser, 1, 32767), new ItemData(Materials.Stone, 25401600L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(new ItemStack(Blocks.dropper, 1, 32767), new ItemData(Materials.Stone, 25401600L, new MaterialStack[] { new MaterialStack(Materials.Redstone, 3628800L) }));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Thaumcraft", "ItemNuggetChicken", 1L, 32767), new ItemData(Materials.MeatCooked, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Thaumcraft", "ItemNuggetBeef", 1L, 32767), new ItemData(Materials.MeatCooked, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Thaumcraft", "ItemNuggetPork", 1L, 32767), new ItemData(Materials.MeatCooked, 403200L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getModItem("Thaumcraft", "ItemNuggetFish", 1L, 32767), new ItemData(Materials.MeatCooked, 403200L, new MaterialStack[0]));
+ for (ItemStack tItem : new ItemStack[] { GT_ModHandler.getModItem("TwilightForest", "item.meefRaw", 1L, 0), GT_ModHandler.getModItem("TwilightForest", "item.venisonRaw", 1L, 0), new ItemStack(Items.porkchop), new ItemStack(Items.beef), new ItemStack(Items.chicken), new ItemStack(Items.fish) }) {
+ if (tItem != null) {
+ GT_OreDictUnificator.addItemData(GT_Utility.copyMetaData(32767L, new Object[] { tItem }), new ItemData(Materials.MeatRaw, 3628800L, new MaterialStack[] { new MaterialStack(Materials.Bone, 403200L) }));
+ }
+ }
+ for (ItemStack tItem : new ItemStack[] { GT_ModHandler.getModItem("TwilightForest", "item.meefSteak", 1L, 0), GT_ModHandler.getModItem("TwilightForest", "item.venisonCooked", 1L, 0), new ItemStack(Items.cooked_porkchop), new ItemStack(Items.cooked_beef), new ItemStack(Items.cooked_chicken), new ItemStack(Items.cooked_fished) }) {
+ if (tItem != null) {
+ GT_OreDictUnificator.addItemData(GT_Utility.copyMetaData(32767L, new Object[] { tItem }), new ItemData(Materials.MeatCooked, 3628800L, new MaterialStack[] { new MaterialStack(Materials.Bone, 403200L) }));
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
new file mode 100644
index 0000000000..23cf902c8b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
@@ -0,0 +1,482 @@
+package gregtech.loaders.preload;
+
+import codechicken.nei.api.API;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.event.FMLInterModComms;
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.items.GT_Generic_Item;
+import gregtech.api.items.GT_RadioactiveCellIC_Item;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Proxy;
+import gregtech.common.blocks.GT_Block_Casings1;
+import gregtech.common.blocks.GT_Block_Casings2;
+import gregtech.common.blocks.GT_Block_Casings3;
+import gregtech.common.blocks.GT_Block_Casings4;
+import gregtech.common.blocks.GT_Block_Concretes;
+import gregtech.common.blocks.GT_Block_Granites;
+import gregtech.common.blocks.GT_Block_Machines;
+import gregtech.common.blocks.GT_Block_Ores;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import gregtech.common.items.GT_DepletetCell_Item;
+import gregtech.common.items.GT_FluidDisplayItem;
+import gregtech.common.items.GT_IntegratedCircuit_Item;
+import gregtech.common.items.GT_MetaGenerated_Item_01;
+import gregtech.common.items.GT_MetaGenerated_Item_02;
+import gregtech.common.items.GT_MetaGenerated_Item_03;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import gregtech.common.items.GT_NeutronReflector_Item;
+import ic2.core.Ic2Items;
+import ic2.core.item.ItemRadioactive;
+
+import java.io.PrintStream;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_Loader_Item_Block_And_Fluid
+ implements Runnable
+{
+ public void run()
+ {
+ Materials.Water.mFluid = (Materials.Ice.mFluid = GT_ModHandler.getWater(1000L).getFluid());
+ Materials.Lava.mFluid = GT_ModHandler.getLava(1000L).getFluid();
+
+ GT_Log.out.println("GT_Mod: Register Books.");
+
+ GT_Utility.getWrittenBook("Manual_Printer", "Printer Manual V2.0", "Gregorius Techneticies", new String[] {
+ "This Manual explains the different Functionalities the GregTech Printing Factory has built in, which are not in NEI. Most got NEI Support now, but there is still some left without it.",
+ "1. Coloring Items and Blocks: You know those Crafting Recipes, which have a dye surrounded by 8 Item to dye them? Or the ones which have just one Item and one Dye in the Grid? Those two Recipe Types can be cheaply automated using the Printer.",
+ "The Colorization Functionality even optimizes the Recipes, which normally require 8 Items + 1 Dye to 1 Item and an 8th of the normally used Dye in Fluid Form, isn't that awesome?",
+ "2. Copying Books: This Task got slightly harder. The first Step is putting the written and signed Book inside the Scanner with a Data Stick ready to receive the Data.",
+ "Now insert the Stick into the Data Slot of the Printer and add 3 pieces of Paper together with 144 Liters of actual Ink Fluid. Water mixed and chemical Dyes won't work on Paper without messing things up!",
+ "You got a stack of Pages for your new Book, just put them into the Assembler with some Glue and a piece of Leather for the Binding, and you receive an identical copy of the Book, which would stack together with the original.",
+ "3. Renaming Items: This Functionality is no longer Part of the Printer. There is now a Name Mold for the Forming Press to imprint a Name into an Item, just rename the Mold in an Anvil and use it in the Forming Press on any Item.",
+ "4. Crafting of Books, Maps, Nametags etc etc etc: Those Recipes moved to other Machines, just look them up in NEI." });
+
+ GT_Utility.getWrittenBook("Manual_Punch_Cards", "Punch Card Manual V0.0", "Gregorius Techneticies", new String[] {
+ "This Manual will explain the Functionality of the Punch Cards, once they are fully implemented. And no, they won't be like the IRL Punch Cards. This is just a current Idea Collection.",
+ "(i1&&i2)?o1=15:o1=0;=10",
+ "ignore all Whitespace Characters, use Long for saving the Numbers",
+ "&& || ^^ & | ^ ! ++ -- + - % / // * ** << >> >>> < > <= >= == != ~ ( ) ?: , ; ;= ;=X; = i0 i1 i2 i3 i4 i5 o0 o1 o2 o3 o4 o5 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 A B C D E F",
+ "'0' = false, 'everything but 0' = true, '!' turns '0' into '1' and everything else into '0'", "',' is just a separator for multiple executed Codes in a row.",
+ "';' means that the Program waits until the next tick before continuing. ';=10' and ';=10;' both mean that it will wait 10 Ticks instead of 1. And ';=0' or anything < 0 will default to 0.",
+ "If the '=' Operator is used within Brackets, it returns the value the variable has been set to.",
+ "The Program saves the Char Index of the current Task, the 10 Variables (which reset to 0 as soon as the Program Loop stops), the 10 Member Variables and the remaining waiting Time in its NBT.",
+ "A = 10, B = 11, C = 12, D = 13, E = 14, F = 15, just for Hexadecimal Space saving, since Redstone has only 4 Bits.",
+ "For implementing Loops you just need 1 Punch Card per Loop, these Cards can restart once they are finished, depending on how many other Cards there are in the Program Loop you inserted your Card into, since it will process them procedurally.",
+ "A Punch Card Processor can run up to four Loops, each with the length of seven Punch Cards, parallel.",
+ "Why does the Punch Card need Ink to be made, you ask? Because the empty one needs to have some lines on, and the for the punched one it prints the Code to execute in a human readable format on the Card." });
+
+ GT_Utility.getWrittenBook("Manual_Microwave", "Microwave Oven Manual", "Kitchen Industries", new String[] {
+ "Congratulations, you inserted a random seemingly empty Book into the Microwave and these Letters appeared out of nowhere.",
+ "You just got a Microwave Oven and asked yourself 'why do I even need it?'. It's simple, the Microwave can cook for just 128 EU and at an insane speed. Not even a normal E-furnace can do it that fast and cheap!",
+ "This is the cheapest and fastest way to cook for you. That is why the Microwave Oven can be found in almost every Kitchen (see www.youwannabuyakitchen.ly).",
+ "Long time exposure to Microwaves can cause Cancer, but we doubt Steve lives long enough to die because of that.",
+ "Do not insert any Metals. It might result in an Explosion.",
+ "Do not dry Animals with it. It will result in a Hot Dog, no matter which Animal you put into it.",
+ "Do not insert inflammable Objects. The Oven will catch on Fire.", "Do not insert Explosives such as Eggs. Just don't." });
+
+ GT_Log.out.println("GT_Mod: Register Items.");
+
+ new GT_IntegratedCircuit_Item();
+ new GT_MetaGenerated_Item_01();
+ new GT_MetaGenerated_Item_02();
+ new GT_MetaGenerated_Item_03();
+ new GT_MetaGenerated_Tool_01();
+
+ new GT_FluidDisplayItem();
+
+ Item tItem = (Item)GT_Utility.callConstructor("gregtech.common.items.GT_SensorCard_Item", 0, null, false, new Object[] { "sensorcard", "GregTech Sensor Card" });
+ ItemList.NC_SensorCard.set(tItem == null ? new GT_Generic_Item("sensorcard", "GregTech Sensor Card", "Nuclear Control not installed", false) : tItem);
+
+ ItemList.Neutron_Reflector.set(new GT_NeutronReflector_Item("neutronreflector", "Iridium Neutron Reflector", 0));
+ GT_ModHandler.addCraftingRecipe(ItemList.Neutron_Reflector.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "RRR", "RPR", "RRR",'R', GT_ModHandler.getIC2Item("reactorReflectorThick", 1L,1),'P', OrePrefixes.plateAlloy.get(Materials.Iridium) });
+
+ ItemList.Reactor_Coolant_He_1.set(GregTech_API.constructCoolantCellItem("60k_Helium_Coolantcell", "60k He Coolant Cell", 60000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_He_1.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { " P ", "PCP", " P ",'C', OrePrefixes.cell.get(Materials.Helium),'P', OrePrefixes.plate.get(Materials.Tin) });
+
+ ItemList.Reactor_Coolant_He_3.set(GregTech_API.constructCoolantCellItem("180k_Helium_Coolantcell", "180k He Coolant Cell", 180000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_He_3.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "PCP", "PCP", "PCP",'C', ItemList.Reactor_Coolant_He_1,'P', OrePrefixes.plate.get(Materials.Tin)});
+
+ ItemList.Reactor_Coolant_He_6.set(GregTech_API.constructCoolantCellItem("360k_Helium_Coolantcell", "360k He Coolant Cell", 360000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_He_6.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "PCP", "PDP", "PCP",'C', ItemList.Reactor_Coolant_He_3,'P', OrePrefixes.plate.get(Materials.Tin),'D',OrePrefixes.plateDense.get(Materials.Copper) });
+
+ ItemList.Reactor_Coolant_NaK_1.set(GregTech_API.constructCoolantCellItem("60k_NaK_Coolantcell", "60k NaK Coolantcell", 60000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_NaK_1.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "TST", "PCP", "TST",'C', GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 1),'T', OrePrefixes.plate.get(Materials.Tin) ,'S', OrePrefixes.dust.get(Materials.Sodium),'P', OrePrefixes.dust.get(Materials.Potassium)});
+
+ ItemList.Reactor_Coolant_NaK_3.set(GregTech_API.constructCoolantCellItem("180k_NaK_Coolantcell", "180k NaK Coolantcell", 180000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_NaK_3.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "PCP", "PCP", "PCP",'C', ItemList.Reactor_Coolant_NaK_1,'P', OrePrefixes.plate.get(Materials.Tin)});
+
+ ItemList.Reactor_Coolant_NaK_6.set(GregTech_API.constructCoolantCellItem("360k_NaK_Coolantcell", "360k NaK Coolantcell", 360000));
+ GT_ModHandler.addCraftingRecipe(ItemList.Reactor_Coolant_NaK_6.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "PCP", "PDP", "PCP",'C', ItemList.Reactor_Coolant_NaK_3,'P', OrePrefixes.plate.get(Materials.Tin),'D',OrePrefixes.plateDense.get(Materials.Copper) });
+
+ ItemList.ThoriumCell_1.set(new GT_RadioactiveCellIC_Item("Thoriumcell", "Fuel Rod (Thorium)", 1, 50000, 0.2F,0,0.25F));
+
+ ItemList.ThoriumCell_2.set(new GT_RadioactiveCellIC_Item("Double_Thoriumcell", "Double Fuel Rod (Thorium)", 2, 50000, 0.2F,0,0.25F));
+ GT_ModHandler.addCraftingRecipe(ItemList.ThoriumCell_2.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "RPR", " ", " ",'R', ItemList.ThoriumCell_1 ,'P', OrePrefixes.plate.get(Materials.Iron) });
+
+ ItemList.ThoriumCell_4.set(new GT_RadioactiveCellIC_Item("Quad_Thoriumcell", "Quad Fuel Rod (Thorium)", 4, 50000, 0.2F,0,0.25F));
+ GT_ModHandler.addCraftingRecipe(ItemList.ThoriumCell_4.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE , new Object[] { "RPR", "CPC", "RPR",'R', ItemList.ThoriumCell_1 ,'P', OrePrefixes.plate.get(Materials.Iron),'C', OrePrefixes.plate.get(Materials.Copper) });
+
+ ItemList.Depleted_Thorium_1.set(new GT_DepletetCell_Item("ThoriumcellDep","Fuel Rod (Depleted Thorium)",1));
+ ItemList.Depleted_Thorium_2.set(new GT_DepletetCell_Item("Double_ThoriumcellDep","Dual Fuel Rod (Depleted Thorium)",2));
+ ItemList.Depleted_Thorium_4.set(new GT_DepletetCell_Item("Quad_ThoriumcellDep","Quad Fuel Rod (Depleted Thorium)",4));
+
+ GT_ModHandler.addThermalCentrifugeRecipe(ItemList.Depleted_Thorium_1.get(1, new Object[0]), 5000, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 1L),GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 2L),GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)});
+ GT_ModHandler.addThermalCentrifugeRecipe(ItemList.Depleted_Thorium_2.get(1, new Object[0]), 5000, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 2L),GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 4L),GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L)});
+ GT_ModHandler.addThermalCentrifugeRecipe(ItemList.Depleted_Thorium_4.get(1, new Object[0]), 5000, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 4L),GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 8L),GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6L)});
+
+
+
+ GT_Log.out.println("GT_Mod: Adding Blocks.");
+ GregTech_API.sBlockMachines = new GT_Block_Machines();
+ GregTech_API.sBlockCasings1 = new GT_Block_Casings1();
+ GregTech_API.sBlockCasings2 = new GT_Block_Casings2();
+ GregTech_API.sBlockCasings3 = new GT_Block_Casings3();
+ GregTech_API.sBlockCasings4 = new GT_Block_Casings4();
+ GregTech_API.sBlockGranites = new GT_Block_Granites();
+ GregTech_API.sBlockConcretes = new GT_Block_Concretes();
+ GregTech_API.sBlockOres1 = new GT_Block_Ores();
+
+ GT_Log.out.println("GT_Mod: Register TileEntities.");
+
+
+ BaseMetaTileEntity tBaseMetaTileEntity = GregTech_API.constructBaseMetaTileEntity();
+
+ GT_Log.out.println("GT_Mod: Testing BaseMetaTileEntity.");
+ if (tBaseMetaTileEntity == null)
+ {
+ GT_Log.out.println("GT_Mod: Fatal Error ocurred while initializing TileEntities, crashing Minecraft.");
+ throw new RuntimeException("");
+ }
+ GT_Log.out.println("GT_Mod: Registering the BaseMetaTileEntity.");
+ GameRegistry.registerTileEntity(tBaseMetaTileEntity.getClass(), "BaseMetaTileEntity");
+ FMLInterModComms.sendMessage("appliedenergistics2", "whitelist-spatial", tBaseMetaTileEntity.getClass().getName());
+
+ GT_Log.out.println("GT_Mod: Registering the BaseMetaPipeEntity.");
+ GameRegistry.registerTileEntity(BaseMetaPipeEntity.class, "BaseMetaPipeEntity");
+ FMLInterModComms.sendMessage("appliedenergistics2", "whitelist-spatial", BaseMetaPipeEntity.class.getName());
+
+ GT_Log.out.println("GT_Mod: Registering the Ore TileEntity.");
+ GameRegistry.registerTileEntity(GT_TileEntity_Ores.class, "GT_TileEntity_Ores");
+ FMLInterModComms.sendMessage("appliedenergistics2", "whitelist-spatial", GT_TileEntity_Ores.class.getName());
+
+ GT_Log.out.println("GT_Mod: Registering Fluids.");
+ Materials.ConstructionFoam.mFluid = GT_Utility.getFluidForFilledItem(GT_ModHandler.getIC2Item("CFCell", 1L), true).getFluid();
+ Materials.UUMatter.mFluid = GT_Utility.getFluidForFilledItem(GT_ModHandler.getIC2Item("uuMatterCell", 1L), true).getFluid();
+
+// GT_Mod.gregtechproxy.addFluid("HeliumPlasma", "Helium Plasma", Materials.Helium, 3, 10000, GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+// GT_Mod.gregtechproxy.addFluid("NitrogenPlasma", "Nitrogen Plasma", Materials.Nitrogen, 3, 10000, GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Nitrogen, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+
+
+
+ GT_Mod.gregtechproxy.addFluid("Air", "Air", Materials.Air, 2, 295, ItemList.Cell_Air.get(1L, new Object[0]), ItemList.Cell_Empty.get(1L, new Object[0]), 2000);
+ GT_Mod.gregtechproxy.addFluid("Oxygen", "Oxygen", Materials.Oxygen, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Hydrogen", "Hydrogen", Materials.Hydrogen, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Deuterium", "Deuterium", Materials.Deuterium, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Tritium", "Tritium", Materials.Tritium, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tritium, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Helium", "Helium", Materials.Helium, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Fluorine", "Fluorine", Materials.Fluorine, 2, 53, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fluorine, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+// Materials.Lithium.mStandardMoltenFluid = new Fluid("lithium");
+ GT_Mod.gregtechproxy.addFluid("Helium-3", "Helium-3", Materials.Helium_3, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium_3, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Methane", "Methane", Materials.Methane, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Methane, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Nitrogen", "Nitrogen", Materials.Nitrogen, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("NitrogenDioxide", "Nitrogen Dioxide", Materials.NitrogenDioxide, 2, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitrogenDioxide, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Steam", "Steam", Materials.Water, 2, 375);
+ Materials.Ice.mGas = Materials.Water.mGas;
+ Materials.Water.mGas.setTemperature(375).setGaseous(true);
+
+
+
+ ItemList.sOilExtraHeavy = GT_Mod.gregtechproxy.addFluid("liquid_extra_heavy_oil", "Very Heavy Oil", null, 1, 295);
+ ItemList.sOilHeavy = GT_Mod.gregtechproxy.addFluid("liquid_heavy_oil", "Heavy Oil", null, 1, 295);
+ ItemList.sOilMedium = GT_Mod.gregtechproxy.addFluid("liquid_medium_oil", "Raw Oil", null, 1, 295);
+ ItemList.sOilLight = GT_Mod.gregtechproxy.addFluid("liquid_light_oil", "Light Oil", null, 1, 295);
+ ItemList.sNaturalGas = GT_Mod.gregtechproxy.addFluid("gas_natural_gas", "Natural Gas", null, 2, 295);
+
+ GT_Mod.gregtechproxy.addFluid("UUAmplifier", "UU Amplifier", Materials.UUAmplifier, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.UUAmplifier, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Chlorine", "Chlorine", Materials.Chlorine, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Mercury", "Mercury", Materials.Mercury, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Mercury, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("NitroFuel", "Nitro Diesel", Materials.NitroFuel, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitroFuel, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("SodiumPersulfate", "Sodium Persulfate", Materials.SodiumPersulfate, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SodiumPersulfate, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("Glyceryl", "Glyceryl Trinitrate", Materials.Glyceryl, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glyceryl, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+
+ GT_Mod.gregtechproxy.addFluid("lubricant", "Lubricant", Materials.Lubricant, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("creosote", "Creosote Oil", Materials.Creosote, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Creosote, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("seedoil", "Seed Oil", Materials.SeedOil, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SeedOil, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("fishoil", "Fish Oil", Materials.FishOil, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FishOil, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("oil", "Oil", Materials.Oil, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("fuel", "Diesel", Materials.Fuel, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("for.honey", "Honey", Materials.Honey, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Honey, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("biomass", "Biomass", Materials.Biomass, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Biomass, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("bioethanol", "Bio Ethanol", Materials.Ethanol, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ethanol, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("sulfuricacid", "Sulfuric Acid", Materials.SulfuricAcid, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("milk", "Milk", Materials.Milk, 1, 290, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("mcguffium", "Mc Guffium 239", Materials.McGuffium239, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.McGuffium239, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("glue", "Glue", Materials.Glue, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glue, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("hotfryingoil", "Hot Frying Oil", Materials.FryingOilHot, 1, 400, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FryingOilHot, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+
+ GT_Mod.gregtechproxy.addFluid("fieryblood", "Fiery Blood", Materials.FierySteel, 1, 6400, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FierySteel, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ GT_Mod.gregtechproxy.addFluid("holywater", "Holy Water", Materials.HolyWater, 1, 295, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HolyWater, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ if (ItemList.TF_Vial_FieryBlood.get(1L, new Object[0]) != null) {
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.FierySteel.getFluid(250L), ItemList.TF_Vial_FieryBlood.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0])));
+ }
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.Milk.getFluid(1000L), GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Milk, 1L), GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L)));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.Milk.getFluid(250L), ItemList.Bottle_Milk.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.HolyWater.getFluid(250L), ItemList.Bottle_Holy_Water.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.McGuffium239.getFluid(250L), ItemList.McGuffium_239.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.Fuel.getFluid(100L), ItemList.Tool_Lighter_Invar_Full.get(1L, new Object[0]), ItemList.Tool_Lighter_Invar_Empty.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(Materials.Fuel.getFluid(1000L), ItemList.Tool_Lighter_Platinum_Full.get(1L, new Object[0]), ItemList.Tool_Lighter_Platinum_Empty.get(1L, new Object[0])));
+
+ Dyes.dyeBlack.addFluidDye(GT_Mod.gregtechproxy.addFluid("squidink", "Squid Ink", null, 1, 295));
+ Dyes.dyeBlue.addFluidDye(GT_Mod.gregtechproxy.addFluid("indigo", "Indigo Dye", null, 1, 295));
+ for (byte i = 0; i < Dyes.VALUES.length; i = (byte)(i + 1))
+ {
+ Dyes tDye = Dyes.VALUES[i];
+ Fluid tFluid;
+ tDye.addFluidDye(tFluid = GT_Mod.gregtechproxy.addFluid("dye.watermixed." + tDye.name().toLowerCase(), "dyes", "Water Mixed " + tDye.mName + " Dye", null, tDye.getRGBA(), 1, 295, null, null, 0));
+ tDye.addFluidDye(tFluid = GT_Mod.gregtechproxy.addFluid("dye.chemical." + tDye.name().toLowerCase(), "dyes", "Chemical " + tDye.mName + " Dye", null, tDye.getRGBA(), 1, 295, null, null, 0));
+ FluidContainerRegistry.registerFluidContainer(new FluidStack(tFluid, 2304), ItemList.SPRAY_CAN_DYES[i].get(1L, new Object[0]), ItemList.Spray_Empty.get(1L, new Object[0]));
+ }
+ GT_Mod.gregtechproxy.addFluid("ice", "Crushed Ice", Materials.Ice, 0, 270, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L), ItemList.Cell_Empty.get(1L, new Object[0]), 1000);
+ Materials.Water.mSolid = Materials.Ice.mSolid;
+
+
+
+ GT_Mod.gregtechproxy.addFluid("molten.glass", "Molten Glass", Materials.Glass, 4, 1500);
+ GT_Mod.gregtechproxy.addFluid("molten.redstone", "Molten Redstone", Materials.Redstone, 4, 500);
+ GT_Mod.gregtechproxy.addFluid("molten.blaze", "Molten Blaze", Materials.Blaze, 4, 6400);
+ GT_Mod.gregtechproxy.addFluid("molten.concrete", "Wet Concrete", Materials.Concrete, 4, 300);
+ for (Materials tMaterial : Materials.VALUES) {
+ if ((tMaterial.mStandardMoltenFluid == null) && (tMaterial.contains(SubTag.SMELTING_TO_FLUID)) && (!tMaterial.contains(SubTag.NO_SMELTING)))
+ {
+ GT_Mod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial);
+ if ((tMaterial.mSmeltInto != tMaterial) && (tMaterial.mSmeltInto.mStandardMoltenFluid == null)) {
+ GT_Mod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial.mSmeltInto);
+ }
+ }
+ if(tMaterial.mElement!=null){
+ GT_Mod.gregtechproxy.addAutogeneratedPlasmaFluid(tMaterial);
+ }
+ }
+ GT_Mod.gregtechproxy.addFluid("potion.awkward", "Awkward Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.thick", "Thick Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 32), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.mundane", "Mundane Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 64), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.damage", "Harming Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8204), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.damage.strong", "Strong Harming Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8236), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.damage.splash", "Splash Harming Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16396), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.damage.strong.splash", "Strong Splash Harming Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16428), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.health", "Healing Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8197), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.health.strong", "Strong Healing Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8229), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.health.splash", "Splash Healing Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16389), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.health.strong.splash", "Strong Splash Healing Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16421), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed", "Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8194), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed.strong", "Strong Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8226), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed.long", "Stretched Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8258), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed.splash", "Splash Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16386), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed.strong.splash", "Strong Splash Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16418), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.speed.long.splash", "Stretched Splash Swiftness Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16450), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength", "Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8201), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength.strong", "Strong Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8233), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength.long", "Stretched Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8265), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength.splash", "Splash Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16393), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength.strong.splash", "Strong Splash Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16425), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.strength.long.splash", "Stretched Splash Strength Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16457), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen", "Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8193), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen.strong", "Strong Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8225), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen.long", "Stretched Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8257), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen.splash", "Splash Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16385), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen.strong.splash", "Strong Splash Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16417), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.regen.long.splash", "Stretched Splash Regenerating Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16449), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison", "Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8196), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison.strong", "Strong Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8228), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison.long", "Stretched Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8260), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison.splash", "Splash Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16388), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison.strong.splash", "Strong Splash Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16420), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.poison.long.splash", "Stretched Splash Poisonous Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16452), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.fireresistance", "Fire Resistant Brew", null, 1, 375, new ItemStack(Items.potionitem, 1, 8195), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.fireresistance.long", "Stretched Fire Resistant Brew", null, 1, 375, new ItemStack(Items.potionitem, 1, 8259), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.fireresistance.splash", "Splash Fire Resistant Brew", null, 1, 375, new ItemStack(Items.potionitem, 1, 16387), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.fireresistance.long.splash", "Stretched Splash Fire Resistant Brew", null, 1, 375, new ItemStack(Items.potionitem, 1, 16451), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.nightvision", "Night Vision Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8198), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.nightvision.long", "Stretched Night Vision Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8262), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.nightvision.splash", "Splash Night Vision Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16390), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.nightvision.long.splash", "Stretched Splash Night Vision Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16454), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.weakness", "Weakening Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8200), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.weakness.long", "Stretched Weakening Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8264), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.weakness.splash", "Splash Weakening Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16392), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.weakness.long.splash", "Stretched Splash Weakening Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16456), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.slowness", "Lame Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8202), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.slowness.long", "Stretched Lame Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8266), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.slowness.splash", "Splash Lame Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16394), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.slowness.long.splash", "Stretched Splash Lame Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16458), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.waterbreathing", "Fishy Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8205), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.waterbreathing.long", "Stretched Fishy Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8269), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.waterbreathing.splash", "Splash Fishy Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16397), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.waterbreathing.long.splash", "Stretched Splash Fishy Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16461), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.invisibility", "Invisible Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8206), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.invisibility.long", "Stretched Invisible Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 8270), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.invisibility.splash", "Splash Invisible Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16398), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.invisibility.long.splash", "Stretched Splash Invisible Brew", null, 1, 295, new ItemStack(Items.potionitem, 1, 16462), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+
+ GT_Mod.gregtechproxy.addFluid("potion.purpledrink", "Purple Drink", null, 1, 275, ItemList.Bottle_Purple_Drink.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.grapejuice", "Grape Juice", null, 1, 295, ItemList.Bottle_Grape_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.wine", "Wine", null, 1, 295, ItemList.Bottle_Wine.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.vinegar", "Vinegar", null, 1, 295, ItemList.Bottle_Vinegar.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.potatojuice", "Potato Juice", null, 1, 295, ItemList.Bottle_Potato_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.vodka", "Vodka", null, 1, 275, ItemList.Bottle_Vodka.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.leninade", "Leninade", null, 1, 275, ItemList.Bottle_Leninade.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.mineralwater", "Mineral Water", null, 1, 275, ItemList.Bottle_Mineral_Water.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.saltywater", "Salty Water", null, 1, 275, ItemList.Bottle_Salty_Water.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.reedwater", "Reed Water", null, 1, 295, ItemList.Bottle_Reed_Water.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.rum", "Rum", null, 1, 295, ItemList.Bottle_Rum.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.piratebrew", "Pirate Brew", null, 1, 295, ItemList.Bottle_Pirate_Brew.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.hopsjuice", "Hops Juice", null, 1, 295, ItemList.Bottle_Hops_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.darkbeer", "Dark Beer", null, 1, 275, ItemList.Bottle_Dark_Beer.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.dragonblood", "Dragon Blood", null, 1, 375, ItemList.Bottle_Dragon_Blood.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.wheatyjuice", "Wheaty Juice", null, 1, 295, ItemList.Bottle_Wheaty_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.scotch", "Scotch", null, 1, 275, ItemList.Bottle_Scotch.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.glenmckenner", "Glen McKenner", null, 1, 275, ItemList.Bottle_Glen_McKenner.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.wheatyhopsjuice", "Wheaty Hops Juice", null, 1, 295, ItemList.Bottle_Wheaty_Hops_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.beer", "Beer", null, 1, 275, ItemList.Bottle_Beer.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.chillysauce", "Chilly Sauce", null, 1, 375, ItemList.Bottle_Chilly_Sauce.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.hotsauce", "Hot Sauce", null, 1, 380, ItemList.Bottle_Hot_Sauce.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.diabolosauce", "Diabolo Sauce", null, 1, 385, ItemList.Bottle_Diabolo_Sauce.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.diablosauce", "Diablo Sauce", null, 1, 390, ItemList.Bottle_Diablo_Sauce.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.diablosauce.strong", "Old Man Snitches glitched Diablo Sauce", null, 1, 999, ItemList.Bottle_Snitches_Glitch_Sauce.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.applejuice", "Apple Juice", null, 1, 295, ItemList.Bottle_Apple_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.cider", "Cider", null, 1, 295, ItemList.Bottle_Cider.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.goldenapplejuice", "Golden Apple Juice", null, 1, 295, ItemList.Bottle_Golden_Apple_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.goldencider", "Golden Cider", null, 1, 295, ItemList.Bottle_Golden_Cider.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.idunsapplejuice", "Idun's Apple Juice", null, 1, 295, ItemList.Bottle_Iduns_Apple_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.notchesbrew", "Notches Brew", null, 1, 295, ItemList.Bottle_Notches_Brew.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.lemonjuice", "Lemon Juice", null, 1, 295, ItemList.Bottle_Lemon_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.limoncello", "Limoncello", null, 1, 295, ItemList.Bottle_Limoncello.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.lemonade", "Lemonade", null, 1, 275, ItemList.Bottle_Lemonade.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.alcopops", "Alcopops", null, 1, 275, ItemList.Bottle_Alcopops.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.cavejohnsonsgrenadejuice", "Cave Johnsons Grenade Juice", null, 1, 295, ItemList.Bottle_Cave_Johnsons_Grenade_Juice.get(1L, new Object[0]), ItemList.Bottle_Empty.get(1L, new Object[0]), 250);
+
+ GT_Mod.gregtechproxy.addFluid("potion.darkcoffee", "Dark Coffee", null, 1, 295, ItemList.ThermosCan_Dark_Coffee.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.darkcafeaulait", "Dark Cafe au lait", null, 1, 295, ItemList.ThermosCan_Dark_Cafe_au_lait.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.coffee", "Coffee", null, 1, 295, ItemList.ThermosCan_Coffee.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.cafeaulait", "Cafe au lait", null, 1, 295, ItemList.ThermosCan_Cafe_au_lait.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.laitaucafe", "Lait au cafe", null, 1, 295, ItemList.ThermosCan_Lait_au_cafe.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.darkchocolatemilk", "Bitter Chocolate Milk", null, 1, 295, ItemList.ThermosCan_Dark_Chocolate_Milk.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.chocolatemilk", "Chocolate Milk", null, 1, 295, ItemList.ThermosCan_Chocolate_Milk.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.tea", "Tea", null, 1, 295, ItemList.ThermosCan_Tea.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.sweettea", "Sweet Tea", null, 1, 295, ItemList.ThermosCan_Sweet_Tea.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+ GT_Mod.gregtechproxy.addFluid("potion.icetea", "Ice Tea", null, 1, 255, ItemList.ThermosCan_Ice_Tea.get(1L, new Object[0]), ItemList.ThermosCan_Empty.get(1L, new Object[0]), 250);
+
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.strong", 750), ItemList.IC2_Spray_WeedEx.get(1L, new Object[0]), ItemList.Spray_Empty.get(1L, new Object[0])));
+
+
+
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison", 125), ItemList.Arrow_Head_Glass_Poison.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.long", 125), ItemList.Arrow_Head_Glass_Poison_Long.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.strong", 125), ItemList.Arrow_Head_Glass_Poison_Strong.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness", 125), ItemList.Arrow_Head_Glass_Slowness.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness.long", 125), ItemList.Arrow_Head_Glass_Slowness_Long.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness", 125), ItemList.Arrow_Head_Glass_Weakness.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness.long", 125), ItemList.Arrow_Head_Glass_Weakness_Long.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("holywater", 125), ItemList.Arrow_Head_Glass_Holy_Water.get(1L, new Object[0]), ItemList.Arrow_Head_Glass_Emtpy.get(1L, new Object[0])));
+
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison", 125), ItemList.Arrow_Wooden_Glass_Poison.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.long", 125), ItemList.Arrow_Wooden_Glass_Poison_Long.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.strong", 125), ItemList.Arrow_Wooden_Glass_Poison_Strong.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness", 125), ItemList.Arrow_Wooden_Glass_Slowness.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness.long", 125), ItemList.Arrow_Wooden_Glass_Slowness_Long.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness", 125), ItemList.Arrow_Wooden_Glass_Weakness.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness.long", 125), ItemList.Arrow_Wooden_Glass_Weakness_Long.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("holywater", 125), ItemList.Arrow_Wooden_Glass_Holy_Water.get(1L, new Object[0]), ItemList.Arrow_Wooden_Glass_Emtpy.get(1L, new Object[0])));
+
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison", 125), ItemList.Arrow_Plastic_Glass_Poison.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.long", 125), ItemList.Arrow_Plastic_Glass_Poison_Long.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.poison.strong", 125), ItemList.Arrow_Plastic_Glass_Poison_Strong.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness", 125), ItemList.Arrow_Plastic_Glass_Slowness.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.slowness.long", 125), ItemList.Arrow_Plastic_Glass_Slowness_Long.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness", 125), ItemList.Arrow_Plastic_Glass_Weakness.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("potion.weakness.long", 125), ItemList.Arrow_Plastic_Glass_Weakness_Long.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ FluidContainerRegistry.registerFluidContainer(new FluidContainerRegistry.FluidContainerData(FluidRegistry.getFluidStack("holywater", 125), ItemList.Arrow_Plastic_Glass_Holy_Water.get(1L, new Object[0]), ItemList.Arrow_Plastic_Glass_Emtpy.get(1L, new Object[0])));
+ if (!GT_Values.D1) {
+ try
+ {
+ Class.forName("codechicken.nei.api.API");
+ GT_Log.out.println("GT_Mod: Hiding certain Items from NEI.");
+ API.hideItem(ItemList.Display_Fluid.getWildcard(1L, new Object[0]));
+ }
+ catch (Throwable e)
+ {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.cobblestone, 1, 32767), new ItemStack(Blocks.sand, 1), null, 0, false);
+ //GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.stone, 1, 32767), new ItemStack(Blocks.cobblestone, 1), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.gravel, 1, 32767), new ItemStack(Items.flint, 1), GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Flint, 1L), 10, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.furnace, 1, 32767), new ItemStack(Blocks.sand, 6), null, 0, false);
+ GT_ModHandler.addPulverisationRecipe(new ItemStack(Blocks.lit_furnace, 1, 32767), new ItemStack(Blocks.sand, 6), null, 0, false);
+
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.FierySteel, GT_ModHandler.getModItem("TwilightForest", "item.fieryIngot", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Knightmetal, GT_ModHandler.getModItem("TwilightForest", "item.knightMetal", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Steeleaf, GT_ModHandler.getModItem("TwilightForest", "item.steeleafIngot", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.IronWood, GT_ModHandler.getModItem("TwilightForest", "item.ironwoodIngot", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedAir, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedFire, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedWater, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 2));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedEarth, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 3));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedOrder, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 4));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.InfusedEntropy, GT_ModHandler.getModItem("Thaumcraft", "ItemShard", 1L, 5));
+ GT_OreDictUnificator.set(OrePrefixes.nugget, Materials.Mercury, GT_ModHandler.getModItem("Thaumcraft", "ItemNugget", 1L, 5));
+ GT_OreDictUnificator.set(OrePrefixes.nugget, Materials.Thaumium, GT_ModHandler.getModItem("Thaumcraft", "ItemNugget", 1L, 6));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Thaumium, GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1L, 2));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Mercury, GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1L, 3));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Amber, GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1L, 6));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Firestone, GT_ModHandler.getModItem("Railcraft", "firestone.raw", 1L));
+
+ if(GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + "railcraft", "plateIron", true)){
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Iron, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 0));}else{
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Iron, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 0),false,false);}
+
+ if(GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + "railcraft", "plateSteel", true)){
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Steel, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 1));}else{
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Steel, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 1),false,false);}
+
+ if(GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + "railcraft", "plateTinAlloy", true)){
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.TinAlloy, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 2));}else{
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.TinAlloy, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 2),false,false);}
+
+
+ if(GregTech_API.sUnification.get(ConfigCategories.specialunificationtargets + "." + "railcraft", "plateCopper", true)){
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Copper, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 3));}else{
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Copper, GT_ModHandler.getModItem("Railcraft", "part.plate", 1L, 3),false,false);}
+
+
+
+
+
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Cocoa, GT_ModHandler.getModItem("harvestcraft", "cocoapowderItem", 1L, 0));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Coffee, ItemList.IC2_CoffeePowder.get(1L, new Object[0]));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
new file mode 100644
index 0000000000..5e24451cc5
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
@@ -0,0 +1,1275 @@
+package gregtech.loaders.preload;
+
+import cpw.mods.fml.common.Loader;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.X;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Transformer;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ModHandler.RecipeBits;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.common.GT_Proxy;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_Filter;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_Regulator;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_SuperBuffer;
+import gregtech.common.tileentities.automation.GT_MetaTileEntity_TypeFilter;
+import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Bronze;
+import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Lava;
+import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Solar;
+import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Steel;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_DieselGenerator;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_FluidNaquadahReactor;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_GasTurbine;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_MagicEnergyConverter;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_MagicalEnergyAbsorber;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_PlasmaGenerator;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_SolidNaquadahReactor;
+import gregtech.common.tileentities.generators.GT_MetaTileEntity_SteamTurbine;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_Bronze;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_BronzeBricks;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_Steel;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_SteelBricks;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Boxinator;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Disassembler;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Massfabricator;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MonsterRepellent;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_PotionBrewer;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Pump;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Replicator;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_RockBreaker;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Scanner;
+import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Teleporter;
+import gregtech.common.tileentities.machines.multi.*;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_AlloySmelter_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_AlloySmelter_Steel;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Compressor_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Compressor_Steel;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Extractor_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Extractor_Steel;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_ForgeHammer_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_ForgeHammer_Steel;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Furnace_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Furnace_Steel;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Macerator_Bronze;
+import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Macerator_Steel;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_Locker;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumTank;
+
+import java.io.PrintStream;
+import java.util.Map;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.oredict.OreDictionary;
+
+public class GT_Loader_MetaTileEntities
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Registering MetaTileEntities.");
+ run1();
+ run2();
+ run3();
+ run4();
+ }
+
+ private static void run1()
+ {
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.WroughtIron) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Chrome) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Iridium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Neutronium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_BronzePlatedBricks.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PBP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('B'), new ItemStack(Blocks.brick_block, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_StableTitanium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_HeatProof.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Invar), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Invar) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_FrostProof.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Aluminium), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_CleanStainlessSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.StainlessSteel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.StainlessSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_RobustTungstenSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.TungstenSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Turbine.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Magnalium), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.BlueSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Pipe_Bronze.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PIP", "IFI", "PIP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Bronze), Character.valueOf('I'), OrePrefixes.pipeMedium.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Pipe_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PIP", "IFI", "PIP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Steel), Character.valueOf('I'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Pipe_Titanium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PIP", "IFI", "PIP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Titanium), Character.valueOf('I'), OrePrefixes.pipeMedium.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Pipe_TungstenSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PIP", "IFI", "PIP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.TungstenSteel), Character.valueOf('I'), OrePrefixes.pipeMedium.get(Materials.TungstenSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Gearbox_Bronze.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "GFG", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Bronze), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Gearbox_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "GFG", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Steel), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Gearbox_Titanium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "GFG", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Titanium), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Gearbox_TungstenSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "GFG", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.TungstenSteel), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.TungstenSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Firebox_Bronze.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PSP", "SFS", "PSP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Bronze), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Firebox_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PSP", "SFS", "PSP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Steel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Firebox_Titanium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PSP", "SFS", "PSP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Titanium), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.Titanium), Character.valueOf('S'), OrePrefixes.stick.get(Materials.Titanium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Firebox_TungstenSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PSP", "SFS", "PSP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('F'), OrePrefixes.frameGt.get(Materials.TungstenSteel), Character.valueOf('S'), OrePrefixes.stick.get(Materials.TungstenSteel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Coil_Cupronickel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.wireGt02.get(Materials.Cupronickel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Coil_Kanthal.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.wireGt02.get(Materials.Kanthal) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Coil_Nichrome.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.wireGt02.get(Materials.Nichrome) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Coil_Superconductor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PwP", "PPP", Character.valueOf('P'), OrePrefixes.wireGt02.get(Materials.Superconductor) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Stripes_A.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "Y ", " M ", " B", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Stripes_B.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y", " M ", "B ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_RadioactiveHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " YB", " M ", " ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_BioHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y ", " MB", " ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_ExplosionHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y ", " M ", " B", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_FireHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y ", " M ", " B ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_AcidHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y ", " M ", "B ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_MagicHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " Y ", "BM ", " ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_FrostHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BY ", " M ", " ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_NoiseHazard.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " ", " M ", "BY ", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('Y'), Dyes.dyeYellow, Character.valueOf('B'), Dyes.dyeBlack });
+
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_Stripes_A });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_Stripes_B });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_RadioactiveHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_BioHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_ExplosionHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_FireHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_AcidHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_MagicHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_FrostHazard });
+ GT_ModHandler.addShapelessCraftingRecipe(ItemList.Casing_SolidSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { ItemList.Casing_NoiseHazard });
+
+ ItemList.Hull_Bronze.set(new GT_MetaTileEntity_BasicHull_Bronze(1, "hull.bronze", "Bronze Hull", 0, "For your first Steam Machines").getStackForm(1L));
+ ItemList.Hull_Bronze_Bricks.set(new GT_MetaTileEntity_BasicHull_BronzeBricks(2, "hull.bronze_bricked", "Bricked Bronze Hull", 0, "For your first Steam Machines").getStackForm(1L));
+ ItemList.Hull_Steel.set(new GT_MetaTileEntity_BasicHull_Steel(3, "hull.steel", "Steel Hull", 0, "For improved Steam Machines").getStackForm(1L));
+ ItemList.Hull_Steel_Bricks.set(new GT_MetaTileEntity_BasicHull_SteelBricks(4, "hull.steel_bricked", "Bricked Steel Hull", 0, "For improved Steam Machines").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_Bronze.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PhP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_Bronze_Bricks.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PhP", "BBB", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('B'), new ItemStack(Blocks.brick_block, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PhP", "PPP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_Steel_Bricks.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "PhP", "BBB", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), new ItemStack(Blocks.brick_block, 1) });
+
+ ItemList.Hull_ULV.set(new GT_MetaTileEntity_BasicHull(10, "hull.tier.00", "ULV Machine Hull", 0, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_LV.set(new GT_MetaTileEntity_BasicHull(11, "hull.tier.01", "LV Machine Hull", 1, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_MV.set(new GT_MetaTileEntity_BasicHull(12, "hull.tier.02", "MV Machine Hull", 2, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_HV.set(new GT_MetaTileEntity_BasicHull(13, "hull.tier.03", "HV Machine Hull", 3, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_EV.set(new GT_MetaTileEntity_BasicHull(14, "hull.tier.04", "EV Machine Hull", 4, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_IV.set(new GT_MetaTileEntity_BasicHull(15, "hull.tier.05", "IV Machine Hull", 5, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_LuV.set(new GT_MetaTileEntity_BasicHull(16, "hull.tier.06", "LuV Machine Hull", 6, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_ZPM.set(new GT_MetaTileEntity_BasicHull(17, "hull.tier.07", "ZPM Machine Hull", 7, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_UV.set(new GT_MetaTileEntity_BasicHull(18, "hull.tier.08", "UV Machine Hull", 8, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+ ItemList.Hull_MAX.set(new GT_MetaTileEntity_BasicHull(19, "hull.tier.09", "Max Machine Hull", 9, EnumChatFormatting.RESET + "You just need " + EnumChatFormatting.DARK_PURPLE + "I" + EnumChatFormatting.LIGHT_PURPLE + "m" + EnumChatFormatting.DARK_RED + "a" + EnumChatFormatting.RED + "g" + EnumChatFormatting.YELLOW + "i" + EnumChatFormatting.GREEN + "n" + EnumChatFormatting.AQUA + "a" + EnumChatFormatting.DARK_AQUA + "t" + EnumChatFormatting.BLUE + "i" + EnumChatFormatting.DARK_BLUE + "o" + EnumChatFormatting.DARK_PURPLE + "n" + EnumChatFormatting.RESET + " to use this.", new ITexture[0]).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_ULV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Lead) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_IV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_LuV, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_ZPM, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_UV, Character.valueOf('C'), OrePrefixes.wireGt16.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hull_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMC", Character.valueOf('M'), ItemList.Casing_MAX, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.Superconductor) });
+
+ ItemList.Transformer_LV_ULV.set(new GT_MetaTileEntity_Transformer(20, "transformer.tier.00", "Ultra Low Voltage Transformer", 0, "LV -> ULV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_MV_LV.set(new GT_MetaTileEntity_Transformer(21, "transformer.tier.01", "Low Voltage Transformer", 1, "MV -> LV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_HV_MV.set(new GT_MetaTileEntity_Transformer(22, "transformer.tier.02", "Medium Voltage Transformer", 2, "HV -> MV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_EV_HV.set(new GT_MetaTileEntity_Transformer(23, "transformer.tier.03", "High Voltage Transformer", 3, "EV -> HV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_IV_EV.set(new GT_MetaTileEntity_Transformer(24, "transformer.tier.04", "Extreme Transformer", 4, "IV -> EV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_LuV_IV.set(new GT_MetaTileEntity_Transformer(25, "transformer.tier.05", "Insane Transformer", 5, "LuV -> IV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_ZPM_LuV.set(new GT_MetaTileEntity_Transformer(26, "transformer.tier.06", "Ludicrous Transformer", 6, "ZPM -> LuV (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_UV_ZPM.set(new GT_MetaTileEntity_Transformer(27, "transformer.tier.07", "ZPM Voltage Transformer", 7, "UV -> ZPM (Use Soft Hammer to invert)").getStackForm(1L));
+ ItemList.Transformer_MAX_UV.set(new GT_MetaTileEntity_Transformer(28, "transformer.tier.08", "Ultimate Transformer", 8, "Any Voltage -> UV (Use Soft Hammer to invert)").getStackForm(1L));
+
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_LV_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.Lead) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_MV_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_HV_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_EV_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_IV_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_LuV_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Tungsten), Character.valueOf('B'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_ZPM_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Osmium), Character.valueOf('B'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_UV_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('C'), OrePrefixes.wireGt16.get(Materials.Osmium), Character.valueOf('B'), OrePrefixes.cableGt04.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Transformer_MAX_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " BB", "CM ", " BB", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.Superconductor), Character.valueOf('B'), OrePrefixes.wireGt16.get(Materials.Osmium) });
+
+ ItemList.Hatch_Dynamo_ULV.set(new GT_MetaTileEntity_Hatch_Dynamo(30, "hatch.dynamo.tier.00", "ULV Dynamo Hatch", 0).getStackForm(1L));
+ ItemList.Hatch_Dynamo_LV.set(new GT_MetaTileEntity_Hatch_Dynamo(31, "hatch.dynamo.tier.01", "LV Dynamo Hatch", 1).getStackForm(1L));
+ ItemList.Hatch_Dynamo_MV.set(new GT_MetaTileEntity_Hatch_Dynamo(32, "hatch.dynamo.tier.02", "MV Dynamo Hatch", 2).getStackForm(1L));
+ ItemList.Hatch_Dynamo_HV.set(new GT_MetaTileEntity_Hatch_Dynamo(33, "hatch.dynamo.tier.03", "HV Dynamo Hatch", 3).getStackForm(1L));
+ ItemList.Hatch_Dynamo_EV.set(new GT_MetaTileEntity_Hatch_Dynamo(34, "hatch.dynamo.tier.04", "EV Dynamo Hatch", 4).getStackForm(1L));
+ ItemList.Hatch_Dynamo_IV.set(new GT_MetaTileEntity_Hatch_Dynamo(35, "hatch.dynamo.tier.05", "IV Dynamo Hatch", 5).getStackForm(1L));
+ ItemList.Hatch_Dynamo_LuV.set(new GT_MetaTileEntity_Hatch_Dynamo(36, "hatch.dynamo.tier.06", "LuV Dynamo Hatch", 6).getStackForm(1L));
+ ItemList.Hatch_Dynamo_ZPM.set(new GT_MetaTileEntity_Hatch_Dynamo(37, "hatch.dynamo.tier.07", "ZPM Dynamo Hatch", 7).getStackForm(1L));
+ ItemList.Hatch_Dynamo_UV.set(new GT_MetaTileEntity_Hatch_Dynamo(38, "hatch.dynamo.tier.08", "UV Dynamo Hatch", 8).getStackForm(1L));
+ ItemList.Hatch_Dynamo_MAX.set(new GT_MetaTileEntity_Hatch_Dynamo(39, "hatch.dynamo.tier.09", "Max Dynamo Hatch", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Lead) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('C'), OrePrefixes.wireGt16.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Dynamo_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " MC", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.Superconductor) });
+
+ ItemList.Hatch_Energy_ULV.set(new GT_MetaTileEntity_Hatch_Energy(40, "hatch.energy.tier.00", "ULV Energy Hatch", 0).getStackForm(1L));
+ ItemList.Hatch_Energy_LV.set(new GT_MetaTileEntity_Hatch_Energy(41, "hatch.energy.tier.01", "LV Energy Hatch", 1).getStackForm(1L));
+ ItemList.Hatch_Energy_MV.set(new GT_MetaTileEntity_Hatch_Energy(42, "hatch.energy.tier.02", "MV Energy Hatch", 2).getStackForm(1L));
+ ItemList.Hatch_Energy_HV.set(new GT_MetaTileEntity_Hatch_Energy(43, "hatch.energy.tier.03", "HV Energy Hatch", 3).getStackForm(1L));
+ ItemList.Hatch_Energy_EV.set(new GT_MetaTileEntity_Hatch_Energy(44, "hatch.energy.tier.04", "EV Energy Hatch", 4).getStackForm(1L));
+ ItemList.Hatch_Energy_IV.set(new GT_MetaTileEntity_Hatch_Energy(45, "hatch.energy.tier.05", "IV Energy Hatch", 5).getStackForm(1L));
+ ItemList.Hatch_Energy_LuV.set(new GT_MetaTileEntity_Hatch_Energy(46, "hatch.energy.tier.06", "LuV Energy Hatch", 6).getStackForm(1L));
+ ItemList.Hatch_Energy_ZPM.set(new GT_MetaTileEntity_Hatch_Energy(47, "hatch.energy.tier.07", "ZPM Energy Hatch", 7).getStackForm(1L));
+ ItemList.Hatch_Energy_UV.set(new GT_MetaTileEntity_Hatch_Energy(48, "hatch.energy.tier.08", "UV Energy Hatch", 8).getStackForm(1L));
+ ItemList.Hatch_Energy_MAX.set(new GT_MetaTileEntity_Hatch_Energy(49, "hatch.energy.tier.09", "Max Energy Hatch", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Lead) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('C'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('C'), OrePrefixes.cableGt04.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('C'), OrePrefixes.wireGt16.get(Materials.Osmium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Energy_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CM ", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('C'), OrePrefixes.wireGt01.get(Materials.Superconductor) });
+
+ ItemList.Hatch_Input_ULV.set(new GT_MetaTileEntity_Hatch_Input(50, "hatch.input.tier.00", "Input Hatch (ULV)", 0).getStackForm(1L));
+ ItemList.Hatch_Input_LV.set(new GT_MetaTileEntity_Hatch_Input(51, "hatch.input.tier.01", "Input Hatch (LV)", 1).getStackForm(1L));
+ ItemList.Hatch_Input_MV.set(new GT_MetaTileEntity_Hatch_Input(52, "hatch.input.tier.02", "Input Hatch (MV)", 2).getStackForm(1L));
+ ItemList.Hatch_Input_HV.set(new GT_MetaTileEntity_Hatch_Input(53, "hatch.input.tier.03", "Input Hatch (HV)", 3).getStackForm(1L));
+ ItemList.Hatch_Input_EV.set(new GT_MetaTileEntity_Hatch_Input(54, "hatch.input.tier.04", "Input Hatch (EV)", 4).getStackForm(1L));
+ ItemList.Hatch_Input_IV.set(new GT_MetaTileEntity_Hatch_Input(55, "hatch.input.tier.05", "Input Hatch (IV)", 5).getStackForm(1L));
+ ItemList.Hatch_Input_LuV.set(new GT_MetaTileEntity_Hatch_Input(56, "hatch.input.tier.06", "Input Hatch (LuV)", 6).getStackForm(1L));
+ ItemList.Hatch_Input_ZPM.set(new GT_MetaTileEntity_Hatch_Input(57, "hatch.input.tier.07", "Input Hatch (ZPM)", 7).getStackForm(1L));
+ ItemList.Hatch_Input_UV.set(new GT_MetaTileEntity_Hatch_Input(58, "hatch.input.tier.08", "Input Hatch (UV)", 8).getStackForm(1L));
+ ItemList.Hatch_Input_MAX.set(new GT_MetaTileEntity_Hatch_Input(59, "hatch.input.tier.09", "Input Hatch (MAX)", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "G", "M", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ ItemList.Hatch_Output_ULV.set(new GT_MetaTileEntity_Hatch_Output(60, "hatch.output.tier.00", "Output Hatch (ULV)", 0).getStackForm(1L));
+ ItemList.Hatch_Output_LV.set(new GT_MetaTileEntity_Hatch_Output(61, "hatch.output.tier.01", "Output Hatch (LV)", 1).getStackForm(1L));
+ ItemList.Hatch_Output_MV.set(new GT_MetaTileEntity_Hatch_Output(62, "hatch.output.tier.02", "Output Hatch (MV)", 2).getStackForm(1L));
+ ItemList.Hatch_Output_HV.set(new GT_MetaTileEntity_Hatch_Output(63, "hatch.output.tier.03", "Output Hatch (HV)", 3).getStackForm(1L));
+ ItemList.Hatch_Output_EV.set(new GT_MetaTileEntity_Hatch_Output(64, "hatch.output.tier.04", "Output Hatch (EV)", 4).getStackForm(1L));
+ ItemList.Hatch_Output_IV.set(new GT_MetaTileEntity_Hatch_Output(65, "hatch.output.tier.05", "Output Hatch (IV)", 5).getStackForm(1L));
+ ItemList.Hatch_Output_LuV.set(new GT_MetaTileEntity_Hatch_Output(66, "hatch.output.tier.06", "Output Hatch (LuV)", 6).getStackForm(1L));
+ ItemList.Hatch_Output_ZPM.set(new GT_MetaTileEntity_Hatch_Output(67, "hatch.output.tier.07", "Output Hatch (ZPM)", 7).getStackForm(1L));
+ ItemList.Hatch_Output_UV.set(new GT_MetaTileEntity_Hatch_Output(68, "hatch.output.tier.08", "Output Hatch (UV)", 8).getStackForm(1L));
+ ItemList.Hatch_Output_MAX.set(new GT_MetaTileEntity_Hatch_Output(69, "hatch.output.tier.09", "Output Hatch (MAX)", 9).getStackForm(1L));
+
+ ItemList.Quantum_Tank_LV.set(new GT_MetaTileEntity_QuantumTank(120, "quantum.tank.tier.01", "Quantum Tank I", 1).getStackForm(1L));
+ ItemList.Quantum_Tank_MV.set(new GT_MetaTileEntity_QuantumTank(121, "quantum.tank.tier.02", "Quantum Tank II", 2).getStackForm(1L));
+ ItemList.Quantum_Tank_HV.set(new GT_MetaTileEntity_QuantumTank(122, "quantum.tank.tier.03", "Quantum Tank III", 3).getStackForm(1L));
+ ItemList.Quantum_Tank_EV.set(new GT_MetaTileEntity_QuantumTank(123, "quantum.tank.tier.04", "Quantum Tank IV", 4).getStackForm(1L));
+ ItemList.Quantum_Tank_IV.set(new GT_MetaTileEntity_QuantumTank(124, "quantum.tank.tier.05", "Quantum Tank V", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Tank_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DGD", "PMP","DPD", 'M', ItemList.Hull_LV, 'G', ItemList.Field_Generator_LV ,'D',ItemList.Circuit_Parts_Crystal_Chip_Elite,'P',OrePrefixes.plate.get(Materials.StainlessSteel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Tank_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DGD", "PMP","DPD", 'M', ItemList.Hull_MV, 'G', ItemList.Field_Generator_MV ,'D',ItemList.Circuit_Data,'P',OrePrefixes.plate.get(Materials.Titanium)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Tank_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DGD", "PMP","DPD", 'M', ItemList.Hull_HV, 'G', ItemList.Field_Generator_HV ,'D',ItemList.Circuit_Elite,'P',OrePrefixes.plate.get(Materials.TungstenSteel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Tank_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DGD", "PMP","DPD", 'M', ItemList.Hull_EV, 'G', ItemList.Field_Generator_EV ,'D',ItemList.Circuit_Master,'P',OrePrefixes.plate.get(Materials.Europium)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Tank_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DGD", "PMP","DPD", 'M', ItemList.Hull_IV, 'G', ItemList.Field_Generator_IV ,'D',ItemList.Circuit_Master,'P',OrePrefixes.plate.get(Materials.Americium)});
+
+ ItemList.Quantum_Chest_LV.set(new GT_MetaTileEntity_QuantumChest(125, "quantum.chest.tier.01", "Quantum Chest I", 1).getStackForm(1L));
+ ItemList.Quantum_Chest_MV.set(new GT_MetaTileEntity_QuantumChest(126, "quantum.chest.tier.02", "Quantum Chest II", 2).getStackForm(1L));
+ ItemList.Quantum_Chest_HV.set(new GT_MetaTileEntity_QuantumChest(127, "quantum.chest.tier.03", "Quantum Chest III", 3).getStackForm(1L));
+ ItemList.Quantum_Chest_EV.set(new GT_MetaTileEntity_QuantumChest(128, "quantum.chest.tier.04", "Quantum Chest IV", 4).getStackForm(1L));
+ ItemList.Quantum_Chest_IV.set(new GT_MetaTileEntity_QuantumChest(129, "quantum.chest.tier.05", "Quantum Chest V", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Chest_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DPD", "PMP","DGD", 'M', ItemList.Hull_LV, 'G', ItemList.Field_Generator_LV ,'D',ItemList.Circuit_Parts_Crystal_Chip_Elite,'P',OrePrefixes.plate.get(Materials.StainlessSteel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Chest_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DPD", "PMP","DGD", 'M', ItemList.Hull_MV, 'G', ItemList.Field_Generator_MV ,'D',ItemList.Circuit_Data,'P',OrePrefixes.plate.get(Materials.Titanium)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Chest_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DPD", "PMP","DGD", 'M', ItemList.Hull_HV, 'G', ItemList.Field_Generator_HV ,'D',ItemList.Circuit_Elite,'P',OrePrefixes.plate.get(Materials.TungstenSteel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Chest_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DPD", "PMP","DGD", 'M', ItemList.Hull_EV, 'G', ItemList.Field_Generator_EV ,'D',ItemList.Circuit_Master,'P',OrePrefixes.plate.get(Materials.Europium)});
+ GT_ModHandler.addCraftingRecipe(ItemList.Quantum_Chest_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DPD", "PMP","DGD", 'M', ItemList.Hull_IV, 'G', ItemList.Field_Generator_IV ,'D',ItemList.Circuit_Master,'P',OrePrefixes.plate.get(Materials.Americium)});
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "G", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ ItemList.Hatch_Input_Bus_ULV.set(new GT_MetaTileEntity_Hatch_InputBus(70, "hatch.input_bus.tier.00", "Input Bus (ULV)", 0).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_LV.set(new GT_MetaTileEntity_Hatch_InputBus(71, "hatch.input_bus.tier.01", "Input Bus (LV)", 1).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_MV.set(new GT_MetaTileEntity_Hatch_InputBus(72, "hatch.input_bus.tier.02", "Input Bus (MV)", 2).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_HV.set(new GT_MetaTileEntity_Hatch_InputBus(73, "hatch.input_bus.tier.03", "Input Bus (HV)", 3).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_EV.set(new GT_MetaTileEntity_Hatch_InputBus(74, "hatch.input_bus.tier.04", "Input Bus (EV)", 4).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_IV.set(new GT_MetaTileEntity_Hatch_InputBus(75, "hatch.input_bus.tier.05", "Input Bus (IV)", 5).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_LuV.set(new GT_MetaTileEntity_Hatch_InputBus(76, "hatch.input_bus.tier.06", "Input Bus (LuV)", 6).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_ZPM.set(new GT_MetaTileEntity_Hatch_InputBus(77, "hatch.input_bus.tier.07", "Input Bus (ZPM)", 7).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_UV.set(new GT_MetaTileEntity_Hatch_InputBus(78, "hatch.input_bus.tier.08", "Input Bus (UV)", 8).getStackForm(1L));
+ ItemList.Hatch_Input_Bus_MAX.set(new GT_MetaTileEntity_Hatch_InputBus(79, "hatch.input_bus.tier.09", "Input Bus (MAX)", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Input_Bus_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "C", "M", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('C'), OreDictNames.craftingChest });
+
+ ItemList.Hatch_Output_Bus_ULV.set(new GT_MetaTileEntity_Hatch_OutputBus(80, "hatch.output_bus.tier.00", "Output Bus (ULV)", 0).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_LV.set(new GT_MetaTileEntity_Hatch_OutputBus(81, "hatch.output_bus.tier.01", "Output Bus (LV)", 1).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_MV.set(new GT_MetaTileEntity_Hatch_OutputBus(82, "hatch.output_bus.tier.02", "Output Bus (MV)", 2).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_HV.set(new GT_MetaTileEntity_Hatch_OutputBus(83, "hatch.output_bus.tier.03", "Output Bus (HV)", 3).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_EV.set(new GT_MetaTileEntity_Hatch_OutputBus(84, "hatch.output_bus.tier.04", "Output Bus (EV)", 4).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_IV.set(new GT_MetaTileEntity_Hatch_OutputBus(85, "hatch.output_bus.tier.05", "Output Bus (IV)", 5).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_LuV.set(new GT_MetaTileEntity_Hatch_OutputBus(86, "hatch.output_bus.tier.06", "Output Bus (LuV)", 6).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_ZPM.set(new GT_MetaTileEntity_Hatch_OutputBus(87, "hatch.output_bus.tier.07", "Output Bus (ZPM)", 7).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_UV.set(new GT_MetaTileEntity_Hatch_OutputBus(88, "hatch.output_bus.tier.08", "Output Bus (UV)", 8).getStackForm(1L));
+ ItemList.Hatch_Output_Bus_MAX.set(new GT_MetaTileEntity_Hatch_OutputBus(89, "hatch.output_bus.tier.09", "Output Bus (MAX)", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('C'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Output_Bus_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "C", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('C'), OreDictNames.craftingChest });
+
+ ItemList.Hatch_Maintenance.set(new GT_MetaTileEntity_Hatch_Maintenance(90, "hatch.maintenance", "Maintenance Hatch", 1).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Maintenance.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "dwx", "hMc", "fsr", Character.valueOf('M'), ItemList.Hull_LV });
+
+ ItemList.Hatch_Muffler_LV.set(new GT_MetaTileEntity_Hatch_Muffler(91, "hatch.muffler.tier.01", "Muffler Hatch (LV)", 1).getStackForm(1L));
+ ItemList.Hatch_Muffler_MV.set(new GT_MetaTileEntity_Hatch_Muffler(92, "hatch.muffler.tier.02", "Muffler Hatch (MV)", 2).getStackForm(1L));
+ ItemList.Hatch_Muffler_HV.set(new GT_MetaTileEntity_Hatch_Muffler(93, "hatch.muffler.tier.03", "Muffler Hatch (HV)", 3).getStackForm(1L));
+ ItemList.Hatch_Muffler_EV.set(new GT_MetaTileEntity_Hatch_Muffler(94, "hatch.muffler.tier.04", "Muffler Hatch (EV)", 4).getStackForm(1L));
+ ItemList.Hatch_Muffler_IV.set(new GT_MetaTileEntity_Hatch_Muffler(95, "hatch.muffler.tier.05", "Muffler Hatch (IV)", 5).getStackForm(1L));
+ ItemList.Hatch_Muffler_LuV.set(new GT_MetaTileEntity_Hatch_Muffler(96, "hatch.muffler.tier.06", "Muffler Hatch (LuV)", 6).getStackForm(1L));
+ ItemList.Hatch_Muffler_ZPM.set(new GT_MetaTileEntity_Hatch_Muffler(97, "hatch.muffler.tier.07", "Muffler Hatch (ZPM)", 7).getStackForm(1L));
+ ItemList.Hatch_Muffler_UV.set(new GT_MetaTileEntity_Hatch_Muffler(98, "hatch.muffler.tier.08", "Muffler Hatch (UV)", 8).getStackForm(1L));
+ ItemList.Hatch_Muffler_MAX.set(new GT_MetaTileEntity_Hatch_Muffler(99, "hatch.muffler.tier.09", "Muffler Hatch (MAX)", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Hatch_Muffler_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+
+
+
+ ItemList.Machine_Bronze_Boiler.set(new GT_MetaTileEntity_Boiler_Bronze(100, "boiler.bronze", "Small Coal Boiler").getStackForm(1L));
+ ItemList.Machine_Steel_Boiler.set(new GT_MetaTileEntity_Boiler_Steel(101, "boiler.steel", "High Pressure Coal Boiler").getStackForm(1L));
+ ItemList.Machine_Steel_Boiler_Lava.set(new GT_MetaTileEntity_Boiler_Lava(102, "boiler.lava", "High Pressure Lava Boiler").getStackForm(1L));
+ ItemList.Machine_Bronze_Boiler_Solar.set(new GT_MetaTileEntity_Boiler_Solar(105, "boiler.solar", "Simple Solar Boiler").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Boiler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "P P", "BFB", Character.valueOf('F'), OreDictNames.craftingFurnace, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('B'), new ItemStack(Blocks.brick_block, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Boiler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "P P", "BFB", Character.valueOf('F'), OreDictNames.craftingFurnace, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('B'), new ItemStack(Blocks.brick_block, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Boiler_Lava.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "GGG", "PMP", Character.valueOf('M'), ItemList.Hull_Steel_Bricks, Character.valueOf('P'), OrePrefixes.plate.get(Materials.Steel), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Boiler_Solar.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GGG", "SSS", "PMP", Character.valueOf('M'), ItemList.Hull_Bronze_Bricks, Character.valueOf('P'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('S'), OrePrefixes.plate.get(Materials.Silver), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ ItemList.Machine_Bronze_BlastFurnace.set(new GT_MetaTileEntity_BronzeBlastFurnace(108, "bronzemachine.blastfurnace", "Bronze Plated Blast Furnace").getStackForm(1L));
+ if (!Loader.isModLoaded("terrafirmacraft")) {
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_BlastFurnace.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PFP", "FwF", "PFP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Bronze), Character.valueOf('F'), OreDictNames.craftingFurnace });
+ }
+ ItemList.Machine_Bronze_Furnace.set(new GT_MetaTileEntity_Furnace_Bronze(103, "bronzemachine.furnace", "Steam Furnace").getStackForm(1L));
+ ItemList.Machine_Steel_Furnace.set(new GT_MetaTileEntity_Furnace_Steel(104, "steelmachine.furnace", "High Pressure Furnace").getStackForm(1L));
+ ItemList.Machine_Bronze_Macerator.set(new GT_MetaTileEntity_Macerator_Bronze(106, "bronzemachine.macerator", "Steam Macerator").getStackForm(1L));
+ ItemList.Machine_Steel_Macerator.set(new GT_MetaTileEntity_Macerator_Steel(107, "steelmachine.macerator", "High Pressure Macerator").getStackForm(1L));
+ ItemList.Machine_Bronze_Extractor.set(new GT_MetaTileEntity_Extractor_Bronze(109, "bronzemachine.extractor", "Steam Extractor").getStackForm(1L));
+ ItemList.Machine_Steel_Extractor.set(new GT_MetaTileEntity_Extractor_Steel(110, "steelmachine.extractor", "High Pressure Extractor").getStackForm(1L));
+ ItemList.Machine_Bronze_Hammer.set(new GT_MetaTileEntity_ForgeHammer_Bronze(112, "bronzemachine.hammer", "Steam Forge Hammer").getStackForm(1L));
+ ItemList.Machine_Steel_Hammer.set(new GT_MetaTileEntity_ForgeHammer_Steel(113, "steelmachine.hammer", "High Pressure Forge Hammer").getStackForm(1L));
+ ItemList.Machine_Bronze_Compressor.set(new GT_MetaTileEntity_Compressor_Bronze(115, "bronzemachine.compressor", "Steam Compressor").getStackForm(1L));
+ ItemList.Machine_Steel_Compressor.set(new GT_MetaTileEntity_Compressor_Steel(116, "steelmachine.compressor", "High Pressure Compressor").getStackForm(1L));
+ ItemList.Machine_Bronze_AlloySmelter.set(new GT_MetaTileEntity_AlloySmelter_Bronze(118, "bronzemachine.alloysmelter", "Steam Alloy Smelter").getStackForm(1L));
+ ItemList.Machine_Steel_AlloySmelter.set(new GT_MetaTileEntity_AlloySmelter_Steel(119, "steelmachine.alloysmelter", "High Pressure Alloy Smelter").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Furnace.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "XMX", "XFX", Character.valueOf('M'), ItemList.Hull_Bronze_Bricks, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('F'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Furnace.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "XMX", "XFX", Character.valueOf('M'), ItemList.Hull_Steel_Bricks, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('F'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Macerator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DXD", "XMX", "PXP", Character.valueOf('M'), ItemList.Hull_Bronze, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('D'), OrePrefixes.gem.get(Materials.Diamond) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Macerator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DXD", "XMX", "PXP", Character.valueOf('M'), ItemList.Hull_Steel, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('D'), OrePrefixes.gem.get(Materials.Diamond) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Extractor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "PMG", "XXX", Character.valueOf('M'), ItemList.Hull_Bronze, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Extractor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "PMG", "XXX", Character.valueOf('M'), ItemList.Hull_Steel, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Hammer.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XPX", "XMX", "XAX", Character.valueOf('M'), ItemList.Hull_Bronze, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('A'), OreDictNames.craftingAnvil });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Hammer.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XPX", "XMX", "XAX", Character.valueOf('M'), ItemList.Hull_Steel, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('P'), OreDictNames.craftingPiston, Character.valueOf('A'), OreDictNames.craftingAnvil });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_Compressor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "PMP", "XXX", Character.valueOf('M'), ItemList.Hull_Bronze, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('P'), OreDictNames.craftingPiston });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_Compressor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "PMP", "XXX", Character.valueOf('M'), ItemList.Hull_Steel, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('P'), OreDictNames.craftingPiston });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Bronze_AlloySmelter.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "FMF", "XXX", Character.valueOf('M'), ItemList.Hull_Bronze_Bricks, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Bronze), Character.valueOf('F'), OreDictNames.craftingFurnace });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Steel_AlloySmelter.get(1L, new Object[0]), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XXX", "FMF", "XXX", Character.valueOf('M'), ItemList.Hull_Steel_Bricks, Character.valueOf('X'), OrePrefixes.pipeSmall.get(Materials.Steel), Character.valueOf('F'), OreDictNames.craftingFurnace });
+
+
+
+ ItemList.Locker_ULV.set(new GT_MetaTileEntity_Locker(150, "locker.tier.00", "Ultra Low Voltage Locker", 0).getStackForm(1L));
+ ItemList.Locker_LV.set(new GT_MetaTileEntity_Locker(151, "locker.tier.01", "Low Voltage Locker", 1).getStackForm(1L));
+ ItemList.Locker_MV.set(new GT_MetaTileEntity_Locker(152, "locker.tier.02", "Medium Voltage Locker", 2).getStackForm(1L));
+ ItemList.Locker_HV.set(new GT_MetaTileEntity_Locker(153, "locker.tier.03", "High Voltage Locker", 3).getStackForm(1L));
+ ItemList.Locker_EV.set(new GT_MetaTileEntity_Locker(154, "locker.tier.04", "Extreme Voltage Locker", 4).getStackForm(1L));
+ ItemList.Locker_IV.set(new GT_MetaTileEntity_Locker(155, "locker.tier.05", "Insane Voltage Locker", 5).getStackForm(1L));
+ ItemList.Locker_LuV.set(new GT_MetaTileEntity_Locker(156, "locker.tier.06", "Ludicrous Voltage Locker", 6).getStackForm(1L));
+ ItemList.Locker_ZPM.set(new GT_MetaTileEntity_Locker(157, "locker.tier.07", "ZPM Voltage Locker", 7).getStackForm(1L));
+ ItemList.Locker_UV.set(new GT_MetaTileEntity_Locker(158, "locker.tier.08", "Ultimate Voltage Locker", 8).getStackForm(1L));
+ ItemList.Locker_MAX.set(new GT_MetaTileEntity_Locker(159, "locker.tier.09", "MAX Voltage Locker", 9).getStackForm(1L));
+
+ ItemList.Battery_Buffer_1by1_ULV.set(new GT_MetaTileEntity_BasicBatteryBuffer(160, "batterybuffer.01.tier.00", "Ultra Low Voltage Battery Buffer", 0, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_LV.set(new GT_MetaTileEntity_BasicBatteryBuffer(161, "batterybuffer.01.tier.01", "Low Voltage Battery Buffer", 1, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_MV.set(new GT_MetaTileEntity_BasicBatteryBuffer(162, "batterybuffer.01.tier.02", "Medium Voltage Battery Buffer", 2, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_HV.set(new GT_MetaTileEntity_BasicBatteryBuffer(163, "batterybuffer.01.tier.03", "High Voltage Battery Buffer", 3, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_EV.set(new GT_MetaTileEntity_BasicBatteryBuffer(164, "batterybuffer.01.tier.04", "Extreme Voltage Battery Buffer", 4, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_IV.set(new GT_MetaTileEntity_BasicBatteryBuffer(165, "batterybuffer.01.tier.05", "Insane Voltage Battery Buffer", 5, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_LuV.set(new GT_MetaTileEntity_BasicBatteryBuffer(166, "batterybuffer.01.tier.06", "Ludicrous Voltage Battery Buffer", 6, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_ZPM.set(new GT_MetaTileEntity_BasicBatteryBuffer(167, "batterybuffer.01.tier.07", "ZPM Voltage Battery Buffer", 7, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_UV.set(new GT_MetaTileEntity_BasicBatteryBuffer(168, "batterybuffer.01.tier.08", "Ultimate Voltage Battery Buffer", 8, "", 1).getStackForm(1L));
+ ItemList.Battery_Buffer_1by1_MAX.set(new GT_MetaTileEntity_BasicBatteryBuffer(169, "batterybuffer.01.tier.09", "MAX Voltage Battery Buffer", 9, "", 1).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Lead), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Tin), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.AnyCopper), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Gold), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Aluminium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Tungsten), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_1by1_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('W'), OrePrefixes.wireGt01.get(Materials.Superconductor), Character.valueOf('T'), OreDictNames.craftingChest });
+
+ ItemList.Battery_Buffer_2by2_ULV.set(new GT_MetaTileEntity_BasicBatteryBuffer(170, "batterybuffer.04.tier.00", "Ultra Low Voltage Battery Buffer", 0, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_LV.set(new GT_MetaTileEntity_BasicBatteryBuffer(171, "batterybuffer.04.tier.01", "Low Voltage Battery Buffer", 1, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_MV.set(new GT_MetaTileEntity_BasicBatteryBuffer(172, "batterybuffer.04.tier.02", "Medium Voltage Battery Buffer", 2, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_HV.set(new GT_MetaTileEntity_BasicBatteryBuffer(173, "batterybuffer.04.tier.03", "High Voltage Battery Buffer", 3, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_EV.set(new GT_MetaTileEntity_BasicBatteryBuffer(174, "batterybuffer.04.tier.04", "Extreme Voltage Battery Buffer", 4, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_IV.set(new GT_MetaTileEntity_BasicBatteryBuffer(175, "batterybuffer.04.tier.05", "Insane Voltage Battery Buffer", 5, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_LuV.set(new GT_MetaTileEntity_BasicBatteryBuffer(176, "batterybuffer.04.tier.06", "Ludicrous Voltage Battery Buffer", 6, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_ZPM.set(new GT_MetaTileEntity_BasicBatteryBuffer(177, "batterybuffer.04.tier.07", "ZPM Voltage Battery Buffer", 7, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_UV.set(new GT_MetaTileEntity_BasicBatteryBuffer(178, "batterybuffer.04.tier.08", "Ultimate Voltage Battery Buffer", 8, "", 4).getStackForm(1L));
+ ItemList.Battery_Buffer_2by2_MAX.set(new GT_MetaTileEntity_BasicBatteryBuffer(179, "batterybuffer.04.tier.09", "MAX Voltage Battery Buffer", 9, "", 4).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Lead), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Tin), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.AnyCopper), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Gold), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Aluminium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Tungsten), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_2by2_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Superconductor), Character.valueOf('T'), OreDictNames.craftingChest });
+
+ ItemList.Battery_Buffer_3by3_ULV.set(new GT_MetaTileEntity_BasicBatteryBuffer(180, "batterybuffer.09.tier.00", "Ultra Low Voltage Battery Buffer", 0, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_LV.set(new GT_MetaTileEntity_BasicBatteryBuffer(181, "batterybuffer.09.tier.01", "Low Voltage Battery Buffer", 1, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_MV.set(new GT_MetaTileEntity_BasicBatteryBuffer(182, "batterybuffer.09.tier.02", "Medium Voltage Battery Buffer", 2, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_HV.set(new GT_MetaTileEntity_BasicBatteryBuffer(183, "batterybuffer.09.tier.03", "High Voltage Battery Buffer", 3, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_EV.set(new GT_MetaTileEntity_BasicBatteryBuffer(184, "batterybuffer.09.tier.04", "Extreme Voltage Battery Buffer", 4, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_IV.set(new GT_MetaTileEntity_BasicBatteryBuffer(185, "batterybuffer.09.tier.05", "Insane Voltage Battery Buffer", 5, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_LuV.set(new GT_MetaTileEntity_BasicBatteryBuffer(186, "batterybuffer.09.tier.06", "Ludicrous Voltage Battery Buffer", 6, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_ZPM.set(new GT_MetaTileEntity_BasicBatteryBuffer(187, "batterybuffer.09.tier.07", "ZPM Voltage Battery Buffer", 7, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_UV.set(new GT_MetaTileEntity_BasicBatteryBuffer(188, "batterybuffer.09.tier.08", "Ultimate Voltage Battery Buffer", 8, "", 9).getStackForm(1L));
+ ItemList.Battery_Buffer_3by3_MAX.set(new GT_MetaTileEntity_BasicBatteryBuffer(189, "batterybuffer.09.tier.09", "MAX Voltage Battery Buffer", 9, "", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Lead), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Tin), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.AnyCopper), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Gold), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Aluminium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Tungsten), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_3by3_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('W'), OrePrefixes.wireGt08.get(Materials.Superconductor), Character.valueOf('T'), OreDictNames.craftingChest });
+
+ ItemList.Battery_Buffer_4by4_ULV.set(new GT_MetaTileEntity_BasicBatteryBuffer(190, "batterybuffer.16.tier.00", "Ultra Low Voltage Battery Buffer", 0, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_LV.set(new GT_MetaTileEntity_BasicBatteryBuffer(191, "batterybuffer.16.tier.01", "Low Voltage Battery Buffer", 1, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_MV.set(new GT_MetaTileEntity_BasicBatteryBuffer(192, "batterybuffer.16.tier.02", "Medium Voltage Battery Buffer", 2, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_HV.set(new GT_MetaTileEntity_BasicBatteryBuffer(193, "batterybuffer.16.tier.03", "High Voltage Battery Buffer", 3, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_EV.set(new GT_MetaTileEntity_BasicBatteryBuffer(194, "batterybuffer.16.tier.04", "Extreme Voltage Battery Buffer", 4, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_IV.set(new GT_MetaTileEntity_BasicBatteryBuffer(195, "batterybuffer.16.tier.05", "Insane Voltage Battery Buffer", 5, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_LuV.set(new GT_MetaTileEntity_BasicBatteryBuffer(196, "batterybuffer.16.tier.06", "Ludicrous Voltage Battery Buffer", 6, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_ZPM.set(new GT_MetaTileEntity_BasicBatteryBuffer(197, "batterybuffer.16.tier.07", "ZPM Voltage Battery Buffer", 7, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_UV.set(new GT_MetaTileEntity_BasicBatteryBuffer(198, "batterybuffer.16.tier.08", "Ultimate Voltage Battery Buffer", 8, "", 16).getStackForm(1L));
+ ItemList.Battery_Buffer_4by4_MAX.set(new GT_MetaTileEntity_BasicBatteryBuffer(199, "batterybuffer.16.tier.09", "MAX Voltage Battery Buffer", 9, "", 16).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Lead), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Tin), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.AnyCopper), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Gold), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Aluminium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Tungsten), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Osmium), Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Battery_Buffer_4by4_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('W'), OrePrefixes.wireGt16.get(Materials.Superconductor), Character.valueOf('T'), OreDictNames.craftingChest });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_ULV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_LV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_MV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_HV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_EV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_IV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_LuV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_ZPM, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_UV, Character.valueOf('T'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Locker_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "T", "M", Character.valueOf('M'), ItemList.Battery_Buffer_2by2_MAX, Character.valueOf('T'), OreDictNames.craftingChest });
+ }
+
+ private static void run2()
+ {
+ ItemList.Machine_LV_AlloySmelter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(201, "basicmachine.alloysmelter.tier.01", "Basic Alloy Smelter", 1, "HighTech combination Smelter", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes, 2, 1, 0, 0, 1, "AlloySmelter.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "ALLOY_SMELTER", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_MV_AlloySmelter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(202, "basicmachine.alloysmelter.tier.02", "Advanced Alloy Smelter", 2, "HighTech combination Smelter", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes, 2, 1, 0, 0, 1, "AlloySmelter.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "ALLOY_SMELTER", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_HV_AlloySmelter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(203, "basicmachine.alloysmelter.tier.03", "Advanced Alloy Smelter II", 3, "HighTech combination Smelter", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes, 2, 1, 0, 0, 1, "AlloySmelter.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "ALLOY_SMELTER", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_EV_AlloySmelter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(204, "basicmachine.alloysmelter.tier.04", "Advanced Alloy Smelter III", 4, "HighTech combination Smelter", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes, 2, 1, 0, 0, 1, "AlloySmelter.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "ALLOY_SMELTER", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_IV_AlloySmelter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(205, "basicmachine.alloysmelter.tier.05", "Advanced Alloy Smelter IV", 5, "HighTech combination Smelter", GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes, 2, 1, 0, 0, 1, "AlloySmelter.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "ALLOY_SMELTER", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Assembler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(211, "basicmachine.assembler.tier.01", "Basic Assembling Machine", 1, "Avengers, Assemble!", GT_Recipe.GT_Recipe_Map.sAssemblerRecipes, 2, 1, 16000, 0, 1, "Assembler.png", "", false, false, 0, "ASSEMBLER", new Object[] { "ACA", "VMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('A'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Assembler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(212, "basicmachine.assembler.tier.02", "Advanced Assembling Machine", 2, "Avengers, Assemble!", GT_Recipe.GT_Recipe_Map.sAssemblerRecipes, 2, 1, 16000, 0, 1, "Assembler.png", "", false, false, 0, "ASSEMBLER", new Object[] { "ACA", "VMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('A'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Assembler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(213, "basicmachine.assembler.tier.03", "Advanced Assembling Machine II", 3, "Avengers, Assemble!", GT_Recipe.GT_Recipe_Map.sAssemblerRecipes, 2, 1, 16000, 0, 1, "Assembler.png", "", false, false, 0, "ASSEMBLER", new Object[] { "ACA", "VMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('A'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Assembler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(214, "basicmachine.assembler.tier.04", "Advanced Assembling Machine III", 4, "Avengers, Assemble!", GT_Recipe.GT_Recipe_Map.sAssemblerRecipes, 2, 1, 16000, 0, 1, "Assembler.png", "", false, false, 0, "ASSEMBLER", new Object[] { "ACA", "VMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('A'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Assembler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(215, "basicmachine.assembler.tier.05", "Advanced Assembling Machine IV", 5, "Avengers, Assemble!", GT_Recipe.GT_Recipe_Map.sAssemblerRecipes, 2, 1, 16000, 0, 1, "Assembler.png", "", false, false, 0, "ASSEMBLER", new Object[] { "ACA", "VMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('A'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Bender.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(221, "basicmachine.bender.tier.01", "Basic Bending Machine", 1, "Boo, he's bad! We want BENDER!!!", GT_Recipe.GT_Recipe_Map.sBenderRecipes, 2, 1, 0, 0, 1, "Bender.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "BENDER", new Object[] { "PWP", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Bender.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(222, "basicmachine.bender.tier.02", "Advanced Bending Machine", 2, "Boo, he's bad! We want BENDER!!!", GT_Recipe.GT_Recipe_Map.sBenderRecipes, 2, 1, 0, 0, 1, "Bender.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "BENDER", new Object[] { "PWP", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Bender.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(223, "basicmachine.bender.tier.03", "Advanced Bending Machine II", 3, "Boo, he's bad! We want BENDER!!!", GT_Recipe.GT_Recipe_Map.sBenderRecipes, 2, 1, 0, 0, 1, "Bender.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "BENDER", new Object[] { "PWP", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Bender.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(224, "basicmachine.bender.tier.04", "Advanced Bending Machine III", 4, "Boo, he's bad! We want BENDER!!!", GT_Recipe.GT_Recipe_Map.sBenderRecipes, 2, 1, 0, 0, 1, "Bender.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "BENDER", new Object[] { "PWP", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Bender.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(225, "basicmachine.bender.tier.05", "Advanced Bending Machine IV", 5, "Boo, he's bad! We want BENDER!!!", GT_Recipe.GT_Recipe_Map.sBenderRecipes, 2, 1, 0, 0, 1, "Bender.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "BENDER", new Object[] { "PWP", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Canner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(231, "basicmachine.canner.tier.01", "Basic Canning Machine", 1, "Unmobile Food Canning Machine GTA4", GT_Recipe.GT_Recipe_Map.sCannerRecipes, 2, 2, 0, 0, 1, "Canner.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CANNER", new Object[] { "WPW", "CMC", "GGG", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Canner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(232, "basicmachine.canner.tier.02", "Advanced Canning Machine", 2, "Unmobile Food Canning Machine GTA4", GT_Recipe.GT_Recipe_Map.sCannerRecipes, 2, 2, 0, 0, 1, "Canner.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CANNER", new Object[] { "WPW", "CMC", "GGG", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Canner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(233, "basicmachine.canner.tier.03", "Advanced Canning Machine II", 3, "Unmobile Food Canning Machine GTA4", GT_Recipe.GT_Recipe_Map.sCannerRecipes, 2, 2, 0, 0, 1, "Canner.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CANNER", new Object[] { "WPW", "CMC", "GGG", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Canner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(234, "basicmachine.canner.tier.04", "Advanced Canning Machine III", 4, "Unmobile Food Canning Machine GTA4", GT_Recipe.GT_Recipe_Map.sCannerRecipes, 2, 2, 0, 0, 1, "Canner.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CANNER", new Object[] { "WPW", "CMC", "GGG", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Canner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(235, "basicmachine.canner.tier.05", "Advanced Canning Machine IV", 5, "Unmobile Food Canning Machine GTA4", GT_Recipe.GT_Recipe_Map.sCannerRecipes, 2, 2, 0, 0, 1, "Canner.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CANNER", new Object[] { "WPW", "CMC", "GGG", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Compressor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(241, "basicmachine.compressor.tier.01", "Basic Compressor", 1, "Compress-O-Matic C77", GT_Recipe.GT_Recipe_Map.sCompressorRecipes, 1, 1, 0, 0, 1, "Compressor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "COMPRESSOR", new Object[] { " C ", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Compressor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(242, "basicmachine.compressor.tier.02", "Advanced Compressor", 2, "Compress-O-Matic C77", GT_Recipe.GT_Recipe_Map.sCompressorRecipes, 1, 1, 0, 0, 1, "Compressor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "COMPRESSOR", new Object[] { " C ", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Compressor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(243, "basicmachine.compressor.tier.03", "Advanced Compressor II", 3, "Compress-O-Matic C77", GT_Recipe.GT_Recipe_Map.sCompressorRecipes, 1, 1, 0, 0, 1, "Compressor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "COMPRESSOR", new Object[] { " C ", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Compressor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(244, "basicmachine.compressor.tier.04", "Advanced Compressor III", 4, "Compress-O-Matic C77", GT_Recipe.GT_Recipe_Map.sCompressorRecipes, 1, 1, 0, 0, 1, "Compressor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "COMPRESSOR", new Object[] { " C ", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Compressor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(245, "basicmachine.compressor.tier.05", "Singularity Compressor", 5, "Compress-O-Matic C77", GT_Recipe.GT_Recipe_Map.sCompressorRecipes, 1, 1, 0, 0, 1, "Compressor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "COMPRESSOR", new Object[] { " C ", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Cutter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(251, "basicmachine.cutter.tier.01", "Basic Cutting Machine", 1, "Slice'N Dice", GT_Recipe.GT_Recipe_Map.sCutterRecipes, 1, 2, 1000, 0, 1, "Cutter.png", "", false, false, 0, "CUTTER", new Object[] { "WCG", "VMB", "CWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingDiamondBlade }).getStackForm(1L));
+ ItemList.Machine_MV_Cutter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(252, "basicmachine.cutter.tier.02", "Advanced Cutting Machine", 2, "Slice'N Dice", GT_Recipe.GT_Recipe_Map.sCutterRecipes, 1, 2, 1000, 0, 1, "Cutter.png", "", false, false, 0, "CUTTER", new Object[] { "WCG", "VMB", "CWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingDiamondBlade }).getStackForm(1L));
+ ItemList.Machine_HV_Cutter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(253, "basicmachine.cutter.tier.03", "Advanced Cutting Machine II", 3, "Slice'N Dice", GT_Recipe.GT_Recipe_Map.sCutterRecipes, 1, 2, 1000, 0, 1, "Cutter.png", "", false, false, 0, "CUTTER", new Object[] { "WCG", "VMB", "CWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingDiamondBlade }).getStackForm(1L));
+ ItemList.Machine_EV_Cutter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(254, "basicmachine.cutter.tier.04", "Advanced Cutting Machine III", 4, "Slice'N Dice", GT_Recipe.GT_Recipe_Map.sCutterRecipes, 1, 2, 1000, 0, 1, "Cutter.png", "", false, false, 0, "CUTTER", new Object[] { "WCG", "VMB", "CWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingDiamondBlade }).getStackForm(1L));
+ ItemList.Machine_IV_Cutter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(255, "basicmachine.cutter.tier.05", "Advanced Cutting Machine IV", 5, "Slice'N Dice", GT_Recipe.GT_Recipe_Map.sCutterRecipes, 1, 2, 1000, 0, 1, "Cutter.png", "", false, false, 0, "CUTTER", new Object[] { "WCG", "VMB", "CWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingDiamondBlade }).getStackForm(1L));
+
+ ItemList.Machine_LV_E_Furnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(261, "basicmachine.e_furnace.tier.01", "Basic Electric Furnace", 1, "Not like using a Commodore 64", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_FURNACE", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_MV_E_Furnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(262, "basicmachine.e_furnace.tier.02", "Advanced Electric Furnace", 2, "Not like using a Commodore 64", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_FURNACE", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_HV_E_Furnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(263, "basicmachine.e_furnace.tier.03", "Advanced Electric Furnace II", 3, "Not like using a Commodore 64", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_FURNACE", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_EV_E_Furnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(264, "basicmachine.e_furnace.tier.04", "Advanced Electric Furnace III", 4, "Not like using a Commodore 64", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_FURNACE", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_IV_E_Furnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(265, "basicmachine.e_furnace.tier.05", "Electron Exitement Processor", 5, "Not like using a Commodore 64", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_FURNACE", new Object[] { "ECE", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+
+ ItemList.Machine_LV_Extractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(271, "basicmachine.extractor.tier.01", "Basic Extractor", 1, "Dejuicer-Device of Doom - D123", GT_Recipe.GT_Recipe_Map.sExtractorRecipes, 1, 1, 0, 0, 1, "Extractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "EXTRACTOR", new Object[] { "GCG", "EMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Extractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(272, "basicmachine.extractor.tier.02", "Advanced Extractor", 2, "Dejuicer-Device of Doom - D123", GT_Recipe.GT_Recipe_Map.sExtractorRecipes, 1, 1, 0, 0, 1, "Extractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "EXTRACTOR", new Object[] { "GCG", "EMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Extractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(273, "basicmachine.extractor.tier.03", "Advanced Extractor II", 3, "Dejuicer-Device of Doom - D123", GT_Recipe.GT_Recipe_Map.sExtractorRecipes, 1, 1, 0, 0, 1, "Extractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "EXTRACTOR", new Object[] { "GCG", "EMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Extractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(274, "basicmachine.extractor.tier.04", "Advanced Extractor III", 4, "Dejuicer-Device of Doom - D123", GT_Recipe.GT_Recipe_Map.sExtractorRecipes, 1, 1, 0, 0, 1, "Extractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "EXTRACTOR", new Object[] { "GCG", "EMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Extractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(275, "basicmachine.extractor.tier.05", "Vacuum Extractor", 5, "Dejuicer-Device of Doom - D123", GT_Recipe.GT_Recipe_Map.sExtractorRecipes, 1, 1, 0, 0, 1, "Extractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "EXTRACTOR", new Object[] { "GCG", "EMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Extruder.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(281, "basicmachine.extruder.tier.01", "Basic Extruder", 1, "Universal Machine for Metal Working", GT_Recipe.GT_Recipe_Map.sExtruderRecipes, 2, 1, 0, 0, 1, "Extruder.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[] { "CCE", "XMP", "CCE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('X'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_MV_Extruder.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(282, "basicmachine.extruder.tier.02", "Advanced Extruder", 2, "Universal Machine for Metal Working", GT_Recipe.GT_Recipe_Map.sExtruderRecipes, 2, 1, 0, 0, 1, "Extruder.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[] { "CCE", "XMP", "CCE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('X'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_HV_Extruder.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(283, "basicmachine.extruder.tier.03", "Advanced Extruder II", 3, "Universal Machine for Metal Working", GT_Recipe.GT_Recipe_Map.sExtruderRecipes, 2, 1, 0, 0, 1, "Extruder.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[] { "CCE", "XMP", "CCE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('X'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_EV_Extruder.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(284, "basicmachine.extruder.tier.04", "Advanced Extruder III", 4, "Universal Machine for Metal Working", GT_Recipe.GT_Recipe_Map.sExtruderRecipes, 2, 1, 0, 0, 1, "Extruder.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[] { "CCE", "XMP", "CCE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('X'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_IV_Extruder.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(285, "basicmachine.extruder.tier.05", "Advanced Extruder IV", 5, "Universal Machine for Metal Working", GT_Recipe.GT_Recipe_Map.sExtruderRecipes, 2, 1, 0, 0, 1, "Extruder.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[] { "CCE", "XMP", "CCE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('X'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Lathe.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(291, "basicmachine.lathe.tier.01", "Basic Lathe", 1, "Produces Rods more efficiently", GT_Recipe.GT_Recipe_Map.sLatheRecipes, 1, 2, 0, 0, 1, "Lathe.png", "", false, false, 0, "LATHE", new Object[] { "WCW", "EMD", "CWP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('D'), OrePrefixes.gem.get(Materials.Diamond) }).getStackForm(1L));
+ ItemList.Machine_MV_Lathe.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(292, "basicmachine.lathe.tier.02", "Advanced Lathe", 2, "Produces Rods more efficiently", GT_Recipe.GT_Recipe_Map.sLatheRecipes, 1, 2, 0, 0, 1, "Lathe.png", "", false, false, 0, "LATHE", new Object[] { "WCW", "EMD", "CWP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('D'), OreDictNames.craftingIndustrialDiamond }).getStackForm(1L));
+ ItemList.Machine_HV_Lathe.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(293, "basicmachine.lathe.tier.03", "Advanced Lathe II", 3, "Produces Rods more efficiently", GT_Recipe.GT_Recipe_Map.sLatheRecipes, 1, 2, 0, 0, 1, "Lathe.png", "", false, false, 0, "LATHE", new Object[] { "WCW", "EMD", "CWP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('D'), OreDictNames.craftingIndustrialDiamond }).getStackForm(1L));
+ ItemList.Machine_EV_Lathe.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(294, "basicmachine.lathe.tier.04", "Advanced Lathe III", 4, "Produces Rods more efficiently", GT_Recipe.GT_Recipe_Map.sLatheRecipes, 1, 2, 0, 0, 1, "Lathe.png", "", false, false, 0, "LATHE", new Object[] { "WCW", "EMD", "CWP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('D'), OreDictNames.craftingIndustrialDiamond }).getStackForm(1L));
+ ItemList.Machine_IV_Lathe.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(295, "basicmachine.lathe.tier.05", "Advanced Lathe IV", 5, "Produces Rods more efficiently", GT_Recipe.GT_Recipe_Map.sLatheRecipes, 1, 2, 0, 0, 1, "Lathe.png", "", false, false, 0, "LATHE", new Object[] { "WCW", "EMD", "CWP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('D'), OreDictNames.craftingIndustrialDiamond }).getStackForm(1L));
+
+ ItemList.Machine_LV_Macerator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(301, "basicmachine.macerator.tier.01", "Basic Macerator", 1, "Schreddering your Ores", GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, 1, 1, 0, 0, 1, "Macerator1.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(201)), false, false, 1, "MACERATOR", new Object[] { "PEG", "WWM", "CCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.gem.get(Materials.Diamond) }).getStackForm(1L));
+ ItemList.Machine_MV_Macerator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(302, "basicmachine.macerator.tier.02", "Advanced Macerator", 2, "Schreddering your Ores", GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, 1, 1, 0, 0, 1, "Macerator1.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(201)), false, false, 1, "MACERATOR", new Object[] { "PEG", "WWM", "CCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OreDictNames.craftingIndustrialDiamond }).getStackForm(1L));
+ ItemList.Machine_HV_Macerator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(303, "basicmachine.macerator.tier.03", "Universal Macerator", 3, "Schreddering your Ores with Byproducts", GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, 1, 2, 0, 0, 1, "Macerator2.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(201)), false, false, 1, "PULVERIZER", new Object[] { "PEG", "WWM", "CCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OreDictNames.craftingGrinder }).getStackForm(1L));
+ ItemList.Machine_EV_Macerator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(304, "basicmachine.macerator.tier.04", "Universal Pulverizer", 4, "Schreddering your Ores with Byproducts", GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, 1, 3, 0, 0, 1, "Macerator3.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(201)), false, false, 1, "PULVERIZER", new Object[] { "PEG", "WWM", "CCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OreDictNames.craftingGrinder }).getStackForm(1L));
+ ItemList.Machine_IV_Macerator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(305, "basicmachine.macerator.tier.05", "Blend-O-Matic 9001", 5, "Schreddering your Ores with Byproducts", GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, 1, 4, 0, 0, 1, "Macerator4.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(201)), false, false, 1, "PULVERIZER", new Object[] { "PEG", "WWM", "CCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OreDictNames.craftingGrinder }).getStackForm(1L));
+
+ ItemList.Machine_LV_Microwave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(311, "basicmachine.microwave.tier.01", "Basic Microwave", 1, "Did you really read the instruction Manual?", GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "MICROWAVE", new Object[] { "LWC", "LMR", "LEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('L'), OrePrefixes.plate.get(Materials.Lead) }).getStackForm(1L));
+ ItemList.Machine_MV_Microwave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(312, "basicmachine.microwave.tier.02", "Advanced Microwave", 2, "Did you really read the instruction Manual?", GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "MICROWAVE", new Object[] { "LWC", "LMR", "LEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('L'), OrePrefixes.plate.get(Materials.Lead) }).getStackForm(1L));
+ ItemList.Machine_HV_Microwave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(313, "basicmachine.microwave.tier.03", "Advanced Microwave II", 3, "Did you really read the instruction Manual?", GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "MICROWAVE", new Object[] { "LWC", "LMR", "LEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('L'), OrePrefixes.plate.get(Materials.Lead) }).getStackForm(1L));
+ ItemList.Machine_EV_Microwave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(314, "basicmachine.microwave.tier.04", "Advanced Microwave III", 4, "Did you really read the instruction Manual?", GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "MICROWAVE", new Object[] { "LWC", "LMR", "LEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('L'), OrePrefixes.plate.get(Materials.Lead) }).getStackForm(1L));
+ ItemList.Machine_IV_Microwave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(315, "basicmachine.microwave.tier.05", "Advanced Microwave IV", 5, "Did you really read the instruction Manual?", GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes, 1, 1, 0, 0, 1, "E_Furnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "MICROWAVE", new Object[] { "LWC", "LMR", "LEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('L'), OrePrefixes.plate.get(Materials.Lead) }).getStackForm(1L));
+
+ ItemList.Machine_LV_Printer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(321, "basicmachine.printer.tier.01", "Basic Printer", 1, "It can copy Books and paint Stuff", GT_Recipe.GT_Recipe_Map.sPrinterRecipes, 1, 1, 16000, 0, 1, "Printer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 1, "PRINTER", new Object[] { "EWE", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Printer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(322, "basicmachine.printer.tier.02", "Advanced Printer", 2, "It can copy Books and paint Stuff", GT_Recipe.GT_Recipe_Map.sPrinterRecipes, 1, 1, 16000, 0, 1, "Printer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 1, "PRINTER", new Object[] { "EWE", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Printer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(323, "basicmachine.printer.tier.03", "Advanced Printer II", 3, "It can copy Books and paint Stuff", GT_Recipe.GT_Recipe_Map.sPrinterRecipes, 1, 1, 16000, 0, 1, "Printer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 1, "PRINTER", new Object[] { "EWE", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Printer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(324, "basicmachine.printer.tier.04", "Advanced Printer III", 4, "It can copy Books and paint Stuff", GT_Recipe.GT_Recipe_Map.sPrinterRecipes, 1, 1, 16000, 0, 1, "Printer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 1, "PRINTER", new Object[] { "EWE", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Printer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(325, "basicmachine.printer.tier.05", "Advanced Printer IV", 5, "It can copy Books and paint Stuff", GT_Recipe.GT_Recipe_Map.sPrinterRecipes, 1, 1, 16000, 0, 1, "Printer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 1, "PRINTER", new Object[] { "EWE", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Recycler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(331, "basicmachine.recycler.tier.01", "Basic Recycler", 1, "Compress, burn, obliterate and filter EVERYTHING", GT_Recipe.GT_Recipe_Map.sRecyclerRecipes, 1, 1, 0, 0, 1, "Recycler.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "RECYCLER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.dust.get(Materials.Glowstone) }).getStackForm(1L));
+ ItemList.Machine_MV_Recycler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(332, "basicmachine.recycler.tier.02", "Advanced Recycler", 2, "Compress, burn, obliterate and filter EVERYTHING", GT_Recipe.GT_Recipe_Map.sRecyclerRecipes, 1, 1, 0, 0, 1, "Recycler.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "RECYCLER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.dust.get(Materials.Glowstone) }).getStackForm(1L));
+ ItemList.Machine_HV_Recycler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(333, "basicmachine.recycler.tier.03", "Advanced Recycler II", 3, "Compress, burn, obliterate and filter EVERYTHING", GT_Recipe.GT_Recipe_Map.sRecyclerRecipes, 1, 1, 0, 0, 1, "Recycler.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "RECYCLER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.dust.get(Materials.Glowstone) }).getStackForm(1L));
+ ItemList.Machine_EV_Recycler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(334, "basicmachine.recycler.tier.04", "Advanced Recycler III", 4, "Compress, burn, obliterate and filter EVERYTHING", GT_Recipe.GT_Recipe_Map.sRecyclerRecipes, 1, 1, 0, 0, 1, "Recycler.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "RECYCLER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.dust.get(Materials.Glowstone) }).getStackForm(1L));
+ ItemList.Machine_IV_Recycler.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(335, "basicmachine.recycler.tier.05", "The Oblitterator", 5, "Compress, burn, obliterate and filter EVERYTHING", GT_Recipe.GT_Recipe_Map.sRecyclerRecipes, 1, 1, 0, 0, 1, "Recycler.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "RECYCLER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), OrePrefixes.dust.get(Materials.Glowstone) }).getStackForm(1L));
+
+ ItemList.Machine_LV_Scanner.set(new GT_MetaTileEntity_Scanner(341, "basicmachine.scanner.tier.01", "Basic Scanner", 1).getStackForm(1L));
+ ItemList.Machine_MV_Scanner.set(new GT_MetaTileEntity_Scanner(342, "basicmachine.scanner.tier.02", "Advanced Scanner", 2).getStackForm(1L));
+ ItemList.Machine_HV_Scanner.set(new GT_MetaTileEntity_Scanner(343, "basicmachine.scanner.tier.03", "Advanced Scanner II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Scanner.set(new GT_MetaTileEntity_Scanner(344, "basicmachine.scanner.tier.04", "Advanced Scanner III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Scanner.set(new GT_MetaTileEntity_Scanner(345, "basicmachine.scanner.tier.05", "Advanced Scanner IV", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "WMW", "CRC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('T'), ItemList.Emitter_LV, Character.valueOf('R'), ItemList.Sensor_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "WMW", "CRC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('T'), ItemList.Emitter_MV, Character.valueOf('R'), ItemList.Sensor_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "WMW", "CRC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('T'), ItemList.Emitter_HV, Character.valueOf('R'), ItemList.Sensor_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Data), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "WMW", "CRC", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('T'), ItemList.Emitter_EV, Character.valueOf('R'), ItemList.Sensor_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Scanner.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "WMW", "CRC", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('T'), ItemList.Emitter_IV, Character.valueOf('R'), ItemList.Sensor_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Ultimate), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ ItemList.Machine_LV_Wiremill.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(351, "basicmachine.wiremill.tier.01", "Basic Wiremill", 1, "Produces Wires more efficiently", GT_Recipe.GT_Recipe_Map.sWiremillRecipes, 1, 1, 0, 0, 1, "Wiremill.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "WIREMILL", new Object[] { "EWE", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Wiremill.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(352, "basicmachine.wiremill.tier.02", "Advanced Wiremill", 2, "Produces Wires more efficiently", GT_Recipe.GT_Recipe_Map.sWiremillRecipes, 1, 1, 0, 0, 1, "Wiremill.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "WIREMILL", new Object[] { "EWE", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Wiremill.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(353, "basicmachine.wiremill.tier.03", "Advanced Wiremill II", 3, "Produces Wires more efficiently", GT_Recipe.GT_Recipe_Map.sWiremillRecipes, 1, 1, 0, 0, 1, "Wiremill.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "WIREMILL", new Object[] { "EWE", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Wiremill.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(354, "basicmachine.wiremill.tier.04", "Advanced Wiremill III", 4, "Produces Wires more efficiently", GT_Recipe.GT_Recipe_Map.sWiremillRecipes, 1, 1, 0, 0, 1, "Wiremill.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "WIREMILL", new Object[] { "EWE", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Wiremill.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(355, "basicmachine.wiremill.tier.05", "Advanced Wiremill IV", 5, "Produces Wires more efficiently", GT_Recipe.GT_Recipe_Map.sWiremillRecipes, 1, 1, 0, 0, 1, "Wiremill.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(204)), false, false, 0, "WIREMILL", new Object[] { "EWE", "CMC", "EWE", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Centrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(361, "basicmachine.centrifuge.tier.01", "Basic Centrifuge", 1, "Separating Molecules", GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, 2, 6, 64000, 0, 1, "Centrifuge.png", "", false, false, 0, "CENTRIFUGE", new Object[] { "CEC", "WMW", "CEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Centrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(362, "basicmachine.centrifuge.tier.02", "Advanced Centrifuge", 2, "Separating Molecules", GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, 2, 6, 64000, 0, 1, "Centrifuge.png", "", false, false, 0, "CENTRIFUGE", new Object[] { "CEC", "WMW", "CEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Centrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(363, "basicmachine.centrifuge.tier.03", "Turbo Centrifuge", 3, "Separating Molecules", GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, 2, 6, 64000, 0, 1, "Centrifuge.png", "", false, false, 0, "CENTRIFUGE", new Object[] { "CEC", "WMW", "CEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Centrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(364, "basicmachine.centrifuge.tier.04", "Molecular Separator", 4, "Separating Molecules", GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, 2, 6, 64000, 0, 1, "Centrifuge.png", "", false, false, 0, "CENTRIFUGE", new Object[] { "CEC", "WMW", "CEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Centrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(365, "basicmachine.centrifuge.tier.05", "Molecular Cyclone", 5, "Separating Molecules", GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, 2, 6, 64000, 0, 1, "Centrifuge.png", "", false, false, 0, "CENTRIFUGE", new Object[] { "CEC", "WMW", "CEC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Electrolyzer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(371, "basicmachine.electrolyzer.tier.01", "Basic Electrolyzer", 1, "Electrolyzing Molecules", GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, 2, 6, 64000, 0, 1, "Electrolyzer.png", "", false, false, 0, "ELECTROLYZER", new Object[] { "IGI", "IMI", "CWC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), OrePrefixes.wireGt01.get(Materials.Gold), Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Electrolyzer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(372, "basicmachine.electrolyzer.tier.02", "Advanced Electrolyzer", 2, "Electrolyzing Molecules", GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, 2, 6, 64000, 0, 1, "Electrolyzer.png", "", false, false, 0, "ELECTROLYZER", new Object[] { "IGI", "IMI", "CWC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), OrePrefixes.wireGt01.get(Materials.Silver), Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Electrolyzer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(373, "basicmachine.electrolyzer.tier.03", "Advanced Electrolyzer II", 3, "Electrolyzing Molecules", GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, 2, 6, 64000, 0, 1, "Electrolyzer.png", "", false, false, 0, "ELECTROLYZER", new Object[] { "IGI", "IMI", "CWC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), OrePrefixes.wireGt01.get(Materials.Electrum), Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Electrolyzer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(374, "basicmachine.electrolyzer.tier.04", "Advanced Electrolyzer III", 4, "Electrolyzing Molecules", GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, 2, 6, 64000, 0, 1, "Electrolyzer.png", "", false, false, 0, "ELECTROLYZER", new Object[] { "IGI", "IMI", "CWC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), OrePrefixes.wireGt01.get(Materials.Platinum), Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Electrolyzer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(375, "basicmachine.electrolyzer.tier.05", "Molecular Disintegrator E-4908", 5, "Electrolyzing Molecules", GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, 2, 6, 64000, 0, 1, "Electrolyzer.png", "", false, false, 0, "ELECTROLYZER", new Object[] { "IGI", "IMI", "CWC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), OrePrefixes.wireGt01.get(Materials.Osmium), Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_ThermalCentrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(381, "basicmachine.thermalcentrifuge.tier.01", "Basic Thermal Centrifuge", 1, "Separating Ores more precisely", GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, 1, 3, 0, 0, 1, "ThermalCentrifuge.png", "", false, false, 0, "THERMAL_CENTRIFUGE", new Object[] { "CEC", "OMO", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_MV_ThermalCentrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(382, "basicmachine.thermalcentrifuge.tier.02", "Advanced Thermal Centrifuge", 2, "Separating Ores more precisely", GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, 1, 3, 0, 0, 1, "ThermalCentrifuge.png", "", false, false, 0, "THERMAL_CENTRIFUGE", new Object[] { "CEC", "OMO", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_HV_ThermalCentrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(383, "basicmachine.thermalcentrifuge.tier.03", "Advanced Thermal Centrifuge II", 3, "Separating Ores more precisely", GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, 1, 3, 0, 0, 1, "ThermalCentrifuge.png", "", false, false, 0, "THERMAL_CENTRIFUGE", new Object[] { "CEC", "OMO", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_EV_ThermalCentrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(384, "basicmachine.thermalcentrifuge.tier.04", "Advanced Thermal Centrifuge III", 4, "Separating Ores more precisely", GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, 1, 3, 0, 0, 1, "ThermalCentrifuge.png", "", false, false, 0, "THERMAL_CENTRIFUGE", new Object[] { "CEC", "OMO", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+ ItemList.Machine_IV_ThermalCentrifuge.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(385, "basicmachine.thermalcentrifuge.tier.05", "Blaze Sweatshop T-6350", 5, "Separating Ores more precisely", GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, 1, 3, 0, 0, 1, "ThermalCentrifuge.png", "", false, false, 0, "THERMAL_CENTRIFUGE", new Object[] { "CEC", "OMO", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }).getStackForm(1L));
+
+ ItemList.Machine_LV_OreWasher.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(391, "basicmachine.orewasher.tier.01", "Basic Ore Washing Plant", 1, "Getting more Byproducts from your Ores", GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, 1, 3, 16000, 0, 1, "OreWasher.png", "", false, false, 0, "ORE_WASHER", new Object[] { "RGR", "CEC", "WMW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_OreWasher.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(392, "basicmachine.orewasher.tier.02", "Advanced Ore Washing Plant", 2, "Getting more Byproducts from your Ores", GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, 1, 3, 16000, 0, 1, "OreWasher.png", "", false, false, 0, "ORE_WASHER", new Object[] { "RGR", "CEC", "WMW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_OreWasher.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(393, "basicmachine.orewasher.tier.03", "Advanced Ore Washing Plant II", 3, "Getting more Byproducts from your Ores", GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, 1, 3, 16000, 0, 1, "OreWasher.png", "", false, false, 0, "ORE_WASHER", new Object[] { "RGR", "CEC", "WMW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_OreWasher.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(394, "basicmachine.orewasher.tier.04", "Advanced Ore Washing Plant III", 4, "Getting more Byproducts from your Ores", GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, 1, 3, 16000, 0, 1, "OreWasher.png", "", false, false, 0, "ORE_WASHER", new Object[] { "RGR", "CEC", "WMW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_OreWasher.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(395, "basicmachine.orewasher.tier.05", "Repurposed Laundry-Washer I-360", 5, "Getting more Byproducts from your Ores", GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, 1, 3, 16000, 0, 1, "OreWasher.png", "", false, false, 0, "ORE_WASHER", new Object[] { "RGR", "CEC", "WMW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Boxinator.set(new GT_MetaTileEntity_Boxinator(401, "basicmachine.boxinator.tier.01", "Basic Packager", 1).getStackForm(1L));
+ ItemList.Machine_MV_Boxinator.set(new GT_MetaTileEntity_Boxinator(402, "basicmachine.boxinator.tier.02", "Advanced Packager", 2).getStackForm(1L));
+ ItemList.Machine_HV_Boxinator.set(new GT_MetaTileEntity_Boxinator(403, "basicmachine.boxinator.tier.03", "Advanced Packager II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Boxinator.set(new GT_MetaTileEntity_Boxinator(404, "basicmachine.boxinator.tier.04", "Advanced Packager III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Boxinator.set(new GT_MetaTileEntity_Boxinator(405, "basicmachine.boxinator.tier.05", "Boxinator", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Boxinator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BCB", "RMV", "WCW", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('R'), ItemList.Robot_Arm_LV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('B'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Boxinator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BCB", "RMV", "WCW", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('R'), ItemList.Robot_Arm_MV, Character.valueOf('V'), ItemList.Conveyor_Module_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('B'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Boxinator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BCB", "RMV", "WCW", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('R'), ItemList.Robot_Arm_HV, Character.valueOf('V'), ItemList.Conveyor_Module_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('B'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Boxinator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BCB", "RMV", "WCW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('R'), ItemList.Robot_Arm_EV, Character.valueOf('V'), ItemList.Conveyor_Module_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('B'), OreDictNames.craftingChest });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Boxinator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "BCB", "RMV", "WCW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('R'), ItemList.Robot_Arm_IV, Character.valueOf('V'), ItemList.Conveyor_Module_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('B'), OreDictNames.craftingChest });
+
+ ItemList.Machine_LV_Unboxinator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(411, "basicmachine.unboxinator.tier.01", "Basic Unpackager", 1, "Grabs things out of Boxes", GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes, 1, 2, 0, 0, 1, "Unpackager.png", "", false, false, 0, "UNBOXINATOR", new Object[] { "BCB", "VMR", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_MV_Unboxinator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(412, "basicmachine.unboxinator.tier.02", "Advanced Unpackager", 2, "Grabs things out of Boxes", GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes, 1, 2, 0, 0, 1, "Unpackager.png", "", false, false, 0, "UNBOXINATOR", new Object[] { "BCB", "VMR", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_HV_Unboxinator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(413, "basicmachine.unboxinator.tier.03", "Advanced Unpackager II", 3, "Grabs things out of Boxes", GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes, 1, 2, 0, 0, 1, "Unpackager.png", "", false, false, 0, "UNBOXINATOR", new Object[] { "BCB", "VMR", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_EV_Unboxinator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(414, "basicmachine.unboxinator.tier.04", "Advanced Unpackager III", 4, "Grabs things out of Boxes", GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes, 1, 2, 0, 0, 1, "Unpackager.png", "", false, false, 0, "UNBOXINATOR", new Object[] { "BCB", "VMR", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_IV_Unboxinator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(415, "basicmachine.unboxinator.tier.05", "Unboxinator", 5, "Grabs things out of Boxes", GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes, 1, 2, 0, 0, 1, "Unpackager.png", "", false, false, 0, "UNBOXINATOR", new Object[] { "BCB", "VMR", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+
+ ItemList.Machine_LV_ChemicalReactor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(421, "basicmachine.chemicalreactor.tier.01", "Basic Chemical Reactor", 1, "Letting Chemicals react with each other", GT_Recipe.GT_Recipe_Map.sChemicalRecipes, 2, 1, 16000, 0, 1, "ChemicalReactor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CHEMICAL_REACTOR", new Object[] { "GRG", "WEW", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_ChemicalReactor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(422, "basicmachine.chemicalreactor.tier.02", "Advanced Chemical Reactor", 2, "Letting Chemicals react with each other", GT_Recipe.GT_Recipe_Map.sChemicalRecipes, 2, 1, 16000, 0, 1, "ChemicalReactor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CHEMICAL_REACTOR", new Object[] { "GRG", "WEW", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_ChemicalReactor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(423, "basicmachine.chemicalreactor.tier.03", "Advanced Chemical Reactor II", 3, "Letting Chemicals react with each other", GT_Recipe.GT_Recipe_Map.sChemicalRecipes, 2, 1, 16000, 0, 1, "ChemicalReactor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CHEMICAL_REACTOR", new Object[] { "GRG", "WEW", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_ChemicalReactor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(424, "basicmachine.chemicalreactor.tier.04", "Advanced Chemical Reactor III", 4, "Letting Chemicals react with each other", GT_Recipe.GT_Recipe_Map.sChemicalRecipes, 2, 1, 16000, 0, 1, "ChemicalReactor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CHEMICAL_REACTOR", new Object[] { "GRG", "WEW", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_ChemicalReactor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(425, "basicmachine.chemicalreactor.tier.05", "Advanced Chemical Reactor IV", 5, "Letting Chemicals react with each other", GT_Recipe.GT_Recipe_Map.sChemicalRecipes, 2, 1, 16000, 0, 1, "ChemicalReactor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "CHEMICAL_REACTOR", new Object[] { "GRG", "WEW", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_FluidCanner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(431, "basicmachine.fluidcanner.tier.01", "Basic Fluid Canner", 1, "Puts Fluids into and out of Containers", GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes, 1, 1, 16000, 0, 1, "FluidCanner.png", "", true, false, 0, "FLUID_CANNER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_FluidCanner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(432, "basicmachine.fluidcanner.tier.02", "Advanced Fluid Canner", 2, "Puts Fluids into and out of Containers", GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes, 1, 1, 32000, 0, 1, "FluidCanner.png", "", true, false, 0, "FLUID_CANNER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_FluidCanner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(433, "basicmachine.fluidcanner.tier.03", "Quick Fluid Canner", 3, "Puts Fluids into and out of Containers", GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes, 1, 1, 48000, 0, 1, "FluidCanner.png", "", true, false, 0, "FLUID_CANNER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_FluidCanner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(434, "basicmachine.fluidcanner.tier.04", "Turbo Fluid Canner", 4, "Puts Fluids into and out of Containers", GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes, 1, 1, 64000, 0, 1, "FluidCanner.png", "", true, false, 0, "FLUID_CANNER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_FluidCanner.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(435, "basicmachine.fluidcanner.tier.05", "Instant Fluid Canner", 5, "Puts Fluids into and out of Containers", GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes, 1, 1, 80000, 0, 1, "FluidCanner.png", "", true, false, 0, "FLUID_CANNER", new Object[] { "GCG", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_RockBreaker.set(new GT_MetaTileEntity_RockBreaker(441, "basicmachine.rockbreaker.tier.01", "Basic Rock Breaker", 1).getStackForm(1L));
+ ItemList.Machine_MV_RockBreaker.set(new GT_MetaTileEntity_RockBreaker(442, "basicmachine.rockbreaker.tier.02", "Advanced Rock Breaker", 2).getStackForm(1L));
+ ItemList.Machine_HV_RockBreaker.set(new GT_MetaTileEntity_RockBreaker(443, "basicmachine.rockbreaker.tier.03", "Advanced Rock Breaker II", 3).getStackForm(1L));
+ ItemList.Machine_EV_RockBreaker.set(new GT_MetaTileEntity_RockBreaker(444, "basicmachine.rockbreaker.tier.04", "Advanced Rock Breaker III", 4).getStackForm(1L));
+ ItemList.Machine_IV_RockBreaker.set(new GT_MetaTileEntity_RockBreaker(445, "basicmachine.rockbreaker.tier.05", "Cryogenic Magma Solidifier R-8200", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_RockBreaker.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PED", "WMW", "GGG", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('D'), OreDictNames.craftingGrinder, Character.valueOf('E'), ItemList.Electric_Motor_LV, Character.valueOf('P'), ItemList.Electric_Piston_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_RockBreaker.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PED", "WMW", "GGG", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('D'), OreDictNames.craftingGrinder, Character.valueOf('E'), ItemList.Electric_Motor_MV, Character.valueOf('P'), ItemList.Electric_Piston_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_RockBreaker.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PED", "WMW", "GGG", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('D'), OreDictNames.craftingGrinder, Character.valueOf('E'), ItemList.Electric_Motor_HV, Character.valueOf('P'), ItemList.Electric_Piston_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_RockBreaker.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PED", "WMW", "GGG", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('D'), OreDictNames.craftingGrinder, Character.valueOf('E'), ItemList.Electric_Motor_EV, Character.valueOf('P'), ItemList.Electric_Piston_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_RockBreaker.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PED", "WMW", "GGG", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('D'), OreDictNames.craftingGrinder, Character.valueOf('E'), ItemList.Electric_Motor_IV, Character.valueOf('P'), ItemList.Electric_Piston_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ ItemList.Machine_LV_Disassembler.set(new GT_MetaTileEntity_Disassembler(451, "basicmachine.disassembler.tier.01", "Basic Disassembler", 1).getStackForm(1L));
+ ItemList.Machine_MV_Disassembler.set(new GT_MetaTileEntity_Disassembler(452, "basicmachine.disassembler.tier.02", "Advanced Disassembler", 2).getStackForm(1L));
+ ItemList.Machine_HV_Disassembler.set(new GT_MetaTileEntity_Disassembler(453, "basicmachine.disassembler.tier.03", "Advanced Disassembler II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Disassembler.set(new GT_MetaTileEntity_Disassembler(454, "basicmachine.disassembler.tier.04", "Advanced Disassembler III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Disassembler.set(new GT_MetaTileEntity_Disassembler(455, "basicmachine.disassembler.tier.05", "Advanced Disassembler IV", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Disassembler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "ACA", "WMW", "ACA", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('A'), ItemList.Robot_Arm_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Disassembler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "ACA", "WMW", "ACA", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('A'), ItemList.Robot_Arm_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Disassembler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "ACA", "WMW", "ACA", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('A'), ItemList.Robot_Arm_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Disassembler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "ACA", "WMW", "ACA", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('A'), ItemList.Robot_Arm_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Disassembler.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "ACA", "WMW", "ACA", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('A'), ItemList.Robot_Arm_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten) });
+
+ ItemList.Machine_LV_Massfab.set(new GT_MetaTileEntity_Massfabricator(461, "basicmachine.massfab.tier.01", "Basic Mass Fabricator", 1).getStackForm(1L));
+ ItemList.Machine_MV_Massfab.set(new GT_MetaTileEntity_Massfabricator(462, "basicmachine.massfab.tier.02", "Advanced Mass Fabricator", 2).getStackForm(1L));
+ ItemList.Machine_HV_Massfab.set(new GT_MetaTileEntity_Massfabricator(463, "basicmachine.massfab.tier.03", "Advanced Mass Fabricator II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Massfab.set(new GT_MetaTileEntity_Massfabricator(464, "basicmachine.massfab.tier.04", "Advanced Mass Fabricator III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Massfab.set(new GT_MetaTileEntity_Massfabricator(465, "basicmachine.massfab.tier.05", "Advanced Mass Fabricator IV", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Massfab.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CFC", "WMW", "CFC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('F'), ItemList.Field_Generator_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Massfab.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CFC", "WMW", "CFC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('F'), ItemList.Field_Generator_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Massfab.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CFC", "WMW", "CFC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('F'), ItemList.Field_Generator_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Massfab.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CFC", "WMW", "CFC", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('F'), ItemList.Field_Generator_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Massfab.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CFC", "WMW", "CFC", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('F'), ItemList.Field_Generator_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Ultimate), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+
+ ItemList.Machine_LV_Amplifab.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(471, "basicmachine.amplifab.tier.01", "Basic Amplifabricator", 1, "Extracting UU Amplifier", GT_Recipe.GT_Recipe_Map.sAmplifiers, 1, 1, 1000, 0, 1, "Amplifabricator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "AMPLIFAB", new Object[] { "WPW", "PMP", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }).getStackForm(1L));
+ ItemList.Machine_MV_Amplifab.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(472, "basicmachine.amplifab.tier.02", "Advanced Amplifabricator", 2, "Extracting UU Amplifier", GT_Recipe.GT_Recipe_Map.sAmplifiers, 1, 1, 1000, 0, 1, "Amplifabricator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "AMPLIFAB", new Object[] { "WPW", "PMP", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }).getStackForm(1L));
+ ItemList.Machine_HV_Amplifab.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(473, "basicmachine.amplifab.tier.03", "Advanced Amplifabricator II", 3, "Extracting UU Amplifier", GT_Recipe.GT_Recipe_Map.sAmplifiers, 1, 1, 1000, 0, 1, "Amplifabricator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "AMPLIFAB", new Object[] { "WPW", "PMP", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }).getStackForm(1L));
+ ItemList.Machine_EV_Amplifab.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(474, "basicmachine.amplifab.tier.04", "Advanced Amplifabricator III", 4, "Extracting UU Amplifier", GT_Recipe.GT_Recipe_Map.sAmplifiers, 1, 1, 1000, 0, 1, "Amplifabricator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "AMPLIFAB", new Object[] { "WPW", "PMP", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }).getStackForm(1L));
+ ItemList.Machine_IV_Amplifab.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(475, "basicmachine.amplifab.tier.05", "Advanced Amplifabricator IV", 5, "Extracting UU Amplifier", GT_Recipe.GT_Recipe_Map.sAmplifiers, 1, 1, 1000, 0, 1, "Amplifabricator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "AMPLIFAB", new Object[] { "WPW", "PMP", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }).getStackForm(1L));
+
+ ItemList.Machine_LV_Replicator.set(new GT_MetaTileEntity_Replicator(481, "basicmachine.replicator.tier.01", "Basic Replicator", 1).getStackForm(1L));
+ ItemList.Machine_MV_Replicator.set(new GT_MetaTileEntity_Replicator(482, "basicmachine.replicator.tier.02", "Advanced Replicator", 2).getStackForm(1L));
+ ItemList.Machine_HV_Replicator.set(new GT_MetaTileEntity_Replicator(483, "basicmachine.replicator.tier.03", "Advanced Replicator II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Replicator.set(new GT_MetaTileEntity_Replicator(484, "basicmachine.replicator.tier.04", "Advanced Replicator III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Replicator.set(new GT_MetaTileEntity_Replicator(485, "basicmachine.replicator.tier.05", "Advanced Replicator IV", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Replicator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EFE", "CMC", "EWE", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('F'), ItemList.Field_Generator_LV, Character.valueOf('E'), ItemList.Emitter_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Replicator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EFE", "CMC", "EWE", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('F'), ItemList.Field_Generator_MV, Character.valueOf('E'), ItemList.Emitter_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Replicator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EFE", "CMC", "EWE", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('F'), ItemList.Field_Generator_HV, Character.valueOf('E'), ItemList.Emitter_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Replicator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EFE", "CMC", "EWE", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('F'), ItemList.Field_Generator_EV, Character.valueOf('E'), ItemList.Emitter_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Replicator.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EFE", "CMC", "EWE", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('F'), ItemList.Field_Generator_IV, Character.valueOf('E'), ItemList.Emitter_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Ultimate), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tungsten) });
+
+ ItemList.Machine_LV_Brewery.set(new GT_MetaTileEntity_PotionBrewer(491, "basicmachine.brewery.tier.01", "Basic Brewery", 1).getStackForm(1L));
+ ItemList.Machine_MV_Brewery.set(new GT_MetaTileEntity_PotionBrewer(492, "basicmachine.brewery.tier.02", "Advanced Brewery", 2).getStackForm(1L));
+ ItemList.Machine_HV_Brewery.set(new GT_MetaTileEntity_PotionBrewer(493, "basicmachine.brewery.tier.03", "Advanced Brewery II", 3).getStackForm(1L));
+ ItemList.Machine_EV_Brewery.set(new GT_MetaTileEntity_PotionBrewer(494, "basicmachine.brewery.tier.04", "Advanced Brewery III", 4).getStackForm(1L));
+ ItemList.Machine_IV_Brewery.set(new GT_MetaTileEntity_PotionBrewer(495, "basicmachine.brewery.tier.05", "Advanced Brewery IV", 5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_LV_Brewery.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GPG", "WMW", "CBC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('P'), ItemList.Electric_Pump_LV, Character.valueOf('B'), OrePrefixes.stick.get(Materials.Blaze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_MV_Brewery.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GPG", "WMW", "CBC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('P'), ItemList.Electric_Pump_MV, Character.valueOf('B'), OrePrefixes.stick.get(Materials.Blaze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_HV_Brewery.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GPG", "WMW", "CBC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('P'), ItemList.Electric_Pump_HV, Character.valueOf('B'), OrePrefixes.stick.get(Materials.Blaze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_EV_Brewery.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GPG", "WMW", "CBC", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('P'), ItemList.Electric_Pump_EV, Character.valueOf('B'), OrePrefixes.stick.get(Materials.Blaze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_IV_Brewery.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "GPG", "WMW", "CBC", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('P'), ItemList.Electric_Pump_IV, Character.valueOf('B'), OrePrefixes.stick.get(Materials.Blaze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tungsten), Character.valueOf('G'), new ItemStack(Blocks.glass, 1) });
+
+ ItemList.Machine_LV_Fermenter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(501, "basicmachine.fermenter.tier.01", "Basic Fermenter", 1, "Fermenting Fluids", GT_Recipe.GT_Recipe_Map.sFermentingRecipes, 1, 1, 1000, 0, 1, "Fermenter.png", "", false, false, 0, "FERMENTER", new Object[] { "WPW", "GMG", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Fermenter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(502, "basicmachine.fermenter.tier.02", "Advanced Fermenter", 2, "Fermenting Fluids", GT_Recipe.GT_Recipe_Map.sFermentingRecipes, 1, 1, 1000, 0, 1, "Fermenter.png", "", false, false, 0, "FERMENTER", new Object[] { "WPW", "GMG", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Fermenter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(503, "basicmachine.fermenter.tier.03", "Advanced Fermenter II", 3, "Fermenting Fluids", GT_Recipe.GT_Recipe_Map.sFermentingRecipes, 1, 1, 1000, 0, 1, "Fermenter.png", "", false, false, 0, "FERMENTER", new Object[] { "WPW", "GMG", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Fermenter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(504, "basicmachine.fermenter.tier.04", "Advanced Fermenter III", 4, "Fermenting Fluids", GT_Recipe.GT_Recipe_Map.sFermentingRecipes, 1, 1, 1000, 0, 1, "Fermenter.png", "", false, false, 0, "FERMENTER", new Object[] { "WPW", "GMG", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Fermenter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(505, "basicmachine.fermenter.tier.05", "Advanced Fermenter IV", 5, "Fermenting Fluids", GT_Recipe.GT_Recipe_Map.sFermentingRecipes, 1, 1, 1000, 0, 1, "Fermenter.png", "", false, false, 0, "FERMENTER", new Object[] { "WPW", "GMG", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_FluidExtractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(511, "basicmachine.fluidextractor.tier.01", "Basic Fluid Extractor", 1, "Extracting Fluids from Items", GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes, 1, 1, 16000, 0, 1, "FluidExtractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "FLUID_EXTRACTOR", new Object[] { "GCG", "PME", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_FluidExtractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(512, "basicmachine.fluidextractor.tier.02", "Advanced Fluid Extractor", 2, "Extracting Fluids from Items", GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes, 1, 1, 16000, 0, 1, "FluidExtractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "FLUID_EXTRACTOR", new Object[] { "GCG", "PME", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_FluidExtractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(513, "basicmachine.fluidextractor.tier.03", "Advanced Fluid Extractor II", 3, "Extracting Fluids from Items", GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes, 1, 1, 16000, 0, 1, "FluidExtractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "FLUID_EXTRACTOR", new Object[] { "GCG", "PME", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_FluidExtractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(514, "basicmachine.fluidextractor.tier.04", "Advanced Fluid Extractor III", 4, "Extracting Fluids from Items", GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes, 1, 1, 16000, 0, 1, "FluidExtractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "FLUID_EXTRACTOR", new Object[] { "GCG", "PME", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_FluidExtractor.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(515, "basicmachine.fluidextractor.tier.05", "Advanced Fluid Extractor IV", 5, "Extracting Fluids from Items", GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes, 1, 1, 16000, 0, 1, "FluidExtractor.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "FLUID_EXTRACTOR", new Object[] { "GCG", "PME", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_FluidSolidifier.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(521, "basicmachine.fluidsolidifier.tier.01", "Basic Fluid Solidifier", 1, "Cools Fluids down to form Solids", GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes, 1, 1, 16000, 0, 1, "FluidSolidifier.png", "", false, false, 0, "FLUID_SOLIDIFIER", new Object[] { "PGP", "WMW", "CBC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_MV_FluidSolidifier.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(522, "basicmachine.fluidsolidifier.tier.02", "Advanced Fluid Solidifier", 2, "Cools Fluids down to form Solids", GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes, 1, 1, 16000, 0, 1, "FluidSolidifier.png", "", false, false, 0, "FLUID_SOLIDIFIER", new Object[] { "PGP", "WMW", "CBC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_HV_FluidSolidifier.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(523, "basicmachine.fluidsolidifier.tier.03", "Advanced Fluid Solidifier II", 3, "Cools Fluids down to form Solids", GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes, 1, 1, 16000, 0, 1, "FluidSolidifier.png", "", false, false, 0, "FLUID_SOLIDIFIER", new Object[] { "PGP", "WMW", "CBC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_EV_FluidSolidifier.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(524, "basicmachine.fluidsolidifier.tier.04", "Advanced Fluid Solidifier III", 4, "Cools Fluids down to form Solids", GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes, 1, 1, 16000, 0, 1, "FluidSolidifier.png", "", false, false, 0, "FLUID_SOLIDIFIER", new Object[] { "PGP", "WMW", "CBC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+ ItemList.Machine_IV_FluidSolidifier.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(525, "basicmachine.fluidsolidifier.tier.05", "Advanced Fluid Solidifier IV", 5, "Cools Fluids down to form Solids", GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes, 1, 1, 16000, 0, 1, "FluidSolidifier.png", "", false, false, 0, "FLUID_SOLIDIFIER", new Object[] { "PGP", "WMW", "CBC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, Character.valueOf('B'), OreDictNames.craftingChest }).getStackForm(1L));
+
+ ItemList.Machine_LV_Distillery.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(531, "basicmachine.distillery.tier.01", "Basic Distillery", 1, "Extracting the most relevant Parts of Fluids", GT_Recipe.GT_Recipe_Map.sDistilleryRecipes, 1, 0, 1000, 0, 1, "Distillery.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "DISTILLERY", new Object[] { "GBG", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('B'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_DISTILLATION, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Distillery.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(532, "basicmachine.distillery.tier.02", "Advanced Distillery", 2, "Extracting the most relevant Parts of Fluids", GT_Recipe.GT_Recipe_Map.sDistilleryRecipes, 1, 0, 1000, 0, 1, "Distillery.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "DISTILLERY", new Object[] { "GBG", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('B'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_DISTILLATION, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Distillery.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(533, "basicmachine.distillery.tier.03", "Advanced Distillery II", 3, "Extracting the most relevant Parts of Fluids", GT_Recipe.GT_Recipe_Map.sDistilleryRecipes, 1, 0, 1000, 0, 1, "Distillery.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "DISTILLERY", new Object[] { "GBG", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('B'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_DISTILLATION, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Distillery.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(534, "basicmachine.distillery.tier.04", "Advanced Distillery III", 4, "Extracting the most relevant Parts of Fluids", GT_Recipe.GT_Recipe_Map.sDistilleryRecipes, 1, 0, 1000, 0, 1, "Distillery.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "DISTILLERY", new Object[] { "GBG", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('B'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_DISTILLATION, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Distillery.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(535, "basicmachine.distillery.tier.05", "Advanced Distillery IV", 5, "Extracting the most relevant Parts of Fluids", GT_Recipe.GT_Recipe_Map.sDistilleryRecipes, 1, 0, 1000, 0, 1, "Distillery.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(200)), false, false, 0, "DISTILLERY", new Object[] { "GBG", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('B'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_DISTILLATION, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_ChemicalBath.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(541, "basicmachine.chemicalbath.tier.01", "Basic Chemical Bath", 1, "Bathing Ores in Chemicals to separate them", GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes, 1, 3, 8000, 0, 1, "ChemicalBath.png", "", false, true, 0, "CHEMICAL_BATH", new Object[] { "VGW", "PGV", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_ChemicalBath.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(542, "basicmachine.chemicalbath.tier.02", "Advanced Chemical Bath", 2, "Bathing Ores in Chemicals to separate them", GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes, 1, 3, 8000, 0, 1, "ChemicalBath.png", "", false, true, 0, "CHEMICAL_BATH", new Object[] { "VGW", "PGV", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_ChemicalBath.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(543, "basicmachine.chemicalbath.tier.03", "Advanced Chemical Bath II", 3, "Bathing Ores in Chemicals to separate them", GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes, 1, 3, 8000, 0, 1, "ChemicalBath.png", "", false, true, 0, "CHEMICAL_BATH", new Object[] { "VGW", "PGV", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_ChemicalBath.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(544, "basicmachine.chemicalbath.tier.04", "Advanced Chemical Bath III", 4, "Bathing Ores in Chemicals to separate them", GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes, 1, 3, 8000, 0, 1, "ChemicalBath.png", "", false, true, 0, "CHEMICAL_BATH", new Object[] { "VGW", "PGV", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_ChemicalBath.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(545, "basicmachine.chemicalbath.tier.05", "Advanced Chemical Bath IV", 5, "Bathing Ores in Chemicals to separate them", GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes, 1, 3, 8000, 0, 1, "ChemicalBath.png", "", false, true, 0, "CHEMICAL_BATH", new Object[] { "VGW", "PGV", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Polarizer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(551, "basicmachine.polarizer.tier.01", "Basic Polarizer", 1, "Bipolarising your Magnets", GT_Recipe.GT_Recipe_Map.sPolarizerRecipes, 1, 1, 0, 0, 1, "Polarizer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "POLARIZER", new Object[] { "ZSZ", "WMW", "ZSZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Polarizer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(552, "basicmachine.polarizer.tier.02", "Advanced Polarizer", 2, "Bipolarising your Magnets", GT_Recipe.GT_Recipe_Map.sPolarizerRecipes, 1, 1, 0, 0, 1, "Polarizer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "POLARIZER", new Object[] { "ZSZ", "WMW", "ZSZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Polarizer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(553, "basicmachine.polarizer.tier.03", "Advanced Polarizer II", 3, "Bipolarising your Magnets", GT_Recipe.GT_Recipe_Map.sPolarizerRecipes, 1, 1, 0, 0, 1, "Polarizer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "POLARIZER", new Object[] { "ZSZ", "WMW", "ZSZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Polarizer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(554, "basicmachine.polarizer.tier.04", "Advanced Polarizer III", 4, "Bipolarising your Magnets", GT_Recipe.GT_Recipe_Map.sPolarizerRecipes, 1, 1, 0, 0, 1, "Polarizer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "POLARIZER", new Object[] { "ZSZ", "WMW", "ZSZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Polarizer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(555, "basicmachine.polarizer.tier.05", "Advanced Polarizer IV", 5, "Bipolarising your Magnets", GT_Recipe.GT_Recipe_Map.sPolarizerRecipes, 1, 1, 0, 0, 1, "Polarizer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "POLARIZER", new Object[] { "ZSZ", "WMW", "ZSZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_ElectromagneticSeparator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(561, "basicmachine.electromagneticseparator.tier.01", "Basic Electromagnetic Separator", 1, "Separating the magnetic Ores from the rest", GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes, 1, 3, 0, 0, 1, "ElectromagneticSeparator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "ELECTROMAGNETIC_SEPARATOR", new Object[] { "VWZ", "WMS", "CWZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_ElectromagneticSeparator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(562, "basicmachine.electromagneticseparator.tier.02", "Advanced Electromagnetic Separator", 2, "Separating the magnetic Ores from the rest", GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes, 1, 3, 0, 0, 1, "ElectromagneticSeparator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "ELECTROMAGNETIC_SEPARATOR", new Object[] { "VWZ", "WMS", "CWZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_ElectromagneticSeparator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(563, "basicmachine.electromagneticseparator.tier.03", "Advanced Electromagnetic Separator II", 3, "Separating the magnetic Ores from the rest", GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes, 1, 3, 0, 0, 1, "ElectromagneticSeparator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "ELECTROMAGNETIC_SEPARATOR", new Object[] { "VWZ", "WMS", "CWZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_ElectromagneticSeparator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(564, "basicmachine.electromagneticseparator.tier.04", "Advanced Electromagnetic Separator III", 4, "Separating the magnetic Ores from the rest", GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes, 1, 3, 0, 0, 1, "ElectromagneticSeparator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "ELECTROMAGNETIC_SEPARATOR", new Object[] { "VWZ", "WMS", "CWZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_ElectromagneticSeparator.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(565, "basicmachine.electromagneticseparator.tier.05", "Advanced Electromagnetic Separator IV", 5, "Separating the magnetic Ores from the rest", GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes, 1, 3, 0, 0, 1, "ElectromagneticSeparator.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "ELECTROMAGNETIC_SEPARATOR", new Object[] { "VWZ", "WMS", "CWZ", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('S'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, Character.valueOf('Z'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Autoclave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(571, "basicmachine.autoclave.tier.01", "Basic Autoclave", 1, "Crystallizing your Dusts", GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes, 1, 1, 8000, 0, 1, "Autoclave.png", "", false, false, 0, "AUTOCLAVE", new Object[] { "IGI", "IMI", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Autoclave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(572, "basicmachine.autoclave.tier.02", "Advanced Autoclave", 2, "Crystallizing your Dusts", GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes, 1, 1, 8000, 0, 1, "Autoclave.png", "", false, false, 0, "AUTOCLAVE", new Object[] { "IGI", "IMI", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Autoclave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(573, "basicmachine.autoclave.tier.03", "Advanced Autoclave II", 3, "Crystallizing your Dusts", GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes, 1, 1, 8000, 0, 1, "Autoclave.png", "", false, false, 0, "AUTOCLAVE", new Object[] { "IGI", "IMI", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Autoclave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(574, "basicmachine.autoclave.tier.04", "Advanced Autoclave III", 4, "Crystallizing your Dusts", GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes, 1, 1, 8000, 0, 1, "Autoclave.png", "", false, false, 0, "AUTOCLAVE", new Object[] { "IGI", "IMI", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Autoclave.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(575, "basicmachine.autoclave.tier.05", "Advanced Autoclave IV", 5, "Crystallizing your Dusts", GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes, 1, 1, 8000, 0, 1, "Autoclave.png", "", false, false, 0, "AUTOCLAVE", new Object[] { "IGI", "IMI", "CPC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('I'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Mixer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(581, "basicmachine.mixer.tier.01", "Basic Mixer", 1, "Will it Blend?", GT_Recipe.GT_Recipe_Map.sMixerRecipes, 4, 1, 8000, 0, 1, "Mixer.png", "", false, false, 0, "MIXER", new Object[] { "GRG", "GEG", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_Mixer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(582, "basicmachine.mixer.tier.02", "Advanced Mixer", 2, "Will it Blend?", GT_Recipe.GT_Recipe_Map.sMixerRecipes, 4, 1, 8000, 0, 1, "Mixer.png", "", false, false, 0, "MIXER", new Object[] { "GRG", "GEG", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_Mixer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(583, "basicmachine.mixer.tier.03", "Advanced Mixer II", 3, "Will it Blend?", GT_Recipe.GT_Recipe_Map.sMixerRecipes, 4, 1, 8000, 0, 1, "Mixer.png", "", false, false, 0, "MIXER", new Object[] { "GRG", "GEG", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_Mixer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(584, "basicmachine.mixer.tier.04", "Advanced Mixer III", 4, "Will it Blend?", GT_Recipe.GT_Recipe_Map.sMixerRecipes, 4, 1, 8000, 0, 1, "Mixer.png", "", false, false, 0, "MIXER", new Object[] { "GRG", "GEG", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_Mixer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(585, "basicmachine.mixer.tier.05", "Advanced Mixer IV", 5, "Will it Blend?", GT_Recipe.GT_Recipe_Map.sMixerRecipes, 4, 1, 8000, 0, 1, "Mixer.png", "", false, false, 0, "MIXER", new Object[] { "GRG", "GEG", "CMC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, Character.valueOf('R'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_LaserEngraver.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(591, "basicmachine.laserengraver.tier.01", "Basic Precision Laser Engraver", 1, "Don't look directly at the Laser", GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes, 2, 1, 0, 0, 1, "LaserEngraver.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "LASER_ENGRAVER", new Object[] { "PEP", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_LaserEngraver.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(592, "basicmachine.laserengraver.tier.02", "Advanced Precision Laser Engraver", 2, "Don't look directly at the Laser", GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes, 2, 1, 0, 0, 1, "LaserEngraver.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "LASER_ENGRAVER", new Object[] { "PEP", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_LaserEngraver.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(593, "basicmachine.laserengraver.tier.03", "Advanced Precision Laser Engraver II", 3, "Don't look directly at the Laser", GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes, 2, 1, 0, 0, 1, "LaserEngraver.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "LASER_ENGRAVER", new Object[] { "PEP", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_LaserEngraver.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(594, "basicmachine.laserengraver.tier.04", "Advanced Precision Laser Engraver III", 4, "Don't look directly at the Laser", GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes, 2, 1, 0, 0, 1, "LaserEngraver.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "LASER_ENGRAVER", new Object[] { "PEP", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_LaserEngraver.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(595, "basicmachine.laserengraver.tier.05", "Advanced Precision Laser Engraver IV", 5, "Don't look directly at the Laser", GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes, 2, 1, 0, 0, 1, "LaserEngraver.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(212)), false, false, 0, "LASER_ENGRAVER", new Object[] { "PEP", "CMC", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Press.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(601, "basicmachine.press.tier.01", "Basic Forming Press", 1, "Imprinting Images into things", GT_Recipe.GT_Recipe_Map.sPressRecipes, 2, 1, 0, 0, 1, "Press.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "PRESS", new Object[] { "WPW", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Press.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(602, "basicmachine.press.tier.02", "Advanced Forming Press", 2, "Imprinting Images into things", GT_Recipe.GT_Recipe_Map.sPressRecipes, 2, 1, 0, 0, 1, "Press.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "PRESS", new Object[] { "WPW", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Press.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(603, "basicmachine.press.tier.03", "Advanced Forming Press II", 3, "Imprinting Images into things", GT_Recipe.GT_Recipe_Map.sPressRecipes, 2, 1, 0, 0, 1, "Press.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "PRESS", new Object[] { "WPW", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Press.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(604, "basicmachine.press.tier.04", "Advanced Forming Press III", 4, "Imprinting Images into things", GT_Recipe.GT_Recipe_Map.sPressRecipes, 2, 1, 0, 0, 1, "Press.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "PRESS", new Object[] { "WPW", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Press.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(605, "basicmachine.press.tier.05", "Advanced Forming Press IV", 5, "Imprinting Images into things", GT_Recipe.GT_Recipe_Map.sPressRecipes, 2, 1, 0, 0, 1, "Press.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(203)), false, false, 0, "PRESS", new Object[] { "WPW", "CMC", "WPW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Hammer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(611, "basicmachine.hammer.tier.01", "Basic Forge Hammer", 1, "Stop, Hammertime!", GT_Recipe.GT_Recipe_Map.sHammerRecipes, 1, 1, 0, 6, 3, "Hammer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), false, false, 0, "HAMMER", new Object[] { "WPW", "CMC", "WAW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('A'), OreDictNames.craftingAnvil }).getStackForm(1L));
+ ItemList.Machine_MV_Hammer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(612, "basicmachine.hammer.tier.02", "Advanced Forge Hammer", 2, "Stop, Hammertime!", GT_Recipe.GT_Recipe_Map.sHammerRecipes, 1, 1, 0, 6, 3, "Hammer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), false, false, 0, "HAMMER", new Object[] { "WPW", "CMC", "WAW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('A'), OreDictNames.craftingAnvil }).getStackForm(1L));
+ ItemList.Machine_HV_Hammer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(613, "basicmachine.hammer.tier.03", "Advanced Forge Hammer II", 3, "Stop, Hammertime!", GT_Recipe.GT_Recipe_Map.sHammerRecipes, 1, 1, 0, 6, 3, "Hammer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), false, false, 0, "HAMMER", new Object[] { "WPW", "CMC", "WAW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('A'), OreDictNames.craftingAnvil }).getStackForm(1L));
+ ItemList.Machine_EV_Hammer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(614, "basicmachine.hammer.tier.04", "Advanced Forge Hammer III", 4, "Stop, Hammertime!", GT_Recipe.GT_Recipe_Map.sHammerRecipes, 1, 1, 0, 6, 3, "Hammer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), false, false, 0, "HAMMER", new Object[] { "WPW", "CMC", "WAW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('A'), OreDictNames.craftingAnvil }).getStackForm(1L));
+ ItemList.Machine_IV_Hammer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(615, "basicmachine.hammer.tier.05", "Advanced Forge Hammer IV", 5, "Stop, Hammertime!", GT_Recipe.GT_Recipe_Map.sHammerRecipes, 1, 1, 0, 6, 3, "Hammer.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(1)), false, false, 0, "HAMMER", new Object[] { "WPW", "CMC", "WAW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('A'), OreDictNames.craftingAnvil }).getStackForm(1L));
+
+ ItemList.Machine_LV_FluidHeater.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(621, "basicmachine.fluidheater.tier.01", "Basic Fluid Heater", 1, "Heating up your Fluids", GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes, 1, 0, 8000, 0, 1, "FluidHeater.png", "", false, false, 0, "FLUID_HEATER", new Object[] { "OGO", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_MV_FluidHeater.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(622, "basicmachine.fluidheater.tier.02", "Advanced Fluid Heater", 2, "Heating up your Fluids", GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes, 1, 0, 8000, 0, 1, "FluidHeater.png", "", false, false, 0, "FLUID_HEATER", new Object[] { "OGO", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_HV_FluidHeater.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(623, "basicmachine.fluidheater.tier.03", "Advanced Fluid Heater II", 3, "Heating up your Fluids", GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes, 1, 0, 8000, 0, 1, "FluidHeater.png", "", false, false, 0, "FLUID_HEATER", new Object[] { "OGO", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_EV_FluidHeater.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(624, "basicmachine.fluidheater.tier.04", "Advanced Fluid Heater III", 4, "Heating up your Fluids", GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes, 1, 0, 8000, 0, 1, "FluidHeater.png", "", false, false, 0, "FLUID_HEATER", new Object[] { "OGO", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+ ItemList.Machine_IV_FluidHeater.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(625, "basicmachine.fluidheater.tier.05", "Advanced Fluid Heater IV", 5, "Heating up your Fluids", GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes, 1, 0, 8000, 0, 1, "FluidHeater.png", "", false, false, 0, "FLUID_HEATER", new Object[] { "OGO", "PMP", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('O'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('G'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }).getStackForm(1L));
+
+ ItemList.Machine_LV_Slicer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(631, "basicmachine.slicer.tier.01", "Basic Slicing Machine", 1, "Slice of Life", GT_Recipe.GT_Recipe_Map.sSlicerRecipes, 2, 1, 0, 0, 1, "Slicer.png", "", false, false, 0, "SLICER", new Object[] { "WCW", "PMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Slicer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(632, "basicmachine.slicer.tier.02", "Advanced Slicing Machine", 2, "Slice of Life", GT_Recipe.GT_Recipe_Map.sSlicerRecipes, 2, 1, 0, 0, 1, "Slicer.png", "", false, false, 0, "SLICER", new Object[] { "WCW", "PMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Slicer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(633, "basicmachine.slicer.tier.03", "Advanced Slicing Machine II", 3, "Slice of Life", GT_Recipe.GT_Recipe_Map.sSlicerRecipes, 2, 1, 0, 0, 1, "Slicer.png", "", false, false, 0, "SLICER", new Object[] { "WCW", "PMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Slicer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(634, "basicmachine.slicer.tier.04", "Advanced Slicing Machine III", 4, "Slice of Life", GT_Recipe.GT_Recipe_Map.sSlicerRecipes, 2, 1, 0, 0, 1, "Slicer.png", "", false, false, 0, "SLICER", new Object[] { "WCW", "PMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Slicer.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(635, "basicmachine.slicer.tier.05", "Advanced Slicing Machine IV", 5, "Slice of Life", GT_Recipe.GT_Recipe_Map.sSlicerRecipes, 2, 1, 0, 0, 1, "Slicer.png", "", false, false, 0, "SLICER", new Object[] { "WCW", "PMV", "WCW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('V'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_Sifter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(641, "basicmachine.sifter.tier.01", "Basic Sifting Machine", 1, "Stay calm and keep sifting", GT_Recipe.GT_Recipe_Map.sSifterRecipes, 1, 9, 0, 2, 5, "Sifter.png", "", false, false, 0, "SIFTER", new Object[] { "WFW", "PMP", "CFC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_MV_Sifter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(642, "basicmachine.sifter.tier.02", "Advanced Sifting Machine", 2, "Stay calm and keep sifting", GT_Recipe.GT_Recipe_Map.sSifterRecipes, 1, 9, 0, 2, 5, "Sifter.png", "", false, false, 0, "SIFTER", new Object[] { "WFW", "PMP", "CFC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_HV_Sifter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(643, "basicmachine.sifter.tier.03", "Advanced Sifting Machine II", 3, "Stay calm and keep sifting", GT_Recipe.GT_Recipe_Map.sSifterRecipes, 1, 9, 0, 2, 5, "Sifter.png", "", false, false, 0, "SIFTER", new Object[] { "WFW", "PMP", "CFC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_EV_Sifter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(644, "basicmachine.sifter.tier.04", "Advanced Sifting Machine III", 4, "Stay calm and keep sifting", GT_Recipe.GT_Recipe_Map.sSifterRecipes, 1, 9, 0, 2, 5, "Sifter.png", "", false, false, 0, "SIFTER", new Object[] { "WFW", "PMP", "CFC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+ ItemList.Machine_IV_Sifter.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(645, "basicmachine.sifter.tier.05", "Advanced Sifting Machine IV", 5, "Stay calm and keep sifting", GT_Recipe.GT_Recipe_Map.sSifterRecipes, 1, 9, 0, 2, 5, "Sifter.png", "", false, false, 0, "SIFTER", new Object[] { "WFW", "PMP", "CFC", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }).getStackForm(1L));
+
+ ItemList.Machine_LV_ArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(651, "basicmachine.arcfurnace.tier.01", "Basic Arc Furnace", 1, "", GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes, 1, 4, 16000, 0, 1, "ArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "ARC_FURNACE", new Object[] { "WGW", "CMC", "PPP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_MV_ArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(652, "basicmachine.arcfurnace.tier.02", "Advanced Arc Furnace", 2, "", GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes, 1, 4, 16000, 0, 1, "ArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "ARC_FURNACE", new Object[] { "WGW", "CMC", "PPP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_HV_ArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(653, "basicmachine.arcfurnace.tier.03", "Advanced Arc Furnace II", 3, "", GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes, 1, 4, 16000, 0, 1, "ArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "ARC_FURNACE", new Object[] { "WGW", "CMC", "PPP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_EV_ArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(654, "basicmachine.arcfurnace.tier.04", "Advanced Arc Furnace III", 4, "", GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes, 1, 4, 16000, 0, 1, "ArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "ARC_FURNACE", new Object[] { "WGW", "CMC", "PPP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_IV_ArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(655, "basicmachine.arcfurnace.tier.05", "Advanced Arc Furnace IV", 5, "", GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes, 1, 4, 16000, 0, 1, "ArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "ARC_FURNACE", new Object[] { "WGW", "CMC", "PPP", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+
+ ItemList.Machine_LV_PlasmaArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(661, "basicmachine.plasmaarcfurnace.tier.01", "Basic Plasma Arc Furnace", 1, "", GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes, 1, 4, 1000, 0, 1, "PlasmaArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "PLASMA_ARC_FURNACE", new Object[] { "WGW", "CMC", "TPT", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('T'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_MV_PlasmaArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(662, "basicmachine.plasmaarcfurnace.tier.02", "Advanced Plasma Arc Furnace", 2, "", GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes, 1, 4, 1000, 0, 1, "PlasmaArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "PLASMA_ARC_FURNACE", new Object[] { "WGW", "CMC", "TPT", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('T'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_HV_PlasmaArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(663, "basicmachine.plasmaarcfurnace.tier.03", "Advanced Plasma Arc Furnace II", 3, "", GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes, 1, 4, 1000, 0, 1, "PlasmaArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "PLASMA_ARC_FURNACE", new Object[] { "WGW", "CMC", "TPT", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('T'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_EV_PlasmaArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(664, "basicmachine.plasmaarcfurnace.tier.04", "Advanced Plasma Arc Furnace III", 4, "", GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes, 1, 4, 1000, 0, 1, "PlasmaArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "PLASMA_ARC_FURNACE", new Object[] { "WGW", "CMC", "TPT", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('T'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+ ItemList.Machine_IV_PlasmaArcFurnace.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(665, "basicmachine.plasmaarcfurnace.tier.05", "Advanced Plasma Arc Furnace IV", 5, "", GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes, 1, 4, 1000, 0, 1, "PlasmaArcFurnace.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(202)), false, false, 0, "PLASMA_ARC_FURNACE", new Object[] { "WGW", "CMC", "TPT", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('P'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, Character.valueOf('T'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, Character.valueOf('G'), OrePrefixes.cell.get(Materials.Graphite) }).getStackForm(1L));
+
+ ItemList.Machine_LV_Oven.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(671, "basicmachine.e_oven.tier.01", "Basic Electric Oven", 1, "Just a Furnace with a different Design", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Oven.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_OVEN", new Object[] { "CEC", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_MV_Oven.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(672, "basicmachine.e_oven.tier.02", "Advanced Electric Oven", 2, "Just a Furnace with a different Design", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Oven.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_OVEN", new Object[] { "CEC", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_HV_Oven.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(673, "basicmachine.e_oven.tier.03", "Advanced Electric Oven II", 3, "Just a Furnace with a different Design", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Oven.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_OVEN", new Object[] { "CEC", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_EV_Oven.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(674, "basicmachine.e_oven.tier.04", "Advanced Electric Oven III", 4, "Just a Furnace with a different Design", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Oven.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_OVEN", new Object[] { "CEC", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ ItemList.Machine_IV_Oven.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(675, "basicmachine.e_oven.tier.05", "Advanced Electric Oven IV", 5, "Just a Furnace with a different Design", GT_Recipe.GT_Recipe_Map.sFurnaceRecipes, 1, 1, 0, 0, 1, "E_Oven.png", (String)GregTech_API.sSoundList.get(Integer.valueOf(207)), false, false, 0, "ELECTRIC_OVEN", new Object[] { "CEC", "CMC", "WEW", Character.valueOf('M'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, Character.valueOf('E'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, Character.valueOf('W'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, Character.valueOf('C'), GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }).getStackForm(1L));
+ }
+
+ private static void run3()
+ {
+ ItemList.Machine_Multi_BlastFurnace.set(new GT_MetaTileEntity_ElectricBlastFurnace(1000, "multimachine.blastfurnace", "Electric Blast Furnace").getStackForm(1L));
+ ItemList.Machine_Multi_ImplosionCompressor.set(new GT_MetaTileEntity_ImplosionCompressor(1001, "multimachine.implosioncompressor", "Implosion Compressor").getStackForm(1L));
+ ItemList.Machine_Multi_VacuumFreezer.set(new GT_MetaTileEntity_VacuumFreezer(1002, "multimachine.vacuumfreezer", "Vacuum Freezer").getStackForm(1L));
+ ItemList.Machine_Multi_Furnace.set(new GT_MetaTileEntity_MultiFurnace(1003, "multimachine.multifurnace", "Multi Smelter").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_BlastFurnace.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "FFF", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_HeatProof, Character.valueOf('F'), OreDictNames.craftingFurnace, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_VacuumFreezer.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PPP", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_FrostProof, Character.valueOf('P'), ItemList.Electric_Pump_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_ImplosionCompressor.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "OOO", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_SolidSteel, Character.valueOf('O'), OrePrefixes.stone.get(Materials.Obsidian), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_Furnace.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "FFF", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_HeatProof, Character.valueOf('F'), OreDictNames.craftingFurnace, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnnealedCopper) });
+
+ ItemList.Machine_Multi_LargeBoiler_Bronze.set(new GT_MetaTileEntity_LargeBoiler_Bronze(1020, "multimachine.boiler.bronze", "Large Bronze Boiler").getStackForm(1L));
+ ItemList.Machine_Multi_LargeBoiler_Steel.set(new GT_MetaTileEntity_LargeBoiler_Steel(1021, "multimachine.boiler.steel", "Large Steel Boiler").getStackForm(1L));
+ ItemList.Machine_Multi_LargeBoiler_Titanium.set(new GT_MetaTileEntity_LargeBoiler_Titanium(1022, "multimachine.boiler.titanium", "Large Titanium Boiler").getStackForm(1L));
+ ItemList.Machine_Multi_LargeBoiler_TungstenSteel.set(new GT_MetaTileEntity_LargeBoiler_TungstenSteel(1023, "multimachine.boiler.tungstensteel", "Large Tungstensteel Boiler").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_LargeBoiler_Bronze.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_Firebox_Bronze, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_LargeBoiler_Steel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_Firebox_Steel, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_LargeBoiler_Titanium.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_Firebox_Titanium, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_LargeBoiler_TungstenSteel.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_Firebox_TungstenSteel, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Aluminium) });
+
+
+
+ ItemList.Generator_Diesel_LV.set(new GT_MetaTileEntity_DieselGenerator(1110, "basicgenerator.diesel.tier.01", "Basic Diesel Generator", 1).getStackForm(1L));
+ ItemList.Generator_Diesel_MV.set(new GT_MetaTileEntity_DieselGenerator(1111, "basicgenerator.diesel.tier.02", "Advanced Diesel Generator", 2).getStackForm(1L));
+ ItemList.Generator_Diesel_HV.set(new GT_MetaTileEntity_DieselGenerator(1112, "basicgenerator.diesel.tier.03", "Turbo Diesel Generator", 3).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Diesel_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('P'), ItemList.Electric_Piston_LV, Character.valueOf('E'), ItemList.Electric_Motor_LV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Diesel_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('P'), ItemList.Electric_Piston_MV, Character.valueOf('E'), ItemList.Electric_Motor_MV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.Aluminium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Diesel_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('P'), ItemList.Electric_Piston_HV, Character.valueOf('E'), ItemList.Electric_Motor_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('G'), OrePrefixes.gearGt.get(Materials.StainlessSteel) });
+
+ ItemList.Generator_Gas_Turbine_LV.set(new GT_MetaTileEntity_GasTurbine(1115, "basicgenerator.gasturbine.tier.01", "Basic Gas Turbine", 1).getStackForm(1L));
+ ItemList.Generator_Gas_Turbine_MV.set(new GT_MetaTileEntity_GasTurbine(1116, "basicgenerator.gasturbine.tier.02", "Advanced Gas Turbine", 2).getStackForm(1L));
+ ItemList.Generator_Gas_Turbine_HV.set(new GT_MetaTileEntity_GasTurbine(1117, "basicgenerator.gasturbine.tier.03", "Turbo Gas Turbine", 3).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Gas_Turbine_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CRC", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('E'), ItemList.Electric_Motor_LV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Tin), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Gas_Turbine_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CRC", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('E'), ItemList.Electric_Motor_MV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Bronze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Gas_Turbine_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CRC", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('E'), ItemList.Electric_Motor_HV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Steel), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold) });
+
+ ItemList.Generator_Steam_Turbine_LV.set(new GT_MetaTileEntity_SteamTurbine(1120, "basicgenerator.steamturbine.tier.01", "Basic Steam Turbine", 1).getStackForm(1L));
+ ItemList.Generator_Steam_Turbine_MV.set(new GT_MetaTileEntity_SteamTurbine(1121, "basicgenerator.steamturbine.tier.02", "Advanced Steam Turbine", 2).getStackForm(1L));
+ ItemList.Generator_Steam_Turbine_HV.set(new GT_MetaTileEntity_SteamTurbine(1122, "basicgenerator.steamturbine.tier.03", "Turbo Steam Turbine", 3).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Steam_Turbine_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('E'), ItemList.Electric_Motor_LV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Tin), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Basic), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Tin), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Bronze) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Steam_Turbine_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('E'), ItemList.Electric_Motor_MV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Bronze), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Good), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.AnyCopper), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.Steel) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Steam_Turbine_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "RMR", "EWE", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('E'), ItemList.Electric_Motor_HV, Character.valueOf('R'), OrePrefixes.rotor.get(Materials.Steel), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('W'), OrePrefixes.cableGt01.get(Materials.Gold), Character.valueOf('P'), OrePrefixes.pipeMedium.get(Materials.StainlessSteel) });
+
+ ItemList.Generator_Naquadah_Mark_I.set(new GT_MetaTileEntity_SolidNaquadahReactor(1190, "basicgenerator.naquadah.tier.04", "Naquadah Reactor Mark I", 4).getStackForm(1L));
+ ItemList.Generator_Naquadah_Mark_II.set(new GT_MetaTileEntity_SolidNaquadahReactor(1191, "basicgenerator.naquadah.tier.05", "Naquadah Reactor Mark II", 5).getStackForm(1L));
+ ItemList.Generator_Naquadah_Fluid.set(new GT_MetaTileEntity_FluidNaquadahReactor(1192, "basicgenerator.naquadah.tier.06", "Naquadah Reactor Mark III", 6).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Naquadah_Mark_I.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "UCU", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('F'), ItemList.Field_Generator_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Aluminium), Character.valueOf('U'), OrePrefixes.stick.get(Materials.Uranium235) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Naquadah_Mark_II.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('F'), ItemList.Field_Generator_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tungsten), Character.valueOf('P'), OrePrefixes.stick.get(Materials.Plutonium241) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Naquadah_Fluid.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "NCN", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('F'), ItemList.Field_Generator_LuV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Osmium), Character.valueOf('N'), OrePrefixes.stick.get(Materials.NaquadahEnriched) });
+
+ ItemList.MagicEnergyConverter_LV.set(new GT_MetaTileEntity_MagicEnergyConverter(1123, "basicgenerator.magicenergyconverter.tier.01", "Novice Magic Energy Converter",1).getStackForm(1L));
+ ItemList.MagicEnergyConverter_MV.set(new GT_MetaTileEntity_MagicEnergyConverter(1124, "basicgenerator.magicenergyconverter.tier.02", "Adept Magic Energy Converter",2).getStackForm(1L));
+ ItemList.MagicEnergyConverter_HV.set(new GT_MetaTileEntity_MagicEnergyConverter(1125, "basicgenerator.magicenergyconverter.tier.03", "Master Magic Energy Converter",3).getStackForm(1L));
+
+
+ ItemList.MagicEnergyAbsorber_LV.set(new GT_MetaTileEntity_MagicalEnergyAbsorber(1127, "basicgenerator.magicenergyabsorber.tier.01", "Novice Magic Energy Absorber",1).getStackForm(1L));
+ ItemList.MagicEnergyAbsorber_MV.set(new GT_MetaTileEntity_MagicalEnergyAbsorber(1128, "basicgenerator.magicenergyabsorber.tier.02", "Adept Magic Energy Absorber",2).getStackForm(1L));
+ ItemList.MagicEnergyAbsorber_HV.set(new GT_MetaTileEntity_MagicalEnergyAbsorber(1129, "basicgenerator.magicenergyabsorber.tier.03", "Master Magic Energy Absorber",3).getStackForm(1L));
+ ItemList.MagicEnergyAbsorber_EV.set(new GT_MetaTileEntity_MagicalEnergyAbsorber(1130, "basicgenerator.magicenergyabsorber.tier.04", "Grandmaster Magic Energy Absorber",4).getStackForm(1L));
+ if (!Loader.isModLoaded("Thaumcraft")){
+
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyConverter_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('B'), new ItemStack(Blocks.beacon), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('T'), ItemList.Field_Generator_LV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Platinum) });
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('B'), new ItemStack(Blocks.beacon), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Data), Character.valueOf('T'), ItemList.Field_Generator_MV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Iridium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyConverter_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('B'), new ItemStack(Blocks.beacon), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('T'), ItemList.Field_Generator_HV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Neutronium) });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyAbsorber_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('B'), ItemList.MagicEnergyConverter_LV.get(1L, new Object[0]), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Advanced), Character.valueOf('T'), ItemList.Field_Generator_LV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Platinum) });
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyAbsorber_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('B'), ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Data), Character.valueOf('T'), ItemList.Field_Generator_MV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Iridium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyAbsorber_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('B'), ItemList.MagicEnergyConverter_MV.get(1L, new Object[0]), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Elite), Character.valueOf('T'), ItemList.Field_Generator_HV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Europium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.MagicEnergyAbsorber_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('B'), ItemList.MagicEnergyConverter_HV.get(1L, new Object[0]), Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('T'), ItemList.Field_Generator_EV, Character.valueOf('F'), OrePrefixes.plate.get(Materials.Neutronium) });
+ }
+
+ ItemList.FusionComputer_LuV.set(new GT_MetaTileEntity_FusionComputer1(1193, "fusioncomputer.tier.06", "Fusion Control Computer Mark I").getStackForm(1L));
+ ItemList.FusionComputer_ZPMV.set(new GT_MetaTileEntity_FusionComputer2(1194, "fusioncomputer.tier.07", "Fusion Control Computer Mark II").getStackForm(1L));
+ ItemList.FusionComputer_UV.set(new GT_MetaTileEntity_FusionComputer3(1195, "fusioncomputer.tier.08", "Fusion Control Computer Mark III").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Fusion.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('F'), ItemList.Casing_LuV });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Fusion2.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "PhP", "PFP", "PwP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Americium), Character.valueOf('F'), ItemList.Casing_Fusion });
+ GT_ModHandler.addCraftingRecipe(ItemList.Casing_Fusion_Coil.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CTC", 'M', ItemList.Casing_Coil_Superconductor, 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Field_Generator_MV, 'T', ItemList.Neutron_Reflector });
+
+ GT_ModHandler.addCraftingRecipe(ItemList.FusionComputer_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Casing_Fusion_Coil, 'B', OrePrefixes.plate.get(Materials.NetherStar), 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Field_Generator_IV, 'T', OrePrefixes.plate.get(Materials.Plutonium241) });
+ GT_ModHandler.addCraftingRecipe(ItemList.FusionComputer_ZPMV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CBC", "FMF", "CBC", 'M', ItemList.FusionComputer_LuV, 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Field_Generator_IV, 'B', OrePrefixes.plate.get(Materials.Europium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.FusionComputer_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CBC", "FMF", "CBC", 'M', ItemList.FusionComputer_ZPMV, 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Field_Generator_IV, 'B', OrePrefixes.plate.get(Materials.Americium) });
+
+ ItemList.Generator_Plasma_IV.set(new GT_MetaTileEntity_PlasmaGenerator(1196, "basicgenerator.plasmagenerator.tier.05", "Plasma Generator Mark I",4).getStackForm(1L));
+ ItemList.Generator_Plasma_LuV.set(new GT_MetaTileEntity_PlasmaGenerator(1197, "basicgenerator.plasmagenerator.tier.06", "Plasma Generator Mark II",5).getStackForm(1L));
+ ItemList.Generator_Plasma_ZPMV.set(new GT_MetaTileEntity_PlasmaGenerator(1198, "basicgenerator.plasmagenerator.tier.07", "Plasma Generator Mark III",6).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Plasma_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "UCU", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('F'), ItemList.Field_Generator_HV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.cableGt04.get(Materials.Tungsten), Character.valueOf('U'), OrePrefixes.stick.get(Materials.Plutonium241) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Plasma_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "UCU", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('F'), ItemList.Field_Generator_EV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Superconductor), Character.valueOf('U'), OrePrefixes.stick.get(Materials.Europium) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Generator_Plasma_ZPMV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "UCU", "FMF", "WCW", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('F'), ItemList.Field_Generator_IV, Character.valueOf('C'), OrePrefixes.circuit.get(Materials.Master), Character.valueOf('W'), OrePrefixes.wireGt04.get(Materials.Superconductor), Character.valueOf('U'), OrePrefixes.stick.get(Materials.Americium) });
+
+ ItemList.Processing_Array.set(new GT_MetaTileEntity_ProcessingArray(1199,"multimachine.processingarray","Processing Array").getStackForm(1L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Processing_Array.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_EV, 'B', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Robot_Arm_EV, 'T', ItemList.Energy_LapotronicOrb });
+
+ ItemList.Distillation_Tower.set(new GT_MetaTileEntity_DistillationTower(1126, "multimachine.distillationtower", "Distillation Tower").getStackForm(1L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Distillation_Tower.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CBC", "FMF", "CBC", 'M', ItemList.Hull_EV, 'B', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.Master), 'F', ItemList.Electric_Pump_EV});
+
+ ItemList.LargeSteamTurbine.set(new GT_MetaTileEntity_LargeTurbine_Steam(1131, "multimachine.largeturbine", "Large Steam Turbine").getStackForm(1L));
+ ItemList.LargeGasTurbine.set(new GT_MetaTileEntity_LargeTurbine_Gas(1151, "multimachine.largegasturbine", "Large Gas Turbine").getStackForm(1L));
+ ItemList.LargeHPSteamTurbine.set(new GT_MetaTileEntity_LargeTurbine_HPSteam(1152, "multimachine.largehpturbine", "Large High Pressure Steam Turbine").getStackForm(1L));
+ ItemList.LargePlasmaTurbine.set(new GT_MetaTileEntity_LargeTurbine_Plasma(1153, "multimachine.largeplasmaturbine", "Large Plasma Generator").getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.LargeSteamTurbine.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_HV, 'B', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.Advanced), 'P', OrePrefixes.gearGt.get(Materials.Steel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.LargeGasTurbine.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_EV, 'B', OrePrefixes.pipeLarge.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.Elite), 'P', OrePrefixes.gearGt.get(Materials.Titanium)});
+ GT_ModHandler.addCraftingRecipe(ItemList.LargeHPSteamTurbine.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_IV, 'B', OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.Master), 'P', OrePrefixes.gearGt.get(Materials.TungstenSteel)});
+ GT_ModHandler.addCraftingRecipe(ItemList.LargePlasmaTurbine.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_UV, 'B', OrePrefixes.pipeHuge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.Master), 'P', OrePrefixes.gearGt.get(Materials.TungstenSteel)});
+
+
+ ItemList.Pump_LV.set(new GT_MetaTileEntity_Pump(1140, "basicmachine.pump.tier.01", "Basic Pump",1).getStackForm(1L));
+ ItemList.Pump_MV.set(new GT_MetaTileEntity_Pump(1141, "basicmachine.pump.tier.02", "Advanced Pump",2).getStackForm(1L));
+ ItemList.Pump_HV.set(new GT_MetaTileEntity_Pump(1142, "basicmachine.pump.tier.03", "Advanced Pump II",3).getStackForm(1L));
+ ItemList.Pump_EV.set(new GT_MetaTileEntity_Pump(1143, "basicmachine.pump.tier.04", "Advanced Pump III",4).getStackForm(1L));
+ ItemList.Pump_IV.set(new GT_MetaTileEntity_Pump(1144, "basicmachine.pump.tier.05", "Advanced Pump IV",5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Pump_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_LV, 'B', OrePrefixes.pipeLarge.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.Basic), 'P', ItemList.Electric_Pump_LV});
+ GT_ModHandler.addCraftingRecipe(ItemList.Pump_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_MV, 'B', OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.Good), 'P', ItemList.Electric_Pump_MV});
+ GT_ModHandler.addCraftingRecipe(ItemList.Pump_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_HV, 'B', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.Advanced), 'P', ItemList.Electric_Pump_HV});
+ GT_ModHandler.addCraftingRecipe(ItemList.Pump_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_EV, 'B', OrePrefixes.pipeLarge.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.Data), 'P', ItemList.Electric_Pump_EV});
+ GT_ModHandler.addCraftingRecipe(ItemList.Pump_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BPB", 'M', ItemList.Hull_IV, 'B', OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.Elite), 'P', ItemList.Electric_Pump_IV});
+
+ ItemList.Teleporter.set(new GT_MetaTileEntity_Teleporter(1145, "basicmachine.teleporter", "Teleporter",6).getStackForm(1L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Teleporter.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CPC", "PMP", "BCB", 'M', ItemList.Hull_LuV, 'B', ItemList.Tool_DataOrb, 'C', OrePrefixes.circuit.get(Materials.Master), 'P', ItemList.Field_Generator_EV});
+
+ ItemList.MobRep_LV.set(new GT_MetaTileEntity_MonsterRepellent(1146, "basicmachine.mobrep.tier.01", "Basic Monster Repellator",1).getStackForm(1L));
+ ItemList.MobRep_MV.set(new GT_MetaTileEntity_MonsterRepellent(1147, "basicmachine.mobrep.tier.02", "Advanced Monster Repellator",2).getStackForm(1L));
+ ItemList.MobRep_HV.set(new GT_MetaTileEntity_MonsterRepellent(1148, "basicmachine.mobrep.tier.03", "Advanced Monster Repellator II",3).getStackForm(1L));
+ ItemList.MobRep_EV.set(new GT_MetaTileEntity_MonsterRepellent(1149, "basicmachine.mobrep.tier.04", "Advanced Monster Repellator III",4).getStackForm(1L));
+ ItemList.MobRep_IV.set(new GT_MetaTileEntity_MonsterRepellent(1150, "basicmachine.mobrep.tier.05", "Advanced Monster Repellator IV",5).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.MobRep_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_LV, 'E', ItemList.Emitter_LV.get(1L, new Object[0]), 'C', OrePrefixes.circuit.get(Materials.Basic)});
+ GT_ModHandler.addCraftingRecipe(ItemList.MobRep_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_MV, 'E', ItemList.Emitter_MV.get(1L, new Object[0]), 'C', OrePrefixes.circuit.get(Materials.Good)});
+ GT_ModHandler.addCraftingRecipe(ItemList.MobRep_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_HV, 'E', ItemList.Emitter_HV.get(1L, new Object[0]), 'C', OrePrefixes.circuit.get(Materials.Advanced)});
+ GT_ModHandler.addCraftingRecipe(ItemList.MobRep_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_EV, 'E', ItemList.Emitter_EV.get(1L, new Object[0]), 'C', OrePrefixes.circuit.get(Materials.Data)});
+ GT_ModHandler.addCraftingRecipe(ItemList.MobRep_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_IV, 'E', ItemList.Emitter_IV.get(1L, new Object[0]), 'C', OrePrefixes.circuit.get(Materials.Elite)});
+
+ ItemList.Machine_Multi_HeatExchanger.set(new GT_MetaTileEntity_HeatExchanger(1154, "multimachine.heatexchanger", "Large Heat Exchanger").getStackForm(1L));
+ GT_ModHandler.addCraftingRecipe(ItemList.Machine_Multi_HeatExchanger.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "CMC", "WCW", Character.valueOf('M'), ItemList.Casing_Pipe_Titanium, Character.valueOf('C'), OrePrefixes.pipeMedium.get(Materials.Titanium), Character.valueOf('W'), ItemList.Electric_Pump_EV});
+}
+
+ private static void run4()
+ {
+ for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) {
+ if (((GregTech_API.sGeneratedMaterials[i] != null) && ((GregTech_API.sGeneratedMaterials[i].mTypes & 0x2) != 0)) || (GregTech_API.sGeneratedMaterials[i] == Materials.Wood)) {
+ new GT_MetaPipeEntity_Frame(4096 + i, "GT_Frame_" + GregTech_API.sGeneratedMaterials[i], GregTech_API.sGeneratedMaterials[i].mDefaultLocalName + " Frame Box", GregTech_API.sGeneratedMaterials[i]);
+ }
+ }
+ boolean bEC = !GT_Mod.gregtechproxy.mHardcoreCables;
+
+ makeWires(Materials.Cobalt, 1200, bEC ? 2L : 2L, bEC ? 4L : 4L, 2L, gregtech.api.enums.GT_Values.V[1], true, false);
+ makeWires(Materials.Lead, 1220, bEC ? 2L : 2L, bEC ? 4L : 4L, 2L, gregtech.api.enums.GT_Values.V[1], true, false);
+ makeWires(Materials.Tin, 1240, bEC ? 1L : 1L, bEC ? 2L : 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false);
+ makeWires(Materials.Zinc, 1260, bEC ? 1L : 1L, bEC ? 2L : 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false);
+ makeWires(Materials.SolderingAlloy, 1280, bEC ? 1L : 1L, bEC ? 2L : 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false);
+
+ makeWires(Materials.Iron, 1300, bEC ? 3L : 4L, bEC ? 6L : 8L, 2L, gregtech.api.enums.GT_Values.V[2], true, false);
+ makeWires(Materials.Nickel, 1320, bEC ? 3L : 5L, bEC ? 6L : 10L, 3L, gregtech.api.enums.GT_Values.V[2], true, false);
+ makeWires(Materials.Cupronickel, 1340, bEC ? 3L : 4L, bEC ? 6L : 8L, 2L, gregtech.api.enums.GT_Values.V[2], true, false);
+ makeWires(Materials.Copper, 1360, bEC ? 2L : 3L, bEC ? 4L : 6L, 1L, gregtech.api.enums.GT_Values.V[2], true, false);
+ makeWires(Materials.AnnealedCopper, 1380, bEC ? 1L : 2L, bEC ? 2L : 4L, 1L, gregtech.api.enums.GT_Values.V[2], true, false);
+
+ makeWires(Materials.Kanthal, 1400, bEC ? 3L : 8L, bEC ? 6L : 16L, 4L, gregtech.api.enums.GT_Values.V[3], true, false);
+ makeWires(Materials.Gold, 1420, bEC ? 2L : 6L, bEC ? 4L : 12L, 3L, gregtech.api.enums.GT_Values.V[3], true, false);
+ makeWires(Materials.Electrum, 1440, bEC ? 2L : 5L, bEC ? 4L : 10L, 2L, gregtech.api.enums.GT_Values.V[3], true, false);
+ makeWires(Materials.Silver, 1460, bEC ? 1L : 4L, bEC ? 2L : 8L, 1L, gregtech.api.enums.GT_Values.V[3], true, false);
+ makeWires(Materials.BlueAlloy, 1480, bEC ? 1L : 4L, bEC ? 2L : 8L, 2L, gregtech.api.enums.GT_Values.V[3], true, false);
+
+ makeWires(Materials.Nichrome, 1500, bEC ? 4L : 32L, bEC ? 8L : 64L, 3L, gregtech.api.enums.GT_Values.V[4], true, false);
+ makeWires(Materials.Steel, 1520, bEC ? 2L : 16L, bEC ? 4L : 32L, 2L, gregtech.api.enums.GT_Values.V[4], true, false);
+ makeWires(Materials.TungstenSteel, 1540, bEC ? 2L : 14L, bEC ? 4L : 28L, 3L, gregtech.api.enums.GT_Values.V[4], true, false);
+ makeWires(Materials.Tungsten, 1560, bEC ? 2L : 12L, bEC ? 4L : 24L, 4L, gregtech.api.enums.GT_Values.V[4], true, false);
+ makeWires(Materials.Aluminium, 1580, bEC ? 1L : 8L, bEC ? 2L : 16L, 1L, gregtech.api.enums.GT_Values.V[4], true, false);
+
+ makeWires(Materials.Graphene, 1600, bEC ? 1L : 16L, bEC ? 2L : 32L, 1L, gregtech.api.enums.GT_Values.V[5], false, true);
+ makeWires(Materials.Osmium, 1620, bEC ? 2L : 32L, bEC ? 4L : 64L, 4L, gregtech.api.enums.GT_Values.V[5], true, false);
+ makeWires(Materials.Platinum, 1640, bEC ? 1L : 16L, bEC ? 2L : 32L, 2L, gregtech.api.enums.GT_Values.V[5], true, false);
+
+ makeWires(Materials.Naquadah, 1700, bEC ? 1L : 64L, bEC ? 2L : 128L, 4L, gregtech.api.enums.GT_Values.V[6], true, false);
+ makeWires(Materials.NiobiumTitanium, 1720, bEC ? 2L : 128L, bEC ? 4L : 256L, 4L, gregtech.api.enums.GT_Values.V[6], true, false);
+ makeWires(Materials.VanadiumGallium, 1740, bEC ? 2L : 128L, bEC ? 4L : 256L, 4L, gregtech.api.enums.GT_Values.V[6], true, false);
+ makeWires(Materials.YttriumBariumCuprate, 1760, bEC ? 4L : 256L, bEC ? 8L : 512L, 4L, gregtech.api.enums.GT_Values.V[6], true, false);
+
+ makeWires(Materials.RedAlloy, 2000, 0L, 1L, 1L, gregtech.api.enums.GT_Values.V[0], true, false);
+
+ makeWires(Materials.Superconductor, 2020, 1L, 1L, 4L, gregtech.api.enums.GT_Values.V[9], false, true);
+ if(!GT_Mod.gregtechproxy.mDisableIC2Cables){
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("copperCableItem", 2L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "xP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyCopper) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("goldCableItem", 4L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "xP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Gold) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("ironCableItem", 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "xP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.AnyIron) });
+ GT_ModHandler.addCraftingRecipe(GT_ModHandler.getIC2Item("tinCableItem", 3L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "xP", Character.valueOf('P'), OrePrefixes.plate.get(Materials.Tin) });
+ }
+
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.Wood), new GT_MetaPipeEntity_Fluid(5101, "GT_Pipe_Wood_Small", "Small Wooden Fluid Pipe", 0.375F, Materials.Wood, 10, 350, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Wood), new GT_MetaPipeEntity_Fluid(5102, "GT_Pipe_Wood", "Wooden Fluid Pipe", 0.5F, Materials.Wood, 30, 350, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Wood), new GT_MetaPipeEntity_Fluid(5103, "GT_Pipe_Wood_Large", "Large Wooden Fluid Pipe", 0.75F, Materials.Wood, 60, 350, false).getStackForm(1L));
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.Copper), new GT_MetaPipeEntity_Fluid(5110, "GT_Pipe_Copper_Tiny", "Tiny Copper Fluid Pipe", 0.25F, Materials.Copper, 10, 1000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.Copper), new GT_MetaPipeEntity_Fluid(5111, "GT_Pipe_Copper_Small", "Small Copper Fluid Pipe", 0.375F, Materials.Copper, 20, 1000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Copper), new GT_MetaPipeEntity_Fluid(5112, "GT_Pipe_Copper", "Copper Fluid Pipe", 0.5F, Materials.Copper, 60, 1000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Copper), new GT_MetaPipeEntity_Fluid(5113, "GT_Pipe_Copper_Large", "Large Copper Fluid Pipe", 0.75F, Materials.Copper, 120, 1000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Copper), new GT_MetaPipeEntity_Fluid(5114, "GT_Pipe_Copper_Huge", "Huge Copper Fluid Pipe", 1.0F, Materials.Copper, 240, 1000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.Bronze), new GT_MetaPipeEntity_Fluid(5120, "GT_Pipe_Bronze_Tiny", "Tiny Bronze Fluid Pipe", 0.25F, Materials.Bronze, 20, 2000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.Bronze), new GT_MetaPipeEntity_Fluid(5121, "GT_Pipe_Bronze_Small", "Small Bronze Fluid Pipe", 0.375F, Materials.Bronze, 40, 2000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Bronze), new GT_MetaPipeEntity_Fluid(5122, "GT_Pipe_Bronze", "Bronze Fluid Pipe", 0.5F, Materials.Bronze, 120, 2000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Bronze), new GT_MetaPipeEntity_Fluid(5123, "GT_Pipe_Bronze_Large", "Large Bronze Fluid Pipe", 0.75F, Materials.Bronze, 240, 2000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Bronze), new GT_MetaPipeEntity_Fluid(5124, "GT_Pipe_Bronze_Huge", "Huge Bronze Fluid Pipe", 1.0F, Materials.Bronze, 480, 2000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.Steel), new GT_MetaPipeEntity_Fluid(5130, "GT_Pipe_Steel_Tiny", "Tiny Steel Fluid Pipe", 0.25F, Materials.Steel, 40, 2500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.Steel), new GT_MetaPipeEntity_Fluid(5131, "GT_Pipe_Steel_Small", "Small Steel Fluid Pipe", 0.375F, Materials.Steel, 80, 2500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Steel), new GT_MetaPipeEntity_Fluid(5132, "GT_Pipe_Steel", "Steel Fluid Pipe", 0.5F, Materials.Steel, 240, 2500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Steel), new GT_MetaPipeEntity_Fluid(5133, "GT_Pipe_Steel_Large", "Large Steel Fluid Pipe", 0.75F, Materials.Steel, 480, 2500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Steel), new GT_MetaPipeEntity_Fluid(5134, "GT_Pipe_Steel_Huge", "Huge Steel Fluid Pipe", 1.0F, Materials.Steel, 960, 2500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.StainlessSteel), new GT_MetaPipeEntity_Fluid(5140, "GT_Pipe_StainlessSteel_Tiny", "Tiny Stainless Steel Fluid Pipe", 0.25F, Materials.StainlessSteel, 60, 3000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.StainlessSteel), new GT_MetaPipeEntity_Fluid(5141, "GT_Pipe_StainlessSteel_Small", "Small Stainless Steel Fluid Pipe", 0.375F, Materials.StainlessSteel, 120, 3000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.StainlessSteel), new GT_MetaPipeEntity_Fluid(5142, "GT_Pipe_StainlessSteel", "Stainless Steel Fluid Pipe", 0.5F, Materials.StainlessSteel, 360, 3000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.StainlessSteel), new GT_MetaPipeEntity_Fluid(5143, "GT_Pipe_StainlessSteel_Large", "Large Stainless Steel Fluid Pipe", 0.75F, Materials.StainlessSteel, 720, 3000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.StainlessSteel), new GT_MetaPipeEntity_Fluid(5144, "GT_Pipe_StainlessSteel_Huge", "Huge Stainless Steel Fluid Pipe", 1.0F, Materials.StainlessSteel, 1440, 3000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.Titanium), new GT_MetaPipeEntity_Fluid(5150, "GT_Pipe_Titanium_Tiny", "Tiny Titanium Fluid Pipe", 0.25F, Materials.Titanium, 80, 5000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.Titanium), new GT_MetaPipeEntity_Fluid(5151, "GT_Pipe_Titanium_Small", "Small Titanium Fluid Pipe", 0.375F, Materials.Titanium, 160, 5000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Titanium), new GT_MetaPipeEntity_Fluid(5152, "GT_Pipe_Titanium", "Titanium Fluid Pipe", 0.5F, Materials.Titanium, 480, 5000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Titanium), new GT_MetaPipeEntity_Fluid(5153, "GT_Pipe_Titanium_Large", "Large Titanium Fluid Pipe", 0.75F, Materials.Titanium, 960, 5000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Titanium), new GT_MetaPipeEntity_Fluid(5154, "GT_Pipe_Titanium_Huge", "Huge Titanium Fluid Pipe", 1.0F, Materials.Titanium, 1920, 5000, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeTiny.get(Materials.TungstenSteel), new GT_MetaPipeEntity_Fluid(5160, "GT_Pipe_TungstenSteel_Tiny", "Tiny Tungstensteel Fluid Pipe", 0.25F, Materials.TungstenSteel, 100, 12500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeSmall.get(Materials.TungstenSteel), new GT_MetaPipeEntity_Fluid(5161, "GT_Pipe_TungstenSteel_Small", "Small Tungstensteel Fluid Pipe", 0.375F, Materials.TungstenSteel, 200, 12500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.TungstenSteel), new GT_MetaPipeEntity_Fluid(5162, "GT_Pipe_TungstenSteel", "Tungstensteel Fluid Pipe", 0.5F, Materials.TungstenSteel, 600, 12500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.TungstenSteel), new GT_MetaPipeEntity_Fluid(5163, "GT_Pipe_TungstenSteel_Large", "Large Tungstensteel Fluid Pipe", 0.75F, Materials.TungstenSteel, 1200, 12500, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.TungstenSteel), new GT_MetaPipeEntity_Fluid(5164, "GT_Pipe_TungstenSteel_Huge", "Huge Tungstensteel Fluid Pipe", 1.0F, Materials.TungstenSteel, 2400, 12500, true).getStackForm(1L));
+
+
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Brass), new GT_MetaPipeEntity_Item(5602, "GT_Pipe_Brass", "Brass Item Pipe", 0.5F, Materials.Brass, 1, 32768, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Brass), new GT_MetaPipeEntity_Item(5603, "GT_Pipe_Brass_Large", "Large Brass Item Pipe", 0.75F, Materials.Brass, 2, 16384, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Brass), new GT_MetaPipeEntity_Item(5604, "GT_Pipe_Brass_Huge", "Huge Brass Item Pipe", 1.0F, Materials.Brass, 4, 8192, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveMedium.get(Materials.Brass), new GT_MetaPipeEntity_Item(5607, "GT_Pipe_Restrictive_Brass", "Restrictive Brass Item Pipe", 0.5F, Materials.Brass, 1, 3276800, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveLarge.get(Materials.Brass), new GT_MetaPipeEntity_Item(5608, "GT_Pipe_Restrictive_Brass_Large", "Large Restrictive Brass Item Pipe", 0.75F, Materials.Brass, 2, 1638400, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveHuge.get(Materials.Brass), new GT_MetaPipeEntity_Item(5609, "GT_Pipe_Restrictive_Brass_Huge", "Huge Restrictive Brass Item Pipe", 1.0F, Materials.Brass, 4, 819200, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5612, "GT_Pipe_Electrum", "Electrum Item Pipe", 0.5F, Materials.Electrum, 2, 16384, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5613, "GT_Pipe_Electrum_Large", "Large Electrum Item Pipe", 0.75F, Materials.Electrum, 4, 8192, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5614, "GT_Pipe_Electrum_Huge", "Huge Electrum Item Pipe", 1.0F, Materials.Electrum, 8, 4096, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveMedium.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5617, "GT_Pipe_Restrictive_Electrum", "Restrictive Electrum Item Pipe", 0.5F, Materials.Electrum, 2, 1638400, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveLarge.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5618, "GT_Pipe_Restrictive_Electrum_Large", "Large Restrictive Electrum Item Pipe", 0.75F, Materials.Electrum, 4, 819200, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveHuge.get(Materials.Electrum), new GT_MetaPipeEntity_Item(5619, "GT_Pipe_Restrictive_Electrum_Huge", "Huge Restrictive Electrum Item Pipe", 1.0F, Materials.Electrum, 8, 409600, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5622, "GT_Pipe_Platinum", "Platinum Item Pipe", 0.5F, Materials.Platinum, 4, 8192, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5623, "GT_Pipe_Platinum_Large", "Large Platinum Item Pipe", 0.75F, Materials.Platinum, 8, 4096, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5624, "GT_Pipe_Platinum_Huge", "Huge Platinum Item Pipe", 1.0F, Materials.Platinum, 16, 2048, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveMedium.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5627, "GT_Pipe_Restrictive_Platinum", "Restrictive Platinum Item Pipe", 0.5F, Materials.Platinum, 4, 819200, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveLarge.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5628, "GT_Pipe_Restrictive_Platinum_Large", "Large Restrictive Platinum Item Pipe", 0.75F, Materials.Platinum, 8, 409600, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveHuge.get(Materials.Platinum), new GT_MetaPipeEntity_Item(5629, "GT_Pipe_Restrictive_Platinum_Huge", "Huge Restrictive Platinum Item Pipe", 1.0F, Materials.Platinum, 16, 204800, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeMedium.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5632, "GT_Pipe_Osmium", "Osmium Item Pipe", 0.5F, Materials.Osmium, 8, 4096, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeLarge.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5633, "GT_Pipe_Osmium_Large", "Large Osmium Item Pipe", 0.75F, Materials.Osmium, 16, 2048, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeHuge.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5634, "GT_Pipe_Osmium_Huge", "Huge Osmium Item Pipe", 1.0F, Materials.Osmium, 32, 1024, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveMedium.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5637, "GT_Pipe_Restrictive_Osmium", "Restrictive Osmium Item Pipe", 0.5F, Materials.Osmium, 8, 409600, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveLarge.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5638, "GT_Pipe_Restrictive_Osmium_Large", "Large Restrictive Osmium Item Pipe", 0.75F, Materials.Osmium, 16, 204800, true).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.pipeRestrictiveHuge.get(Materials.Osmium), new GT_MetaPipeEntity_Item(5639, "GT_Pipe_Restrictive_Osmium_Huge", "Huge Restrictive Osmium Item Pipe", 1.0F, Materials.Osmium, 32, 102400, true).getStackForm(1L));
+
+
+
+ ItemList.Automation_ChestBuffer_ULV.set(new GT_MetaTileEntity_ChestBuffer(9230, "automation.chestbuffer.tier.00", "Ultra Low Voltage Chest Buffer", 0).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_LV.set(new GT_MetaTileEntity_ChestBuffer(9231, "automation.chestbuffer.tier.01", "Low Voltage Chest Buffer", 1).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_MV.set(new GT_MetaTileEntity_ChestBuffer(9232, "automation.chestbuffer.tier.02", "Medium Voltage Chest Buffer", 2).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_HV.set(new GT_MetaTileEntity_ChestBuffer(9233, "automation.chestbuffer.tier.03", "High Voltage Chest Buffer", 3).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_EV.set(new GT_MetaTileEntity_ChestBuffer(9234, "automation.chestbuffer.tier.04", "Extreme Voltage Chest Buffer", 4).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_IV.set(new GT_MetaTileEntity_ChestBuffer(9235, "automation.chestbuffer.tier.05", "Insane Voltage Chest Buffer", 5).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_LuV.set(new GT_MetaTileEntity_ChestBuffer(9236, "automation.chestbuffer.tier.06", "Ludicrous Voltage Chest Buffer", 6).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_ZPM.set(new GT_MetaTileEntity_ChestBuffer(9237, "automation.chestbuffer.tier.07", "ZPM Voltage Chest Buffer", 7).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_UV.set(new GT_MetaTileEntity_ChestBuffer(9238, "automation.chestbuffer.tier.08", "Ultimate Voltage Chest Buffer", 8).getStackForm(1L));
+ ItemList.Automation_ChestBuffer_MAX.set(new GT_MetaTileEntity_ChestBuffer(9239, "automation.chestbuffer.tier.09", "MAX Voltage Chest Buffer", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('V'), ItemList.Conveyor_Module_MV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('V'), ItemList.Conveyor_Module_HV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('V'), ItemList.Conveyor_Module_EV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('V'), ItemList.Conveyor_Module_IV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('V'), ItemList.Conveyor_Module_LuV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('V'), ItemList.Conveyor_Module_ZPM, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_ChestBuffer_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+
+ ItemList.Automation_Filter_ULV.set(new GT_MetaTileEntity_Filter(9240, "automation.filter.tier.00", "Ultra Low Voltage Item Filter", 0).getStackForm(1L));
+ ItemList.Automation_Filter_LV.set(new GT_MetaTileEntity_Filter(9241, "automation.filter.tier.01", "Low Voltage Item Filter", 1).getStackForm(1L));
+ ItemList.Automation_Filter_MV.set(new GT_MetaTileEntity_Filter(9242, "automation.filter.tier.02", "Medium Voltage Item Filter", 2).getStackForm(1L));
+ ItemList.Automation_Filter_HV.set(new GT_MetaTileEntity_Filter(9243, "automation.filter.tier.03", "High Voltage Item Filter", 3).getStackForm(1L));
+ ItemList.Automation_Filter_EV.set(new GT_MetaTileEntity_Filter(9244, "automation.filter.tier.04", "Extreme Voltage Item Filter", 4).getStackForm(1L));
+ ItemList.Automation_Filter_IV.set(new GT_MetaTileEntity_Filter(9245, "automation.filter.tier.05", "Insane Voltage Item Filter", 5).getStackForm(1L));
+ ItemList.Automation_Filter_LuV.set(new GT_MetaTileEntity_Filter(9246, "automation.filter.tier.06", "Ludicrous Voltage Item Filter", 6).getStackForm(1L));
+ ItemList.Automation_Filter_ZPM.set(new GT_MetaTileEntity_Filter(9247, "automation.filter.tier.07", "ZPM Voltage Item Filter", 7).getStackForm(1L));
+ ItemList.Automation_Filter_UV.set(new GT_MetaTileEntity_Filter(9248, "automation.filter.tier.08", "Ultimate Voltage Item Filter", 8).getStackForm(1L));
+ ItemList.Automation_Filter_MAX.set(new GT_MetaTileEntity_Filter(9249, "automation.filter.tier.09", "MAX Voltage Item Filter", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('V'), ItemList.Conveyor_Module_MV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('V'), ItemList.Conveyor_Module_HV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('V'), ItemList.Conveyor_Module_EV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('V'), ItemList.Conveyor_Module_IV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('V'), ItemList.Conveyor_Module_LuV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('V'), ItemList.Conveyor_Module_ZPM, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Filter_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Basic) });
+
+ ItemList.Automation_TypeFilter_ULV.set(new GT_MetaTileEntity_TypeFilter(9250, "automation.typefilter.tier.00", "Ultra Low Voltage Type Filter", 0).getStackForm(1L));
+ ItemList.Automation_TypeFilter_LV.set(new GT_MetaTileEntity_TypeFilter(9251, "automation.typefilter.tier.01", "Low Voltage Type Filter", 1).getStackForm(1L));
+ ItemList.Automation_TypeFilter_MV.set(new GT_MetaTileEntity_TypeFilter(9252, "automation.typefilter.tier.02", "Medium Voltage Type Filter", 2).getStackForm(1L));
+ ItemList.Automation_TypeFilter_HV.set(new GT_MetaTileEntity_TypeFilter(9253, "automation.typefilter.tier.03", "High Voltage Type Filter", 3).getStackForm(1L));
+ ItemList.Automation_TypeFilter_EV.set(new GT_MetaTileEntity_TypeFilter(9254, "automation.typefilter.tier.04", "Extreme Voltage Type Filter", 4).getStackForm(1L));
+ ItemList.Automation_TypeFilter_IV.set(new GT_MetaTileEntity_TypeFilter(9255, "automation.typefilter.tier.05", "Insane Voltage Type Filter", 5).getStackForm(1L));
+ ItemList.Automation_TypeFilter_LuV.set(new GT_MetaTileEntity_TypeFilter(9256, "automation.typefilter.tier.06", "Ludicrous Voltage Type Filter", 6).getStackForm(1L));
+ ItemList.Automation_TypeFilter_ZPM.set(new GT_MetaTileEntity_TypeFilter(9257, "automation.typefilter.tier.07", "ZPM Voltage Type Filter", 7).getStackForm(1L));
+ ItemList.Automation_TypeFilter_UV.set(new GT_MetaTileEntity_TypeFilter(9258, "automation.typefilter.tier.08", "Ultimate Voltage Type Filter", 8).getStackForm(1L));
+ ItemList.Automation_TypeFilter_MAX.set(new GT_MetaTileEntity_TypeFilter(9259, "automation.typefilter.tier.09", "MAX Voltage Type Filter", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('V'), ItemList.Conveyor_Module_MV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('V'), ItemList.Conveyor_Module_HV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('V'), ItemList.Conveyor_Module_EV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('V'), ItemList.Conveyor_Module_IV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('V'), ItemList.Conveyor_Module_LuV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('V'), ItemList.Conveyor_Module_ZPM, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_TypeFilter_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { " F ", "CMV", " X ", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+
+ ItemList.Automation_Regulator_ULV.set(new GT_MetaTileEntity_Regulator(9270, "automation.regulator.tier.00", "Ultra Low Voltage Regulator", 0).getStackForm(1L));
+ ItemList.Automation_Regulator_LV.set(new GT_MetaTileEntity_Regulator(9271, "automation.regulator.tier.01", "Low Voltage Regulator", 1).getStackForm(1L));
+ ItemList.Automation_Regulator_MV.set(new GT_MetaTileEntity_Regulator(9272, "automation.regulator.tier.02", "Medium Voltage Regulator", 2).getStackForm(1L));
+ ItemList.Automation_Regulator_HV.set(new GT_MetaTileEntity_Regulator(9273, "automation.regulator.tier.03", "High Voltage Regulator", 3).getStackForm(1L));
+ ItemList.Automation_Regulator_EV.set(new GT_MetaTileEntity_Regulator(9274, "automation.regulator.tier.04", "Extreme Voltage Regulator", 4).getStackForm(1L));
+ ItemList.Automation_Regulator_IV.set(new GT_MetaTileEntity_Regulator(9275, "automation.regulator.tier.05", "Insane Voltage Regulator", 5).getStackForm(1L));
+ ItemList.Automation_Regulator_LuV.set(new GT_MetaTileEntity_Regulator(9276, "automation.regulator.tier.06", "Ludicrous Voltage Regulator", 6).getStackForm(1L));
+ ItemList.Automation_Regulator_ZPM.set(new GT_MetaTileEntity_Regulator(9277, "automation.regulator.tier.07", "ZPM Voltage Regulator", 7).getStackForm(1L));
+ ItemList.Automation_Regulator_UV.set(new GT_MetaTileEntity_Regulator(9278, "automation.regulator.tier.08", "Ultimate Voltage Regulator", 8).getStackForm(1L));
+ ItemList.Automation_Regulator_MAX.set(new GT_MetaTileEntity_Regulator(9279, "automation.regulator.tier.09", "MAX Voltage Regulator", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('V'), ItemList.Robot_Arm_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('V'), ItemList.Robot_Arm_LV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('V'), ItemList.Robot_Arm_MV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('V'), ItemList.Robot_Arm_HV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('V'), ItemList.Robot_Arm_EV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('V'), ItemList.Robot_Arm_IV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('V'), ItemList.Robot_Arm_LuV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('V'), ItemList.Robot_Arm_ZPM, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('V'), ItemList.Robot_Arm_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_Regulator_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "XFX", "VMV", "XCX", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('V'), ItemList.Robot_Arm_UV, Character.valueOf('C'), OreDictNames.craftingChest, Character.valueOf('F'), OreDictNames.craftingFilter, Character.valueOf('X'), OrePrefixes.circuit.get(Materials.Advanced) });
+
+ ItemList.Automation_SuperBuffer_ULV.set(new GT_MetaTileEntity_SuperBuffer(9300, "automation.superbuffer.tier.00", "Ultra Low Voltage Super Buffer", 0).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_LV.set(new GT_MetaTileEntity_SuperBuffer(9301, "automation.superbuffer.tier.01", "Low Voltage Super Buffer", 1).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_MV.set(new GT_MetaTileEntity_SuperBuffer(9302, "automation.superbuffer.tier.02", "Medium Voltage Super Buffer", 2).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_HV.set(new GT_MetaTileEntity_SuperBuffer(9303, "automation.superbuffer.tier.03", "High Voltage Super Buffer", 3).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_EV.set(new GT_MetaTileEntity_SuperBuffer(9304, "automation.superbuffer.tier.04", "Extreme Voltage Super Buffer", 4).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_IV.set(new GT_MetaTileEntity_SuperBuffer(9305, "automation.superbuffer.tier.05", "Insane Voltage Super Buffer", 5).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_LuV.set(new GT_MetaTileEntity_SuperBuffer(9306, "automation.superbuffer.tier.06", "Ludicrous Voltage Super Buffer", 6).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_ZPM.set(new GT_MetaTileEntity_SuperBuffer(9307, "automation.superbuffer.tier.07", "ZPM Voltage Super Buffer", 7).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_UV.set(new GT_MetaTileEntity_SuperBuffer(9308, "automation.superbuffer.tier.08", "Ultimate Voltage Super Buffer", 8).getStackForm(1L));
+ ItemList.Automation_SuperBuffer_MAX.set(new GT_MetaTileEntity_SuperBuffer(9309, "automation.superbuffer.tier.09", "MAX Voltage Super Buffer", 9).getStackForm(1L));
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_ULV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_ULV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_LV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_LV, Character.valueOf('V'), ItemList.Conveyor_Module_LV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_MV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_MV, Character.valueOf('V'), ItemList.Conveyor_Module_MV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_HV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_HV, Character.valueOf('V'), ItemList.Conveyor_Module_HV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_EV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_EV, Character.valueOf('V'), ItemList.Conveyor_Module_EV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_IV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_IV, Character.valueOf('V'), ItemList.Conveyor_Module_IV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_LuV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_LuV, Character.valueOf('V'), ItemList.Conveyor_Module_LuV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_ZPM.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_ZPM, Character.valueOf('V'), ItemList.Conveyor_Module_ZPM, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_UV.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_UV, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_MAX.get(1L, new Object[0]), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "DMV", Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('V'), ItemList.Conveyor_Module_UV, Character.valueOf('D'), ItemList.Tool_DataOrb });
+ }
+
+ private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, long aVoltage, boolean aInsulatable, boolean aAutoInsulated)
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt01, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 0, "wire." + aMaterial.name().toLowerCase() + ".01", "1x " + aMaterial.mDefaultLocalName + " Wire", 0.125F, aMaterial, aLoss, 1L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt02, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 1, "wire." + aMaterial.name().toLowerCase() + ".02", "2x " + aMaterial.mDefaultLocalName + " Wire", 0.25F, aMaterial, aLoss, 2L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt04, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 2, "wire." + aMaterial.name().toLowerCase() + ".04", "4x " + aMaterial.mDefaultLocalName + " Wire", 0.375F, aMaterial, aLoss, 4L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt08, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 3, "wire." + aMaterial.name().toLowerCase() + ".08", "8x " + aMaterial.mDefaultLocalName + " Wire", 0.5F, aMaterial, aLoss, 8L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt12, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 4, "wire." + aMaterial.name().toLowerCase() + ".12", "12x " + aMaterial.mDefaultLocalName + " Wire", 0.75F, aMaterial, aLoss, 12L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.wireGt16, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 5, "wire." + aMaterial.name().toLowerCase() + ".16", "16x " + aMaterial.mDefaultLocalName + " Wire", 1.0F, aMaterial, aLoss, 16L * aAmperage, aVoltage, false, !aAutoInsulated).getStackForm(1L));
+ if (aInsulatable)
+ {
+ GT_OreDictUnificator.registerOre(OrePrefixes.cableGt01, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 6, "cable." + aMaterial.name().toLowerCase() + ".01", "1x " + aMaterial.mDefaultLocalName + " Cable", 0.25F, aMaterial, aLossInsulated, 1L * aAmperage, aVoltage, true, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.cableGt02, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 7, "cable." + aMaterial.name().toLowerCase() + ".02", "2x " + aMaterial.mDefaultLocalName + " Cable", 0.375F, aMaterial, aLossInsulated, 2L * aAmperage, aVoltage, true, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.cableGt04, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 8, "cable." + aMaterial.name().toLowerCase() + ".04", "4x " + aMaterial.mDefaultLocalName + " Cable", 0.5F, aMaterial, aLossInsulated, 4L * aAmperage, aVoltage, true, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.cableGt08, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 9, "cable." + aMaterial.name().toLowerCase() + ".08", "8x " + aMaterial.mDefaultLocalName + " Cable", 0.75F, aMaterial, aLossInsulated, 8L * aAmperage, aVoltage, true, false).getStackForm(1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.cableGt12, aMaterial, new GT_MetaPipeEntity_Cable(aStartID + 10, "cable." + aMaterial.name().toLowerCase() + ".12", "12x " + aMaterial.mDefaultLocalName + " Cable", 1.0F, aMaterial, aLossInsulated, 12L * aAmperage, aVoltage, true, false).getStackForm(1L));
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java b/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java
new file mode 100644
index 0000000000..5b6c29b47c
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java
@@ -0,0 +1,207 @@
+package gregtech.loaders.preload;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import java.io.PrintStream;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class GT_Loader_OreDictionary
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Register OreDict Entries of Non-GT-Items.");
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Empty, ItemList.Cell_Empty.get(1L, new Object[0]));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Lava, ItemList.Cell_Lava.get(1L, new Object[0]));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Lava, GT_ModHandler.getIC2Item("lavaCell", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Water, ItemList.Cell_Water.get(1L, new Object[0]));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Water, GT_ModHandler.getIC2Item("waterCell", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Creosote, GT_ModHandler.getModItem("Railcraft", "fluid.creosote.cell", 1L));
+
+
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.UUMatter, GT_ModHandler.getIC2Item("uuMatterCell", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.cell, Materials.ConstructionFoam, GT_ModHandler.getIC2Item("CFCell", 1L));
+
+ GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Empty, new ItemStack(Items.bucket, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Water, new ItemStack(Items.water_bucket, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Lava, new ItemStack(Items.lava_bucket, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Milk, new ItemStack(Items.milk_bucket, 1, 0));
+
+ GT_OreDictUnificator.set(OrePrefixes.bottle, Materials.Empty, new ItemStack(Items.glass_bottle, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.bottle, Materials.Water, new ItemStack(Items.potionitem, 1, 0));
+
+ GT_OreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Iridium, GT_ModHandler.getIC2Item("iridiumPlate", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Advanced, GT_ModHandler.getIC2Item("advancedAlloy", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Carbon, GT_ModHandler.getIC2Item("carbonPlate", 1L));
+
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Coal, new ItemStack(Blocks.coal_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Iron, new ItemStack(Blocks.iron_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Lapis, new ItemStack(Blocks.lapis_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.redstone_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.lit_redstone_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Gold, new ItemStack(Blocks.gold_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Diamond, new ItemStack(Blocks.diamond_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Emerald, new ItemStack(Blocks.emerald_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ore, Materials.NetherQuartz, new ItemStack(Blocks.quartz_ore, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Copper, GT_ModHandler.getIC2Item("copperIngot", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Tin, GT_ModHandler.getIC2Item("tinIngot", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Lead, GT_ModHandler.getIC2Item("leadIngot", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Bronze, GT_ModHandler.getIC2Item("bronzeIngot", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Silver, GT_ModHandler.getIC2Item("silverIngot", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Iridium, GT_ModHandler.getIC2Item("iridiumOre", 1L));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Lapis, new ItemStack(Items.dye, 1, 4));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.EnderEye, new ItemStack(Items.ender_eye, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.EnderPearl, new ItemStack(Items.ender_pearl, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Diamond, new ItemStack(Items.diamond, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Emerald, new ItemStack(Items.emerald, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Coal, new ItemStack(Items.coal, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Charcoal, new ItemStack(Items.coal, 1, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.NetherQuartz, new ItemStack(Items.quartz, 1));
+ GT_OreDictUnificator.set(OrePrefixes.gem, Materials.NetherStar, new ItemStack(Items.nether_star, 1));
+ GT_OreDictUnificator.set(OrePrefixes.nugget, Materials.Gold, new ItemStack(Items.gold_nugget, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Gold, new ItemStack(Items.gold_ingot, 1));
+ GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Iron, new ItemStack(Items.iron_ingot, 1));
+ GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Paper, new ItemStack(Items.paper, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Sugar, new ItemStack(Items.sugar, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Bone, ItemList.Dye_Bonemeal.get(1L, new Object[0]));
+ GT_OreDictUnificator.set(OrePrefixes.stick, Materials.Wood, new ItemStack(Items.stick, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Redstone, new ItemStack(Items.redstone, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Gunpowder, new ItemStack(Items.gunpowder, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Glowstone, new ItemStack(Items.glowstone_dust, 1));
+ GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Blaze, new ItemStack(Items.blaze_powder, 1));
+ GT_OreDictUnificator.set(OrePrefixes.stick, Materials.Blaze, new ItemStack(Items.blaze_rod, 1));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Iron, new ItemStack(Blocks.iron_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Gold, new ItemStack(Blocks.gold_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Diamond, new ItemStack(Blocks.diamond_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Emerald, new ItemStack(Blocks.emerald_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Lapis, new ItemStack(Blocks.lapis_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Coal, new ItemStack(Blocks.coal_block, 1, 0));
+ GT_OreDictUnificator.set(OrePrefixes.block, Materials.Redstone, new ItemStack(Blocks.redstone_block, 1, 0));
+ if (Blocks.ender_chest != null) {
+ GT_OreDictUnificator.registerOre(OreDictNames.enderChest, new ItemStack(Blocks.ender_chest, 1));
+ }
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingAnvil, new ItemStack(Blocks.anvil, 1));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingAnvil, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.anvil", 1L, 0));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingIndustrialDiamond, ItemList.IC2_Industrial_Diamond.get(1L, new Object[0]));
+ GT_OreDictUnificator.registerOre(OrePrefixes.dust, Materials.Wood, GT_ModHandler.getModItem("ThermalExpansion", "sawdust", 1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.glass, Materials.Reinforced, GT_ModHandler.getIC2Item("reinforcedGlass", 1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.glass, Materials.Reinforced, GT_ModHandler.getModItem("ThermalExpansion", "glassHardened", 1L));
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.cube", 1L, 6));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.cube", 1L, 7));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Basalt, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.brick.abyssal", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Marble, GT_ModHandler.getModItem("Railcraft", "tile.railcraft.brick.quarried", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(Blocks.obsidian, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.mossy_cobblestone, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.mossy_cobblestone, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.cobblestone, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneSmooth, new ItemStack(Blocks.stone, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneBricks, new ItemStack(Blocks.stonebrick, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.stonebrick, 1, 1));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneCracked, new ItemStack(Blocks.stonebrick, 1, 2));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stoneChiseled, new ItemStack(Blocks.stonebrick, 1, 3));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Sand, new ItemStack(Blocks.sandstone, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Netherrack, new ItemStack(Blocks.netherrack, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.NetherBrick, new ItemStack(Blocks.nether_brick, 1, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Endstone, new ItemStack(Blocks.end_stone, 1, 32767));
+
+ GT_OreDictUnificator.registerOre("paperResearchFragment", GT_ModHandler.getModItem("Thaumcraft", "ItemResource", 1L, 9));
+ GT_OreDictUnificator.registerOre("itemCertusQuartz", GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 1));
+ GT_OreDictUnificator.registerOre("itemNetherQuartz", GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10));
+ GT_OreDictUnificator.registerOre("itemCertusQuartz", GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 11));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingQuartz, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 1));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingQuartz, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 10));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingQuartz, GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiMaterial", 1L, 11));
+ GT_OreDictUnificator.registerOre("cropLemon", ItemList.FR_Lemon.get(1L, new Object[0]));
+ GT_OreDictUnificator.registerOre("cropCoffee", ItemList.IC2_CoffeeBeans.get(1L, new Object[0]));
+ GT_OreDictUnificator.registerOre("cropPotato", ItemList.Food_Raw_Potato.get(1L, new Object[0]));
+ GT_OreDictUnificator.registerOre("calclavia:BATTERY", GT_ModHandler.getIC2Item("reBattery", 1L));
+ GT_OreDictUnificator.registerOre("calclavia:BATTERY", GT_ModHandler.getIC2Item("chargedReBattery", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.Basic, GT_ModHandler.getIC2Item("reBattery", 1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.Basic, GT_ModHandler.getIC2Item("chargedReBattery", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.Advanced, GT_ModHandler.getIC2Item("advBattery", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.Elite, GT_ModHandler.getIC2Item("energyCrystal", 1L, 32767));
+ GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.Master, GT_ModHandler.getIC2Item("lapotronCrystal", 1L, 32767));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireGold, GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireIron, GT_ModHandler.getIC2Item("insulatedIronCableItem", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWireTin, GT_ModHandler.getIC2Item("insulatedTinCableItem", 1L, GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L)));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.redstone_torch, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.unlit_redstone_torch, 1, 32767));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWorkBench, new ItemStack(Blocks.crafting_table, 1));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingWorkBench, new ItemStack(GregTech_API.sBlockMachines, 1, 16));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.piston, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.sticky_piston, 1, 32767));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingSafe, new ItemStack(GregTech_API.sBlockMachines, 1, 45));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingSafe, GT_ModHandler.getIC2Item("personalSafe", 1L));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.chest, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.trapped_chest, 1, 32767));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.furnace, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.lit_furnace, 1, 32767));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingPump, GT_ModHandler.getIC2Item("pump", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingElectromagnet, GT_ModHandler.getIC2Item("magnetizer", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingTeleporter, GT_ModHandler.getIC2Item("teleporter", 1L));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingMacerator, GT_ModHandler.getIC2Item("macerator", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingMacerator, new ItemStack(GregTech_API.sBlockMachines, 1, 50));
+
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingExtractor, GT_ModHandler.getIC2Item("extractor", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingExtractor, new ItemStack(GregTech_API.sBlockMachines, 1, 51));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingCompressor, GT_ModHandler.getIC2Item("compressor", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingCompressor, new ItemStack(GregTech_API.sBlockMachines, 1, 52));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingRecycler, GT_ModHandler.getIC2Item("recycler", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingRecycler, new ItemStack(GregTech_API.sBlockMachines, 1, 53));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingIronFurnace, GT_ModHandler.getIC2Item("ironFurnace", 1L));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingCentrifuge, new ItemStack(GregTech_API.sBlockMachines, 1, 62));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingInductionFurnace, GT_ModHandler.getIC2Item("inductionFurnace", 1L));
+
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingElectricFurnace, GT_ModHandler.getIC2Item("electroFurnace", 1L));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingElectricFurnace, new ItemStack(GregTech_API.sBlockMachines, 1, 54));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingGenerator, GT_ModHandler.getIC2Item("generator", 1L));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingGeothermalGenerator, GT_ModHandler.getIC2Item("geothermalGenerator", 1L));
+
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingFeather, new ItemStack(Items.feather, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingFeather, GT_ModHandler.getModItem("TwilightForest", "item.tfFeather", 1L, 32767));
+
+ GT_OreDictUnificator.registerOre("itemWheat", new ItemStack(Items.wheat, 1, 32767));
+ GT_OreDictUnificator.registerOre("paperEmpty", new ItemStack(Items.paper, 1, 32767));
+ GT_OreDictUnificator.registerOre("paperMap", new ItemStack(Items.map, 1, 32767));
+ GT_OreDictUnificator.registerOre("paperMap", new ItemStack(Items.filled_map, 1, 32767));
+ GT_OreDictUnificator.registerOre("bookEmpty", new ItemStack(Items.book, 1, 32767));
+ GT_OreDictUnificator.registerOre("bookWritable", new ItemStack(Items.writable_book, 1, 32767));
+ GT_OreDictUnificator.registerOre("bookWritten", new ItemStack(Items.written_book, 1, 32767));
+ GT_OreDictUnificator.registerOre("bookEnchanted", new ItemStack(Items.enchanted_book, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.book, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.writable_book, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.written_book, 1, 32767));
+ GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.enchanted_book, 1, 32767));
+
+ GT_OreDictUnificator.registerOre(OrePrefixes.circuit, Materials.Basic, GT_ModHandler.getIC2Item("electronicCircuit", 1L));
+ GT_OreDictUnificator.registerOre(OrePrefixes.circuit, Materials.Advanced, GT_ModHandler.getIC2Item("advancedCircuit", 1L));
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java b/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java
new file mode 100644
index 0000000000..be1226f8ab
--- /dev/null
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java
@@ -0,0 +1,195 @@
+package gregtech.loaders.preload;
+
+import gregtech.api.util.GT_Log;
+import gregtech.loaders.oreprocessing.ProcessingAll;
+import gregtech.loaders.oreprocessing.ProcessingArrows;
+import gregtech.loaders.oreprocessing.ProcessingBattery;
+import gregtech.loaders.oreprocessing.ProcessingBeans;
+import gregtech.loaders.oreprocessing.ProcessingBlock;
+import gregtech.loaders.oreprocessing.ProcessingBolt;
+import gregtech.loaders.oreprocessing.ProcessingCell;
+import gregtech.loaders.oreprocessing.ProcessingCellPlasma;
+import gregtech.loaders.oreprocessing.ProcessingCircuit;
+import gregtech.loaders.oreprocessing.ProcessingCompressed;
+import gregtech.loaders.oreprocessing.ProcessingCrafting;
+import gregtech.loaders.oreprocessing.ProcessingCrop;
+import gregtech.loaders.oreprocessing.ProcessingCrushedCentrifuged;
+import gregtech.loaders.oreprocessing.ProcessingCrushedPurified;
+import gregtech.loaders.oreprocessing.ProcessingCrystallized;
+import gregtech.loaders.oreprocessing.ProcessingDirty;
+import gregtech.loaders.oreprocessing.ProcessingDust;
+import gregtech.loaders.oreprocessing.ProcessingDustImpure;
+import gregtech.loaders.oreprocessing.ProcessingDustSmall;
+import gregtech.loaders.oreprocessing.ProcessingDustTiny;
+import gregtech.loaders.oreprocessing.ProcessingDye;
+import gregtech.loaders.oreprocessing.ProcessingFoil;
+import gregtech.loaders.oreprocessing.ProcessingFood;
+import gregtech.loaders.oreprocessing.ProcessingGear;
+import gregtech.loaders.oreprocessing.ProcessingGearSmall;
+import gregtech.loaders.oreprocessing.ProcessingGem;
+import gregtech.loaders.oreprocessing.ProcessingGemChipped;
+import gregtech.loaders.oreprocessing.ProcessingGemExquisite;
+import gregtech.loaders.oreprocessing.ProcessingGemFlawed;
+import gregtech.loaders.oreprocessing.ProcessingGemFlawless;
+import gregtech.loaders.oreprocessing.ProcessingIngot1;
+import gregtech.loaders.oreprocessing.ProcessingIngot2;
+import gregtech.loaders.oreprocessing.ProcessingIngot3;
+import gregtech.loaders.oreprocessing.ProcessingIngot4;
+import gregtech.loaders.oreprocessing.ProcessingIngot5;
+import gregtech.loaders.oreprocessing.ProcessingIngotHot;
+import gregtech.loaders.oreprocessing.ProcessingItem;
+import gregtech.loaders.oreprocessing.ProcessingLeaves;
+import gregtech.loaders.oreprocessing.ProcessingLens;
+import gregtech.loaders.oreprocessing.ProcessingLog;
+import gregtech.loaders.oreprocessing.ProcessingNugget;
+import gregtech.loaders.oreprocessing.ProcessingOre;
+import gregtech.loaders.oreprocessing.ProcessingOrePoor;
+import gregtech.loaders.oreprocessing.ProcessingOreSmelting;
+import gregtech.loaders.oreprocessing.ProcessingPipeLarge;
+import gregtech.loaders.oreprocessing.ProcessingPipeMedium;
+import gregtech.loaders.oreprocessing.ProcessingPipeRestrictive;
+import gregtech.loaders.oreprocessing.ProcessingPipeSmall;
+import gregtech.loaders.oreprocessing.ProcessingPlank;
+import gregtech.loaders.oreprocessing.ProcessingPlate1;
+import gregtech.loaders.oreprocessing.ProcessingPlate2;
+import gregtech.loaders.oreprocessing.ProcessingPlate3;
+import gregtech.loaders.oreprocessing.ProcessingPlate4;
+import gregtech.loaders.oreprocessing.ProcessingPlate5;
+import gregtech.loaders.oreprocessing.ProcessingPlate9;
+import gregtech.loaders.oreprocessing.ProcessingPlateAlloy;
+import gregtech.loaders.oreprocessing.ProcessingPure;
+import gregtech.loaders.oreprocessing.ProcessingRecycling;
+import gregtech.loaders.oreprocessing.ProcessingSand;
+import gregtech.loaders.oreprocessing.ProcessingSaplings;
+import gregtech.loaders.oreprocessing.ProcessingShaping;
+import gregtech.loaders.oreprocessing.ProcessingSlab;
+import gregtech.loaders.oreprocessing.ProcessingStick;
+import gregtech.loaders.oreprocessing.ProcessingStickLong;
+import gregtech.loaders.oreprocessing.ProcessingStone;
+import gregtech.loaders.oreprocessing.ProcessingStoneCobble;
+import gregtech.loaders.oreprocessing.ProcessingStoneVarious;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadArrow;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadAxe;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadBuzzSaw;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadChainsaw;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadDrill;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadFile;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadHammer;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadHoe;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadPickaxe;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadPlow;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadSaw;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadSense;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadShovel;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadSword;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadUniversalSpade;
+import gregtech.loaders.oreprocessing.ProcessingToolHeadWrench;
+import gregtech.loaders.oreprocessing.ProcessingTransforming;
+import gregtech.loaders.oreprocessing.ProcessingWax;
+import gregtech.loaders.oreprocessing.ProcessingWire01;
+import gregtech.loaders.oreprocessing.ProcessingWire02;
+import gregtech.loaders.oreprocessing.ProcessingWire04;
+import gregtech.loaders.oreprocessing.ProcessingWire08;
+import gregtech.loaders.oreprocessing.ProcessingWire12;
+import gregtech.loaders.oreprocessing.ProcessingWire16;
+import java.io.PrintStream;
+
+public class GT_Loader_OreProcessing
+ implements Runnable
+{
+ public void run()
+ {
+ GT_Log.out.println("GT_Mod: Register Ore processing.");
+ new ProcessingAll();
+ new ProcessingArrows();
+ new ProcessingBattery();
+ new ProcessingBeans();
+ new ProcessingBlock();
+ new ProcessingBolt();
+ new ProcessingCell();
+ new ProcessingCellPlasma();
+ new ProcessingCircuit();
+ new ProcessingCompressed();
+ new ProcessingCrafting();
+ new ProcessingCrop();
+ new ProcessingCrushedPurified();
+ new ProcessingCrushedCentrifuged();
+ new ProcessingCrystallized();
+ new ProcessingDirty();
+ new ProcessingDust();
+ new ProcessingDustImpure();
+ new ProcessingDustSmall();
+ new ProcessingDustTiny();
+ new ProcessingDye();
+ new ProcessingFoil();
+ new ProcessingFood();
+ new ProcessingLens();
+ new ProcessingShaping();
+ new ProcessingGemChipped();
+ new ProcessingGemFlawed();
+ new ProcessingGem();
+ new ProcessingGemFlawless();
+ new ProcessingGemExquisite();
+ new ProcessingGear();
+ new ProcessingGearSmall();
+ new ProcessingIngot1();
+ new ProcessingIngot2();
+ new ProcessingIngot3();
+ new ProcessingIngot4();
+ new ProcessingIngot5();
+ new ProcessingIngotHot();
+ new ProcessingItem();
+ new ProcessingLeaves();
+ new ProcessingLog();
+ new ProcessingTransforming();
+ new ProcessingNugget();
+ new ProcessingOre();
+ new ProcessingOrePoor();
+ new ProcessingOreSmelting();
+ new ProcessingPipeSmall();
+ new ProcessingPipeMedium();
+ new ProcessingPipeLarge();
+ new ProcessingPipeRestrictive();
+ new ProcessingPlank();
+ new ProcessingPlate1();
+ new ProcessingPlate2();
+ new ProcessingPlate3();
+ new ProcessingPlate4();
+ new ProcessingPlate5();
+ new ProcessingPlate9();
+ new ProcessingPlateAlloy();
+ new ProcessingPure();
+ new ProcessingRecycling();
+ new ProcessingSand();
+ new ProcessingSaplings();
+ new ProcessingSlab();
+ new ProcessingStick();
+ new ProcessingStickLong();
+ new ProcessingStone();
+ new ProcessingStoneCobble();
+ new ProcessingStoneVarious();
+ new ProcessingToolHeadArrow();
+ new ProcessingToolHeadAxe();
+ new ProcessingToolHeadBuzzSaw();
+ new ProcessingToolHeadFile();
+ new ProcessingToolHeadHammer();
+ new ProcessingToolHeadHoe();
+ new ProcessingToolHeadPickaxe();
+ new ProcessingToolHeadSaw();
+ new ProcessingToolHeadSense();
+ new ProcessingToolHeadShovel();
+ new ProcessingToolHeadSword();
+ new ProcessingToolHeadPlow();
+ new ProcessingToolHeadDrill();
+ new ProcessingToolHeadChainsaw();
+ new ProcessingToolHeadWrench();
+ new ProcessingToolHeadUniversalSpade();
+ new ProcessingWax();
+ new ProcessingWire01();
+ new ProcessingWire02();
+ new ProcessingWire04();
+ new ProcessingWire08();
+ new ProcessingWire12();
+ new ProcessingWire16();
+ }
+}
diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
new file mode 100644
index 0000000000..54fa81a787
--- /dev/null
+++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
@@ -0,0 +1,858 @@
+package gregtech.nei;
+
+import codechicken.lib.gui.GuiDraw;
+import codechicken.nei.PositionedStack;
+import codechicken.nei.guihook.GuiContainerManager;
+import codechicken.nei.guihook.IContainerInputHandler;
+import codechicken.nei.guihook.IContainerTooltipHandler;
+import codechicken.nei.recipe.GuiCraftingRecipe;
+import codechicken.nei.recipe.GuiRecipe;
+import codechicken.nei.recipe.GuiUsageRecipe;
+import codechicken.nei.recipe.TemplateRecipeHandler;
+import codechicken.nei.recipe.TemplateRecipeHandler.CachedRecipe;
+import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRect;
+
+import com.google.common.collect.ListMultimap;
+
+import cpw.mods.fml.common.event.FMLInterModComms;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.objects.ItemData;
+import gregtech.api.objects.MaterialStack;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.GT_GUIContainer_FusionReactor;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.lwjgl.opengl.GL11;
+
+public class GT_NEI_DefaultHandler
+ extends TemplateRecipeHandler
+{
+ protected final GT_Recipe.GT_Recipe_Map mRecipeMap;
+ public static final int sOffsetX = 5;
+ public static final int sOffsetY = 11;
+
+ public GT_NEI_DefaultHandler(GT_Recipe.GT_Recipe_Map aRecipeMap)
+ {
+ this.mRecipeMap = aRecipeMap;
+ this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier(), new Object[0]));
+ if (!NEI_GT_Config.sIsAdded)
+ {
+ FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier());
+ GuiCraftingRecipe.craftinghandlers.add(this);
+ GuiUsageRecipe.usagehandlers.add(this);
+ }
+ }
+
+ public TemplateRecipeHandler newInstance()
+ {
+ return new GT_NEI_DefaultHandler(this.mRecipeMap);
+ }
+
+ public class FixedPositionedStack
+ extends PositionedStack
+ {
+ public boolean permutated = false;
+ public final int mChance;
+
+ public FixedPositionedStack(Object object, int x, int y)
+ {
+ this(object, x, y, 0);
+ }
+
+ public FixedPositionedStack(Object object, int x, int y, int aChance)
+ {
+ super(object,x, y, true);
+ this.mChance = aChance;
+ }
+
+ public void generatePermutations()
+ {
+ if (this.permutated) {
+ return;
+ }
+ ArrayList<ItemStack> tDisplayStacks = new ArrayList();
+ for (ItemStack tStack : this.items) {
+ if (GT_Utility.isStackValid(tStack)) {
+ if (tStack.getItemDamage() == 32767)
+ {
+ List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
+ if (!permutations.isEmpty())
+ {
+ ItemStack stack;
+ for (Iterator i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[] { stack }))) {
+ stack = (ItemStack)i$.next();
+ }
+ }
+ else
+ {
+ ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
+ base.stackTagCompound = tStack.stackTagCompound;
+ tDisplayStacks.add(base);
+ }
+ }
+ else
+ {
+ tDisplayStacks.add(GT_Utility.copy(new Object[] { tStack }));
+ }
+ }
+ }
+ this.items = ((ItemStack[])tDisplayStacks.toArray(new ItemStack[0]));
+ if (this.items.length == 0) {
+ this.items = new ItemStack[] { new ItemStack(Blocks.fire) };
+ }
+ this.permutated = true;
+ setPermutationToRender(0);
+ }
+ }
+
+ public class CachedDefaultRecipe
+ extends TemplateRecipeHandler.CachedRecipe
+ {
+ public final GT_Recipe mRecipe;
+ public final List<PositionedStack> mOutputs = new ArrayList();
+ public final List<PositionedStack> mInputs = new ArrayList();
+
+ public List<PositionedStack> getIngredients()
+ {
+ return getCycledIngredients(GT_NEI_DefaultHandler.this.cycleticks / 10, this.mInputs);
+ }
+
+ public PositionedStack getResult()
+ {
+ return null;
+ }
+
+ public List<PositionedStack> getOtherStacks()
+ {
+ return this.mOutputs;
+ }
+
+ public CachedDefaultRecipe(GT_Recipe aRecipe)
+ {
+ super();
+ this.mRecipe = aRecipe;
+
+ int tStartIndex = 0;
+ switch (GT_NEI_DefaultHandler.this.mRecipeMap.mUsualInputCount)
+ {
+ case 0:
+ break;
+ case 1:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 2:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 3:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 4:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 5:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 6:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 7:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ break;
+ case 8:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
+ }
+ tStartIndex++;
+ break;
+ default:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
+ }
+ tStartIndex++;
+ }
+ if (aRecipe.mSpecialItems != null) {
+ this.mInputs.add(new FixedPositionedStack( aRecipe.mSpecialItems, 120, 52));
+ }
+ tStartIndex = 0;
+ switch (GT_NEI_DefaultHandler.this.mRecipeMap.mUsualOutputCount)
+ {
+ case 0:
+ break;
+ case 1:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 2:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 3:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 4:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 5:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 6:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 7:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 8:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ default:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack( aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ }
+ if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
+ if((aRecipe.mFluidInputs.length > 1) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)){
+ this.mInputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
+ }
+ }
+ if(aRecipe.mFluidOutputs.length>1){
+ if(aRecipe.mFluidOutputs[0]!=null && (aRecipe.mFluidOutputs[0].getFluid() != null)){
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 120, 5));
+ }
+ if(aRecipe.mFluidOutputs[1]!=null && (aRecipe.mFluidOutputs[1].getFluid() != null)){
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 138, 5));
+ }
+ if(aRecipe.mFluidOutputs.length>2&&aRecipe.mFluidOutputs[2]!=null && (aRecipe.mFluidOutputs[2].getFluid() != null)){
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 102, 23));
+ }
+ if(aRecipe.mFluidOutputs.length>3&&aRecipe.mFluidOutputs[3]!=null && (aRecipe.mFluidOutputs[3].getFluid() != null)){
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 120, 23));
+ }
+ if(aRecipe.mFluidOutputs.length>4&&aRecipe.mFluidOutputs[4]!=null && (aRecipe.mFluidOutputs[4].getFluid() != null)){
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 138, 23));
+ }
+ }else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack( GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 52));
+ }
+ }
+ }
+
+ static
+ {
+ GuiContainerManager.addInputHandler(new GT_RectHandler());
+ GuiContainerManager.addTooltipHandler(new GT_RectHandler());
+ }
+
+ public static class GT_RectHandler
+ implements IContainerInputHandler, IContainerTooltipHandler
+ {
+ public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button)
+ {
+ if (canHandle(gui))
+ {
+ if (button == 0) {
+ return transferRect(gui, false);
+ }
+ if (button == 1) {
+ return transferRect(gui, true);
+ }
+ }
+ return false;
+ }
+
+ public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode)
+ {
+ return false;
+ }
+
+ public boolean canHandle(GuiContainer gui)
+ {
+ return (((gui instanceof GT_GUIContainer_BasicMachine)) && (GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine)gui).mNEI))||((gui instanceof GT_GUIContainer_FusionReactor)) && (GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor)gui).mNEI)));
+ }
+
+ public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip)
+ {
+ if ((canHandle(gui)) && (currenttip.isEmpty())){
+ if(gui instanceof GT_GUIContainer_BasicMachine && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine)gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine)gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1])))
+ {currenttip.add("Recipes");
+ }else if(gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor)gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor)gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1])))
+ {currenttip.add("Recipes");
+ }
+
+ }
+ return currenttip;
+ }
+
+ private boolean transferRect(GuiContainer gui, boolean usage)
+ {
+ if(gui instanceof GT_GUIContainer_BasicMachine){
+ return (canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine)gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine)gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine)gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine)gui).mNEI, new Object[0]));
+ }else if(gui instanceof GT_GUIContainer_FusionReactor){
+ return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor)gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor)gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor)gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor)gui).mNEI, new Object[0]));
+ }
+ return false;
+ }
+
+ public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip)
+ {
+ return currenttip;
+ }
+
+ public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey, List<String> currenttip)
+ {
+ return currenttip;
+ }
+
+ public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode)
+ {
+ return false;
+ }
+
+ public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {}
+
+ public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {}
+
+ public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {}
+
+ public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled)
+ {
+ return false;
+ }
+
+ public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {}
+
+ public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {}
+ }
+
+ public void loadCraftingRecipes(String outputId, Object... results)
+ {
+ if (outputId.equals(getOverlayIdentifier())) {
+ for (GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
+ if (!tRecipe.mHidden) {
+ this.arecipes.add(new CachedDefaultRecipe(tRecipe));
+ }
+ }
+ } else {
+ super.loadCraftingRecipes(outputId, results);
+ }
+ }
+
+ public void loadCraftingRecipes(ItemStack aResult)
+ {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
+
+ ArrayList<ItemStack> tResults = new ArrayList();
+ tResults.add(aResult);
+ tResults.add(GT_OreDictUnificator.get(true, aResult));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
+ if (tFluid != null)
+ {
+ tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tResults.add(GT_Utility.copy(new Object[] { tData.filledContainer }));
+ }
+ }
+ }
+ for (GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
+ if (!tRecipe.mHidden)
+ {
+ CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
+ for (ItemStack tStack : tResults) {
+ if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack))
+ {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public void loadUsageRecipes(ItemStack aInput)
+ {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
+
+ ArrayList<ItemStack> tInputs = new ArrayList();
+ tInputs.add(aInput);
+ tInputs.add(GT_OreDictUnificator.get(false, aInput));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
+ if (tFluid != null)
+ {
+ tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tInputs.add(GT_Utility.copy(new Object[] { tData.filledContainer }));
+ }
+ }
+ }
+ for (GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
+ if (!tRecipe.mHidden)
+ {
+ CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
+ for (ItemStack tStack : tInputs) {
+ if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack))
+ {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public String getOverlayIdentifier()
+ {
+ return this.mRecipeMap.mNEIName;
+ }
+
+ public void drawBackground(int recipe)
+ {
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GuiDraw.changeTexture(getGuiTexture());
+ GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
+ }
+
+ public static void drawText(int aX, int aY, String aString, int aColor)
+ {
+ Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
+ }
+
+ public int recipiesPerPage()
+ {
+ return 1;
+ }
+
+ public String getRecipeName()
+ {
+ return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
+ }
+
+ public String getGuiTexture()
+ {
+// return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
+ return this.mRecipeMap.mNEIGUIPath;
+ }
+
+ public List<String> handleItemTooltip(GuiRecipe gui, ItemStack aStack, List<String> currenttip, int aRecipeIndex)
+ {
+ TemplateRecipeHandler.CachedRecipe tObject = (TemplateRecipeHandler.CachedRecipe)this.arecipes.get(aRecipeIndex);
+ if ((tObject instanceof CachedDefaultRecipe))
+ {
+ CachedDefaultRecipe tRecipe = (CachedDefaultRecipe)tObject;
+ for (PositionedStack tStack : tRecipe.mOutputs) {
+ if (aStack == tStack.item)
+ {
+ if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack)tStack).mChance <= 0) || (((FixedPositionedStack)tStack).mChance == 10000)) {
+ break;
+ }
+ currenttip.add("Chance: " + ((FixedPositionedStack)tStack).mChance / 100 + "." + (((FixedPositionedStack)tStack).mChance % 100 < 10 ? "0" + ((FixedPositionedStack)tStack).mChance % 100 : Integer.valueOf(((FixedPositionedStack)tStack).mChance % 100)) + "%"); break;
+ }
+ }
+ for (PositionedStack tStack : tRecipe.mInputs) {
+ if (aStack == tStack.item)
+ {
+ if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
+ (tStack.item.stackSize != 0)) {
+ break;
+ }
+ currenttip.add("Does not get consumed in the process"); break;
+ }
+ }
+ }
+ return currenttip;
+ }
+
+ public void drawExtras(int aRecipeIndex)
+ {
+ int tEUt = ((CachedDefaultRecipe)this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
+ int tDuration = ((CachedDefaultRecipe)this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
+ if (tEUt != 0)
+ {
+ drawText(10, 73, "Total: " + tDuration * tEUt + " EU", -16777216);
+ drawText(10, 83, "Usage: " + tEUt + " EU/t", -16777216);
+ if (this.mRecipeMap.mShowVoltageAmperageInNEI)
+ {
+ drawText(10, 93, "Voltage: " + tEUt / this.mRecipeMap.mAmperage + " EU", -16777216);
+ drawText(10, 103, "Amperage: " + this.mRecipeMap.mAmperage, -16777216);
+ }
+ else
+ {
+ drawText(10, 93, "Voltage: unspecified", -16777216);
+ drawText(10, 103, "Amperage: unspecified", -16777216);
+ }
+ }
+ if (tDuration > 0) {
+ drawText(10, 113, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
+ }
+ if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
+ drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + ((CachedDefaultRecipe)this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/nei/NEI_GT_Config.java b/src/main/java/gregtech/nei/NEI_GT_Config.java
new file mode 100644
index 0000000000..c0d5c80ca1
--- /dev/null
+++ b/src/main/java/gregtech/nei/NEI_GT_Config.java
@@ -0,0 +1,31 @@
+package gregtech.nei;
+
+import codechicken.nei.api.IConfigureNEI;
+import gregtech.api.util.GT_Recipe;
+
+public class NEI_GT_Config
+ implements IConfigureNEI
+{
+ public static boolean sIsAdded = true;
+
+ public void loadConfig()
+ {
+ sIsAdded = false;
+ for (GT_Recipe.GT_Recipe_Map tMap : GT_Recipe.GT_Recipe_Map.sMappings) {
+ if (tMap.mNEIAllowed) {
+ new GT_NEI_DefaultHandler(tMap);
+ }
+ }
+ sIsAdded = true;
+ }
+
+ public String getName()
+ {
+ return "GregTech NEI Plugin";
+ }
+
+ public String getVersion()
+ {
+ return "(5.03a)";
+ }
+}