aboutsummaryrefslogtreecommitdiff
path: root/src/Java/miscutil/xmod/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/miscutil/xmod/gregtech/api')
-rw-r--r--src/Java/miscutil/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java22
-rw-r--r--src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_BasicMachine_Custom_Recipe.java623
-rw-r--r--src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_CustomRecipe_BasicMachine.java799
-rw-r--r--src/Java/miscutil/xmod/gregtech/api/util/GregtechRecipe.java19
4 files changed, 1460 insertions, 3 deletions
diff --git a/src/Java/miscutil/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java b/src/Java/miscutil/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
index b39c206ecd..32d370d4b1 100644
--- a/src/Java/miscutil/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
+++ b/src/Java/miscutil/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
@@ -31,6 +31,24 @@ public interface IGregtech_RecipeAdder {
* @param aEUt = EU needed for heating up (must be >= 0)
* @return true if the Recipe got added, otherwise false.
*/
- public boolean addMattrFabricatorRecipe(FluidStack aFluidInput, FluidStack aFluidOutput, int aDuration, int aEUt);
-
+ public boolean addMatterFabricatorRecipe(FluidStack aFluidInput, FluidStack aFluidOutput, int aDuration, int aEUt);
+
+
+
+
+ /**
+ * Adds a Recipe for the Sifter. (up to 9 Outputs)
+ *
+ * @param aFluidOutput = Output of the UU-Matter (not null, and respects StackSize)
+ * @param aFluidInput = fluid Input (can be UU_Amp or null, and respects StackSize)
+ * @param aDuration = Duration (must be >= 0)
+ * @param aEUt = EU needed for heating up (must be >= 0)
+ * @return true if the Recipe got added, otherwise false.
+ */
+
+ public boolean addDehydratorRecipe(ItemStack aInput, FluidStack aFluid, ItemStack[] aOutputItems, int aDuration, int aEUt);
+ public boolean addDehydratorRecipe(ItemStack aItemA, ItemStack aItemB, ItemStack[] aOutputItems, int aDuration, int aEUt);
+ public boolean addDehydratorRecipe(ItemStack aItemA, ItemStack aItemB, FluidStack aFluid, ItemStack[] aOutputItems, FluidStack aOutputFluid, int aDuration, int aEUt);
+
+
}
diff --git a/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_BasicMachine_Custom_Recipe.java b/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_BasicMachine_Custom_Recipe.java
new file mode 100644
index 0000000000..e051a54fb3
--- /dev/null
+++ b/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_BasicMachine_Custom_Recipe.java
@@ -0,0 +1,623 @@
+package miscutil.xmod.gregtech.api.metatileentity.implementations.base;
+
+import static gregtech.api.enums.GT_Values.V;
+import static gregtech.api.enums.GT_Values.W;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.Textures;
+import gregtech.api.enums.Tier;
+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_Utility;
+
+import java.util.Random;
+
+import miscutil.xmod.gregtech.api.util.GregtechRecipe.Gregtech_Recipe_Map;
+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!!!
+ * <p/>
+ * 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_MTE_BasicMachine_Custom_Recipe extends GT_MTE_CustomRecipe_BasicMachine {
+ private final Gregtech_Recipe_Map mRecipes;
+ private final int mTankCapacity, mSpecialEffect;
+ private final String mSound;
+ private final boolean mSharedTank, mRequiresFluidForFiltering;
+ private final byte mGUIParameterA, mGUIParameterB;
+ public GT_MTE_BasicMachine_Custom_Recipe(int aID, String aName, String aNameRegional, int aTier, String aDescription, Gregtech_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_MTE_BasicMachine_Custom_Recipe(String aName, int aTier, String aDescription, Gregtech_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_MTE_BasicMachine_Custom_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):(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;
+ }
+ }
+ }
+
+
+ public Gregtech_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;
+ }
+
+ 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;}
+} \ No newline at end of file
diff --git a/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_CustomRecipe_BasicMachine.java b/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_CustomRecipe_BasicMachine.java
new file mode 100644
index 0000000000..a3042a4144
--- /dev/null
+++ b/src/Java/miscutil/xmod/gregtech/api/metatileentity/implementations/base/GT_MTE_CustomRecipe_BasicMachine.java
@@ -0,0 +1,799 @@
+package miscutil.xmod.gregtech.api.metatileentity.implementations.base;
+
+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.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+
+import java.util.Arrays;
+
+import miscutil.xmod.gregtech.api.util.GregtechRecipe;
+import miscutil.xmod.gregtech.api.util.GregtechRecipe.Gregtech_Recipe_Map;
+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!!!
+ * <p/>
+ * 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_MTE_CustomRecipe_BasicMachine extends GT_MetaTileEntity_BasicTank {
+ /**
+ * 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;
+ private static final int OTHER_SLOT_COUNT = 4;
+ public final ItemStack[] mOutputItems;
+ public final int mInputSlotCount, mAmperage;
+ 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;
+ public String mGUIName = "", mNEIName = "";
+ private NBTTagCompound mRecipeStuff = new NBTTagCompound();
+ /**
+ * Contains the Recipe which has been previously used, or null if there was no previous Recipe, which could have been buffered
+ */
+ protected GregtechRecipe mLastRecipe = null;
+ private FluidStack mFluidOut;
+
+ /**
+ * @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_MTE_CustomRecipe_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_MTE_CustomRecipe_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 ==