Tank-based fluid container interaction fixes. Can't figure out the data request issue.

This commit is contained in:
Aidan C. Brady 2014-07-07 15:54:26 -04:00
parent 8a8086af3f
commit f67be01658
6 changed files with 135 additions and 122 deletions

View file

@ -463,7 +463,6 @@ public class CommonProxy
public EntityPlayer getPlayer(MessageContext context)
{
return context.getServerHandler().playerEntity;
}
}

View file

@ -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));

View file

@ -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>();

View file

@ -470,39 +470,18 @@ 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)
itemStack.stackSize--;
tileEntity.structure.fluidStored.amount -= FluidContainerRegistry.getFluidForFilledItem(filled).amount;
if(tileEntity.structure.fluidStored.amount == 0)
{
player.inventory.mainInventory[i] = filled;
itemStack.stackSize--;
tileEntity.structure.fluidStored.amount -= FluidContainerRegistry.getFluidForFilledItem(filled).amount;
if(tileEntity.structure.fluidStored.amount == 0)
{
tileEntity.structure.fluidStored = null;
}
return true;
tileEntity.structure.fluidStored = null;
}
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;
}
}
return true;
}
}
else if(itemStack.stackSize == 1)
@ -528,7 +507,44 @@ 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)
{
filled = true;
}
else {
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)
{
if(tileEntity.structure.fluidStored == null)
{
@ -537,33 +553,7 @@ public class BlockBasic extends Block
else {
tileEntity.structure.fluidStored.amount += itemFluid.amount;
}
if(!player.capabilities.isCreativeMode)
{
player.setCurrentItemOrArmor(0, new ItemStack(Items.bucket));
}
return true;
}
else {
if(!player.capabilities.isCreativeMode)
{
itemStack.stackSize--;
}
if(itemStack.stackSize == 0)
{
player.setCurrentItemOrArmor(0, null);
}
if(tileEntity.structure.fluidStored == null)
{
tileEntity.structure.fluidStored = itemFluid;
}
else {
tileEntity.structure.fluidStored.amount += itemFluid.amount;
}
return true;
}
}

View file

@ -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--;
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;
}
}
tileEntity.fluidTank.drain(FluidContainerRegistry.getFluidForFilledItem(filled).amount, 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();
if(tileEntity.fluidTank.getFluid() == null || (tileEntity.fluidTank.getFluid().isFluidEqual(itemFluid) && (tileEntity.fluidTank.getFluid().amount+itemFluid.amount <= max)))
int needed = tileEntity.getCurrentNeeded();
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 true;
return false;
}
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(itemStack.stackSize == 0)
{
player.setCurrentItemOrArmor(0, null);
}
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;
}
}

View file

@ -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;
}