package buildcraft.core.list; import java.util.ArrayList; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; import buildcraft.api.lists.ListMatchHandler; import buildcraft.core.lib.inventory.StackHelper; import buildcraft.core.lib.utils.FluidUtils; public class ListMatchHandlerFluid extends ListMatchHandler { @Override public boolean matches(Type type, ItemStack stack, ItemStack target, boolean precise) { if (type == Type.TYPE) { if (FluidContainerRegistry.isContainer(stack) && FluidContainerRegistry.isContainer(target)) { ItemStack emptyContainerStack = FluidContainerRegistry.drainFluidContainer(stack); ItemStack emptyContainerTarget = FluidContainerRegistry.drainFluidContainer(target); if (StackHelper.isMatchingItem(emptyContainerStack, emptyContainerTarget, true, true)) { return true; } } } else if (type == Type.MATERIAL) { FluidStack fStack = FluidUtils.getFluidStackFromItemStack(stack); FluidStack fTarget = FluidUtils.getFluidStackFromItemStack(target); if (fStack != null && fTarget != null) { return fStack.isFluidEqual(fTarget); } } return false; } @Override public boolean isValidSource(Type type, ItemStack stack) { if (type == Type.TYPE) { return FluidContainerRegistry.isContainer(stack); } else if (type == Type.MATERIAL) { return FluidUtils.getFluidStackFromItemStack(stack) != null; } return false; } @Override public List<ItemStack> getClientExamples(Type type, ItemStack stack) { if (type == Type.MATERIAL) { FluidStack fStack = FluidUtils.getFluidStackFromItemStack(stack); if (fStack != null) { List<ItemStack> examples = new ArrayList<ItemStack>(); for (FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { if (fStack.isFluidEqual(data.fluid)) { examples.add(data.filledContainer); } } return examples; } } else if (type == Type.TYPE) { if (FluidContainerRegistry.isContainer(stack)) { List<ItemStack> examples = new ArrayList<ItemStack>(); ItemStack emptyContainerStack = FluidContainerRegistry.drainFluidContainer(stack); examples.add(stack); examples.add(emptyContainerStack); for (FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { if (StackHelper.isMatchingItem(data.emptyContainer, emptyContainerStack, true, true)) { examples.add(data.filledContainer); } } return examples; } } return null; } }