aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authorHarry <harryyunull@gmail.com>2023-07-24 03:55:26 -0400
committerGitHub <noreply@github.com>2023-07-24 09:55:26 +0200
commit75633e41387b6ef37dc02b7e0cc5076936c9b3ed (patch)
tree11ecfb9b62b8d9815aeabba5f06fe372cdd7a02b /src/main/java/gregtech/api
parent4a4881d79f40b8b800f9aa858542195efd1849d0 (diff)
downloadGT5-Unofficial-75633e41387b6ef37dc02b7e0cc5076936c9b3ed.tar.gz
GT5-Unofficial-75633e41387b6ef37dc02b7e0cc5076936c9b3ed.tar.bz2
GT5-Unofficial-75633e41387b6ef37dc02b7e0cc5076936c9b3ed.zip
Add Crafting Input Buffer (ME) (#2160)
* Crafting input buffer * persist data * rename and stuff * no more waiting for multis to start * rearrange ui * spotless * fixes * refactor * Crafting Input Slave * getCrafterIcon * crafting input bus * spotless * Update GT_MetaTileEntity_MultiBlockBase.java * Update GT_Loader_MetaTileEntities.java * Update GT_Loader_MetaTileEntities.java * Update GT_MetaTileEntity_MultiBlockBase.java * Update GT_MetaTileEntity_MultiBlockBase.java * Update GT_Loader_MetaTileEntities.java --------- Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java2
-rw-r--r--src/main/java/gregtech/api/enums/MetaTileEntityIDs.java3
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java3
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java50
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java74
5 files changed, 95 insertions, 37 deletions
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index 6d2cf37577..7f2cafc1aa 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -2001,6 +2001,8 @@ public enum ItemList implements IItemContainer {
Hatch_Input_Bus_ME,
Hatch_CraftingInput_Bus_ME,
+ Hatch_CraftingInput_Bus_ME_ItemOnly,
+ Hatch_CraftingInput_Bus_Slave,
AdvDebugStructureWriter,
Superconducting_Magnet_Solenoid_MV,
diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java
index d8c5be4bce..f5140af9a1 100644
--- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java
+++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java
@@ -604,6 +604,9 @@ public enum MetaTileEntityIDs {
OUTPUT_BUS_ME(2710),
INPUT_BUS_ME(2711),
OUTPUT_HATCH_ME(2713),
+ CRAFTING_INPUT_ME(2714),
+ CRAFTING_INPUT_ME_BUS(2715),
+ CRAFTING_INPUT_SLAVE(2716),
CHEST_BUFFER_ULV(9230),
CHEST_BUFFER_LV(9231),
CHEST_BUFFER_MV(9232),
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index 8dda90a630..7a21dad8cd 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -34,6 +34,9 @@ public class GT_UITextures {
.of(GregTech.ID, "gui/slot/uplifted", 18, 18, 1);
public static final UITexture OVERLAY_SLOT_ARROW_ME = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/arrow_me");
+ public static final UITexture OVERLAY_SLOT_PATTERN_ME = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_slot/pattern_me");
+
public static final UITexture OVERLAY_SLOT_BEAKER_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_1");
public static final UITexture OVERLAY_SLOT_BEAKER_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_2");
public static final UITexture OVERLAY_SLOT_BEE_DRONE = UITexture
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
index 01494828b9..938423012c 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
@@ -21,6 +21,8 @@ import gregtech.api.recipe.check.CheckRecipeResult;
import gregtech.api.recipe.check.CheckRecipeResultRegistry;
import gregtech.api.util.GT_ExoticEnergyInputHelper;
import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.machines.IDualInputHatch;
+import gregtech.common.tileentities.machines.IDualInputInventory;
/**
* Multiblock base class that allows machine to use power over int.
@@ -144,29 +146,45 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T extends GT
setupProcessingLogic(processingLogic);
- if (isInputSeparationEnabled()) {
- for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) {
- List<ItemStack> inputItems = new ArrayList<>();
- for (int i = bus.getSizeInventory() - 1; i >= 0; i--) {
- ItemStack stored = bus.getStackInSlot(i);
- if (stored != null) {
- inputItems.add(stored);
+ // check crafting input hatches first
+ for (IDualInputHatch dualInputHatch : mDualInputHatches) {
+ for (var it = dualInputHatch.inventories(); it.hasNext();) {
+ IDualInputInventory slot = it.next();
+ processingLogic.setInputItems(slot.getItemInputs());
+ processingLogic.setInputFluids(slot.getFluidInputs());
+ result = processingLogic.process();
+ if (result.wasSuccessful()) break;
+ }
+ if (result.wasSuccessful()) break;
+ }
+
+ processingLogic.setInputFluids(getStoredFluids());
+
+ if (!result.wasSuccessful()) {
+ if (isInputSeparationEnabled()) {
+ for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) {
+ List<ItemStack> inputItems = new ArrayList<>();
+ for (int i = bus.getSizeInventory() - 1; i >= 0; i--) {
+ ItemStack stored = bus.getStackInSlot(i);
+ if (stored != null) {
+ inputItems.add(stored);
+ }
+ }
+ if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
+ inputItems.add(getControllerSlot());
}
+ processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
+ result = processingLogic.process();
+ if (result.wasSuccessful()) break;
}
+ } else {
+ List<ItemStack> inputItems = getStoredInputs();
if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
inputItems.add(getControllerSlot());
}
- processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
+ processingLogic.setInputItems(inputItems);
result = processingLogic.process();
- if (result.wasSuccessful()) break;
- }
- } else {
- List<ItemStack> inputItems = getStoredInputs();
- if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
- inputItems.add(getControllerSlot());
}
- processingLogic.setInputItems(inputItems);
- result = processingLogic.process();
}
// inputs are consumed by `process()`
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 6578c82c30..8d57eb9e13 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
@@ -6,10 +6,7 @@ import static mcp.mobius.waila.api.SpecialChars.GREEN;
import static mcp.mobius.waila.api.SpecialChars.RED;
import static mcp.mobius.waila.api.SpecialChars.RESET;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -84,6 +81,8 @@ import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME;
+import gregtech.common.tileentities.machines.IDualInputHatch;
+import gregtech.common.tileentities.machines.IDualInputInventory;
import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
@@ -122,6 +121,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
public ArrayList<GT_MetaTileEntity_Hatch_Output> mOutputHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_InputBus> mInputBusses = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_OutputBus> mOutputBusses = new ArrayList<>();
+ public ArrayList<IDualInputHatch> mDualInputHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_Dynamo> mDynamoHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_Muffler> mMufflerHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_Energy> mEnergyHatches = new ArrayList<>();
@@ -488,6 +488,13 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
}
private boolean shouldCheckRecipeThisTick(long aTick) {
+ // do a recipe check if any crafting input hatch just got pushed in items
+ for (IDualInputHatch craftingInputMe : mDualInputHatches) {
+ if (craftingInputMe.justUpdated()) {
+ return true;
+ }
+ }
+
// Perform more frequent recipe change after the machine just shuts down.
long timeElapsed = aTick - mLastWorkingTick;
@@ -694,29 +701,45 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
setupProcessingLogic(processingLogic);
- if (isInputSeparationEnabled()) {
- for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) {
- List<ItemStack> inputItems = new ArrayList<>();
- for (int i = bus.getSizeInventory() - 1; i >= 0; i--) {
- ItemStack stored = bus.getStackInSlot(i);
- if (stored != null) {
- inputItems.add(stored);
+ // check crafting input hatches first
+ for (IDualInputHatch dualInputHatch : mDualInputHatches) {
+ for (var it = dualInputHatch.inventories(); it.hasNext();) {
+ IDualInputInventory slot = it.next();
+ processingLogic.setInputItems(slot.getItemInputs());
+ processingLogic.setInputFluids(slot.getFluidInputs());
+ result = processingLogic.process();
+ if (result.wasSuccessful()) break;
+ }
+ if (result.wasSuccessful()) break;
+ }
+
+ processingLogic.setInputFluids(getStoredFluids());
+
+ if (!result.wasSuccessful()) {
+ if (isInputSeparationEnabled()) {
+ for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) {
+ List<ItemStack> inputItems = new ArrayList<>();
+ for (int i = bus.getSizeInventory() - 1; i >= 0; i--) {
+ ItemStack stored = bus.getStackInSlot(i);
+ if (stored != null) {
+ inputItems.add(stored);
+ }
}
+ if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
+ inputItems.add(getControllerSlot());
+ }
+ processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
+ result = processingLogic.process();
+ if (result.wasSuccessful()) break;
}
+ } else {
+ List<ItemStack> inputItems = getStoredInputs();
if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
inputItems.add(getControllerSlot());
}
- processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
+ processingLogic.setInputItems(inputItems);
result = processingLogic.process();
- if (result.wasSuccessful()) break;
}
- } else {
- List<ItemStack> inputItems = getStoredInputs();
- if (getControllerSlot() != null && canUseControllerSlotForRecipe()) {
- inputItems.add(getControllerSlot());
- }
- processingLogic.setInputItems(inputItems);
- result = processingLogic.process();
}
// inputs are consumed by `process()`
@@ -754,7 +777,6 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
logic.setVoidProtection(protectsExcessItem(), protectsExcessFluid());
logic.setBatchSize(isBatchModeEnabled() ? getMaxBatchSize() : 1);
logic.setRecipeLocking(this, isRecipeLockingEnabled());
- logic.setInputFluids(getStoredFluids());
setProcessingLogicPower(logic);
}
@@ -1331,6 +1353,10 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
hatch.updateTexture(aBaseCasingIndex);
hatch.updateCraftingIcon(this.getMachineCraftingIcon());
}
+ if (aMetaTileEntity instanceof IDualInputHatch hatch) {
+ hatch.updateCraftingIcon(this.getMachineCraftingIcon());
+ return mDualInputHatches.add(hatch);
+ }
if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = getRecipeMap();
return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity);
@@ -1431,6 +1457,12 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
if (aTileEntity == null) return false;
IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof IDualInputHatch hatch) {
+ hatch.updateTexture(aBaseCasingIndex);
+ hatch.updateCraftingIcon(this.getMachineCraftingIcon());
+ return mDualInputHatches.add(hatch);
+ }
+
if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus hatch) {
hatch.updateTexture(aBaseCasingIndex);
hatch.updateCraftingIcon(this.getMachineCraftingIcon());