Improve cell/bucket withdrawing from tank closes #2209
Not perfect but solved the problem on the issue
This commit is contained in:
parent
82c0722066
commit
bb13b2cafc
1 changed files with 48 additions and 7 deletions
|
@ -43,6 +43,7 @@ import reborncore.common.fluid.FluidValue;
|
||||||
import reborncore.common.fluid.container.FluidInstance;
|
import reborncore.common.fluid.container.FluidInstance;
|
||||||
import reborncore.common.fluid.container.ItemFluidInfo;
|
import reborncore.common.fluid.container.ItemFluidInfo;
|
||||||
import reborncore.common.util.Tank;
|
import reborncore.common.util.Tank;
|
||||||
|
import reborncore.common.util.WorldUtils;
|
||||||
import techreborn.blockentity.storage.fluid.TankUnitBaseBlockEntity;
|
import techreborn.blockentity.storage.fluid.TankUnitBaseBlockEntity;
|
||||||
import techreborn.client.GuiType;
|
import techreborn.client.GuiType;
|
||||||
import techreborn.init.TRContent;
|
import techreborn.init.TRContent;
|
||||||
|
@ -86,18 +87,46 @@ public class TankUnitBlock extends BlockMachineBase {
|
||||||
Tank tankInstance = tankUnitEntity.getTank();
|
Tank tankInstance = tankUnitEntity.getTank();
|
||||||
|
|
||||||
if(new FluidInstance(fluid).isEmptyFluid()){
|
if(new FluidInstance(fluid).isEmptyFluid()){
|
||||||
|
FluidValue amountInTank = tankInstance.getFluidInstance().getAmount();
|
||||||
|
|
||||||
FluidValue fluidValueAmount = FluidValue.BUCKET.multiply(amount);
|
|
||||||
// If tank has content, fill up user's inventory
|
// If tank has content, fill up user's inventory
|
||||||
if(tankInstance.getFluidInstance().getAmount().equalOrMoreThan(fluidValueAmount)){
|
if(amountInTank.equalOrMoreThan(FluidValue.BUCKET)){
|
||||||
|
|
||||||
// Add to player inventory
|
// Amount to transfer is whatever is lower (stack count or tank level)
|
||||||
ItemStack returnStack = itemFluid.getFull(tankInstance.getFluid());
|
int amountTransferBuckets = Math.min(amountInTank.getRawValue() / FluidValue.BUCKET.getRawValue(), stackInHand.getCount());
|
||||||
returnStack.setCount(amount);
|
|
||||||
playerIn.setStackInHand(Hand.MAIN_HAND, returnStack);
|
// Remove items from player
|
||||||
|
stackInHand.decrement(amountTransferBuckets);
|
||||||
|
|
||||||
|
// Deposit into inventory, one by one (Stupid buckets)
|
||||||
|
for(int i = 0; i < amountTransferBuckets; i++){
|
||||||
|
ItemStack item = itemFluid.getFull(tankInstance.getFluid());
|
||||||
|
|
||||||
|
boolean didInsert;
|
||||||
|
|
||||||
|
ItemStack selectedStack = playerIn.getMainHandStack();
|
||||||
|
|
||||||
|
// Insert to select if it can, otherwise anywhere.
|
||||||
|
if(selectedStack.isEmpty()){
|
||||||
|
playerIn.setStackInHand(Hand.MAIN_HAND, item);
|
||||||
|
didInsert = true;
|
||||||
|
}else if(isSameItemFluid(item, selectedStack) && selectedStack.getCount() < selectedStack.getMaxCount()) {
|
||||||
|
selectedStack.increment(1);
|
||||||
|
didInsert = true;
|
||||||
|
}else {
|
||||||
|
didInsert = playerIn.inventory.insertStack(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// If didn't insert, just drop it.
|
||||||
|
if(!didInsert){
|
||||||
|
WorldUtils.dropItem(item,worldIn, playerIn.getBlockPos());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove from tank
|
// Remove from tank
|
||||||
tankInstance.getFluidInstance().setAmount(tankInstance.getFluidAmount().subtract(fluidValueAmount));
|
tankInstance.getFluidInstance().setAmount(tankInstance.getFluidAmount().subtract(
|
||||||
|
FluidValue.BUCKET.multiply(amountTransferBuckets)));
|
||||||
}else{
|
}else{
|
||||||
return ActionResult.FAIL;
|
return ActionResult.FAIL;
|
||||||
}
|
}
|
||||||
|
@ -124,6 +153,18 @@ public class TankUnitBlock extends BlockMachineBase {
|
||||||
return super.onUse(state, worldIn, pos, playerIn, hand, hitResult);
|
return super.onUse(state, worldIn, pos, playerIn, hand, hitResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isSameItemFluid(ItemStack i1, ItemStack i2){
|
||||||
|
// Only care about cells, buckets don't stack
|
||||||
|
if(!(i1.getItem() instanceof DynamicCellItem && i2.getItem() instanceof DynamicCellItem)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicCellItem dc1 = (DynamicCellItem)i1.getItem();
|
||||||
|
DynamicCellItem dc2 = (DynamicCellItem)i2.getItem();
|
||||||
|
|
||||||
|
return dc1.getFluid(i1).matchesType(dc2.getFluid(i2));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMachineGuiHandler getGui() {
|
public IMachineGuiHandler getGui() {
|
||||||
return GuiType.TANK_UNIT;
|
return GuiType.TANK_UNIT;
|
||||||
|
|
Loading…
Reference in a new issue