-1

I am making a setspawn and spawn command but "/spawn" does not work. I am using Bukkit 1.8.3. Anyone know why? here is the full code:

Relevant Code

/setspawn

if (cmd.getName().equalsIgnoreCase("setspawn")) {
    if (!sender.hasPermission("setspawn")) {
        sender.sendMessage(ChatColor.RED + "Access denied.");
        return true;
    }

    if (!(sender instanceof Player)) {
        sender.sendMessage(ChatColor.RED + "CONSOLE Cannot set spawn!");
        return true;
    }

    if (sender instanceof Player) {
        Player player = (Player) sender;

        getConfig().set("spawn.world", player.getLocation().getWorld());
        getConfig().set("spawn.x", player.getLocation().getX());
        getConfig().set("spawn.y", player.getLocation().getY());
        getConfig().set("spawn.z", player.getLocation().getZ());
        saveConfig();
        player.sendMessage(ChatColor.GREEN + "Spawn has been set!");

        return true;
    }
}

/spawn

if (cmd.getName().equalsIgnoreCase("spawn")) {
    if (!sender.hasPermission("spawn")) {
        sender.sendMessage(ChatColor.RED + "Access denied.");
        return true;
    }

    if (!(sender instanceof Player)) {
        sender.sendMessage(ChatColor.RED + "CONSOLE Cannot teleport to spawn!");
        return true;
    }

    if (getConfig().getConfigurationSection("spawn") == null) {
        Player player = (Player) sender;
        player.sendMessage(ChatColor.RED + "Spawn is not set!");
        return true;
    }

    if (sender instanceof Player) {
        Player player = (Player) sender;
        World w = Bukkit.getServer().getWorld(getConfig().getString("spawn.world"));
        double x = getConfig().getDouble("spawn.x");
        double y = getConfig().getDouble("spawn.y");
        double z = getConfig().getDouble("spawn.z");

        player.teleport(new Location(w, x, y, z));

        return true;
    }
}

Full Code

package me.herobrine112211.ulticmdpack;

