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

Ошибка

Тема в разделе "Разработка плагинов для новичков", создана пользователем dnebik, 15 июн 2017.

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

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    Есть непонятное явление в виде ошибки:
    Код:
    [07:34:54 ERROR]: Could not pass event ItemSpawnEvent to MMOBlocks v0.1
    org.bukkit.event.EventException: null
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callItemSpawnEvent(CraftEventFactory.java:311) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.World.addEntity(World.java:1042) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.WorldServer.addEntity(WorldServer.java:1064) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.World.addEntity(World.java:1011) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.Block.a(Block.java:372) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.Block.dropNaturally(Block.java:355) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.Block.b(Block.java:342) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.Block.a(Block.java:464) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PlayerInteractManager.breakBlock(PlayerInteractManager.java:369) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PlayerInteractManager.a(PlayerInteractManager.java:216) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:882) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:40) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:10) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
            at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.util.ConcurrentModificationException
            at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_131]
            at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_131]
            at me.dneb.MMOBlocks.BreakBlock.onDrop(BreakBlock.java:105) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
            ... 25 more

    Есть код:
    Код:
    public class BreakBlock implements Listener{
       
        private MMOBlocks plugin;
       
        private FileConfiguration file = null;
        private Configs onBreak = null;
       
        ArrayList<Location> droploc = null;
       
       
        BreakBlock(MMOBlocks plugin){
            this.plugin = plugin;
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
           
            droploc = new ArrayList<Location>();
            file = new YamlConfiguration();
            onBreak = new Configs(plugin, "onBreak.yml", "", "me/dneb/MMOBlocks/Files/onBreak.yml");
        }
       
        @EventHandler
        public void onBlockBreak(BlockBreakEvent e){
           
            Player p = e.getPlayer();
            Block b = e.getBlock();
           
            for (String Block : onBreak.getConfigurationSection("Blocks").getKeys(false)){
                if (b.getType().toString().equals(Block))
                {
                    //СЛОМАН НУЖНЫМ ПРЕДМЕТОМ
                    if (onBreak.contains("Blocks." + Block + ".with"))
                    if (!BreackWith(p.getInventory().getItemInMainHand(), onBreak.getStringList("Blocks." + Block + ".with"))) continue;
    
                    //УДАЛИТЬ ДРОП
                    if (onBreak.contains("Blocks." + Block + ".cleardrop"))
                    if (StringToBoolean(onBreak.getString("Blocks." + Block + ".cleardrop")))
                        droploc.add(b.getLocation());
                   
                    //ВОСТАНОВИТЬ БЛОК ЧЕРЕЗ
                    if (onBreak.contains("Blocks." + Block + ".delay"))
                    {
                        int delay = StringToInteger(onBreak.getString("Blocks." + Block + ".delay"));
                        Material mat = b.getType();
                        byte data = b.getData();
                        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                            public void run() {
                                b.setType(mat);
                                b.setData(data);
                            }
                        }, delay);
                    }
       
                    //ДОБАВИТЬ ДРОП
                    if (onBreak.contains("Blocks." + Block + ".drop"))
                    {
                        List<ItemStack> drop = dropList(onBreak.getStringList("Blocks." + Block + ".drop"));
                        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                            public void run() {
                                spawnDrop(b.getLocation(), drop);
                            }
                        }, 1);
                    }
                   
                    //ЗАМЕНИТЬ НА ДРУГОЙ БЛОК
                    if (onBreak.contains("Blocks." + Block + ".replace"))
                    {
                        Material mat = StringToMaterial(onBreak.getString("Blocks." + Block + ".replace"));
                        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                            public void run() {
                                b.setType(mat);
                            }
                        }, 1);
                    }
                   
                    return;
                }
            }
            e.setCancelled(true);
        }
       
       
        @EventHandler
        public void onItemSpawn(ItemSpawnEvent e)
        {
            Location spawnloc = e.getLocation();
            if (!droploc.isEmpty())
            for (Location loc : droploc)
            {
                if (loc.getBlockX() == spawnloc.getBlockX())
                if (loc.getBlockY() == spawnloc.getBlockY())
                if (loc.getBlockZ() == spawnloc.getBlockZ())
                {
                    e.setCancelled(true);
                    droploc.remove(loc);
                }
            }
        }
       
        //спавним предметы в loc
        public void spawnDrop(Location loc, List<ItemStack> items)
        {
            for (ItemStack item : items)
            {
                Bukkit.broadcastMessage("droping: " + item);
                loc.getWorld().dropItemNaturally(loc, item);
            }
        }
       
        //сравнение предмета в руке и возможных предметов
        public boolean BreackWith(ItemStack iteminhend, List<String> items)
        {
            if (iteminhend.getType() == Material.AIR || iteminhend == null) {return false;}
           
            for (String item : items)
                if (iteminhend.getType().toString().equalsIgnoreCase(item)) {return true;}
           
            return false;
        }
       
        //перевод String в boolean
        public boolean StringToBoolean(String string)
        {
            try{
                return Boolean.valueOf(string);
            }catch(Exception exc){return false;}
        }
       
        //создание List<ItemStack> из String
        public List<ItemStack> dropList(List<String> strings)
        {
            if (strings != null && strings.size() >= 1)
            {
                List<ItemStack> list = new ArrayList<ItemStack>();
                for (String item : strings)
                {
                    ItemStack newitem = null;
                    String[] split = item.split(",");
                    int chans = 100;
                   
                    Material mat = StringToMaterial(split[0]);
                    if (mat == null) continue;
                   
                    if (split.length == 4 || split.length == 5)
                    {
                        try{
                            int max = Integer.valueOf(split[split.length - 2]);
                            int min = Integer.valueOf(split[split.length - 3]);
    
                            Random rand = new Random();
                            int amount = min;
                            if (min != max)
                                amount = rand.nextInt(max - min) + min;
                           
                            short data = 0;
                            if (split.length == 5) Short.valueOf(split[1]);
                           
                            chans = Integer.valueOf(split[split.length - 1]);
                            newitem = new ItemStack(mat, amount, data);
                        }catch(Exception exc){continue;}
                       
                        Random rand = new Random();
                        int some = rand.nextInt(100);
                        if (some <= chans)
                            list.add(newitem);
                    }else continue;
                }
                return list;
            }else return null;
        }
       
        //перевод String в Material
        public Material StringToMaterial(String string)
        {
            try{
                return Material.valueOf(string);
            }catch(Exception exc){return null;}
           
        }
       
        //перевод String в Integer
        public Integer StringToInteger(String string)
        {
            try{
                return Integer.valueOf(string);
            }catch(NumberFormatException exc){return 0;}
        }
       
    }

    Предпологаю что ошибка вот тут и связана с "droploc"
    Код:
        @EventHandler
        public void onItemSpawn(ItemSpawnEvent e)
        {
            Location spawnloc = e.getLocation();
            if (!droploc.isEmpty())
            for (Location loc : droploc)
            {
                if (loc.getBlockX() == spawnloc.getBlockX())
                if (loc.getBlockY() == spawnloc.getBlockY())
                if (loc.getBlockZ() == spawnloc.getBlockZ())
                {
                    e.setCancelled(true);
                    droploc.remove(loc);
                }
            }
        }
    пыхчу с этим дропом давно и уже совершенно не понимаю что не так, вроде уже сделал что все работает, но ошибка вылазиет каждый раз
     
  2. Хостинг MineCraft
    <
  3. makssof

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

    Баллы:
    103
    Skype:
    makssofez
  4. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    Нельзя добавлять или удалять элементы массива в цикле, который перебирает этот массив.
     
  5. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    ага.... чего то столь бонального я и ждал.
    Ну, в общем то спасибо что ткнули носом в очевидное.
     
Статус темы:
Закрыта.

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