aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
authorDimach <dimach2142@gmail.com>2017-07-06 06:47:55 +0300
committerDimach <dimach2142@gmail.com>2017-07-06 06:48:18 +0300
commit424b356feeb02cb3735b928b4b16fdf54631bcae (patch)
tree7f76d5a124794240bc5b680fbd3a90af064a3bb8 /src/main/java/gregtech/common
parent110545a24dba455ea8db9ea16e13b411b7dbb4e9 (diff)
downloadGT5-Unofficial-424b356feeb02cb3735b928b4b16fdf54631bcae.tar.gz
GT5-Unofficial-424b356feeb02cb3735b928b4b16fdf54631bcae.tar.bz2
GT5-Unofficial-424b356feeb02cb3735b928b4b16fdf54631bcae.zip
Added LV and MV miners.
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java
new file mode 100644
index 0000000000..a34c481263
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java
@@ -0,0 +1,202 @@
+package gregtech.common.tileentities.machines.basic;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+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_Utility;
+import gregtech.common.blocks.GT_Block_Ores_Abstract;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+
+import java.util.ArrayList;
+
+public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
+ private static final ItemStack miningPipe = GT_ModHandler.getIC2Item("miningPipe", 0);
+ private static final Block miningPipeBlock = GT_Utility.getBlockFromStack(miningPipe);
+ private static final Block miningPipeTipBlock = GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 0));
+
+ int drillX, drillY, drillZ;
+ boolean isPickingPipes;
+ boolean waitMiningPipe;
+ static int[] radius = new int[]{8, 8, 24, 40}; //Miner radius per tier
+ static int[] speed = new int[]{20, 20, 5, 2}; //Miner cycle time per tier
+ static int[] energy = new int[]{24, 24, 96, 384}; //Miner energy consumption per tier
+
+ public GT_MetaTileEntity_Miner(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 1, "Digging ore instead of you", 2, 2, "Miner.png", "", new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_ACTIVE")), new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM")));
+ }
+
+ public GT_MetaTileEntity_Miner(String aName, int aTier, String aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName) {
+ super(aName, aTier, 1, aDescription, aTextures, 1, 1, aGUIName, aNEIName);
+ }
+
+ public GT_MetaTileEntity_Miner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, String aGUIName, String aNEIName) {
+ super(aName, aTier, 1, aDescription, aTextures, 2, 2, aGUIName, aNEIName);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Miner(mName, mTier, mDescriptionArray, mTextures, mGUIName, mNEIName);
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return (super.allowPutStack(aBaseMetaTileEntity, aIndex, aSide, aStack)) && (aStack.getItem() == miningPipe.getItem());
+ }
+
+ public boolean hasFreeSpace() {
+ for (int i = getOutputSlot(); i < getOutputSlot() + 2; i++) {
+ if (mInventory[i] != null) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isUniversalEnergyStored(energy[mTier] * (speed[mTier] - mProgresstime)) && hasFreeSpace()) {
+ miningPipe:
+ if (waitMiningPipe) {
+ mMaxProgresstime = 0;
+ for (int i = 0; i < mInputSlotCount; i++) {
+ ItemStack s = getInputAt(i);
+ if (s != null && s.getItem() == miningPipe.getItem() && s.stackSize > 0) {
+ waitMiningPipe = false;
+ break miningPipe;
+ }
+ }
+ return;
+ }
+ aBaseMetaTileEntity.decreaseStoredEnergyUnits(energy[mTier], true);
+ mMaxProgresstime = speed[mTier];
+ } else {
+ mMaxProgresstime = 0;
+ return;
+ }
+ if (mProgresstime == speed[mTier] - 1) {
+ if (isPickingPipes) {
+ if (drillY == 0) {
+ aBaseMetaTileEntity.disableWorking();
+ isPickingPipes = false;
+ } else if (aBaseMetaTileEntity.getBlockOffset(0, drillY, 0) == miningPipeTipBlock || aBaseMetaTileEntity.getBlockOffset(0, drillY, 0) == miningPipeBlock) {
+ mOutputItems[0] = miningPipe.copy();
+ mOutputItems[0].stackSize = 1;
+ aBaseMetaTileEntity.getWorld().setBlockToAir(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord() + drillY, aBaseMetaTileEntity.getZCoord());
+ drillY++;
+ }
+ return;
+ }
+ if (drillY == 0) {
+ if (moveOneDown(aBaseMetaTileEntity)) {
+ return;
+ }
+ }
+ if (drillZ > radius[mTier]) {
+ if (moveOneDown(aBaseMetaTileEntity)) {
+ return;
+ }
+ }
+ if (drillX > radius[mTier]) {
+ drillX = -radius[mTier];
+ drillZ++;
+ return;
+ }
+ while (drillX <= radius[mTier]) {
+ Block block = aBaseMetaTileEntity.getBlockOffset(drillX, drillY, drillZ);
+ int blockMeta = aBaseMetaTileEntity.getMetaIDOffset(drillX, drillY, drillZ);
+ if (block instanceof GT_Block_Ores_Abstract) {
+ TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityOffset(drillX, drillY, drillZ);
+ if (tTileEntity != null && tTileEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mNatural) {
+ mineBlock(aBaseMetaTileEntity, drillX, drillY, drillZ);
+ return;
+ }
+ } else {
+ ItemData association = GT_OreDictUnificator.getAssociation(new ItemStack(block, 1, blockMeta));
+ if (association != null && association.mPrefix.toString().startsWith("ore")) {
+ mineBlock(aBaseMetaTileEntity, drillX, drillY, drillZ);
+ return;
+ }
+ }
+ drillX++;
+ }
+ }
+ }
+ }
+
+ public boolean moveOneDown(IGregTechTileEntity aBaseMetaTileEntity) {
+ if (aBaseMetaTileEntity.getYCoord() + drillY - 1 < 0 || aBaseMetaTileEntity.getBlockOffset(0, drillY - 1, 0) == Blocks.bedrock) {
+ isPickingPipes = true;
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(0, drillY, 0) == miningPipeTipBlock) {
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord() + drillY, aBaseMetaTileEntity.getZCoord(), miningPipeBlock);
+ }
+ miningPipes:
+ {
+ for (int i = 0; i < mInputSlotCount; i++) {
+ ItemStack s = getInputAt(i);
+ if (s != null && s.getItem() == miningPipe.getItem() && s.stackSize > 0) {
+ s.stackSize--;
+ if (s.stackSize == 0) {
+ mInventory[getInputSlot() + i] = null;
+ }
+ break miningPipes;
+ }
+ }
+ waitMiningPipe = true;
+ return false;
+ }
+ if (aBaseMetaTileEntity.getBlockOffset(0, drillY - 1, 0) != Blocks.air) {
+ mineBlock(aBaseMetaTileEntity, 0, drillY - 1, 0);
+ }
+ aBaseMetaTileEntity.getWorld().setBlock(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord() + drillY - 1, aBaseMetaTileEntity.getZCoord(), miningPipeTipBlock);
+ drillY--;
+ drillZ = -radius[mTier];
+ drillX = -radius[mTier];
+ return true;
+ }
+
+ public void mineBlock(IGregTechTileEntity aBaseMetaTileEntity, int x, int y, int z) {
+ ArrayList<ItemStack> drops = getBlockDrops(aBaseMetaTileEntity.getBlockOffset(x, y, z), aBaseMetaTileEntity.getXCoord() + x, aBaseMetaTileEntity.getYCoord() + y, aBaseMetaTileEntity.getZCoord() + z);
+ if (drops.size() > 0)
+ mOutputItems[0] = drops.get(0);
+ if (drops.size() > 1)
+ mOutputItems[1] = drops.get(1);
+ aBaseMetaTileEntity.getWorld().setBlockToAir(aBaseMetaTileEntity.getXCoord() + x, aBaseMetaTileEntity.getYCoord() + y, aBaseMetaTileEntity.getZCoord() + z);
+ }
+
+ private ArrayList<ItemStack> getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) {
+ final int blockMeta = getBaseMetaTileEntity().getMetaID(posX, posY, posZ);
+ return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, 1);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("isPickingPipe", isPickingPipes);
+ aNBT.setInteger("drillX", drillX);
+ aNBT.setInteger("drillY", drillY);
+ aNBT.setInteger("drillZ", drillZ);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ isPickingPipes = aNBT.getBoolean("isPickingPipe");
+ drillX = aNBT.getInteger("drillX");
+ drillY = aNBT.getInteger("drillY");
+ drillZ = aNBT.getInteger("drillZ");
+ }
+}