EBaseTileBlock.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.zjinja.mcmod.decor.element_base;
  2. import com.zjinja.mcmod.decor.ZJinJaDecoration;
  3. import com.zjinja.mcmod.decor.utils.model_dir_util.BoundingBoxVector;
  4. import com.zjinja.mcmod.decor.utils.model_dir_util.ModelDirectionUtil;
  5. import net.minecraft.block.Block;
  6. import net.minecraft.block.ITileEntityProvider;
  7. import net.minecraft.block.material.Material;
  8. import net.minecraft.client.renderer.texture.IIconRegister;
  9. import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
  10. import net.minecraft.creativetab.CreativeTabs;
  11. import net.minecraft.tileentity.TileEntity;
  12. import net.minecraft.util.AxisAlignedBB;
  13. import net.minecraft.util.MovingObjectPosition;
  14. import net.minecraft.util.Vec3;
  15. import net.minecraft.world.IBlockAccess;
  16. import net.minecraft.world.World;
  17. public class EBaseTileBlock extends EBaseBlock implements ITileEntityProvider {
  18. public Class<? extends TileEntity> TEClass;
  19. public ModelDirectionUtil DirUtil;
  20. public String TextureLocation = "";
  21. public String IconLocation = "";
  22. public EBaseTileBlock(Material material, Class<? extends TileEntity> teClass) {
  23. super(material);
  24. TEClass = teClass;
  25. this.isBlockContainer = true;
  26. DirUtil = new ModelDirectionUtil();
  27. }
  28. @Override
  29. public void Regist(String blockName, CreativeTabs creativeTabs[]){
  30. super.Regist(blockName, creativeTabs);
  31. setIconLocation(blockName);
  32. setTextureLocationLocation(blockName);
  33. }
  34. public boolean AutoBindRenderer() { return true; }
  35. public TileEntitySpecialRenderer GetTileRenderer(){
  36. return new EBaseTileRenderer();
  37. }
  38. protected void setTextureLocationLocation(String blockName){
  39. this.TextureLocation = ZJinJaDecoration.MODID + ":" + blockName.toLowerCase();
  40. }
  41. protected void setIconLocation(String blockName){
  42. this.IconLocation = ZJinJaDecoration.MODID + ":" + blockName.toLowerCase();
  43. }
  44. public TileEntity createNewTileEntity(World world, int meta) {
  45. try {
  46. return TEClass.newInstance();
  47. } catch (InstantiationException e) {
  48. return null;
  49. } catch (IllegalAccessException e) {
  50. return null;
  51. }
  52. }
  53. @Override
  54. public void registerBlockIcons(IIconRegister icon){
  55. this.blockIcon = icon.registerIcon(this.IconLocation);
  56. }
  57. @Override
  58. public int getRenderType() {return -1; }
  59. @Override
  60. public boolean isOpaqueCube() {return false; }
  61. @Override
  62. public boolean renderAsNormalBlock(){ return false;}
  63. protected void setBoundsByMeta(int meta){
  64. BoundingBoxVector bbv = DirUtil.GetAbsBoundingBoxByMeta(meta);
  65. setBlockBounds(bbv.x1, bbv.y1, bbv.z1, bbv.x2, bbv.y2, bbv.z2);
  66. }
  67. @Override
  68. public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z){
  69. this.setBlockBoundsBasedOnState(world, x, y, z);
  70. return AxisAlignedBB.getBoundingBox(
  71. x + this.minX, y + this.minY, z + this.minZ,
  72. x + this.maxX, y + this.maxY, z + this.maxZ
  73. );
  74. }
  75. @Override
  76. public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 src, Vec3 dst){
  77. this.setBlockBoundsBasedOnState(world, x, y, z);
  78. return super.collisionRayTrace(world, x, y, z, src, dst);
  79. }
  80. @Override
  81. public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z){
  82. int meta = world.getBlockMetadata(x, y, z);
  83. setBoundsByMeta(meta);
  84. }
  85. @Override
  86. public void onBlockAdded(World world, int x, int y, int z){
  87. super.onBlockAdded(world, x, y, z);
  88. }
  89. @Override
  90. public void breakBlock(World world, int x, int y, int z, Block block, int flag){
  91. super.breakBlock(world, x, y, z, block, flag);
  92. world.removeTileEntity(x, y, z);
  93. }
  94. @Override
  95. public boolean onBlockEventReceived(World world, int x, int y, int z, int i, int j){
  96. super.onBlockEventReceived(world, x, y, z, i, j);
  97. TileEntity tileEntity = world.getTileEntity(x, y, z);
  98. if(tileEntity != null){
  99. return tileEntity.receiveClientEvent(i, j);
  100. }else {
  101. return false;
  102. }
  103. }
  104. }