Accessing variables and config from other classes

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

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

    thechrisanator

    As the titles says, I'm having trouble accessing the config file and variables from other files.

    I've looked on many threads, but I can't seem to get it to work.

    Here's my code

    main:
    Code:
    public class Multitool extends JavaPlugin implements Listener {
       
        private static Plugin plugin;
       
        public void onEnable() {///////////////////////////////////////////////////////////////////////////////////////////////Enable Disable
            getServer().getPluginManager().registerEvents(this, this);
            plugin = this;
            getCommand("multitool").setExecutor(this);
            System.out.println("Darkolythe Multitool enabled!");
        }
       
        public void onDisable() {
            plugin = null;
            System.out.println("Darkolythe Multitool disabled!");
        }
       
        //register  events in all classes instead of one at a time
        public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
            for (Listener listener : listeners) {
                Bukkit.getServer().getPluginManager().registerEvents(listener,  plugin);
            }
        }
       
        //Access the plugin from other classes
        public static Plugin getPlugin() {
            return plugin;
        }

    SaveLoadInventory:
    Code:
    package me.Darkolythe.Multitool;
    
    import java.util.HashMap;
    import java.util.UUID;
    import java.util.Map.Entry;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.ConfigurationSection;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryType;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class SaveLoadInventory implements Listener {
       
       
       
        private HashMap<UUID, Inventory> toolinv = new HashMap<UUID, Inventory>();
           
       
       
        public void onEnable() {///////////////////////////////////////////////////////////////////////////////////////////////Enable Disable
            getServer().getPluginManager().registerEvents(this, this);
        }
       
        public void onDisable() {
           
            for (Entry<UUID, Inventory> entry : toolinv.entrySet()) {
                if (!getConfig().contains("toolinv." + entry.getKey())) {
                    getConfig().createSection("toolinv." + entry.getKey());
                }
                char c = 'a';
                for (ItemStack itemstack : entry.getValue()) {
                    if (itemstack != null) {
                        saveItem(getConfig().createSection("toolinv." + entry.getKey() + "." + c++), itemstack);
                    }
                }
                saveConfig();
            }
        }
    
       
       
        @EventHandler//////////////////////////////////////////////////////////////////////////////////////////////////////////Player leave and join
        public void onPlayerJoin(PlayerJoinEvent event) {
           
            Inventory inv = Bukkit.getServer().createInventory(event.getPlayer(), InventoryType.HOPPER, "Multitools");
           
            if (getConfig().contains("toolinv." + event.getPlayer().getUniqueId())) {
                for (String item : getConfig().getConfigurationSection("toolinv." + event.getPlayer().getUniqueId()).getKeys(false)) {
                    inv.addItem(loadItem(getConfig().getConfigurationSection("toolinv." + event.getPlayer().getUniqueId() + "." + item)));
                }
            }
            toolinv.put(event.getPlayer().getUniqueId(), inv);
        }
       
        @EventHandler
        public void onPlayerLeave(PlayerQuitEvent event) {
           
            if (!getConfig().contains("toolinv." + event.getPlayer().getUniqueId())) {
                getConfig().createSection("toolinv." + event.getPlayer().getUniqueId());
            }
           
            getConfig().set("toolinv." + event.getPlayer().getUniqueId(), null);
           
            char c = 'a';
            for (ItemStack itemstack : toolinv.get(event.getPlayer().getUniqueId())) {
                if (itemstack != null) {
                    saveItem(getConfig().createSection("toolinv." + event.getPlayer().getUniqueId() + "." + c++), itemstack);
                }
            }
            saveConfig();
        }
       
       
       
        private void saveItem(ConfigurationSection section, ItemStack itemstack) {/////////////////////////////////////////////Save Load Inv
            section.set("itemstack", itemstack);
        }
       
        private ItemStack loadItem(ConfigurationSection section) {
            ItemStack itemstack = new ItemStack(section.getItemStack("itemstack"));
           
            return itemstack;
        }
       
    }
    
    command file: ( I want to give toolinv to SaveLoadInventory and command file)

    Code:
    public class MultitoolCommand implements CommandExecutor {
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "The console cannot use a multitool!");
            }
           
            Player player = (Player) sender;
            if (player.hasPermission("Multitool.command")) {
                if (cmd.getName().equalsIgnoreCase("Multitool")) {
                    if (args.length == 1) {
                        if (args[0].equalsIgnoreCase("Open")) {
                            player.openInventory(toolinv.get(player.getUniqueId()));
                        } else if (args[1].equalsIgnoreCase("toggle")) {
                           
                        } else {
                            sender.sendMessage(ChatColor.RED + "Invalid Arguments: Toggle, Open");
                        }
                    } else {
                        sender.sendMessage(ChatColor.RED + "Invalid Arguments: Toggle, Open");
                    }
                }
            }
            return true;
        }
       
    }
    
     
  2. Offline

    KarimAKL

    @thechrisanator Maybe something like this would work.
    SaveLoadInventory class:
    Code:Java
    1. public HashMap<UUID, Inventory> getToolInv() {
    2. return toolinv;
    3. }

    Main class:
    Code:Java
    1. private SaveLoadInventory saveloadinventory;
    2.  
    3. public void onEnable() {
    4. saveloadinventory = new SaveLoadInventory();
    5. }
    6.  
    7. public SaveLoadInventory getSaveLoadInventory() {
    8. return saveloadinventory;
    9. }

    Command class:
    Code:Java
    1. private HashMap<UUID, Inventory> toolinv = Multitool.getPlugin().getSaveLoadInventory().getToolInv();
     
  3. Offline

    thechrisanator

  4. Offline

    KarimAKL

    @thechrisanator Try changing the type of getPlugin in your main class from 'Plugin' to 'Multitool'
     
Thread Status:
Not open for further replies.

Share This Page