= 创作分享 =
编程开发
level.setBlock不起作用
_Pinero

level.setBlock不起作用

_Pinero 于 2024-1-15 00:55 ( 3月前 ) [复制链接] [只看楼主] [打印]
293 2
调用level.setBlock会生成看不见的泥土方块,但是退出重进存档后那些看不见的方块就显示出来了…
  1. @Override
  2.     public InteractionResult useOn(UseOnContext context) {
  3.         Level level = context.getLevel();
  4.         if(!level.isClientSide){
  5.             SkyIslandGenerator skyIslandGenerator = new SkyIslandGenerator();
  6.             skyIslandGenerator.printSkyIsland(context.getClickedPos(),context.getLevel());
  7.         }
  8.         return InteractionResult.sidedSuccess(level.isClientSide);
  9.     }
  10. }
复制代码


  1. public void printSkyIsland(BlockPos bottom, Level level) {
  2.         double[][] skyIsland = generateSkyIsland(width, length, scale, octaves, persistence, lacunarity, seed, maxHeight*10);
  3.         int maxHeight = -1;
  4.         int max_x = 0, max_z = 0;
  5.         for (int x = 0; x < width; x++) {
  6.             for (int z = 0; z < length; z++) {
  7.                 if (skyIsland[x][z] > maxHeight) {
  8.                     maxHeight = (int)skyIsland[x][z];
  9.                     max_x = x;
  10.                     max_z = z;
  11.                 }
  12.                 System.out.print("("+x+','+z+"):"+(int)skyIsland[x][z]+" ");
  13.             }
  14.             System.out.println();
  15.         }

  16.         BlockPos.MutableBlockPos blockPos = new BlockPos.MutableBlockPos(0,0,0);
  17.         for (int x = 0; x < width; x++) {
  18.             for (int z = 0; z < length; z++) {
  19.                 for(int y = bottom.getY()+maxHeight ; y>bottom.getY()+maxHeight-skyIsland[x][z] ; y--){
  20.                     blockPos.set(bottom.getX()+x-max_x,y,bottom.getZ()+z-max_z);
  21.                     level.setBlock(blockPos, Blocks.DIRT.defaultBlockState(), 3);
  22.                 }
  23.             }
  24.         }
  25.     }
复制代码
发表于 2024-1-15 00:55:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 2 条回复!
yguyhu
试试把   level.setBlock(blockPos, Blocks.DIRT.defaultBlockState(), 3);
改成     level.setBlock(blockPos, Blocks.DIRT.defaultBlockState(), 11);
发表于 2024-1-19 01:06:21 | 只看该作者

回复 | 举报

KSmc_brigade
试试改成 level.setBlockAndUpdate(blockPos, Blocks.DIRT.defaultBlockState());
发表于 2024-2-19 10:53:47 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表