Вопрос Данные в конфиге - запись по-человечески и получение по ключам.

Alex-Novosiber

Пользователь
Сообщения
39
Всем привет. Застрял с конфигом. При привате региона игроком данные заносятся в конфиг
- ИмяИгрока, ИмяРегиона, ДатаПривата, МирРегиона.
Появились траблы. При привате ЭТИМ-же игроком 2-го региона данные перезаписываются.
То есть у него в конфиге остаётся ОДИН регион с изменённым ИменемРегиона и ДатойПривата.

Регионов может быть несколько. И Миров с именем региона home например.
Как мне отсортировать всю эту кашу , как правильно ложить данные в конфиг?

И ещё - вопрос номер два - Как получить имя игрока , если имя игрока это ключ, содержащий значение ДатаПривата, по которому я его ищу?

Вот пример моего конфига:
YAML:
tester:
  regionName: test888
  regionClaimTime: '2020-08-22'
  world: world
 
Регионов может быть несколько. И Миров с именем региона home например.
Как мне отсортировать всю эту кашу , как правильно ложить данные в конфиг?
Я пока что потренируюсь с YAML, только надо разобраться как сортировать эту белиберду что я навыдумывал.

Может так ?
YAML:
tester-uuid: # actual UUID
  test888:
    regionClaimTime: '2020-08-22'
    world: world
  test999:
    regionClaimTime: '2020-08-22'
    world: world
 
ладно, я дурка и прочитал не так
все таки, скорее всего тебе пойдет хешмап с сетом - Map<String, Set<Region>> -- В качестве ключа будет или ник, или UUID игрока, как захочешь. В сете у тебя будут объекты твоего региона, примерно такие:
Java:
public class Region {
    private final String name;
    private final String world;
    private final long time;
    
    public Region(String regionName, String worldName, long time) {
        this.name = regionName;
        this.world = worldName;
        this.time = time;
    }
    
    // геттеры...
}
Регионы можно сериализовать вот так:
YAML:
regions:
  tester:
    - name: "Spawn"
      world: "world"
      claimTime: 1598090040
    - name: "Colony"
      world: "nether"
      claimTime: 1598067249
  notch:
    - name: "Test"
      world: "world"
      claimTime: 1488899034
 
И ещё надо ложить туда Дату последнего выхода игрока с сервера ((
Объединено

regions: tester: - name: "Spawn" world: "world" claimTime: 1598090040 - name: "Colony" world: "nether" claimTime: 1598067249 notch: - name: "Test" world: "world" claimTime: 1488899034
ОТЛИЧНО !!! Это то что я полюбил с первого взгляда ! Теперь как туда добавить время выхода игрока с сервера....
 
Ничего не мешает добавить в класс еще одну переменную (уже не финальную) и сеттер для нее.

Java:
public class Region {
    private final String name;
    private final String world;
    private final long time;
    private long lastJoin;
    
    public Region(String regionName, String worldName, long time) {
        this.name = regionName;
        this.world = worldName;
        this.time = time;
    }
    
    // геттеры...
    
    public void setLastJoin(long time) {
        this.lastJoin = time;
    }
    
    public long getLastJoin() {
        return this.lastJoin;
    }
}

Java:
regions:
  tester:
    - name: "Spawn"
      world: "world"
      claimTime: 1598090040
      lastJoin: 15980123000

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

И ещё - вопрос номер два - Как получить имя игрока , если имя игрока это ключ, содержащий значение ДатаПривата, по которому я его ищу?
А вот этого я не понял
 
А вот этого я не понял
Буду сравнивать дату привата с текущей. По какому запросу я могу получить
из claimTime: вот это => 1598090040 ?
И как по этому найденному вытащить регионНэйм ?
Объединено

Хочу такую красоту в конфиге:
YAML:
regions:
  tester:
    - name: "Spawn"
      world: "world"
      claimTime: 1598090040
    - name: "Colony"
      world: "nether"
      claimTime: 1598067249
  notch:
    - name: "Test"
      world: "world"
      claimTime: 1488899034

Как реализовать ? И как потом доставать ?
 
Последнее редактирование:
Буду восстанавливать регионы. Игроки сами их не восстановят. ))) Вот, леплю корявый плагин для этого. Рабочие команды есть, сохраняют в схематик и вставляют назад одной командой, не записывая регионы в WorldEdit-овскую папку, и регионы создавать не надо. Просто выделяешь регион и сохраняешь.
Объединено

Хочу автоматизировать - при отсутствии более Х дней ( задаётся в конфиге ) - реген региона
 
во первых, я сейчас понял проблему - если мы будет доставать регионы по дате, их может получиться несколько. в таком случае нужно указать конкретную дату, вплоть до часов или минут
во вторых, регион получить только перебирая в таком случае, а может получится придумать что-то получше
 
Плагин слушает Листенером команду привата региона игроком - и сохраняет первозданный регион в схематик, попутно записывая вышеуказанные данные в конфиг. Потом надо чекать последний онлайн игрока и например через 30 дней регенить регион. С конфигом у меня полная задница. В Джаве только учусь , потому такие вопросы и задаю ))))
 
Назад
Сверху Снизу