Facebook
From The_Dumbledodo, 1 Month ago, written in Java.
Embed
Download Paste or View Raw
Hits: 138
  1. try {
  2.    final IWorldEditLocation pasteLoc = new IWorldEditLocation(location);
  3.    final ClipboardHolder holder = new ClipboardHolder(clipboard);
  4.  
  5.    AffineTransform transform = new AffineTransform();
  6.    transform = transform.rotateY(angle);
  7.  
  8.    holder.setTransform(transform);
  9.  
  10.    final int pasteLocX = pasteLoc.getX();
  11.    final int pasteLocY = pasteLoc.getY();
  12.    final int pasteLocZ = pasteLoc.getZ();
  13.  
  14.    final BlockVector3 to = BlockVector3.at(pasteLocX, pasteLocY, pasteLocZ);
  15.    final Region region = clipboard.getRegion();
  16.  
  17.    final BlockVector3 origin = clipboard.getOrigin();
  18.    final BlockVector3 clipboardOffset = region.getMinimumPoint().subtract(origin);
  19.  
  20.    final Vector3 realTo = to.toVector3().add(holder.getTransform().apply(clipboardOffset.toVector3()));
  21.    final Vector3 max = realTo.add(holder.getTransform().apply(region.getMaximumPoint().subtract(region.getMinimumPoint()).toVector3()));
  22.  
  23.    final CuboidRegionSelector selector = new CuboidRegionSelector(bukkitWorld, realTo.toBlockPoint(), max.toBlockPoint());
  24.  
  25.    final CuboidRegion cuboidRegion = selector.getRegion();
  26.  
  27.    final BlockVector3 maxPoint = cuboidRegion.getMaximumPoint();
  28.    final BlockVector3 minPoint = cuboidRegion.getMinimumPoint();
  29.  
  30.    final HashMap<Vector3i, List<EncodedBlock>> chunkBlocksHashMap = new HashMap<>();
  31.  
  32.    for (int x = minPoint.getBlockX(); x <= maxPoint.getBlockX(); x++)
  33.     for (int y = minPoint.getBlockY(); y <= maxPoint.getBlockY(); y++)
  34.      for (int z = minPoint.getBlockZ(); z <= maxPoint.getBlockZ(); z++) {
  35.  
  36.       if (pasteLocX == x && pasteLocY == y && pasteLocZ == z)
  37.        continue;
  38.  
  39.       final BlockVector3 at = BlockVector3.at(x, y, z).add(origin);
  40.       final BlockVector3 subtract = BlockVector3.at(x, y, z).subtract(origin);
  41.       final BlockState block = clipboard.getBlock(at);
  42.       final BlockState block2 = clipboard.getBlock(subtract);
  43.  
  44.       holder.getTransform()
  45.  
  46.       if (block == null) continue;
  47.  
  48.       final BlockType blockType = block.getBlockType();
  49.       System.out.println(blockType);
  50.       System.out.println("BLOCK 2: " + block2.getBlockType());
  51.  
  52.       if (blockType == null || blockType == BlockTypes.AIR) continue;
  53.  
  54.       final Material material = BukkitAdapter.adapt(blockType);
  55.       if (material == null) continue;
  56.  
  57.        final Location blockLocati Location(world, x, y, z);
  58.       final Chunk chunk = blockLocation.getChunk();
  59.       final WrappedBlockState blockState = SpigotConversionUtil.fromBukkitBlockData(material.createBlockData());
  60.  
  61.       final EncodedBlock encodedBlock = new EncodedBlock(blockState, x, y, z);
  62.       final Vector3i vector3i = new Vector3i(chunk.getX(), 0, chunk.getZ());
  63.  
  64.       if (chunkBlocksHashMap.containsKey(vector3i))
  65.        chunkBlocksHashMap.get(vector3i).add(encodedBlock);
  66.       else
  67.        chunkBlocksHashMap.put(vector3i, new ArrayList<>(List.of(encodedBlock)));
  68.      }
  69.  
  70.    chunkBlocksHashMap.forEach((vector3i, encodedBlocks) -> {
  71.  
  72.     final WrapperPlayServerMultiBlockChange multiBlockChange = new WrapperPlayServerMultiBlockChange(vector3i, true, encodedBlocks.toArray(new EncodedBlock[0]));
  73.     StructureBoxes.getPacketEventsAPI().getPlayerManager().sendPacket(player, multiBlockChange);
  74.    });
  75.  
  76.   } catch (Throwable ignored) {
  77.   }