Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/main/java/com/asdflj/ae2thing/loader/InvLoader.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ItemStack> 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) {}
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/asdflj/ae2thing/proxy/CommonProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -105,6 +106,7 @@ public void init(FMLInitializationEvent event) {
}
new PatternTerminalMouseWheelLoader().run();
new PatternTerminalLoader().run();
new InvLoader().run();

}

Expand Down
79 changes: 79 additions & 0 deletions src/main/java/com/asdflj/ae2thing/util/InvUtil.java
Original file line number Diff line number Diff line change
@@ -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<IInv> INVENTORY = new ArrayList<>();
private final EntityPlayer player;

public InvUtil(EntityPlayer player) {
this.player = player;
}

public boolean contains(Predicate<ItemStack> 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<Integer, ItemStack> find(Predicate<ItemStack> 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<Integer, ItemStack> find(EntityPlayer player, Predicate<ItemStack> item) {
return new InvUtil(player).find(item);
}

public List<ItemStack> matcher(Predicate<ItemStack> item) {
List<ItemStack> 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<ItemStack> matcher(EntityPlayer player, Predicate<ItemStack> item) {
return new InvUtil(player).matcher(item);
}

public static boolean contains(EntityPlayer player, Predicate<ItemStack> item) {
return new InvUtil(player).contains(item);
}
}