package com.zjinja.mcmod.decor.element_base; import com.zjinja.mcmod.decor.ZJinJaDecoration; import com.zjinja.mcmod.decor.utils.model_dir_util.BoundingBoxVector; import com.zjinja.mcmod.decor.utils.model_dir_util.ModelDirectionUtil; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class EBaseTileBlock extends EBaseBlock implements ITileEntityProvider { public Class TEClass; public ModelDirectionUtil DirUtil; public String TextureLocation = ""; public String IconLocation = ""; public EBaseTileBlock(Material material, Class teClass) { super(material); TEClass = teClass; this.isBlockContainer = true; DirUtil = new ModelDirectionUtil(); } @Override public void Regist(String blockName, CreativeTabs creativeTabs[]){ super.Regist(blockName, creativeTabs); setIconLocation(blockName); setTextureLocationLocation(blockName); } public boolean AutoBindRenderer() { return true; } public TileEntitySpecialRenderer GetTileRenderer(){ return new EBaseTileRenderer(); } protected void setTextureLocationLocation(String blockName){ this.TextureLocation = ZJinJaDecoration.MODID + ":" + blockName.toLowerCase(); } protected void setIconLocation(String blockName){ this.IconLocation = ZJinJaDecoration.MODID + ":" + blockName.toLowerCase(); } public TileEntity createNewTileEntity(World world, int meta) { try { return TEClass.newInstance(); } catch (InstantiationException e) { return null; } catch (IllegalAccessException e) { return null; } } @Override public void registerBlockIcons(IIconRegister icon){ this.blockIcon = icon.registerIcon(this.IconLocation); } @Override public int getRenderType() {return -1; } @Override public boolean isOpaqueCube() {return false; } @Override public boolean renderAsNormalBlock(){ return false;} protected void setBoundsByMeta(int meta){ BoundingBoxVector bbv = DirUtil.GetAbsBoundingBoxByMeta(meta); setBlockBounds(bbv.x1, bbv.y1, bbv.z1, bbv.x2, bbv.y2, bbv.z2); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z){ this.setBlockBoundsBasedOnState(world, x, y, z); return AxisAlignedBB.getBoundingBox( x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ ); } @Override public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 src, Vec3 dst){ this.setBlockBoundsBasedOnState(world, x, y, z); return super.collisionRayTrace(world, x, y, z, src, dst); } @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z){ int meta = world.getBlockMetadata(x, y, z); setBoundsByMeta(meta); } @Override public void onBlockAdded(World world, int x, int y, int z){ super.onBlockAdded(world, x, y, z); } @Override public void breakBlock(World world, int x, int y, int z, Block block, int flag){ super.breakBlock(world, x, y, z, block, flag); world.removeTileEntity(x, y, z); } @Override public boolean onBlockEventReceived(World world, int x, int y, int z, int i, int j){ super.onBlockEventReceived(world, x, y, z, i, j); TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity != null){ return tileEntity.receiveClientEvent(i, j); }else { return false; } } }