diff --git a/src/main/java/com/asdflj/ae2thing/loader/InvLoader.java b/src/main/java/com/asdflj/ae2thing/loader/InvLoader.java new file mode 100644 index 0000000..67abe56 --- /dev/null +++ b/src/main/java/com/asdflj/ae2thing/loader/InvLoader.java @@ -0,0 +1,16 @@ +package com.asdflj.ae2thing.loader; + +import com.asdflj.ae2thing.util.BaublesUtil; +import com.asdflj.ae2thing.util.InvUtil; +import com.asdflj.ae2thing.util.ModAndClassUtil; + +public class InvLoader implements Runnable { + + @Override + public void run() { + InvUtil.INVENTORY.add(player -> player.inventory); + if (ModAndClassUtil.BAUBLES) { + InvUtil.INVENTORY.add(BaublesUtil::getBaublesInv); + } + } +} diff --git a/src/main/java/com/asdflj/ae2thing/network/CPacketInventoryActionExtend.java b/src/main/java/com/asdflj/ae2thing/network/CPacketInventoryActionExtend.java index efc8208..5d6ac3e 100644 --- a/src/main/java/com/asdflj/ae2thing/network/CPacketInventoryActionExtend.java +++ b/src/main/java/com/asdflj/ae2thing/network/CPacketInventoryActionExtend.java @@ -30,6 +30,7 @@ import com.asdflj.ae2thing.inventory.item.WirelessTerminal; import com.asdflj.ae2thing.util.BlockPos; import com.asdflj.ae2thing.util.CPUCraftingPreview; +import com.asdflj.ae2thing.util.InvUtil; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -112,23 +113,22 @@ private void extractItemFromME(EntityPlayer player, IAEItemStack requestItem, in if (requestItem.getStackSize() <= 0) { return; } - for (int i = 0; i < player.inventory.mainInventory.length; i++) { - ItemStack item = player.inventory.mainInventory[i]; - if (item != null && item.getItem() instanceof IWirelessTermHandler) { - try { - WirelessObject object = new WirelessObject(item, player.worldObj, slot, 0, 0, player); - if (object.rangeCheck() && requestItem.getStackSize() > 0) { - IAEItemStack result = object.getItemInventory() - .extractItems(requestItem, Actionable.MODULATE, object.getSource()); - if (result != null) { - requestItem.decStackSize(result.getStackSize()); - } - if (requestItem.getStackSize() <= 0) { - break; - } + List items = InvUtil + .matcher(player, stack -> stack != null && stack.getItem() instanceof IWirelessTermHandler); + for (ItemStack item : items) { + try { + WirelessObject object = new WirelessObject(item, player.worldObj, slot, 0, 0, player); + if (object.rangeCheck() && requestItem.getStackSize() > 0) { + IAEItemStack result = object.getItemInventory() + .extractItems(requestItem, Actionable.MODULATE, object.getSource()); + if (result != null) { + requestItem.decStackSize(result.getStackSize()); } - } catch (Exception ignored) {} - } + if (requestItem.getStackSize() <= 0) { + break; + } + } + } catch (Exception ignored) {} } } diff --git a/src/main/java/com/asdflj/ae2thing/proxy/CommonProxy.java b/src/main/java/com/asdflj/ae2thing/proxy/CommonProxy.java index 5a40823..4f3596c 100644 --- a/src/main/java/com/asdflj/ae2thing/proxy/CommonProxy.java +++ b/src/main/java/com/asdflj/ae2thing/proxy/CommonProxy.java @@ -34,6 +34,7 @@ import com.asdflj.ae2thing.common.tile.TileInfusionInterface; import com.asdflj.ae2thing.inventory.item.PatternModifierInventory; import com.asdflj.ae2thing.loader.BRLoader; +import com.asdflj.ae2thing.loader.InvLoader; import com.asdflj.ae2thing.loader.ItemAndBlockHolder; import com.asdflj.ae2thing.loader.PatternTerminalLoader; import com.asdflj.ae2thing.loader.PatternTerminalMouseWheelLoader; @@ -105,6 +106,7 @@ public void init(FMLInitializationEvent event) { } new PatternTerminalMouseWheelLoader().run(); new PatternTerminalLoader().run(); + new InvLoader().run(); } diff --git a/src/main/java/com/asdflj/ae2thing/util/InvUtil.java b/src/main/java/com/asdflj/ae2thing/util/InvUtil.java new file mode 100644 index 0000000..c7734c3 --- /dev/null +++ b/src/main/java/com/asdflj/ae2thing/util/InvUtil.java @@ -0,0 +1,79 @@ +package com.asdflj.ae2thing.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.tuple.ImmutablePair; + +public class InvUtil { + + public interface IInv { + + IInventory getInventory(EntityPlayer player); + + } + + public static List INVENTORY = new ArrayList<>(); + private final EntityPlayer player; + + public InvUtil(EntityPlayer player) { + this.player = player; + } + + public boolean contains(Predicate item) { + for (IInv obj : INVENTORY) { + IInventory inv = obj.getInventory(player); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (item.test(stack)) { + return true; + } + } + } + return false; + } + + public ImmutablePair find(Predicate item) { + for (IInv obj : INVENTORY) { + IInventory inv = obj.getInventory(player); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (item.test(stack)) { + return new ImmutablePair<>(i, stack); + } + } + } + return null; + } + + public static ImmutablePair find(EntityPlayer player, Predicate item) { + return new InvUtil(player).find(item); + } + + public List matcher(Predicate item) { + List items = new ArrayList<>(); + for (IInv obj : INVENTORY) { + IInventory inv = obj.getInventory(player); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (item.test(stack)) { + items.add(stack); + } + } + } + return items; + } + + public static List matcher(EntityPlayer player, Predicate item) { + return new InvUtil(player).matcher(item); + } + + public static boolean contains(EntityPlayer player, Predicate item) { + return new InvUtil(player).contains(item); + } +}