aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJakub <53441451+kuba6000@users.noreply.github.com>2023-06-22 12:50:02 +0200
committerGitHub <noreply@github.com>2023-06-22 12:50:02 +0200
commiteb268a3c9329a9e4466ca5046016149b319c1842 (patch)
treecb8a9997d3019e69c2c2900893e38a6625191f3d /src/main
parent3e7d12c4150e49f2fae14f6c7dcdbbfad11ef519 (diff)
downloadGT5-Unofficial-eb268a3c9329a9e4466ca5046016149b319c1842.tar.gz
GT5-Unofficial-eb268a3c9329a9e4466ca5046016149b319c1842.tar.bz2
GT5-Unofficial-eb268a3c9329a9e4466ca5046016149b319c1842.zip
Output all crops / bees when controller is broken (#80)
* Fix bug in EEC * Output all crops / bees when controller is broken
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java34
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java1
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java35
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java12
4 files changed, 60 insertions, 22 deletions
diff --git a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java
index 09fb0a9b67..20de79cc24 100644
--- a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java
+++ b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java
@@ -25,6 +25,8 @@ import static kubatech.api.Variables.ln4;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import java.util.function.Function;
import net.minecraft.item.ItemStack;
@@ -48,6 +50,8 @@ import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.metatileentity.BaseMetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME;
public abstract class KubaTechGTMultiBlockBase<T extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T>>
extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T> {
@@ -196,6 +200,36 @@ public abstract class KubaTechGTMultiBlockBase<T extends GT_MetaTileEntity_Exten
return Math.log((double) getMaxInputEu() / 8d) / ln4 + 1e-8d;
}
+ protected boolean tryOutputAll(List<ItemStack> list) {
+ return tryOutputAll(list, l -> Collections.singletonList((ItemStack) l));
+ }
+
+ protected boolean tryOutputAll(List<?> list, Function<Object, List<ItemStack>> mappingFunction) {
+ if (list == null || list.isEmpty() || mappingFunction == null) return false;
+ int emptySlots = 0;
+ boolean ignoreEmptiness = false;
+ for (GT_MetaTileEntity_Hatch_OutputBus i : mOutputBusses) {
+ if (i instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) {
+ ignoreEmptiness = true;
+ break;
+ }
+ for (int j = 0; j < i.getSizeInventory(); j++)
+ if (i.isValidSlot(j)) if (i.getStackInSlot(j) == null) emptySlots++;
+ }
+ if (emptySlots == 0 && !ignoreEmptiness) return false;
+ boolean wasSomethingRemoved = false;
+ while (!list.isEmpty()) {
+ List<ItemStack> toOutputNow = mappingFunction.apply(list.get(0));
+ if (!ignoreEmptiness && emptySlots < toOutputNow.size()) break;
+ list.remove(0);
+ wasSomethingRemoved = true;
+ for (ItemStack stack : toOutputNow) {
+ addOutput(stack);
+ }
+ }
+ return wasSomethingRemoved;
+ }
+
@Override
public boolean isCorrectMachinePart(ItemStack aStack) {
return true;
diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
index fcaf2a833e..7f2c12ca1a 100644
--- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
@@ -510,6 +510,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
this.mMaxProgresstime = 400;
} else {
if (getMaxInputEu() < recipe.mEUt) return false;
+ if (recipe.alwaysinfernal && getMaxInputEu() < recipe.mEUt * 8) return false;
double attackDamage = DIAMOND_SPIKES_DAMAGE; // damage from spikes
GT_MetaTileEntity_Hatch_InputBus inputbus = this.mInputBusses.size() == 0 ? null : this.mInputBusses.get(0);
diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java
index 0c8dab2722..b898a11cc5 100644
--- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java
@@ -121,7 +121,6 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
@@ -129,7 +128,6 @@ import gregtech.common.GT_DummyWorld;
import gregtech.common.blocks.GT_Block_Ores_Abstract;
import gregtech.common.blocks.GT_Item_Ores;
import gregtech.common.blocks.GT_TileEntity_Ores;
-import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME;
import ic2.api.crops.CropCard;
import ic2.api.crops.Crops;
import ic2.core.Ic2Items;
@@ -217,6 +215,17 @@ public class GT_MetaTileEntity_ExtremeIndustrialGreenhouse
}
@Override
+ public void onRemoval() {
+ super.onRemoval();
+ if (getBaseMetaTileEntity().isServerSide()) tryOutputAll(mStorage, s -> {
+ ArrayList<ItemStack> l = new ArrayList<>(2);
+ l.add(((GreenHouseSlot) s).input.copy());
+ if (((GreenHouseSlot) s).undercrop != null) l.add(((GreenHouseSlot) s).undercrop.copy());
+ return l;
+ });
+ }
+
+ @Override
public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (aPlayer.isSneaking()) {
if (this.mMaxProgresstime > 0) {
@@ -415,22 +424,12 @@ public class GT_MetaTileEntity_ExtremeIndustrialGreenhouse
if (mStorage.size() >= mMaxSlots) break;
}
} else if (setupphase == 2) {
- int emptySlots = 0;
- boolean ignoreEmptiness = false;
- for (GT_MetaTileEntity_Hatch_OutputBus i : mOutputBusses) {
- if (i instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) {
- ignoreEmptiness = true;
- break;
- }
- for (int j = 0; j < i.getSizeInventory(); j++)
- if (i.isValidSlot(j)) if (i.getStackInSlot(j) == null) emptySlots++;
- }
- while (mStorage.size() > 0) {
- if (!ignoreEmptiness && (emptySlots -= 2) < 0) break;
- this.addOutput(this.mStorage.get(0).input.copy());
- if (this.mStorage.get(0).undercrop != null) this.addOutput(this.mStorage.get(0).undercrop.copy());
- this.mStorage.remove(0);
- }
+ tryOutputAll(mStorage, s -> {
+ ArrayList<ItemStack> l = new ArrayList<>(2);
+ l.add(((GreenHouseSlot) s).input.copy());
+ if (((GreenHouseSlot) s).undercrop != null) l.add(((GreenHouseSlot) s).undercrop.copy());
+ return l;
+ });
}
this.updateSlots();
diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java
index 43fea0f182..47cbd16a06 100644
--- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java
@@ -245,6 +245,13 @@ public class GT_MetaTileEntity_MegaIndustrialApiary
super(aName);
}
+ @Override
+ public void onRemoval() {
+ super.onRemoval();
+ if (getBaseMetaTileEntity().isServerSide())
+ tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack));
+ }
+
private boolean isCacheDirty = true;
private final HashMap<String, String> flowersCache = new HashMap<>();
private final HashSet<String> flowersCheck = new HashSet<>();
@@ -461,11 +468,8 @@ public class GT_MetaTileEntity_MegaIndustrialApiary
}
updateSlots();
} else if (mPrimaryMode == 1 && mStorage.size() > 0) {
- for (int i = 0, imax = Math.min(10, mStorage.size()); i < imax; i++) {
- addOutput(mStorage.get(0).queenStack);
- mStorage.remove(0);
+ if (tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack)))
isCacheDirty = true;
- }
} else return false;
mMaxProgresstime = 10;
mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);