Problems with setting location to the config

Discussion in 'Plugin Development' started by JavaNaza, Apr 14, 2018.

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

    JavaNaza

    Hey guys, I m trying to make a Minigame game but I have issue setting Team locations in a specified arena.
    My main class:
    Code:
    package me.grantis.arenas;
    
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MainClass extends JavaPlugin {
       
        private static MainClass inst;
       
        public void onEnable() {
            registerConfig();
            inst = this;
            ArenaManager.getManager().loadArenas();
           
            getCommand("create").setExecutor(new ArenaCommands());
            getCommand("remove").setExecutor(new ArenaCommands());
            getCommand("arena").setExecutor(new ArenaCommands());
           
        }
       
        public static MainClass getInst() {
            return inst;
        }
       
        public void registerConfig() {
           
            if(getConfig().isConfigurationSection("Arenas")) {
                return;
            }
           
            else {
                getConfig().createSection("Arenas");
                saveConfig();
                reloadConfig();
            }
           
        }
       
    }
    
    My Arena class:
    Code:
    package me.grantis.arenas;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    
    public class Arena {
       
        List<Player> players = new ArrayList<Player>();
       
        String name;
        private Location arenaLoc, blueSpawn, redSpawn;
       
        public Arena(String name, Location arenaLoc, Location blueSpawn, Location redSpawn) {
           
            this.name = name;
            this.arenaLoc = arenaLoc;
            this.blueSpawn = blueSpawn;
            this.redSpawn = redSpawn;
           
        }
       
        public List<Player> getPlayers() {
           
            return players;
           
        }
       
        public String getName() {
            return name;
           
        }
       
        public Location getArenaLoc() {
            return arenaLoc;
        }
       
        public Location getBlueSpawn() {
            return blueSpawn;
        }
       
        public Location getRedSpawn() {
            return redSpawn;
        }
       
        public void setBlueSpawn(Location l) {
            this.blueSpawn = l;
            MainClass.getInst().getConfig().set("Arenas." + name + ".blueSpawn", ArenaManager.getManager().serializeLoc(l));
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
        }
       
        public void setRedSpawn(Location l) {
            this.redSpawn = l;
            MainClass.getInst().getConfig().set("Arenas." + name + ".redSpawn", ArenaManager.getManager().serializeLoc(l));
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
        }
       
    }
    
    My ArenaManager class:
    Code:
    package me.grantis.arenas;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    
    
    
    
    
    public class ArenaManager {
    
        public static ArenaManager am = new ArenaManager();
        List<Arena> arenas = new ArrayList<Arena>();
    
        public ArenaManager() {
    
    
        }
    
        public static ArenaManager getManager(){
            return am;
        }
    
        public Arena getArena(String name) {
    
            for(Arena a : arenas) {
    
                if(a.getName() == name) {
    
                    return a;
    
                }
            }
            return null;
        }
    
        public Arena createArena(String name, Location arenaLoc, Location blueSpawn, Location redSpawn) {
    
            Arena a = new Arena(name, arenaLoc, blueSpawn, redSpawn);
            arenas.add(a);
    
            MainClass.getInst().getConfig().set("Arenas." + name + ".location", serializeLoc(arenaLoc));
    
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
    
            if(blueSpawn == null) {
    
                return a;
    
            }
    
            else {
                MainClass.getInst().getConfig().set("Arenas." + name + ".blueSpawn", serializeLoc(blueSpawn));
                MainClass.getInst().saveConfig();
                MainClass.getInst().reloadConfig();
            }
    
            if(redSpawn == null) {
                return a;
    
            }
            else {
                MainClass.getInst().getConfig().set("Arenas." + name + ".redSpawn", serializeLoc(redSpawn));
                MainClass.getInst().saveConfig();
                MainClass.getInst().reloadConfig();
            }
    
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
    
            return a;
        }
    
    
        public void loadArenas(){
            for(String name : MainClass.getInst().getConfig().getConfigurationSection("Arenas").getKeys(false)){
    
    
                Location arenaLoc = deserializeLoc(MainClass.getInst().getConfig().getString("Arenas." + name + ".location"));
                Location blueSpawn = null;
                Location redSpawn = null;
    
                if(MainClass.getInst().getConfig().getString("Arenas." + name + ".blueSpawn") == null) {
                    return;
                }
               
                else {
                    blueSpawn = deserializeLoc(MainClass.getInst().getConfig().getString("Arenas." + name + ".blueSpawn"));
                }
    
                if(MainClass.getInst().getConfig().getString("Arenas." + name + ".redSpawn") == null) {
                    return;
                }
    
                else {
    
                    redSpawn = deserializeLoc(MainClass.getInst().getConfig().getString("Arenas." + name + ".redSpawn"));
                }
                Arena arena = new Arena(name, arenaLoc, blueSpawn, redSpawn);
                if(!arenas.contains(arena)){
                    arenas.add(arena);
                }
            }
        }
    
        public void removeArena(String name) {
    
            Arena a = getArena(name);
            if(a == null) {
                return;
            }
    
            arenas.remove(a);
    
            MainClass.getInst().getConfig().set("Arenas." + name + ".location", null);
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
            MainClass.getInst().getConfig().set("Arenas." + name + ".blueSpawn", null);
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
            MainClass.getInst().getConfig().set("Arenas." + name + ".redSpawn", null);
            MainClass.getInst().getConfig().set("Arenas." + name, null);
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
    
            MainClass.getInst().saveConfig();
            MainClass.getInst().reloadConfig();
    
        }
    
    
    
        public String serializeLoc(Location l){
            return l.getWorld().getName()+","+l.getBlockX()+","+l.getBlockY()+","+l.getBlockZ();
        }
        public Location deserializeLoc(String s){
            String[] st = s.split(",");
            return new Location(Bukkit.getServer().getWorld(st[0]), Integer.parseInt(st[1]), Integer.parseInt(st[2]), Integer.parseInt(st[3]));
        }
    
    
    }
    

    My ArenaCommands class:

    Code:
    package me.grantis.arenas;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    public class ArenaCommands implements CommandExecutor{
    
        Location arenaLoc, blueSpawn, redSpawn;
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    
            Player player = (Player) sender;
    
            if(commandLabel.equalsIgnoreCase("create")) {
    
                if(args[0] != null) {
    
                    String name = args[0];
                    arenaLoc = player.getLocation();
                    ArenaManager.getManager().createArena(name, arenaLoc, blueSpawn, redSpawn);
                    player.sendMessage(ChatColor.GREEN + "Arena created !");
    
    
                }
    
    
            }
    
            if(commandLabel.equalsIgnoreCase("arena")) {
    
                if(args[0] != null) {
    
                    if(args[1].equalsIgnoreCase("bluespawn")) {
    
                        String name = args[0];
                        Arena a = ArenaManager.getManager().getArena(name);
                        a.setBlueSpawn(player.getLocation());
                        player.sendMessage(ChatColor.BLUE + "Blue spawn set !");
    
    
    
                    }
    
                    else if(args[1].equalsIgnoreCase("redspawn")) {
    
                        String name = args[0];
                        Arena a = ArenaManager.getManager().getArena(name);
                        a.setRedSpawn(player.getLocation());
                        player.sendMessage(ChatColor.RED + "Red spawn set !");
    
    
                    }
                }
    
    
            }
    
            else if(commandLabel.equalsIgnoreCase("remove")) {
    
                if(args[0] != null) {
    
                    ArenaManager.am.removeArena(args[0]);
                    player.sendMessage(ChatColor.GREEN + "Arena removed !");
    
                }
    
            }
    
            return true;
        }
    
    }
    

    And I m having error in ArenaCommands class on lines:
    Code:
    a.setRedSpawn(player.getLocation());
    Code:
    a.setBlueSpawn(player.getLocation());
    Can somebody fix that? If yes please show me the solution I really need this !
    Thank you !
     
  2. Offline

    MightyOne

    @JavaNaza without knowing what kind of error you get and better also the whole console error barely anyone will be able to help you!
     
  3. Offline

    Teh_Matt_GR

    The spawn location is saved to the config file of the plugin so, you have to get the player's x y and z and then to save it on config.yml! But first make them ints like:
    Location loc = player.getLocation();
    int x = loc.getBlockX();
    int y = loc.getBlockY();
    int z = loc.getBlockZ();
    and then save them on config
     
Thread Status:
Not open for further replies.

Share This Page