LoReport/docs/api.md
loki5512344 55df7d97b2 feat: major update v1.1.0 - improved documentation, configuration and compatibility
- Add comprehensive documentation in docs/ folder
- Update README.md with modern design and badges
- Improve configuration with new options (GUI, limits, notifications)
- Add support for Minecraft 1.19.2-1.21.4 and Java 17+
- Create GPL-3.0 license
- Add modrinth/ folder with project description for publishing
- Add CONTRIBUTING.md for contributors
- Update plugin.yml with aliases and better permissions
- Improve build.gradle.kts with better compatibility and encoding
- Update .gitignore for cleaner repository
2026-02-03 14:01:34 +01:00

293 lines
No EOL
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API для разработчиков
## Подключение к проекту
### Maven
```xml
<repository>
<id>codeberg</id>
<url>https://codeberg.org/api/packages/loki5512344/maven</url>
</repository>
<dependency>
<groupId>dev.loki</groupId>
<artifactId>loreport</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
```
### Gradle
```kotlin
repositories {
maven("https://codeberg.org/api/packages/loki5512344/maven")
}
dependencies {
compileOnly("dev.loki:loreport:1.0.0")
}
```
## Основные классы
### LorepPlugin
Главный класс плагина, предоставляет доступ к основным компонентам.
```java
LorepPlugin plugin = LorepPlugin.getInstance();
DatabaseManager db = plugin.getDatabaseManager();
ConfigManager config = plugin.getConfigManager();
```
### DatabaseManager
Интерфейс для работы с базой данных репортов.
```java
public interface DatabaseManager {
void addReport(Report report);
List<Report> getReports(String playerName);
List<Report> getAllReports();
int getReportCount(String playerName);
boolean hasReported(String reporter, String reported);
void initialize();
void close();
}
```
### Report
Класс представляющий репорт.
```java
public class Report {
private final String reporter;
private final String reported;
private final String reason;
private final long timestamp;
// Конструкторы и геттеры
}
```
## События (Events)
### ReportSubmitEvent
Вызывается при отправке нового репорта.
```java
@EventHandler
public void onReportSubmit(ReportSubmitEvent event) {
Player reporter = event.getReporter();
String reported = event.getReported();
String reason = event.getReason();
// Ваша логика
// Отменить репорт
event.setCancelled(true);
}
```
### ReportViewEvent
Вызывается при просмотре репортов через GUI.
```java
@EventHandler
public void onReportView(ReportViewEvent event) {
Player viewer = event.getViewer();
List<Report> reports = event.getReports();
// Ваша логика
}
```
## Примеры использования
### Добавление репорта программно
```java
public void addCustomReport(String reporter, String reported, String reason) {
LorepPlugin plugin = LorepPlugin.getInstance();
DatabaseManager db = plugin.getDatabaseManager();
Report report = new Report(reporter, reported, reason, System.currentTimeMillis());
db.addReport(report);
// Отправить в Discord если настроен
DiscordWebhook webhook = plugin.getDiscordWebhook();
if (webhook != null) {
webhook.sendReport(report);
}
}
```
### Получение статистики игрока
```java
public void showPlayerStats(Player admin, String targetPlayer) {
LorepPlugin plugin = LorepPlugin.getInstance();
DatabaseManager db = plugin.getDatabaseManager();
List<Report> reports = db.getReports(targetPlayer);
int count = reports.size();
admin.sendMessage("У игрока " + targetPlayer + " " + count + " репортов");
for (Report report : reports) {
admin.sendMessage("- " + report.getReason() + " (от " + report.getReporter() + ")");
}
}
```
### Интеграция с системой наказаний
```java
@EventHandler
public void onReportSubmit(ReportSubmitEvent event) {
String reported = event.getReported();
// Получаем количество репортов
DatabaseManager db = LorepPlugin.getInstance().getDatabaseManager();
int reportCount = db.getReportCount(reported);
// Автоматические действия
if (reportCount >= 5) {
// Временный бан на 1 час
Bukkit.dispatchCommand(Bukkit.getConsoleSender(),
"tempban " + reported + " 1h Множественные репорты");
} else if (reportCount >= 3) {
// Предупреждение
Player player = Bukkit.getPlayer(reported);
if (player != null) {
player.sendMessage("§cВнимание! На вас поступают жалобы от других игроков.");
}
}
}
```
### Кастомные команды
```java
public class CustomReportCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) return false;
Player player = (Player) sender;
LorepPlugin plugin = LorepPlugin.getInstance();
if (args.length < 2) {
player.sendMessage("Использование: /customreport <игрок> <причина>");
return true;
}
String reported = args[0];
String reason = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
// Создаем репорт с дополнительной информацией
Report report = new Report(
player.getName(),
reported,
"[CUSTOM] " + reason,
System.currentTimeMillis()
);
plugin.getDatabaseManager().addReport(report);
player.sendMessage("§aКастомный репорт отправлен!");
return true;
}
}
```
## Хуки для других плагинов
### PlaceholderAPI
```java
public class LorepPlaceholders extends PlaceholderExpansion {
@Override
public String getIdentifier() {
return "loreport";
}
@Override
public String getAuthor() {
return "loki5512344";
}
@Override
public String getVersion() {
return "1.0.0";
}
@Override
public String onPlaceholderRequest(Player player, String params) {
if (player == null) return "";
DatabaseManager db = LorepPlugin.getInstance().getDatabaseManager();
switch (params) {
case "reports_count":
return String.valueOf(db.getReportCount(player.getName()));
case "reports_total":
return String.valueOf(db.getAllReports().size());
default:
return null;
}
}
}
```
### DiscordSRV интеграция
```java
@EventHandler
public void onReportSubmit(ReportSubmitEvent event) {
// Отправляем в Discord через DiscordSRV
String message = String.format(
"🚨 **Новый репорт!**\n" +
"**Отправитель:** %s\n" +
"**Нарушитель:** %s\n" +
"**Причина:** %s",
event.getReporter().getName(),
event.getReported(),
event.getReason()
);
DiscordSRV.getPlugin().getMainTextChannel().sendMessage(message).queue();
}
```
## Лучшие практики
1. **Всегда проверяйте доступность плагина:**
```java
if (!Bukkit.getPluginManager().isPluginEnabled("Loreport")) {
// Плагин не загружен
return;
}
```
2. **Используйте асинхронные операции для БД:**
```java
Bukkit.getScheduler().runTaskAsynchronously(yourPlugin, () -> {
// Работа с базой данных
List<Report> reports = db.getReports(playerName);
Bukkit.getScheduler().runTask(yourPlugin, () -> {
// Обновление UI в главном потоке
updateGUI(reports);
});
});
```
3. **Обрабатывайте исключения:**
```java
try {
db.addReport(report);
} catch (Exception e) {
getLogger().severe("Ошибка при добавлении репорта: " + e.getMessage());
}
```