Вопрос Как сделать удаление схематики?

Версия Minecraft
1.16.X

chi2l3s

Пользователь
Сообщения
9
Веб-сайт
vk.com
Java:
@EventHandler
    public void onRightClick(PlayerInteractEvent event) {
        if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) {
            return;
        }
        Player player = event.getPlayer();
        if (player.getInventory().getItemInMainHand().equals(explosiveTrap)) {
            if (cooldowns.containsKey(player.getUniqueId())) {
                long secondsLeft = ((cooldowns.get(player.getUniqueId())/1000)+40) - (System.currentTimeMillis()/1000);
                if (secondsLeft > 0) {
                    player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&x&8&0&B&2&C&6[☄] &fПодождите " + "&a" + secondsLeft + "&f, чтобы использовать Трапку!"));
                    player.playSound(player.getLocation(),Sound.ENTITY_VILLAGER_NO, 1f, 1f);
                    return;
                }
            }
            cooldowns.put(player.getUniqueId(), System.currentTimeMillis());
            Location location = player.getLocation();
            player.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f);
            try {
                pasteSchematic(location);
            } catch (MaxChangedBlocksException | IOException e) {
                e.printStackTrace();
            }
            plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
                try {
                    removeSchematic();
                } catch (MaxChangedBlocksException e) {
                    e.printStackTrace();
                }
                location.getWorld().getNearbyEntities(location, 5, 5, 5).forEach(entity -> {
                    if (entity instanceof Player) {
                        entity.setVelocity(new Vector(0, 2, 0));
                    }
                });
            }, 200L); // 10 seconds delay
        }
    }


    private void pasteSchematic(Location location) throws MaxChangedBlocksException, IOException {
        File schematic = new File(plugin.getDataFolder(), "trap.schem"); // Название схематики
        ClipboardFormat format = ClipboardFormats.findByFile(schematic);
        try (ClipboardReader reader = format.getReader(new FileInputStream(schematic))) {
            Clipboard clipboard = reader.read();

            // Создание нового EditSession
            try (EditSession editSession = WorldEdit.getInstance().newEditSession(new BukkitWorld(location.getWorld()))) {
                // Создание региона размером 15x15 блоков вокруг местоположения вставки
                CuboidRegion region = new CuboidRegion(
                        BlockVector3.at(location.getX() - 7, location.getY() - 7, location.getZ() - 7),
                        BlockVector3.at(location.getX() + 7, location.getY() + 7, location.getZ() + 7)
                );

                // Копирование оригинальных блоков
                BlockArrayClipboard original = new BlockArrayClipboard(region);
                ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, original, region.getMinimumPoint());
                Operations.complete(copy);
                originalBlocks = original;

                // Вставка схематики
                Operation operation = new ClipboardHolder(clipboard)
                        .createPaste(editSession)
                        .to(BlockVector3.at(location.getX(), location.getY(), location.getZ()))
                        .ignoreAirBlocks(false)
                        .build();
                Operations.complete(operation);
            } catch (WorldEditException e) {
                e.printStackTrace();
            }
        }
    }

    private void removeSchematic() throws MaxChangedBlocksException {
        // Восстановление оригинальных блоков
        try (EditSession editSession = WorldEdit.getInstance().newEditSession(new BukkitWorld(pasteLocation.getWorld()))) {
            Operation operation = new ClipboardHolder(originalBlocks)
                    .createPaste(editSession)
                    .to(originalBlocks.getOrigin())
                    .ignoreAirBlocks(false)
                    .build();
            Operations.complete(operation);
        } catch (WorldEditException e) {
            e.printStackTrace();
        }
    }

как прописать метод для удаления схематики? текущий не работает
 
Назад
Сверху Снизу