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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем DakEnviy, 8 ноя 2014.

Статус темы:
Закрыта.
  1. Автор темы
    DakEnviy

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Приветствую вас, форумчане!
    Пытаюсь востановить арену вот этим кодом:
    Код:
    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;
        }
    И вот этим:
    Код:
    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 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
  4. Автор темы
    DakEnviy

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
  5. Shevchik

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

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

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    И еще у меня возникла проблема.
    Я использую этом метод:
    Код:
    for (Player redPlayer : redTeam.getPlayers()) {
    И у меня вот что выдаёт консоль:
    Код:
    [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 Старожил Девелопер Пользователь

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

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

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

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

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

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

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

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

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

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Вот WinDetection.java
    Код:
    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 Активный участник Пользователь

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    for (Player redPlayer : redTeam.getPlayers()) {
     
  14. ptnk

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

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

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

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

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

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

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

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Я прочитал про итераторы, вставил в свой код, и ничего не работает(
    Вот код:
    Код:
    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 Старожил Девелопер Пользователь

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

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

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

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

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

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

    Баллы:
    66
    Skype:
    hajime.hajime.hajime
    Имя в Minecraft:
    DakEnviy
    Я прочитал то, что нашёл.
    Ну скажи. В чем моя ошибка?
     
Статус темы:
Закрыта.

Поделиться этой страницей