widayn
rt
就像QuickShop那种
感谢大佬

结冰的离季
本帖最后由 结冰的离季 于 2021-7-24 12:32 编辑

从QS学来的,在1.16.5测试可用,此方法为强制设置,告示牌会替换原来的位置的方块注意材质必须为WALL_SIGN
  1. /**
  2. * 参数
  3. * container 箱子方块
  4. * material  告示牌材质
  5. *
  6. */

  7. public final void processWaterLoggedSign(Block container,Material material) {
  8.     BlockData blockdata = container.getBlockData();                //获取方块数据
  9.     if(!(blockdata instanceof Directional))return;                 //不具有方向属性

  10.     BlockFace chestFace = ((Directional)blockdata).getFacing();    //获取箱子正面
  11.     Block signBlock = container.getRelative(chestFace);               //获取牌子位置

  12.     boolean signIsWatered = signBlock.getType() == Material.WATER;  //如果是1.13以上还要记录是否有水
  13.     //设置告示牌材质,注意可能需要在plugin.yml设置api 版本才能使用
  14.     //箱子上的告示牌都是WALL_SIGN
  15.     signBlock.setType(material);      
  16.                                                                                          
  17.     BlockState signBlockState = signBlock.getState();              
  18.     BlockData signBlockData = signBlockState.getBlockData();       //获取数据

  19.     if (signIsWatered && signBlockData instanceof Waterlogged) {    //1.13以上如果有水设置含水
  20.        ((Waterlogged)signBlockData).setWaterlogged(true);
  21.     }

  22.     if (signBlockData instanceof WallSign) {                       
  23.         BlockFace bf = container.getFace(signBlock);               //获取牌子朝向
  24.         if (bf != null) {
  25.             ((WallSign)signBlockData).setFacing(bf);                //设置牌子朝向
  26.             signBlockState.setBlockData(signBlockData);
  27.           }
  28.        }
  29.     signBlockState.update(true); //更新告示牌状态
  30. }
复制代码




Luo_you
我直呼好家伙awa

widayn
本帖最后由 widayn 于 2021-7-24 12:20 编辑
结冰的离季 发表于 2021-7-23 21:11
从QS学来的,在1.16.5测试可用,此方法为强制设置,告示牌会替换原来的位置的方块注意材质必须为WALL_SIGN
...

感谢回复。。但是复制后发现13行的facing是未定义的。。我自己改成了chestFace然后运行会报错。。错误如下:
  1. java.lang.IllegalStateException: Asynchronous block remove!
复制代码


是我改错了还是调用方式有问题,感谢大佬

结冰的离季
本帖最后由 结冰的离季 于 2021-7-24 12:43 编辑
widayn 发表于 2021-7-24 12:13
感谢回复。。但是复制后发现13行的facing是未定义的。。我自己改成了chestFace然后运行会报错。。错误如下 ...

应该是chestFace,我写错了
这个代码不能在异步线程使用

widayn
结冰的离季 发表于 2021-7-24 12:32
应该是chestFace,我写错了
这个代码不能在异步线程使用

异步线程有点不能理解。。
意思是我不能在监听器和定时器之类的东西里调用吗。。
那好像也找不到地方能用了啊

结冰的离季
widayn 发表于 2021-7-24 16:29
异步线程有点不能理解。。
意思是我不能在监听器和定时器之类的东西里调用吗。。
那好像也找不到地方能用 ...

这里是指使用runTaskAsynchronously的任务,应该用同步的runtask

第一页 上一页 下一页 最后一页