package choonster.testmod3.item.block; import choonster.testmod3.block.BlockFluidTank; import choonster.testmod3.capability.CapabilityProviderSerializable; import choonster.testmod3.fluids.FluidTankItem; import choonster.testmod3.tileentity.TileEntityFluidTank; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.NonNullList; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * A Fluid Tank item. * * @author Choonster */ public class ItemFluidTank extends ItemBlock { private final List<ItemStack> tankItems = new ArrayList<>(); public ItemFluidTank(Block block) { super(block); setHasSubtypes(true); setMaxStackSize(1); } public void addFluid(FluidStack fluidStack) { final ItemStack filledTank = new ItemStack(this); final IFluidHandler fluidHandler = FluidUtil.getFluidHandler(filledTank); if (fluidHandler != null) { fluidHandler.fill(fluidStack, true); } tankItems.add(filledTank); } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack stack, EntityPlayer playerIn, List<String> tooltip, boolean advanced) { final IFluidHandler fluidHandler = FluidUtil.getFluidHandler(stack); if (fluidHandler != null) { final IFluidTankProperties[] properties = fluidHandler.getTankProperties(); final List<String> lines = BlockFluidTank.getFluidDataForDisplay(properties).stream() .map(ITextComponent::getFormattedText).collect(Collectors.toList()); tooltip.addAll(lines); } } @SideOnly(Side.CLIENT) @Override public void getSubItems(Item itemIn, CreativeTabs tab, NonNullList<ItemStack> subItems) { super.getSubItems(itemIn, tab, subItems); subItems.addAll(tankItems); } @Override public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) { return new CapabilityProviderSerializable<>(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null, new FluidTankItem(stack, TileEntityFluidTank.CAPACITY)); } }