import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class System extends JavaPlugin implements Listener {
    public static Economy econ = null;

    public void onEnable() {
        if (!setupEconomy()) {
            getLogger().severe(String.format("[%s] - Disabled because vault was not found!", getDescription().getName()));
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        getConfig().options().copyDefaults(true);
        saveConfig();
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        Bukkit.getServer().getLogger().info("Ultimate Command Pack Plugin has been actived!");
    }

    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }

        RegisteredServiceProvider < Economy > rsp = getServer().getServicesManager().getRegistration(Economy.class);

        if (rsp == null) {
            return false;
        }

        econ = rsp.getProvider();
        return econ != null;
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Ultimate Command Pack Plugin has been disabled! This will give big problems to server.");
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent joinevent) {
        Player getplayer = joinevent.getPlayer();

        getplayer.sendMessage(ChatColor.AQUA + "Hey " + getplayer.getName() + "! Welcome to the Ultimate Prison server!");

        if (getplayer.getName().equals("Herobrine112211")) {
            Bukkit.getServer().broadcastMessage(ChatColor.WHITE + "[" + ChatColor.GOLD + "BROADCAST" + ChatColor.WHITE + "] " + ChatColor.GOLD + "Server Creator Herobrine112211 has joined the game!!!!!!!!!!");
        }
    }

    @SuppressWarnings("deprecation")
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if (cmd.getName().equalsIgnoreCase("contactowner")) {
            if (!sender.hasPermission("contactowner")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "Console will never need owner support.");
                return true;
            }

            if (sender instanceof Player) {
                Player player = (Player) sender;
                player.sendMessage(ChatColor.GOLD + "Owner: Herobrine112211. Live chat skype: gangsteris33.");
                return true;
            }
        }

        if (cmd.getName().equalsIgnoreCase("reloadconfig")) {
            if (!sender.hasPermission("config.reload")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            reloadConfig();
            sender.sendMessage(ChatColor.RED + "Server config reloaded successfully.");
            return true;
        }

        if (cmd.getName().equalsIgnoreCase("saveconfig")) {
            if (!sender.hasPermission("config.save")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            reloadConfig();
            sender.sendMessage(ChatColor.RED + "Server config saved successfully.");
            return true;
        }

        if (cmd.getName().equalsIgnoreCase("fakeop")) {
            if (!sender.hasPermission("fake.op")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + "Please specify a player!");
                return true;
            }

            Player target = Bukkit.getServer().getPlayer(args[0]);

            if (target == null) {
                sender.sendMessage(ChatColor.RED + "Player must be online!");
                return true;
            }

            target.sendMessage(ChatColor.YELLOW + "You are now op!");
        }

        if (cmd.getName().equalsIgnoreCase("fakejoin")) {
            if (!sender.hasPermission("fake.join")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + "Please specify a name!");
                return true;
            }

            Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + args[0] + " joined the game.");
        }

        if (cmd.getName().equalsIgnoreCase("broadcast")) {
            if (!sender.hasPermission("broadcast")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + "Please give a message to broadcast!");
                return true;
            }

            StringBuilder strbl = new StringBuilder();

            for (int i = 0; i < args.length; i++) {
                strbl.append(args[i] + " ");
            }

            String broadcastas = strbl.toString();
            Bukkit.getServer().broadcastMessage(ChatColor.WHITE + "[" + ChatColor.GOLD + "BROADCAST" + ChatColor.WHITE + "] " + ChatColor.RED + broadcastas);
        }

        if (cmd.getName().equalsIgnoreCase("heal")) {
            if (!sender.hasPermission("heal")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (!(sender instanceof Player)) {
                if (args.length == 0) {
                    sender.sendMessage(ChatColor.RED + "Please specify a player!");
                    return true;
                }

                Player target = Bukkit.getServer().getPlayer(args[0]);

                if (target == null) {
                    sender.sendMessage(ChatColor.RED + "Player must be online to be healed!");
                    return true;
                }

                target.setHealth(20);
                target.setFireTicks(0);
                target.sendMessage(ChatColor.GREEN + "CONSOLE" + " healed you!");
                sender.sendMessage(ChatColor.GREEN + target.getName() + " is healed!");

                return true;
            }
            if (sender instanceof Player) {
                if (args.length == 0) {
                    Player player = (Player) sender;
                    player.setHealth(20);
                    player.setFireTicks(0);
                    player.sendMessage(ChatColor.GREEN + "Your health is now full!");
                    return true;
                }

                Player target = Bukkit.getServer().getPlayer(args[0]);

                if (target == null) {
                    sender.sendMessage(ChatColor.RED + "Player must be online to be healed!");
                    return true;
                }

                Player player = (Player) sender;
                target.setHealth(20);
                target.setFireTicks(0);
                target.sendMessage(ChatColor.GREEN + player.getName() + " healed you!");
                player.sendMessage(ChatColor.GREEN + target.getName() + " is healed!");
            }
        }

        if (cmd.getName().equalsIgnoreCase("feed")) {
            if (!sender.hasPermission("feed")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }
            if (!(sender instanceof Player)) {
                if (args.length == 0) {
                    sender.sendMessage(ChatColor.RED + "Please specify a player!");
                    return true;
                }

                Player target = Bukkit.getServer().getPlayer(args[0]);

                if (target == null) {
                    sender.sendMessage(ChatColor.RED + "Player must be online to be fed!");
                    return true;
                }

                target.setHealth(20);
                target.setFireTicks(0);
                target.sendMessage(ChatColor.GREEN + "CONSOLE" + " fed you!");
                sender.sendMessage(ChatColor.GREEN + target.getName() + " hunger is now full!");

                return true;
            }

            if (sender instanceof Player) {
                if (args.length == 0) {
                    Player player = (Player) sender;
                    player.setFoodLevel(20);
                    player.sendMessage(ChatColor.GREEN + "Your hunger is now full!");

                    return true;
                }

                Player target = Bukkit.getServer().getPlayer(args[0]);

                if (target == null) {
                    Player player = (Player) sender;
                    player.sendMessage(ChatColor.RED + "Player must be online to be fed!");

                    return true;
                }

                Player player = (Player) sender;

                target.setFoodLevel(20);
                target.sendMessage(ChatColor.GREEN + player.getName() + " fed you!");
                player.sendMessage(ChatColor.GREEN + target.getName() + " hunger is now full!");
            }
        }

        if (cmd.getName().equalsIgnoreCase("tpall")) {
            if (!sender.hasPermission("teleport")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "Cannot teleport everyone to console!");
                return true;
            }

            if (sender instanceof Player) {
                if (args.length == 0) {
                    for (Player allplayers: Bukkit.getOnlinePlayers()) {
                        Player player = (Player) sender;
                        World w = player.getLocation().getWorld();
                        double x = player.getLocation().getX();
                        double y = player.getLocation().getY();
                        double z = player.getLocation().getZ();

                        allplayers.teleport(new Location(w, x, y, z));
                        player.sendMessage(ChatColor.GREEN + "All players teleported to you!");

                        return true;
                    }
                }

                for (Player allplayers: Bukkit.getOnlinePlayers()) {
                    Player target = Bukkit.getServer().getPlayer(args[0]);

                    if (target == null) {
                        Player player = (Player) sender;
                        player.sendMessage(ChatColor.RED + "Player must be online!");
                        return true;
                    }

                    Player player = (Player) sender;
                    World w = target.getLocation().getWorld();
                    double x = target.getLocation().getX();
                    double y = target.getLocation().getY();
                    double z = target.getLocation().getZ();

                    allplayers.teleport(new Location(w, x, y, z));
                    player.sendMessage(ChatColor.GREEN + "All players teleported to player!");

                    return true;
                }
            }
        }

        if (cmd.getName().equalsIgnoreCase("setspawn")) {
            if (!sender.hasPermission("setspawn")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "CONSOLE Cannot set spawn!");
                return true;
            }

            if (sender instanceof Player) {
                Player player = (Player) sender;

                getConfig().set("spawn.world", player.getLocation().getWorld());
                getConfig().set("spawn.x", player.getLocation().getX());
                getConfig().set("spawn.y", player.getLocation().getY());
                getConfig().set("spawn.z", player.getLocation().getZ());
                saveConfig();
                player.sendMessage(ChatColor.GREEN + "Spawn has been set!");

                return true;
            }
        }

        if (cmd.getName().equalsIgnoreCase("spawn")) {
            if (!sender.hasPermission("spawn")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "CONSOLE Cannot teleport to spawn!");
                return true;
            }

            if (getConfig().getConfigurationSection("spawn") == null) {
                Player player = (Player) sender;
                player.sendMessage(ChatColor.RED + "Spawn is not set!");
                return true;
            }

            if (sender instanceof Player) {
                Player player = (Player) sender;
                World w = Bukkit.getServer().getWorld(getConfig().getString("spawn.world"));
                double x = getConfig().getDouble("spawn.x");
                double y = getConfig().getDouble("spawn.y");
                double z = getConfig().getDouble("spawn.z");

                player.teleport(new Location(w, x, y, z));

                return true;
            }
        }

        if (cmd.getName().equalsIgnoreCase("kit")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "CONSOLE Cannot get kits!" + ChatColor.RED + "Kits:" + ChatColor.GOLD + "Starter");
                return true;
            }

            if (!sender.hasPermission("kit")) {
                sender.sendMessage(ChatColor.RED + "Access denied.");
                return true;
            }

            if (sender instanceof Player) {
                if (args.length == 0) {
                    Player player = (Player) sender;
                    player.sendMessage(ChatColor.RED + "Kits:" + ChatColor.GOLD + "Starter");
                    return true;
                }

                if (args[0].equalsIgnoreCase("starter")) {
                    if (!sender.hasPermission("kit.starter")) {
                        sender.sendMessage(ChatColor.RED + "Access denied.");
                        return true;
                    }

                    if (sender instanceof Player) {
                        Player player = (Player) sender;
                        PlayerInventory pinv = player.getInventory();
                        EconomyResponse withdraw = econ.withdrawPlayer(player.getName(), 10);

                         if (withdraw.transactionSuccess()) {
                            pinv.addItem(new ItemStack(Material.DIAMOND_PICKAXE, 1));
                            pinv.addItem(new ItemStack(Material.DIAMOND_SWORD, 1));
                            pinv.addItem(new ItemStack(Material.DIAMOND_AXE, 1));
                            pinv.addItem(new ItemStack(Material.COOKED_BEEF, 20));
                            return true;
                        } else {
                            player.sendMessage(ChatColor.RED + "You dont have required money ammount. Kit purchase failed!");
                            return true;
                        }
                    }
                }

                Player player = (Player) sender;
                player.sendMessage(ChatColor.RED + "Kit was not found. Do /kit for kits.");

                return true;
            }
        }

        return false;
    }
}

