diff options
author | Blood-Asp <bloodasphendrik@gmail.com> | 2016-10-23 12:15:42 +0200 |
---|---|---|
committer | Blood-Asp <bloodasphendrik@gmail.com> | 2016-10-23 12:15:42 +0200 |
commit | 13c8f127cda68d68009cbb1d80f6b01da07df09f (patch) | |
tree | dc0c13ad651db213c05b9e6cabd78a7129a7d0c7 /src/main/java/gregtech/api/metatileentity/implementations | |
parent | 4b29e30e75474cc601dc8e0f23b4b3ff49a19f5b (diff) | |
download | GT5-Unofficial-13c8f127cda68d68009cbb1d80f6b01da07df09f.tar.gz GT5-Unofficial-13c8f127cda68d68009cbb1d80f6b01da07df09f.tar.bz2 GT5-Unofficial-13c8f127cda68d68009cbb1d80f6b01da07df09f.zip |
Add Automatic Maintainance Hatch
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/implementations')
2 files changed, 86 insertions, 4 deletions
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 index 049f34dfba..6340939ee7 100644 --- 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 @@ -1,9 +1,17 @@ package gregtech.api.metatileentity.implementations; +import java.util.ArrayList; +import java.util.List; + 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.enums.Textures; +import gregtech.api.gui.GT_Container_2by2; import gregtech.api.gui.GT_Container_MaintenanceHatch; +import gregtech.api.gui.GT_GUIContainer_2by2; import gregtech.api.gui.GT_GUIContainer_MaintenanceHatch; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -18,20 +26,30 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import scala.actors.threadpool.Arrays; 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 boolean mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, mSolderingTool = false, mCrowbar = false, mAuto; + public GT_MetaTileEntity_MultiBlockBase mController = null; public GT_MetaTileEntity_Hatch_Maintenance(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 1, "For maintaining Multiblocks"); + mAuto = false; + } + + public GT_MetaTileEntity_Hatch_Maintenance(int aID, String aName, String aNameRegional, int aTier, boolean aAuto) { + super(aID, aName, aNameRegional, aTier, 4, "For automaticly maintaining Multiblocks"); + mAuto = aAuto; } - public GT_MetaTileEntity_Hatch_Maintenance(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); + public GT_MetaTileEntity_Hatch_Maintenance(String aName, int aTier, String aDescription, ITexture[][][] aTextures, boolean aAuto) { + super(aName, aTier, aAuto ? 4 : 1, aDescription, aTextures); + mAuto = aAuto; } @Override public String[] getDescription() { + if(mAuto)return new String[]{mDescription, "Cannot be shared between Multiblocks!","4 Ducttape, 2 Lubricant Cells","4 Steel Screws, 2 Adv Circuits","For each autorepair"}; return new String[]{mDescription, "Cannot be shared between Multiblocks!"}; } @@ -72,7 +90,8 @@ public class GT_MetaTileEntity_Hatch_Maintenance extends GT_MetaTileEntity_Hatch @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescription, mTextures); + if(aTileEntity.getMetaTileID()==111) return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescription, mTextures, true); + return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescription, mTextures, false); } @Override @@ -84,13 +103,70 @@ public class GT_MetaTileEntity_Hatch_Maintenance extends GT_MetaTileEntity_Hatch @Override public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + if(mAuto) return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity); return new GT_Container_MaintenanceHatch(aPlayerInventory, aBaseMetaTileEntity); } @Override public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + if(mAuto) return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, getLocalName()); return new GT_GUIContainer_MaintenanceHatch(aPlayerInventory, aBaseMetaTileEntity); } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aTimer % 100 == 0 && mController != null) { + if(!mController.mCrowbar || !mController.mHardHammer || !mController.mScrewdriver || !mController.mSoftHammer || !mController.mSolderingTool || !mController.mWrench){ + boolean tSuccess = true; + ItemStack[] mInputs = new ItemStack[]{ItemList.Duct_Tape.get(4, new Object[]{}),GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 2),GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 2)}; + List<ItemStack> aInputs = Arrays.asList(mInventory); + if (mInputs.length > 0 && aInputs == null) tSuccess = false; + int amt = 0; + for (ItemStack tStack : mInputs) { + if (tStack != null) { + amt = tStack.stackSize; + boolean temp = true; + for (ItemStack aStack : aInputs) { + if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) { + amt -= aStack.stackSize; + if (amt < 1) { + temp = false; + break; + } + } + } + if (temp) tSuccess = false; + } + } + if(tSuccess){ + for (ItemStack tStack : mInputs) { + if (tStack != null) { + amt = tStack.stackSize; + for (ItemStack aStack : aInputs) { + if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) { + if (aStack.stackSize < amt){ + amt -= aStack.stackSize; + aStack.stackSize = 0; + }else{ + aStack.stackSize -= amt; + amt = 0; + break; + } + } + } + } + } + this.mCrowbar = true; + this.mHardHammer = true; + this.mScrewdriver = true; + this.mSoftHammer = true; + this.mSolderingTool = true; + this.mWrench = true; + } + } + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer) { if (aStack == null || aPlayer == null) return; @@ -125,4 +201,8 @@ public class GT_MetaTileEntity_Hatch_Maintenance extends GT_MetaTileEntity_Hatch public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { return false; } + + public void setController(GT_MetaTileEntity_MultiBlockBase aController){ + mController = aController; + } } 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 index 14c324a8ee..b7e740cb6f 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java @@ -206,6 +206,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity { for (GT_MetaTileEntity_Hatch_Maintenance tHatch : mMaintenanceHatches) { if (isValidMetaTileEntity(tHatch)) { if (!this.disableMaintenance) { + tHatch.setController(this); if (tHatch.mWrench) mWrench = true; if (tHatch.mScrewdriver) mScrewdriver = true; if (tHatch.mSoftHammer) mSoftHammer = true; @@ -714,6 +715,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity { if (aMetaTileEntity == null) return false; if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + ((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity).setController(this); return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); } return false; |