List not updating values

Discussion in 'Plugin Development' started by x_Jake_s, Feb 5, 2017.

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

    x_Jake_s

    So i have decided to go on the daunting task of creating a minigame using objects and such, however when i create an object and add it to my list, everything works and i can see that it was added ingame, however when i delete the object and remove it from the list, in-game it still is showing and i have no idea how to fix this.

    Here is my source code:

    Code:
    public class Arena {
       
        private String name;
    
        public Arena(String Name) {
            this.name = Name;
        }
    
        public String getName() {
            return this.name;
        }
    
    }
    Code:
    public class ArenaManager {
    
        public static HashMap<String, Arena> arenas = new HashMap<String, Arena>();
        private static HashMap<String, Arena> playerArena = new HashMap<String, Arena>();
        public static List<Arena> list = new ArrayList<Arena>();
    
        public static Arena getArena(String ArenaName) {
            if (arenas.containsKey(ArenaName)) {
                Arena arena = (Arena) arenas.get(ArenaName);
                return arena;
            }
            return null;
        }
    
        public static List<Arena> getArenas() {
            return list;
        }
    
        public static boolean isInArena(Player player) {
            if (playerArena.containsKey(player.getName())) {
                return true;
            }
            return false;
        }
    
        public static void removePlayer(Player player) {
            if (playerArena.containsKey(player.getName())) {
                playerArena.remove(player.getName());
            }
        }
    
        public static void addPlayer(Player player, Arena arena) {
            if (!playerArena.containsKey(player.getName())) {
                playerArena.put(player.getName(), arena);
            }
        }
    
        public static void deleteArena(String args) {
            if (!arenas.containsKey(args)) {
                return;
            }
            arenas.remove(args);
            if (list.contains(args)) {
                list.remove(args);
            }
        }
    
        public static void createArena(Arena arena) {
            if (!arenas.containsKey(arena.getName())) {
                arenas.put(arena.getName(), arena);
                if (!list.contains(arena)) {
                    list.add(arena);
                }
            }
        }
    
        public static Arena getArena(Player player) {
            String name = player.getName();
            if (playerArena.containsKey(name)) {
                Arena arena = (Arena) playerArena.get(name);
    
                return arena;
            }
            return null;
        }
    
        public static boolean arenaExists(String ArenaName) {
            if (arenas.containsKey(ArenaName)) {
                return true;
            }
            return false;
        }
    
    }
    Code:
    public class $CommandExecutor implements CommandExecutor {
        private Main plugin;
    
        public $CommandExecutor(Main plugin) {
            this.plugin = plugin;
        }
    
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            String prefix1 = this.plugin.getConfig().getString("Prefix") + " ";
            String prefix = ChatColor.translateAlternateColorCodes('&', prefix1) + ChatColor.RED;
            @SuppressWarnings("unused")
            String np = prefix + ChatColor.DARK_RED + "No permission.";
            String cmd = command.getName();
            if ((cmd.equalsIgnoreCase("mg")) && ((sender instanceof Player))) {
                Player player = (Player) sender;
                if (args.length == 0) {
                    player.sendMessage("");
                    player.sendMessage("");
                    player.sendMessage(ChatColor.GRAY + "--------" + ChatColor.AQUA + "MG" + ChatColor.GRAY + "--------");
                    player.sendMessage("/mg create <args> | Creates an arena.");
                    player.sendMessage("/mg delete <args> | Deletes an arena.");
                    player.sendMessage("/mg list | Lists all created arenas.");
                    player.sendMessage(ChatColor.GRAY + "--------" + ChatColor.AQUA + "MG" + ChatColor.GRAY + "--------");
                    return true;
                }
                if (args.length == 1) {
                    if (args[0].equalsIgnoreCase("list")) {
                        if (ArenaManager.list.isEmpty()) {
                            player.sendMessage("There are currently no existing arenas.");
                            return true;
                        } else {
                            for (Arena arenas : ArenaManager.list)
                                player.sendMessage(arenas.getName().concat(", "));
                            return true;
                        }
                    }
                }
                if (args.length == 2) {
                    if (args[0].equalsIgnoreCase("create")) {
                        if (args.length < 2) {
                            player.sendMessage("Missing arguments /mg create <args>");
                        }
                        if (ArenaManager.arenaExists(args[1])) {
                            player.sendMessage(args[1] + " already exists!");
                            return true;
                        } else {
                            Arena a = new Arena(args[1]);
                            ArenaManager.createArena(a);
                            player.sendMessage(a.getName() + " created!");
                            return true;
                        }
                    }
                    if (args[0].equalsIgnoreCase("delete")) {
                        if (args.length < 2) {
                            player.sendMessage("Missing arguments /mg delete <args>");
                            return true;
                        }
                        if (!ArenaManager.arenaExists(args[1])) {
                            player.sendMessage(args[1] + " doesn't exist!");
                            return true;
                        } else {
                            Arena arena = ArenaManager.getArena(args[1]);
                            ArenaManager.deleteArena(arena.getName());
                        }
                    }
                }
            }
            return false;
        }
    }
     
  2. Offline

    mine-care

    I'd sugest you follow the principles of Encapsulation and access these variables through getters and dedicated methods.
    First of all i remind you that containsKey compares the provided value with the map values using .equals therefore in the case of Strings that makes it case sensitive.
    Secondly, list contains Arena objects not Strings so removing a String from it will pretty much do nothing ;)

    some other improvements if i may suggest:

    Also, no need to cast there ;) get(K key) returns an Arena object in this instance.

    Also if i may recomend two changes for this method, return arenas.containsKey(arenaName); directly no need to check if it is true and then return true otherwise return false, you can simply return itself :p Also mind the naming of the parameter variable.

    And those can be constants, no need to create them every time a command comes through
     
    Last edited: Feb 5, 2017
Thread Status:
Not open for further replies.

Share This Page