updatePlayers(EntityTracker.java:151)

Discussion in 'Plugin Development' started by andre111, May 14, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    andre111

    I'm currently having a problem with finding the cause of this error:

    java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
    at java.util.HashMap$KeyIterator.next(Unknown Source)
    at net.minecraft.server.v1_5_R3.EntityTracker.updatePlayers(EntityTracker.java:151)

    but I'm never modifiying this HashSet.

    What other methods could cause this to happen?
     
  2. Offline

    evilmidget38

    andre111 Are you using Async tasks for anything?
     
    lukegb likes this.
  3. Offline

    TheUpdater

    error is in line 151
    in EntityTracker

    EntityTracker.java:151
     
  4. Offline

    andre111

    No, but I just noticed, could this happen because I'm sending packets when ever the XP changes?

    edit: No, that can't be it because it also happens in a older Version where I wasn't sending packets

    The problem is that I can't really test it because it only seems to happen sometimes.
     
  5. Offline

    evilmidget38

    andre111 Could you post your code so we can see what exactly you're doing?
     
    lukegb likes this.
  6. Offline

    andre111

    evilmidget38 Ok this is my code, but it can't be this one because it happens in Versions before it was included:
    Code:
    private static void sendFakeXP(Player player, int level, float xp) {
            PacketContainer fakeXPChange = DvZ.protocolManager.createPacket(Packets.Server.SET_EXPERIENCE);
         
            fakeXPChange.getFloat().
                write(0, xp);
            fakeXPChange.getIntegers().
                write(1, level);
         
                    try {
                        DvZ.protocolManager.sendServerPacket(player, fakeXPChange);
                    } catch (InvocationTargetException e) {
                    }
        }
    edit: It seems to only happen when a Player died. This is my code:
    Code:
    @EventHandler
        public void onEntityDeath(EntityDeathEvent event) {
            if (event.getEntityType()==EntityType.PLAYER) {
                Player player = (Player)event.getEntity();
               
                Game game = plugin.getPlayerGame(player.getName());
                if (game!=null) {
                    //Monster Droppen nix
                    if (game.isMonster(player.getName())) {
                        event.getDrops().clear();
                    }
                }
            }
        }
     
  7. Offline

    Comphenix

    You're probably calling Bukkit API from an asynchronous event or task. Try installing PluginCatcher and see if you can determine where.

    EDIT: I see you're using ProtocolLib. Are you using packet listeners with ConnectionSide.CLIENT_SIDE perhaps? Those will be executed asynchronously, and should NOT contain any calls to the normal Bukkit API. You'll have to schedule a task or use asynchronous listeners for that.
     
  8. Offline

    andre111

    Comphenix Ok I will try that. I'm only using ProtocolLib to send Packets.

    I also have this:
    Code:
    @EventHandler
    public void onPlayerRespawn(PlayerRespawnEvent event) {
        Player player = event.getPlayer();
        final String pname = player.getName();
        final Game game = plugin.getPlayerGame(player.getName());
       
        if (game!=null) {
            for(PotionEffect pet : player.getActivePotionEffects()) {
                player.removePotionEffect(pet.getType());
            }
           
            if(game.isDwarf(pname) || game.isMonster(pname)) {
                //deaths
                if(game.isDwarf(pname)) {
                    game.deaths++;
                }
           
                //respawn at spawnpoint of dvzworld
                final World w = Bukkit.getServer().getWorld(plugin.getConfig().getString("world_prefix", "DvZ_")+"Main"+plugin.getGameID(game)+"");
                if(game.spawnMonsters!=null) event.setRespawnLocation(game.spawnMonsters);
                else event.setRespawnLocation(w.getSpawnLocation());
               
                Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                    public void run() {
                        Player player = Bukkit.getPlayerExact(pname);
                       
                        if(player!=null) {
                            if(game.spawnMonsters!=null) player.teleport(game.spawnMonsters);
                            else player.teleport(w.getSpawnLocation());
                        }
                    }
                }, 1);
               
                game.setPlayerState(player.getName(), 3);
                player.sendMessage(DvZ.getLanguage().getString("string_choose","Choose your class!"));
     
                Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                    public void run() {
                        Player player = Bukkit.getPlayerExact(pname);
                       
                        if(player!=null) {
                            ItemHandler.clearInv(player);
                       
                            game.addMonsterItems(player);
                           
                            if (DvZ.api.isDisguised(player))
                                DvZ.api.undisguisePlayer(player);
                        }
                    }
                }, 1);
            }
        }
    }
    Ok I got a new error which seems to be related:

    java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
    at java.util.HashMap$KeyIterator.next(Unknown Source)
    at net.minecraft.server.v1_5_R3.EntityTracker.a(EntityTracker.java:203)
    at net.minecraft.server.v1_5_R3.EntityPlayer.l_(EntityPlayer.java:210)
    at net.minecraft.server.v1_5_R3.World.entityJoinedWorld(World.java:1355)
    at net.minecraft.server.v1_5_R3.WorldServer.entityJoinedWorld(WorldServer.java:614)
    at net.minecraft.server.v1_5_R3.World.playerJoinedWorld(World.java:1336)
    at net.minecraft.server.v1_5_R3.World.tickEntities(World.java:1224)
    at net.minecraft.server.v1_5_R3.WorldServer.tickEntities(WorldServer.java:480)
    at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:563)
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 1, 2016
  9. these error are caused by a plugin not respecting thread concurrency. this kind of errors are hard to debug
     
  10. Offline

    mbaxter ʇıʞʞnq ɐ sɐɥ ı

    PluginCatcher will track it down.
     
  11. Offline

    andre111

    well it doesn't log anything...
     
  12. Offline

    SilverKytten

Thread Status:
Not open for further replies.

Share This Page