-1

I'm trying to code Minecraft Manhunt plugin for 1.8.8 but everytime I do /hunt [Player name], I get this error in server console:

null
org.bukkit.command.CommandException: Unhandled exception executing command 'hunt' in plugin Manhunt v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_282]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_282]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]
Caused by: java.lang.NullPointerException
        at com.jason.manhunt.ManhuntCommand.onCommand(ManhuntCommand.java:13) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more

Here's my Main:

package com.jason.manhunt;

import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;

public class Manhunt extends JavaPlugin {

    public String hunted = "";

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new HunterRespawn(), this);
        getServer().getPluginManager().registerEvents(new Compass(), this);
        getCommand("hunt").setExecutor(new ManhuntCommand());
        getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[Manhunt 1.8.8]: Plugin is Enabled!");
    }

    @Override
    public void onDisable() {
        getServer().getConsoleSender().sendMessage(ChatColor.RED + "[Manhunt 1.8.8]: Plugin is Disabled!");
    }
}

Here's my ManhuntCommand class:

package com.jason.manhunt;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class ManhuntCommand implements CommandExecutor {
    private Manhunt plugin;

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        this.plugin.hunted = args[0];

        return true;
    }
}

Here's my Compass class:

package com.jason.manhunt;

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;

public class Compass implements Listener {

    private Manhunt plugin;

    @EventHandler
    public void CompassClick (PlayerInteractEvent e) {

        Player p = e.getPlayer();
        Material held = e.getItem().getType();
        Action act = e.getAction();

        if (!(p.getName().equals(this.plugin.hunted)) && held == Material.COMPASS && (act == Action.RIGHT_CLICK_BLOCK || act == Action.RIGHT_CLICK_BLOCK)) {

            Player hntd = p.getServer().getPlayer(this.plugin.hunted);

            p.setCompassTarget(hntd.getLocation());
            p.sendMessage("You are tracking "+this.plugin.hunted);
        }
    }
}

Here's my HunterRespawn class:

package com.jason.manhunt;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;

public class HunterRespawn implements Listener {

    @EventHandler
    public void PlayerRespawn (PlayerRespawnEvent e) {
        Player p = e.getPlayer();

        p.getInventory().addItem(new ItemStack(Material.COMPASS));
    }
}

and here's my plugin.yml file:

name: Manhunt
version: 1.0
author: Jason
main: com.jason.manhunt.Manhunt
commands:
  hunt:
    description: /hunt [Player Name] to start the manhunt
    usage: /<command>

Does anyone know what's causing it and how to fix it please?

Jason6688
  • 91
  • 8
  • Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – rkosegi Mar 08 '21 at 21:01
  • So does this mean that the /hunt command is null? But I did assign /hunt to grab the player name in Main. – Jason6688 Mar 08 '21 at 21:07

1 Answers1

1

Let's focus on the stack trace first. If you look carefully you can see which file and line the problem originated in:

at com.jason.manhunt.ManhuntCommand.onCommand(ManhuntCommand.java:13) ~[?:?]

The above line indicates that the error originates in the ManhuntCommand file on line 13.

package com.jason.manhunt;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class ManhuntCommand implements CommandExecutor {
    private Manhunt plugin; // This is declared but never initialized. So plugin is null.

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        this.plugin.hunted = args[0]; // Here the error is produced.
        //"Translates" to: null.hunted, so a NullPointerException is thrown.
        return true;
    }
}

The problem is that you never initialize the variable plugin on ManhuntCommand. You should add a constructor into ManhuntCommand class that takes an instance of the main class as a parameter and saves it into plugin.

public ManhuntCommand(Manhunt manhunt) {
    this.manhunt = manhunt;
}

Then when creating a new instance of ManhuntCommand in ManhuntClass pass this as the parameter of the constructor:

@Override
public void onEnable() {
    getServer().getPluginManager().registerEvents(new HunterRespawn(), this);
    getServer().getPluginManager().registerEvents(new Compass(), this);
    getCommand("hunt").setExecutor(new ManhuntCommand(this));
    getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[Manhunt 1.8.8]: Plugin is Enabled!");
}

This should solve this NullPointerException.

Further reading

What is a NullPointerException, and how do I fix it? proposed by @rkosegi

Java OOP

Java Constructors

PauMAVA
  • 1,163
  • 14
  • 23