aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDream-Master <dream-master@gmx.net>2017-10-08 13:42:36 +0200
committerDream-Master <dream-master@gmx.net>2017-10-08 13:42:36 +0200
commitb7dde4464242b8cd1e391704287a4c9d84fcae32 (patch)
tree7ab4737927feb5d0af79e643588c101dcd41ffc2
parent3c427a6b64c1a4dc4794d8d137e8fc2e582af46c (diff)
downloadGT5-Unofficial-b7dde4464242b8cd1e391704287a4c9d84fcae32.tar.gz
GT5-Unofficial-b7dde4464242b8cd1e391704287a4c9d84fcae32.tar.bz2
GT5-Unofficial-b7dde4464242b8cd1e391704287a4c9d84fcae32.zip
update file from 2.0.0.0 to 2.1.0.0
-rw-r--r--patch.diff3087
1 files changed, 3087 insertions, 0 deletions
diff --git a/patch.diff b/patch.diff
new file mode 100644
index 0000000000..db06287d97
--- /dev/null
+++ b/patch.diff
@@ -0,0 +1,3087 @@
+From 9c09b6ebe1bfbef3d694b98b5e8c00f4fb37142e Mon Sep 17 00:00:00 2001
+From: Dream-Master <dream-master@gmx.net>
+Date: Sat, 7 Oct 2017 22:49:34 +0200
+Subject: [PATCH] cherry pick Commit: f5abfcefe8d77e2c3c6284bff72de25c0a0ef774
+ [f5abfce]
+
+The right method to find out whether the machine should break the block.
+---
+ .../common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java | 2 +-
+ .../machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java | 3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
+index cec1c5a..3bc1045 100644
+--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
++++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
+@@ -201,7 +201,7 @@ public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
+ if (yHead <= 0) {
+ return false;
+ }
+- if ((!consumeFluid(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord())) && (!getBaseMetaTileEntity().getAir(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord()))) {
++ if ((!consumeFluid(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord())) && (!getBaseMetaTileEntity().getBlock(getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord()).isAir(getBaseMetaTileEntity().getWorld(), getBaseMetaTileEntity().getXCoord(), yHead - 1, getBaseMetaTileEntity().getZCoord()))) {
+
+ return false;
+ }
+diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java
+index 3fa1a98..3f44900 100644
+--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java
++++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java
+@@ -92,8 +92,7 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi
+
+ private boolean isRefillableBlock(int aX, int aY, int aZ){
+ IGregTechTileEntity aBaseTile = getBaseMetaTileEntity();
+- if (aBaseTile.getTileEntity(aX, aY, aZ) != null) return false;
+- if (!aBaseTile.getAir(aX, aY, aZ) && aBaseTile.getBlock(aX, aY, aZ).getMaterial().isSolid()) return false;
++ if (!aBaseTile.getBlock(aX, aY, aZ).isAir(aBaseTile.getWorld(), aX, aY, aZ) || aBaseTile.getBlock(aX, aY, aZ).getMaterial().isSolid()) return false;
+ if (!GT_Utility.setBlockByFakePlayer(getFakePlayer(aBaseTile), aX, aY, aZ, GregTech_API.sBlockConcretes, 8, true)) return false;
+ return true;
+ }
+--
+1.9.5.msysgit.0
+
+From 74199106670216396a0d2a9c9892969b13930e3e Mon Sep 17 00:00:00 2001
+From: Dream-Master <dream-master@gmx.net>
+Date: Tue, 12 Sep 2017 23:18:27 +0200
+Subject: [PATCH] cherry pick bd305c45b038819de2a0e61166da7344dbc770c7
+ 69d557908f447be138102676309e48e5f95b32b9
+
+Fix localization of Item Distributor #1211
+https://github.com/Blood-Asp/GT5-Unofficial/pull/1211
+---
+ src/main/java/gregtech/api/util/GT_LanguageManager.java | 1 +
+ .../tileentities/automation/GT_MetaTileEntity_ItemDistributor.java | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java
+index 58e6d91..b2d977e 100644
+--- a/src/main/java/gregtech/api/util/GT_LanguageManager.java
++++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java
+@@ -316,6 +316,7 @@ public class GT_LanguageManager {
+ // addStringLocalization("Interaction_DESCRIPTION_Index_208", "Grab");
+ // addStringLocalization("Interaction_DESCRIPTION_Index_209", "Grab");
+ // addStringLocalization("Interaction_DESCRIPTION_Index_210", "Grab");
++ addStringLocalization("Interaction_DESCRIPTION_Index_211", "Items per side: ");
+
+ }
+
+diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
+index 8239dc1..5fa3bc8 100644
+--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
++++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
+@@ -153,7 +153,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer
+ //Adjust items per side by 1 or -1, constrained to the cyclic interval [0, 127]
+ itemsPerSide[aSide] += aPlayer.isSneaking() ? -1 : 1;
+ itemsPerSide[aSide] = (byte) ((itemsPerSide[aSide] + 128) % 128);
+- GT_Utility.sendChatToPlayer(aPlayer, trans("110", "Items per side: " + itemsPerSide[aSide]));
++ GT_Utility.sendChatToPlayer(aPlayer, trans("211", "Items per side: ") + itemsPerSide[aSide]);
+ }
+
+ @Override
+--
+1.9.5.msysgit.0
+
+From 9956fee4454bc9ec54f5a0ed04e37d6589cbaf19 Mon Sep 17 00:00:00 2001
+From: Dream-Master <dream-master@gmx.net>
+Date: Tue, 12 Sep 2017 23:16:04 +0200
+Subject: [PATCH] cherry pick
+
+dae15665ccb54a0a8d6a76ffcc7d48eae0abec15
+
+Odp speed improving #1209
+https://github.com/Blood-Asp/GT5-Unofficial/pull/1209
+---
+ .../multi/GT_MetaTileEntity_OreDrillingPlant1.java | 8 +-
+ .../multi/GT_MetaTileEntity_OreDrillingPlant2.java | 7 +-
+ .../multi/GT_MetaTileEntity_OreDrillingPlant3.java | 7 +-
+ .../multi/GT_MetaTileEntity_OreDrillingPlant4.java | 8 +-
+ .../GT_MetaTileEntity_OreDrillingPlantBase.java | 287 ++++++++++++++++++---
+ 5 files changed, 274 insertions(+), 43 deletions(-)
+
+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
+index 8d1f683..bd1c079 100644
+--- 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
+@@ -1,4 +1,3 @@
+-
+ package gregtech.common.tileentities.machines.multi;
+
+ import gregtech.api.enums.ItemList;
+@@ -49,4 +48,9 @@ public class GT_MetaTileEntity_OreDrillingPlant1 extends GT_MetaTileEntity_OreDr
+ protected int getMinTier() {
+ return 2;
+ }
+-}
++
++ @Override
++ protected int getBaseProgressTime() {
++ return 960;
++ }
++}
+\ No newline at end of file
+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
+index 2b161fe..272ea64 100644
+--- 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
+@@ -48,4 +48,9 @@ public class GT_MetaTileEntity_OreDrillingPlant2 extends GT_MetaTileEntity_OreDr
+ protected int getMinTier() {
+ return 3;
+ }
+-}
++
++ @Override
++ protected int getBaseProgressTime() {
++ return 800;
++ }
++}
+\ No newline at end of file
+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
+index 1be6391..f89c578 100644
+--- 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
+@@ -48,4 +48,9 @@ public class GT_MetaTileEntity_OreDrillingPlant3 extends GT_MetaTileEntity_OreDr
+ protected int getMinTier() {
+ return 4;
+ }
+-}
++
++ @Override
++ protected int getBaseProgressTime() {
++ return 640;
++ }
++}
+\ No newline at end of file
+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
+index 2488bc1..4059735 100644
+--- 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
+@@ -1,4 +1,3 @@
+-
+ package gregtech.common.tileentities.machines.multi;
+
+ import gregtech.api.enums.ItemList;
+@@ -49,4 +48,9 @@ public class GT_MetaTileEntity_OreDrillingPlant4 extends GT_MetaTileEntity_OreDr
+ protected int getMinTier() {
+ return 5;
+ }
+-}
++
++ @Override
++ protected int getBaseProgressTime() {
++ return 480;
++ }
++}
+\ No newline at end of file
+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
+index c34d8b0..a227ab7 100644
+--- 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
+@@ -1,16 +1,18 @@
+ package gregtech.common.tileentities.machines.multi;
+
+-import static gregtech.api.enums.GT_Values.V;
+-import static gregtech.api.enums.GT_Values.VN;
+-
+-import java.util.ArrayList;
+-
++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.tileentity.IGregTechTileEntity;
++import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
++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;
+@@ -20,40 +22,106 @@ import net.minecraft.block.Block;
+ import net.minecraft.entity.player.InventoryPlayer;
+ import net.minecraft.init.Blocks;
+ import net.minecraft.item.ItemStack;
++import net.minecraft.nbt.NBTTagCompound;
+ import net.minecraft.tileentity.TileEntity;
+ import net.minecraft.world.ChunkPosition;
++import net.minecraftforge.common.util.ForgeDirection;
+ import net.minecraftforge.fluids.FluidStack;
+
+-public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTileEntity_DrillerBase {
++import java.util.ArrayList;
++
++import static gregtech.api.enums.GT_Values.*;
++
++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() {
++ casingBlock = getCasingBlockItem().getBlock();
++ casingMeta = getCasingBlockItem().get(0).getItemDamage();
++ int frameId = 4096 + getFrameMaterial().mMetaItemSubID;
++ frameMeta = GregTech_API.METATILEENTITIES[frameId] != null ? GregTech_API.METATILEENTITIES[frameId].getTileEntityBaseType() : W;
++ casingTextureIndex = getCasingTextureIndex();
++ isPickingPipes = false;
++ }
++
++ 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[casingTextureIndex],new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL)};
++ return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[casingTextureIndex]};
+ }
+
+- @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "OreDrillingPlant.png");
+ }
+
+ @Override
+- protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead, int oldYHead){
++ public void saveNBTData(NBTTagCompound aNBT) {
++ super.saveNBTData(aNBT);
++ aNBT.setBoolean("isPickingPipes", isPickingPipes);
++ }
++
++ @Override
++ public void loadNBTData(NBTTagCompound aNBT) {
++ super.loadNBTData(aNBT);
++ isPickingPipes = aNBT.getBoolean("isPickingPipes");
++ }
++
++ @Override
++ public boolean checkRecipe(ItemStack aStack) {
++ setElectricityStats();
++ int oldYHead = yHead;
++ if (!checkPipesAndSetYHead() || !isEnergyEnough()) {
++ stopMachine();
++ return false;
++ }
+ if (yHead != oldYHead) oreBlockPositions.clear();
++ if (isPickingPipes) {
++ if (tryPickPipe()) {
++ mOutputItems = new ItemStack[] {GT_Utility.copyAmount(1, miningPipe)};
++ return true;
++ } else {
++ isPickingPipes = false;
++ stopMachine();
++ return false;
++ }
++ }
+
+- fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead);
++ putMiningPipesFromInputsInController();
++ if (!tryConsumeDrillingFluid()) return false;
++
++ fillMineListIfEmpty();
+ if (oreBlockPositions.isEmpty()) {
+ if (!tryLowerPipe()) {
+- if (waitForPipes()) return false;
+ isPickingPipes = true;
+ return true;
+ }
+ //new layer - fill again
+- fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead);
++ fillMineListIfEmpty();
+ }
+
+ ChunkPosition oreBlockPos = null;
+@@ -64,7 +132,6 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile
+ oreBlock = getBaseMetaTileEntity().getBlock(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ);
+ }
+
+- if (!tryConsumeDrillingFluid()) return false;
+ 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);
+@@ -74,29 +141,29 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile
+ return true;
+ }
+
+- @Override
+- protected boolean checkHatches(){
+- return !mMaintenanceHatches.isEmpty() && !mInputHatches.isEmpty() && !mOutputBusses.isEmpty() && !mEnergyHatches.isEmpty();
++ private boolean isEnergyEnough() {
++ long requiredEnergy = 512 + getMaxInputVoltage() * 4;
++ for (GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) {
++ requiredEnergy -= energyHatch.getEUVar();
++ if (requiredEnergy <= 0) return true;
++ }
++ return false;
+ }
+
+- @Override
+- protected void setElectricityStats() {
++ 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 = (isPickingPipes ? 80 : 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);
++ int overclock = 1 << GT_Utility.getTier(getMaxInputVoltage()) - 1;
++ this.mEUt = -12 * overclock * overclock;
++ this.mMaxProgresstime = (isPickingPipes ? 80 : getBaseProgressTime()) / overclock;
+ }
+
+ private ItemStack[] getOutputByDrops(ArrayList<ItemStack> oreBlockDrops) {
+@@ -149,17 +216,37 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile
+ }
+
+ private boolean tryConsumeDrillingFluid() {
+- if (!depleteInput(new FluidStack(ItemList.sDrillingFluid, 2000))) {
+- mMaxProgresstime = 0;
+- return false;
++ 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;
+ }
+- return true;
++ updateSlots();
+ }
+
+- private void fillMineListIfEmpty(int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead) {
++ private void fillMineListIfEmpty() {
+ if (!oreBlockPositions.isEmpty()) return;
+
+- tryAddOreBlockToMineList(xPipe, yHead - 1, zPipe);
++ tryAddOreBlockToMineList(xCenter, yHead - 1, zCenter);
+ if (yHead == yDrill) return; //skip controller block layer
+
+ int radius = getRadiusInChunks() << 4;
+@@ -184,8 +271,134 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile
+ }
+ }
+
++ private boolean tryLowerPipe() {
++ if (!isHasMiningPipes()) return false;
++
++ if (yHead <= 0) return false;
++ if (checkBlockAndMeta(xCenter, yHead - 1, zCenter, Blocks.bedrock, W)) return false;
++
++ getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead - 1, zCenter, miningPipeTipBlock);
++ 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) {
++ updateCoordinates();
++ //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 (!checkCasingBlock(xOff, 0, zOff)
++ && !addMaintenanceToMachineList(tTileEntity, casingTextureIndex)
++ && !addInputToMachineList(tTileEntity, casingTextureIndex)
++ && !addOutputToMachineList(tTileEntity, casingTextureIndex)
++ && !addEnergyInputToMachineList(tTileEntity, casingTextureIndex))
++ return false;
++ }
++ }
++ if (mMaintenanceHatches.isEmpty() || mInputHatches.isEmpty() || mOutputBusses.isEmpty() || mEnergyHatches.isEmpty()) return false;
++ if (GT_Utility.getTier(getMaxInputVoltage()) < getMinTier()) 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 true;
++ }
++
++ private void updateCoordinates() {
++ xDrill = getBaseMetaTileEntity().getXCoord();
++ yDrill = getBaseMetaTileEntity().getYCoord();
++ zDrill = getBaseMetaTileEntity().getZCoord();
++ back = ForgeDirection.getOrientation(getBaseMetaTileEntity().getBackFacing());
++ xCenter = xDrill + back.offsetX;
++ zCenter = zDrill + back.offsetZ;
++ }
++
++ private boolean checkPipesAndSetYHead() {
++ yHead = yDrill - 1;
++ while (checkBlockAndMeta(xCenter, yHead, zCenter, miningPipeBlock, W)) yHead--; //skip pipes
++ //is pipe tip OR is controller layer
++ if (checkBlockAndMeta(xCenter, yHead, zCenter, miningPipeTipBlock, W) || ++yHead == yDrill) return true;
++ //pipe column is broken - try fix
++ getBaseMetaTileEntity().getWorld().setBlock(xCenter, yHead, zCenter, miningPipeTipBlock);
++ return true;
++ }
++
++ private boolean checkCasingBlock(int xOff, int yOff, int zOff) {
++ return checkBlockAndMetaOffset(xOff, yOff, zOff, casingBlock, casingMeta);
++ }
++ //meta of frame is getTileEntityBaseType; frame should be checked using its drops (possible a high weight operation)
++ 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();
++
++ //returns theoretical progress time for LV energy hatch
++ protected abstract int getBaseProgressTime();
++
+ protected String[] getDescriptionInternal(String tierSuffix) {
+ String casings = getCasingBlockItem().get(0).getDisplayName();
+ return new String[]{
+--
+1.9.5.msysgit.0
+
+From a166a5bbd3a8d9809c2c3c3444451c2870a98cc7 Mon Sep 17 00:00:00 2001
+From: Dream-Master <dream-master@gmx.net>
+Date: Tue, 12 Sep 2017 23:11:20 +0200
+Subject: [PATCH] cherry pick ded594c86c701a0ff1f2282b4d6bff9cc7b1b9f6
+ c6d39f12fdf85edbeadc725e0b398fa70eb15bd0
+
+Patched ME energy tunnel, now they can emit GT energy. #1200
+https://github.com/Blood-Asp/GT5-Unofficial/pull/1200
+---
+ src/main/java/gregtech/GT_Mod.java | 1 +
+ .../loaders/postload/GT_AE2EnergyTunnelLoader.java | 27 +++++++
+ .../gregtech/loaders/postload/PartP2PGTPower.java | 84 ++++++++++++++++++++++
+ 3 files changed, 112 insertions(+)
+ create mode 100644 src/main/java/gregtech/loaders/postload/GT_AE2EnergyTunnelLoader.java
+ create mode 100644 src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
+
+diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
+index 939d03a..e1f9842 100644
+--- a/src/main/java/gregtech/GT_Mod.java
++++ b/src/main/java/gregtech/GT_Mod.java
+@@ -625,6 +625,7 @@ public class GT_Mod implements IGT_Mod {
+ new GT_CropLoader().run();
+ new GT_Worldgenloader().run();
+ new GT_CoverLoader().run();
++ new GT_AE2EnergyTunnelLoader().run();
+ LoadArmorComponents.init();
+
+ GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.planks, 1), null, false);
+diff --git a/src/main/java/gregtech/loaders/postload/GT_AE2EnergyTunnelLoader.java b/src/main/java/gregtech/loaders/postload/GT_AE2EnergyTunnelLoader.java
+new file mode 100644
+index 0000000..a558696
+--- /dev/null
++++ b/src/main/java/gregtech/loaders/postload/GT_AE2EnergyTunnelLoader.java
+@@ -0,0 +1,27 @@
++package gregtech.loaders.postload;
++
++import appeng.items.parts.PartType;
++import gregtech.GT_Mod;
++import gregtech.api.util.GT_Log;
++
++import java.lang.reflect.Field;
++
++public class GT_AE2EnergyTunnelLoader implements Runnable {
++ @Override
++ public void run() {
++ if (GT_Mod.gregtechproxy.mAE2Integration) {
++ try {
++ load();
++ } catch (Throwable e) {
++ GT_Log.out.println("Failed to load P2P tunnel for GT electricity");
++ e.printStackTrace(GT_Log.out);
++ }
++ }
++ }
++
++ public void load() throws Throwable {
++ Field f = PartType.class.getDeclaredField("myPart");
++ f.setAccessible(true);
++ f.set(PartType.P2PTunnelEU, PartP2PGTPower.class);
++ }
++}
+diff --git a/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java b/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
+new file mode 100644
+index 0000000..30a3377
+--- /dev/null
++++ b/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
+@@ -0,0 +1,84 @@
++package gregtech.loaders.postload;
++
++import appeng.api.networking.IGridNode;
++import appeng.api.networking.ticking.IGridTickable;
++import appeng.api.networking.ticking.TickRateModulation;
++import appeng.api.networking.ticking.TickingRequest;
++import appeng.parts.p2p.PartP2PIC2Power;
++import gregtech.api.interfaces.tileentity.IEnergyConnected;
++import gregtech.api.util.GT_Utility;
++import net.minecraft.item.ItemStack;
++import net.minecraft.tileentity.TileEntity;
++import net.minecraft.world.World;
++import net.minecraftforge.common.util.ForgeDirection;
++
++public class PartP2PGTPower extends PartP2PIC2Power implements IGridTickable {
++ public PartP2PGTPower(ItemStack is) {
++ super(is);
++ }
++
++ public final World getWorld() {
++ return tile.getWorldObj();
++ }
++
++ public final int getXCoord() {
++ return tile.xCoord;
++ }
++
++ public final short getYCoord() {
++ return (short) tile.yCoord;
++ }
++
++ public final int getZCoord() {
++ return tile.zCoord;
++ }
++
++ public final int getOffsetX(byte aSide, int aMultiplier) {
++ return getXCoord() + ForgeDirection.getOrientation(aSide).offsetX * aMultiplier;
++ }
++
++ public final short getOffsetY(byte aSide, int aMultiplier) {
++ return (short) (getYCoord() + ForgeDirection.getOrientation(aSide).offsetY * aMultiplier);
++ }
++
++ public final int getOffsetZ(byte aSide, int aMultiplier) {
++ return getZCoord() + ForgeDirection.getOrientation(aSide).offsetZ * aMultiplier;
++ }
++
++ public final TileEntity getTileEntity(int aX, int aY, int aZ) {
++ return getWorld().getTileEntity(aX, aY, aZ);
++ }
++
++ public final TileEntity getTileEntityAtSide(byte aSide) {
++ int tX = getOffsetX(aSide, 1), tY = getOffsetY(aSide, 1), tZ = getOffsetZ(aSide, 1);
++ return getWorld().getTileEntity(tX, tY, tZ);
++ }
++
++ public boolean outputEnergy() {
++ if (getOfferedEnergy() == 0) {
++ return false;
++ }
++ TileEntity t = getTileEntityAtSide((byte) side.ordinal());
++ if (t instanceof IEnergyConnected) {
++ long voltage = 8 << (getSourceTier() * 2);
++ if (voltage > getOfferedEnergy()) {
++ voltage = (long) getOfferedEnergy();
++ }
++ if (((IEnergyConnected) t).injectEnergyUnits(GT_Utility.getOppositeSide(side.ordinal()), voltage, 1) > 0) {
++ drawEnergy(voltage);
++ return true;
++ }
++ }
++ return false;
++ }
++
++ @Override
++ public TickingRequest getTickingRequest(IGridNode iGridNode) {
++ return new TickingRequest(1, 20, false, false);
++ }
++
++ @Override
++ public TickRateModulation tickingRequest(IGridNode iGridNode, int i) {
++ return outputEnergy() ? TickRateModulation.FASTER : TickRateModulation.SLOWER;
++ }
++}
+\ No newline at end of file
+--
+1.9.5.msysgit.0
+
+From a4a0a7c2cc3c299969c62e509cc3c366a90214f3 Mon Sep 17 00:00:00 2001
+From: Dream-Master <dream-master@gmx.net>
+Date: Tue, 12 Sep 2017 23:06:55 +0200
+Subject: [PATCH] cherry pick 11213d18d7345ee29f2efce6c5d421a855bed056
+ fb163d1be0aa291508bb6513e34cacba3ca06b36
+ fb508132d91543d5e837dfa4fac09cf5e4b9e7a8
+ d682ca0d36e3824b1bf73cc800f58c4126bcf104
+ 0f2db4f76a88c26ca08b2da444b264444ce01316
+ 50229e4506687d184c93ed702cdeeecea65e326a
+
+f5195f822d9951015c4ef6599e5b4f6544ec0714
+fbdb6ceecf60183ab382f043b78b61941157eccf
+55af1972b86a82bf6038342aa1a3bf9013d0f164
+
+c0d9d5a268da4b58385ee95e27408e06829c74b8
+416890142c0fa62617fc6e4537826689635e9eb3
+d532cb67f7bc68243e3d2dc2a12a466ed9c9e2d9
+d1671eaf33b3b4223da174e115f35b9bc1f19c5a
+4d90afad87375e3f1013a493f4b3b5d4e92bf521
+3c397d61697c13f0467e0cb67fb127fff8401f71
+64957ccd0f51ef283cc561d52a5439c3752c4e71
+
+b7e0863207253ee758742a22c607c3ccc37af6d3
+
+ae5a1e117d47876de9d2d2e8ea581e15686c5e1a
+a0eb30d03f8fc311598f628ad45b5365c7391917
+505a9c263e88e5519bade6a3167f829e41e13e64
+
+9cbb9c66a2f63e7e0cb4aceebfc9c93776b82be2
+
+Drillers upgrade #1163
+https://github.com/Blood-Asp/GT5-Unofficial/pull/1163
+---
+ src/main/java/gregtech/api/enums/ItemList.java | 2 +-
+ .../api/gui/GT_GUIContainer_MultiMachine.java | 25 +-
+ .../GT_MetaTileEntity_Hatch_DataAccess.java | 4 +
+ .../multi/GT_MetaTileEntity_AssemblyLine.java | 2 +-
+ .../GT_MetaTileEntity_ConcreteBackfiller1.java | 51 +++
+ .../GT_MetaTileEntity_ConcreteBackfiller2.java | 66 ++++
+ .../GT_MetaTileEntity_ConcreteBackfillerBase.java | 125 ++++++++
+ .../multi/GT_MetaTileEntity_DrillerBase.java | 357 +++++++++++++++++++++
+ .../machines/multi/GT_MetaTileEntity_OilDrill.java | 270 ----------------
+ .../multi/GT_MetaTileEntity_OilDrill1.java | 51 +++
+ .../multi/GT_MetaTileEntity_OilDrill2.java | 51 +++
+ .../multi/GT_MetaTileEntity_OilDrill3.java | 51 +++
+ .../multi/GT_MetaTileEntity_OilDrillBase.java | 152 +++++++++
+ .../GT_MetaTileEntity_OreDrillingPlantBase.java | 269 ++--------------
+ .../preload/GT_Loader_MetaTileEntities.java | 13 +-
+ 15 files changed, 959 insertions(+), 530 deletions(-)
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller1.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller2.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java
+ delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill1.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill2.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill3.java
+ create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
+
+diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
+index b1c993a..1e0f667 100644
+--- a/src/main/java/gregtech/api/enums/ItemList.java
++++ b/src/main/java/gregtech/api/enums/ItemList.java
+@@ -661,7 +661,7 @@ public enum ItemList implements IItemContainer {
+ Casing_Tank_1, Casing_Tank_2, Casing_Tank_3, Casing_Tank_4, Casing_Tank_5, Casing_Tank_6, Casing_Tank_7, Casing_Tank_8, Casing_Tank_9, Casing_Tank_10, Casing_Tank_11, Casing_Tank_12, Casing_Tank_13, Casing_Tank_14, Casing_Tank_15, Casing_Tank_0,
+ 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, OreDrill1, OreDrill2, OreDrill3, OreDrill4, PyrolyseOven, OilCracker, Crop_Drop_UUMBerry, Crop_Drop_UUABerry, Empty_Board_Basic, Empty_Board_Elite,
++ Honeycomb, Charcoal_Pile, Block_BrittleCharcoal, Seismic_Prospector, Seismic_Prospector_Adv, OilDrill1, OilDrill2, OilDrill3, ConcreteBackfiller1, ConcreteBackfiller2, 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/gui/GT_GUIContainer_MultiMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java
+index 5a7c487..62e6f8c 100644
+--- a/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java
++++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java
+@@ -1,14 +1,18 @@
+ package gregtech.api.gui;
+
+-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+-import gregtech.api.util.GT_LanguageManager;
+-import gregtech.api.util.GT_ModHandler;
+-import gregtech.api.util.GT_Utility;
+-import gregtech.common.items.GT_MetaGenerated_Tool_01;
+-import net.minecraft.entity.player.InventoryPlayer;
+-import net.minecraft.item.ItemStack;
++ import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
++
++ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
++ import gregtech.api.util.GT_LanguageManager;
++ import gregtech.api.util.GT_ModHandler;
++ import gregtech.api.util.GT_Utility;
++ import gregtech.common.items.GT_MetaGenerated_Tool_01;
++ import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_DrillerBase;
++ import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine;
++ import net.minecraft.entity.player.InventoryPlayer;
++ import net.minecraft.item.ItemStack;
++
+
+-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+
+ /**
+ * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
+@@ -54,13 +58,12 @@ public class GT_GUIContainer_MultiMachine extends GT_GUIContainerMetaTile_Machin
+ } else {
+ fontRendererObj.drawString(trans("142","Running perfectly."), 10, 16, 16448255);
+ }
+- int id = mContainer.mTileEntity.getMetaTileID();
+- if (id == 1157 || id == 1158 || id == 1177 || id == 1178 || id == 1179) {
++ if (mContainer.mTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_DrillerBase) {
+ ItemStack tItem = mContainer.mTileEntity.getMetaTileEntity().getStackInSlot(1);
+ if (tItem == null || !GT_Utility.areStacksEqual(tItem, GT_ModHandler.getIC2Item("miningPipe", 1L))) {
+ fontRendererObj.drawString(trans("143", "Missing Mining Pipe"), 10, ((GT_Container_MultiMachine) mContainer).mActive == 0 ? 40 : 24, 16448255);
+ }
+- } else if (id == 1131 || id == 1151 || id == 1152 || id == 1153) {
++ } else if (mContainer.mTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbine) {
+ ItemStack tItem = mContainer.mTileEntity.getMetaTileEntity().getStackInSlot(1);
+ if (tItem == null || !(tItem.getItem() == GT_MetaGenerated_Tool_01.INSTANCE && tItem.getItemDamage() >= 170 && tItem.getItemDamage() <= 177)) {
+ fontRendererObj.drawString(trans("144", "Missing Turbine Rotor"), 10, ((GT_Container_MultiMachine) mContainer).mActive == 0 ? 40 : 24, 16448255);
+diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java
+ind