package com.glodblock.github.nei; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import com.glodblock.github.nei.object.OrderStack; public class NEIUtils { public static List> compress(List> list) { List> comp = new LinkedList<>(); for (OrderStack orderStack : list) { if (orderStack == null) continue; if (orderStack.getStack() instanceof FluidStack) { comp.add(orderStack); continue; } ItemStack currentStack = (ItemStack) orderStack.getStack(); if (currentStack.stackSize == 0) continue; boolean find = false; for (OrderStack storedStack : comp) { if (storedStack == null || !(storedStack.getStack() instanceof ItemStack)) continue; ItemStack firstStack = (ItemStack) storedStack.getStack(); boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { find = true; ((ItemStack) storedStack.getStack()).stackSize = firstStack.stackSize + currentStack.stackSize; } } if (!find) { comp.add(orderStack); } } return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); } public static List> clearNull(List> list) { List> cleared = new LinkedList<>(); HashMap map = new HashMap<>(); int upper = 0; for (OrderStack orderStack : list) { if (orderStack != null && orderStack.getStack() != null) { if (orderStack.getStack() instanceof ItemStack && ((ItemStack) orderStack.getStack()).stackSize == 0) continue; map.put(orderStack.getIndex(), orderStack.getStack()); upper = Math.max(upper, orderStack.getIndex()); } } int id = 0; for (int i = 0; i <= upper; i++) { if (map.containsKey(i)) { cleared.add(new OrderStack<>(map.get(i), id)); id++; } } return cleared; } }