Tank-based fluid container interaction fixes. Can't figure out the data request issue.
This commit is contained in:
parent
8a8086af3f
commit
f67be01658
6 changed files with 135 additions and 122 deletions
|
@ -463,7 +463,6 @@ public class CommonProxy
|
|||
|
||||
public EntityPlayer getPlayer(MessageContext context)
|
||||
{
|
||||
|
||||
return context.getServerHandler().playerEntity;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -133,7 +133,6 @@ import org.apache.logging.log4j.Logger;
|
|||
import rebelkeithy.mods.metallurgy.api.IOreInfo;
|
||||
import rebelkeithy.mods.metallurgy.api.MetallurgyAPI;
|
||||
import codechicken.multipart.handler.MultipartProxy;
|
||||
|
||||
import cpw.mods.fml.client.event.ConfigChangedEvent;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.IFuelHandler;
|
||||
|
@ -775,6 +774,11 @@ public class Mekanism
|
|||
RecipeHandler.addCrusherRecipe(new ItemStack(Items.flint, 4), new ItemStack(Items.gunpowder));
|
||||
RecipeHandler.addCrusherRecipe(new ItemStack(Blocks.sandstone), new ItemStack(Blocks.sand, 2));
|
||||
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
RecipeHandler.addCrusherRecipe(new ItemStack(Blocks.wool, 1, i), new ItemStack(Items.string, 4));
|
||||
}
|
||||
|
||||
//BioFuel Crusher Recipes
|
||||
RecipeHandler.addCrusherRecipe(new ItemStack(Blocks.tallgrass), new ItemStack(BioFuel, 4));
|
||||
RecipeHandler.addCrusherRecipe(new ItemStack(Items.reeds), new ItemStack(BioFuel, 2));
|
||||
|
|
|
@ -31,23 +31,7 @@ public final class OreDictCache
|
|||
{
|
||||
return cachedKeys.get(info);
|
||||
}
|
||||
/*
|
||||
List<Integer> idsFound = new ArrayList<Integer>();
|
||||
HashMap<Integer, ArrayList<ItemStack>> oreStacks = (HashMap<Integer, ArrayList<ItemStack>>)MekanismUtils.getPrivateValue(null, OreDictionary.class, new String[] {"oreStacks"});
|
||||
oreStacks = (HashMap<Integer, ArrayList<ItemStack>>)oreStacks.clone();
|
||||
|
||||
for(Map.Entry<Integer, ArrayList<ItemStack>> entry : oreStacks.entrySet())
|
||||
{
|
||||
for(ItemStack stack : entry.getValue())
|
||||
{
|
||||
if(StackUtils.equalsWildcard(stack, check))
|
||||
{
|
||||
idsFound.add(entry.getKey());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
int[] idsFound = OreDictionary.getOreIDs(check);
|
||||
|
||||
List<String> ret = new ArrayList<String>();
|
||||
|
|
|
@ -470,11 +470,8 @@ public class BlockBasic extends Block
|
|||
|
||||
if(itemStack.stackSize > 1)
|
||||
{
|
||||
for(int i = 0; i < player.inventory.mainInventory.length; i++)
|
||||
if(player.inventory.addItemStackToInventory(filled))
|
||||
{
|
||||
if(player.inventory.mainInventory[i] == null)
|
||||
{
|
||||
player.inventory.mainInventory[i] = filled;
|
||||
itemStack.stackSize--;
|
||||
|
||||
tileEntity.structure.fluidStored.amount -= FluidContainerRegistry.getFluidForFilledItem(filled).amount;
|
||||
|
@ -486,24 +483,6 @@ public class BlockBasic extends Block
|
|||
|
||||
return true;
|
||||
}
|
||||
else if(player.inventory.mainInventory[i].isItemEqual(filled))
|
||||
{
|
||||
if(filled.getMaxStackSize() > player.inventory.mainInventory[i].stackSize)
|
||||
{
|
||||
player.inventory.mainInventory[i].stackSize++;
|
||||
itemStack.stackSize--;
|
||||
|
||||
tileEntity.structure.fluidStored.amount -= FluidContainerRegistry.getFluidForFilledItem(filled).amount;
|
||||
|
||||
if(tileEntity.structure.fluidStored.amount == 0)
|
||||
{
|
||||
tileEntity.structure.fluidStored = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(itemStack.stackSize == 1)
|
||||
{
|
||||
|
@ -528,34 +507,45 @@ public class BlockBasic extends Block
|
|||
|
||||
if(tileEntity.structure.fluidStored == null || (tileEntity.structure.fluidStored.isFluidEqual(itemFluid) && (tileEntity.structure.fluidStored.amount+itemFluid.amount <= max)))
|
||||
{
|
||||
if(FluidContainerRegistry.isBucket(itemStack))
|
||||
boolean filled = false;
|
||||
|
||||
if(player.capabilities.isCreativeMode)
|
||||
{
|
||||
if(tileEntity.structure.fluidStored == null)
|
||||
{
|
||||
tileEntity.structure.fluidStored = itemFluid;
|
||||
filled = true;
|
||||
}
|
||||
else {
|
||||
tileEntity.structure.fluidStored.amount += itemFluid.amount;
|
||||
}
|
||||
ItemStack containerItem = itemStack.getItem().getContainerItem(itemStack);
|
||||
|
||||
if(!player.capabilities.isCreativeMode)
|
||||
if(containerItem != null)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, new ItemStack(Items.bucket));
|
||||
}
|
||||
|
||||
return true;
|
||||
if(itemStack.stackSize == 1)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, containerItem);
|
||||
filled = true;
|
||||
}
|
||||
else {
|
||||
if(!player.capabilities.isCreativeMode)
|
||||
if(player.inventory.addItemStackToInventory(containerItem))
|
||||
{
|
||||
itemStack.stackSize--;
|
||||
|
||||
filled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
itemStack.stackSize--;
|
||||
|
||||
if(itemStack.stackSize == 0)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, null);
|
||||
}
|
||||
|
||||
filled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(filled)
|
||||
{
|
||||
if(tileEntity.structure.fluidStored == null)
|
||||
{
|
||||
tileEntity.structure.fluidStored = itemFluid;
|
||||
|
|
|
@ -85,7 +85,6 @@ import net.minecraftforge.common.util.ForgeDirection;
|
|||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import buildcraft.api.tools.IToolWrench;
|
||||
|
||||
import cpw.mods.fml.common.ModAPIManager;
|
||||
import cpw.mods.fml.common.Optional.Interface;
|
||||
import cpw.mods.fml.common.Optional.Method;
|
||||
|
@ -745,7 +744,11 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
|||
{
|
||||
if(entityplayer.getCurrentEquippedItem() != null && FluidContainerRegistry.isContainer(entityplayer.getCurrentEquippedItem()))
|
||||
{
|
||||
manageInventory(entityplayer, (TileEntityPortableTank)tileEntity);
|
||||
if(manageInventory(entityplayer, (TileEntityPortableTank)tileEntity))
|
||||
{
|
||||
entityplayer.inventory.markDirty();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
entityplayer.openGui(Mekanism.instance, type.guiId, world, x, y, z);
|
||||
|
@ -869,29 +872,11 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
|||
|
||||
if(itemStack.stackSize > 1)
|
||||
{
|
||||
for(int i = 0; i < player.inventory.mainInventory.length; i++)
|
||||
if(player.inventory.addItemStackToInventory(filled))
|
||||
{
|
||||
if(player.inventory.mainInventory[i] == null)
|
||||
{
|
||||
player.inventory.mainInventory[i] = filled;
|
||||
itemStack.stackSize--;
|
||||
|
||||
tileEntity.fluidTank.drain(FluidContainerRegistry.getFluidForFilledItem(filled).amount, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
else if(player.inventory.mainInventory[i].isItemEqual(filled))
|
||||
{
|
||||
if(filled.getMaxStackSize() > player.inventory.mainInventory[i].stackSize)
|
||||
{
|
||||
player.inventory.mainInventory[i].stackSize++;
|
||||
itemStack.stackSize--;
|
||||
|
||||
tileEntity.fluidTank.drain(FluidContainerRegistry.getFluidForFilledItem(filled).amount, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(itemStack.stackSize == 1)
|
||||
|
@ -908,34 +893,63 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
|||
else if(FluidContainerRegistry.isFilledContainer(itemStack))
|
||||
{
|
||||
FluidStack itemFluid = FluidContainerRegistry.getFluidForFilledItem(itemStack);
|
||||
int max = tileEntity.fluidTank.getCapacity();
|
||||
int needed = tileEntity.getCurrentNeeded();
|
||||
|
||||
if(tileEntity.fluidTank.getFluid() == null || (tileEntity.fluidTank.getFluid().isFluidEqual(itemFluid) && (tileEntity.fluidTank.getFluid().amount+itemFluid.amount <= max)))
|
||||
if((tileEntity.fluidTank.getFluid() == null && itemFluid.amount <= tileEntity.fluidTank.getCapacity()) || itemFluid.amount <= needed)
|
||||
{
|
||||
if(FluidContainerRegistry.isBucket(itemStack))
|
||||
if(tileEntity.fluidTank.getFluid() != null && !tileEntity.fluidTank.getFluid().isFluidEqual(itemFluid))
|
||||
{
|
||||
tileEntity.fluidTank.fill(itemFluid, true);
|
||||
|
||||
if(!player.capabilities.isCreativeMode)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, new ItemStack(Items.bucket));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
boolean filled = false;
|
||||
|
||||
if(player.capabilities.isCreativeMode)
|
||||
{
|
||||
filled = true;
|
||||
}
|
||||
else {
|
||||
if(!player.capabilities.isCreativeMode)
|
||||
ItemStack containerItem = itemStack.getItem().getContainerItem(itemStack);
|
||||
|
||||
if(containerItem != null)
|
||||
{
|
||||
if(itemStack.stackSize == 1)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, containerItem);
|
||||
filled = true;
|
||||
}
|
||||
else {
|
||||
if(player.inventory.addItemStackToInventory(containerItem))
|
||||
{
|
||||
itemStack.stackSize--;
|
||||
|
||||
filled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
itemStack.stackSize--;
|
||||
|
||||
if(itemStack.stackSize == 0)
|
||||
{
|
||||
player.setCurrentItemOrArmor(0, null);
|
||||
}
|
||||
|
||||
filled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(filled)
|
||||
{
|
||||
int toFill = Math.min(tileEntity.fluidTank.getCapacity()-tileEntity.fluidTank.getFluidAmount(), itemFluid.amount);
|
||||
|
||||
tileEntity.fluidTank.fill(itemFluid, true);
|
||||
|
||||
if(itemFluid.amount-toFill > 0)
|
||||
{
|
||||
tileEntity.pushUp(new FluidStack(itemFluid.getFluid(), itemFluid.amount-toFill), true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -181,8 +181,9 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
|
|||
else if(FluidContainerRegistry.isFilledContainer(inventory[0]))
|
||||
{
|
||||
FluidStack itemFluid = FluidContainerRegistry.getFluidForFilledItem(inventory[0]);
|
||||
int needed = getCurrentNeeded();
|
||||
|
||||
if((fluidTank.getFluid() == null && itemFluid.amount <= fluidTank.getCapacity()) || fluidTank.getFluid().amount+itemFluid.amount <= fluidTank.getCapacity())
|
||||
if((fluidTank.getFluid() == null && itemFluid.amount <= fluidTank.getCapacity()) || itemFluid.amount <= needed)
|
||||
{
|
||||
if(fluidTank.getFluid() != null && !fluidTank.getFluid().isFluidEqual(itemFluid))
|
||||
{
|
||||
|
@ -223,24 +224,31 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
|
|||
|
||||
if(filled)
|
||||
{
|
||||
int toFill = Math.min(needed, itemFluid.amount);
|
||||
|
||||
fluidTank.fill(itemFluid, true);
|
||||
|
||||
if(itemFluid.amount-toFill > 0)
|
||||
{
|
||||
pushUp(new FluidStack(itemFluid.getFluid(), itemFluid.amount-toFill), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int pushUp(FluidStack fluid)
|
||||
public int pushUp(FluidStack fluid, boolean doFill)
|
||||
{
|
||||
Coord4D up = Coord4D.get(this).getFromSide(ForgeDirection.UP);
|
||||
|
||||
if(up.getTileEntity(worldObj) instanceof IFluidHandler)
|
||||
if(up.getTileEntity(worldObj) instanceof TileEntityPortableTank)
|
||||
{
|
||||
IFluidHandler handler = (IFluidHandler)up.getTileEntity(worldObj);
|
||||
|
||||
if(handler.canFill(ForgeDirection.DOWN, fluid.getFluid()))
|
||||
{
|
||||
return handler.fill(ForgeDirection.DOWN, fluid, true);
|
||||
return handler.fill(ForgeDirection.DOWN, fluid, doFill);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -347,6 +355,20 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
|
|||
}
|
||||
}
|
||||
|
||||
public int getCurrentNeeded()
|
||||
{
|
||||
int needed = fluidTank.getCapacity()-fluidTank.getFluidAmount();
|
||||
|
||||
Coord4D top = Coord4D.get(this).getFromSide(ForgeDirection.UP);
|
||||
|
||||
if(top.getTileEntity(worldObj) instanceof TileEntityPortableTank)
|
||||
{
|
||||
needed += ((TileEntityPortableTank)top.getTileEntity(worldObj)).getCurrentNeeded();
|
||||
}
|
||||
|
||||
return needed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList getNetworkedData(ArrayList data)
|
||||
{
|
||||
|
@ -428,7 +450,7 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
|
|||
|
||||
if(filled < resource.amount && !isActive)
|
||||
{
|
||||
filled += pushUp(new FluidStack(resource.getFluid(), resource.amount-filled));
|
||||
filled += pushUp(new FluidStack(resource.getFluid(), resource.amount-filled), doFill);
|
||||
}
|
||||
|
||||
if(filled > 0 && from == ForgeDirection.UP)
|
||||
|
@ -472,7 +494,7 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
|
|||
{
|
||||
TileEntity tile = Coord4D.get(this).getFromSide(ForgeDirection.DOWN).getTileEntity(worldObj);
|
||||
|
||||
if(!(tile instanceof TileEntityPortableTank))
|
||||
if(isActive && !(tile instanceof TileEntityPortableTank))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue