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