Error Log

8:54:05 AM [ERROR] null
8:54:05 AM org.bukkit.command.CommandException: Unhandled exception executing command 'spawn' in plugin UltimateCommandPack v1.0.0
8:54:05 AM at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServer.java:625) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.PlayerConnection.handleCommand(PlayerConnection.java:1077) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.PlayerConnection.a(PlayerConnection.java:937) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(SourceFile:37) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(SourceFile:9) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.PlayerConnectionUtils$1.run(SourceFile:13) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_75]
8:54:05 AM at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_75]
8:54:05 AM at net.minecraft.server.v1_8_R2.SystemUtils.a(SourceFile:60) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:670) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:336) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:626) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:534) [bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at java.lang.Thread.run(Unknown Source) [?:1.7.0_75]
8:54:05 AM Caused by: java.lang.NullPointerException
8:54:05 AM at org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer.teleport(CraftPlayer.java:464) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at org.bukkit.craftbukkit.v1_8_R2.entity.CraftEntity.teleport(CraftEntity.java:223) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM at me.herobrine112211.ulticmdpack.System.onCommand(System.java:313) ~[?:?]
8:54:05 AM at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[bukkit.jar:git-Bukkit-61ef214]
8:54:05 AM ... 15 more

I have no idea why it does not work. It looks like it should work. If you know the fix show me the solution. Thanks.

Mr. Polywhirl
  • 42,981
  • 12
  • 84
  • 132
Reaper123
  • 109
  • 4
  • 8
  • It looks like `player.teleport()` may not be thread-safe in your `/spawn` logic? Could [this (*Null Pointer Teleport on Join*)](https://bukkit.org/threads/unsquashable-null-pointer-teleport-on-join.195484/) help you? Line 313, as shown in your error log, is this line: "**`player.teleport(new Location(w, x, y, z));`**" – Mr. Polywhirl Apr 07 '15 at 16:28
  • I have a feeling that the World has not completely loaded, so check the values of `x`, `y`, and `z`. This question may also be helpful: [*(Stack Overflow) Bukkit teleport - nullPointerException*](http://stackoverflow.com/questions/18212244/bukkit-teleport-nullpointerexception) – Mr. Polywhirl Apr 07 '15 at 16:34
  • I added a TL;DR section above your full code and also re-titled your question, based on the output in your error log. Please read your error log carefully and start from the bottom and work your way to the top. – Mr. Polywhirl Apr 07 '15 at 16:43
  • Possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Ferrybig Jan 11 '16 at 15:08

2 Answers2

2

Check the value of your spawn.world property in your config. If the world does not exists then the value of w will be null.

String worldName = getConfig().getString("spawn.world");
System.out.println(worldName); // Check if value is correct.
World w = Bukkit.getServer().getWorld(worldName);

Edit

In your /setspawn command, you are incorrectly setting your spawn.world configuration value.

As you have explained in your comment below, your spawn.world config property is being set to:

spawn.world=CraftWorld{name=world}

When it should actually be:

spawn.world=world

This is because Location.getWorld() returns a World (Object) and not the name of the world (String). Instead of the name of the world, you are retrieving the toString() representation as I mentioned.

The World.getName() method returns the unique name of the world.

Change that

getConfig().set("spawn.world", player.getLocation().getWorld());

To this

getConfig().set("spawn.world", player.getLocation().getWorld().getName());

The getConfig().set(String,Object) method takes an object as its second parameter and since you are passing an Object (World) to be written to a file, said Object's toString() will be implicitly called.


Notes

The following notes were gathered during my initial investigation of your problem before more information was introduced.

In the following post, user blackwolf12333 had to make sure to remove new-line characters from the retrieved world name. More information can be found here:

{{bukkit.org}} [Solved] Bukkit.getServer().getWorld(worldname) returns null?

Additionally, as mentioned in my first comment of your question Server.getWorld(String) is not thread-safe. Be aware of this.

Community
  • 1
  • 1
Mr. Polywhirl
  • 42,981
  • 12
  • 84
  • 132
  • Ok this is what i got. I did the check worldname as a command when i set spawn it give me this: CraftWorld{name=world} soo the world is correct? then why its giving me the error? i tried adding the new world w = Bukkit.ge... replacing old one in spawn command. Same error. – Reaper123 Apr 08 '15 at 09:52
  • Wait, the value of `worldName` was *"CraftWorld{name=world}"*? That is not a string, that is a string representation of an object. – Mr. Polywhirl Apr 08 '15 at 11:23
  • Yes. That was the worldName. If this is wrong how do i fix it. – Reaper123 Apr 08 '15 at 14:38
  • @Reaper123: OK, instead of setting your `spawn.world` config to be the `World.toString()`, set it to be `World.getName()`. – Mr. Polywhirl Apr 08 '15 at 15:42
  • Yup that solved the problem now the checkworld is world. Thanks! – Reaper123 Apr 08 '15 at 17:32
0

You're getting a NullPointerException because you're storing the value world.toString() as the world name, instead of world.getName():

if (cmd.getName().equalsIgnoreCase("setspawn")) {
  if (sender instanceof Player) {
    Player player = (Player) sender;

    getConfig().set("spawn.world", player.getLocation().getWorld());

A NullPointerException is thrown when:

  • Calling the instance method of a null object.
  • Accessing or modifying the field of a null object.
  • Taking the length of null as if it were an array.
  • Accessing or modifying the slots of null as if it were an array.
  • Throwing null as if it were a Throwable value.

(emphasis mine, from the documentation)

When trying to get the World from the config, a NullPointerException is thrown because the world that you stored with world.toString() is not a valid world name, and therefor is not the name of any world.

The String returned by world.toString() is CraftWorld{name=myWorldName}, which is not the name of the world, the name of the world is myWorldName (in this example). If you want to fix this, you need to use world.getName(), which will return the correct value of myWorldName.

So, your /setspawn code should look something like this:

if (cmd.getName().equalsIgnoreCase("setspawn")) {
  //your code...
  if (sender instanceof Player) {
    Player player = (Player) sender;

    getConfig().set("spawn.world", player.getLocation().getName());
    //the rest of your code
  }
  //the rest of your code
  return true;
}
Jojodmo
  • 23,357
  • 13
  • 65
  • 107