aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java3
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java135
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang2
3 files changed, 56 insertions, 84 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java
index c29cc2c33a..44e3771ab8 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java
@@ -1,5 +1,6 @@
package gregtech.api.metatileentity.implementations;
+import com.mojang.authlib.GameProfile;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ItemList;
@@ -26,6 +27,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.FakePlayer;
+import net.minecraftforge.common.util.FakePlayer;
+
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_IDLE;
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
index 6b1ee8c941..1ad96087bc 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
@@ -7,6 +7,7 @@ import appeng.api.networking.security.IActionHost;
import appeng.api.networking.security.MachineSource;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.data.IAEItemStack;
+import appeng.api.storage.data.IItemList;
import appeng.api.util.AECableType;
import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
@@ -25,6 +26,8 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH;
@@ -32,10 +35,11 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH;
public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatch_OutputBus {
private BaseActionSource requestSource = null;
private AENetworkProxy gridProxy = null;
- ItemStack cachedStack = null;
+ IItemList<IAEItemStack> itemCache = GregTech_API.mAE2 ? AEApi.instance().storage().createItemList() : null;
long lastOutputTick = 0;
long tickCounter = 0;
boolean lastOutputFailed = false;
+ boolean infiniteCache = true;
public GT_MetaTileEntity_Hatch_OutputBus_ME(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional, 1, new String[]{
@@ -83,73 +87,10 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
*/
@Optional.Method(modid = "appliedenergistics2")
public int store(final ItemStack stack) {
- if (stack == null)
- return 0;
- try {
- AENetworkProxy proxy = getProxy();
- if (proxy == null)
- {
- lastOutputFailed = true;
- int cacheSize = cachedStack == null ? 0 : cachedStack.stackSize;
- cachedStack = null;
- return stack.stackSize + cacheSize;
- }
- if (lastOutputFailed) // if last output failed, don't buffer
- {
- IMEMonitor<IAEItemStack> sg = proxy.getStorage().getItemInventory();
- IAEItemStack toStore = AEApi.instance().storage().createItemStack(stack);
- IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, toStore, getRequest());
- if (rest != null && rest.getStackSize() > 0)
- return (int) rest.getStackSize();
- else
- lastOutputFailed = false;
- }
- else if (cachedStack != null && ((tickCounter > (lastOutputTick+20)) || !cachedStack.isItemEqual(stack)))
- {
- lastOutputTick = tickCounter;
- boolean sameStack = cachedStack.isItemEqual(stack);
- if (sameStack)
- cachedStack.stackSize += stack.stackSize;
- IMEMonitor<IAEItemStack> sg = proxy.getStorage().getItemInventory();
- IAEItemStack toStore = AEApi.instance().storage().createItemStack(cachedStack);
- IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, toStore, getRequest());
- if (rest != null && rest.getStackSize() > 0)
- {
- lastOutputFailed = true;
- if (sameStack) // return all that was cached to sender
- {
- cachedStack = null;
- return (int) rest.getStackSize();
- }
- else // leave the cache, and return input to sender
- {
- cachedStack.stackSize = (int)rest.getStackSize();
- return stack.stackSize;
- }
- }
- else
- {
- if (!sameStack)
- cachedStack = stack.copy();
- else
- cachedStack = null;
- return 0;
- }
- }
- else
- {
- if (cachedStack == null)
- cachedStack = stack.copy();
- else
- cachedStack.stackSize += stack.stackSize;
- }
- return 0;
- }
- catch( final GridAccessException ignored )
- {
- lastOutputFailed = true;
- }
- return stack.stackSize;
+ if (!infiniteCache && lastOutputFailed)
+ return stack.stackSize;
+ itemCache.add(AEApi.instance().storage().createItemStack(stack));
+ return 0;
}
@Optional.Method(modid = "appliedenergistics2")
@@ -171,6 +112,14 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
}
@Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (!getBaseMetaTileEntity().getCoverBehaviorAtSideNew(aSide).isGUIClickable(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), getBaseMetaTileEntity()))
+ return;
+ infiniteCache = !infiniteCache;
+ GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.hatch.infiniteCache." + infiniteCache));
+ }
+
+ @Override
@Optional.Method(modid = "appliedenergistics2")
public AENetworkProxy getProxy() {
if (gridProxy == null) {
@@ -191,8 +140,6 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
@Optional.Method(modid = "appliedenergistics2")
private void flushCachedStack()
{
- if (cachedStack == null)
- return;
AENetworkProxy proxy = getProxy();
if (proxy == null) {
lastOutputFailed = true;
@@ -200,14 +147,17 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
}
try {
IMEMonitor<IAEItemStack> sg = proxy.getStorage().getItemInventory();
- IAEItemStack toStore = AEApi.instance().storage().createItemStack(cachedStack);
- IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, toStore, getRequest());
- if (rest != null && rest.getStackSize() > 0) {
- lastOutputFailed = true;
- cachedStack.stackSize = (int) rest.getStackSize();
+ for (IAEItemStack s: itemCache) {
+ if (s.getStackSize() == 0)
+ continue;
+ IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, s, getRequest());
+ if (rest != null && rest.getStackSize() > 0) {
+ lastOutputFailed = true;
+ s.setStackSize(rest.getStackSize());
+ break;
+ }
+ s.setStackSize(0);
}
- else
- cachedStack = null;
}
catch( final GridAccessException ignored )
{
@@ -228,19 +178,36 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
public void saveNBTData(NBTTagCompound aNBT)
{
super.saveNBTData(aNBT);
- if (cachedStack != null) {
- NBTTagCompound tTag = new NBTTagCompound();
- cachedStack.writeToNBT(tTag);
- aNBT.setTag("cachedStack", tTag);
+
+ if (GregTech_API.mAE2) {
+ NBTTagList items = new NBTTagList();
+ for (IAEItemStack s: itemCache) {
+ if (s.getStackSize() == 0)
+ continue;
+ NBTTagCompound tag = new NBTTagCompound();
+ s.getItemStack().writeToNBT(tag);
+ items.appendTag(tag);
+ }
+ aNBT.setTag("cachedItems", items);
}
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
- NBTBase t = aNBT.getTag("cachedStack");
- if (t instanceof NBTTagCompound)
- cachedStack = GT_Utility.loadItem((NBTTagCompound)t);
+
+ if (GregTech_API.mAE2) {
+ NBTBase t = aNBT.getTag("cachedStack"); // legacy
+ if (t instanceof NBTTagCompound)
+ itemCache.add(AEApi.instance().storage().createItemStack(GT_Utility.loadItem((NBTTagCompound) t)));
+ t = aNBT.getTag("cachedItems");
+ if (t instanceof NBTTagList) {
+ NBTTagList l = (NBTTagList)t;
+ for (int i = 0; i < l.tagCount(); ++i) {
+ itemCache.add(AEApi.instance().storage().createItemStack(GT_Utility.loadItem(l.getCompoundTagAt(i))));
+ }
+ }
+ }
}
public boolean isLastOutputFailed() {
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index daf178e798..e430765d48 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -151,6 +151,8 @@ GT5U.hatch.disableSort.true=Sorting mode: OFF
GT5U.hatch.disableSort.false=Sorting mode: ON
GT5U.hatch.disableLimited.true=Limiting mode: OFF
GT5U.hatch.disableLimited.false=Limiting mode: ON
+GT5U.hatch.infiniteCache.true=ME Output bus will infinitely cache item, until you connect it to ME
+GT5U.hatch.infiniteCache.false=ME Output bus will stop accepting items when offline for more than 2 seconds
GT5U.multiblock.pollution=Pollution reduced to
GT5U.multiblock.energy=Stored Energy