Помогите Загрузка схемы в новом потоке и постепенно.

  • Автор темы Автор темы Mukiroku
  • Дата начала Дата начала

Mukiroku

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Kukuroku
Здравствуйте, подскажите мотодом как загрузить схему(из WolrdEdit) в другом потоке( что бы сервер не лагал) и постепенно(по блокам или по слоям)

public static void buildCraft(Location loc,String fileName){
File file = new File("plugins/WorldEdit/schematics/"+fileName+".schematic");
SchematicFormat format = SchematicFormat.getFormat(file);
try {
CuboidClipboard cc = format.load(file);

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

new Thread(){
public void run(){
for(int x=0,lx=cc.getWidth();x<lx;x++){
for(int y=0,ly=cc.getHeight();x<ly;y++){
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);
l.getBlock().setTypeIdAndData(b.getType(),(byte) b.getData(),false);

if(b.getType()!=0){
origin.getWorld().playEffect(l, Effect.STEP_SOUND, 1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {e.printStackTrace();}

}
}
}
}
}
}.start();

} catch (DataException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Но возникает
[11:09:30] [Thread-57/WARN]: Exception in thread "Thread-57"
[11:09:30] [Thread-57/WARN]: java.lang.IllegalStateException: Asynchronous block remove!
[11:09:30] [Thread-57/WARN]: at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14)
[11:09:30] [Thread-57/WARN]: at net.minecraft.server.v1_8_R3.Block.remove(Block.java:317)
[11:09:30] [Thread-57/WARN]: at net.minecraft.server.v1_8_R3.Chunk.a(Chunk.java:536)
[11:09:30] [Thread-57/WARN]: at net.minecraft.server.v1_8_R3.World.setTypeAndData(World.java:396)
[11:09:30] [Thread-57/WARN]: at org.bukkit.craftbukkit.v1_8_R3.block.CraftBlock.setTypeIdAndData(CraftBlock.java:139)
[11:09:30] [Thread-57/WARN]: at ru.undframe.bw.urils.Build$2.run(Build.java:83)
 
Я понимаю вы опытный разработчик, можно узнать как ещё можно обновить арену(в мини игре как в BedWars) кроме схемы?
PHP:
    public static void unzip(String src, String out) throws IOException {
        ZipFile zip = new ZipFile(src);
        Enumeration<? extends ZipEntry> ens = zip.entries();
        while (ens.hasMoreElements()) {
            ZipEntry en = ens.nextElement();
            Path path = FileSystems.getDefault().getPath(out + File.separator + en.getName());
            if (en.isDirectory()) {
                path.toFile().mkdirs();
            } else {
                path.toFile().getParentFile().mkdirs();
                Files.copy(zip.getInputStream(en), path, StandardCopyOption.REPLACE_EXISTING);
            }
        }
        zip.close();
    }
 
PHP:
    public static void unzip(String src, String out) throws IOException {
        ZipFile zip = new ZipFile(src);
        Enumeration<? extends ZipEntry> ens = zip.entries();
        while (ens.hasMoreElements()) {
            ZipEntry en = ens.nextElement();
            Path path = FileSystems.getDefault().getPath(out + File.separator + en.getName());
            if (en.isDirectory()) {
                path.toFile().mkdirs();
            } else {
                path.toFile().getParentFile().mkdirs();
                Files.copy(zip.getInputStream(en), path, StandardCopyOption.REPLACE_EXISTING);
            }
        }
        zip.close();
    }
Я правильно понял это просто копирует из 1 папки файлы в другой т.е из паки у плагина взять папку мира и скопировать в стандартный, но это будет просто папка надо ещё из папки сделать мир. Я так и делаю но 1 раз возникла проблема заспавнился битый чанк, как от этого защитится.
 
Я правильно понял это просто копирует из 1 папки файлы в другой т.е из паки у плагина взять папку мира и скопировать в стандартный, но это будет просто папка надо ещё из папки сделать мир. Я так и делаю но 1 раз возникла проблема заспавнился битый чанк, как от этого защитится.
Мир сперва выгрузи.
 
Назад
Верх