Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Почему не вставляется schematic

Discussion in 'Разработка плагинов для новичков' started by DakEnviy, Nov 8, 2014.

Thread Status:
Not open for further replies.
  1. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Приветствую вас, форумчане!
    Пытаюсь востановить арену вот этим кодом:
    Code:
    public static boolean loadSchematic(String schemFile, World world, Location location) throws MaxChangedBlocksException, IOException, DataException {
          
            File file = new File("plugins/WorldEdit/schematics/" + schemFile + ".schematic");
            Vector v = new Vector(location.getBlockX(), location.getBlockY(), location.getBlockZ());
            SchematicFormat format = SchematicFormat.getFormat(file);
            if (format == null)
            {
                return false;
            }
            EditSession es = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(world), 0x3b9ac9ff);
           
            CuboidClipboard cc = format.load(file);
            cc.paste(es, v, false);
            return true;
        }
    И вот этим:
    Code:
    public RestartArena (Arena a) {
            this.a = a;
        }
      
        public void run() {
            if (a.isState(ArenaState.RESTARTING)) {
                a.sendMessage(MessageType.INFO, "Рестарт арены...");
              
                int timer = 20;
                for (; timer >= 0; timer--) {
                  
                    if (timer == 0) {
                        a.setState(ArenaState.WAITING);
                        for (Sign s : a.signs) {
                            if (a.getState() == ArenaState.DISABLED) {
                                s.setLine(0, ChatColor.RED + "[OFFLINE]");
                            }
                            if (a.getState() == ArenaState.WAITING) {
                                s.setLine(0, ChatColor.GREEN + "[WAITING]");
                            }
                            if (a.getState() == ArenaState.IN_GAME) {
                                s.setLine(0, ChatColor.RED + "[IN_GAME]");
                            }
                            if (a.getState() == ArenaState.RESTARTING) {
                                s.setLine(0, ChatColor.YELLOW + "[RESTARTING]");
                            }
                            s.setLine(1, null);
                            s.setLine(2, ChatColor.AQUA + a.getName());
                            s.setLine(3, ChatColor.GOLD + "" + a.getCurrentPlayers() + ChatColor.GRAY + " из " + ChatColor.GOLD + "6");
                            s.update();
                        }
                        break;
                    }
                    if (timer == 15) {
                        try {
                            SchematicUtil.loadSchematic(a.getName(), a.getLobbyPoint().getWorld(), a.getLobbyPoint());
                        } catch (MaxChangedBlocksException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (DataException e) {
                            e.printStackTrace();
                        }
                    }
                    if (timer == 5) {
                        a.sendMessage(MessageType.INFO, "asdasdasd");
                        a.setBlueCount(0);
                        a.setRedCount(0);
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        Bukkit.shutdown();
                    }
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    Bukkit.shutdown();
                }
            }
        }
    Не знаю в чём проблема. Помогите, чем сможете)
     
  2. Хостинг MineCraft
    <
  3. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
  4. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
  5. Shevchik

    Shevchik Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Ясен пень что если доки не читать то нихрена не выйдет.
    Какого хрена вы мир модифицируете не из главного потока?
     
  6. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    И еще у меня возникла проблема.
    Я использую этом метод:
    Code:
    for (Player redPlayer : redTeam.getPlayers()) {
    И у меня вот что выдаёт консоль:
    Code:
    [23:33:12] [Server thread/ERROR]: Could not pass event BlockBreakEvent to ObsidianGame v3.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-1649]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-1649]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:514) [spigot.jar:git-Spigot-1649]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:499) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.PlayerInteractManager.breakBlock(PlayerInteractManager.java:264) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.PlayerInteractManager.dig(PlayerInteractManager.java:118) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:552) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.PacketPlayInBlockDig.a(PacketPlayInBlockDig.java:41) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.PacketPlayInBlockDig.handle(PacketPlayInBlockDig.java:65) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:186) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.ServerConnection.c(ServerConnection.java:81) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:734) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [spigot.jar:git-Spigot-1649]
        at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [spigot.jar:git-Spigot-1649]
    Caused by: java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_25]
        at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_25]
        at ru.dakenviy.og.listengers.player.WinDetection.onBlockBreak(WinDetection.java:56) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_25]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[spigot.jar:git-Spigot-1649]
        ... 15 more
    
    Помогите!
     
  7. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Нельзя удалять элементы листа во время прохода по нему.
     
  8. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Можно, если через нормальный итератор.
     
  9. Shevchik

    Shevchik Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    А ещё можно запилить свой собственный лист который будет нормально пережёвывать удаление элементов :D.
    Или всякие ленивые ушлёпки могут сделать копию листа и итерировать по ней. Главное потом это в API не выставлять, а то получится как с котлом, там список игроков простой ArrayList, в то время как в ведре - CopyOnWrite, что вызывает на котле CME когда в цикле кикаешь всех онлайн игроков :D.
     
  10. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    for( : ), кстати, работает через итератор, только к нему обращаться напрямую нельзя.
     
  11. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Ну, а как мне исправить проблему в коде? Я просто первый раз слышу про итератор.(Сори за тупость)
     
  12. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Вот WinDetection.java
    Code:
    public class WinDetection implements Listener {
       
        @EventHandler
        public void onBlockBreak (BlockBreakEvent e) {
           
            Economy econ = ObsidianGame.instance().economy;
           
            Permission vip = new Permission("og.VIP");
            Permission ultra = new Permission("og.ULTRA");
            Permission hero = new Permission("og.HERO");
           
            Player p = e.getPlayer();
            Material itemInHand = p.getItemInHand().getType();
            Material blockToDestroy = e.getBlock().getType();
            Arena arena = ArenaManager.getInstance().getArena(p);
           
            if (arena == null) return;
           
            if (blockToDestroy == Material.OBSIDIAN) {   
                if (itemInHand != Material.GOLD_PICKAXE) {
                    MessageManager.getInstance().msg(p, MessageType.BAD, "Дундук, ломай золотой киркой!");
                    e.setCancelled(true);
                } else {
                    Team team = TeamManager.getInstance().getTeam(p);
                    Team redTeam = TeamManager.getInstance().getTeam("Red", arena);
                    Team blueTeam = TeamManager.getInstance().getTeam("Blue", arena);
                   
                    if (team == redTeam) {
                        team.setScore(team.getScore() + 1);
                       
                        arena.sendMessage(MessageType.INFO, p.getName() + " сломал обсидиан! Счёт: " +
                                "Красные- " + redTeam.getScore() +
                                " Синие- " + blueTeam.getScore());
                        if (redTeam.getScore() == 3 && blueTeam.getScore() == 0) {
                            arena.sendMessage(MessageType.INFO, "Красная команда победила!");   
                            for (Player redPlayer : redTeam.getPlayers()) {
                               
                                redPlayer.sendMessage(ChatColor.GREEN + "==============================");
                                redPlayer.sendMessage("Металиков заработано:");
                                redPlayer.sendMessage("");
                                redPlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За игру");
                                redPlayer.sendMessage(ChatColor.GREEN + "+15 металиков" + ChatColor.RESET + " - За победу");
                               
                                econ.depositPlayer(redPlayer.getName(), 25);
                                if (redPlayer.hasPermission(vip)) {
                                    econ.depositPlayer(redPlayer.getName(), 10);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За " + ChatColor.GOLD + "VIP");
                                }
                                if (redPlayer.hasPermission(ultra)) {
                                    econ.depositPlayer(redPlayer.getName(), 25);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+25 металиков" + ChatColor.RESET + " - За " + ChatColor.DARK_PURPLE + "ULTRA");
                                }
                                if (redPlayer.hasPermission(hero)) {
                                    econ.depositPlayer(redPlayer.getName(), 50);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+50 металиков" + ChatColor.RESET + " - За " + ChatColor.GREEN + "HERO");
                                }
                                redPlayer.sendMessage("");
                                redPlayer.sendMessage("Всего металиков: " + ChatColor.GREEN + econ.getBalance(redPlayer.getName()));
                                redPlayer.sendMessage(ChatColor.GREEN + "==============================");
                               
                                redTeam.setScore(0);
                                blueTeam.setScore(0);
                               
                                arena.removePlayer(p);
                                team.remove(p);
                                if (KitManager.getInstance().getKit(p) != null) {
                                    KitManager.getInstance().getKit(p).removeKit(p);
                                }
                                arena.restart();
                            }
                            for (Player bluePlayer : blueTeam.getPlayers()) {
                               
                                bluePlayer.sendMessage(ChatColor.GREEN + "==============================");
                                bluePlayer.sendMessage("Металиков заработано:");
                                bluePlayer.sendMessage("");
                                bluePlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За игру");
                               
                                econ.depositPlayer(bluePlayer.getName(), 10);
                                if (bluePlayer.hasPermission(vip)) {
                                    econ.depositPlayer(bluePlayer.getName(), 5);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+5 металиков" + ChatColor.RESET + " - За " + ChatColor.GOLD + "VIP");
                                }
                                if (bluePlayer.hasPermission(ultra)) {
                                    econ.depositPlayer(bluePlayer.getName(), 10);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+25 металиков" + ChatColor.RESET + " - За " + ChatColor.DARK_PURPLE + "ULTRA");
                                }
                                if (bluePlayer.hasPermission(hero)) {
                                    econ.depositPlayer(bluePlayer.getName(), 20);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+50 металиков" + ChatColor.RESET + " - За " + ChatColor.GREEN + "HERO");
                                }
                                bluePlayer.sendMessage("");
                                bluePlayer.sendMessage("Всего металиков: " + ChatColor.GREEN + econ.getBalance(bluePlayer.getName()));
                                bluePlayer.sendMessage(ChatColor.GREEN + "==============================");
                               
                                redTeam.setScore(0);
                                blueTeam.setScore(0);
                               
                                arena.removePlayer(p);
                                team.remove(p);
                                if (KitManager.getInstance().getKit(p) != null) {
                                    KitManager.getInstance().getKit(p).removeKit(p);
                                }
                                arena.restart();
                            }
                        }
    Это только часть, но дальше там одно и тоже)
     
  13. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    for (Player redPlayer : redTeam.getPlayers()) {
     
  14. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    через нормальный итератор.
     
  15. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    В чем разница между нормальными и обычными итераторами?
     
  16. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Ты читаешь между строчек? Где я вообще ставил вопрос нормальный и обычный? Я всего лишь написал, чтобы он создал объект Iterator и с ним производил работу, это для меня Нормальный и Обычный итератор в одном флаконе.

    А то, что java предлагает свой аналог foreach - это не Итератор, объект просто реализует Iterable, я рад, что ты знаешь про это и понимаешь, как оно устроено. Но работать через Итератор и работать с Итератором - это немного различные вещи.
     
  17. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Я прочитал про итераторы, вставил в свой код, и ничего не работает(
    Вот код:
    Code:
    Team team = TeamManager.getInstance().getTeam(p);
                    Team redTeam = TeamManager.getInstance().getTeam("Red", arena);
                    Team blueTeam = TeamManager.getInstance().getTeam("Blue", arena);
                   
                    Iterator<Player> liRed = redTeam.getPlayers().iterator();
                    Iterator<Player> liBlue = blueTeam.getPlayers().iterator();
                   
                    if (team == redTeam) {
                        team.setScore(team.getScore() + 1);
                       
                        arena.sendMessage(MessageType.INFO, p.getName() + " сломал обсидиан! Счёт: " +
                                "Красные- " + redTeam.getScore() +
                                " Синие- " + blueTeam.getScore());
                        if (redTeam.getScore() == 3 && blueTeam.getScore() == 0) {
                            arena.sendMessage(MessageType.INFO, "Красная команда победила!");
                           
                            while (liRed.hasNext()) {
                                Player redPlayer = liRed.next();
                               
                                redPlayer.sendMessage(ChatColor.GREEN + "==============================");
                                redPlayer.sendMessage("Металиков заработано:");
                                redPlayer.sendMessage("");
                                redPlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За игру");
                                redPlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За победу");
                               
                                econ.depositPlayer(redPlayer.getName(), 20);
                                if (redPlayer.hasPermission(vip)) {
                                    econ.depositPlayer(redPlayer.getName(), 2);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+2 металиков" + ChatColor.RESET + " - За " + ChatColor.GOLD + "VIP");
                                }
                                if (redPlayer.hasPermission(ultra)) {
                                    econ.depositPlayer(redPlayer.getName(), 5);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+5 металиков" + ChatColor.RESET + " - За " + ChatColor.DARK_PURPLE + "ULTRA");
                                }
                                if (redPlayer.hasPermission(hero)) {
                                    econ.depositPlayer(redPlayer.getName(), 15);
                                    redPlayer.sendMessage(ChatColor.GREEN + "+15 металиков" + ChatColor.RESET + " - За " + ChatColor.GREEN + "HERO");
                                }
                                redPlayer.sendMessage("");
                                redPlayer.sendMessage("Ваш баланс: " + ChatColor.GREEN + econ.getBalance(redPlayer.getName()));
                                redPlayer.sendMessage(ChatColor.GREEN + "==============================");
                               
                                redTeam.setScore(0);
                                blueTeam.setScore(0);
                               
                                arena.removePlayer(p);
                                team.remove(p);
                                if (KitManager.getInstance().getKit(p) != null) {
                                    KitManager.getInstance().getKit(p).removeKit(p);
                                }
                                arena.restart();
                               
                                redPlayer.remove();
                            }
                            while (liBlue.hasNext()) {
                                Player bluePlayer = liBlue.next();
                               
                                bluePlayer.sendMessage(ChatColor.GREEN + "==============================");
                                bluePlayer.sendMessage("Металиков заработано:");
                                bluePlayer.sendMessage("");
                                bluePlayer.sendMessage(ChatColor.GREEN + "+10 металиков" + ChatColor.RESET + " - За игру");
                               
                                econ.depositPlayer(bluePlayer.getName(), 10);
                                if (bluePlayer.hasPermission(vip)) {
                                    econ.depositPlayer(bluePlayer.getName(), 2);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+2 металиков" + ChatColor.RESET + " - За " + ChatColor.GOLD + "VIP");
                                }
                                if (bluePlayer.hasPermission(ultra)) {
                                    econ.depositPlayer(bluePlayer.getName(), 5);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+5 металиков" + ChatColor.RESET + " - За " + ChatColor.DARK_PURPLE + "ULTRA");
                                }
                                if (bluePlayer.hasPermission(hero)) {
                                    econ.depositPlayer(bluePlayer.getName(), 15);
                                    bluePlayer.sendMessage(ChatColor.GREEN + "+15 металиков" + ChatColor.RESET + " - За " + ChatColor.GREEN + "HERO");
                                }
                                bluePlayer.sendMessage("");
                                bluePlayer.sendMessage("Ваш баланс: " + ChatColor.GREEN + econ.getBalance(bluePlayer.getName()));
                                bluePlayer.sendMessage(ChatColor.GREEN + "==============================");
                               
                                redTeam.setScore(0);
                                blueTeam.setScore(0);
                               
                                arena.removePlayer(p);
                                team.remove(p);
                                if (KitManager.getInstance().getKit(p) != null) {
                                    KitManager.getInstance().getKit(p).removeKit(p);
                                }
                                arena.restart();
                               
                                bluePlayer.remove();
                            }
                        }
    Это только часть, но суть одна.
     
  18. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Вы все равно делаете team.remove(p).
     
  19. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    А если убрать, то как их тогда удалить из команды?
     
  20. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Вы же сказали, что прочитали про итераторы.
     
  21. Автор темы
    DakEnviy

    DakEnviy Активный участник Пользователь

    Trophy Points:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Я прочитал то, что нашёл.
    Ну скажи. В чем моя ошибка?
     
Thread Status:
Not open for further replies.

Share This Page