LastStudio Wiki

#API

Один интерфейс, статический провайдер, обычные Bukkit-события. Всё синхронно, без CompletableFuture.

java
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);

#Провайдер

java
LastMinesAPI api = LastMinesProvider.getApi();

Выставляется один раз в onEnable() LastMines. Раньше этого — null. softdepend: [LastMines], не трогать API до своего onEnable(). setApi() кидает исключение при повторном вызове.

#Методы

#getMine

java
Mine getMine(String id);

Прямая ссылка на внутренний объект шахты, без копирования. Не хранить долго — шахту могут удалить, объект «протухнет». Хранить ID и получать заново.

#getMines

java
Collection<Mine> getMines();

Все загруженные шахты. Тоже прямые ссылки.

#openGui

java
void openGui(Player player, String id);

Открывает GUI шахты игроку (нужен BMenu).

#isWithinRadius

java
boolean isWithinRadius(Mine mine, Location location, double radius);

Расстояние от центра шахты по прямой (евклидово, до середины между pos1/pos2). Не тот же алгоритм, что у [radius:N] в действиях — там расстояние до ближайшей грани.

#getMinesInRadius

java
Collection<Mine> getMinesInRadius(Location location, double radius);

Тот же алгоритм, что у isWithinRadius, для всех шахт сразу.

#resetMine

java
void resetMine(String id);

Принудительный сброс. Асинхронно по факту — см. MineResetEvent.

#getMineAt(Location)

java
Mine getMineAt(Location location);

Линейный перебор всех шахт с проверкой bounding box. Дорого при частом вызове на много шахт — кешировать на несколько тиков.

#getMineAt(Player)

java
Mine getMineAt(Player player);

То же самое, для локации игрока.

#Подключение

#Gradle Kotlin

build.gradle.kts:

groovy
repositories {
    maven("https://repo.laststudio.space/releases")
}

dependencies {
    compileOnly("ru.last.mines:lastmines:0.3")
}

#Maven

pom.xml:

pom
<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

yaml
softdepend: [LastMines]

#События

Пакет ru.last.mines.api.events, обычные Bukkit-события, @EventHandler.

Событие Отменяемое Когда
MineCreateEvent нет шахта создана
MineDeleteEvent да перед удалением
MineLoadEvent нет шахта загружена
MineUnloadEvent нет шахта выгружена
MinePreResetEvent да перед началом заполнения блоков
MineResetEvent нет заполнение реально закончилось
MineUpdateRarityEvent нет смена текущей/следующей редкости
MineTeleportEvent да телепорт к шахте по команде/кнопке
MineBlockBreakEvent да игрок ломает блок в шахте
Сделано с Last