#API
Один интерфейс, статический провайдер, обычные Bukkit-события. Всё синхронно, без CompletableFuture.
LastMinesAPI api = LastMinesProvider.getApi();
Mine getMine(String id);
Collection<Mine> getMines();
void openGui(Player player, String id);
boolean isWithinRadius(Mine mine, Location location, double radius);
Collection<Mine> getMinesInRadius(Location location, double radius);
void resetMine(String id);
Mine getMineAt(Location location);
Mine getMineAt(Player player);
#Провайдер
LastMinesAPI api = LastMinesProvider.getApi();
Выставляется один раз в onEnable() LastMines. Раньше этого — null. softdepend: [LastMines], не трогать API до своего onEnable(). setApi() кидает исключение при повторном вызове.
#Методы
#getMine
Mine getMine(String id);
Прямая ссылка на внутренний объект шахты, без копирования. Не хранить долго — шахту могут удалить, объект «протухнет». Хранить ID и получать заново.
#getMines
Collection<Mine> getMines();
Все загруженные шахты. Тоже прямые ссылки.
#openGui
void openGui(Player player, String id);
Открывает GUI шахты игроку (нужен BMenu).
#isWithinRadius
boolean isWithinRadius(Mine mine, Location location, double radius);
Расстояние от центра шахты по прямой (евклидово, до середины между pos1/pos2). Не тот же алгоритм, что у [radius:N] в действиях — там расстояние до ближайшей грани.
#getMinesInRadius
Collection<Mine> getMinesInRadius(Location location, double radius);
Тот же алгоритм, что у isWithinRadius, для всех шахт сразу.
#resetMine
void resetMine(String id);
Принудительный сброс. Асинхронно по факту — см. MineResetEvent.
#getMineAt(Location)
Mine getMineAt(Location location);
Линейный перебор всех шахт с проверкой bounding box. Дорого при частом вызове на много шахт — кешировать на несколько тиков.
#getMineAt(Player)
Mine getMineAt(Player player);
То же самое, для локации игрока.
#Подключение
#Gradle Kotlin
build.gradle.kts:
repositories {
maven("https://repo.laststudio.space/releases")
}
dependencies {
compileOnly("ru.last.mines:lastmines:0.3")
}
#Maven
pom.xml:
<repositories>
<repository>
<id>LastStudio-repo</id>
<url>https://repo.laststudio.space/repository/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>ru.last.mines</groupId>
<artifactId>LastMines</artifactId>
<version>0.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
#Plugin YAML
softdepend: [LastMines]
#События
Пакет ru.last.mines.api.events, обычные Bukkit-события, @EventHandler.
| Событие | Отменяемое | Когда |
|---|---|---|
| MineCreateEvent | нет | шахта создана |
| MineDeleteEvent | да | перед удалением |
| MineLoadEvent | нет | шахта загружена |
| MineUnloadEvent | нет | шахта выгружена |
| MinePreResetEvent | да | перед началом заполнения блоков |
| MineResetEvent | нет | заполнение реально закончилось |
| MineUpdateRarityEvent | нет | смена текущей/следующей редкости |
| MineTeleportEvent | да | телепорт к шахте по команде/кнопке |
| MineBlockBreakEvent | да | игрок ломает блок в шахте |