call a method from a different class

Discussion in 'Plugin Development' started by thechrisanator, Nov 26, 2018.

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

    thechrisanator

    it's when I call main.getCooldown(player.getUniqueId())
     
  2. Offline

    timtower Administrator Administrator Moderator

    Is that line 60?
     
  3. Offline

    thechrisanator

    @timtower
    long timeleft = System.currentTimeMillis() - main.getCooldown(player.getUniqueId());
     
  4. Offline

    timtower Administrator Administrator Moderator

    Please post the full class.
     
  5. Offline

    thechrisanator

    @timtower

    Code:
        public void onInventoryClick(InventoryClickEvent event) {
           
            int cooldowntimer = 30; //(30 minutes)
           
            Player player = (Player) event.getWhoClicked();
            if (event.getClickedInventory() != null) {
                if (event.getClickedInventory().getTitle().equals(ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange")) {
                    if (player.getItemOnCursor().getType() == Material.AIR) {
                        ItemStack clickstack = event.getCurrentItem();
                        if (clickstack != null) {
                            if (clickstack.getItemMeta().hasDisplayName()) {
                                if (clickstack.getItemMeta().getDisplayName().equals(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request")) {
                                    long timeleft = System.currentTimeMillis() - main.getCooldown(player.getUniqueId());
                                    if (timeleft > cooldowntimer * 60000) {
                                        Inventory crinv = createrequest.createInventory();
                                        player.openInventory(crinv);
                                    } else {
                                        player.sendMessage(main.prefix + ChatColor.RED + "You must wait before making another request!\nTime left:" + Integer.toString((int)(timeleft / 1000)) + 's');
                                    }
                                }
                            }
                        }
                    }
                    event.setCancelled(true);
                }
            }
        }
     
  6. Offline

    timtower Administrator Administrator Moderator

  7. Offline

    KarimAKL

  8. Offline

    thechrisanator

    @timtower

    Code:
    package me.Darkolythe.GrandMinechange;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    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;
    
    public class Menu implements Listener {
       
        private GrandMinechange main = GrandMinechange.getInstance();
        public CreateRequest createrequest = new CreateRequest();
       
        public Inventory createInventory() {
           
            Inventory menuinv = Bukkit.getServer().createInventory(null, 54, ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange");
           
            ItemStack menustack = new ItemStack(Material.ARROW, 1);
            ItemMeta menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.GREEN + "Next Page"); //create the next page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(51, menustack);
            menustack = new ItemStack(Material.ARROW, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.RED + "Previous Page"); //create the previous page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(47, menustack);
            menustack = new ItemStack(Material.SUNFLOWER, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request"); //create the create request itemstack
            menustack.setItemMeta(menumeta);
            menustack.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
            menuinv.setItem(49, menustack);
    
            return menuinv;
           
        }
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
           
            int cooldowntimer = 30; //(30 minutes)
           
            Player player = (Player) event.getWhoClicked();
            if (event.getClickedInventory() != null) {
                if (event.getClickedInventory().getTitle().equals(ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange")) {
                    if (player.getItemOnCursor().getType() == Material.AIR) {
                        ItemStack clickstack = event.getCurrentItem();
                        if (clickstack != null) {
                            if (clickstack.getItemMeta().hasDisplayName()) {
                                if (clickstack.getItemMeta().getDisplayName().equals(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request")) {
                                    long timeleft = System.currentTimeMillis() - main.getCooldown(player.getUniqueId());
                                    if (timeleft > cooldowntimer * 60000) {
                                        Inventory crinv = createrequest.createInventory();
                                        player.openInventory(crinv);
                                    } else {
                                        player.sendMessage(main.prefix + ChatColor.RED + "You must wait before making another request!\nTime left:" + Integer.toString((int)(timeleft / 1000)) + 's');
                                    }
                                }
                            }
                        }
                    }
                    event.setCancelled(true);
                }
            }
        }
       
    }
    
     
  9. Offline

    timtower Administrator Administrator Moderator

    @thechrisanator Use the constructor to pass the main instance to the Menu class instead of using statics.
     
  10. Offline

    thechrisanator

    so I just remove the "public" in public GrandMinechange main = GrandMinechange.getInstance();

    or am I removing the static in private static GrandMinechange plugin;

    @timtower
     
  11. Offline

    timtower Administrator Administrator Moderator

    @thechrisanator You change the public in private, you remove the GrandMinechange.getInstance()
    You never need static in Bukkit.
    I told you to use constructors:
     
  12. Offline

    thechrisanator

    so... this?
    @timtower
    Code:
    public class Menu implements Listener {
       
        public GrandMinechange main;
        public CreateRequest createrequest = new CreateRequest();
       
        public Inventory createInventory() {
           
            Inventory menuinv = Bukkit.getServer().createInventory(null, 54, ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange");
           
            ItemStack menustack = new ItemStack(Material.ARROW, 1);
            ItemMeta menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.GREEN + "Next Page"); //create the next page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(51, menustack);
            menustack = new ItemStack(Material.ARROW, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.RED + "Previous Page"); //create the previous page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(47, menustack);
            menustack = new ItemStack(Material.SUNFLOWER, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request"); //create the create request itemstack
            menustack.setItemMeta(menumeta);
            menustack.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
            menuinv.setItem(49, menustack);
    
            return menuinv;
           
        }
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
           
            int cooldowntimer = 30; //(30 minutes)
           
            Player player = (Player) event.getWhoClicked();
            if (event.getClickedInventory() != null) {
                if (event.getClickedInventory().getTitle().equals(ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange")) {
                    if (player.getItemOnCursor().getType() == Material.AIR) {
                        ItemStack clickstack = event.getCurrentItem();
                        if (clickstack != null) {
                            if (clickstack.getItemMeta().hasDisplayName()) {
                                if (clickstack.getItemMeta().getDisplayName().equals(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request")) {
                                    long timeleft = System.currentTimeMillis() - main.getCooldown(player.getUniqueId());
                                    if (timeleft > cooldowntimer * 60000) {
                                        Inventory crinv = createrequest.createInventory();
                                        player.openInventory(crinv);
                                    } else {
                                        player.sendMessage(main.prefix + ChatColor.RED + "You must wait before making another request!\nTime left:" + Integer.toString((int)(timeleft / 1000)) + 's');
                                    }
                                }
                            }
                        }
                    }
                    event.setCancelled(true);
                }
            }
        }
       
    }
    
     
  13. Offline

    timtower Administrator Administrator Moderator

  14. Offline

    thechrisanator

    well I thought it was "public GrandMinechange main"
    but I guess not,
    so I changed it to "GrandMinechange main = new GrandMinechange();" but that doesnt seem to be working.
    I'm looking at the link you sent a few days ago, and my attempt at a constructor isnt so good
     
  15. Offline

    timtower Administrator Administrator Moderator

    @thechrisanator
    Code:
    public Menu(GrandMinechange main){
    this.plugin = main;
    }
    That is your entire constructor.

    The first line is the declaration.
     
  16. Offline

    thechrisanator

    @timtower
    and that goes in Menu() or main?
     
  17. Offline

    timtower Administrator Administrator Moderator

  18. Offline

    thechrisanator

    okay! so I looked at some tutorials,
    and I think this seemed to have worked.
    I just needed to change the name 'plugin' to 'main' so that it was properly called.
    I also had to initialize 'main'.

    does this look right? it runs fine, but is there something I missed?

    menu:

    Code:
    public class Menu implements Listener {
       
        public GrandMinechange main; //initialize the main variable as Type main class
        public Menu(GrandMinechange plugin) {
            this.main = plugin; //set it equal to an instance of main
        }
        public CreateRequest createrequest = new CreateRequest();
       
        public Inventory createInventory() {
           
            Inventory menuinv = Bukkit.getServer().createInventory(null, 54, ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange");
           
            ItemStack menustack = new ItemStack(Material.ARROW, 1);
            ItemMeta menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.GREEN + "Next Page"); //create the next page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(51, menustack);
            menustack = new ItemStack(Material.ARROW, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.RED + "Previous Page"); //create the previous page itemstack
            menustack.setItemMeta(menumeta);
            menuinv.setItem(47, menustack);
            menustack = new ItemStack(Material.SUNFLOWER, 1);
            menumeta = menustack.getItemMeta();
            menumeta.setUnbreakable(true);
            menumeta.setDisplayName(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request"); //create the create request itemstack
            menustack.setItemMeta(menumeta);
            menustack.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
            menuinv.setItem(49, menustack);
    
            return menuinv;
           
        }
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
           
            int cooldowntimer = 30; //(30 minutes)
           
            Player player = (Player) event.getWhoClicked();
            if (event.getClickedInventory() != null) {
                if (event.getClickedInventory().getTitle().equals(ChatColor.GREEN.toString() + ChatColor.BOLD.toString() + "The Grand Minechange")) {
                    if (player.getItemOnCursor().getType() == Material.AIR) {
                        ItemStack clickstack = event.getCurrentItem();
                        if (clickstack != null) {
                            if (clickstack.getItemMeta().hasDisplayName()) {
                                if (clickstack.getItemMeta().getDisplayName().equals(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString() + "Create Request")) {
                                    long timeleft = System.currentTimeMillis() - main.getCooldown(player.getUniqueId());
                                    if (timeleft > cooldowntimer * 60000) {
                                        Inventory crinv = createrequest.createInventory();
                                        player.openInventory(crinv);
                                    } else {
                                        player.sendMessage(main.prefix + ChatColor.RED + "You must wait before making another request!\nTime left:" + Integer.toString((int)(timeleft / 1000)) + 's');
                                    }
                                }
                            }
                        }
                    }
                    event.setCancelled(true);
                }
            }
        }
       
    }
    
    main:

    Code:
    public class GrandMinechange extends JavaPlugin {
    
        public String prefix = new String(ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + "[" + ChatColor.BLUE.toString() + "Minechange" + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + "] ");
        public HashMap<UUID, Long> cooldown = new HashMap<UUID, Long>();
       
        public static GrandMinechange plugin;
        public Menu menu = new Menu(this); //get the Menu class
        public CreateRequest createrequest = new CreateRequest();
       
        @Override
        public void onEnable() {
            menu = new Menu(this); //get other classes
            plugin = this;
            getServer().getPluginManager().registerEvents(menu, this); //register events from other classes
            getServer().getPluginManager().registerEvents(createrequest, this);
            getCommand("minechange").setExecutor(new RequestCommand());
            System.out.println(prefix + ChatColor.GREEN + "The Grand Minechange Enabled!");
        }
       
        @Override
        public void onDisable() {
            plugin = null;
            System.out.println(prefix + ChatColor.RED + "The Grand Minechange Disabled!");
        }
       
       
       
        public long getCooldown(UUID uuid) {
            System.out.println("x");
            if (cooldown.containsKey(uuid)) {
                return System.currentTimeMillis() - cooldown.get(uuid);
            } else {
                cooldown.put(uuid, System.currentTimeMillis() + (30 * 60000));
                return System.currentTimeMillis() - cooldown.get(uuid);
            }
        }
       
        public static GrandMinechange getInstance() {
            return plugin;
        }
       
    }
    
    what I think I needed to do, was initialize a variable of Type GrandMinechange, and pass it an instance through the constructor.

    @timtower
     
    Last edited: Nov 29, 2018
Thread Status:
Not open for further replies.

Share This Page