调用level.setBlock会生成看不见的泥土方块,但是退出重进存档后那些看不见的方块就显示出来了…
- @Override
- public InteractionResult useOn(UseOnContext context) {
- Level level = context.getLevel();
- if(!level.isClientSide){
- SkyIslandGenerator skyIslandGenerator = new SkyIslandGenerator();
- skyIslandGenerator.printSkyIsland(context.getClickedPos(),context.getLevel());
- }
- return InteractionResult.sidedSuccess(level.isClientSide);
- }
- }
复制代码
- public void printSkyIsland(BlockPos bottom, Level level) {
- double[][] skyIsland = generateSkyIsland(width, length, scale, octaves, persistence, lacunarity, seed, maxHeight*10);
- int maxHeight = -1;
- int max_x = 0, max_z = 0;
- for (int x = 0; x < width; x++) {
- for (int z = 0; z < length; z++) {
- if (skyIsland[x][z] > maxHeight) {
- maxHeight = (int)skyIsland[x][z];
- max_x = x;
- max_z = z;
- }
- System.out.print("("+x+','+z+"):"+(int)skyIsland[x][z]+" ");
- }
- System.out.println();
- }
- BlockPos.MutableBlockPos blockPos = new BlockPos.MutableBlockPos(0,0,0);
- for (int x = 0; x < width; x++) {
- for (int z = 0; z < length; z++) {
- for(int y = bottom.getY()+maxHeight ; y>bottom.getY()+maxHeight-skyIsland[x][z] ; y--){
- blockPos.set(bottom.getX()+x-max_x,y,bottom.getZ()+z-max_z);
- level.setBlock(blockPos, Blocks.DIRT.defaultBlockState(), 3);
- }
- }
- }
- }
复制代码 |
|