aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.properties2
-rw-r--r--src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java2
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java113
3 files changed, 110 insertions, 7 deletions
diff --git a/build.properties b/build.properties
index 1de5716ea7..8512370094 100644
--- a/build.properties
+++ b/build.properties
@@ -1,6 +1,6 @@
minecraft.version=1.7.10
forge.version=10.13.4.1614-1.7.10
-gt.version=5.09.34.11
+gt.version=5.09.34.12
ae2.version=rv3-beta-22
applecore.version=1.7.10-1.2.1+107.59407
buildcraft.version=7.1.11
diff --git a/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java
index 8b26ef6423..fff5965d3d 100644
--- a/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java
+++ b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java
@@ -17,7 +17,7 @@ public class AE2DigitalChestHandler implements appeng.api.storage.IExternalStora
@Optional.Method(modid = "appliedenergistics2")
public appeng.api.storage.IMEInventory getInventory(final TileEntity te, final ForgeDirection d, final appeng.api.storage.StorageChannel chan, final appeng.api.networking.security.BaseActionSource src) {
if (chan == appeng.api.storage.StorageChannel.ITEMS) {
- return new appeng.me.storage.MEMonitorIInventory(new appeng.util.inv.IMEAdaptor((GT_MetaTileEntity_DigitalChestBase) (((BaseMetaTileEntity) te).getMetaTileEntity()), src));
+ return ((GT_MetaTileEntity_DigitalChestBase) (((BaseMetaTileEntity) te).getMetaTileEntity()));
}
return null;
}
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
index e9aa20e5ab..7c6168bacb 100644
--- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
@@ -1,6 +1,10 @@
package gregtech.common.tileentities.storage;
+import java.util.HashMap;
+import java.util.Map;
+
import cpw.mods.fml.common.Optional;
+import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -17,8 +21,9 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
-@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")
-public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEntity_TieredMachineBlock implements appeng.api.storage.IMEInventory<appeng.api.storage.data.IAEItemStack> {
+@Optional.Interface(iface = "appeng.api.storage.IMEMonitor", modid = "appliedenergistics2")
+public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEntity_TieredMachineBlock implements appeng.api.storage.IMEMonitor<appeng.api.storage.data.IAEItemStack> {
+ private Map<appeng.api.storage.IMEMonitorHandlerReceiver<appeng.api.storage.data.IAEItemStack>, Object> listeners = null;
public GT_MetaTileEntity_DigitalChestBase(int aID, String aName, String aNameRegional, int aTier) {
super(aID, aName, aNameRegional, aTier, 3, "This Chest stores " + CommonSizeCompute(aTier) + " Blocks Use a screwdriver to enable voiding items on overflow");
}
@@ -89,9 +94,10 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
}
int count = getItemCount();
ItemStack stack = getItemStack();
+ int savedCount = count;
+
if ((mInventory[0] != null) && ((count < getMaxItemCount())|| mVoidOverflow ) && GT_Utility.areStacksEqual(mInventory[0], stack)) {
count += mInventory[0].stackSize;
-
if (count <= getMaxItemCount()) {
mInventory[0] = null;
} else {
@@ -119,6 +125,11 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
} else {
mInventory[2] = null;
}
+
+ if (GregTech_API.mAE2)
+ notifyListeners(count - savedCount, stack);
+ if (count != savedCount)
+ getBaseMetaTileEntity().markDirty();
}
}
@@ -251,6 +262,8 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
final ItemStack inputStack = input.getItemStack();
if (inputStack == null)
return null;
+ if (mode != appeng.api.config.Actionable.SIMULATE)
+ getBaseMetaTileEntity().markDirty();
ItemStack storedStack = getItemStack();
if (storedStack != null) {
if (GT_Utility.areStacksEqual(storedStack, inputStack)) {
@@ -296,7 +309,9 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
@Optional.Method(modid = "appliedenergistics2")
public appeng.api.storage.data.IAEItemStack extractItems(final appeng.api.storage.data.IAEItemStack request, final appeng.api.config.Actionable mode, final appeng.api.networking.security.BaseActionSource src) {
- if (request.equals(getItemStack())) {
+ if (request.isSameType(getItemStack())) {
+ if (mode != appeng.api.config.Actionable.SIMULATE)
+ getBaseMetaTileEntity().markDirty();
if (request.getStackSize() >= getItemCount()) {
appeng.util.item.AEItemStack result = appeng.util.item.AEItemStack.create(getItemStack());
result.setStackSize(getItemCount());
@@ -318,7 +333,7 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
}
@Optional.Method(modid = "appliedenergistics2")
- public appeng.api.storage.data.IItemList<appeng.api.storage.data.IAEItemStack> getAvailableItems(final appeng.api.storage.data.IItemList<appeng.api.storage.data.IAEItemStack> out) {
+ public appeng.api.storage.data.IItemList<appeng.api.storage.data.IAEItemStack> getAvailableItems(final appeng.api.storage.data.IItemList out) {
ItemStack storedStack = getItemStack();
if (storedStack != null) {
appeng.util.item.AEItemStack s = appeng.util.item.AEItemStack.create(storedStack);
@@ -327,4 +342,92 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
}
return out;
}
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public appeng.api.storage.data.IItemList<appeng.api.storage.data.IAEItemStack> getStorageList() {
+ appeng.api.storage.data.IItemList<appeng.api.storage.data.IAEItemStack> res = new appeng.util.item.ItemList();
+ ItemStack storedStack = getItemStack();
+ if (storedStack != null) {
+ appeng.util.item.AEItemStack s = appeng.util.item.AEItemStack.create(storedStack);
+ s.setStackSize(getItemCount());
+ res.add(s);
+ }
+ return res;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public void addListener(appeng.api.storage.IMEMonitorHandlerReceiver<appeng.api.storage.data.IAEItemStack> imeMonitorHandlerReceiver, Object o) {
+ if (listeners == null)
+ listeners = new HashMap<>();
+ listeners.put(imeMonitorHandlerReceiver, o);
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public void removeListener(appeng.api.storage.IMEMonitorHandlerReceiver<appeng.api.storage.data.IAEItemStack> imeMonitorHandlerReceiver) {
+ if (listeners == null)
+ listeners = new HashMap<>();
+ listeners.remove(imeMonitorHandlerReceiver);
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public appeng.api.config.AccessRestriction getAccess() {
+ return appeng.api.config.AccessRestriction.READ_WRITE;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public boolean isPrioritized(appeng.api.storage.data.IAEItemStack iaeItemStack) {
+ return false;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public boolean canAccept(appeng.api.storage.data.IAEItemStack iaeItemStack) {
+ ItemStack s = getItemStack();
+ if (s == null || iaeItemStack == null)
+ return true;
+ return iaeItemStack.isSameType(s);
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public int getPriority() {
+ return 0;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public int getSlot() {
+ return 0;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ @Override
+ public boolean validForPass(int i) {
+ return true;
+ }
+
+ @Optional.Method(modid = "appliedenergistics2")
+ private void notifyListeners(int count, ItemStack stack) {
+ if (listeners == null) {
+ listeners = new HashMap<>();
+ return;
+ }
+ if (count == 0 || stack == null)
+ return;
+ appeng.util.item.ItemList change = new appeng.util.item.ItemList();
+ appeng.util.item.AEItemStack s = appeng.util.item.AEItemStack.create(stack);
+ s.setStackSize(count);
+ change.add(s);
+ listeners.forEach((l,o) ->{
+ if (l.isValid(o))
+ l.postChange(this, change, null);
+ else
+ removeListener(l);
+ });
+ }
}