diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..961b063
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index 87fe2e4..a0f26f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,6 @@ plugins/Loreport/
# Test data
.jqwik-database
+
+# Compiled output
+bin/
diff --git a/.project b/.project
new file mode 100644
index 0000000..41b0c64
--- /dev/null
+++ b/.project
@@ -0,0 +1,34 @@
+
+
+ lorep-LoReport
+ Project LoReport created by Buildship.
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.buildship.core.gradleprojectnature
+
+
+
+ 1783809993368
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
+
diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..f7f3856
--- /dev/null
+++ b/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,13 @@
+arguments=--init-script /home/loki/.cache/opencode/bin/jdtls/config_linux/org.eclipse.osgi/57/0/.cp/gradle/init/init.gradle
+auto.sync=false
+build.scans.enabled=false
+connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
+connection.project.dir=
+eclipse.preferences.version=1
+gradle.user.home=
+java.home=/usr/lib/jvm/java-21-openjdk
+jvm.arguments=
+offline.mode=false
+override.workspace.settings=true
+show.console.view=true
+show.executions.view=true
diff --git a/bin/main/config.yml b/bin/main/config.yml
deleted file mode 100644
index 32e65d9..0000000
--- a/bin/main/config.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# Discord Webhook URL для уведомлений
-webhook-url: ""
-
-# Настройки базы данных
-database:
- # Тип БД: sqlite или postgresql
- type: "sqlite"
-
- # Настройки SQLite
- sqlite:
- file: "reports.db"
-
- # Настройки PostgreSQL
- postgresql:
- host: "localhost"
- port: 5432
- database: "loreport"
- username: "loreport"
- password: "password"
- pool-size: 10
-
-# Настройки GUI
-gui:
- # Количество репортов на странице
- reports-per-page: 45
- # Автообновление GUI (в тиках, 20 тиков = 1 секунда)
- auto-refresh: 100
- # Показывать головы игроков в GUI
- show-player-heads: true
-
-# Ограничения
-limits:
- # Максимальная длина причины репорта
- max-reason-length: 100
- # Кулдаун между репортами (в секундах)
- report-cooldown: 30
- # Максимум репортов на одного игрока от одного отправителя
- max-reports-per-player: 3
-
-# Уведомления
-notifications:
- # Уведомлять администраторов о новых репортах
- notify-admins: true
- # Звук уведомления для администраторов
- admin-notification-sound: "BLOCK_NOTE_BLOCK_PLING"
- # Уведомлять игрока о принятии репорта
- notify-reporter: true
-
-# Сообщения
-messages:
- report-sent: "&aРепорт успешно отправлен!"
- already-reported: "&cВы уже отправляли репорт на этого игрока!"
- self-report: "&cВы не можете отправить репорт на себя!"
- player-not-found: "&cИгрок не найден!"
- no-permission: "&cУ вас нет прав на эту команду!"
- usage: "&eИспользование: /report <ник> <причина>"
- no-reports: "&eУ этого игрока нет репортов."
- stats-header: "&6=== Статистика репортов: %player% ==="
- stats-count: "&eВсего репортов: &f%count%"
- stats-last-online: "&eПоследний онлайн: &f%time%"
- stats-report-entry: "&7- %reason% &8(%time% назад)"
- gui-title: "Репорты - Страница %page%"
- cooldown: "&cПодождите %time% секунд перед следующим репортом!"
- reason-too-long: "&cПричина слишком длинная! Максимум %max% символов."
- max-reports-reached: "&cВы уже отправили максимальное количество репортов на этого игрока!"
- admin-notification: "&6[Loreport] &eНовый репорт от &f%reporter% &eна &f%reported%: &7%reason%"
diff --git a/bin/main/plugin.yml b/bin/main/plugin.yml
deleted file mode 100644
index 85cd693..0000000
--- a/bin/main/plugin.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-name: Loreport
-version: ${version}
-main: dev.loki.lorep.LorepPlugin
-api-version: '1.19'
-author: loki5512344
-description: Modern player report system with Discord integration and GUI
-website: https://codeberg.org/loki5512344/Loreport
-
-commands:
- report:
- description: Report a player or manage reports
- usage: /report | /report gui | /report stats
- permission: lorep.report
- aliases: [rep, reports]
-
-permissions:
- lorep.report:
- description: Allows players to report other players
- default: true
- lorep.admin:
- description: Allows access to admin commands (gui, stats)
- default: op
- lorep.*:
- description: Gives access to all Loreport permissions
- default: false
- children:
- lorep.report: true
- lorep.admin: true
diff --git a/build.gradle.kts b/build.gradle.kts
index f2ee8f9..97ce7a3 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
java
id("com.gradleup.shadow") version "9.0.0-beta4"
+ checkstyle
}
group = "dev.loki"
@@ -67,3 +68,18 @@ tasks {
options.release.set(21)
}
}
+
+checkstyle {
+ toolVersion = "10.21.4"
+ configFile = file("config/checkstyle/checkstyle.xml")
+ isIgnoreFailures = false
+ maxErrors = 0
+ maxWarnings = 0
+}
+
+tasks.withType().configureEach {
+ reports {
+ xml.required.set(true)
+ html.required.set(true)
+ }
+}
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
new file mode 100644
index 0000000..a3a9089
--- /dev/null
+++ b/config/checkstyle/checkstyle.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradlew b/gradlew
old mode 100644
new mode 100755
diff --git a/src/main/java/dev/loki/lorep/command/ReportCommand.java b/src/main/java/dev/loki/lorep/command/ReportCommand.java
index 9637a1e..ee61ac5 100644
--- a/src/main/java/dev/loki/lorep/command/ReportCommand.java
+++ b/src/main/java/dev/loki/lorep/command/ReportCommand.java
@@ -138,8 +138,12 @@ public class ReportCommand implements CommandExecutor, TabCompleter {
String input = args[0].toLowerCase();
if (sender.hasPermission("lorep.admin")) {
- if ("gui".startsWith(input)) completions.add("gui");
- if ("stats".startsWith(input)) completions.add("stats");
+ if ("gui".startsWith(input)) {
+ completions.add("gui");
+ }
+ if ("stats".startsWith(input)) {
+ completions.add("stats");
+ }
}
// Add online player names
diff --git a/src/main/java/dev/loki/lorep/database/PostgreSQLDatabaseManager.java b/src/main/java/dev/loki/lorep/database/PostgreSQLDatabaseManager.java
index ed27071..b9d90cc 100644
--- a/src/main/java/dev/loki/lorep/database/PostgreSQLDatabaseManager.java
+++ b/src/main/java/dev/loki/lorep/database/PostgreSQLDatabaseManager.java
@@ -3,7 +3,11 @@ package dev.loki.lorep.database;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/dev/loki/lorep/database/SQLiteDatabaseManager.java b/src/main/java/dev/loki/lorep/database/SQLiteDatabaseManager.java
index fc348a0..dcd315d 100644
--- a/src/main/java/dev/loki/lorep/database/SQLiteDatabaseManager.java
+++ b/src/main/java/dev/loki/lorep/database/SQLiteDatabaseManager.java
@@ -1,7 +1,12 @@
package dev.loki.lorep.database;
import java.io.File;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/dev/loki/lorep/util/MessageUtil.java b/src/main/java/dev/loki/lorep/util/MessageUtil.java
index 60411d0..290097f 100644
--- a/src/main/java/dev/loki/lorep/util/MessageUtil.java
+++ b/src/main/java/dev/loki/lorep/util/MessageUtil.java
@@ -5,7 +5,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class MessageUtil {
-
+
+ private MessageUtil() {}
+
private static final String PREFIX = "§8[§clorep§8] §r";
public static String colorize(String message) {
diff --git a/src/main/java/dev/loki/lorep/util/PaginationUtil.java b/src/main/java/dev/loki/lorep/util/PaginationUtil.java
index d02c549..c1a472d 100644
--- a/src/main/java/dev/loki/lorep/util/PaginationUtil.java
+++ b/src/main/java/dev/loki/lorep/util/PaginationUtil.java
@@ -1,12 +1,16 @@
package dev.loki.lorep.util;
public class PaginationUtil {
-
+
+ private PaginationUtil() {}
+
public static int calculateTotalPages(int totalItems, int pageSize) {
if (pageSize <= 0) {
throw new IllegalArgumentException("pageSize must be positive");
}
- if (totalItems <= 0) return 1;
+ if (totalItems <= 0) {
+ return 1;
+ }
return (int) Math.ceil((double) totalItems / pageSize);
}
diff --git a/src/main/java/dev/loki/lorep/util/TimeUtil.java b/src/main/java/dev/loki/lorep/util/TimeUtil.java
index edd2d12..989b3e5 100644
--- a/src/main/java/dev/loki/lorep/util/TimeUtil.java
+++ b/src/main/java/dev/loki/lorep/util/TimeUtil.java
@@ -5,6 +5,8 @@ import java.time.Instant;
public class TimeUtil {
+ private TimeUtil() {}
+
private static final long SECONDS_PER_MINUTE = 60;
private static final long MINUTES_PER_HOUR = 60;
private static final long HOURS_PER_DAY = 24;
diff --git a/src/main/java/dev/loki/lorep/webhook/DiscordWebhook.java b/src/main/java/dev/loki/lorep/webhook/DiscordWebhook.java
index dbf32c3..c0e2aa0 100644
--- a/src/main/java/dev/loki/lorep/webhook/DiscordWebhook.java
+++ b/src/main/java/dev/loki/lorep/webhook/DiscordWebhook.java
@@ -1,7 +1,13 @@
package dev.loki.lorep.webhook;
import dev.loki.lorep.database.Report;
-import okhttp3.*;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
import java.io.IOException;
import java.time.ZoneId;
@@ -81,7 +87,9 @@ public class DiscordWebhook {
}
private String escapeJson(String text) {
- if (text == null) return "";
+ if (text == null) {
+ return "";
+ }
return text
.replace("\\", "\\\\")
.replace("\"", "\\\"")