Solved Help On Player Click

Discussion in 'Plugin Development' started by Tvullnet, Nov 22, 2015.

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

    Tvullnet

    Hey I Need help i want to withdraw money from the player when they click my gui but i keep getting a error on the console
    Code:
     Could not pass event InventoryClickEvent to Cannon_Plugin v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[minecraft_server.jar:git-Bukkit-d4e32ce]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[minecraft_server.jar:git-Bukkit-d4e32ce]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1564) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_45]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_45]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [minecraft_server.jar:git-Bukkit-d4e32ce]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    Caused by: java.lang.NullPointerException
        at me.VintecHD.Cannon.Command.cannonCommand.onInventoryClick(cannonCommand.java:93) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[minecraft_server.jar:git-Bukkit-d4e32ce]
        ... 15 more
    
    Here Is My Code
    Code:
    package me.VintecHD.Cannon.Command;
    
    import java.util.Arrays;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.Plugin;
    
    import net.milkbowl.vault.economy.Economy;
    import net.milkbowl.vault.economy.EconomyResponse;
    
    public class cannonCommand implements Listener, CommandExecutor
    {
    
        private Inventory inv;
        private ItemStack basic, Super, Ultra;
        public static Economy econ = null;
    
        public cannonCommand(Plugin p)
        {
            inv = Bukkit.getServer().createInventory(null, 9, "Cannon Selector");
    
            basic = basic(ChatColor.GREEN + "Basic Cannon");
            Super = Super(ChatColor.RED + "Super Cannon");
            Ultra = Ultra(ChatColor.LIGHT_PURPLE + "Ultra Cannon");
    
            inv.setItem(2, basic);
            inv.setItem(4, Super);
            inv.setItem(6, Ultra);
    
            Bukkit.getServer().getPluginManager().registerEvents(this, p);
        }
    
        private ItemStack basic(String name)
        {
            ItemStack i = new ItemStack(Material.SULPHUR, 1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList(ChatColor.AQUA + "This Costs £200"));
            i.setItemMeta(im);
            return i;
        }
    
        private ItemStack Super(String name)
        {
            ItemStack i = new ItemStack(Material.FLINT_AND_STEEL, 1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList(ChatColor.AQUA + "This Costs £800"));
            i.setItemMeta(im);
            return i;
        }
    
        private ItemStack Ultra(String name)
        {
            ItemStack i = new ItemStack(Material.TNT, 1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList(ChatColor.AQUA + "This Is Must Be Bought On The Online Store"));
            i.setItemMeta(im);
            return i;
        }
    
        public void show(Player p)
        {
            p.openInventory(inv);
        }
    
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e)
        {
            Player player = (Player) e.getWhoClicked();
            if (!e.getInventory().getName().equalsIgnoreCase(inv.getName()))
                return;
            if (e.getCurrentItem().getItemMeta() == null)
                return;
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Basic Cannon"))
            {
                e.setCancelled(true);
                if (e.getWhoClicked().hasPermission("dcannon.BasicCannon"))
                {
                    EconomyResponse r = econ.withdrawPlayer((Player) e.getWhoClicked(), 200);
                    if (r.transactionSuccess())
                    {
                        // spawn Structure
                        e.getWhoClicked().closeInventory();
                    } else
                        e.getWhoClicked().sendMessage(ChatColor.RED + "An Error Occured! Maybe You Do Not Have Enough Money!");
                } else
                    e.getWhoClicked().sendMessage(ChatColor.RED + "You Do Not Have Permission!");
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Super Cannon"))
            {
                e.setCancelled(true);
                if (e.getWhoClicked().hasPermission("dcannon.SuperCannon"))
                {
                    EconomyResponse r = econ.withdrawPlayer((Player) e.getWhoClicked(), 800);
                    if (r.transactionSuccess())
                    {
                        // spawn Structure
                        e.getWhoClicked().closeInventory();
                    } else
                        e.getWhoClicked().sendMessage(ChatColor.RED + "An Error Occured! Maybe You Do Not Have Enough Money!");
                } else
                    e.getWhoClicked().sendMessage(ChatColor.RED + "You Do Not Have Permission!");
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Ultra Cannon"))
            {
                e.setCancelled(true);
                if (e.getWhoClicked().hasPermission("dcannon.UltraCannon"))
                {
                    EconomyResponse r = econ.withdrawPlayer(player, 1000);
                    if (r.transactionSuccess())
                    {
                        // spawn Structure
                        e.getWhoClicked().closeInventory();
                    } else
                        e.getWhoClicked().sendMessage(ChatColor.RED + "An Error Occured! Maybe You Do Not Have Enough Money!");
                } else
                    e.getWhoClicked().sendMessage(ChatColor.RED + "You Do Not Have Permission!");
            }
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args)
        {
            if (cmd.getName().equalsIgnoreCase("Cannon"))
            {
                if (sender instanceof Player)
                {
                    Player player = (Player) sender;
                    player.openInventory(inv);
                }
            }
            return true;
        }
    }
    That Is My CommandClass
    MainClass:
    Code:
    package me.VintecHD.Cannon;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.RegisteredServiceProvider;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import me.VintecHD.Cannon.Command.cannonCommand;
    import net.milkbowl.vault.economy.Economy;
    
    public class Main extends JavaPlugin
    {
        public static Economy econ = null;
        private static final Logger log = Logger.getLogger("Minecraft");
    
        public void onEnable()
        {
            if (!setupEconomy() )
            {
                log.severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
                getServer().getPluginManager().disablePlugin(this);
                return;
            }
            Bukkit.getLogger().info("This Plugin Has Been Enabled!");
            this.getCommand("Cannon").setExecutor(new cannonCommand(this));
        }
    
        public void onDisable()
        {
            Bukkit.getLogger().info("This Plugin Has Been Disabled!");
        }
      
    
        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;
        }
    
    }
    
    Thanks For Your Help
     
  2. Offline

    DoggyCode™

    java.lang.NullPointerException
    onInventoryClick(cannonCommand.java:93)
    EconomyResponse r = econ.withdrawPlayer((Player) e.getWhoClicked(),200);

    "NullPointerException is a RuntimeException . In Java, a special null can be assigned to an object reference. NullPointerException is thrown when an application attempts to use an object reference, having the null value. These include: Calling an instance method on the object referred by a null reference." -Wikipedia: https://en.wikibooks.org/wiki/Java_Programming/Preventing_NullPointerException.

    This means that you're trying to call an object which returns null (in this case, the player).

    After checking the "econ.withdrawPlayer" method, I see that the "player" represents a String, and no a Player Object:
    Code:
    public TransactionResult subtract(String player,double amount){
      EconomyResponse resp=economy.withdrawPlayer(player,amount);
    }
    This means probably that you must specify the Player's name (which is a String), and not the actual (Player)object.

    You would probably have to use:
    Code:
    EconomyResponse r = econ.withdrawPlayer((Player) e.getWhoClicked().getName(),200.0);
    Thumbs up if this helped you!
     
  3. Offline

    Tvullnet

    thanks but i get a error saying 'Cannot cast from String to Player'
     
  4. Offline

    DoggyCode™

    Then it has probably changed. Let me look into it.

    EDIT:
    I just created this: http://hashb.in/#JYWwDg9gTgLgBAOwKY...YLgAAmSTJNQABWJbqqVcjHKo2zE2WuiyMLBH4xralKSAA. (I know the link is looong.. However, it's the source). This works for me, make sure you have initialized the Vault correctly. Check my onEnable method and copy it.
     
    Last edited: Nov 22, 2015
  5. Offline

    Zombie_Striker

  6. Offline

    Xerox262

    I wonder why you're getting null pointers...
    Code:
    public static Economy econ=null;
    Real mystery if you ask me...
     
  7. Offline

    Tvullnet

    Lol so how do i fix it?
     
  8. Offline

    Xerox262

    Well since it's static in your main you can do Main.econ, however you should remove the static modifier and make it private, then share it between classes.
     
  9. Offline

    Zombie_Striker

    Make it equals something?
     
  10. Offline

    Tvullnet

    ok

    THANKS ALOT! :) Solved My Problem

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

Share This Page