2013-01-02 19:55:29 +01:00
|
|
|
package liquidmechanics.common.block;
|
|
|
|
|
2013-01-05 01:03:20 +01:00
|
|
|
import universalelectricity.prefab.BlockMachine;
|
|
|
|
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
2013-01-02 19:55:29 +01:00
|
|
|
import liquidmechanics.client.render.BlockRenderHelper;
|
|
|
|
import liquidmechanics.common.LiquidMechanics;
|
2013-01-05 01:03:20 +01:00
|
|
|
import liquidmechanics.common.MetaGroup;
|
2013-01-02 19:55:29 +01:00
|
|
|
import liquidmechanics.common.TabLiquidMechanics;
|
2013-01-03 18:18:47 +01:00
|
|
|
import liquidmechanics.common.handlers.LiquidHandler;
|
2013-01-02 19:55:29 +01:00
|
|
|
import liquidmechanics.common.tileentity.TileEntityPump;
|
|
|
|
import liquidmechanics.common.tileentity.TileEntityTank;
|
|
|
|
import net.minecraft.block.BlockContainer;
|
|
|
|
import net.minecraft.block.material.Material;
|
2013-01-05 01:03:20 +01:00
|
|
|
import net.minecraft.entity.EntityLiving;
|
2013-01-02 19:55:29 +01:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
2013-01-05 01:03:20 +01:00
|
|
|
import net.minecraft.util.MathHelper;
|
2013-01-02 19:55:29 +01:00
|
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
|
|
import net.minecraftforge.liquids.LiquidContainerRegistry;
|
|
|
|
import net.minecraftforge.liquids.LiquidStack;
|
|
|
|
|
2013-01-05 01:03:20 +01:00
|
|
|
public class BlockLiquidMachine extends BlockMachine
|
2013-01-02 19:55:29 +01:00
|
|
|
{
|
2013-01-05 01:03:20 +01:00
|
|
|
|
|
|
|
public BlockLiquidMachine(int id)
|
2013-01-03 18:18:47 +01:00
|
|
|
{
|
2013-01-05 01:03:20 +01:00
|
|
|
super("lmMachines", id, Material.iron, TabLiquidMechanics.INSTANCE);
|
2013-01-03 18:18:47 +01:00
|
|
|
this.blockIndexInTexture = 26;
|
|
|
|
this.setHardness(1f);
|
|
|
|
this.setResistance(5f);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isOpaqueCube()
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean renderAsNormalBlock()
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int side, float hitX, float hitY, float hitZ)
|
|
|
|
{
|
|
|
|
ItemStack current = entityplayer.inventory.getCurrentItem();
|
|
|
|
if (current != null)
|
|
|
|
{
|
|
|
|
|
|
|
|
LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(current);
|
|
|
|
|
|
|
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
|
|
|
|
|
|
if (tileEntity instanceof TileEntityTank)
|
|
|
|
{
|
|
|
|
TileEntityTank tank = (TileEntityTank) tileEntity;
|
|
|
|
|
|
|
|
// Handle filled containers
|
|
|
|
if (liquid != null)
|
|
|
|
{
|
|
|
|
int filled = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
|
|
|
|
|
|
|
|
if (filled != 0 && !entityplayer.capabilities.isCreativeMode)
|
|
|
|
{
|
|
|
|
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
// Handle empty containers
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
|
|
|
|
LiquidStack stack = tank.tank.getLiquid();
|
|
|
|
if (stack != null)
|
|
|
|
{
|
|
|
|
ItemStack liquidItem = LiquidContainerRegistry.fillLiquidContainer(stack, current);
|
|
|
|
|
|
|
|
liquid = LiquidContainerRegistry.getLiquidForFilledItem(liquidItem);
|
|
|
|
|
|
|
|
if (liquid != null)
|
|
|
|
{
|
|
|
|
if (!entityplayer.capabilities.isCreativeMode)
|
|
|
|
{
|
|
|
|
if (current.stackSize > 1)
|
|
|
|
{
|
|
|
|
if (!entityplayer.inventory.addItemStackToInventory(liquidItem)) return false;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
|
|
|
|
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, liquidItem);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
tank.tank.drain(liquid.amount, true);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getRenderType()
|
|
|
|
{
|
|
|
|
return BlockRenderHelper.renderID;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int damageDropped(int meta)
|
|
|
|
{
|
|
|
|
if (meta < 4) { return 0; }
|
|
|
|
return meta;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
|
|
|
|
{
|
|
|
|
int meta = world.getBlockMetadata(x, y, z);
|
2013-01-05 01:03:20 +01:00
|
|
|
TileEntity ent = world.getBlockTileEntity(x, y, z);
|
|
|
|
|
2013-01-03 18:18:47 +01:00
|
|
|
if (meta < 4)
|
2013-01-05 01:03:20 +01:00
|
|
|
{
|
2013-01-03 18:18:47 +01:00
|
|
|
new ItemStack(LiquidMechanics.blockMachine, 1, 0);
|
2013-01-05 01:03:20 +01:00
|
|
|
}
|
|
|
|
if (ent instanceof TileEntityTank) { return new ItemStack(LiquidMechanics.itemTank, 1, LiquidHandler.getMeta(((TileEntityTank) ent).type)); }
|
2013-01-03 18:18:47 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-01-05 01:03:20 +01:00
|
|
|
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving)
|
2013-01-03 18:18:47 +01:00
|
|
|
{
|
2013-01-05 01:03:20 +01:00
|
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
|
|
int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
|
|
|
|
TileEntity ent = world.getBlockTileEntity(x, y, z);
|
|
|
|
if (MetaGroup.getGrouping(meta) != 1)
|
2013-01-03 18:18:47 +01:00
|
|
|
{
|
2013-01-05 01:03:20 +01:00
|
|
|
world.setBlockMetadata(x, y, z, angle + MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(meta)));
|
2013-01-03 18:18:47 +01:00
|
|
|
}
|
2013-01-05 01:03:20 +01:00
|
|
|
if (ent instanceof TileEntityAdvanced)
|
|
|
|
{
|
|
|
|
((TileEntityAdvanced) world.getBlockTileEntity(x, y, z)).initiate();
|
|
|
|
}
|
|
|
|
|
|
|
|
world.notifyBlocksOfNeighborChange(x, y, z, this.blockID);
|
2013-01-03 18:18:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-01-05 01:03:20 +01:00
|
|
|
public TileEntity createNewTileEntity(World var1, int meta)
|
2013-01-03 18:18:47 +01:00
|
|
|
{
|
2013-01-05 01:03:20 +01:00
|
|
|
if (meta >= 12)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
else if (meta >= 8)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (meta >= 4)
|
|
|
|
{
|
|
|
|
return new TileEntityTank();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return new TileEntityPump();
|
|
|
|
}
|
2013-01-03 18:18:47 +01:00
|
|
|
return null;
|
|
|
|
}
|
2013-01-02 19:55:29 +01:00
|
|
|
}
|