Бывает, что я делаю плагин для игры в стиле bukkit. У меня класс Арены с перечислением на его статус. Статус по умолчанию - Status.disabled. У меня есть метод, который я вызываю on-Enable, который устанавливает арену в состояние ожидания. Проблема в том, что после вызова метода для каждой арены арена снова отображается как состояние «Отключено». Вот часть моего класса Арена: Переменная не изменяется для другого класса
public class Arena {
protected final Main main;
public static enum Status{
Idle,
InLobby,
InCountdown,
InGame,
Disabled;
}
private Status status = Status.Disabled;
String name;
Location lobby;
Location start;
Location end;
List<Location> checkpoints = new ArrayList<Location>();
int lives;
int time;
public Arena(Main main, String name, Location lobby, Location start, List<Location> checkpoints, Location end, int lives, int time)
{
this.main = main;
this.name = name;
this.lobby = lobby;
this.start = start;
this.checkpoints = checkpoints;
this.end = end;
this.lives = lives;
this.time = time;
}
public void setStatus(Status statuss){
this.status = statuss;
}
public final Status getStatus(){
return status;
}
public final void onEnable(){
this.status = Status.Idle;
System.out.println(this.getStatus() + " Trying status set on OnEnable. This is made from an Arena class.");
//The message above says status is Idle...
}
}
Теперь, вот мой onEnable метод, который находится на моем главном классе, который распространяется на JavaPlugin:
ArenaManager manager;
public void onEnable(){
PluginDescriptionFile pdfFile;
pdfFile = this.getDescription();
getLogger().info(pdfFile.getName() + pdfFile.getVersion() + " has been enabled!");
manager = new ArenaManager(this);
PluginManager pm = this.getServer().getPluginManager();
pm.registerEvents(new events(this), this);
getConfig().options().copyDefaults(true);
saveDefaultConfig();
for(Arena arena : manager.getAllArenas()){
arena.onEnable();
}
getLogger().info("Plugin contains " + manager.getAllArenas().size() + " arena(s)!");
foo();
}
public void foo(){
for(Arena a : manager.getAllArenas()){
System.out.println("foo " + a.getStatus());
}
}
Мой метод называется «Foo» проверяет статус для всех арен. Арены отображаются как отключенные, когда я пытаюсь «foo». Если это полезно, каждая арена сохраняется в файле, поэтому, чтобы получить все арены, я использую мой arenamanager. Метод от arenamanager, используемого в onEnable является:
public List<Arena> getAllArenas(){
List<Arena> arenas = new ArrayList<Arena>();
File[] allfiles = new File(main.getDataFolder() + File.separator + "Courses" + File.separator).listFiles();
assert allfiles != null;
for(File f : allfiles){
FileConfiguration con = YamlConfiguration.loadConfiguration(f);
String name = con.getString("Name");
Arena a = getCourse(name);
arenas.add(a);
}
return arenas;
}
Я попытался распечатывание статуса, а также из PlayerInteractEvent (по знаку), но арена все еще показывает, как инвалиды. Любая идея о том, как это исправить? К сожалению, на консоли нет ошибок. Спасибо за помощь :)
Действительно ли это код, который вы используете? Кажется, у вас бесконечная рекурсия в 'onEnable()'. –
Где код 'getCourse()'? В зависимости от того, что делает 'getCourse()', похоже, что 'getAllAreans()' создает новые объекты 'Arena' для возвращаемого списка. Поэтому каждый раз, когда вы вызываете 'getAllArenas()', вы создаете новые объекты с 'Status', установленными на' Disabled'. – mdewitt
@ PM77-1 Да, это то, что я использую для onEnable. Я новичок в java, так что я делаю что-то неправильно? – user3091392