Capable fluid sigils (#1517)

* Inital commit.

Water Sigil can now be used as infinite water tank item to fill machines with water (as long as you have LP) (Doesn't use LP yet).

* Should now work for all fluid sigils.

* Reverted Bound tool change

* Moved the code out of the spacey loft
IDE said it's ok... or something
This commit is contained in:
Tobias Gremeyer 2019-01-21 00:24:28 +01:00 committed by Nick Ignoffo
parent 31c606495c
commit 399c2723d3
4 changed files with 184 additions and 2 deletions

View file

@ -0,0 +1,12 @@
package WayofTime.bloodmagic.util;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
public interface ISigilFluidItem {
FluidStack getFluid(ItemStack sigil);
int getCapacity(ItemStack sigil);
int fill(ItemStack sigil, FluidStack resource, boolean doFill);
FluidStack drain(ItemStack sigil, int maxDrain, boolean doDrain);
}

View file

@ -0,0 +1,81 @@
package WayofTime.bloodmagic.util;
import WayofTime.bloodmagic.item.sigil.ItemSigilFluidBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.FluidTankProperties;
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class SigilFluidWrapper implements ICapabilityProvider {
final ItemStack stack;
final ItemSigilFluidBase sigil;
final boolean canFill;
final boolean canDrain;
public SigilFluidWrapper(ItemStack stackIn, ItemSigilFluidBase fluidSigil) {
stack = stackIn;
sigil = fluidSigil;
canFill = true;
canDrain = true;
}
public SigilFluidWrapper(ItemStack stackIn, ItemSigilFluidBase fluidSigil, boolean canFillIn, boolean canDrainIn) {
stack = stackIn;
sigil = fluidSigil;
canFill = canFillIn;
canDrain = canDrainIn;
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing from) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY;
}
@Override
public <T> T getCapability(Capability<T> capability, final EnumFacing from) {
if (!hasCapability(capability, from)) {
return null;
}
return CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY.cast(new IFluidHandlerItem() {
@Override
public IFluidTankProperties[] getTankProperties() {
return new IFluidTankProperties[]{new FluidTankProperties(sigil.getFluid(stack), sigil.getCapacity(stack), canFill, canDrain)};
}
@Override
public int fill(FluidStack resource, boolean doFill) {
return 0;
}
@Nullable
@Override
public FluidStack drain(FluidStack resource, boolean doDrain) {
return sigil.drain(stack, resource.amount, doDrain);
}
@Nullable
@Override
public FluidStack drain(int maxDrain, boolean doDrain) {
return sigil.drain(stack, maxDrain, doDrain);
}
@Nonnull
@Override
public ItemStack getContainer() {
return stack;
}
});
}
}