Noob question

Discussion in 'Plugin Development' started by gepardo43, Dec 19, 2012.

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

    gepardo43

    Hello, I wanted to make a short plugin which blocks snowball throwing but I have errors in console
    Code:
    package org.zi.aa;
     
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Snowballs extends JavaPlugin implements Listener {
       
        protected static final Logger log = Logger.getLogger("Minecraft");
       
        public void onEnable() {
            getServer().getPluginManager().registerEvents(this, this);
            log.info("[Snowballs] Plugin enabled");
        }
           
        public void onDisable() {
            log.info("[Snowballs] Plugin disabled");
        }
       
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent event) {
            Action action = event.getAction();
            Player player = event.getPlayer();
            if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) {
                if (event.getItem().getType() == Material.SNOW_BALL) {
                    player.sendMessage(ChatColor.RED + "Snowballs are temporarily disabled");
                    event.setCancelled(true);
                }
            }
        }
    }
    This code throws mi this error:
    Code:
    13:00:17 [SEVERE] Could not pass event PlayerInteractEvent to Snowballs v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
            at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:35)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
            at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:178)
            at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:376)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:662)
            at net.minecraft.server.Packet15Place.handle(SourceFile:58)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:290)
            at net.minecraft.server.NetServerHandler.d(NetServerHandler.java:113)
            at net.minecraft.server.ServerConnection.b(SourceFile:39)
            at net.minecraft.server.DedicatedServerConnection.b(SourceFile:30)
            at net.minecraft.server.MinecraftServer.r(MinecraftServer.java:582)
            at net.minecraft.server.DedicatedServer.r(DedicatedServer.java:222)
            at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:478)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:413)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:856)
    Caused by: java.lang.NullPointerException
            at org.zi.aa.Snowballs.onPlayerInteract(Snowballs.java:32)
            at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
            ... 17 more
    
    Whats wrong? Im learning java for 1 day :/
     
  2. Offline

    Barinade

  3. Offline

    fireblast709

    gepardo43 To specify the error: you are assuming that the player holds anything. If the slot is empty, it is null. In this case, trying to call .getType() on null would throw an error.

    If you check if event.getItem() != null before you try .getType(), it should be fine
     
  4. Offline

    ZeusAllMighty11


    Weird, I don't get NPEs when I don't check if it's nothing. I just do it like :

    Code:
    @EventHandler
    public void onRightClick(PlayerInteractEvent e){
        Player clicker = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_AIR){
            if(clicker.getItemInHand().getType().equals(Material.SNOWBALL)){
                e.setCancelled(true);
                clicker.sendMessage(ChatColor.RED + " Snowballs are temporarily disabled");
            }
        }
     
        else if(e.getAction() == Action.RIGHT_CICK_BLOCK){
             if(clicker.getItemInHand().getType().equals(Material.SNOWBALL)){
     
                e.setCancelled(true);
                clicker.sendMessage(ChatColor.RED + " Snowballs are temporarily disabled");
            }
        }
    }
    
     
  5. Offline

    fireblast709

    ZeusAllMighty11 that is the difference between your code and his code then. PlayerInteractEvent has a method hasItem() that checks if the item is null, so the event itself can return null. It might be that your code does not :3 (which is perfectly fine)
     
  6. Offline

    gepardo43

    Ok, thank you for all answers. Thank you all
     
Thread Status:
Not open for further replies.

Share This Page