Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Подход к хранению данных (Spigot)

Метки:
Теги Теги
java spigot

malexp

Активный участник
Баллы
61
Привет.

Прежде, чем я буду описывать свой затык в жалкой попытке что-либо сделать в сфере разработки плагинов, хочу предупредить, что мой опыт в разработке плагинов, как и, собственно, в программировании на Java либо иных языках, довольно мал, потому я буду благодарен, если вместо готового решения вы подтолкнете меня к каким-либо материалам, которые помогут мне самому найти решение для своей задачи

Задача:
Добавить возможность игрокам сервера создавать различные объединения (группы).
Первейший функционал данных групп прост:
возможность создать группу,
возможность распустить группу,
возможность добавить в группу игрока,
возможность из группы игрока исключить,
возможность отобразить информацию о группе (список всех участников группы).

Имеются два класса, написанных мною.
Первый - Group - представляет структуру самой группы.

public class Group {
private String name;
private ArrayList<Member> members;

public Group(String name) {
this.name = name;
this.members = new ArrayList<Member>();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public ArrayList<Member> getMembers() {
return members;
}

public void addMember(Member member) {
if (!members.contains(member)) {
members.add(member);
}
}

public void removeMember(Member member) {
if (members.contains(member))
members.remove(member);
}
}
Второй - Member - представляет игрока-участника группы.
public class Member {
private String name;

public Member(Player player) {
this.name = player.getName();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Далее - я хочу, чтобы при вводе определенной команды игроком, создавалась группа.
В этом месте затык.
Я знаю, как создать команду, но совершенно не знаю, что мне нужно написать в теле метода onCommand.

Если я создам при вызове этой команды объект в теле метода onCommand, то этот объект останется в области видимости этого метода, пока тот не завершится. Следовательно, куда-то этот объект я должен добавить так, чтобы у меня была возможность работать с этим объектом и далее - в других классах программы, в других областях видимости. Более того, мне нужно, чтобы данные об этом объекте сохранились по завершении программы и могли быть восстановлены после того, как я запущу свою программу (плагин) в следующий раз.

В соответствии с этим появляется вопрос - каким образом создать, где хранить и как обработать данную информацию?

Заранее благодарю.
 
Коллекции?
Что, если завести словарь с ключом Group и значением ArrayList<Member>?
Вопрос опять же - где этот словарь хранить? Создать класс типа GroupInfo со статическим словарем? И записывать по выключении плагина этот словарь в отдельный файл, а по включении - считывать из этого файла в статический словарь?
 
Для начала хорошо ознакомься с материалом Герберта Шилдта "Java 8 - Полное руководство".
Для областей видимости, хранения обьектов и т.п. - главы 6, 7
Коллекции - глава 18, + погугль про Map
Отсюда ты сможешь сам решить, что тебе нужно для конкретной задачи.
 
Коллекции?
Что, если завести словарь с ключом Group и значением ArrayList<Member>?
Вопрос опять же - где этот словарь хранить? Создать класс типа GroupInfo со статическим словарем? И записывать по выключении плагина этот словарь в отдельный файл, а по включении - считывать из этого файла в статический словарь?
Да, записывать в файл. В простом случае работать с конфигурацией, сложнее - с базой данных (если много информации).

Хранить в "коде" можешь где угодно, но предпочтительно использовать не статик. Например если у тебя целая конфигурация со списками и другими значениями - дать ей отдельный класс, а обьект этого класса создавать / хранить в главном. От главного передавать в конструкторы другим обьектам, или же сделать геттеры.

Не забудь прочитать о том, как работают карты в джаве и как правильно их создавать со своими ключами (к примеру в хеш карте ты должен делать свои методы hashCode() / equals() для обьекта-ключа, дабы не было проблем). В IntelliJ / Eclipse такие методы можно сгенерировать автоматически, главное выбрать только самые нужные аргументы, по которым будет определяться уникальность.
 

Поделиться этой страницей

Назад
Верх