Перейти к содержимому

Variables API

Разработчик аддонов

В AbstractMenus есть небольшое CRUD API для тех же переменных, которые авторы меню крутят через /var и /varp. Javadoc: api/variables.

Var - это запись одной переменной. Значения хранятся строками, но у Var есть типизированные аксессоры, которые парсят при чтении (могут бросить, если в строке не валидное число).

Срок жизни хранится в миллисекундах UTC. Чтобы понять, жива ли переменная, сравни expiry() с System.currentTimeMillis(). expiry() == 0 - “без срока”.

VariableManager - точка входа в CRUD. Достаём из API:

AbstractMenusApi api = AbstractMenusApi.get();
VariableManager vars = api.variables();

Имена переменных и игроков, которые ты отдаёшь менеджеру, нечувствительны к регистру - руками в lowercase приводить не нужно.

Var var = api.variables().createBuilder()
.name("welcome_message")
.value("Привет!")
.expiry(System.currentTimeMillis() + 10_000) // истекает через 10 секунд
.build();
api.variables().saveGlobal(var);

Для персональных переменных - savePersonal(playerName, var).

expiry(0) (либо просто не звать .expiry(...)) делает переменную бессрочной.

Var welcome = api.variables().getGlobal("welcome_message");
Var claimed = api.variables().getPersonal(player.getName(), "dailyReward");
api.variables().deleteGlobal("welcome_message");
api.variables().deletePersonal(player.getName(), "dailyReward");

getGlobal и getPersonal возвращают null, если переменной нет или она истекла и уже подметена. Имена переменных и игроков сравниваются без учёта регистра.

Var хранит значения строками, но отдаёт типизированные аксессоры, которые парсят на лету:

Var counter = vars.getPersonal(player.getName(), "kills");
int kills = counter.intValue(); // бросит, если значение не int
long ts = counter.longValue();
boolean on = counter.boolValue();
double pct = counter.doubleValue();
float rate = counter.floatValue();

Для временных переменных есть Var#hasExpiry() и Var#isExpired(). Чтобы получить новую переменную на основе существующей (например, продлить срок), используй Var#toBuilder().