diff options
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); + }); + } } |