Помогите Код replacenear [WorldEdit]

CriticaMobslps

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Votybo
Всем привет,
Я искал код replacenear на разных сайтах но так и не нашёл,
Прошу помочь в этом вопросе 😉
P.S replacenear - заменяет в определённом радиусе блоки которые вы укажите
 
Последнее редактирование:
Я конечно же это просматривал, но там ещё 5 классов юзаются, думал найдётся легче способ
Оно и просто там

Код:
    public void replaceNear(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException {
       
        int size = Math.max(1, args.getInteger(0));
        int affected;
        Set<BaseBlock> from;
        Pattern to;
        if (args.argsLength() == 2) {
            from = null;
            to = we.getBlockPattern(player, args.getString(1));
        } else {
            from = we.getBlocks(player, args.getString(1), true, !args.hasFlag('f'));
            to = we.getBlockPattern(player, args.getString(2));
        }

        Vector base = session.getPlacementPosition(player);
        Vector min = base.subtract(size, size, size);
        Vector max = base.add(size, size, size);
        Region region = new CuboidRegion(player.getWorld(), min, max);

        if (to instanceof SingleBlockPattern) {
            affected = editSession.replaceBlocks(region, from, ((SingleBlockPattern) to).getBlock());
        } else {
            affected = editSession.replaceBlocks(region, from, to);
        }
        player.print(affected + " block(s) have been replaced.");
    }
С тебя получить локалсессию и едитсессию.
 
upload_2018-2-10_2-17-46.png
upload_2018-2-10_2-26-7.png

Прошу объяснить в чём проблема, вроде сделал всё правильно как и требовалось
Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player p = (Player) sender;
        LocalWorld w = (LocalWorld) p.getLocation().getWorld();
        try {
            WorldEdit we = (WorldEdit) Bukkit.getPluginManager().getPlugin("WorldEdit");
        Methods.replaceNear(p, new LocalSession(), new EditSession((LocalWorld) we.getSession((com.sk89q.worldedit.entity.Player) sender).getSelectionWorld(), 5000), new CommandContext(args));
        } catch (WorldEditException e) {
            // TODO Автоматически созданный блок catch
            e.printStackTrace();
        } catch (CommandException e) {
            // TODO Автоматически созданный блок catch
            e.printStackTrace();
        }
        return false;
    }
 
Прошу объяснить в чём проблема
5ky0cJW.png

player.getWorld() вернет тебе CraftWorld, а WorldEdit работает со своим LocalWorld
CraftWorld это не LocalWorld

Получить LocalWorld ты можешь из LocalSession (Она у тебя уже есть)
session.getSelectionWorld();
 
5ky0cJW.png

player.getWorld() вернет тебе CraftWorld, а WorldEdit работает со своим LocalWorld
CraftWorld это не LocalWorld

Получить LocalWorld ты можешь из LocalSession (Она у тебя уже есть)
session.getSelectionWorld();
Проблема есть, но ошибка уже другая
upload_2018-2-10_3-45-15.png
 
Та же проблема, ты кастишь классы (В скобках название класса пишешь перед чем-то) к тому чем они не являются, о чем тебе и сказало в строке Caused by
1tB6cG6.png

WorldEditPlugin.class это не WorldEdit.class
и это на самой первой строке твоей функции.
Дальше тебя еще ждут сюрпризы что Player Bukkit'a это не com.sk89q.worldedit.entity.Player и так далее
 
Та же проблема, ты кастишь классы (В скобках название класса пишешь перед чем-то) к тому чем они не являются, о чем тебе и сказало в строке Caused by
1tB6cG6.png

WorldEditPlugin.class это не WorldEdit.class
и это на самой первой строке твоей функции.
Дальше тебя еще ждут сюрпризы что Player Bukkit'a это не com.sk89q.worldedit.entity.Player и так далее
upload_2018-2-10_6-16-51.png
 
Код:
static WorldEditPlugin we = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
Код:
    public void replaceNear(Player p, CommandContext args) throws WorldEditException {
        com.sk89q.worldedit.entity.Player player = we.wrapPlayer(p);
        LocalSession session = we.getSession(p);
        EditSession editSession = we.createEditSession(p);
        int size = Math.max(1, args.getInteger(0));
        int affected;
        Set<BaseBlock> from;
        Pattern to;
        if (args.argsLength() == 2) {
            from = null;
            to = WorldEdit.getInstance().getBlockPattern(player, args.getString(1));
        } else {
            from = WorldEdit.getInstance().getBlocks(player, args.getString(1), true, !args.hasFlag('f'));
            to = WorldEdit.getInstance().getBlockPattern(player, args.getString(2));
        }
        Vector base = session.getPlacementPosition(player);
        Vector min = base.subtract(size, size, size);
        Vector max = base.add(size, size, size);
        Region region = new CuboidRegion(player.getWorld(), min, max);
        if (to instanceof SingleBlockPattern) {
            affected = editSession.replaceBlocks(region, from, ((SingleBlockPattern) to).getBlock());
        } else {
            affected = editSession.replaceBlocks(region, from, to);
        }
        player.print(affected + " block(s) have been replaced.");
    }
 
Последнее редактирование:
А от API WE никак не отвязаться что ли? 😁
Или специально так решили сделать?
 
Последнее редактирование:
Код:
static WorldEditPlugin we = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
Код:
    public void replaceNear(Player p, CommandContext args) throws WorldEditException {
        com.sk89q.worldedit.entity.Player player = we.wrapPlayer(p);
        LocalSession session = we.getSession(p);
        EditSession editSession = we.createEditSession(p);
        int size = Math.max(1, args.getInteger(0));
        int affected;
        Set<BaseBlock> from;
        Pattern to;
        if (args.argsLength() == 2) {
            from = null;
            to = WorldEdit.getInstance().getBlockPattern(player, args.getString(1));
        } else {
            from = WorldEdit.getInstance().getBlocks(player, args.getString(1), true, !args.hasFlag('f'));
            to = WorldEdit.getInstance().getBlockPattern(player, args.getString(2));
        }
        Vector base = session.getPlacementPosition(player);
        Vector min = base.subtract(size, size, size);
        Vector max = base.add(size, size, size);
        Region region = new CuboidRegion(player.getWorld(), min, max);
        if (to instanceof SingleBlockPattern) {
            affected = editSession.replaceBlocks(region, from, ((SingleBlockPattern) to).getBlock());
        } else {
            affected = editSession.replaceBlocks(region, from, to);
        }
        player.print(affected + " block(s) have been replaced.");
    }
Работает но вот проблемка, почему то он не обращает внимания на тот блок который я вписываю на замену
upload_2018-2-11_2-56-49.png

Он заменяет траву, не важно что я впишу, только траву

upload_2018-2-11_2-57-16.pngupload_2018-2-11_2-57-29.png

У меня идёт команда /ags qwerty [size] [from] [to]
Подскажите в чём проблема, почему именно трава?
 
Назад
Верх