根据BlockState改变TileEntityRenderer的内容

USS.Shenzhou


版本信息
你使用的系统:win10 1909 x64
你是用的JDK: 8u251 x64
你使用的IDE:IntelliJ IDEA
你使用的IDE版本:2020.2
Forge版本: 31.2.36
Minecraft版本: 1.15.2
Mapping 文件版本: 20200901

简述
怎么根据一个Block的不同State改变TileEntityRenderer呢?我有两个State:leftbroken,想在left为true和false时渲染出不同的效果,在broken为true时什么也不渲染(只保留json模型)。bing了一圈没找到什么例子的样子。。。。


FledgeXu


我觉得你可以在你的TE上加一个字段,然后在改变BlockState的时候改变TE相关字段的内容。
我建议是不要在TER里调用world.getBlcokState先不说会有性能的问题,渲染很有可能在另一个线程的(我需要确认)还会有跨线程冲突的问题。


USS.Shenzhou


哈哈哈我第一个试的就是在里面加了if(…getBlockstate…) XD
确实没用 但是看起来并没有副作用(


FledgeXu


我看了一眼TileEntity类,TileEntity里有个getBlockState()的方法,你可以用这个方法获取一个缓存过的BlockState

   public BlockState getBlockState() {
      if (this.cachedBlockState == null) {
         this.cachedBlockState = this.world.getBlockState(this.pos);
      }

      return this.cachedBlockState;
   }

USS.Shenzhou


噢噢可以了 谢谢


Snownee


这种方法可能需要在BlockState变动时更新一下


USS.Shenzhou


至少我这里暂时不需要,基本都用的是setblockstate(


system


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。