LogBlock API NPE

Discussion in 'Plugin Development' started by Jacek, Jan 1, 2012.

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

    Jacek

    As part of my AutoMod plugin I check the owner of the first few blocks that a player breaks, it seems that some of the time an NPE is thrown.

    Code:
    2012-01-01 14:39:46 [SEVERE] at de.diddiz.LogBlock.QueryParams.getTable(QueryParams.java:120)
    2012-01-01 14:39:46 [SEVERE] at de.diddiz.LogBlock.QueryParams.getQuery(QueryParams.java:105)
    2012-01-01 14:39:46 [SEVERE] at de.diddiz.LogBlock.LogBlock.getBlockChanges(LogBlock.java:285)
    2012-01-01 14:39:46 [SEVERE] at uk.co.jacekk.bukkit.automod.listener.AutoModBlockListener.onBlockBreak(AutoModBlockListener.java:132)
    2012-01-01 14:39:46 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader$40.execute(JavaPluginLoader.java:542)
    2012-01-01 14:39:46 [SEVERE] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    2012-01-01 14:39:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.ItemInWorldManager.c(ItemInWorldManager.java:201)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.ItemInWorldManager.a(ItemInWorldManager.java:165)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:501)
    2012-01-01 14:39:46 [SEVERE] at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:208)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.Packet14BlockDig.a(SourceFile:43)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:93)
    2012-01-01 14:39:46 [SEVERE] at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:550)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:527)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425)
    2012-01-01 14:39:46 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)
    I have seen this in my server.log file but don't seem to be able to reproduce it locally, the coe involved is

    Code:
    try{
                        QueryParams params = new QueryParams(plugin.logblock);
    
                        params.loc = event.getBlock().getLocation();
                        params.bct = BlockChangeType.CREATED;
                        params.order = Order.DESC;
                        params.limit = 1;
    
                        params.needType = true;
                        params.needPlayer = true;
    
                        for (BlockChange bc : plugin.logblock.getBlockChanges(params)){
                            if (bc.type == blockId && bc.playerName != playerName){
                                plugin.buildDeniedList.addPlayer(player);
    
                                this.notifyPlayer(player, "Breaking a block not placed by you");
    
                                break;
                            }
                        }
                    }catch (Exception e){
                        plugin.log.warn("LogBlock lookup failed.");
    
                        e.printStackTrace();
                    }
    I can't really think of the cause for this, other than there not being a table for the world the player is in.

    Any ideas ?

    Rather oddly, this seemed to fix it

    Code:
    QueryParams params = new QueryParams(plugin.logblock);
    
                        params.loc = event.getBlock().getLocation();
                        params.world = params.loc.getWorld();
                        params.bct = BlockChangeType.CREATED;
                        params.order = Order.DESC;
                        params.limit = 1;
    
                        params.needType = true;
                        params.needPlayer = true;
    
                        BlockChange change = plugin.logblock.getBlockChanges(params).get(0);
    
                        if (change.type == blockId && change.playerName != playerName){
                            plugin.buildDeniedList.addPlayer(player);
    
                            this.notifyPlayer(player, "Breaking a block not placed by you");
                        }
    I guess the world is not taken from the location :s

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 22, 2016
Thread Status:
Not open for further replies.

Share This Page