package choonster.testmod3.network.capability.fluidhandler; import choonster.testmod3.network.capability.MessageBulkUpdateContainerCapability; import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; import javax.annotation.Nullable; /** * Updates the {@link FluidTank} for each slot of a {@link Container}. * * @author Choonster */ public class MessageBulkUpdateContainerFluidTanks extends MessageBulkUpdateContainerCapability<IFluidHandlerItem, FluidTankInfo> { @SuppressWarnings("unused") public MessageBulkUpdateContainerFluidTanks() { super(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); } public MessageBulkUpdateContainerFluidTanks(final int windowID, final NonNullList<ItemStack> items) { super(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null, windowID, items); } /** * Convert a capability handler instance to a data instance. * * @param fluidHandlerItem The handler * @return The data instance */ @Nullable @Override protected FluidTankInfo convertCapabilityToData(final IFluidHandlerItem fluidHandlerItem) { if (fluidHandlerItem instanceof FluidTank) { return ((FluidTank) fluidHandlerItem).getInfo(); } else { return null; } } /** * Read a data instance from the buffer. * * @param buf The buffer */ @Override protected FluidTankInfo readCapabilityData(final ByteBuf buf) { return MessageUpdateContainerFluidTank.readFluidTankInfo(buf); } /** * Write a data instance to the buffer. * * @param buf The buffer * @param fluidTankInfo The data instance */ @Override protected void writeCapabilityData(final ByteBuf buf, final FluidTankInfo fluidTankInfo) { MessageUpdateContainerFluidTank.writeFluidTankInfo(buf, fluidTankInfo); } public static class Handler extends MessageBulkUpdateContainerCapability.Handler<IFluidHandlerItem, FluidTankInfo, MessageBulkUpdateContainerFluidTanks> { /** * Apply the capability data from the data instance to the capability handler instance. * * @param fluidHandlerItem The capability handler instance * @param fluidTankInfo The data instance */ @Override protected void applyCapabilityData(IFluidHandlerItem fluidHandlerItem, FluidTankInfo fluidTankInfo) { if (fluidHandlerItem instanceof FluidTank) { ((FluidTank) fluidHandlerItem).setFluid(fluidTankInfo.fluid); } } } }