Ошибка

  • Автор темы Автор темы 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

Есть код:
JavaScript:
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"
JavaScript:
    @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);
            }
        }
    }

пыхчу с этим дропом давно и уже совершенно не понимаю что не так, вроде уже сделал что все работает, но ошибка вылазиет каждый раз
 
Нельзя добавлять или удалять элементы массива в цикле, который перебирает этот массив.
 
ага.... чего то столь бонального я и ждал.
Ну, в общем то спасибо что ткнули носом в очевидное.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх