package mods.eln.node;
import mods.eln.misc.Direction;
import mods.eln.misc.Utils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public abstract class NodeBlock extends Block {//BlockContainer
public int blockItemNbr;
Class tileEntityClass;
public NodeBlock(Material material, Class tileEntityClass, int blockItemNbr) {
super(material);
setBlockName("NodeBlock");
this.tileEntityClass = tileEntityClass;
useNeighborBrightness = true;
this.blockItemNbr = blockItemNbr;
setHardness(1.0f);
setResistance(1.0f);
}
@Override
public float getBlockHardness(World par1World, int par2, int par3, int par4) {
return 1.0f;
}
@Override
public int isProvidingWeakPower(IBlockAccess block, int x, int y, int z, int side) {
NodeBlockEntity entity = (NodeBlockEntity) block.getTileEntity(x, y, z);
return entity.isProvidingWeakPower(Direction.fromIntMinecraftSide(side));
}
@Override
public boolean canConnectRedstone(IBlockAccess block, int x, int y, int z, int side) {
NodeBlockEntity entity = (NodeBlockEntity) block.getTileEntity(x, y, z);
return entity.canConnectRedstone(Direction.XN);
}
@Override
public boolean canProvidePower() {
return super.canProvidePower();
}
@Override
public boolean isOpaqueCube() {
return true;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public int getRenderType() {
return -1;
}
public int getLightValue(IBlockAccess world, int x, int y, int z) {
final TileEntity entity = world.getTileEntity(x, y, z);
if (entity == null || !(entity instanceof NodeBlockEntity)) return 0;
NodeBlockEntity tileEntity = (NodeBlockEntity) entity;
return tileEntity.getLightValue();
}
//client server
public boolean onBlockPlacedBy(World world, int x, int y, int z, Direction front, EntityLivingBase entityLiving, int metadata) {
NodeBlockEntity tileEntity = (NodeBlockEntity) world.getTileEntity(x, y, z);
tileEntity.onBlockPlacedBy(front, entityLiving, metadata);
return true;
}
//server
public void onBlockAdded(World par1World, int x, int y, int z) {
if (par1World.isRemote == false) {
NodeBlockEntity entity = (NodeBlockEntity) par1World.getTileEntity(x, y, z);
entity.onBlockAdded();
}
}
//server
public void breakBlock(World par1World, int x, int y, int z, Block par5, int par6) {
//if(par1World.isRemote == false)
{
NodeBlockEntity entity = (NodeBlockEntity) par1World.getTileEntity(x, y, z);
entity.onBreakBlock();
super.breakBlock(par1World, x, y, z, par5, par6);
}
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block b) {
if (Utils.isRemote(world) == false) {
NodeBlockEntity entity = (NodeBlockEntity) world.getTileEntity(x, y, z);
entity.onNeighborBlockChange();
}
}
@Override
public int damageDropped(int metadata) {
return metadata;
}
//@SideOnly(Side.CLIENT)
public void getSubBlocks(int par1, CreativeTabs tab, List subItems) {
for (int ix = 0; ix < blockItemNbr; ix++) {
subItems.add(new ItemStack(this, 1, ix));
}
}
//client server
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float vx, float vy, float vz) {
NodeBlockEntity entity = (NodeBlockEntity) world.getTileEntity(x, y, z);
// entityPlayer.openGui( Eln.instance, 0,world,x ,y, z);
return entity.onBlockActivated(entityPlayer, Direction.fromIntMinecraftSide(side), vx, vy, vz);
}
@Override
public boolean hasTileEntity(int metadata) {
return true;
}
@Override
public TileEntity createTileEntity(World var1, int meta) {
try {
return (TileEntity) tileEntityClass.getConstructor().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
while (true) ;
}
}