Problem With Linking Config To Plugin.

Discussion in 'Plugin Development' started by Albkad, Feb 22, 2017.

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

    Albkad

    So I Have Made A Plugin So I Wanted To Add More FreeDom For The Players So They Can Change The Stuff ThemSelfs But I Have Run Into A Problem And I Cant Seem To Find the Problem. It Is Also Telling Me That My Plugin Is OutDated. AnyOne That Can Help?
    Code:
    package me.albkad.main;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Random;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.ClickType;
    import org.bukkit.event.inventory.DragType;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryDragEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.Chest;
    import org.bukkit.plugin.Plugin;
    
    import net.milkbowl.vault.economy.EconomyResponse;
    import ru.tehkode.permissions.PermissionUser;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    
    import org.bukkit.ChatColor;
    
    public class Menu implements Listener {
        private Main plugin;
        private ItemStack y;
        private ItemStack e;
        private ItemStack c;
        private Inventory inv;
       
       
        public Menu(Plugin p) {
            inv = Bukkit.getServer().createInventory(null, 54, "BuyIngame");
           
            Bukkit.getServer().getPluginManager().registerEvents(this, p);
           
            if (plugin.getConfig().getBoolean("ItemStack1." + ".Enabled") == true) {
                c = createItem1(plugin.getConfig().getString("Item1." + ".ItemName"));
                return;
            }
            if (plugin.getConfig().getBoolean("ItemStack2." + ".Enabled") == true) {
                y = createItem(plugin.getConfig().getString("Item2." + ".ItemName"));
                return;
            }
            if (plugin.getConfig().getBoolean("ItemStack3." + ".Enabled") == true) {
                e = createItem2(plugin.getConfig().getString("Item3." + ".ItemName"));
                return;
            }
            if (plugin.getConfig().getBoolean("ItemStack2." + ".Enabled") == true) {
                inv.setItem(plugin.getConfig().getInt("Item2." + ".ItemSlot"), y);
                return;
            }
            if (plugin.getConfig().getBoolean("ItemStack3." + ".Enabled") == true) {
                inv.setItem(plugin.getConfig().getInt("Item3." + ".ItemSlot"), e);
                return;
            }
            if (plugin.getConfig().getBoolean("ItemStack1." + ".Enabled") == true) {
                inv.setItem(plugin.getConfig().getInt("Item1." + ".ItemSlot"), c);
                return;
            }
        }
       
    
    
        private ItemStack createItem1(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + plugin.getConfig().getInt("Item1." + ".Cost")));
            i.setItemMeta(im);
            return i;
           
        }
        private ItemStack createItem(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + plugin.getConfig().getInt("Item2." + ".Cost")));
            i.setItemMeta(im);
            return i;
           
        }
        private ItemStack createItem2(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + plugin.getConfig().getInt("Item3." + ".Cost")));
            i.setItemMeta(im);
            return i;
           
        }
       
           
       
        public void show(Player p) {
            p.openInventory(inv);
        }
       
       
       
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
            if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
            if (e.getCurrentItem() == null) return;
            if (e.getCurrentItem().getItemMeta() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(plugin.getConfig().getString("Item1." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = plugin.econ.withdrawPlayer(p, plugin.getConfig().getInt("Item1." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), plugin.getConfig().getString("Item1." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(plugin.getConfig().getString("Item2." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = plugin.econ.withdrawPlayer(p, plugin.getConfig().getInt("Item2." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), plugin.getConfig().getString("Item2." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(plugin.getConfig().getString("Item3." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = plugin.econ.withdrawPlayer(p, plugin.getConfig().getInt("Item3." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), plugin.getConfig().getString("Item3." + ".Command"));
                    p.closeInventory();
                   
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
        }
    
       
       
    }
    
    Console: https://gyazo.com/b4a8e0bed46f0e2d743e9a093abd1907
    Config: https://gyazo.com/02d2fad0bc791a4a008521703620361f
     
  2. Offline

    Zombie_Striker

    @Albkad
    Captain Capital, we meet again.

    Folow Java Naming Conventions: You should have descriptive variable names

    1. Plugin is never used outside of the constructor, which has an instance of the main class. Remove that field.
    2. Plugin is never initialized. That is why you are getting the error.
    3. Replace all "plugin" variables with "p".


    This is almost an exact duplicate of the other two lines. Delete these createItem1 and createItem2 and change the crateItem's code so it does the same thing as these other methods.

    Again, this is almost the exact same code as above. Delete two of the if statements and convert the third one so that it will do the same thing as the other two.
     
  3. Offline

    Albkad

    @Zombie_Striker But The Thing Is I Now Moved Everything To My Main To Test And It Still Doesnt Work. It Seems Like There Is A Problem Opening The Gui. The ItemStacks Are Just So People Can Make More Than 1 Item In The Gui.
    Console: https://gyazo.com/6b9d63307869454806bb52b81f6264bf
    Code:
    package me.albkad.main;
    
    import java.util.Arrays;
    
    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.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.material.Chest;
    import org.bukkit.plugin.RegisteredServiceProvider;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import net.milkbowl.vault.economy.Economy;
    import net.milkbowl.vault.economy.EconomyResponse;
    
    
    public class Main extends JavaPlugin implements Listener {
        public static Economy econ = null;
    
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            getConfig().options().copyDefaults(true);
            saveConfig();
            if (!setupEconomy() ) {
                getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
                getServer().getPluginManager().disablePlugin(this);
                return;
            }
    
        }
      
        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 boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("ingbuy")) {
                p.getPlayer().openInventory(inv);
            }
          
          
          
          
            return true;
        }
        private ItemStack y;
        private ItemStack e;
        private ItemStack c;
        private Inventory inv;
      
      
        public void Menu() {
            inv = Bukkit.getServer().createInventory(null, 54, "BuyIngame");
          
          
                c = createItem1(getConfig().getString("Item1." + ".ItemName"));
                y = createItem3(getConfig().getString("Item3." + ".ItemName"));
                e = createItem2(getConfig().getString("Item2." + ".ItemName"));
                inv.setItem(getConfig().getInt("Item2." + ".ItemSlot"), y);
                inv.setItem(getConfig().getInt("Item3." + ".ItemSlot"), e);
                inv.setItem(getConfig().getInt("Item1." + ".ItemSlot"), c);
        }
      
        private ItemStack createItem1(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item2." + ".Cost")));
            i.setItemMeta(im);
            return i;
          
        }
        private ItemStack createItem2(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item2." + ".Cost")));
            i.setItemMeta(im);
            return i;
          
        }
        private ItemStack createItem3(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item3." + ".Cost")));
            i.setItemMeta(im);
            return i;
          
        }
      
      
          
      
      
      
      
      
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
          
            if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
            if (e.getCurrentItem() == null) return;
            if (e.getCurrentItem().getItemMeta() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item1." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item1." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item1." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item2." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item2." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item2." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item3." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item3." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item3." + ".Command"));
                    p.closeInventory();
                  
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
        }
    
    }
    
     
  4. Offline

    Zombie_Striker

    In your class, you are still referencing the other class object that you most likely deleted. Remove all references to Menu.
     
  5. Offline

    Albkad

  6. Offline

    Zombie_Striker

    @Albkad
    Either the inventory or the player is null on line 57. Make sure both values are not null.
     
  7. Offline

    Albkad

    @Zombie_Striker I know how to check if the player is null but in this case how to i check if the inventory is null?
     
  8. Offline

    Zombie_Striker

    @Albkad
    The exact same way.
    Code:
    If ( Inventory == null)System.out.println("Inventory is null")
     
  9. Offline

    Albkad

    Now It Isnt Giving Me An Error. But It Isnt Showing Up The Gui Either. @Zombie_Striker It Says The Inventory Is Null.
    Code:
    package me.albkad.main;
    
    import java.awt.Menu;
    import java.util.Arrays;
    
    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.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.material.Chest;
    import org.bukkit.plugin.RegisteredServiceProvider;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import net.milkbowl.vault.economy.Economy;
    import net.milkbowl.vault.economy.EconomyResponse;
    
    
    public class Main extends JavaPlugin implements Listener {
        public static Economy econ = null;
    
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            getConfig().options().copyDefaults(true);
            saveConfig();
            if (!setupEconomy() ) {
                getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
                getServer().getPluginManager().disablePlugin(this);
                return;
            }
    
        }
     
        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 boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("ingbuy")) {
                if (p.getPlayer() == null) {
                    return true;
                }
                if (p.getPlayer().getInventory() == null) {
                    return true;
                }
                if (inv == null) {
                    return true;
                }
                p.getPlayer().openInventory(inv);
            }
         
         
         
         
            return true;
        }
        private ItemStack y;
        private ItemStack e;
        private ItemStack c;
        private Inventory inv;
     
     
        public void Menu() {
            inv = Bukkit.getServer().createInventory(null, 54, "BuyIngame");
         
         
                c = createItem1(getConfig().getString("Item1." + ".ItemName"));
                y = createItem3(getConfig().getString("Item3." + ".ItemName"));
                e = createItem2(getConfig().getString("Item2." + ".ItemName"));
                inv.setItem(getConfig().getInt("Item2." + ".ItemSlot"), y);
                inv.setItem(getConfig().getInt("Item3." + ".ItemSlot"), e);
                inv.setItem(getConfig().getInt("Item1." + ".ItemSlot"), c);
        }
     
        private ItemStack createItem1(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item2." + ".Cost")));
            i.setItemMeta(im);
            return i;
         
        }
        private ItemStack createItem2(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item2." + ".Cost")));
            i.setItemMeta(im);
            return i;
         
        }
        private ItemStack createItem3(String name) {
            ItemStack i = new Chest().toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList("Cost $" + getConfig().getInt("Item3." + ".Cost")));
            i.setItemMeta(im);
            return i;
         
        }
     
     
         
     
     
     
     
     
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
         
            if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
            if (e.getCurrentItem() == null) return;
            if (e.getCurrentItem().getItemMeta() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName() == null) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item1." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item1." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item1." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item2." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item2." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item2." + ".Command"));
                    p.closeInventory();
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains(getConfig().getString("Item3." + ".ItemName"))) {
                e.setCancelled(true);
                Player p = (Player) e.getWhoClicked();
                EconomyResponse r = econ.withdrawPlayer(p, getConfig().getInt("Item3." + ".Cost"));
                if (r.transactionSuccess()) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item3." + ".Command"));
                    p.closeInventory();
                 
                } else {
                    p.sendMessage(ChatColor.RED + "ERROR: Player Dont Have Enough Money!");
                    p.closeInventory();
                }
            }
        }
    
    }
     
  10. Offline

    Zombie_Striker

    Check before casting. What if a plugin sends a command? What if it is another plugin, or a commandblock? Those things are not players, so that will break this method. Check that sender is a player beforecasting.

    This will never happen. p.getPlayer returns p, so this would either throw an NPE or return true. Remove this.

    This will never be true. The inventory cannot be null. remove this line.

    This will always be true. You never initialize inv because you never call "Main". To fix this, in the onEnable, call "Main()"
     
  11. Offline

    Albkad

    @Zombie_Striker This Problem Is Now Solved. But I Need To Find A Way To Put Command Into Config And Thén Use The
    Code:
                   Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getConfig().getString("Item1." + ".Command"));
    Or Another Method To Run A Command Through Console.
    Because I Want To Make Them Able To Do Like %player% As In The Player That Clicked.
     
  12. Offline

    Zombie_Striker

    @Albkad
    Use this to replace %player% wit ht he player's name
    Code:
    String#replace("%player%", PLAYER_NAME)
     
  13. Offline

    Albkad

    String#replace("%player%", PLAYER_NAME) Is Not Working for me. Where Do I Put This?
    @Zombie_Striker
     
  14. Offline

    Zombie_Striker

    @Albkad
    "String" is the instance of the string (the command). Replace that with your command.

    Put it on the same line where you dispatch the command.
     
Thread Status:
Not open for further replies.

Share This Page