Corrected issues with filling fluid blocks

This commit is contained in:
DarkGuardsman 2013-10-08 06:54:32 -04:00
parent d620e24ba0
commit b5fd22ff24

View file

@ -299,44 +299,63 @@ public class FluidHelper
/** Does all the work needed to fill or drain an item of fluid when a player clicks on the block. */
public static boolean playerActivatedFluidItem(World world, int x, int y, int z, EntityPlayer entityplayer, int side)
{
if (world.isRemote)
ItemStack current = entityplayer.inventory.getCurrentItem();
if (current != null && world.getBlockTileEntity(x, y, z) instanceof IFluidHandler)
{
return true;
}
else if (entityplayer != null && !entityplayer.isSneaking())
{
ItemStack current = entityplayer.inventory.getCurrentItem().copy();
if (current != null && world.getBlockTileEntity(x, y, z) instanceof IFluidHandler)
FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(current);
IFluidHandler tank = (IFluidHandler) world.getBlockTileEntity(x, y, z);
if (liquid != null)
{
IFluidHandler tank = (IFluidHandler) world.getBlockTileEntity(x, y, z);
ItemStack reStack = FluidHelper.drainItem(current, tank, ForgeDirection.getOrientation(side));
boolean stackChanged = false;
if (reStack != null && reStack.isItemEqual(current))
{
reStack = FluidHelper.fillItem(current, tank, ForgeDirection.getOrientation(side));
}
stackChanged = reStack == null || !reStack.isItemEqual(current);
if (!entityplayer.capabilities.isCreativeMode && stackChanged)
{
if (current.stackSize > 1)
{
if (reStack != null && !entityplayer.inventory.addItemStackToInventory(reStack))
{
ItemWorldHelper.dropItemStack(world, new Vector3(x, y, z), reStack, true);
}
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, AutoCraftingManager.consumeItem(current, 1));
int qty = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
}
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, reStack);
}
entityplayer.inventoryContainer.detectAndSendChanges();
if (qty != 0 && !entityplayer.capabilities.isCreativeMode)
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, AutoCraftingManager.consumeItem(current, 1));
}
return true;
}
else
{
FluidStack available = tank.drain(ForgeDirection.getOrientation(side), Integer.MAX_VALUE, false);
if (available != null)
{
ItemStack filled = FluidContainerRegistry.fillFluidContainer(available, current);
liquid = FluidContainerRegistry.getFluidForFilledItem(filled);
if (liquid != null)
{
if (!entityplayer.capabilities.isCreativeMode)
{
if (current.stackSize > 1)
{
if (!entityplayer.inventory.addItemStackToInventory(filled))
{
return false;
}
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, AutoCraftingManager.consumeItem(current, 1));
}
}
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, AutoCraftingManager.consumeItem(current, 1));
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, filled);
}
}
tank.drain(ForgeDirection.UNKNOWN, liquid.amount, true);
return true;
}
}
return stackChanged;
}
}
return false;
}