diff options
15 files changed, 620 insertions, 349 deletions
| diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 12cad31cc5..155ebf459d 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -536,7 +536,7 @@ public enum ItemList implements IItemContainer {      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_Deprecated, Casing_Coil_Kanthal_Deprecated, Casing_Coil_Nichrome_Deprecated, 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, +    Casing_MiningOsmiridium, 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, @@ -632,7 +632,7 @@ public enum ItemList implements IItemContainer {      Casing_Coil_Cupronickel, Casing_Coil_Kanthal, Casing_Coil_Nichrome, Casing_Coil_TungstenSteel, Casing_Coil_HSSG, Casing_Coil_Naquadah, Casing_Coil_NaquadahAlloy,      MobRep_LV, MobRep_MV, MobRep_HV, MobRep_EV, MobRep_IV, MobRep_LuV, MobRep_ZPM, MobRep_UV, Cover_PlayerDetector, Machine_Multi_HeatExchanger,      Block_BronzePlate, Block_IridiumTungstensteel, Block_Plascrete, Block_TungstenSteelReinforced, -    Honeycomb, Charcoal_Pile, Block_BrittleCharcoal, Seismic_Prospector, Seismic_Prospector_Adv, OilDrill, AdvancedMiner2, PyrolyseOven, OilCracker, Crop_Drop_UUMBerry, Crop_Drop_UUABerry, Empty_Board_Basic, Empty_Board_Elite, +    Honeycomb, Charcoal_Pile, Block_BrittleCharcoal, Seismic_Prospector, Seismic_Prospector_Adv, OilDrill, OreDrill1, OreDrill2, OreDrill3, OreDrill4, PyrolyseOven, OilCracker, Crop_Drop_UUMBerry, Crop_Drop_UUABerry, Empty_Board_Basic, Empty_Board_Elite,      Battery_Charger_4by4_ULV, Battery_Charger_4by4_LV, Battery_Charger_4by4_MV, Battery_Charger_4by4_HV, Battery_Charger_4by4_EV, Battery_Charger_4by4_IV, Battery_Charger_4by4_LuV, Battery_Charger_4by4_ZPM, Battery_Charger_4by4_UV, Battery_Charger_4by4_MAX,      MicroTransmitter_HV, MicroTransmitter_EV, MicroTransmitter_IV, MicroTransmitter_LUV, MicroTransmitter_ZPM,      Crop_Drop_Bauxite, Crop_Drop_Ilmenite, Crop_Drop_Pitchblende, Crop_Drop_Uraninite, Crop_Drop_Thorium, Crop_Drop_Nickel, Crop_Drop_Zinc, Crop_Drop_Manganese, Crop_Drop_Scheelite, Crop_Drop_Platinum, Crop_Drop_Iridium, Crop_Drop_Osmium, Crop_Drop_Naquadah, Uraniumcell_1, Uraniumcell_2, Uraniumcell_4, Moxcell_1, Moxcell_2, Moxcell_4, diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index d2894ad7bd..565398010f 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -29,7 +29,7 @@ public class Textures {          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_COIL_SUPERCONDUCTOR,  -        MACHINE_BRONZEBLASTFURNACE, MACHINE_BRONZEBLASTFURNACE_ACTIVE, MACHINE_CASING_ROBUST_TUNGSTENSTEEL, MACHINE_CASING_CLEAN_STAINLESSSTEEL, MACHINE_CASING_STABLE_TITANIUM,  +        MACHINE_BRONZEBLASTFURNACE, MACHINE_BRONZEBLASTFURNACE_ACTIVE, MACHINE_CASING_ROBUST_TUNGSTENSTEEL, MACHINE_CASING_CLEAN_STAINLESSSTEEL, MACHINE_CASING_STABLE_TITANIUM, MACHINE_CASING_MINING_OSMIRIDIUM,           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,  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 3dd59126b8..bd10ca635c 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 @@ -35,7 +35,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {      public ItemStack[] mOutputItems = null;      public FluidStack[] mOutputFluids = null;      public String mNEI; -    public int damageFactorLow = 5; +        public int damageFactorLow = 5;      public float damageFactorHigh = 0.6f;      public ArrayList<GT_MetaTileEntity_Hatch_Input> mInputHatches = new ArrayList<GT_MetaTileEntity_Hatch_Input>(); @@ -393,6 +393,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {          return 6;      } +    public int getCurrentEfficiency(ItemStack itemStack) { +        int maxEff = getMaxEfficiency(itemStack); +        return maxEff - (getIdealStatus() - getRepairStatus()) * maxEff / 10; +    } +      public boolean doRandomMaintenanceDamage() {          if (!isCorrectMachinePart(mInventory[1]) || getRepairStatus() == 0) {              stopMachine(); diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 6c3289af30..59bc2a59ed 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -1950,6 +1950,11 @@ public class GT_Utility {          return result;      } +    @SuppressWarnings("unchecked") +    public static <T> T[] listToArray(List<T> list) { +        return (T[]) list.toArray(); +    } +      public static class ItemNBT {          public static void setNBT(ItemStack aStack, NBTTagCompound aNBT) {              if (aNBT == null) { diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java index 3c3535e4da..4d835869b6 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java @@ -37,6 +37,7 @@ public class GT_Block_Casings4          GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Titanium Turbine Casing");          GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Tungstensteel Turbine Casing");          GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Engine Intake Casing"); +        GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Mining Osmiridium Casing");          ItemList.Casing_RobustTungstenSteel.set(new ItemStack(this, 1, 0));          ItemList.Casing_CleanStainlessSteel.set(new ItemStack(this, 1, 1)); @@ -50,6 +51,7 @@ public class GT_Block_Casings4          ItemList.Casing_Turbine2.set(new ItemStack(this, 1, 11));          ItemList.Casing_Turbine3.set(new ItemStack(this, 1, 12));          ItemList.Casing_EngineIntake.set(new ItemStack(this, 1, 13)); +        ItemList.Casing_MiningOsmiridium.set(new ItemStack(this, 1, 14));      }      public IIcon getIcon(int aSide, int aMeta) { @@ -83,7 +85,7 @@ public class GT_Block_Casings4              case 13:                  return Textures.BlockIcons.MACHINE_CASING_ENGINE_INTAKE.getIcon();              case 14: -                return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); +                return Textures.BlockIcons.MACHINE_CASING_MINING_OSMIRIDIUM.getIcon();              case 15:                  return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();          } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AdvMiner2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AdvMiner2.java deleted file mode 100644 index 08d889b7e4..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AdvMiner2.java +++ /dev/null @@ -1,342 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -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_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.objects.ItemData; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import net.minecraft.block.Block; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.ChunkPosition; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import java.util.ArrayList; - -public class GT_MetaTileEntity_AdvMiner2 extends GT_MetaTileEntity_MultiBlockBase { - -    private final ArrayList<ChunkPosition> mMineList = new ArrayList(); - -    public GT_MetaTileEntity_AdvMiner2(int aID, String aName, String aNameRegional) { -        super(aID, aName, aNameRegional); -    } - -    public GT_MetaTileEntity_AdvMiner2(String aName) { -        super(aName); -    } - -    public String[] getDescription() { -        return new String[]{ -                "Controller Block for the Advanced Miner II", -                "Size(WxHxD): 3x7x3, Controller (Front middle bottom)", -                "3x1x3 Base of Solid Steel Casings", -                "1x3x1 Solid Steel Casing pillar (Center of base)", -                "1x3x1 Steel Frame Boxes (Each Steel pillar side and on top)", -                "1x Input Hatch (Any bottom layer casing)", -                "1x Output Bus (Any bottom layer casing)", -                "1x Maintenance Hatch (Any bottom layer casing)", -                "1x MV+ Energy Hatch (Any bottom layer casing)"}; -    } - -    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_ADVMINER2_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ADVMINER2)}; -        } -        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(), "AdvMiner2.png"); -    } - -    @Override -    public boolean checkRecipe(ItemStack aStack) { -        if (mInventory[1] == null || (mInventory[1].isItemEqual(GT_ModHandler.getIC2Item("miningPipe", 1L)) && mInventory[1].stackSize < mInventory[1].getMaxStackSize())) { -            ArrayList<ItemStack> tItems = getStoredInputs(); -            for (ItemStack tStack : tItems) { -                if (tStack.isItemEqual(GT_ModHandler.getIC2Item("miningPipe", 1L))) { -                    tStack.stackSize--; -                    if (tStack.stackSize < 1) { -                        tStack = null; -                    } -                    if (mInventory[1] == null) { -                        mInventory[1] = GT_ModHandler.getIC2Item("miningPipe", 1L); -                    } else { -                        mInventory[1].stackSize++; -                    } -                } - -            } -        } -        if (mInputHatches == null || mInputHatches.get(0).mFluid == null || mInputHatches.get(0).mFluid.getFluid().getID() != ItemList.sDrillingFluid.getID()) { -            return false; -        } -        FluidStack tFluid = mInputHatches.get(0).mFluid.copy(); -        if (tFluid == null) { -            return false; -        } -        if (tFluid.amount < 100) { -            return false; -        } -        tFluid.amount = 100; -        depleteInput(tFluid); -        long tVoltage = getMaxInputVoltage(); -        if (getBaseMetaTileEntity().getRandomNumber(20) == 0) { -            if (mMineList.isEmpty()) { -                int yLevel = getYOfPumpHead(); -                for (int i = -48; i < 49; i++) { -                    for (int f = -48; f < 49; f++) { -                        Block tBlock = getBaseMetaTileEntity().getBlockOffset(i, yLevel - getBaseMetaTileEntity().getYCoord(), f); -                        int tMetaID = getBaseMetaTileEntity().getMetaIDOffset(i, yLevel - getBaseMetaTileEntity().getYCoord(), f); -                        if (tBlock instanceof GT_Block_Ores_Abstract) { -                            TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityOffset(i, yLevel - getBaseMetaTileEntity().getYCoord(), f); -                            if ((tTileEntity!=null) && (tTileEntity instanceof GT_TileEntity_Ores) && ((GT_TileEntity_Ores) tTileEntity).mNatural == true && !mMineList.contains(new ChunkPosition(i, yLevel - getBaseMetaTileEntity().getYCoord(), f))) { -                                mMineList.add(new ChunkPosition(i, yLevel - getBaseMetaTileEntity().getYCoord(), f)); -                            } -                        } -                        else { -                            ItemData tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); -                            if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore"))) { -                                ChunkPosition cp = new ChunkPosition(i, yLevel - getBaseMetaTileEntity().getYCoord(), f); -                                if (!mMineList.contains(cp)) { -                                    mMineList.add(cp); -                                } -                            } -                        } -                    } -                } -            } -            if (mMineList.isEmpty()) { -                if(getBaseMetaTileEntity().getBlockOffset(ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetX, getYOfPumpHead() - 1 - getBaseMetaTileEntity().getYCoord(), ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetZ) != Blocks.bedrock){ -                    if (mEnergyHatches.size() > 0 && mEnergyHatches.get(0).getEUVar() > (512 + getMaxInputVoltage() * 4)) { -                        if (!moveOneDown()) -                            return false; -                    } -                }else{ -                    stopMachine(); -                    return false; -                } -            } -            ArrayList<ItemStack> tDrops = new ArrayList(); -            Block tMineBlock = null; -            ChunkPosition mle = null; -            int posX, posY, posZ, offX, offY, offZ; -            while ((tMineBlock==null || tMineBlock == Blocks.air) && !mMineList.isEmpty()) { -                mle = mMineList.get(0); -                mMineList.remove(0); -                tMineBlock = getBaseMetaTileEntity().getBlockOffset(mle.chunkPosX, mle.chunkPosY, mle.chunkPosZ); -            } -             -            if (tMineBlock!=null && tMineBlock!=Blocks.air) { -                posX = mle.chunkPosX + getBaseMetaTileEntity().getXCoord(); -                posY = mle.chunkPosY + getBaseMetaTileEntity().getYCoord(); -                posZ = mle.chunkPosZ + getBaseMetaTileEntity().getZCoord(); -                offX = mle.chunkPosX; -                offY = mle.chunkPosY; -                offZ = mle.chunkPosZ; - -                int metadata = getBaseMetaTileEntity().getMetaIDOffset(offX, offY, offZ); -                boolean silkTouch = tMineBlock.canSilkHarvest(getBaseMetaTileEntity().getWorld(), null, posX, posY, posZ, metadata); -                if (silkTouch){ -                    ItemStack IS = new ItemStack(tMineBlock); -                    IS.setItemDamage(metadata); -                    IS.stackSize=1; -                    tDrops.add(IS); -                } -                else{ -                    tDrops = tMineBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, metadata, 1); -                } - -                getBaseMetaTileEntity().getWorld().setBlockToAir(posX, posY, posZ); -                if (!tDrops.isEmpty()) { -                    ItemData tData = GT_OreDictUnificator.getItemData(tDrops.get(0).copy()); -                    if (tData.mPrefix != OrePrefixes.crushed && tData.mMaterial.mMaterial != Materials.Oilsands) { - -                        GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes.findRecipe(getBaseMetaTileEntity(), false, tVoltage, null, tDrops.get(0).copy()); -                        if (tRecipe != null) { -                            this.mOutputItems = new ItemStack[tRecipe.mOutputs.length]; -                            for (int g = 0; g < mOutputItems.length; g++) { -                                mOutputItems[g] = tRecipe.mOutputs[g].copy(); -                                if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(g)) { -                                    mOutputItems[g].stackSize *= getBaseMetaTileEntity().getRandomNumber(4) + 1; -                                } -                            } -                        } else { -                            this.mOutputItems = new ItemStack[tDrops.size()]; -                            for (int g = 0; g < mOutputItems.length; g++) { -                                mOutputItems[g] = tDrops.get(g).copy(); -                            } -                        } -                    } else { -                        this.mOutputItems = null; -                        ItemStack[] tStack = new ItemStack[tDrops.size()]; -                        for (int j = 0; j < tDrops.size(); j++) { -                            tStack[j] = tDrops.get(j).copy(); -                            tStack[j].stackSize = tStack[j].stackSize * (getBaseMetaTileEntity().getRandomNumber(4) + 1); -                        } -                        mOutputItems = tStack; -                    } -                } - -            } -        } - -        byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); -        this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); -        this.mEfficiencyIncrease = 10000; -        int tEU = 48; -        int tDuration = 24; -        if (tEU <= 16) { -            this.mEUt = (tEU * (1 << tTier - 1) * (1 << tTier - 1)); -            this.mMaxProgresstime = (tDuration / (1 << tTier - 1)); -        } else { -            this.mEUt = tEU; -            this.mMaxProgresstime = tDuration; -            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); -        return true; -    } - -    private boolean moveOneDown() { -        if ((this.mInventory[1] == null) || (this.mInventory[1].stackSize < 1) -                || (!GT_Utility.areStacksEqual(this.mInventory[1], GT_ModHandler.getIC2Item("miningPipe", 1L)))) { -        	stopMachine(); -            return false; -        } -        int xDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetX; -        int zDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetZ; -        int yHead = getYOfPumpHead(); -        if (yHead <= 0) { -        	stopMachine(); -            return false; -        } -        if (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord() + xDir, yHead - 1, getBaseMetaTileEntity().getZCoord() + zDir) == Blocks.bedrock) { -        	stopMachine(); -            return false; -        } -        if (!(getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord() + xDir, yHead - 1, getBaseMetaTileEntity().getZCoord() + zDir, GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))))) { -            stopMachine(); -        	return false; -        } -        if (yHead != getBaseMetaTileEntity().getYCoord()) { -            getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord() + xDir, yHead, getBaseMetaTileEntity().getZCoord() + zDir, GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipe", 1L))); -        } -        getBaseMetaTileEntity().decrStackSize(1, 1); -        return true; -    } - -    private int getYOfPumpHead() { -        int xDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetX; -        int zDir = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()).offsetZ; -        int y = getBaseMetaTileEntity().getYCoord() - 1; -        while (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord() + xDir, y, getBaseMetaTileEntity().getZCoord() + zDir) == GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipe", 1L))) { -            y--; -        } -        if (y == getBaseMetaTileEntity().getYCoord() - 1) { -            if (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord() + xDir, y, getBaseMetaTileEntity().getZCoord() + zDir) != GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))) { -                return y + 1; -            } -        } else if (getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord() + xDir, y, getBaseMetaTileEntity().getZCoord() + zDir) != GT_Utility -                .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L)) && this.mInventory[1] != null && this.mInventory[1].stackSize > 0 && GT_Utility.areStacksEqual(this.mInventory[1], GT_ModHandler.getIC2Item("miningPipe", 1L))) { -            getBaseMetaTileEntity().getWorld().setBlock(getBaseMetaTileEntity().getXCoord() + xDir, y, getBaseMetaTileEntity().getZCoord() + zDir, -                    GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 1L))); -            getBaseMetaTileEntity().decrStackSize(0, 1); -        } -        return y; -    } - -    @Override -    public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { -        int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX; -        int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ; -        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, 16)) && (!addInputToMachineList(tTileEntity, 16)) && (!addOutputToMachineList(tTileEntity, 16)) && (!addEnergyInputToMachineList(tTileEntity, 16))) { -                        if (aBaseMetaTileEntity.getBlockOffset(xDir + i, 0, zDir + j) != GregTech_API.sBlockCasings2) { -                            return false; -                        } -                        if (aBaseMetaTileEntity.getMetaIDOffset(xDir + i, 0, zDir + j) != 0) { -                            return false; -                        } -                    } -                } -            } -        } -        for (int y = 1; y < 4; y++) { -            if (aBaseMetaTileEntity.getBlockOffset(xDir, y, zDir) != GregTech_API.sBlockCasings2) { -                return false; -            } -            if (aBaseMetaTileEntity.getBlockOffset(xDir + 1, y, zDir) != GregTech_API.sBlockMachines) { -                return false; -            } -            if (aBaseMetaTileEntity.getBlockOffset(xDir - 1, y, zDir) != GregTech_API.sBlockMachines) { -                return false; -            } -            if (aBaseMetaTileEntity.getBlockOffset(xDir, y, zDir + 1) != GregTech_API.sBlockMachines) { -                return false; -            } -            if (aBaseMetaTileEntity.getBlockOffset(xDir, y, zDir - 1) != GregTech_API.sBlockMachines) { -                return false; -            } -            if (aBaseMetaTileEntity.getBlockOffset(xDir, y + 3, zDir) != GregTech_API.sBlockMachines) { -                return false; -            } -        } -        return true; -    } - -    @Override -    public boolean isCorrectMachinePart(ItemStack aStack) { -        return true; -    } - -    @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 boolean explodesOnComponentBreak(ItemStack aStack) { -        return false; -    } - -    public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { -        return new GT_MetaTileEntity_AdvMiner2(this.mName); -    } - -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java new file mode 100644 index 0000000000..25e4e3eb5d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java @@ -0,0 +1,51 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class GT_MetaTileEntity_OreDrillingPlant1 extends GT_MetaTileEntity_OreDrillingPlantBase { +    public GT_MetaTileEntity_OreDrillingPlant1(int aID, String aName, String aNameRegional) { +        super(aID, aName, aNameRegional); +    } + +    public GT_MetaTileEntity_OreDrillingPlant1(String aName) { +        super(aName); +    } + +    @Override +    public String[] getDescription() { +        return getDescriptionInternal("I"); +    } + +    @Override +    public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { +        return new GT_MetaTileEntity_OreDrillingPlant1(mName); +    } + +    @Override +    protected ItemList getCasingBlockItem() { +        return ItemList.Casing_SolidSteel; +    } + +    @Override +    protected Materials getFrameMaterial() { +        return Materials.Steel; +    } + +    @Override +    protected int getCasingTextureIndex() { +        return 16; +    } + +    @Override +    protected int getRadiusInChunks() { +        return 3; +    } + +    @Override +    protected int getMinTier() { +        return 2; +    } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java new file mode 100644 index 0000000000..2b161fe471 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java @@ -0,0 +1,51 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class GT_MetaTileEntity_OreDrillingPlant2 extends GT_MetaTileEntity_OreDrillingPlantBase { +    public GT_MetaTileEntity_OreDrillingPlant2(int aID, String aName, String aNameRegional) { +        super(aID, aName, aNameRegional); +    } + +    public GT_MetaTileEntity_OreDrillingPlant2(String aName) { +        super(aName); +    } + +    @Override +    public String[] getDescription() { +        return getDescriptionInternal("II"); +    } + +    @Override +    public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { +        return new GT_MetaTileEntity_OreDrillingPlant2(mName); +    } + +    @Override +    protected ItemList getCasingBlockItem() { +        return ItemList.Casing_StableTitanium; +    } + +    @Override +    protected Materials getFrameMaterial() { +        return Materials.Titanium; +    } + +    @Override +    protected int getCasingTextureIndex() { +        return 50; +    } + +    @Override +    protected int getRadiusInChunks() { +        return 4; +    } + +    @Override +    protected int getMinTier() { +        return 3; +    } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java new file mode 100644 index 0000000000..1be6391f7a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java @@ -0,0 +1,51 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class GT_MetaTileEntity_OreDrillingPlant3 extends GT_MetaTileEntity_OreDrillingPlantBase { +    public GT_MetaTileEntity_OreDrillingPlant3(int aID, String aName, String aNameRegional) { +        super(aID, aName, aNameRegional); +    } + +    public GT_MetaTileEntity_OreDrillingPlant3(String aName) { +        super(aName); +    } + +    @Override +    public String[] getDescription() { +        return getDescriptionInternal("III"); +    } + +    @Override +    public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { +        return new GT_MetaTileEntity_OreDrillingPlant3(mName); +    } + +    @Override +    protected ItemList getCasingBlockItem() { +        return ItemList.Casing_RobustTungstenSteel; +    } + +    @Override +    protected Materials getFrameMaterial() { +        return Materials.TungstenSteel; +    } + +    @Override +    protected int getCasingTextureIndex() { +        return 48; +    } + +    @Override +    protected int getRadiusInChunks() { +        return 6; +    } + +    @Override +    protected int getMinTier() { +        return 4; +    } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java new file mode 100644 index 0000000000..d69ed7c79d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java @@ -0,0 +1,51 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class GT_MetaTileEntity_OreDrillingPlant4 extends GT_MetaTileEntity_OreDrillingPlantBase { +    public GT_MetaTileEntity_OreDrillingPlant4(int aID, String aName, String aNameRegional) { +        super(aID, aName, aNameRegional); +    } + +    public GT_MetaTileEntity_OreDrillingPlant4(String aName) { +        super(aName); +    } + +    @Override +    public String[] getDescription() { +        return getDescriptionInternal("IV"); +    } + +    @Override +    public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { +        return new GT_MetaTileEntity_OreDrillingPlant4(mName); +    } + +    @Override +    protected ItemList getCasingBlockItem() { +        return ItemList.Casing_MiningOsmiridium; +    } + +    @Override +    protected Materials getFrameMaterial() { +        return Materials.Osmiridium; +    } + +    @Override +    protected int getCasingTextureIndex() { +        return 50; +    } + +    @Override +    protected int getRadiusInChunks() { +        return 9; +    } + +    @Override +    protected int getMinTier() { +        return 5; +    } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java new file mode 100644 index 0000000000..cf2456a0ae --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java @@ -0,0 +1,386 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.GregTech_API; +import gregtech.api.enums.*; +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.objects.ItemData; +import gregtech.api.util.*; +import gregtech.common.blocks.GT_Block_Ores_Abstract; +import gregtech.common.blocks.GT_TileEntity_Ores; +import net.minecraft.block.Block; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.ChunkPosition; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import java.util.ArrayList; + +import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GT_Values.VN; +import static gregtech.api.enums.GT_Values.W; + +public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTileEntity_MultiBlockBase { +    private static final ItemStack miningPipe = GT_ModHandler.getIC2Item("miningPipe", 0); +    private static final ItemStack miningPipeTip = GT_ModHandler.getIC2Item("miningPipeTip", 0); +    private static final Block miningPipeBlock = GT_Utility.getBlockFromStack(miningPipe); +    private static final Block miningPipeTipBlock = GT_Utility.getBlockFromStack(miningPipeTip); + +    private final ArrayList<ChunkPosition> oreBlockPositions = new ArrayList<>(); +    private Block casingBlock; + +    private int casingMeta; +    private int frameMeta; +    private int casingTextureIndex; + +    private ForgeDirection back; +    private int xDrill, yDrill, zDrill, xCenter, zCenter, yHead; +    private boolean isPickingPipes; + +    public GT_MetaTileEntity_OreDrillingPlantBase(int aID, String aName, String aNameRegional) { +        super(aID, aName, aNameRegional); +        //initFields(); +    } + +    public GT_MetaTileEntity_OreDrillingPlantBase(String aName) { +        super(aName); +        initFields(); +    } + +    private void initFields() { +        xDrill = getBaseMetaTileEntity().getXCoord(); +        yDrill = getBaseMetaTileEntity().getYCoord(); +        zDrill = getBaseMetaTileEntity().getZCoord(); +        back = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing()); +        xCenter = xDrill + back.offsetX; +        zCenter = zDrill + back.offsetZ; +        isPickingPipes = false; +        casingBlock = getCasingBlockItem().getBlock(); +        casingMeta = getCasingBlockItem().get(0).getItemDamage(); +        frameMeta = 4096 + getFrameMaterial().mMetaItemSubID; +        casingTextureIndex = getCasingTextureIndex(); +    } + +    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_ADVMINER2_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ADVMINER2)}; +        } +        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(), "OreDrillingPlant.png"); +    } + +    @Override +    public boolean checkRecipe(ItemStack aStack) { +        if (isPickingPipes) { +            if (tryPickPipe()) { +                mOutputItems = new ItemStack[] {GT_Utility.copyAmount(1, miningPipe)}; +                setElectricityStats(); +                return true; +            } else { +                stopMachine(); +                return false; +            } +        } +        putMiningPipesFromInputsInController(); +        if (!tryConsumeDrillingFluid()) return false; + +        fillMineListIfEmpty(); +        if (oreBlockPositions.isEmpty()) { +            boolean isMoved = moveOneDown(); +            if (!isMoved) { +                isPickingPipes = true; +                setElectricityStats(); +                return true; +            } +        } + +        ChunkPosition oreBlockPos = null; +        Block oreBlock = null; + +        while ((oreBlock == null || oreBlock == Blocks.air) && !oreBlockPositions.isEmpty()) { +            oreBlockPos = oreBlockPositions.remove(0); +            oreBlock = getBaseMetaTileEntity().getBlock(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); +        } + +        if (oreBlock != null && oreBlock != Blocks.air) { +            ArrayList<ItemStack> oreBlockDrops = getBlockDrops(oreBlock, oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); +            getBaseMetaTileEntity().getWorld().setBlockToAir(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); +            mOutputItems = getOutputByDrops(oreBlockDrops); +        } + +        setElectricityStats(); +        return true; +    } + +    private boolean tryPickPipe() { +        if (yHead == yDrill) return false; +        if (checkBlockAndMeta(xCenter, yHead + 1, zCenter, miningPipeBlock, W)) +            getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead + 1, zCenter, miningPipeTipBlock); +        getBaseMetaTileEntity().getWorld().setBlockToAir(xCenter, yHead, zCenter); +        return true; +    } + +    private void setElectricityStats() { +        this.mEfficiency = getCurrentEfficiency(null); +        this.mEfficiencyIncrease = 10000; +        //T1 = 12; T2 = 48; T3 = 192; T4 = 768 +        this.mEUt = 3 * (1 << (getMinTier() << 1)); +        //T1 = 960; T2 = 480; T3 = 240; T4 = 120 +        this.mMaxProgresstime = 1920 / (1 << getMinTier()); + +        long voltage = getMaxInputVoltage(); +        long overclockEu = V[Math.max(1, GT_Utility.getTier(voltage)) - 1]; +        while (this.mEUt <= overclockEu) { +            this.mEUt *= 4; +            this.mMaxProgresstime /= 2; +        } + +        this.mEUt = -this.mEUt; +        this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); +    } + +    private ItemStack[] getOutputByDrops(ArrayList<ItemStack> oreBlockDrops) { +        long voltage = getMaxInputVoltage(); +        ArrayList<ItemStack> outputItems = new ArrayList<>(); +        while (!oreBlockDrops.isEmpty()) { +            ItemStack currentItem = oreBlockDrops.remove(0).copy(); +            if (!doUseMaceratorRecipe(currentItem)) { +                multiplyStackSize(currentItem); +                outputItems.add(currentItem); +                continue; +            } + +            GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes.findRecipe(getBaseMetaTileEntity(), false, voltage, null, currentItem); +            if (tRecipe == null) { +                outputItems.add(currentItem); +                continue; +            } + +            for (int i = 0; i < tRecipe.mOutputs.length; i++) { +                ItemStack recipeOutput = tRecipe.mOutputs[i].copy(); +                if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) +                    multiplyStackSize(recipeOutput); +                outputItems.add(recipeOutput); +            } +        } +        return GT_Utility.listToArray(outputItems); +    } + +    private boolean doUseMaceratorRecipe(ItemStack currentItem) { +        ItemData itemData = GT_OreDictUnificator.getItemData(currentItem); +        return itemData == null +                || itemData.mPrefix != OrePrefixes.crushed +                && itemData.mPrefix != OrePrefixes.dustImpure +                && itemData.mPrefix != OrePrefixes.dust +                && itemData.mMaterial.mMaterial != Materials.Oilsands; +    } + +    private void multiplyStackSize(ItemStack itemStack) { +        itemStack.stackSize *= getBaseMetaTileEntity().getRandomNumber(4) + 1; +    } + +    private ArrayList<ItemStack> getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) { +        final int blockMeta = getBaseMetaTileEntity().getMetaID(posX, posY, posZ); +        if (oreBlock.canSilkHarvest(getBaseMetaTileEntity().getWorld(), null, posX, posY, posZ, blockMeta)) { +            return new ArrayList<ItemStack>() {{ +                add(new ItemStack(oreBlock, 1, blockMeta)); +            }}; +        } else { +            return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, 1); +        } +    } + +    private boolean tryConsumeDrillingFluid() { +        return depleteInput(new FluidStack(ItemList.sDrillingFluid, 2000)); +    } + +    private void putMiningPipesFromInputsInController() { +        int maxPipes = miningPipe.getMaxStackSize(); +        if (isHasMiningPipes(maxPipes)) return; + +        ItemStack pipes = getStackInSlot(1); +        for (ItemStack storedItem : getStoredInputs()) { +            if (!storedItem.isItemEqual(miningPipe)) continue; + +            if (pipes == null) { +                setInventorySlotContents(1, GT_Utility.copy(miningPipe)); +                pipes = getStackInSlot(1); +            } + +            if (pipes.stackSize == maxPipes) break; + +            int needPipes = maxPipes - pipes.stackSize; +            int transferPipes = storedItem.stackSize < needPipes ? storedItem.stackSize : needPipes; + +            pipes.stackSize += transferPipes; +            storedItem.stackSize -= transferPipes; +        } +        updateSlots(); +    } + +    private void fillMineListIfEmpty() { +        if (!oreBlockPositions.isEmpty()) return; + +        tryAddOreBlockToMineList(xCenter, yHead - 1, zCenter); +        if (yHead == yDrill) return; //skip controller block layer + +        int radius = getRadiusInChunks() << 4; +        for (int xOff = -radius; xOff <= radius; xOff++) { +            for (int zOff = -radius; zOff <= radius; zOff++) { +                tryAddOreBlockToMineList(xDrill + xOff, yHead, zDrill + zOff); +            } +        } +    } + +    private void tryAddOreBlockToMineList(int x, int y, int z) { +        Block block = getBaseMetaTileEntity().getBlock(x, y, z); +        int blockMeta = getBaseMetaTileEntity().getMetaID(x, y, z); +        ChunkPosition blockPos = new ChunkPosition(x, y, z); +        if (block instanceof GT_Block_Ores_Abstract) { +            TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(x, y, z); +            if (tTileEntity != null && tTileEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mNatural && !oreBlockPositions.contains(blockPos)) { +                oreBlockPositions.add(blockPos); +            } +        } else { +            ItemData association = GT_OreDictUnificator.getAssociation(new ItemStack(block, 1, blockMeta)); +            if (association != null && association.mPrefix.toString().startsWith("ore") && !oreBlockPositions.contains(blockPos)) { +                oreBlockPositions.add(blockPos); +            } +        } +    } + +    private boolean moveOneDown() { +        if (!isHasMiningPipes()) return false; + +        if (yHead <= 0) return false; +        if (checkBlockAndMeta(xCenter, yHead - 1, zCenter, Blocks.bedrock, 0)) return false; + +        if (!getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead - 1, zCenter, miningPipeTipBlock)) return false; +        if (yHead != yDrill) getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead, zCenter, miningPipeBlock); + +        getBaseMetaTileEntity().decrStackSize(1, 1); +        return true; +    } + +    private boolean isHasMiningPipes() { +        return isHasMiningPipes(1); +    } + +    private boolean isHasMiningPipes(int minCount) { +        ItemStack pipe = getStackInSlot(1); +        return pipe != null && pipe.stackSize > minCount - 1 && pipe.isItemEqual(miningPipe); +    } + +    @Override +    public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { +        //check base layer +        for (int xOff = -1 + back.offsetX; xOff <= 1 + back.offsetX; xOff++) { +            for (int zOff = -1 + back.offsetZ; zOff <= 1 + back.offsetZ; zOff++) { +                if (xOff == 0 && zOff == 0) continue; + +                IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xOff, 0, zOff); +                if (addMaintenanceToMachineList(tTileEntity, casingTextureIndex) +                        || addInputToMachineList(tTileEntity, casingTextureIndex) +                        || addOutputToMachineList(tTileEntity, casingTextureIndex) +                        || addEnergyInputToMachineList(tTileEntity, casingTextureIndex)) +                    continue; + +                if (!checkCasingBlock(xOff, 0, zOff)) return false; +            } +        } +        //check tower +        for (int yOff = 1; yOff < 4; yOff++) { +            if (!checkCasingBlock(back.offsetX, yOff, back.offsetZ) +                    || !checkFrameBlock(back.offsetX + 1, yOff, back.offsetZ) +                    || !checkFrameBlock(back.offsetX - 1, yOff, back.offsetZ) +                    || !checkFrameBlock(back.offsetX, yOff, back.offsetZ + 1) +                    || !checkFrameBlock(back.offsetX, yOff, back.offsetZ - 1) +                    || !checkFrameBlock(back.offsetX, yOff + 3, back.offsetZ)) +                return false; +        } +        return checkPipesAndSetYHead(); +    } + +    private boolean checkPipesAndSetYHead() { +        yHead = yDrill - 1; +        while (checkBlockAndMeta(xCenter, yHead, zCenter, miningPipeBlock, W)) yHead--; +        if (checkBlockAndMeta(xCenter, yHead, zCenter, miningPipeTipBlock, W)) return true; +        yHead++; +        return yHead == yDrill || getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead, zCenter, miningPipeTipBlock); +    } + +    private boolean checkCasingBlock(int xOff, int yOff, int zOff) { +        return checkBlockAndMetaOffset(xOff, yOff, zOff, casingBlock, casingMeta); +    } + +    private boolean checkFrameBlock(int xOff, int yOff, int zOff) { +        return checkBlockAndMetaOffset(xOff, yOff, zOff, GregTech_API.sBlockMachines, frameMeta); +    } + +    private boolean checkBlockAndMetaOffset(int xOff, int yOff, int zOff, Block block, int meta) { +        return checkBlockAndMeta(xDrill + xOff, yDrill + yOff, zDrill + zOff, block, meta); +    } + +    private boolean checkBlockAndMeta(int x, int y, int z, Block block, int meta) { +        return (meta == W || getBaseMetaTileEntity().getMetaID(x, y, z) == meta) +                && getBaseMetaTileEntity().getBlock(x, y, z) == block; +    } + +    @Override +    public boolean isCorrectMachinePart(ItemStack aStack) { +        return true; +    } + +    @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 boolean explodesOnComponentBreak(ItemStack aStack) { +        return false; +    } + +    protected abstract ItemList getCasingBlockItem(); + +    protected abstract Materials getFrameMaterial(); + +    protected abstract int getCasingTextureIndex(); + +    protected abstract int getRadiusInChunks(); + +    protected abstract int getMinTier(); + +    protected String[] getDescriptionInternal(String tierSuffix) { +        String casings = getCasingBlockItem().get(0).getDisplayName(); +        return new String[]{ +                "Controller Block for the Ore Drilling Plant " + (tierSuffix != null ? tierSuffix : ""), +                "Size(WxHxD): 3x7x3, Controller (Front middle bottom)", +                "3x1x3 Base of " + casings, +                "1x3x1 " + casings + " pillar (Center of base)", +                "1x3x1 " + getFrameMaterial().mName + " Frame Boxes (Each pillar side and on top)", +                "1x Input Hatch (Any bottom layer casing)", +                "1x Output Bus (Any bottom layer casing)", +                "1x Maintenance Hatch (Any bottom layer casing)", +                "1x " + VN[getMinTier()] + "+ Energy Hatch (Any bottom layer casing)"}; +    } +} diff --git a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java index 1daeb77eba..37ee710107 100644 --- a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java @@ -1345,6 +1345,7 @@ if(Loader.isModLoaded("Railcraft")){          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6L), GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1L), ItemList.Casing_RobustTungstenSteel.get(2L, new Object[0]), 50, 16);          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6L), GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1L), ItemList.Casing_CleanStainlessSteel.get(2L, new Object[0]), 50, 16);          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6L), GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1L), ItemList.Casing_StableTitanium.get(2L, new Object[0]), 50, 16); +        GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 6L), GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 1L), ItemList.Casing_StableTitanium.get(2L, new Object[0]), 50, 16);          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6L), ItemList.Casing_LuV.get(1L, new Object[0]), ItemList.Casing_Fusion.get(1L, new Object[0]), 50, 16);          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Magnalium, 6L), GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueSteel, 1L), ItemList.Casing_Turbine.get(2L, new Object[0]), 50, 16);          GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6L), ItemList.Casing_Turbine.get(1L, new Object[0]), ItemList.Casing_Turbine1.get(2L, new Object[0]), 50, 16); diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index c381a29c43..9f2d79223e 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -58,6 +58,7 @@ public class GT_Loader_MetaTileEntities implements Runnable {          GT_ModHandler.addCraftingRecipe(ItemList.Casing_FrostProof.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Aluminium), 'F', OrePrefixes.frameGt.get(Materials.Aluminium)});
          GT_ModHandler.addCraftingRecipe(ItemList.Casing_CleanStainlessSteel.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', OrePrefixes.frameGt.get(Materials.StainlessSteel)});
          GT_ModHandler.addCraftingRecipe(ItemList.Casing_RobustTungstenSteel.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', OrePrefixes.frameGt.get(Materials.TungstenSteel)});
 +        GT_ModHandler.addCraftingRecipe(ItemList.Casing_MiningOsmiridium.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Osmiridium), 'F', OrePrefixes.frameGt.get(Materials.Osmiridium)});
          GT_ModHandler.addCraftingRecipe(ItemList.Casing_Turbine.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Magnalium), 'F', OrePrefixes.frameGt.get(Materials.BlueSteel)});
          GT_ModHandler.addCraftingRecipe(ItemList.Casing_Turbine1.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', ItemList.Casing_Turbine});
          GT_ModHandler.addCraftingRecipe(ItemList.Casing_Turbine2.get(2L, new Object[0]), bits, new Object[]{"PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', ItemList.Casing_Turbine});
 @@ -1209,8 +1210,17 @@ public class GT_Loader_MetaTileEntities implements Runnable {          ItemList.OilDrill.set(new GT_MetaTileEntity_OilDrill(1157, "multimachine.oildrill", "Oil Drilling Rig").getStackForm(1));
          GT_ModHandler.addCraftingRecipe(ItemList.OilDrill.get(1L, new Object[0]), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.Hull_MV, 'W', OrePrefixes.frameGt.get(Materials.Steel), 'E', OrePrefixes.circuit.get(Materials.Good), 'C', ItemList.Electric_Motor_MV});
 -        ItemList.AdvancedMiner2.set(new GT_MetaTileEntity_AdvMiner2(1158, "multimachine.advminer2", "Advanced Miner II").getStackForm(1));
 -        GT_ModHandler.addCraftingRecipe(ItemList.AdvancedMiner2.get(1L, new Object[0]), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.Hull_EV, 'W', OrePrefixes.frameGt.get(Materials.Titanium), 'E', OrePrefixes.circuit.get(Materials.Data), 'C', ItemList.Electric_Motor_EV});
 +        ItemList.OreDrill1.set(new GT_MetaTileEntity_OreDrillingPlant1(1158, "multimachine.oredrill1", "Ore Drilling Plant").getStackForm(1));
 +        GT_ModHandler.addCraftingRecipe(ItemList.OreDrill1.get(1L), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.Hull_EV, 'W', OrePrefixes.frameGt.get(Materials.Titanium), 'E', OrePrefixes.circuit.get(Materials.Data), 'C', ItemList.Electric_Motor_EV});
 +
 +        ItemList.OreDrill2.set(new GT_MetaTileEntity_OreDrillingPlant2(1177, "multimachine.oredrill2", "Ore Drilling Plant II").getStackForm(1));
 +        GT_ModHandler.addCraftingRecipe(ItemList.OreDrill2.get(1L), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.OreDrill1, 'W', OrePrefixes.frameGt.get(Materials.TungstenSteel), 'E', OrePrefixes.circuit.get(Materials.Elite), 'C', ItemList.Electric_Motor_IV});
 +
 +        ItemList.OreDrill3.set(new GT_MetaTileEntity_OreDrillingPlant3(1178, "multimachine.oredrill3", "Ore Drilling Plant III").getStackForm(1));
 +        GT_ModHandler.addCraftingRecipe(ItemList.OreDrill3.get(1L), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.OreDrill2, 'W', OrePrefixes.frameGt.get(Materials.Osmiridium), 'E', OrePrefixes.circuit.get(Materials.Master), 'C', ItemList.Electric_Motor_LuV});
 +
 +        ItemList.OreDrill4.set(new GT_MetaTileEntity_OreDrillingPlant4(1179, "multimachine.oredrill4", "Ore Drilling Plant IV").getStackForm(1));
 +        GT_ModHandler.addCraftingRecipe(ItemList.OreDrill4.get(1L), bitsd, new Object[]{"WWW", "EME", "CCC", 'M', ItemList.OreDrill3, 'W', OrePrefixes.frameGt.get(Materials.Tritanium), 'E', OrePrefixes.circuit.get(Materials.Ultimate), 'C', ItemList.Electric_Motor_ZPM});
          ItemList.PyrolyseOven.set(new GT_MetaTileEntity_PyrolyseOven(1159, "multimachine.pyro", "Pyrolyse Oven").getStackForm(1));
          GT_ModHandler.addCraftingRecipe(ItemList.PyrolyseOven.get(1L, new Object[0]), bitsd, new Object[]{"WEP", "EME", "WCP", 'M', ItemList.Hull_MV, 'W', ItemList.Electric_Piston_MV, 'P', OrePrefixes.wireGt04.get(Materials.Cupronickel), 'E', OrePrefixes.circuit.get(Materials.Good), 'C', ItemList.Electric_Pump_MV});
 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MINING_OSMIRIDIUM.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MINING_OSMIRIDIUM.pngBinary files differ new file mode 100644 index 0000000000..d0fcc4da96 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MINING_OSMIRIDIUM.png diff --git a/src/main/resources/assets/gregtech/textures/gui/multimachines/AdvMiner2.png b/src/main/resources/assets/gregtech/textures/gui/multimachines/OreDrillingPlant.pngBinary files differ index 7b60ec4de7..7b60ec4de7 100644 --- a/src/main/resources/assets/gregtech/textures/gui/multimachines/AdvMiner2.png +++ b/src/main/resources/assets/gregtech/textures/gui/multimachines/OreDrillingPlant.png | 
