1. Spigot & CraftBukkit have just been updated to Minecraft 1.8.5. For more info on how to get them, please see the update announcement.

Asynchronous entity add!

Discussion in 'BungeeCord Plugin Development' started by Craftiii4, Jul 14, 2013.

  1. I'm getting the following error (only on spigot builds);

    Code (text):
    2013-07-14 09:39:41 [SEVERE] Exception in thread "Craft Scheduler Thread - 0"
    2013-07-14 09:39:41 [SEVERE] org.apache.commons.lang.UnhandledException: Plugin [Plugin-name] v1.0.0 generated an exception while executing task 5
        at org.bukkit.craftbukkit.v1_6_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.IllegalStateException: Asynchronous entity world add!
        at net.minecraft.server.v1_6_R2.World.a(World.java:2481)
        at net.minecraft.server.v1_6_R2.Chunk.addEntities(Chunk.java:683)
        at net.minecraft.server.v1_6_R2.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:128)
        at net.minecraft.server.v1_6_R2.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:84)
        at org.bukkit.craftbukkit.v1_6_R2.CraftWorld.getChunkAt(CraftWorld.java:119)
        at org.bukkit.craftbukkit.v1_6_R2.CraftWorld.getBlockAt(CraftWorld.java:83)
        at org.bukkit.craftbukkit.v1_6_R2.CraftWorld.getBlockAt(CraftWorld.java:485)
        at org.bukkit.Location.getBlock(Location.java:82)
        at me.craftiii4.[Plugin-name].Nation.StartCapture.ChangeFlag(StartCapture.java:42)
        at me.craftiii4.[Plugin-name].Player.AddAndRemove$2.run(AddAndRemove.java:178)
        at org.bukkit.craftbukkit.v1_6_R2.scheduler.CraftTask.run(CraftTask.java:58)
        at org.bukkit.craftbukkit.v1_6_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
        ... 3 more
     
    On this line here;

    Code (text):
    while (locationoffirstwool.getBlock().getType() != Material.WOOL && locationoffirstwool.getY() <= 255) {
    The code around it is;

    Code (text):

    public static void ChangeFlag(String nation, final Location locationofsponge) {
     
    Location locationoffirstwool = locationofsponge;
     
        while (locationoffirstwool.getBlock().getType() != Material.WOOL && locationoffirstwool.getY() <= 255) {
            locationoffirstwool.add(0, 1, 0);
        }
     
    This is called from a AsynTask, which is what is causing the error, but I fail to see why this is causing the error it is causing?

    Any help would be appreciated thanks.
     
    #1
  2. Switch the order of the statements in the while loop. Y gets incremented to 256 and then the block is checked before it is checked to be <= 255.
     
    #2
  3. Run the actual setting of the wool in a sync method. Spigot is saving your server. Editing the world like such in an asynchronous thread will corrupt the world.
     
    #3
  4. #4
    • Like Like x 1
  5. Thanks, I will try these once I get back.
     
    #5