Помогите Как можно скопировать постройку?

l_Slime_l

Активный участник
Пользователь
Баллы
76
Мне нужно скопировать какую-нибудь постройку на другое место. Сразу говорю, что со схематиками и WorldEditAPI не дружу. Как я могу сделать это без особой нагрузки на сервер и без API? Я хочу сделать такую штуку: когда ставишь блок, строится дом. (как с помощью мода).

И еще, как сильно нагружает сервер данный код? https://pastebin.com/189RK9Qv
(С помощью какого-то плагина сделал) xD
 
Последнее редактирование:
Плохо, что не дружишь. Без него все равно придется костылить свою утилиту для этого. Вот тут парень делает что-то похожее на то о чем ты пишешь, но опять таки используя WorldEdit API.
 
Плохо, что не дружишь. Без него все равно придется костылить свою утилиту для этого. Вот тут парень делает что-то похожее на то о чем ты пишешь, но опять таки используя WorldEdit API.
Мне бы код как копировать схематики, а то гуглил, не работает что-то. Я кстати как раз это видео смотрел, но чё-то там всё мудрено сделано, не понял ) Попроще бы. Ну ладно, разберусь как-нибудь.
 
Мне бы код как копировать схематики, а то гуглил, не работает что-то. Я кстати как раз это видео смотрел, но чё-то там всё мудрено сделано, не понял ) Попроще бы. Ну ладно, разберусь как-нибудь.
Код:
File file = new File("путь к схематику");
Vector v = new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); //Получаю координаты для вставки схематика
EditSession es = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(loc.getWorld()), WorldEdit.getInstance().getConfiguration().maxChangeLimit);
SchematicFormat format = SchematicFormat.getFormat(file);
CuboidClipboard cc = format.load(file);
cc.paste(es, v, false);
 
Мне бы код как копировать схематики, а то гуглил, не работает что-то. Я кстати как раз это видео смотрел, но чё-то там всё мудрено сделано, не понял ) Попроще бы. Ну ладно, разберусь как-нибудь.
Тут глянь https://github.com/boy0001/FastAsyncWorldedit/wiki/Pasting-a-schematic
 
Код:
File file = new File("путь к схематику");
Vector v = new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); //Получаю координаты для вставки схематика
EditSession es = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(loc.getWorld()), WorldEdit.getInstance().getConfiguration().maxChangeLimit);
SchematicFormat format = SchematicFormat.getFormat(file);
CuboidClipboard cc = format.load(file);
cc.paste(es, v, false);
Говно идея. Не в асинс моде такое лучше не делать.

Код:
    public static void paste(File file, org.bukkit.World bworld, Vector position) {
        try {
            World world = FaweAPI.getWorld(bworld.getName());
            ClipboardFormat.SCHEMATIC.load(file).paste(world, position, true, false, (Transform) null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
Говно идея. Не в асинс моде такое лучше не делать.

Код:
    public static void paste(File file, org.bukkit.World bworld, Vector position) {
        try {
            World world = FaweAPI.getWorld(bworld.getName());
            ClipboardFormat.SCHEMATIC.load(file).paste(world, position, true, false, (Transform) null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
А есть какой-то встроенный способ узнать, что вставка объекта произошла успешно и можно делать какие-то действия? Например телепортировать туда игроков. Если нет, то какие "ручные" методы проверки для этого есть?
 
Говно идея. Не в асинс моде такое лучше не делать.

Код:
    public static void paste(File file, org.bukkit.World bworld, Vector position) {
        try {
            World world = FaweAPI.getWorld(bworld.getName());
            ClipboardFormat.SCHEMATIC.load(file).paste(world, position, true, false, (Transform) null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
А что делать если метода load нету? API в проект поставил.
 
Может не в том порядке зависимости, fawe должен быть первым.
Насколько этот код говно? Взял из видео. И как правильно переписать, чтобы было нормально? Чем можно заменить Депрекатед (CuboidClipboard, setTypeIdAndData)? В гугле ничего толкового не нашел.
PHP:
public static List<Thread> ts = new ArrayList<>();

public static void build(Location loc, Chest chest, String fileName) {
        File file = new File("plugins/WorldEdit/schematics/" + fileName + ".schematic");
        SchematicFormat format = SchematicFormat.getFormat(file);

        try {
            CuboidClipboard cc = format.load(file);

            int rotation = (getD(chest.getFacing()) - getD(cc.getOffset())) * 90;
            if (rotation < 0) rotation += 360;
            cc.rotate2D(rotation);

            Location origin = loc.clone().add(
                    cc.getOffset().getBlockX(),
                    cc.getOffset().getBlockY(),
                    cc.getOffset().getBlockZ());

            Thread t = new Thread() {
                public void run() {
                    for (int y = 0, ly = cc.getHeight(); y < ly; y++) {
                        for (int x = 0, lx = cc.getWidth(); x < lx; x++) {
                            for (int z = 0, lz = cc.getLength(); z < lz; z++) {
                                BaseBlock b = cc.getBlock(new Vector(x, y, z));
                                Location l = origin.clone().add(x, y, z);

                                new BukkitRunnable() {
                                    @Override
                                    public void run() {
                                        l.getBlock().setTypeIdAndData(b.getType(), (byte) b.getData(), false);
                                    }
                                }.runTaskLater(Main.get(), 0L);

                                if (b.getType() != 0) {
                                    origin.getWorld().playEffect(l, Effect.STEP_SOUND, 1);
                                    try {
                                        Thread.sleep(20);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                    }
                }
            };
            t.start();
            ts.add(t);
        } catch (DataException | IOException e) {
            e.printStackTrace();
        }
 
Насколько этот код говно? Взял из видео. И как правильно переписать, чтобы было нормально? Чем можно заменить Депрекатед (CuboidClipboard, setTypeIdAndData)? В гугле ничего толкового не нашел.
PHP:
public static List<Thread> ts = new ArrayList<>();

public static void build(Location loc, Chest chest, String fileName) {
        File file = new File("plugins/WorldEdit/schematics/" + fileName + ".schematic");
        SchematicFormat format = SchematicFormat.getFormat(file);

        try {
            CuboidClipboard cc = format.load(file);

            int rotation = (getD(chest.getFacing()) - getD(cc.getOffset())) * 90;
            if (rotation < 0) rotation += 360;
            cc.rotate2D(rotation);

            Location origin = loc.clone().add(
                    cc.getOffset().getBlockX(),
                    cc.getOffset().getBlockY(),
                    cc.getOffset().getBlockZ());

            Thread t = new Thread() {
                public void run() {
                    for (int y = 0, ly = cc.getHeight(); y < ly; y++) {
                        for (int x = 0, lx = cc.getWidth(); x < lx; x++) {
                            for (int z = 0, lz = cc.getLength(); z < lz; z++) {
                                BaseBlock b = cc.getBlock(new Vector(x, y, z));
                                Location l = origin.clone().add(x, y, z);

                                new BukkitRunnable() {
                                    @Override
                                    public void run() {
                                        l.getBlock().setTypeIdAndData(b.getType(), (byte) b.getData(), false);
                                    }
                                }.runTaskLater(Main.get(), 0L);

                                if (b.getType() != 0) {
                                    origin.getWorld().playEffect(l, Effect.STEP_SOUND, 1);
                                    try {
                                        Thread.sleep(20);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                    }
                }
            };
            t.start();
            ts.add(t);
        } catch (DataException | IOException e) {
            e.printStackTrace();
        }
Совсем дурак? Я тебе выше дал через fawe в 2 строчки вставку схематика.
 
Назад
Верх