[SOLVED] HashMap null Error

Discussion in 'Plugin Development' started by xboxnolifes, Aug 10, 2012.

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

    xboxnolifes

    I'm probably just missing something in my code, but I just cannot find out what I'm doing wrong.

    Stack Trace:
    Code:
    2012-08-10 21:54:25 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'shout' in plugin QuantumShout v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
        at forge.bukkit.ForgeCommandMap.dispatch(ForgeCommandMap.java:55)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:497)
        at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:843)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:799)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:781)
        at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:234)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:119)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:83)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:579)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:467)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.lang.NullPointerException
        at me.XboxNoLifes.QuantumShout.QuantumShout.onCommand(QuantumShout.java:62)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
        ... 13 more
    Line 62:
    Code:
    Time.put(name, System.currentTimeMillis());
    
    Source Code:
    Code:
     
    package me.XboxNoLifes.QuantumShout;
     
    import java.util.HashMap;
    import java.util.logging.Logger;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class QuantumShout extends JavaPlugin {
     
    public final Logger logger = Logger.getLogger("Minecraft");
    public static QuantumShout plugin;
    public HashMap<String, Long> Time = null;
     
    public void onDisable() {
     
    PluginDescriptionFile pdffile = this.getDescription();
    this.logger.info("[" + pdffile.getName() + "]" + " Version "
    + pdffile.getVersion() + " Has Been Disabled!!");
    }
     
    public void onEnable() {
     
    PluginDescriptionFile pdffile = this.getDescription();
    this.logger.info("[" + pdffile.getName() + "]" + " Version "
    + pdffile.getVersion() + " Has Been Enabled!");
    Time = new HashMap<String, Long>();
    }
     
    public boolean onCommand(CommandSender sender, Command cmd,
    String commandLabel, String[] args) {
    Player player = (Player) sender;
    String name = sender.getName();
    StringBuilder b = new StringBuilder();
     
    if (commandLabel.equalsIgnoreCase("shout")) {
     
    if (args.length == 0) {
     
    player.sendMessage(ChatColor.RED
    + "Correct Usage: /Shout (Message)");
     
    } else if (args.length >= 1) {
     
    if (!Time.containsKey(name)) {
     
    for (int i = 0; i < args.length; i++) {
    if (i != 0)
    b.append(' ');
    b.append(args[i]);
    }
     
    Bukkit.getServer().broadcastMessage(
    ChatColor.AQUA + "[" + ChatColor.GREEN
    + "QuantumShout" + ChatColor.AQUA + "] "
    + ChatColor.RED + name + " - " + b);
    Time.put(name, System.currentTimeMillis());
    }
     
    if (Time.containsKey(name)) {
     
    int cooldown = 15;
    long diff = (System.currentTimeMillis() - Time
    .get(name)) / 1000;
    if (diff < cooldown) {
    player.sendMessage(ChatColor.RED
    + "You Have Shouted Recently, Please Try Again Later!");
    } else if (diff >= cooldown) {
    for (int i = 0; i < args.length; i++) {
    if (i != 0)
    b.append(' ');
    b.append(args[i]);
    }
     
    Bukkit.getServer().broadcastMessage(
    ChatColor.AQUA + "[" + ChatColor.GREEN
    + "QuantumShout" + ChatColor.AQUA
    + "] " + ChatColor.RED + name + " - "
    + b);
    Time.remove(name);
    Time.put(name, System.currentTimeMillis());
    }
    }
     
    }
    }
    return false;
    }
    }
     
    
    I have never worked with HashMaps before, and I want to be able to avoid this mishap in the future, so I beg your help as I have spent several hours trying to fix this -_-.
     
  2. Offline

    HON95

    That... makes no sense. Check to see if Time is equal to null on the line above, just to be sure.

    BTW, check to see if the sender is a Player before casting, use getLogger() instead of Logger.getLogger(""), and drop the whole "Plugin Version X Has Been Enabled!" to reduce console spam. The last ones are just suggestions, ofc.
     
  3. Offline

    xboxnolifes

    Miraculously, I fixed it by changing my "name" variables to "sender.getName()" -_-

    Now I just need to fix some logic errors. THANKS!
     
  4. Offline

    Milkywayz

    If you still have problems with cool downs, you can use a library I coded and released just a few minutes ago :D
     
Thread Status:
Not open for further replies.

Share This Page