aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrepo_alt <wvk17@yandex.ru>2020-11-13 18:02:35 +0300
committerrepo_alt <wvk17@yandex.ru>2020-11-13 18:02:35 +0300
commitadb69633efde93f7a07d38c629621e60c82d76ba (patch)
tree26f73a4dd90e3d8be35dae027748de7fc9f727aa
parent4e739e177b0b1fe242b0cfecb25f0b5b0e855932 (diff)
downloadGT5-Unofficial-adb69633efde93f7a07d38c629621e60c82d76ba.tar.gz
GT5-Unofficial-adb69633efde93f7a07d38c629621e60c82d76ba.tar.bz2
GT5-Unofficial-adb69633efde93f7a07d38c629621e60c82d76ba.zip
Single block miner optimization
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java72
1 files changed, 27 insertions, 45 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
index 44db32e6b9..b57f8ebba4 100644
--- 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
@@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
+import net.minecraft.world.ChunkPosition;
import net.minecraftforge.common.util.FakePlayer;
import java.util.ArrayList;
@@ -33,7 +34,7 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
private static final Block MINING_PIPE_BLOCK = GT_Utility.getBlockFromStack(MINING_PIPE);
private static final Block MINING_PIPE_TIP_BLOCK = GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 0));
- int drillX, drillY, drillZ;
+ int drillY = 0;
boolean isPickingPipes;
boolean waitMiningPipe;
final static int[] RADIUS = new int[]{8, 8, 16, 24, 32}; //Miner radius per tier
@@ -41,6 +42,7 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
final static int[] ENERGY = new int[]{8, 8, 32, 128, 512}; //Miner energy consumption per tier
private int radiusConfig; //Miner configured radius
+ private final ArrayList<ChunkPosition> oreBlockPositions = new ArrayList<>();
public GT_MetaTileEntity_Miner(int aID, String aName, String aNameRegional, int aTier) {
super(aID, aName, aNameRegional, aTier, 1,
@@ -165,50 +167,35 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
}
return;
}
- if (drillY == 0) {
+ if (drillY == 0 || oreBlockPositions.isEmpty()) {
moveOneDown(aBaseMetaTileEntity);
- return;
- }
- if (drillZ > radiusConfig) {
- moveOneDown(aBaseMetaTileEntity);
- return;
- }
- while (drillZ <= radiusConfig) {
- while (drillX <= radiusConfig) {
- 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 instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mNatural) {
- mineBlock(aBaseMetaTileEntity, drillX, drillY, drillZ);
- if (debugBlockMiner) {
- GT_Log.out.println("MINER: Mining GT ore block at " + drillX + " " + drillY + " " + drillZ);
- }
- return;
- } else {
- if (debugBlockMiner) {
- GT_Log.out.println("MINER: Not natural ore, will not mine");
- }
- }
- } else {
- ItemData association = GT_OreDictUnificator.getAssociation(new ItemStack(block, 1, blockMeta));
- if (association != null && association.mPrefix.toString().startsWith("ore")) {
- mineBlock(aBaseMetaTileEntity, drillX, drillY, drillZ);
- if (debugBlockMiner) {
- GT_Log.out.println("MINER: Mining oredict ore block at " + drillX + " " + drillY + " " + drillZ);
- }
- return;
- }
- }
- drillX++;
+ } else {
+ ChunkPosition oreBlockPos = oreBlockPositions.remove(0);
+ mineBlock(aBaseMetaTileEntity, oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ);
+ if (debugBlockMiner) {
+ GT_Log.out.println("MINER: Mining GT ore block at " + oreBlockPos.chunkPosX + " " + drillY + " " + oreBlockPos.chunkPosZ);
}
- drillX = -radiusConfig;
- drillZ++;
}
}
}
}
-
+ private void fillOreList(IGregTechTileEntity aBaseMetaTileEntity) {
+ for (int z = -radiusConfig; z <= radiusConfig; ++z) {
+ for (int x = -radiusConfig; x <= radiusConfig; ++x) {
+ Block block = aBaseMetaTileEntity.getBlockOffset(x, drillY, z);
+ int blockMeta = aBaseMetaTileEntity.getMetaIDOffset(x, drillY, z);
+ if (block instanceof GT_Block_Ores_Abstract) {
+ TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityOffset(x, drillY, z);
+ if (tTileEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mNatural)
+ oreBlockPositions.add(new ChunkPosition(x, drillY, z));
+ } else {
+ ItemData association = GT_OreDictUnificator.getAssociation(new ItemStack(block, 1, blockMeta));
+ if (association != null && association.mPrefix.toString().startsWith("ore"))
+ oreBlockPositions.add(new ChunkPosition(x, drillY, z));
+ }
+ }
+ }
+ }
@Override
public long maxEUStore() {
return mTier == 1 ? 4096 : V[mTier] * 64;
@@ -253,8 +240,7 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
}
aBaseMetaTileEntity.getWorld().setBlock(xCoord, yCoord + drillY - 1, zCoord, MINING_PIPE_TIP_BLOCK);
drillY--;
- drillZ = -RADIUS[mTier];
- drillX = -RADIUS[mTier];
+ fillOreList(aBaseMetaTileEntity);
return true;
}
@@ -284,9 +270,7 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
aNBT.setBoolean("isPickingPipe", isPickingPipes);
- aNBT.setInteger("drillX", drillX);
aNBT.setInteger("drillY", drillY);
- aNBT.setInteger("drillZ", drillZ);
aNBT.setInteger("radiusConfig", radiusConfig);
}
@@ -294,9 +278,7 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine {
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
isPickingPipes = aNBT.getBoolean("isPickingPipe");
- drillX = aNBT.getInteger("drillX");
drillY = aNBT.getInteger("drillY");
- drillZ = aNBT.getInteger("drillZ");
if (aNBT.hasKey("radiusConfig"))
radiusConfig = aNBT.getInteger("radiusConfig");
}