Solved Lists, Arenas, and other sexy stuff

Discussion in 'Plugin Development' started by DogeDebugger, Jul 15, 2015.

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

    DogeDebugger

    Arena/ArenaManager credit to @xTrollxDudex , but modified a little bit to suit my needs

    I have these classes:

    Code:
    package quake;
    
    import org.bukkit.Location;
    
    import java.util.ArrayList;
    import java.util.List;
    public class Arena {
      
        private final String id;
        final Location spawn;
        private final Location spawn2;
        private final Location spawn3;
        private final Location spawn4;
        private final List<String> players = new ArrayList<String>();
      
        public Arena(Location spawn, Location spawn2, Location spawn3, Location spawn4, String id) {
            this.spawn = spawn;
            this.spawn2 = spawn2;
            this.spawn3 = spawn3;
            this.spawn4 = spawn4;
            this.id = id;
        }
    
        public String getId() {
            return this.id;
        }
     
        public Location getSpawn() {
            return spawn;
        }
    
    
        public List<String> getPlayers() {
            return players;
        }
    
    
        public Location getSpawn2() {
            return spawn2;
        }
    
    
        public Location getSpawn3() {
            return spawn3;
        }
    
    
        public Location getSpawn4() {
            return spawn4;
        }
    }
    And this:

    Code:
    package quake;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import misc.ChatUtil;
    import misc.MiscUtil;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    
    public class ArenaManager {
    
        private static ArenaManager am;
        public final List<Arena> arenas = new ArrayList<Arena>();
    
        private ArenaManager() {
        }
    
        public static ArenaManager getManager() {
            if (am == null)
                am = new ArenaManager();
    
            return am;
        }
    
        public Arena getArena(String i) {
            for (Arena a : this.arenas) {
                if (a.getId() == i) {
                    return a;
                }
            }
            return null;
        }
    
        public void sendToPlayers(String msg, String id) {
            Arena a = this.getArena(id);
            if(a != null) {
                for(String p: a.getPlayers()) {
                    Player player = Bukkit.getPlayer(p);
                    player.sendMessage(msg);
                }
            }
        }
    
        public void addPlayer(Player p, String i) {
            Arena a = this.getArena(i);
            if (!arenas.contains(a)) {
                p.sendMessage("Invalid arena!");
                for(Arena arne: arenas) {
                    System.out.println(arne.getId());
                    }
                return;
            } else if (this.isInGame(p)) {
                p.sendMessage("Cannot join more than 1 game!");
                return;
            } else {
                a.getPlayers().add(p.getName());
                p.sendMessage(ChatUtil.sendGameMessage("You joined arena " + i));
                p.teleport(a.spawn);
            }
        }
    
        public void removePlayer(Player p) {
            Arena a = null;
            for (Arena arena : this.arenas) {
                if (arena.getPlayers().contains(p.getName()))
                    a = arena;
            }
            if (a == null) {
                p.sendMessage("Invalid operation!");
                return;
            }
            a.getPlayers().remove(p.getName());
        }
    
        public Arena createArena(Location l, Location l2, Location l3, Location l4,
                String id) throws IOException {
            Arena a = new Arena(l, l2, l3, l4, id);
            this.arenas.add(a);
            FileConfiguration conf = Main.getPlugin().getConfig();
            conf.addDefault(id+".spawn1", MiscUtil.serializeLoc(l));
            conf.addDefault(id+".spawn2", MiscUtil.serializeLoc(l2));
            conf.addDefault(id+".spawn3", MiscUtil.serializeLoc(l3));
            conf.addDefault(id+".spawn4", MiscUtil.serializeLoc(l4));
            Main.getPlugin().saveConfig();
            return a;
        }
    
        public boolean isInGame(Player p) {
            for (Arena a : this.arenas) {
                if (a.getPlayers().contains(p.getName()))
                    return true;
            }
            return false;
        }
    
    
    }
    Main:

    Code:
    package quake;
    
    package quake;
    
    import misc.MiscUtil;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import commands.AdminCommands;
    import commands.PlayerCommands;
    
    import events.Deaths;
    import events.Railgun;
    
    public class Main extends JavaPlugin {
    
       private static Plugin plugin;
    
       public void onEnable() {
         plugin = this;
         registerEvents(this, new Railgun(), new Deaths());
         getCommand("quake").setExecutor(new AdminCommands());
         getCommand("joingame").setExecutor(new PlayerCommands());
         getConfig().options().copyDefaults(true);
         load();
         }
      
    
       public void onDisable() {
       }
    
       public static void registerEvents(org.bukkit.plugin.Plugin plugin,
           Listener... listeners) {
         for (Listener listener : listeners) {
           Bukkit.getServer().getPluginManager()
               .registerEvents(listener, plugin);
         }
       }
    
       public static Plugin getPlugin() {
         return plugin;
       }
      
       private void load() {
         for (String id : getConfig().getKeys(false)) {
           String l1 = getConfig().getString(id+".spawn1");
           String l2 = getConfig().getString(id+".spawn2");
           String l3 = getConfig().getString(id+".spawn3");
           String l4 = getConfig().getString(id+".spawn4");
           Arena arn = new Arena(MiscUtil.deserializeLoc(l4),
               MiscUtil.deserializeLoc(l1), MiscUtil.deserializeLoc(l2),
               MiscUtil.deserializeLoc(l3), id);
           ArenaManager.getManager().arenas.add(arn);
         }
       }
    }
    
    
    So how this works is that createArena(Location l, Location l2, Location l3, Location l4,String id) will create an Arena object and save it to a config file and a list. Then if it gets reloaded/restarted the load() method loads all the saved arenas from config back into the list.

    However when i try to use addPlayer(Player p, String i) it keeps saying Invalid Arena, even though the arena is right in the list (checked)!

    Code:
    :10:21 INFO]: _Whale_ issued server command: /joingame whales
    :10:21 INFO]: whales2
    :10:21 INFO]: whales
    
    whales is clearly an arena!
    Help please! :p
     
    Last edited: Jul 15, 2015
  2. Offline

    Zombie_Striker

    @DogeDebugger
    I don't see you printing out anything that would say Invalid arena. Where are you receiving this error from?
     
  3. Offline

    DogeDebugger

    ArenaManager line 52

    EDIT: oops gonna deletee this reply
    EDIT: HOW DO I DELETE A REPLY

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
  4. Offline

    Zombie_Striker

    For the getArena method. use either EqualsIgnoreCase() or equals() instead of ==. Also, are you sure that is not returning null?
     
  5. Offline

    DogeDebugger

    YES THAT WORKED! THANKS :)
     
Thread Status:
Not open for further replies.

Share This Page