1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем malexp, 3 фев 2019.

Метки:
  1. Автор темы
    malexp

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

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

    Заранее благодарю.
     
  2. DeethzzCoder

    DeethzzCoder Активный участник Пользователь

    Баллы:
    76
    Если все правильно понял, то коллекции.
     
  3. Автор темы
    malexp

    malexp Активный участник

    Баллы:
    61
    Коллекции?
    Что, если завести словарь с ключом Group и значением ArrayList<Member>?
    Вопрос опять же - где этот словарь хранить? Создать класс типа GroupInfo со статическим словарем? И записывать по выключении плагина этот словарь в отдельный файл, а по включении - считывать из этого файла в статический словарь?
     
  4. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Для начала хорошо ознакомься с материалом Герберта Шилдта "Java 8 - Полное руководство".
    Для областей видимости, хранения обьектов и т.п. - главы 6, 7
    Коллекции - глава 18, + погугль про Map
    Отсюда ты сможешь сам решить, что тебе нужно для конкретной задачи.
     
  5. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Да, записывать в файл. В простом случае работать с конфигурацией, сложнее - с базой данных (если много информации).

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

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

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