Fix behavior with Porcelain Milk Bucket

This commit is contained in:
thedarkcolour 2024-02-11 15:23:29 -08:00
parent 13244d5366
commit 483687dfe8
2 changed files with 22 additions and 12 deletions

View File

@ -236,18 +236,20 @@ public class PorcelainBucket extends Item {
private final LazyOptional<IFluidHandlerItem> holder = LazyOptional.of(() -> this);
private ItemStack container;
public CapabilityProvider(@NotNull ItemStack container) {
public CapabilityProvider(ItemStack container) {
this.container = container;
}
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
return ForgeCapabilities.FLUID_HANDLER_ITEM.orEmpty(cap, this.holder);
@NotNull
public ItemStack getContainer() {
return this.container;
}
@Override
public @NotNull ItemStack getContainer() {
return this.container;
@NotNull
public <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
return ForgeCapabilities.FLUID_HANDLER_ITEM.orEmpty(cap, this.holder);
}
@Override
@ -256,7 +258,8 @@ public class PorcelainBucket extends Item {
}
@Override
public @NotNull FluidStack getFluidInTank(int tank) {
@NotNull
public FluidStack getFluidInTank(int tank) {
return getFluid();
}
@ -267,7 +270,7 @@ public class PorcelainBucket extends Item {
@Override
public boolean isFluidValid(int tank, @NotNull FluidStack stack) {
return stack.getFluid() == Fluids.LAVA || stack.getFluid() == Fluids.WATER || stack.getFluid() == EFluids.WITCH_WATER.get();
return stack.getFluid() == Fluids.LAVA || stack.getFluid() == Fluids.WATER || stack.getFluid() == EFluids.WITCH_WATER.get() || (ForgeMod.MILK.isPresent() && stack.getFluid() == ForgeMod.MILK.get());
}
@Override
@ -282,7 +285,8 @@ public class PorcelainBucket extends Item {
}
@Override
public @NotNull FluidStack drain(FluidStack resource, IFluidHandler.FluidAction action) {
@NotNull
public FluidStack drain(FluidStack resource, IFluidHandler.FluidAction action) {
if (this.container.getCount() != 1 || resource.getAmount() < 1000) {
return FluidStack.EMPTY;
}
@ -298,7 +302,8 @@ public class PorcelainBucket extends Item {
}
@Override
public @NotNull FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) {
@NotNull
public FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) {
if (this.container.getCount() != 1 || maxDrain < 1000) {
return FluidStack.EMPTY;
}
@ -323,12 +328,14 @@ public class PorcelainBucket extends Item {
return new FluidStack(Fluids.WATER, 1000);
} else if (item == EItems.PORCELAIN_WITCH_WATER_BUCKET.get()) {
return new FluidStack(EFluids.WITCH_WATER.get(), 1000);
} else if (item == EItems.PORCELAIN_MILK_BUCKET.get() && ForgeMod.MILK.isPresent()) {
return new FluidStack(ForgeMod.MILK.get(), 1000);
}
return FluidStack.EMPTY;
}
void setFluid(FluidStack fluidStack) {
protected void setFluid(FluidStack fluidStack) {
if (fluidStack.isEmpty()) {
this.container = new ItemStack(EItems.PORCELAIN_BUCKET.get());
} else if (fluidStack.getFluid() == Fluids.LAVA) {
@ -337,6 +344,8 @@ public class PorcelainBucket extends Item {
this.container = new ItemStack(EItems.PORCELAIN_WATER_BUCKET.get());
} else if (fluidStack.getFluid() == EFluids.WITCH_WATER.get()) {
this.container = new ItemStack(EItems.PORCELAIN_WITCH_WATER_BUCKET.get());
} else if (ForgeMod.MILK.isPresent() && fluidStack.getFluid() == ForgeMod.MILK.get()) {
this.container = new ItemStack(EItems.PORCELAIN_MILK_BUCKET.get());
}
}
}

View File

@ -24,6 +24,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.MilkBucketItem;
import net.minecraft.world.level.Level;
import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.fluids.FluidStack;
import org.jetbrains.annotations.NotNull;
@ -48,7 +49,7 @@ public class PorcelainMilkBucket extends MilkBucketItem {
@Override
public @Nullable ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) {
return new CapabilityProvider(stack);
return new PorcelainBucket.CapabilityProvider(stack);
}
private static class CapabilityProvider extends PorcelainBucket.CapabilityProvider {
@ -58,7 +59,7 @@ public class PorcelainMilkBucket extends MilkBucketItem {
@Override
public boolean isFluidValid(int tank, @NotNull FluidStack stack) {
return false;
return ForgeMod.MILK.isPresent();
}
}
}