Solved Inventory Gui won't work...

Discussion in 'Plugin Development' started by BeastCraft3, Dec 20, 2014.

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

    BeastCraft3

    Hello, I'm making a "/shop" command which display a GUI, I don't know what i've done wrong. the gui won't show up when they type the command. this is my code:

    Code:
    package com.BeastCraft3.Axiomz;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    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 pub.xyplo.economy.api.XyploEconomyAPI;
    
    public class ShopGUI
      implements Listener
    {
      Main main;
      public static String shopguiTitle1 = ChatColor.LIGHT_PURPLE + "Shop Menu - Page 1";
    
      public ShopGUI(Main instance)
      {
        this.main = instance;
      }
    
      public static void openGUI(Player p)
      {
        Inventory shopgui = Bukkit.createInventory(null, 54, shopguiTitle1);
    
        shopgui.setItem(3, ItemsUtil.msr);
      }
    
      @SuppressWarnings("deprecation")
    @EventHandler
      public void onInventoryClick(InventoryClickEvent e)
      {
        Player p = (Player)e.getWhoClicked();
        int slot = e.getSlot();
    
        if (p.getOpenInventory().getTitle().equalsIgnoreCase(shopguiTitle1))
        {
          if ((e.getCurrentItem() == null) || (e.getCurrentItem().getType() == Material.AIR) || (!e.getCurrentItem().hasItemMeta()))
          {
            e.setCancelled(true);
          }
          else {
                switch(e.getCurrentItem().getType())
                {
               
                default:
                    break;
                    }
               }
    
          e.setCancelled(true);
    
          if (p.getOpenInventory().getTitle().equalsIgnoreCase(shopguiTitle1))
          {
            if (slot == 3)
            {
              if (e.isLeftClick())
              {
                if (XyploEconomyAPI.getMoney(Bukkit.getConsoleSender(), p.getName()) >= 50)
                {
                  XyploEconomyAPI.takePoints(Bukkit.getConsoleSender(), p.getName(), 50);
                  p.getInventory().addItem(new ItemStack[] {
                          new ItemStack(Material.IRON_AXE) });
                  p.sendMessage(ChatColor.GRAY + "Enjoy your new " + ChatColor.DARK_AQUA + "MSR" + ChatColor.GRAY + ".");
                  } else {
                  p.sendMessage(ChatColor.RED + "Not enough points!");
                }
              }
              if (e.isRightClick())
              {
                if (p.getInventory().contains(new ItemStack(Material.getMaterial(258), 1)))
                {
                  XyploEconomyAPI.givePoints(Bukkit.getConsoleSender(), p.getName(), 25);
                  p.getInventory().removeItem(new ItemStack[] { new ItemStack(Material.getMaterial(258), 1) });
                  p.sendMessage(ChatColor.GRAY + "You sold your " + ChatColor.DARK_AQUA + "MSR" + ChatColor.GRAY + "."); } else {
                  p.sendMessage(ChatColor.RED + "Don't have the item!");
                }
              }
            }
          }
        }
      }
    }
     
  2. Offline

    PreFiXAUT

    @BeastCraft3 Uhm...you posted the Code of your Listener Class, and not of your CommandExecutor/CommandHandler Class.
     
  3. Offline

    TheDiamondGuy

    Are you registering the events from the main class via:
    Code:
    Bukkit.getServer().getPluginManager().registerEvents(new CLASS(), this);
     
  4. Offline

    BeastCraft3

    ok I added the command in my main class, like this:

    Code:
    package com.BeastCraft3.Axiomz;
    
    import java.util.UUID;
    
    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.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    
    import pub.xyplo.economy.api.XyploEconomyAPI;
    
    public class Main extends JavaPlugin
      implements Listener
    {
      public static Main plugin;
    
      public void onEnable()
      {
        plugin = this;
    
        getConfig().options().copyDefaults(true);
        saveConfig();
    
        getLogger().info("Scoreboard has been enabled!");
    
        getServer().getPluginManager().registerEvents(this, this);
        getServer().getPluginManager().registerEvents(new DeathListener(this), this);
        getServer().getPluginManager().registerEvents(new ShopGUI(this), this);
    
        ItemsUtil.registerItems();
      }
    
      public void onDisable()
      {
        plugin = null;
    
        getLogger().info("Scoreboard has been disabled!");
      }
    
      @EventHandler
      public void onJoin(PlayerJoinEvent e)
      {
        Player p = e.getPlayer();
        try
        {
          UUID player = e.getPlayer().getUniqueId();
          Player target = Bukkit.getPlayer(player);
          if (!plugin.getConfig().contains(player + ".name"))
          {
            plugin.getConfig().set(player + ".name", target.getName());
            plugin.getConfig().set(player + ".kills", Integer.valueOf(0));
            plugin.getConfig().set(player + ".deaths", Integer.valueOf(0));
            plugin.getConfig().set(player + ".killstreak", Integer.valueOf(0));
            plugin.saveConfig();
          }
        } catch (Exception localException) {  }
    
        setupScoreboard(p);
      }
    
      @SuppressWarnings("deprecation")
    public static void setupScoreboard(Player p)
      {
        ScoreboardManager sm = Bukkit.getScoreboardManager();
        Scoreboard s = sm.getNewScoreboard();
        Objective o = s.registerNewObjective("dash", "dummy");
    
        o.setDisplaySlot(DisplaySlot.SIDEBAR);
        o.setDisplayName("   Scoreboard   ");
        try
        {
          Score moneyTitle = o.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Points:"));
          moneyTitle.setScore(XyploEconomyAPI.getMoney(Bukkit.getConsoleSender(), p.getName()));
    
          Score killsTitle = o.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:"));
          killsTitle.setScore(plugin.getConfig().getInt(p.getUniqueId() + ".kills"));
    
          Score deathsTitle = o.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:"));
          deathsTitle.setScore(plugin.getConfig().getInt(p.getUniqueId() + ".deaths"));
    
          Score killstreakTitle = o.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Killstreak:"));
          killstreakTitle.setScore(plugin.getConfig().getInt(p.getUniqueId() + ".killstreak"));
    
          p.setScoreboard(s);
        } catch (Exception ex) {
          System.out.println(ex);
        }
      }
    
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if(!(sender instanceof Player)) {
              sender.sendMessage("Only players can use this command");
              return true;
          }
          if(label.equalsIgnoreCase("shop")) {
              Player p = (Player) sender;
              ShopGUI.openGUI(p);
          }
        return false;
      }
    }
    
    And this is my itemUtil class:

    Code:
    package com.BeastCraft3.Axiomz;
    
    import java.util.ArrayList;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class ItemsUtil
    {
      Main main;
      public static ItemStack msr = new ItemStack(Material.IRON_AXE);
      public static ItemMeta msrMeta = msr.getItemMeta();
    
      public ItemsUtil(Main instance)
      {
        this.main = instance;
      }
    
      public static void registerItems()
      {
        msr();
      }
    
      public static void msr()
      {
        msrMeta.setDisplayName(ChatColor.GREEN + "MSR");
    
        ArrayList<String> msrLores = new ArrayList<String>();
        msrLores.add(ChatColor.YELLOW + "Price: 50");
        msrMeta.setLore(msrLores);
    
        msr.setItemMeta(msrMeta);
      }
    }
    
     
  5. Offline

    PreFiXAUT

    In your Command you don't check if it is your Command that you're checking. When you use the onCommand in your Main-Class (Class which extends JavaPlugin) then the onCommand get's triggered/fired on every Command. So check first if it is your Command and do your Stuff.

    Add Debug-Messages (System.out.println(String Message)) and keep track where your Code is right now and what it does (Print out the Data that you're working on (Player, World, Inventory, Items, etc.)). With this you can see what doesn't happen and you can check why it doesn't do, what it should -> Called Debuging.

     
  6. Offline

    BeastCraft3

    @PreFiXAUT
    Silly little me :p I forgot to "open" the inventory inside the void.
    I feel so stupid...
    This was the problem:
    Code:
    public static void openGUI(Player p)
      {
        Inventory shopgui = Bukkit.createInventory(null, 54, shopguiTitle1);
    
        shopgui.setItem(3, ItemsUtil.msr);
      
      }
    I just added this line inside the void:
    Code:
    p.openInventory(shopgui);
    Sorry for for stupidness if thats a word :p

    anyway Thanks for helping me! :D
     
  7. Offline

    teej107

Thread Status:
Not open for further replies.

Share This Page