diff --git a/TODO.md b/TODO.md deleted file mode 100644 index c3783bf..0000000 --- a/TODO.md +++ /dev/null @@ -1,180 +0,0 @@ -# ๐Ÿš€ Loki Plugins - TODO - -## ๐Ÿ“ฆ ะŸั€ะพะตะบั‚ั‹ - -### 1. LoChat - ะงะฐั‚ ะฟะปะฐะณะธะฝ (Paper/Folia) -**ะกั‚ะฐั‚ัƒั:** โœ… ะ“ะพั‚ะพะฒ ะบ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธัŽ - -#### ะคัƒะฝะบั†ะธะธ -- โœ… ะ“ะปะพะฑะฐะปัŒะฝั‹ะน/ะปะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚ -- โœ… PM ัะธัั‚ะตะผะฐ ั ะธะณะฝะพั€ะพะผ -- โœ… ะœัƒั‚ ัะธัั‚ะตะผะฐ ั ะธัั‚ะพั€ะธะตะน -- โœ… ะคะธะปัŒั‚ั€ั‹ (ะผะฐั‚, ัะฟะฐะผ, CAPS) -- โœ… ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ (LuckPerms ะธะฝั‚ะตะณั€ะฐั†ะธั) -- โœ… ะกะผะฐะนะปะธะบะธ (300+ ัะผะพะดะทะธ) -- โœ… PlaceholderAPI -- โœ… Markdown ั„ะพั€ะผะฐั‚ะธั€ะพะฒะฐะฝะธะต (**bold**, *italic*, ~~strike~~, `code`) -- โœ… ะฃะฟะพะผะธะฝะฐะฝะธั (@player, @everyone, @here, @role:permission) -- โœ… ะคะธะปัŒั‚ั€ั‹ URL/IP/ะฟะพะฒั‚ะพั€ะพะฒ - ---- - -### 2. LoHub - Hub ะฟะปะฐะณะธะฝ (Paper/Folia) -**ะกั‚ะฐั‚ัƒั:** โœ… ะ“ะพั‚ะพะฒ ะบ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธัŽ (100% ะณะพั‚ะพะฒะพ) - -#### โœ… ะ“ะพั‚ะพะฒะพ -- โœ… Spawn ัะธัั‚ะตะผะฐ ั ั‚ะตะปะตะฟะพั€ั‚ะพะผ -- โœ… WorldGuard ั€ะตะณะธะพะฝั‹ (ะฐะฒั‚ะพ-ัะพะทะดะฐะฝะธะต) -- โœ… ะ—ะฐั‰ะธั‚ะฐ ะผะธั€ะฐ (ะฑะปะพะบะธ, PvP, ะผะพะฑั‹) -- โœ… ะšะพะผะฐะฝะดั‹ /hub, /sethub, /lohub -- โœ… ะ‘ะฐะทะพะฒั‹ะต ัƒั‚ะธะปะธั‚ั‹ (ItemBuilder, TextUtil, PlaceholderUtil) -- โœ… **ะญะขะะŸ 2: Action ัะธัั‚ะตะผะฐ** - - โœ… Action ะธะฝั‚ะตั€ั„ะตะนั ะธ ActionType enum - - โœ… MessageAction, BroadcastAction, TitleAction, ActionbarAction - - โœ… SoundAction, CommandAction, ConsoleAction - - โœ… GamemodeAction, EffectAction, CloseAction - - โœ… ActionManager ั regex ะฟะฐั€ัะธะฝะณะพะผ -- โœ… **ะญะขะะŸ 3: Join ัะธัั‚ะตะผะฐ** - - โœ… PlayerJoinListener (join/quit/respawn/death) - - โœ… ะขะตะปะตะฟะพั€ั‚ ะฝะฐ ัะฟะฐะฒะฝ ะฟั€ะธ ะฒั…ะพะดะต - - โœ… ะฅะธะป ะธ ะพั‡ะธัั‚ะบะฐ ัั„ั„ะตะบั‚ะพะฒ - - โœ… ะšะฐัั‚ะพะผะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั ะฒั…ะพะดะฐ/ะฒั‹ั…ะพะดะฐ - - โœ… ะคะตะนะตั€ะฒะตั€ะบะธ ะฟั€ะธ ะฟะตั€ะฒะพะผ ะฒั…ะพะดะต - - โœ… ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั Action ัะธัั‚ะตะผะพะน -- โœ… **ะญะขะะŸ 4: Custom Join Items** - - โœ… HotbarManager - ัƒะฟั€ะฐะฒะปะตะฝะธะต ะฟั€ะตะดะผะตั‚ะฐะผะธ - - โœ… ะ’ั‹ะดะฐั‡ะฐ ะฟั€ะตะดะผะตั‚ะพะฒ ะฟั€ะธ ะฒั…ะพะดะต - - โœ… HotbarListener - ะพะฑั€ะฐะฑะพั‚ะบะฐ ะบะปะธะบะพะฒ - - โœ… ะ—ะฐั‰ะธั‚ะฐ ะพั‚ ะฒั‹ะฑั€ะฐัั‹ะฒะฐะฝะธั ะฟั€ะตะดะผะตั‚ะพะฒ - - โœ… ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั Action ัะธัั‚ะตะผะพะน -- โœ… **ะญะขะะŸ 5: Launchpad** - - โœ… LaunchpadListener - ะฟั€ั‹ะถะบะพะฒั‹ะต ะฟะปะพั‰ะฐะดะบะธ - - โœ… ะŸั€ะพะฒะตั€ะบะฐ ะฑะปะพะบะพะฒ (ะฟะปะธั‚ะฐ + ั€ะตะดัั‚ะพัƒะฝ) - - โœ… ะะฐัั‚ั€ะฐะธะฒะฐะตะผะฐั ัะธะปะฐ ะฟั€ั‹ะถะบะฐ - - โœ… ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั Action ัะธัั‚ะตะผะพะน -- โœ… **ะญะขะะŸ 6: Double Jump** - - โœ… DoubleJumpListener - ะดะฒะพะนะฝะพะน ะฟั€ั‹ะถะพะบ - - โœ… ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั CooldownManager - - โœ… ะะฐัั‚ั€ะฐะธะฒะฐะตะผะฐั ัะธะปะฐ ะธ ะบัƒะปะดะฐัƒะฝ - - โœ… ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั Action ัะธัั‚ะตะผะพะน -- โœ… **ะญะขะะŸ 7: Player Hider** - - โœ… PlayerHiderManager - ัƒะฟั€ะฐะฒะปะตะฝะธะต ะฒะธะดะธะผะพัั‚ัŒัŽ - - โœ… ะกะบั€ั‹ั‚ะธะต/ะฟะพะบะฐะท ะธะณั€ะพะบะพะฒ - - โœ… ะŸั€ะตะดะผะตั‚ ะดะปั ะฟะตั€ะตะบะปัŽั‡ะตะฝะธั - - โœ… ะšัƒะปะดะฐัƒะฝ ะฝะฐ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต -- โœ… **ะญะขะะŸ 8: Scoreboard** - - โœ… ScoreboardManager - ัƒะฟั€ะฐะฒะปะตะฝะธะต ัะบะพั€ะฑะพั€ะดะพะผ - - โœ… ะะฐัั‚ั€ะฐะธะฒะฐะตะผั‹ะน ะทะฐะณะพะปะพะฒะพะบ ะธ ัั‚ั€ะพะบะธ - - โœ… ะะฒั‚ะพะพะฑะฝะพะฒะปะตะฝะธะต ั ะฝะฐัั‚ั€ะฐะธะฒะฐะตะผั‹ะผ ะธะฝั‚ะตั€ะฒะฐะปะพะผ - - โœ… PlaceholderAPI ะธะฝั‚ะตะณั€ะฐั†ะธั -- โœ… **ะญะขะะŸ 9: Tablist** - - โœ… TablistManager - ัƒะฟั€ะฐะฒะปะตะฝะธะต ั‚ะฐะฑะพะผ - - โœ… ะะฐัั‚ั€ะฐะธะฒะฐะตะผั‹ะน header ะธ footer - - โœ… ะะฒั‚ะพะพะฑะฝะพะฒะปะตะฝะธะต ั ะฝะฐัั‚ั€ะฐะธะฒะฐะตะผั‹ะผ ะธะฝั‚ะตั€ะฒะฐะปะพะผ - - โœ… PlaceholderAPI ะธะฝั‚ะตะณั€ะฐั†ะธั -- โœ… **ะญะขะะŸ 10: Announcements** - - โœ… AnnouncementManager - ัะธัั‚ะตะผะฐ ะพะฑัŠัะฒะปะตะฝะธะน - - โœ… ะœะฝะพะถะตัั‚ะฒะตะฝะฝั‹ะต ะพะฑัŠัะฒะปะตะฝะธั ั ั€ะพั‚ะฐั†ะธะตะน - - โœ… ะะฐัั‚ั€ะฐะธะฒะฐะตะผั‹ะน ะธะฝั‚ะตั€ะฒะฐะป ะธ ะทะฒัƒะบ - - โœ… ะœะธะฝะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะธะณั€ะพะบะพะฒ - - โœ… PlaceholderAPI ะธะฝั‚ะตะณั€ะฐั†ะธั - -#### ๐Ÿ“‹ ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝะพ -- ะ’ัะต ะพัะฝะพะฒะฝั‹ะต ั„ัƒะฝะบั†ะธะธ ั€ะตะฐะปะธะทะพะฒะฐะฝั‹ -- ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะฟะพะปะฝะพัั‚ัŒัŽ ะฝะฐัั‚ั€ะฐะธะฒะฐะตะผะฐ ั‡ะตั€ะตะท config.yml -- ะŸะพะดะดะตั€ะถะบะฐ PlaceholderAPI ะดะปั ะฒัะตั… ั‚ะตะบัั‚ะพะฒั‹ั… ัะปะตะผะตะฝั‚ะพะฒ -- ะšะพะผะฐะฝะดะฐ /lohub reload ะดะปั ะฟะตั€ะตะทะฐะณั€ัƒะทะบะธ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ -- [ ] Announcements ะผะพะดัƒะปัŒ - ---- - -### 3. LoVelocity - Velocity ะฟะปะฐะณะธะฝ -**ะกั‚ะฐั‚ัƒั:** โœ… ะ“ะพั‚ะพะฒ - -#### ะคัƒะฝะบั†ะธะธ -- โœ… ะšะพะผะฐะฝะดะฐ /hub ะดะปั ั‚ะตะปะตะฟะพั€ั‚ะฐ ะฝะฐ lobby/hub ัะตั€ะฒะตั€ -- โœ… ะšะฐัั‚ะพะผะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั -- โœ… ะŸะพะดะดะตั€ะถะบะฐ PlaceholderAPI - ---- - -## ๐Ÿ—๏ธ ะกั‚ั€ัƒะบั‚ัƒั€ะฐ ะฟั€ะพะตะบั‚ะฐ - -``` -LoChat/ # Root ะฟั€ะพะตะบั‚ะฐ -โ”œโ”€โ”€ src/main/ # LoChat (ะพัะฝะพะฒะฝะพะน ะผะพะดัƒะปัŒ) -โ”‚ โ”œโ”€โ”€ java/com/loki/lochat/ -โ”‚ โ”‚ โ”œโ”€โ”€ api/ # API ะธะฝั‚ะตั€ั„ะตะนัั‹ -โ”‚ โ”‚ โ”œโ”€โ”€ commands/ # ะšะพะผะฐะฝะดั‹ -โ”‚ โ”‚ โ”œโ”€โ”€ config/ # ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั -โ”‚ โ”‚ โ”œโ”€โ”€ core/ # ะ ะตะฐะปะธะทะฐั†ะธะธ -โ”‚ โ”‚ โ”œโ”€โ”€ gradient/ # ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ -โ”‚ โ”‚ โ”œโ”€โ”€ listener/ # ะกะปัƒัˆะฐั‚ะตะปะธ ัะพะฑั‹ั‚ะธะน -โ”‚ โ”‚ โ”œโ”€โ”€ utils/ # ะฃั‚ะธะปะธั‚ั‹ -โ”‚ โ”‚ โ””โ”€โ”€ LoChat.java # ะ“ะปะฐะฒะฝั‹ะน ะบะปะฐัั -โ”‚ โ””โ”€โ”€ resources/ # ะšะพะฝั„ะธะณะธ -โ”‚ -โ”œโ”€โ”€ lohub/ # LoHub ะผะพะดัƒะปัŒ -โ”‚ โ”œโ”€โ”€ src/main/ -โ”‚ โ”‚ โ”œโ”€โ”€ java/com/loki/lohub/ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ actions/ # Action ัะธัั‚ะตะผะฐ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ commands/ # ะšะพะผะฐะฝะดั‹ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ config/ # ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ listeners/ # ะกะปัƒัˆะฐั‚ะตะปะธ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ managers/ # ะœะตะฝะตะดะถะตั€ั‹ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ utils/ # ะฃั‚ะธะปะธั‚ั‹ -โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ LoHub.java # ะ“ะปะฐะฒะฝั‹ะน ะบะปะฐัั -โ”‚ โ”‚ โ””โ”€โ”€ resources/ # ะšะพะฝั„ะธะณะธ -โ”‚ โ””โ”€โ”€ build.gradle.kts # Gradle ะบะพะฝั„ะธะณ -โ”‚ -โ”œโ”€โ”€ lovelocity/ # LoVelocity ะผะพะดัƒะปัŒ -โ”‚ โ”œโ”€โ”€ src/main/ -โ”‚ โ”‚ โ””โ”€โ”€ java/com/loki/lovelocity/ -โ”‚ โ””โ”€โ”€ build.gradle.kts # Gradle ะบะพะฝั„ะธะณ -โ”‚ -โ”œโ”€โ”€ build.gradle.kts # Root Gradle (Kotlin DSL) -โ”œโ”€โ”€ settings.gradle.kts # ะะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะตะบั‚ะพะฒ -โ””โ”€โ”€ TODO.md # ะญั‚ะพั‚ ั„ะฐะนะป -``` - ---- - -## ๐ŸŽฏ ะขะตะบัƒั‰ะธะน ั„ะพะบัƒั - -**LoHub - ะญะขะะŸ 2: Action ัะธัั‚ะตะผะฐ** - -ะกะพะทะดะฐะฝะธะต ะณะธะฑะบะพะน ัะธัั‚ะตะผั‹ ะดะตะนัั‚ะฒะธะน ะดะปั ะฝะฐัั‚ั€ะพะนะบะธ ะฟะพะฒะตะดะตะฝะธั ั‡ะตั€ะตะท ะบะพะฝั„ะธะณ: - -```yaml -actions: - - "[MESSAGE] &aะŸั€ะธะฒะตั‚, %player%!" - - "[SOUND] ENTITY_PLAYER_LEVELUP" - - "[TITLE] &b&lะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ;&fะะฐ ัะตั€ะฒะตั€;1;3;1" - - "[COMMAND] spawn" - - "[CONSOLE] give %player% diamond 1" - - "[GAMEMODE] survival" - - "[EFFECT] SPEED;1" -``` - ---- - -## ๐Ÿ“ ะŸั€ะฐะฒะธะปะฐ ั€ะฐะทั€ะฐะฑะพั‚ะบะธ - -1. **ะะธะบะฐะบะพะณะพ ั€ัƒััะบะพะณะพ ั‚ะตะบัั‚ะฐ ะฒ Java ั„ะฐะนะปะฐั…** - ั‚ะพะปัŒะบะพ ะฒ ะบะพะฝั„ะธะณะฐั… -2. **ะฆะฒะตั‚ะฐ ั‚ะพะปัŒะบะพ ะฒ ั„ะพั€ะผะฐั‚ะต `&#RRGGBB`** - ัƒะฝะธั„ะธั†ะธั€ะพะฒะฐะฝะฝั‹ะน ัั‚ะธะปัŒ -3. **SOLID ะฟั€ะธะฝั†ะธะฟั‹** - ั‡ะธัั‚ะฐั ะฐั€ั…ะธั‚ะตะบั‚ัƒั€ะฐ -4. **ะšะปะฐััั‹ ะดะพ 100-150 ัั‚ั€ะพะบ** - ั‡ะธั‚ะฐะตะผะพัั‚ัŒ ะบะพะดะฐ -5. **Gradle Kotlin DSL** - ัะพะฒั€ะตะผะตะฝะฝั‹ะน ะฟะพะดั…ะพะด -6. **ะ‘ะตะท ะปะธัˆะฝะธั… MD ั„ะฐะนะปะพะฒ** - ั‚ะพะปัŒะบะพ TODO.md ะธ docs/ - ---- - -## ๐Ÿ”ง ะขะตั…ะฝะพะปะพะณะธะธ - -- **Java 17+** -- **Paper API 1.20.1** -- **Velocity API 3.3.0** -- **Gradle 9.1+ (Kotlin DSL)** -- **WorldGuard 7.0.9** -- **PlaceholderAPI 2.11.6** -- **LuckPerms API** diff --git a/lohub/build.gradle.kts b/lohub/build.gradle.kts deleted file mode 100644 index 5e315f3..0000000 --- a/lohub/build.gradle.kts +++ /dev/null @@ -1,49 +0,0 @@ -plugins { - java - checkstyle -} - -repositories { - mavenCentral() - maven("https://repo.papermc.io/repository/maven-public/") - maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") - maven("https://maven.enginehub.org/repo/") -} - -dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT") - compileOnly("me.clip:placeholderapi:2.11.6") - compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9") - implementation("com.google.code.gson:gson:2.10.1") - - testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.0") - testImplementation("org.mockito:mockito-core:5.11.0") - testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.10.0") -} - -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(21)) - } -} - -tasks.jar { - archiveFileName.set("LoHub-1.5.5-1.21.8.jar") - from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) - duplicatesStrategy = DuplicatesStrategy.EXCLUDE -} - -checkstyle { - toolVersion = "10.12.5" - configFile = file("${rootProject.rootDir}/config/checkstyle/checkstyle.xml") - isIgnoreFailures = false - maxWarnings = 0 -} - -tasks.withType { - reports { - xml.required.set(false) - html.required.set(true) - } -} diff --git a/lohub/src/main/java/com/loki/lohub/LoHub.java b/lohub/src/main/java/com/loki/lohub/LoHub.java deleted file mode 100644 index ee15901..0000000 --- a/lohub/src/main/java/com/loki/lohub/LoHub.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.loki.lohub; - -import com.loki.lohub.config.ConfigManager; -import com.loki.lohub.listeners.HubProtectionListener; -import com.loki.lohub.listeners.PlayerJoinListener; -import com.loki.lohub.managers.ActionManager; -import com.loki.lohub.managers.AnnouncementManager; -import com.loki.lohub.managers.ChatLockManager; -import com.loki.lohub.managers.CooldownManager; -import com.loki.lohub.managers.CustomCommandManager; -import com.loki.lohub.managers.HotbarManager; -import com.loki.lohub.managers.PlayerHiderManager; -import com.loki.lohub.managers.RegionManager; -import com.loki.lohub.managers.ScoreboardManager; -import com.loki.lohub.managers.SpawnManager; -import com.loki.lohub.managers.TablistManager; -import com.loki.lohub.utils.PlaceholderUtil; -import org.bukkit.plugin.java.JavaPlugin; - -public class LoHub extends JavaPlugin { - - private ConfigManager configManager; - private SpawnManager spawnManager; - private RegionManager regionManager; - private ActionManager actionManager; - private CooldownManager cooldownManager; - private HotbarManager hotbarManager; - private PlayerHiderManager playerHiderManager; - private ScoreboardManager scoreboardManager; - private TablistManager tablistManager; - private AnnouncementManager announcementManager; - private ChatLockManager chatLockManager; - private CustomCommandManager customCommandManager; - - @Override - public void onEnable() { - getLogger().info("Loading LoHub v" + getDescription().getVersion()); - - saveDefaultConfig(); - - PlaceholderUtil.init(); - - this.configManager = new ConfigManager(this); - this.spawnManager = new SpawnManager(this); - this.regionManager = new RegionManager(this); - this.actionManager = new ActionManager(this); - this.cooldownManager = new CooldownManager(); - this.hotbarManager = new HotbarManager(this); - this.playerHiderManager = new PlayerHiderManager(this); - this.scoreboardManager = new ScoreboardManager(this); - this.tablistManager = new TablistManager(this); - this.announcementManager = new AnnouncementManager(this); - this.chatLockManager = new ChatLockManager(this); - this.customCommandManager = new CustomCommandManager(this); - - registerListeners(); - registerCommands(); - registerPluginChannels(); - - regionManager.createHubRegion(); - - scoreboardManager.start(); - tablistManager.start(); - announcementManager.start(); - - getLogger().info("LoHub successfully loaded!"); - } - - @Override - public void onDisable() { - scoreboardManager.stop(); - tablistManager.stop(); - announcementManager.stop(); - getLogger().info("LoHub disabled!"); - } - - private void registerListeners() { - getServer().getPluginManager().registerEvents(new HubProtectionListener(this), this); - getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); - getServer().getPluginManager().registerEvents(new com.loki.lohub.listeners.HotbarListener(this), this); - getServer().getPluginManager().registerEvents(new com.loki.lohub.listeners.LaunchpadListener(this), this); - getServer().getPluginManager().registerEvents(new com.loki.lohub.listeners.DoubleJumpListener(this), this); - getServer().getPluginManager().registerEvents(new com.loki.lohub.listeners.ChatLockListener(this), this); - getServer().getPluginManager().registerEvents(new com.loki.lohub.listeners.CustomCommandListener(this), this); - } - - private void registerCommands() { - getCommand("hub").setExecutor(new com.loki.lohub.commands.HubCommand(this)); - getCommand("sethub").setExecutor(new com.loki.lohub.commands.SetHubCommand(this)); - getCommand("lohub").setExecutor(new com.loki.lohub.commands.LoHubCommand(this)); - getCommand("chatlock").setExecutor(new com.loki.lohub.commands.ChatLockCommand(this)); - } - - private void registerPluginChannels() { - getServer().getMessenger().registerIncomingPluginChannel( - this, - com.loki.lohub.listeners.ServerSwitchMessageListener.getChannel(), - new com.loki.lohub.listeners.ServerSwitchMessageListener(this) - ); - getLogger().info("Plugin messaging channels registered"); - } - - public ConfigManager getConfigManager() { - return configManager; - } - - public SpawnManager getSpawnManager() { - return spawnManager; - } - - public RegionManager getRegionManager() { - return regionManager; - } - - public ActionManager getActionManager() { - return actionManager; - } - - public CooldownManager getCooldownManager() { - return cooldownManager; - } - - public HotbarManager getHotbarManager() { - return hotbarManager; - } - - public PlayerHiderManager getPlayerHiderManager() { - return playerHiderManager; - } - - public ScoreboardManager getScoreboardManager() { - return scoreboardManager; - } - - public TablistManager getTablistManager() { - return tablistManager; - } - - public AnnouncementManager getAnnouncementManager() { - return announcementManager; - } - - public ChatLockManager getChatLockManager() { - return chatLockManager; - } - - public CustomCommandManager getCustomCommandManager() { - return customCommandManager; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/Action.java b/lohub/src/main/java/com/loki/lohub/actions/Action.java deleted file mode 100644 index 22dfc9e..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/Action.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.loki.lohub.actions; - -import org.bukkit.entity.Player; - -public interface Action { - - void execute(Player player); - - ActionType getType(); -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/ActionType.java b/lohub/src/main/java/com/loki/lohub/actions/ActionType.java deleted file mode 100644 index 8b59644..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/ActionType.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.loki.lohub.actions; - -public enum ActionType { - MESSAGE, - BROADCAST, - TITLE, - ACTIONBAR, - SOUND, - COMMAND, - CONSOLE, - GAMEMODE, - EFFECT, - CLOSE, - UNKNOWN; - - public static ActionType fromString(String type) { - try { - return valueOf(type.toUpperCase()); - } catch (IllegalArgumentException e) { - return UNKNOWN; - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/ActionbarAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/ActionbarAction.java deleted file mode 100644 index 57b0bba..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/ActionbarAction.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import com.loki.lohub.utils.TextUtil; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -public class ActionbarAction implements Action { - - private final String message; - - public ActionbarAction(String message) { - this.message = message; - } - - @Override - public void execute(Player player) { - String parsed = PlaceholderUtil.parse(message, player); - player.sendActionBar(Component.text(TextUtil.colorize(parsed))); - } - - @Override - public ActionType getType() { - return ActionType.ACTIONBAR; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/BroadcastAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/BroadcastAction.java deleted file mode 100644 index a051f45..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/BroadcastAction.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -public class BroadcastAction implements Action { - - private final String message; - - public BroadcastAction(String message) { - this.message = message; - } - - @Override - public void execute(Player player) { - String parsed = PlaceholderUtil.parse(message, player); - Bukkit.broadcastMessage(TextUtil.colorize(parsed)); - } - - @Override - public ActionType getType() { - return ActionType.BROADCAST; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/CloseAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/CloseAction.java deleted file mode 100644 index 1e3e77f..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/CloseAction.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import org.bukkit.entity.Player; - -public class CloseAction implements Action { - - @Override - public void execute(Player player) { - player.closeInventory(); - } - - @Override - public ActionType getType() { - return ActionType.CLOSE; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/CommandAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/CommandAction.java deleted file mode 100644 index 0c1acf2..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/CommandAction.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import org.bukkit.entity.Player; - -public class CommandAction implements Action { - - private final String command; - - public CommandAction(String command) { - this.command = command; - } - - @Override - public void execute(Player player) { - String parsed = PlaceholderUtil.parse(command, player); - player.performCommand(parsed); - } - - @Override - public ActionType getType() { - return ActionType.COMMAND; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/ConsoleAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/ConsoleAction.java deleted file mode 100644 index 663f25a..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/ConsoleAction.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -public class ConsoleAction implements Action { - - private final String command; - - public ConsoleAction(String command) { - this.command = command; - } - - @Override - public void execute(Player player) { - String parsed = PlaceholderUtil.parse(command, player); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), parsed); - } - - @Override - public ActionType getType() { - return ActionType.CONSOLE; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/EffectAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/EffectAction.java deleted file mode 100644 index 214be6e..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/EffectAction.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -public class EffectAction implements Action { - - private final PotionEffectType effectType; - private final int amplifier; - private final int duration; - - public EffectAction(String effectData) { - String[] parts = effectData.split(";"); - - PotionEffectType parsed; - try { - parsed = PotionEffectType.getByName(parts[0].toUpperCase()); - } catch (Exception e) { - parsed = PotionEffectType.SPEED; - } - - this.effectType = parsed != null ? parsed : PotionEffectType.SPEED; - this.amplifier = parts.length > 1 ? parseInt(parts[1], 0) : 0; - this.duration = parts.length > 2 ? parseInt(parts[2], 999999) : 999999; - } - - @Override - public void execute(Player player) { - player.addPotionEffect(new PotionEffect(effectType, duration * 20, amplifier, false, false)); - } - - @Override - public ActionType getType() { - return ActionType.EFFECT; - } - - private int parseInt(String value, int defaultValue) { - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - return defaultValue; - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/GamemodeAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/GamemodeAction.java deleted file mode 100644 index f200274..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/GamemodeAction.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; - -public class GamemodeAction implements Action { - - private final GameMode gameMode; - - public GamemodeAction(String mode) { - GameMode parsed; - try { - parsed = GameMode.valueOf(mode.toUpperCase()); - } catch (IllegalArgumentException e) { - parsed = switch (mode.toLowerCase()) { - case "0", "s" -> GameMode.SURVIVAL; - case "1", "c" -> GameMode.CREATIVE; - case "2", "a" -> GameMode.ADVENTURE; - case "3", "sp" -> GameMode.SPECTATOR; - default -> GameMode.SURVIVAL; - }; - } - this.gameMode = parsed; - } - - @Override - public void execute(Player player) { - player.setGameMode(gameMode); - } - - @Override - public ActionType getType() { - return ActionType.GAMEMODE; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/MessageAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/MessageAction.java deleted file mode 100644 index 93f99db..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/MessageAction.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.entity.Player; - -public class MessageAction implements Action { - - private final String message; - - public MessageAction(String message) { - this.message = message; - } - - @Override - public void execute(Player player) { - String parsed = PlaceholderUtil.parse(message, player); - player.sendMessage(TextUtil.colorize(parsed)); - } - - @Override - public ActionType getType() { - return ActionType.MESSAGE; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/SoundAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/SoundAction.java deleted file mode 100644 index e1e3cb5..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/SoundAction.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import org.bukkit.Sound; -import org.bukkit.entity.Player; - -public class SoundAction implements Action { - - private final Sound sound; - private final float volume; - private final float pitch; - - public SoundAction(String soundData) { - String[] parts = soundData.split(";"); - - Sound parsedSound; - try { - String soundName = parts[0].toUpperCase().trim(); - parsedSound = Sound.valueOf(soundName); - } catch (IllegalArgumentException e) { - try { - parsedSound = Sound.ENTITY_EXPERIENCE_ORB_PICKUP; - } catch (NoSuchFieldError ex) { - parsedSound = Sound.valueOf("ENTITY_EXPERIENCE_ORB_PICKUP"); - } - } - - this.sound = parsedSound; - this.volume = parts.length > 1 ? parseFloat(parts[1], 1.0f) : 1.0f; - this.pitch = parts.length > 2 ? parseFloat(parts[2], 1.0f) : 1.0f; - } - - @Override - public void execute(Player player) { - if (player != null && sound != null) { - player.playSound(player.getLocation(), sound, volume, pitch); - } - } - - @Override - public ActionType getType() { - return ActionType.SOUND; - } - - private float parseFloat(String value, float defaultValue) { - try { - return Float.parseFloat(value); - } catch (NumberFormatException e) { - return defaultValue; - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/actions/impl/TitleAction.java b/lohub/src/main/java/com/loki/lohub/actions/impl/TitleAction.java deleted file mode 100644 index c253897..0000000 --- a/lohub/src/main/java/com/loki/lohub/actions/impl/TitleAction.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.loki.lohub.actions.impl; - -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.utils.PlaceholderUtil; -import com.loki.lohub.utils.TextUtil; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.title.Title; -import org.bukkit.entity.Player; - -import java.time.Duration; - -public class TitleAction implements Action { - - private final String title; - private final String subtitle; - private final int fadeIn; - private final int stay; - private final int fadeOut; - - public TitleAction(String titleData) { - String[] parts = titleData.split(";"); - - this.title = parts.length > 0 ? parts[0] : ""; - this.subtitle = parts.length > 1 ? parts[1] : ""; - this.fadeIn = parts.length > 2 ? parseInt(parts[2], 10) : 10; - this.stay = parts.length > 3 ? parseInt(parts[3], 40) : 40; - this.fadeOut = parts.length > 4 ? parseInt(parts[4], 10) : 10; - } - - @Override - public void execute(Player player) { - String parsedTitle = PlaceholderUtil.parse(title, player); - String parsedSubtitle = PlaceholderUtil.parse(subtitle, player); - - Component titleComponent = Component.text(TextUtil.colorize(parsedTitle)); - Component subtitleComponent = Component.text(TextUtil.colorize(parsedSubtitle)); - - Title.Times times = Title.Times.times( - Duration.ofMillis(fadeIn * 50L), - Duration.ofMillis(stay * 50L), - Duration.ofMillis(fadeOut * 50L) - ); - - Title title = Title.title(titleComponent, subtitleComponent, times); - player.showTitle(title); - } - - @Override - public ActionType getType() { - return ActionType.TITLE; - } - - private int parseInt(String value, int defaultValue) { - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - return defaultValue; - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/commands/ChatLockCommand.java b/lohub/src/main/java/com/loki/lohub/commands/ChatLockCommand.java deleted file mode 100644 index 8db3389..0000000 --- a/lohub/src/main/java/com/loki/lohub/commands/ChatLockCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.loki.lohub.commands; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; - -public class ChatLockCommand implements CommandExecutor { - - private final LoHub plugin; - - public ChatLockCommand(LoHub plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!sender.hasPermission("lohub.chatlock")) { - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.no-permission"))); - return true; - } - - plugin.getChatLockManager().toggle(); - boolean locked = plugin.getChatLockManager().isChatLocked(); - - String message = locked - ? plugin.getConfigManager().getMessage("chat.lock-enabled") - : plugin.getConfigManager().getMessage("chat.lock-disabled"); - - sender.sendMessage(TextUtil.colorize(message)); - return true; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/commands/HubCommand.java b/lohub/src/main/java/com/loki/lohub/commands/HubCommand.java deleted file mode 100644 index ccb8ffb..0000000 --- a/lohub/src/main/java/com/loki/lohub/commands/HubCommand.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.loki.lohub.commands; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HubCommand implements CommandExecutor { - - private final LoHub plugin; - - public HubCommand(LoHub plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!(sender instanceof Player player)) { - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.players-only"))); - return true; - } - - if (plugin.getSpawnManager().getSpawn() == null) { - player.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("spawn.no-spawn"))); - return true; - } - - plugin.getSpawnManager().teleportToSpawn(player); - player.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("spawn.teleport"))); - - return true; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/commands/LoHubCommand.java b/lohub/src/main/java/com/loki/lohub/commands/LoHubCommand.java deleted file mode 100644 index fa070fc..0000000 --- a/lohub/src/main/java/com/loki/lohub/commands/LoHubCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.loki.lohub.commands; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class LoHubCommand implements CommandExecutor { - - private final LoHub plugin; - - public LoHubCommand(LoHub plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!sender.hasPermission("lohub.admin")) { - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.no-permission"))); - return true; - } - - if (args.length == 0) { - sender.sendMessage(TextUtil.colorize("&7LoHub v" + plugin.getDescription().getVersion())); - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("commands.usage-lohub"))); - return true; - } - - if (args[0].equalsIgnoreCase("reload")) { - plugin.getConfigManager().reload(); - plugin.getHotbarManager().reload(); - plugin.getAnnouncementManager().reload(); - plugin.getScoreboardManager().stop(); - plugin.getTablistManager().stop(); - plugin.getScoreboardManager().start(); - plugin.getTablistManager().start(); - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.config-reloaded"))); - return true; - } - - return true; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/commands/SetHubCommand.java b/lohub/src/main/java/com/loki/lohub/commands/SetHubCommand.java deleted file mode 100644 index 3a08660..0000000 --- a/lohub/src/main/java/com/loki/lohub/commands/SetHubCommand.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.loki.lohub.commands; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class SetHubCommand implements CommandExecutor { - - private final LoHub plugin; - - public SetHubCommand(LoHub plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!(sender instanceof Player player)) { - sender.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.players-only"))); - return true; - } - - if (!player.hasPermission("lohub.admin")) { - player.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("general.no-permission"))); - return true; - } - - plugin.getSpawnManager().setSpawn(player.getLocation()); - player.sendMessage(TextUtil.colorize(plugin.getConfigManager().getMessage("spawn.set"))); - - plugin.getRegionManager().deleteHubRegion(); - plugin.getRegionManager().createHubRegion(); - - return true; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/common/ConfigHelper.java b/lohub/src/main/java/com/loki/lohub/common/ConfigHelper.java deleted file mode 100644 index 20085f8..0000000 --- a/lohub/src/main/java/com/loki/lohub/common/ConfigHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.loki.lohub.common; - -import org.bukkit.configuration.file.FileConfiguration; - -public final class ConfigHelper { - - private ConfigHelper() { - } - - public static boolean isEnabled(FileConfiguration config, String path) { - return config.getBoolean(path + ".enabled", true); - } - - public static double getPower(FileConfiguration config, String path, String key, double defaultValue) { - return config.getDouble(path + "." + key, defaultValue); - } - - public static int getCooldown(FileConfiguration config, String path, int defaultValue) { - return config.getInt(path + ".cooldown", defaultValue); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/common/GameModeHelper.java b/lohub/src/main/java/com/loki/lohub/common/GameModeHelper.java deleted file mode 100644 index d3ac389..0000000 --- a/lohub/src/main/java/com/loki/lohub/common/GameModeHelper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.loki.lohub.common; - -import org.bukkit.GameMode; -import org.bukkit.entity.Player; - -public final class GameModeHelper { - - private GameModeHelper() { - } - - public static boolean isCreativeOrSpectator(Player player) { - GameMode mode = player.getGameMode(); - return mode == GameMode.CREATIVE || mode == GameMode.SPECTATOR; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/common/LaunchHelper.java b/lohub/src/main/java/com/loki/lohub/common/LaunchHelper.java deleted file mode 100644 index 714641d..0000000 --- a/lohub/src/main/java/com/loki/lohub/common/LaunchHelper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.loki.lohub.common; - -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -public final class LaunchHelper { - - private LaunchHelper() { - } - - public static void launch(Player player, double power, double powerY) { - Vector velocity = player.getLocation().getDirection().multiply(power); - velocity.setY(powerY); - player.setVelocity(velocity); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/common/TextFormatter.java b/lohub/src/main/java/com/loki/lohub/common/TextFormatter.java deleted file mode 100644 index 23efa9b..0000000 --- a/lohub/src/main/java/com/loki/lohub/common/TextFormatter.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.loki.lohub.common; - -import com.loki.lohub.utils.PlaceholderUtil; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.stream.Collectors; - -public final class TextFormatter { - - private TextFormatter() { - } - - public static String format(String text, Player player) { - return TextUtil.colorize(PlaceholderUtil.parse(text, player)); - } - - public static String joinLines(List lines, Player player, String separator) { - return lines.stream() - .map(line -> format(line, player)) - .collect(Collectors.joining(separator)); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/config/ConfigManager.java b/lohub/src/main/java/com/loki/lohub/config/ConfigManager.java deleted file mode 100644 index fabd37f..0000000 --- a/lohub/src/main/java/com/loki/lohub/config/ConfigManager.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.loki.lohub.config; - -import com.loki.lohub.LoHub; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; - -public class ConfigManager { - - private final LoHub plugin; - private FileConfiguration config; - private FileConfiguration messages; - private FileConfiguration commands; - private FileConfiguration serverSelector; - private FileConfiguration data; - private File messagesFile; - private File commandsFile; - private File serverSelectorFile; - private File dataFile; - - public ConfigManager(LoHub plugin) { - this.plugin = plugin; - this.config = plugin.getConfig(); - loadMessages(); - loadCommands(); - loadServerSelector(); - loadData(); - } - - private void loadMessages() { - messagesFile = new File(plugin.getDataFolder(), "messages.yml"); - - if (!messagesFile.exists()) { - try { - messagesFile.getParentFile().mkdirs(); - InputStream in = plugin.getResource("messages.yml"); - if (in != null) { - Files.copy(in, messagesFile.toPath()); - } - } catch (IOException e) { - plugin.getLogger().severe("Could not create messages.yml!"); - e.printStackTrace(); - } - } - - messages = YamlConfiguration.loadConfiguration(messagesFile); - } - - private void loadCommands() { - commandsFile = new File(plugin.getDataFolder(), "commands.yml"); - - if (!commandsFile.exists()) { - try { - commandsFile.getParentFile().mkdirs(); - InputStream in = plugin.getResource("commands.yml"); - if (in != null) { - Files.copy(in, commandsFile.toPath()); - } - } catch (IOException e) { - plugin.getLogger().severe("Could not create commands.yml!"); - e.printStackTrace(); - } - } - - commands = YamlConfiguration.loadConfiguration(commandsFile); - } - - private void loadServerSelector() { - serverSelectorFile = new File(plugin.getDataFolder(), "serverselector.yml"); - - if (!serverSelectorFile.exists()) { - try { - serverSelectorFile.getParentFile().mkdirs(); - InputStream in = plugin.getResource("serverselector.yml"); - if (in != null) { - Files.copy(in, serverSelectorFile.toPath()); - } - } catch (IOException e) { - plugin.getLogger().severe("Could not create serverselector.yml!"); - e.printStackTrace(); - } - } - - serverSelector = YamlConfiguration.loadConfiguration(serverSelectorFile); - } - - private void loadData() { - dataFile = new File(plugin.getDataFolder(), "data.yml"); - - if (!dataFile.exists()) { - try { - dataFile.getParentFile().mkdirs(); - InputStream in = plugin.getResource("data.yml"); - if (in != null) { - Files.copy(in, dataFile.toPath()); - } - } catch (IOException e) { - plugin.getLogger().severe("Could not create data.yml!"); - e.printStackTrace(); - } - } - - data = YamlConfiguration.loadConfiguration(dataFile); - } - - public void reload() { - plugin.reloadConfig(); - this.config = plugin.getConfig(); - loadMessages(); - loadCommands(); - loadServerSelector(); - loadData(); - } - - public FileConfiguration getConfig() { - return config; - } - - public FileConfiguration getMessages() { - return messages; - } - - public FileConfiguration getCommands() { - return commands; - } - - public FileConfiguration getServerSelector() { - return serverSelector; - } - - public FileConfiguration getData() { - return data; - } - - public void saveData() { - try { - data.save(dataFile); - } catch (IOException e) { - plugin.getLogger().severe("Could not save data.yml!"); - e.printStackTrace(); - } - } - - public String getMessage(String path) { - String message = messages.getString(path, "&#FF6B6BMessage not found: " + path); - String prefix = messages.getString("prefix", "�D4FF[LoHub] "); - return message.replace("{prefix}", prefix); - } - - public boolean isProtectionEnabled() { - return config.getBoolean("protection.enabled", true); - } - - public boolean isBlockBreakProtected() { - return config.getBoolean("protection.block-break", true); - } - - public boolean isBlockPlaceProtected() { - return config.getBoolean("protection.block-place", true); - } - - public boolean isPvPProtected() { - return config.getBoolean("protection.pvp", true); - } - - public boolean isItemDropProtected() { - return config.getBoolean("protection.item-drop", true); - } - - public boolean isItemPickupProtected() { - return config.getBoolean("protection.item-pickup", true); - } - - public boolean isFoodLevelProtected() { - return config.getBoolean("protection.food-level", true); - } - - public boolean isMobSpawningProtected() { - return config.getBoolean("protection.mob-spawning", true); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/features/FireworkHandler.java b/lohub/src/main/java/com/loki/lohub/features/FireworkHandler.java deleted file mode 100644 index d5e3fff..0000000 --- a/lohub/src/main/java/com/loki/lohub/features/FireworkHandler.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.loki.lohub.features; - -import org.bukkit.Color; -import org.bukkit.FireworkEffect; -import org.bukkit.Location; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Firework; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.FireworkMeta; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public final class FireworkHandler { - - private static final Map COLOR_MAP = new HashMap<>(); - private static final String CONFIG_PATH = "join_settings.firework"; - - static { - COLOR_MAP.put("AQUA", Color.AQUA); - COLOR_MAP.put("BLACK", Color.BLACK); - COLOR_MAP.put("BLUE", Color.BLUE); - COLOR_MAP.put("FUCHSIA", Color.FUCHSIA); - COLOR_MAP.put("GRAY", Color.GRAY); - COLOR_MAP.put("GREEN", Color.GREEN); - COLOR_MAP.put("LIME", Color.LIME); - COLOR_MAP.put("MAROON", Color.MAROON); - COLOR_MAP.put("NAVY", Color.NAVY); - COLOR_MAP.put("OLIVE", Color.OLIVE); - COLOR_MAP.put("ORANGE", Color.ORANGE); - COLOR_MAP.put("PURPLE", Color.PURPLE); - COLOR_MAP.put("RED", Color.RED); - COLOR_MAP.put("SILVER", Color.SILVER); - COLOR_MAP.put("TEAL", Color.TEAL); - COLOR_MAP.put("WHITE", Color.WHITE); - COLOR_MAP.put("YELLOW", Color.YELLOW); - } - - private FireworkHandler() { - } - - public static void spawn(Player player, FileConfiguration config) { - if (!config.getBoolean(CONFIG_PATH + ".enabled", false)) { - return; - } - - if (shouldSkip(player, config)) { - return; - } - - Location loc = player.getLocation(); - Firework firework = (Firework) loc.getWorld().spawnEntity(loc, EntityType.FIREWORK_ROCKET); - FireworkMeta meta = firework.getFireworkMeta(); - - meta.addEffect(buildEffect(config)); - meta.setPower(config.getInt(CONFIG_PATH + ".power", 1)); - firework.setFireworkMeta(meta); - } - - private static boolean shouldSkip(Player player, FileConfiguration config) { - boolean firstJoinOnly = config.getBoolean(CONFIG_PATH + ".first_join_only", true); - return firstJoinOnly && player.hasPlayedBefore(); - } - - private static FireworkEffect buildEffect(FileConfiguration config) { - FireworkEffect.Type type = getType(config); - List colors = getColors(config); - - return FireworkEffect.builder() - .with(type) - .withColor(colors) - .flicker(config.getBoolean(CONFIG_PATH + ".flicker", true)) - .trail(config.getBoolean(CONFIG_PATH + ".trail", true)) - .build(); - } - - private static FireworkEffect.Type getType(FileConfiguration config) { - String typeStr = config.getString(CONFIG_PATH + ".type", "BALL_LARGE"); - try { - return FireworkEffect.Type.valueOf(typeStr); - } catch (IllegalArgumentException e) { - return FireworkEffect.Type.BALL_LARGE; - } - } - - private static List getColors(FileConfiguration config) { - List colors = new ArrayList<>(); - for (String colorStr : config.getStringList(CONFIG_PATH + ".colors")) { - Color color = COLOR_MAP.get(colorStr.toUpperCase()); - if (color != null) { - colors.add(color); - } - } - - if (colors.isEmpty()) { - colors.add(Color.AQUA); - } - - return colors; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/features/JoinMessageHandler.java b/lohub/src/main/java/com/loki/lohub/features/JoinMessageHandler.java deleted file mode 100644 index d43fb13..0000000 --- a/lohub/src/main/java/com/loki/lohub/features/JoinMessageHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.loki.lohub.features; - -import com.loki.lohub.utils.TextUtil; -import net.kyori.adventure.text.Component; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public final class JoinMessageHandler { - - private static final String CONFIG_PATH = "join_leave_messages"; - - private JoinMessageHandler() { - } - - public static void handleJoin(PlayerJoinEvent event, Player player, FileConfiguration config) { - if (!config.getBoolean(CONFIG_PATH + ".enabled", true)) { - return; - } - - String message = config.getString(CONFIG_PATH + ".join_message", ""); - if (message.isEmpty()) { - event.joinMessage(null); - } else { - String formatted = TextUtil.colorize(message.replace("%player%", player.getName())); - event.joinMessage(Component.text(formatted)); - } - } - - public static void handleQuit(PlayerQuitEvent event, Player player, FileConfiguration config) { - if (!config.getBoolean(CONFIG_PATH + ".enabled", true)) { - return; - } - - String message = config.getString(CONFIG_PATH + ".quit_message", ""); - if (message.isEmpty()) { - event.quitMessage(null); - } else { - String formatted = TextUtil.colorize(message.replace("%player%", player.getName())); - event.quitMessage(Component.text(formatted)); - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/features/JoinSettingsHandler.java b/lohub/src/main/java/com/loki/lohub/features/JoinSettingsHandler.java deleted file mode 100644 index 126b1de..0000000 --- a/lohub/src/main/java/com/loki/lohub/features/JoinSettingsHandler.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.loki.lohub.features; - -import com.loki.lohub.LoHub; -import org.bukkit.Location; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; - -public final class JoinSettingsHandler { - - private static final String CONFIG_PATH = "join_settings"; - - private JoinSettingsHandler() { - } - - public static void apply(Player player, LoHub plugin) { - FileConfiguration config = plugin.getConfig(); - - teleportToSpawn(player, plugin, config); - healPlayer(player, config); - extinguishPlayer(player, config); - clearInventory(player, config); - giveItems(player, plugin); - } - - private static void teleportToSpawn(Player player, LoHub plugin, FileConfiguration config) { - if (!config.getBoolean(CONFIG_PATH + ".spawn_join", true)) { - return; - } - - Location spawn = plugin.getSpawnManager().getSpawn(); - if (spawn != null) { - player.teleport(spawn); - } - } - - private static void healPlayer(Player player, FileConfiguration config) { - if (!config.getBoolean(CONFIG_PATH + ".heal", true)) { - return; - } - - player.setHealth(player.getMaxHealth()); - player.setFoodLevel(20); - player.setSaturation(20); - } - - private static void extinguishPlayer(Player player, FileConfiguration config) { - if (config.getBoolean(CONFIG_PATH + ".extinguish", true)) { - player.setFireTicks(0); - } - } - - private static void clearInventory(Player player, FileConfiguration config) { - if (config.getBoolean(CONFIG_PATH + ".clear_inventory", false)) { - player.getInventory().clear(); - } - } - - private static void giveItems(Player player, LoHub plugin) { - plugin.getHotbarManager().giveItems(player); - plugin.getPlayerHiderManager().giveItem(player); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/ChatLockListener.java b/lohub/src/main/java/com/loki/lohub/listeners/ChatLockListener.java deleted file mode 100644 index ba94113..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/ChatLockListener.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import java.util.Arrays; -import java.util.List; - -public class ChatLockListener implements Listener { - - private static final List BLOCKED_COMMANDS = Arrays.asList( - "me", "msg", "tell", "w", "whisper", "pm", "dm", - "reply", "r", "say", "minecraft:me", "minecraft:msg", - "minecraft:tell", "bukkit:me", "bukkit:msg", "bukkit:tell" - ); - - private final LoHub plugin; - - public ChatLockListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerChat(AsyncPlayerChatEvent event) { - if (!plugin.getChatLockManager().isChatLocked()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.chatlock.bypass")) { - return; - } - - event.setCancelled(true); - player.sendMessage(Component.text(TextUtil.colorize(plugin.getConfigManager().getMessage("chat.locked")))); - } - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerCommand(PlayerCommandPreprocessEvent event) { - if (!plugin.getChatLockManager().isChatLocked()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.chatlock.bypass")) { - return; - } - - String command = event.getMessage().toLowerCase().substring(1); - String baseCommand = command.split(" ")[0]; - - if (isBlockedCommand(baseCommand)) { - event.setCancelled(true); - player.sendMessage(Component.text(TextUtil.colorize(plugin.getConfigManager().getMessage("chat.locked")))); - } - } - - private boolean isBlockedCommand(String command) { - return BLOCKED_COMMANDS.stream().anyMatch(blocked -> command.equals(blocked)); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/CustomCommandListener.java b/lohub/src/main/java/com/loki/lohub/listeners/CustomCommandListener.java deleted file mode 100644 index 6c0ce94..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/CustomCommandListener.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import com.loki.lohub.managers.CustomCommandManager; -import com.loki.lohub.utils.TextUtil; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -public class CustomCommandListener implements Listener { - - private final LoHub plugin; - - public CustomCommandListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerCommand(PlayerCommandPreprocessEvent event) { - Player player = event.getPlayer(); - String message = event.getMessage().toLowerCase(); - - if (!message.startsWith("/")) { - return; - } - - String command = message.substring(1).split(" ")[0]; - CustomCommandManager.CustomCommand customCommand = plugin.getCustomCommandManager().getCommand(command); - - if (customCommand == null) { - return; - } - - event.setCancelled(true); - - if (customCommand.permission() != null && !customCommand.permission().isEmpty()) { - if (!player.hasPermission(customCommand.permission())) { - player.sendMessage(TextUtil.colorize(plugin.getConfig().getString("messages.no-permission"))); - return; - } - } - - plugin.getActionManager().executeActions(player, customCommand.actions(), false); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/DoubleJumpListener.java b/lohub/src/main/java/com/loki/lohub/listeners/DoubleJumpListener.java deleted file mode 100644 index 68c4e5d..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/DoubleJumpListener.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import com.loki.lohub.common.ConfigHelper; -import com.loki.lohub.common.GameModeHelper; -import com.loki.lohub.common.LaunchHelper; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerToggleFlightEvent; - -import java.util.List; - -public class DoubleJumpListener implements Listener { - - private static final String CONFIG_PATH = "double_jump"; - private static final String COOLDOWN_KEY = "double_jump"; - - private final LoHub plugin; - - public DoubleJumpListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerMove(PlayerMoveEvent event) { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - Player player = event.getPlayer(); - - if (GameModeHelper.isCreativeOrSpectator(player)) { - return; - } - - if (!player.isOnGround() && !player.getAllowFlight()) { - player.setAllowFlight(true); - } else if (player.isOnGround() && player.getAllowFlight()) { - player.setAllowFlight(false); - player.setFlying(false); - } - } - - @EventHandler - public void onPlayerToggleFlight(PlayerToggleFlightEvent event) { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - Player player = event.getPlayer(); - - if (GameModeHelper.isCreativeOrSpectator(player)) { - return; - } - - if (plugin.getCooldownManager().hasCooldown(COOLDOWN_KEY, player.getUniqueId())) { - cancelFlight(event, player); - return; - } - - cancelFlight(event, player); - performDoubleJump(player); - } - - private void cancelFlight(PlayerToggleFlightEvent event, Player player) { - event.setCancelled(true); - player.setAllowFlight(false); - player.setFlying(false); - } - - private void performDoubleJump(Player player) { - double power = ConfigHelper.getPower(plugin.getConfig(), CONFIG_PATH, "launch_power", 1.0); - double powerY = ConfigHelper.getPower(plugin.getConfig(), CONFIG_PATH, "launch_power_y", 0.9); - - LaunchHelper.launch(player, power, powerY); - - int cooldown = ConfigHelper.getCooldown(plugin.getConfig(), CONFIG_PATH, 3); - plugin.getCooldownManager().setCooldown(COOLDOWN_KEY, player.getUniqueId(), cooldown); - - executeActions(player); - } - - private void executeActions(Player player) { - List actions = plugin.getConfig().getStringList(CONFIG_PATH + ".actions"); - if (!actions.isEmpty()) { - plugin.getActionManager().executeActions(player, actions, false); - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/HotbarListener.java b/lohub/src/main/java/com/loki/lohub/listeners/HotbarListener.java deleted file mode 100644 index 57fedaa..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/HotbarListener.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; - -public class HotbarListener implements Listener { - - private final LoHub plugin; - - public HotbarListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) { - return; - } - - Player player = event.getPlayer(); - int slot = player.getInventory().getHeldItemSlot(); - - if (plugin.getPlayerHiderManager().isPlayerHiderSlot(slot)) { - event.setCancelled(true); - - if (plugin.getCooldownManager().hasCooldown("player_hider", player.getUniqueId())) { - return; - } - - int cooldown = plugin.getConfig().getInt("player_hider.cooldown", 3); - plugin.getCooldownManager().setCooldown("player_hider", player.getUniqueId(), cooldown); - - plugin.getPlayerHiderManager().toggle(player); - } else if (plugin.getHotbarManager().isHotbarItem(slot)) { - event.setCancelled(true); - plugin.getHotbarManager().handleClick(player, slot); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) { - if (!plugin.getConfig().getBoolean("custom_join_items.disable_inventory_movement", true)) { - return; - } - - Player player = event.getPlayer(); - int slot = player.getInventory().getHeldItemSlot(); - - if (plugin.getHotbarManager().isHotbarItem(slot) || plugin.getPlayerHiderManager().isPlayerHiderSlot(slot)) { - event.setCancelled(true); - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/HubProtectionListener.java b/lohub/src/main/java/com/loki/lohub/listeners/HubProtectionListener.java deleted file mode 100644 index 4cb6335..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/HubProtectionListener.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; - -public class HubProtectionListener implements Listener { - - private final LoHub plugin; - - public HubProtectionListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - if (plugin.getConfig().getBoolean("spawn.teleport-on-join", true)) { - plugin.getSpawnManager().teleportToSpawn(event.getPlayer()); - } - } - - @EventHandler - public void onBlockBreak(BlockBreakEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isBlockBreakProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isBlockPlaceProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onPvP(EntityDamageByEntityEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - if (!(event.getDamager() instanceof Player)) { - return; - } - if (!(event.getEntity() instanceof Player)) { - return; - } - - Player damager = (Player) event.getDamager(); - if (damager.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isPvPProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onItemDrop(PlayerDropItemEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isItemDropProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onItemPickup(PlayerPickupItemEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isItemPickupProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onFoodLevelChange(FoodLevelChangeEvent event) { - if (!plugin.getConfigManager().isProtectionEnabled()) { - return; - } - if (!(event.getEntity() instanceof Player)) { - return; - } - - Player player = (Player) event.getEntity(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (plugin.getConfigManager().isFoodLevelProtected()) { - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { - if (!plugin.getConfig().getBoolean("world_settings.disable_off_hand_swap", true)) { - return; - } - - Player player = event.getPlayer(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - event.setCancelled(true); - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent event) { - if (!plugin.getConfig().getBoolean("world_settings.disable_off_hand_swap", true)) { - return; - } - - if (!(event.getWhoClicked() instanceof Player)) { - return; - } - - Player player = (Player) event.getWhoClicked(); - if (player.hasPermission("lohub.bypass.protection")) { - return; - } - - if (event.getRawSlot() != event.getSlot() && event.getSlot() == 40) { - event.setCancelled(true); - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/LaunchpadListener.java b/lohub/src/main/java/com/loki/lohub/listeners/LaunchpadListener.java deleted file mode 100644 index a233790..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/LaunchpadListener.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import com.loki.lohub.common.ConfigHelper; -import com.loki.lohub.common.LaunchHelper; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -import java.util.List; - -public class LaunchpadListener implements Listener { - - private static final String CONFIG_PATH = "launchpad"; - - private final LoHub plugin; - - public LaunchpadListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerMove(PlayerMoveEvent event) { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - if (!hasMoved(event)) { - return; - } - - Player player = event.getPlayer(); - Block block = player.getLocation().getBlock(); - - if (isLaunchpad(block)) { - launchPlayer(player); - } - } - - private boolean hasMoved(PlayerMoveEvent event) { - return event.getFrom().getBlockX() != event.getTo().getBlockX() - || event.getFrom().getBlockY() != event.getTo().getBlockY() - || event.getFrom().getBlockZ() != event.getTo().getBlockZ(); - } - - private boolean isLaunchpad(Block block) { - Material topMaterial = getMaterial("top_block", "STONE_PRESSURE_PLATE"); - Material bottomMaterial = getMaterial("bottom_block", "REDSTONE_BLOCK"); - - if (topMaterial == null || bottomMaterial == null) { - return false; - } - - if (block.getType() != topMaterial) { - return false; - } - - Block below = block.getRelative(0, -1, 0); - return below.getType() == bottomMaterial; - } - - private Material getMaterial(String key, String defaultValue) { - String materialName = plugin.getConfig().getString(CONFIG_PATH + "." + key, defaultValue); - return Material.getMaterial(materialName); - } - - private void launchPlayer(Player player) { - double power = ConfigHelper.getPower(plugin.getConfig(), CONFIG_PATH, "launch_power", 3.0); - double powerY = ConfigHelper.getPower(plugin.getConfig(), CONFIG_PATH, "launch_power_y", 1.0); - - LaunchHelper.launch(player, power, powerY); - executeActions(player); - } - - private void executeActions(Player player) { - List actions = plugin.getConfig().getStringList(CONFIG_PATH + ".actions"); - if (!actions.isEmpty()) { - plugin.getActionManager().executeActions(player, actions, false); - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/PlayerJoinListener.java b/lohub/src/main/java/com/loki/lohub/listeners/PlayerJoinListener.java deleted file mode 100644 index ac42700..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/PlayerJoinListener.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.loki.lohub.listeners; - -import com.loki.lohub.LoHub; -import com.loki.lohub.features.FireworkHandler; -import com.loki.lohub.features.JoinMessageHandler; -import com.loki.lohub.features.JoinSettingsHandler; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; - -import java.util.List; - -public class PlayerJoinListener implements Listener { - - private final LoHub plugin; - - public PlayerJoinListener(LoHub plugin) { - this.plugin = plugin; - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - - if (isWorldDisabled(player.getWorld().getName())) { - return; - } - - JoinMessageHandler.handleJoin(event, player, plugin.getConfig()); - JoinSettingsHandler.apply(player, plugin); - executeJoinActions(player); - FireworkHandler.spawn(player, plugin.getConfig()); - - plugin.getScoreboardManager().setScoreboard(player, true); - plugin.getTablistManager().setTablist(player); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - - if (isWorldDisabled(player.getWorld().getName())) { - return; - } - - plugin.getPlayerHiderManager().removePlayer(player); - plugin.getScoreboardManager().removePlayer(player); - - JoinMessageHandler.handleQuit(event, player, plugin.getConfig()); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerRespawn(PlayerRespawnEvent event) { - Player player = event.getPlayer(); - - if (isWorldDisabled(player.getWorld().getName())) { - return; - } - - if (plugin.getConfig().getBoolean("spawn.teleport-on-respawn", true)) { - Location spawn = plugin.getSpawnManager().getSpawn(); - if (spawn != null) { - event.setRespawnLocation(spawn); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerDeath(PlayerDeathEvent event) { - if (isWorldDisabled(event.getPlayer().getWorld().getName())) { - return; - } - - if (plugin.getConfig().getBoolean("world_settings.disable_death_message", true)) { - event.deathMessage(null); - } - } - - private void executeJoinActions(Player player) { - List actions = plugin.getConfig().getStringList("join_events"); - if (!actions.isEmpty()) { - plugin.getActionManager().executeActions(player, actions, false); - } - } - - private boolean isWorldDisabled(String worldName) { - List disabledWorlds = plugin.getConfig().getStringList("disabled-worlds.worlds"); - boolean invert = plugin.getConfig().getBoolean("disabled-worlds.invert", false); - boolean isInList = disabledWorlds.contains(worldName); - - return invert ? !isInList : isInList; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/listeners/ServerSwitchMessageListener.java b/lohub/src/main/java/com/loki/lohub/listeners/ServerSwitchMessageListener.java deleted file mode 100644 index f65881d..0000000 --- a/lohub/src/main/java/com/loki/lohub/listeners/ServerSwitchMessageListener.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.loki.lohub.listeners; - -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.TextUtil; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.messaging.PluginMessageListener; -import org.jetbrains.annotations.NotNull; - -public class ServerSwitchMessageListener implements PluginMessageListener { - - private final LoHub plugin; - private static final String CHANNEL = "lohub:switch"; - - public ServerSwitchMessageListener(LoHub plugin) { - this.plugin = plugin; - } - - @Override - public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte @NotNull [] message) { - if (!channel.equals(CHANNEL)) { - return; - } - - ByteArrayDataInput in = ByteStreams.newDataInput(message); - String subChannel = in.readUTF(); - - if (subChannel.equals("ServerSwitch")) { - String playerName = in.readUTF(); - String fromServer = in.readUTF(); - String toServer = in.readUTF(); - - handleServerSwitch(playerName, fromServer, toServer); - } - } - - private void handleServerSwitch(String playerName, String fromServer, String toServer) { - if (!plugin.getConfig().getBoolean("server_switch_messages.enabled", true)) { - return; - } - - String messageTemplate = plugin.getConfig().getString("server_switch_messages.switch_message", - "&#FFD700%player% &#AAAAAA connected to BCB77%server%"); - - String serverDisplayName = getServerDisplayName(toServer); - String formattedMessage = messageTemplate - .replace("%player%", playerName) - .replace("%server%", serverDisplayName); - - Component component = Component.text(TextUtil.colorize(formattedMessage)); - Bukkit.broadcast(component); - } - - private String getServerDisplayName(String serverName) { - String path = "server_switch_messages.server_names." + serverName; - return plugin.getConfig().getString(path, serverName); - } - - public static String getChannel() { - return CHANNEL; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/ActionManager.java b/lohub/src/main/java/com/loki/lohub/managers/ActionManager.java deleted file mode 100644 index d6b3c69..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/ActionManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.actions.Action; -import com.loki.lohub.actions.ActionType; -import com.loki.lohub.actions.impl.ActionbarAction; -import com.loki.lohub.actions.impl.BroadcastAction; -import com.loki.lohub.actions.impl.CloseAction; -import com.loki.lohub.actions.impl.CommandAction; -import com.loki.lohub.actions.impl.ConsoleAction; -import com.loki.lohub.actions.impl.EffectAction; -import com.loki.lohub.actions.impl.GamemodeAction; -import com.loki.lohub.actions.impl.MessageAction; -import com.loki.lohub.actions.impl.SoundAction; -import com.loki.lohub.actions.impl.TitleAction; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class ActionManager { - - private static final Pattern ACTION_PATTERN = Pattern.compile("\\[([A-Z]+)]\\s*(.*)"); - private final LoHub plugin; - - public ActionManager(LoHub plugin) { - this.plugin = plugin; - } - - public List parseActions(List actionStrings) { - List actions = new ArrayList<>(); - - for (String actionString : actionStrings) { - Action action = parseAction(actionString); - if (action != null) { - actions.add(action); - } - } - - return actions; - } - - public Action parseAction(String actionString) { - if (actionString == null || actionString.isEmpty()) { - return null; - } - - Matcher matcher = ACTION_PATTERN.matcher(actionString); - if (!matcher.matches()) { - plugin.getLogger().warning("Invalid action format: " + actionString); - return null; - } - - String typeStr = matcher.group(1); - String data = matcher.group(2); - - ActionType type = ActionType.fromString(typeStr); - - return switch (type) { - case MESSAGE -> new MessageAction(data); - case BROADCAST -> new BroadcastAction(data); - case TITLE -> new TitleAction(data); - case ACTIONBAR -> new ActionbarAction(data); - case SOUND -> new SoundAction(data); - case COMMAND -> new CommandAction(data); - case CONSOLE -> new ConsoleAction(data); - case GAMEMODE -> new GamemodeAction(data); - case EFFECT -> new EffectAction(data); - case CLOSE -> new CloseAction(); - default -> { - plugin.getLogger().warning("Unknown action type: " + typeStr); - yield null; - } - }; - } - - public void executeActions(Player player, List actions) { - for (Action action : actions) { - try { - action.execute(player); - } catch (Exception e) { - plugin.getLogger().severe("Error executing action " + action.getType() + ": " + e.getMessage()); - e.printStackTrace(); - } - } - } - - public void executeActions(Player player, List actionStrings, boolean parse) { - if (parse) { - List actions = parseActions(actionStrings); - executeActions(player, actions); - } else { - for (String actionString : actionStrings) { - Action action = parseAction(actionString); - if (action != null) { - try { - action.execute(player); - } catch (Exception e) { - plugin.getLogger().severe("Error executing action: " + e.getMessage()); - } - } - } - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/AnnouncementManager.java b/lohub/src/main/java/com/loki/lohub/managers/AnnouncementManager.java deleted file mode 100644 index b84bdac..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/AnnouncementManager.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.common.ConfigHelper; -import com.loki.lohub.common.TextFormatter; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Sound; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class AnnouncementManager { - - private static final String CONFIG_PATH = "announcements"; - - private final LoHub plugin; - private final List announcements = new ArrayList<>(); - private int currentIndex = 0; - private int taskId = -1; - - public AnnouncementManager(LoHub plugin) { - this.plugin = plugin; - loadAnnouncements(); - } - - private void loadAnnouncements() { - announcements.clear(); - ConfigurationSection section = plugin.getConfig().getConfigurationSection(CONFIG_PATH + ".announcements"); - if (section == null) { - return; - } - - section.getKeys(false).forEach(key -> { - List messages = section.getStringList(key); - if (!messages.isEmpty()) { - announcements.add(new Announcement(key, messages)); - } - }); - } - - public void start() { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - if (announcements.isEmpty()) { - return; - } - - int delay = plugin.getConfig().getInt(CONFIG_PATH + ".delay", 60) * 20; - taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, this::broadcast, delay, delay); - } - - public void stop() { - if (taskId != -1) { - Bukkit.getScheduler().cancelTask(taskId); - taskId = -1; - } - } - - private void broadcast() { - if (!hasEnoughPlayers()) { - return; - } - - if (announcements.isEmpty()) { - return; - } - - Announcement announcement = getNextAnnouncement(); - Bukkit.getOnlinePlayers().forEach(player -> sendAnnouncement(player, announcement)); - } - - private boolean hasEnoughPlayers() { - int required = plugin.getConfig().getInt(CONFIG_PATH + ".required_players", 1); - return Bukkit.getOnlinePlayers().size() >= required; - } - - private Announcement getNextAnnouncement() { - Announcement announcement = announcements.get(currentIndex); - currentIndex = (currentIndex + 1) % announcements.size(); - return announcement; - } - - private void sendAnnouncement(Player player, Announcement announcement) { - announcement.messages().forEach(message -> { - String formatted = TextFormatter.format(message, player); - player.sendMessage(Component.text(formatted)); - }); - - if (shouldPlaySound()) { - playSound(player); - } - } - - private boolean shouldPlaySound() { - return plugin.getConfig().getBoolean(CONFIG_PATH + ".sound.enabled", true); - } - - private void playSound(Player player) { - String soundStr = plugin.getConfig().getString(CONFIG_PATH + ".sound.value", "BLOCK_NOTE_BLOCK_PLING"); - float volume = (float) plugin.getConfig().getDouble(CONFIG_PATH + ".sound.volume", 1.0); - float pitch = (float) plugin.getConfig().getDouble(CONFIG_PATH + ".sound.pitch", 1.0); - - try { - Sound sound = Sound.valueOf(soundStr); - player.playSound(player.getLocation(), sound, volume, pitch); - } catch (IllegalArgumentException e) { - plugin.getLogger().warning("Invalid sound: " + soundStr); - } - } - - public void reload() { - stop(); - loadAnnouncements(); - start(); - } - - private record Announcement(String name, List messages) { - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/ChatLockManager.java b/lohub/src/main/java/com/loki/lohub/managers/ChatLockManager.java deleted file mode 100644 index a6c5576..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/ChatLockManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; - -public class ChatLockManager { - - private final LoHub plugin; - - public ChatLockManager(LoHub plugin) { - this.plugin = plugin; - } - - public boolean isChatLocked() { - return plugin.getConfigManager().getData().getBoolean("chat_locked", false); - } - - public void setChatLocked(boolean locked) { - plugin.getConfigManager().getData().set("chat_locked", locked); - plugin.getConfigManager().saveData(); - } - - public void toggle() { - setChatLocked(!isChatLocked()); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/CooldownManager.java b/lohub/src/main/java/com/loki/lohub/managers/CooldownManager.java deleted file mode 100644 index fd99ba3..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/CooldownManager.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.loki.lohub.managers; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class CooldownManager { - - private final Map> cooldowns = new HashMap<>(); - - public void setCooldown(String key, UUID playerId, int seconds) { - cooldowns.computeIfAbsent(key, k -> new HashMap<>()) - .put(playerId, System.currentTimeMillis() + (seconds * 1000L)); - } - - public boolean hasCooldown(String key, UUID playerId) { - Map keyCooldowns = cooldowns.get(key); - if (keyCooldowns == null) { - return false; - } - - Long expireTime = keyCooldowns.get(playerId); - if (expireTime == null) { - return false; - } - - if (System.currentTimeMillis() >= expireTime) { - keyCooldowns.remove(playerId); - return false; - } - - return true; - } - - public int getRemainingSeconds(String key, UUID playerId) { - Map keyCooldowns = cooldowns.get(key); - if (keyCooldowns == null) { - return 0; - } - - Long expireTime = keyCooldowns.get(playerId); - if (expireTime == null) { - return 0; - } - - long remaining = expireTime - System.currentTimeMillis(); - return remaining > 0 ? (int) (remaining / 1000) : 0; - } - - public void removeCooldown(String key, UUID playerId) { - Map keyCooldowns = cooldowns.get(key); - if (keyCooldowns != null) { - keyCooldowns.remove(playerId); - } - } - - public void clearAll() { - cooldowns.clear(); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/CustomCommandManager.java b/lohub/src/main/java/com/loki/lohub/managers/CustomCommandManager.java deleted file mode 100644 index 1d640e0..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/CustomCommandManager.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import org.bukkit.configuration.ConfigurationSection; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class CustomCommandManager { - - private final LoHub plugin; - private final Map commands = new HashMap<>(); - - public CustomCommandManager(LoHub plugin) { - this.plugin = plugin; - loadCommands(); - } - - private void loadCommands() { - commands.clear(); - ConfigurationSection section = plugin.getConfigManager().getCommands().getConfigurationSection("custom_commands"); - if (section == null) { - return; - } - - for (String key : section.getKeys(false)) { - ConfigurationSection cmdSection = section.getConfigurationSection(key); - if (cmdSection == null) { - continue; - } - - List aliases = cmdSection.getStringList("aliases"); - String permission = cmdSection.getString("permission"); - List actions = cmdSection.getStringList("actions"); - - if (aliases.isEmpty() || actions.isEmpty()) { - continue; - } - - CustomCommand cmd = new CustomCommand(key, aliases, permission, actions); - for (String alias : aliases) { - commands.put(alias.toLowerCase(), cmd); - } - } - } - - public CustomCommand getCommand(String alias) { - return commands.get(alias.toLowerCase()); - } - - public boolean hasCommand(String alias) { - return commands.containsKey(alias.toLowerCase()); - } - - public void reload() { - loadCommands(); - } - - public record CustomCommand(String name, List aliases, String permission, List actions) { - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/HotbarManager.java b/lohub/src/main/java/com/loki/lohub/managers/HotbarManager.java deleted file mode 100644 index 8e6ed55..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/HotbarManager.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.ItemBuilder; -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class HotbarManager { - - private static final String CONFIG_PATH = "custom_join_items"; - - private final LoHub plugin; - private final Map items = new HashMap<>(); - - public HotbarManager(LoHub plugin) { - this.plugin = plugin; - loadItems(); - } - - private void loadItems() { - items.clear(); - ConfigurationSection section = plugin.getConfig().getConfigurationSection(CONFIG_PATH + ".items"); - if (section == null) { - return; - } - - for (String key : section.getKeys(false)) { - loadItem(section.getConfigurationSection(key)); - } - } - - private void loadItem(ConfigurationSection itemSection) { - if (itemSection == null) { - return; - } - - Material material = getMaterial(itemSection); - if (material == null) { - return; - } - - int slot = itemSection.getInt("slot", 0); - ItemStack item = buildItem(itemSection, material); - List actions = itemSection.getStringList("actions"); - - items.put(slot, new HotbarItem(item, actions)); - } - - private Material getMaterial(ConfigurationSection section) { - String materialName = section.getString("material", "STONE"); - return Material.getMaterial(materialName); - } - - private ItemStack buildItem(ConfigurationSection section, Material material) { - int amount = section.getInt("amount", 1); - String displayName = section.getString("display_name", ""); - List lore = section.getStringList("lore"); - - return new ItemBuilder(material) - .amount(amount) - .name(displayName) - .lore(lore) - .build(); - } - - public void giveItems(Player player) { - if (!isEnabled()) { - return; - } - - items.forEach((slot, item) -> player.getInventory().setItem(slot, item.item())); - } - - public void handleClick(Player player, int slot) { - HotbarItem item = items.get(slot); - if (item == null) { - return; - } - - plugin.getActionManager().executeActions(player, item.actions(), false); - } - - public boolean isHotbarItem(int slot) { - return items.containsKey(slot); - } - - public void reload() { - loadItems(); - } - - private boolean isEnabled() { - return plugin.getConfig().getBoolean(CONFIG_PATH + ".enabled", false); - } - - private record HotbarItem(ItemStack item, List actions) { - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/PlayerHiderManager.java b/lohub/src/main/java/com/loki/lohub/managers/PlayerHiderManager.java deleted file mode 100644 index 5917e44..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/PlayerHiderManager.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.utils.ItemBuilder; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; - -public class PlayerHiderManager { - - private static final String CONFIG_PATH = "player_hider"; - private static final String HIDDEN_PATH = CONFIG_PATH + ".hidden"; - private static final String NOT_HIDDEN_PATH = CONFIG_PATH + ".not_hidden"; - - private final LoHub plugin; - private final Set hiddenPlayers = new HashSet<>(); - - public PlayerHiderManager(LoHub plugin) { - this.plugin = plugin; - } - - public void giveItem(Player player) { - if (!isEnabled()) { - return; - } - - player.getInventory().setItem(getSlot(), getItem(player)); - } - - public ItemStack getItem(Player player) { - boolean hidden = isHidden(player); - String path = hidden ? HIDDEN_PATH : NOT_HIDDEN_PATH; - - Material material = getMaterial(path); - int amount = plugin.getConfig().getInt(path + ".amount", 1); - String displayName = plugin.getConfig().getString(path + ".display_name", ""); - List lore = plugin.getConfig().getStringList(path + ".lore"); - - return new ItemBuilder(material) - .amount(amount) - .name(displayName) - .lore(lore) - .build(); - } - - public void toggle(Player player) { - if (isHidden(player)) { - showPlayers(player); - } else { - hidePlayers(player); - } - - updateItem(player); - } - - private void hidePlayers(Player player) { - hiddenPlayers.add(player.getUniqueId()); - applyVisibility(player, false); - } - - private void showPlayers(Player player) { - hiddenPlayers.remove(player.getUniqueId()); - applyVisibility(player, true); - } - - private void applyVisibility(Player player, boolean visible) { - for (Player online : Bukkit.getOnlinePlayers()) { - if (!online.equals(player)) { - if (visible) { - player.showPlayer(plugin, online); - } else { - player.hidePlayer(plugin, online); - } - } - } - } - - private void updateItem(Player player) { - player.getInventory().setItem(getSlot(), getItem(player)); - } - - public boolean isPlayerHiderSlot(int slot) { - return isEnabled() && slot == getSlot(); - } - - public void removePlayer(Player player) { - hiddenPlayers.remove(player.getUniqueId()); - } - - private boolean isEnabled() { - return plugin.getConfig().getBoolean(CONFIG_PATH + ".enabled", true); - } - - private int getSlot() { - return plugin.getConfig().getInt(CONFIG_PATH + ".slot", 8); - } - - private boolean isHidden(Player player) { - return hiddenPlayers.contains(player.getUniqueId()); - } - - private Material getMaterial(String path) { - String materialName = plugin.getConfig().getString(path + ".material", "LIME_DYE"); - Material material = Material.getMaterial(materialName); - return material != null ? material : Material.LIME_DYE; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/RegionManager.java b/lohub/src/main/java/com/loki/lohub/managers/RegionManager.java deleted file mode 100644 index 62ce09b..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/RegionManager.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldedit.math.BlockVector3; -import com.sk89q.worldguard.WorldGuard; -import com.sk89q.worldguard.protection.flags.Flags; -import com.sk89q.worldguard.protection.flags.StateFlag; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import com.sk89q.worldguard.protection.regions.RegionContainer; -import org.bukkit.Location; -import org.bukkit.World; - -public class RegionManager { - - private static final String HUB_REGION_NAME = "lohub_spawn"; - private final LoHub plugin; - - public RegionManager(LoHub plugin) { - this.plugin = plugin; - } - - public void createHubRegion() { - if (!plugin.getConfig().getBoolean("worldguard.auto-create-region", true)) { - plugin.getLogger().info("WorldGuard region auto-creation is disabled"); - return; - } - - if (!isWorldGuardAvailable()) { - plugin.getLogger().warning("WorldGuard not found! Region will not be created."); - return; - } - - Location spawn = plugin.getSpawnManager().getSpawn(); - if (spawn == null || spawn.getWorld() == null) { - plugin.getLogger().warning("Spawn not set! Use /sethub"); - return; - } - - World world = spawn.getWorld(); - int radius = plugin.getConfig().getInt("worldguard.region-radius", 100); - - try { - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - com.sk89q.worldguard.protection.managers.RegionManager wgRegionManager = container.get(BukkitAdapter.adapt(world)); - - if (wgRegionManager == null) { - plugin.getLogger().warning("Failed to get RegionManager for world " + world.getName()); - return; - } - - ProtectedRegion existingRegion = wgRegionManager.getRegion(HUB_REGION_NAME); - if (existingRegion != null) { - plugin.getLogger().info("Region '" + HUB_REGION_NAME + "' already exists"); - return; - } - - BlockVector3 min = BlockVector3.at( - spawn.getBlockX() - radius, - world.getMinHeight(), - spawn.getBlockZ() - radius - ); - - BlockVector3 max = BlockVector3.at( - spawn.getBlockX() + radius, - world.getMaxHeight(), - spawn.getBlockZ() + radius - ); - - ProtectedCuboidRegion region = new ProtectedCuboidRegion(HUB_REGION_NAME, min, max); - setRegionFlags(region); - - wgRegionManager.addRegion(region); - - plugin.getLogger().info("Region '" + HUB_REGION_NAME + "' created around spawn (radius: " + radius + " blocks)"); - plugin.getLogger().info("Coordinates: " + min + " -> " + max); - - } catch (Exception e) { - plugin.getLogger().severe("Error creating WorldGuard region: " + e.getMessage()); - e.printStackTrace(); - } - } - - private void setRegionFlags(ProtectedCuboidRegion region) { - region.setFlag(Flags.PVP, StateFlag.State.DENY); - region.setFlag(Flags.BLOCK_BREAK, StateFlag.State.DENY); - region.setFlag(Flags.BLOCK_PLACE, StateFlag.State.DENY); - region.setFlag(Flags.DAMAGE_ANIMALS, StateFlag.State.DENY); - region.setFlag(Flags.MOB_SPAWNING, StateFlag.State.DENY); - region.setFlag(Flags.LEAF_DECAY, StateFlag.State.DENY); - region.setFlag(Flags.ITEM_DROP, StateFlag.State.DENY); - region.setFlag(Flags.ITEM_PICKUP, StateFlag.State.DENY); - } - - public void deleteHubRegion() { - if (!isWorldGuardAvailable()) { - return; - } - - Location spawn = plugin.getSpawnManager().getSpawn(); - if (spawn == null || spawn.getWorld() == null) { - return; - } - - try { - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - com.sk89q.worldguard.protection.managers.RegionManager wgRegionManager = container.get(BukkitAdapter.adapt(spawn.getWorld())); - - if (wgRegionManager != null) { - wgRegionManager.removeRegion(HUB_REGION_NAME); - plugin.getLogger().info("Region '" + HUB_REGION_NAME + "' deleted"); - } - } catch (Exception e) { - plugin.getLogger().severe("Error deleting region: " + e.getMessage()); - } - } - - private boolean isWorldGuardAvailable() { - try { - Class.forName("com.sk89q.worldguard.WorldGuard"); - return plugin.getServer().getPluginManager().isPluginEnabled("WorldGuard"); - } catch (ClassNotFoundException e) { - return false; - } - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/ScoreboardManager.java b/lohub/src/main/java/com/loki/lohub/managers/ScoreboardManager.java deleted file mode 100644 index fd44319..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/ScoreboardManager.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.common.ConfigHelper; -import com.loki.lohub.common.TextFormatter; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -public class ScoreboardManager { - - private static final String CONFIG_PATH = "scoreboard"; - private static final String OBJECTIVE_NAME = "lohub"; - private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.legacySection(); - - private final LoHub plugin; - private final Map scoreboards = new HashMap<>(); - private int taskId = -1; - - public ScoreboardManager(LoHub plugin) { - this.plugin = plugin; - } - - public void start() { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - if (shouldRefresh()) { - int rate = plugin.getConfig().getInt(CONFIG_PATH + ".refresh.rate", 200); - taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, this::updateAll, 0L, rate); - } - } - - public void stop() { - if (taskId != -1) { - Bukkit.getScheduler().cancelTask(taskId); - taskId = -1; - } - scoreboards.clear(); - } - - public void setScoreboard(Player player, boolean delayed) { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - if (delayed) { - int delay = plugin.getConfig().getInt(CONFIG_PATH + ".display_delay.server_enter", 60); - Bukkit.getScheduler().runTaskLater(plugin, () -> createScoreboard(player), delay); - } else { - createScoreboard(player); - } - } - - private void createScoreboard(Player player) { - Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); - Objective objective = scoreboard.registerNewObjective(OBJECTIVE_NAME, "dummy", Component.text("")); - - objective.setDisplaySlot(DisplaySlot.SIDEBAR); - updateScoreboard(player, scoreboard, objective); - - player.setScoreboard(scoreboard); - scoreboards.put(player.getUniqueId(), scoreboard); - } - - private void updateScoreboard(Player player, Scoreboard scoreboard, Objective objective) { - updateTitle(player, objective); - updateLines(player, scoreboard, objective); - } - - private void updateTitle(Player player, Objective objective) { - String title = plugin.getConfig().getString(CONFIG_PATH + ".title", ""); - objective.displayName(SERIALIZER.deserialize(TextFormatter.format(title, player))); - } - - private void updateLines(Player player, Scoreboard scoreboard, Objective objective) { - List lines = plugin.getConfig().getStringList(CONFIG_PATH + ".lines"); - int score = lines.size(); - - for (String line : lines) { - String formatted = TextFormatter.format(line, player); - String teamName = "line_" + score; - - Team team = getOrCreateTeam(scoreboard, teamName); - team.prefix(SERIALIZER.deserialize(formatted)); - objective.getScore(teamName).setScore(score); - score--; - } - } - - private Team getOrCreateTeam(Scoreboard scoreboard, String teamName) { - Team team = scoreboard.getTeam(teamName); - if (team == null) { - team = scoreboard.registerNewTeam(teamName); - team.addEntry(teamName); - } - return team; - } - - private void updateAll() { - scoreboards.forEach((uuid, scoreboard) -> { - Player player = Bukkit.getPlayer(uuid); - if (player != null) { - Objective objective = scoreboard.getObjective(OBJECTIVE_NAME); - if (objective != null) { - updateScoreboard(player, scoreboard, objective); - } - } - }); - } - - public void removePlayer(Player player) { - scoreboards.remove(player.getUniqueId()); - } - - private boolean shouldRefresh() { - return plugin.getConfig().getBoolean(CONFIG_PATH + ".refresh.enabled", true); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/SpawnManager.java b/lohub/src/main/java/com/loki/lohub/managers/SpawnManager.java deleted file mode 100644 index 14ef5a4..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/SpawnManager.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -public class SpawnManager { - - private final LoHub plugin; - - public SpawnManager(LoHub plugin) { - this.plugin = plugin; - } - - public Location getSpawn() { - String worldName = plugin.getConfigManager().getData().getString("spawn.world"); - if (worldName == null || worldName.equals("null")) { - return null; - } - - World world = Bukkit.getWorld(worldName); - if (world == null) { - plugin.getLogger().warning("World '" + worldName + "' not found!"); - return null; - } - - double x = plugin.getConfigManager().getData().getDouble("spawn.x"); - double y = plugin.getConfigManager().getData().getDouble("spawn.y"); - double z = plugin.getConfigManager().getData().getDouble("spawn.z"); - float yaw = (float) plugin.getConfigManager().getData().getDouble("spawn.yaw"); - float pitch = (float) plugin.getConfigManager().getData().getDouble("spawn.pitch"); - - return new Location(world, x, y, z, yaw, pitch); - } - - public void setSpawn(Location location) { - plugin.getConfigManager().getData().set("spawn.world", location.getWorld().getName()); - plugin.getConfigManager().getData().set("spawn.x", location.getX()); - plugin.getConfigManager().getData().set("spawn.y", location.getY()); - plugin.getConfigManager().getData().set("spawn.z", location.getZ()); - plugin.getConfigManager().getData().set("spawn.yaw", location.getYaw()); - plugin.getConfigManager().getData().set("spawn.pitch", location.getPitch()); - plugin.getConfigManager().saveData(); - - plugin.getLogger().info("Spawn set: " + location.getWorld().getName() + - " (" + location.getBlockX() + ", " + location.getBlockY() + ", " + location.getBlockZ() + ")"); - } - - public void teleportToSpawn(Player player) { - Location spawn = getSpawn(); - if (spawn == null) { - return; - } - - player.teleport(spawn); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/managers/TablistManager.java b/lohub/src/main/java/com/loki/lohub/managers/TablistManager.java deleted file mode 100644 index af72aaf..0000000 --- a/lohub/src/main/java/com/loki/lohub/managers/TablistManager.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.loki.lohub.managers; - -import com.loki.lohub.LoHub; -import com.loki.lohub.common.ConfigHelper; -import com.loki.lohub.common.TextFormatter; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; - -public class TablistManager { - - private static final String CONFIG_PATH = "tablist"; - private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.legacySection(); - - private final LoHub plugin; - private int taskId = -1; - - public TablistManager(LoHub plugin) { - this.plugin = plugin; - } - - public void start() { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - if (shouldRefresh()) { - int rate = plugin.getConfig().getInt(CONFIG_PATH + ".refresh.rate", 400); - taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, this::updateAll, 0L, rate); - } - } - - public void stop() { - if (taskId != -1) { - Bukkit.getScheduler().cancelTask(taskId); - taskId = -1; - } - } - - public void setTablist(Player player) { - if (!ConfigHelper.isEnabled(plugin.getConfig(), CONFIG_PATH)) { - return; - } - - updateTablist(player); - } - - private void updateTablist(Player player) { - String header = formatLines(CONFIG_PATH + ".header", player); - String footer = formatLines(CONFIG_PATH + ".footer", player); - - player.sendPlayerListHeaderAndFooter( - SERIALIZER.deserialize(header), - SERIALIZER.deserialize(footer) - ); - } - - private String formatLines(String path, Player player) { - List lines = plugin.getConfig().getStringList(path); - return TextFormatter.joinLines(lines, player, "\n"); - } - - private void updateAll() { - Bukkit.getOnlinePlayers().forEach(this::updateTablist); - } - - private boolean shouldRefresh() { - return plugin.getConfig().getBoolean(CONFIG_PATH + ".refresh.enabled", true); - } -} diff --git a/lohub/src/main/java/com/loki/lohub/utils/ItemBuilder.java b/lohub/src/main/java/com/loki/lohub/utils/ItemBuilder.java deleted file mode 100644 index e7bae2f..0000000 --- a/lohub/src/main/java/com/loki/lohub/utils/ItemBuilder.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.loki.lohub.utils; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; - -import java.util.List; -import java.util.stream.Collectors; - -public class ItemBuilder { - - private final ItemStack itemStack; - - public ItemBuilder(Material material) { - this.itemStack = new ItemStack(material); - } - - public ItemBuilder(ItemStack itemStack) { - this.itemStack = itemStack.clone(); - } - - public static ItemBuilder fromConfig(ConfigurationSection section) { - return fromConfig(section, null); - } - - public static ItemBuilder fromConfig(ConfigurationSection section, Player player) { - String materialName = section.getString("material", "STONE").toUpperCase(); - Material material; - - try { - material = Material.valueOf(materialName); - } catch (IllegalArgumentException e) { - material = Material.STONE; - } - - ItemBuilder builder = new ItemBuilder(material); - - if (section.contains("amount")) { - builder.amount(section.getInt("amount", 1)); - } - - if (section.contains("display_name")) { - String name = section.getString("display_name"); - builder.name(player != null ? PlaceholderUtil.parse(name, player) : name); - } - - if (section.contains("lore")) { - List lore = section.getStringList("lore"); - builder.lore(player != null ? - lore.stream().map(line -> PlaceholderUtil.parse(line, player)).collect(Collectors.toList()) : - lore); - } - - if (section.contains("glow") && section.getBoolean("glow")) { - builder.glow(); - } - - if (section.contains("custom_model_data")) { - builder.customModelData(section.getInt("custom_model_data")); - } - - if (section.contains("item_flags")) { - section.getStringList("item_flags").forEach(flagName -> { - try { - builder.flag(ItemFlag.valueOf(flagName.toUpperCase())); - } catch (IllegalArgumentException ignored) { - } - }); - } - - if (material == Material.PLAYER_HEAD && section.contains("skull_owner")) { - String owner = section.getString("skull_owner"); - builder.skullOwner(player != null ? owner.replace("%player%", player.getName()) : owner); - } - - return builder; - } - - public ItemBuilder amount(int amount) { - itemStack.setAmount(Math.max(1, amount)); - return this; - } - - public ItemBuilder name(String name) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null) { - meta.displayName(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection() - .deserialize(TextUtil.colorize(name))); - itemStack.setItemMeta(meta); - } - return this; - } - - public ItemBuilder lore(List lore) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null) { - List coloredLore = lore.stream() - .map(line -> net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection() - .deserialize(TextUtil.colorize(line))) - .collect(Collectors.toList()); - meta.lore(coloredLore); - itemStack.setItemMeta(meta); - } - return this; - } - - public ItemBuilder lore(String... lines) { - return lore(List.of(lines)); - } - - public ItemBuilder flag(ItemFlag... flags) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null) { - meta.addItemFlags(flags); - itemStack.setItemMeta(meta); - } - return this; - } - - public ItemBuilder glow() { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null) { - meta.addEnchant(Enchantment.UNBREAKING, 1, true); - meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemStack.setItemMeta(meta); - } - return this; - } - - public ItemBuilder customModelData(int data) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null) { - meta.setCustomModelData(data); - itemStack.setItemMeta(meta); - } - return this; - } - - public ItemBuilder skullOwner(String owner) { - if (itemStack.getType() == Material.PLAYER_HEAD) { - SkullMeta meta = (SkullMeta) itemStack.getItemMeta(); - if (meta != null) { - meta.setOwner(owner); - itemStack.setItemMeta(meta); - } - } - return this; - } - - public ItemStack build() { - return itemStack; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/utils/PlaceholderUtil.java b/lohub/src/main/java/com/loki/lohub/utils/PlaceholderUtil.java deleted file mode 100644 index 191fce2..0000000 --- a/lohub/src/main/java/com/loki/lohub/utils/PlaceholderUtil.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.loki.lohub.utils; - -import me.clip.placeholderapi.PlaceholderAPI; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Player; - -public class PlaceholderUtil { - - private static boolean placeholderAPIEnabled = false; - - private PlaceholderUtil() { - // Utility class - prevent instantiation - } - - public static void init() { - placeholderAPIEnabled = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI"); - } - - public static String parse(String text, Player player) { - if (text == null) { - return ""; - } - - text = parseInternalPlaceholders(text, player); - - if (placeholderAPIEnabled && player != null) { - text = PlaceholderAPI.setPlaceholders(player, text); - } - - return text; - } - - private static String parseInternalPlaceholders(String text, Player player) { - if (player != null) { - text = text.replace("%player%", player.getName()); - text = text.replace("%player_displayname%", player.getDisplayName()); - - if (text.contains("%location%")) { - Location loc = player.getLocation(); - text = text.replace("%location%", - loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ()); - } - - if (text.contains("%world%")) { - text = text.replace("%world%", player.getWorld().getName()); - } - } - - text = text.replace("%online%", String.valueOf(Bukkit.getOnlinePlayers().size())); - text = text.replace("%online_max%", String.valueOf(Bukkit.getMaxPlayers())); - - return text; - } - - public static boolean isPlaceholderAPIEnabled() { - return placeholderAPIEnabled; - } -} diff --git a/lohub/src/main/java/com/loki/lohub/utils/TextUtil.java b/lohub/src/main/java/com/loki/lohub/utils/TextUtil.java deleted file mode 100644 index 542ecc9..0000000 --- a/lohub/src/main/java/com/loki/lohub/utils/TextUtil.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.loki.lohub.utils; - -import net.md_5.bungee.api.ChatColor; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -public class TextUtil { - - private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})"); - - private TextUtil() { - // Utility class - prevent instantiation - } - - public static String colorize(String text) { - if (text == null || text.isEmpty()) { - return text; - } - - text = translateHexCodes(text); - text = ChatColor.translateAlternateColorCodes('&', text); - - return text; - } - - public static List colorize(List lines) { - return lines.stream() - .map(TextUtil::colorize) - .collect(Collectors.toList()); - } - - private static String translateHexCodes(String text) { - Matcher matcher = HEX_PATTERN.matcher(text); - StringBuffer buffer = new StringBuffer(); - - while (matcher.find()) { - String hexCode = matcher.group(1); - String replacement = ChatColor.of("#" + hexCode).toString(); - matcher.appendReplacement(buffer, replacement); - } - - matcher.appendTail(buffer); - return buffer.toString(); - } - - public static String strip(String text) { - return ChatColor.stripColor(text); - } - - public static String joinFrom(int startIndex, String[] args) { - if (args == null || startIndex >= args.length) { - return ""; - } - - StringBuilder builder = new StringBuilder(); - for (int i = startIndex; i < args.length; i++) { - builder.append(args[i]); - if (i < args.length - 1) { - builder.append(" "); - } - } - - return builder.toString(); - } - - public static String listToString(List list) { - if (list == null || list.isEmpty()) { - return ""; - } - - return String.join("\n", list); - } -} diff --git a/lohub/src/main/resources/commands.yml b/lohub/src/main/resources/commands.yml deleted file mode 100644 index 6d97226..0000000 --- a/lohub/src/main/resources/commands.yml +++ /dev/null @@ -1,105 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Custom Commands Configuration โ•‘ -# โ•‘ Create custom commands with actions โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -# -# ACTIONS: -# [MESSAGE] text - Send message to player -# [BROADCAST] text - Broadcast to all players -# [TITLE] title;subtitle;fadeIn;stay;fadeOut - Send title -# [ACTIONBAR] text - Send actionbar message -# [SOUND] sound - Play sound -# [COMMAND] command - Execute as player -# [CONSOLE] command - Execute as console -# [GAMEMODE] mode - Change gamemode -# [EFFECT] effect;level - Give potion effect -# [CLOSE] - Close inventory -# -# PLACEHOLDERS: -# %player% - Player name -# %player_displayname% - Player display name -# %online% - Online players count -# %online_max% - Max players -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CUSTOM COMMANDS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -custom_commands: - # Discord command - discord: - aliases: - - discord - - ะดะธัะบะพั€ะด - - ds - permission: null # null = no permission required - actions: - - "[MESSAGE] B59B6Discord: &#FFFFFFdiscord.example.net" - - "[SOUND] BLOCK_NOTE_BLOCK_PLING" - - # Website command - website: - aliases: - - website - - site - - ัะฐะนั‚ - - web - permission: null - actions: - - "[MESSAGE] �D4FFWebsite: &#FFFFFFwww.example.net" - - "[SOUND] BLOCK_NOTE_BLOCK_PLING" - - # Store command - store: - aliases: - - store - - shop - - ะผะฐะณะฐะทะธะฝ - - ะดะพะฝะฐั‚ - permission: null - actions: - - "[MESSAGE] &#FF6B6BStore: &#FFFFFFstore.example.net" - - "[SOUND] BLOCK_NOTE_BLOCK_PLING" - - # Clear inventory command (admin only) - clearinventory: - aliases: - - ci - - clearinv - - ะพั‡ะธัั‚ะธั‚ัŒะธะฝะฒ - permission: lohub.admin - actions: - - "[CONSOLE] minecraft:clear %player%" - - "[MESSAGE] {prefix}BCB77Your inventory has been cleared!" - - "[SOUND] ENTITY_ITEM_PICKUP" - - # Heal command (admin only) - heal: - aliases: - - heal - - ั…ะธะป - permission: lohub.admin - actions: - - "[CONSOLE] minecraft:effect give %player% minecraft:instant_health 1 10 true" - - "[CONSOLE] minecraft:effect give %player% minecraft:saturation 1 10 true" - - "[MESSAGE] {prefix}BCB77You have been healed!" - - "[SOUND] ENTITY_PLAYER_LEVELUP" - - # Rules command - rules: - aliases: - - rules - - ะฟั€ะฐะฒะธะปะฐ - permission: null - actions: - - "[MESSAGE] &r" - - "[MESSAGE] &#FFD700โ•”โ•โ•โ• Server Rules โ•โ•โ•โ•—" - - "[MESSAGE] &r" - - "[MESSAGE] BCB771. Be respectful to all players" - - "[MESSAGE] BCB772. No cheating or hacking" - - "[MESSAGE] BCB773. No spam in chat" - - "[MESSAGE] BCB774. Follow staff instructions" - - "[MESSAGE] BCB775. Have fun!" - - "[MESSAGE] &r" - - "[MESSAGE] &#FFD700โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - "[SOUND] BLOCK_NOTE_BLOCK_PLING" diff --git a/lohub/src/main/resources/config.yml b/lohub/src/main/resources/config.yml deleted file mode 100644 index 476977a..0000000 --- a/lohub/src/main/resources/config.yml +++ /dev/null @@ -1,366 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Configuration โ•‘ -# โ•‘ Hub plugin for Paper/Folia 1.20.1+ โ•‘ -# โ•‘ Version: 1.5.5-1.20.1 โ•‘ -# โ•‘ Compatible with DeluxeHub config format โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -# -# BUILT-IN PLACEHOLDERS: -# %player% - Player name -# %player_displayname% - Player display name -# %location% - Player location (x, y, z) -# %world% - World name -# %online% - Online players count -# %online_max% - Max players -# -# ACTIONS (for join_events, custom_join_items, etc): -# [MESSAGE] text - Send message to player -# [BROADCAST] text - Broadcast to all players -# [TITLE] title;subtitle;fadeIn;stay;fadeOut - Send title -# [ACTIONBAR] text - Send actionbar message -# [SOUND] sound - Play sound -# [COMMAND] command - Execute as player -# [CONSOLE] command - Execute as console -# [GAMEMODE] mode - Change gamemode (survival/creative/adventure/spectator) -# [EFFECT] effect;level - Give potion effect -# [CLOSE] - Close inventory -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | GENERAL SETTINGS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -# Check for updates (recommended) -check-updates: false - -# Disable plugin in specific worlds -disabled-worlds: - invert: false - worlds: - - world_nether - - world_the_end - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SPAWN SETTINGS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -spawn: - # Teleport players to spawn on join - teleport-on-join: true - - # Teleport players to spawn on respawn - teleport-on-respawn: true - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | WORLDGUARD INTEGRATION | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -worldguard: - # Auto-create WorldGuard region around spawn - auto-create-region: true - - # Region radius in blocks - region-radius: 100 - - # Region name (don't change unless you know what you're doing) - region-name: "lohub_spawn" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | WORLD PROTECTION | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -world_settings: - # Player - disable_hunger_loss: true - disable_fall_damage: true - disable_player_pvp: true - disable_void_death: true - disable_fire_damage: true - disable_drowning: true - disable_off_hand_swap: true - - # Misc - disable_weather_change: true - disable_death_message: true - disable_mob_spawning: true - - # Item entities - disable_item_drop: true - disable_item_pickup: true - - # Blocks - disable_block_break: true - disable_block_place: true - disable_block_interact: true - disable_block_burn: true - disable_block_fire_spread: true - disable_block_leaf_decay: true - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | LAUNCHPAD | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -launchpad: - enabled: true - launch_power: 3.0 - launch_power_y: 1.0 - - # Blocks required: pressure plate on top of redstone block - top_block: STONE_PRESSURE_PLATE - bottom_block: REDSTONE_BLOCK - - actions: - - '[SOUND] ENTITY_BAT_TAKEOFF' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | DOUBLE JUMP | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -double_jump: - enabled: true - launch_power: 1.0 - launch_power_y: 0.9 - cooldown: 3 - - actions: - - '[SOUND] ENTITY_BAT_TAKEOFF' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | COMMAND BLOCKER | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -command_block: - enabled: true - blocked_commands: - - /pl - - /plugins - - /? - - /bukkit:? - - /bukkit:plugins - - /bukkit:pl - - /bukkit:help - - /ver - - /version - - /bukkit:version - - /bukkit:ver - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | ANTI-SWEAR | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -anti_swear: - enabled: false - blocked_words: - - fuck - - shit - - bitch - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | PLAYER JOIN | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -join_leave_messages: - enabled: true - # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฟะพะดะบะปัŽั‡ะตะฝะธะธ ะบ ั…ะฐะฑัƒ - # ะŸัƒัั‚ะฐั ัั‚ั€ะพะบะฐ '' = ะฝะต ะฟะพะบะฐะทั‹ะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต - join_message: "BCB77+ &#FFD700%player% &#AAAAAAะฟะพะดะบะปัŽั‡ะธะปัั ะบ ั…ะฐะฑัƒ" - # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฒั‹ั…ะพะดะต ั ัะตั€ะฒะตั€ะฐ (ะฝะต ะฟั€ะธ ะฟะตั€ะตะบะปัŽั‡ะตะฝะธะธ ะฝะฐ ะดั€ัƒะณะพะน ัะตั€ะฒะตั€) - quit_message: "&#FF6B6B- &#FFD700%player% &#AAAAAAะฒั‹ัˆะตะป" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SERVER SWITCH MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -server_switch_messages: - # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ะพ ะฟะตั€ะตะบะปัŽั‡ะตะฝะธะธ ะผะตะถะดัƒ ัะตั€ะฒะตั€ะฐะผะธ - enabled: true - - # ะจะฐะฑะปะพะฝ ัะพะพะฑั‰ะตะฝะธั ะฟั€ะธ ะฟะตั€ะตะบะปัŽั‡ะตะฝะธะธ - # %player% - ะธะผั ะธะณั€ะพะบะฐ - # %server% - ะฝะฐะทะฒะฐะฝะธะต ัะตั€ะฒะตั€ะฐ - switch_message: "&#FFD700%player% &#AAAAAAะฟะพะดะบะปัŽั‡ะธะปัั ะบ BCB77%server%" - - # ะžั‚ะพะฑั€ะฐะถะฐะตะผั‹ะต ะฝะฐะทะฒะฐะฝะธั ัะตั€ะฒะตั€ะพะฒ - # ะ•ัะปะธ ัะตั€ะฒะตั€ ะฝะต ัƒะบะฐะทะฐะฝ, ะฑัƒะดะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐะฝะพ ะตะณะพ ั‚ะตั…ะฝะธั‡ะตัะบะพะต ะธะผั - server_names: - hub: "ะฅะฐะฑัƒ" - grief: "ะ“ั€ะธั„ัƒ" - survival: "ะ’ั‹ะถะธะฒะฐะฝะธัŽ" - creative: "ะšั€ะตะฐั‚ะธะฒัƒ" - minigames: "ะœะธะฝะธ-ะธะณั€ะฐะผ" - -join_events: - - "[MESSAGE] &#FFD700โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" - - "[MESSAGE] &r" - - "[MESSAGE] &r BCB77Welcome, &#FFD700%player%BCB77!" - - "[MESSAGE] &r" - - "[MESSAGE] &r �D4FFWebsite: &#FFFFFFwww.example.net" - - "[MESSAGE] &r &#FF6B6BStore: &#FFFFFFstore.example.net" - - "[MESSAGE] &r B59B6Discord: &#FFFFFFdiscord.example.net" - - "[MESSAGE] &r" - - "[MESSAGE] &#FFD700โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - "[TITLE] BCB77W>C973EAC76FL3C56BC1C367O(C163M&BF5FE;&#FFD700%player%;10;40;10" - - "[SOUND] ENTITY_PLAYER_LEVELUP" - - "[GAMEMODE] survival" - -join_settings: - spawn_join: true - heal: true - extinguish: true - clear_inventory: false - - firework: - enabled: true - first_join_only: true - type: BALL_LARGE - power: 1 - flicker: true - trail: true - colors: - - AQUA - - RED - - TEAL - - WHITE - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CUSTOM JOIN ITEMS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -custom_join_items: - enabled: true - disable_inventory_movement: true - - items: - info: - material: BOOK - amount: 1 - slot: 0 - display_name: "&#FFD700I&#FFC700n&#FFB700f&#FFA700o&#FF9700r&#FF8700m&#FF7700a&#FF6700t&#FF5700i&#FF4700o&#FF3700n" - lore: - - "&#AAAAAARight-click for server info!" - actions: - - "[MESSAGE] &r" - - "[MESSAGE] &#FFD700โ•”โ•โ•โ• Server Information โ•โ•โ•โ•—" - - "[MESSAGE] &r" - - "[MESSAGE] �D4FFWebsite: &#FFFFFFwww.example.net" - - "[MESSAGE] &#FF6B6BStore: &#FFFFFFstore.example.net" - - "[MESSAGE] B59B6Discord: &#FFFFFFdiscord.example.net" - - "[MESSAGE] &r" - - "[MESSAGE] &#FFD700โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - "[SOUND] BLOCK_NOTE_BLOCK_PLING" - - compass: - material: COMPASS - amount: 1 - slot: 4 - display_name: "BCB77S>C973eAC76Fr3C56Bv1C367e(C163r &BF5FSFBD5BeBB57lEB953eB74Fc�DB54BtB347oB347r" - lore: - - "&#AAAAAARight-click to choose server!" - actions: - - "[MESSAGE] &#FF6B6BServer selector not implemented yet!" - - "[SOUND] ENTITY_VILLAGER_NO" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | PLAYER HIDER | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -player_hider: - enabled: true - slot: 8 - disable_inventory_movement: true - cooldown: 3 - - not_hidden: - material: LIME_DYE - amount: 1 - display_name: 'BCB77Players &#AAAAAA> BCB77Shown 󙀸(Right-Click)' - lore: - - '&#AAAAAAClick to hide all players!' - - hidden: - material: GRAY_DYE - amount: 1 - display_name: '&#FF6B6BPlayers &#AAAAAA> &#FF6B6BHidden 󙀸(Right-Click)' - lore: - - '&#AAAAAAClick to show all players!' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SCOREBOARD | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -scoreboard: - enabled: false - - display_delay: - server_enter: 60 - world_change: 40 - - refresh: - enabled: true - rate: 200 - - title: "&#FFD700L&#FFC700o&#FFB700H&#FFA700u&#FF9700b 󙀸(%online%/%online_max%)" - lines: - - "&#AAAAAAโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "BCB77Player:" - - " &#FFFFFF%player%" - - "" - - "BCB77Rank:" - - " &#FFFFFF%vault_rank%" - - "&#AAAAAAโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | TABLIST | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -tablist: - enabled: false - - refresh: - enabled: true - rate: 400 - - header: - - "" - - "&#FFD700L&#FFC700o&#FFB700H&#FFA700u&#FF9700b 󙀸(%online%/%online_max%)" - - "" - - footer: - - "" - - "�D4FFWebsite &#FFFFFFwww.example.net" - - "&#FF6B6BStore &#FFFFFFstore.example.net" - - "" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | ANNOUNCEMENTS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -announcements: - enabled: false - delay: 60 - required_players: 1 - - sound: - enabled: true - value: BLOCK_NOTE_BLOCK_PLING - volume: 1.0 - pitch: 1.0 - - announcements: - welcome: - - "&r" - - "&#FFD700โ•”โ•โ•โ• Announcement โ•โ•โ•โ•—" - - "&#AAAAAAWelcome to our server!" - - "&#FFD700โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - "&r" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CUSTOM COMMANDS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# All custom commands are now in commands.yml -# You can create custom commands with actions there - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# All messages are now in messages.yml -# You can customize the plugin prefix and all messages there diff --git a/lohub/src/main/resources/data.yml b/lohub/src/main/resources/data.yml deleted file mode 100644 index b34f190..0000000 --- a/lohub/src/main/resources/data.yml +++ /dev/null @@ -1,17 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Data Storage โ•‘ -# โ•‘ DO NOT EDIT THIS FILE MANUALLY! โ•‘ -# โ•‘ This file is automatically managed by the plugin โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# Chat lock state -chat_locked: false - -# Spawn location (set via /sethub command) -spawn: - world: null - x: 0.0 - y: 0.0 - z: 0.0 - yaw: 0.0 - pitch: 0.0 diff --git a/lohub/src/main/resources/messages.yml b/lohub/src/main/resources/messages.yml deleted file mode 100644 index 4858018..0000000 --- a/lohub/src/main/resources/messages.yml +++ /dev/null @@ -1,84 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Messages Configuration โ•‘ -# โ•‘ All plugin messages in one place โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# Plugin prefix (used in all messages with {prefix} placeholder) -prefix: "�D4FF[�D4FFL�CAF7o�C0EEH�B7E6u�ADDDbcCC] " - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | GENERAL MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -general: - no-permission: "{prefix}&#FF6B6BYou don't have permission!" - players-only: "{prefix}&#FF6B6BThis command is only for players!" - config-reloaded: "{prefix}BCB77Configuration reloaded!" - invalid-player: "{prefix}&#FF6B6BPlayer %player% not found!" - cooldown-active: "{prefix}&#FF6B6BPlease wait %time%s before using this again!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SPAWN MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -spawn: - set: "{prefix}BCB77Spawn set successfully!" - teleport: "{prefix}BCB77Teleporting to spawn..." - no-spawn: "{prefix}&#FF6B6BSpawn not set! Use /sethub" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CHAT LOCK MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -chat: - locked: "{prefix}&#FF6B6BChat is currently locked!" - lock-enabled: "{prefix}BCB77Chat has been locked!" - lock-disabled: "{prefix}&#FF6B6BChat has been unlocked!" - lock-broadcast-enabled: "{prefix}&#FFD700%player% &#AAAAAAhas locked the chat!" - lock-broadcast-disabled: "{prefix}&#FFD700%player% &#AAAAAAhas unlocked the chat!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | PLAYER HIDER MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -player-hider: - hidden: "{prefix}&#FF6B6BPlayers are now hidden!" - shown: "{prefix}BCB77Players are now visible!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | WORLD PROTECTION MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -protection: - item-drop: "{prefix}&#FF6B6BYou cannot drop items here!" - item-pickup: "{prefix}&#FF6B6BYou cannot pickup items here!" - block-place: "{prefix}&#FF6B6BYou cannot place blocks here!" - block-break: "{prefix}&#FF6B6BYou cannot break blocks here!" - block-interact: "{prefix}&#FF6B6BYou cannot interact with this!" - player-pvp: "{prefix}&#FF6B6BPVP is disabled here!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | DOUBLE JUMP MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -double-jump: - cooldown: "{prefix}&#FF6B6BWait %time%s before double jumping again!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | COMMAND MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -commands: - usage-lohub: "{prefix}&#FFD700Usage: /lohub reload" - usage-hub: "{prefix}&#FFD700Usage: /hub" - usage-sethub: "{prefix}&#FFD700Usage: /sethub" - usage-chatlock: "{prefix}&#FFD700Usage: /chatlock" - command-blocked: "{prefix}&#FF6B6BThis command is blocked!" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | ANTI-SWEAR MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -anti-swear: - blocked: "{prefix}&#FF6B6BYour message contains inappropriate language!" - admin-notify: "{prefix}&#FFD700%player% &#AAAAAAattempted to say: &#FF6B6B%word%" diff --git a/lohub/src/main/resources/plugin.yml b/lohub/src/main/resources/plugin.yml deleted file mode 100644 index 23c1066..0000000 --- a/lohub/src/main/resources/plugin.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: LoHub -version: '1.5.5-1.20.1' -main: com.loki.lohub.LoHub -api-version: '1.20' -folia-supported: true -author: loki -description: Hub plugin for Paper/Folia with WorldGuard integration - -softdepend: - - WorldGuard - - WorldEdit - -commands: - hub: - description: Teleport to spawn - usage: /hub - permission: lohub.hub - aliases: [ spawn, ั…ะฐะฑ, ัะฟะฐะฒะฝ ] - - sethub: - description: Set hub spawn location - usage: /sethub - permission: lohub.admin - aliases: [ setspawn, ัƒัั‚ะฐะฝะพะฒะธั‚ัŒัะฟะฐะฒะฝ ] - - lohub: - description: LoHub admin command - usage: /lohub [reload] - permission: lohub.admin - - chatlock: - description: Lock/unlock chat - usage: /chatlock - permission: lohub.chatlock - aliases: [ lockchat, ั‡ะฐั‚ะปะพะบ ] - -permissions: - lohub.hub: - description: Can use /hub command - default: true - lohub.admin: - description: Admin permissions - default: op - lohub.bypass.protection: - description: Bypass world protection - default: op - lohub.chatlock: - description: Can lock/unlock chat - default: op - lohub.chatlock.bypass: - description: Can bypass chat lock - default: op diff --git a/lohub/src/main/resources/serverselector.yml b/lohub/src/main/resources/serverselector.yml deleted file mode 100644 index aaab081..0000000 --- a/lohub/src/main/resources/serverselector.yml +++ /dev/null @@ -1,139 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Server Selector Configuration โ•‘ -# โ•‘ GUI menu for server selection โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -# -# This file defines the server selector GUI that players can open -# You can customize the items, layout, and actions -# -# ITEM ACTIONS: -# [MESSAGE] text - Send message to player -# [BROADCAST] text - Broadcast to all players -# [TITLE] title;subtitle;fadeIn;stay;fadeOut - Send title -# [ACTIONBAR] text - Send actionbar message -# [SOUND] sound - Play sound -# [COMMAND] command - Execute as player -# [CONSOLE] command - Execute as console -# [PROXY] server - Send player to BungeeCord/Velocity server -# [CLOSE] - Close inventory -# -# ITEM FLAGS: -# - HIDE_ATTRIBUTES -# - HIDE_DESTROYS -# - HIDE_ENCHANTS -# - HIDE_PLACED_ON -# - HIDE_POTION_EFFECTS -# - HIDE_UNBREAKABLE -# -# PLAYER HEADS: -# material: PLAYER_HEAD -# username: # OR -# base64: -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SERVER SELECTOR GUI | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -# GUI settings -gui: - # Title of the inventory - title: "&#FFD700S&#FFC700e&#FFB700r&#FFA700v&#FF9700e&#FF8700r &#FF7700S&#FF6700e&#FF5700l&#FF4700e&#FF3700c&#FF2700t&#FF1700o&#FF0700r" - - # Number of rows (1-6, each row = 9 slots) - rows: 3 - - # Auto-update GUI (for placeholders) - refresh: - enabled: false - rate: 40 # In ticks (20 ticks = 1 second) - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | GUI ITEMS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -items: - # Filler item (decorative glass) - filler: - material: GRAY_STAINED_GLASS_PANE - slot: -1 # -1 = fill all empty slots - amount: 1 - display_name: " " - item_flags: - - HIDE_ATTRIBUTES - - # Survival server - survival: - material: GRASS_BLOCK - slot: 11 - amount: 1 - glow: true - display_name: "BCB77S>C973uAC76Fr3C56Bv1C367i(C163v&BF5FaFBD5Bl" - lore: - - "" - - "&#AAAAAAClassic survival experience" - - "&#AAAAAABuild, mine, and survive!" - - "" - - "&#FFD700Click to join!" - actions: - - "[CLOSE]" - - "[MESSAGE] {prefix}BCB77Connecting to Survival..." - - "[SOUND] ENTITY_ENDERMAN_TELEPORT" - # For BungeeCord/Velocity: - # - "[PROXY] survival" - # For Multiverse-Core (multi-world): - # - "[CONSOLE] mvtp %player% survival_world" - - # Creative server - creative: - material: COMMAND_BLOCK - slot: 13 - amount: 1 - glow: true - display_name: "&#FF6B6BC&#FF5757r&#FF4343e&#FF2F2Fa&#FF1B1Bt&#FF0707i&#F30000v&#DF0000e" - lore: - - "" - - "&#AAAAAAUnlimited creativity!" - - "&#AAAAAABuild anything you imagine" - - "" - - "&#FFD700Click to join!" - actions: - - "[CLOSE]" - - "[MESSAGE] {prefix}&#FF6B6BConnecting to Creative..." - - "[SOUND] ENTITY_ENDERMAN_TELEPORT" - # For BungeeCord/Velocity: - # - "[PROXY] creative" - # For Multiverse-Core: - # - "[CONSOLE] mvtp %player% creative_world" - - # Minigames server - minigames: - material: DIAMOND_SWORD - slot: 15 - amount: 1 - glow: true - display_name: " B59B6ME4FB0iῑAAnA3BA4iD319Eg򓚖aȔD92m񰸵e餝Fs" - lore: - - "" - - "&#AAAAAAFun minigames and competitions" - - "&#AAAAAAPlay with friends!" - - "" - - "&#FFD700Click to join!" - actions: - - "[CLOSE]" - - "[MESSAGE] {prefix} B59B6Connecting to Minigames..." - - "[SOUND] ENTITY_ENDERMAN_TELEPORT" - # For BungeeCord/Velocity: - # - "[PROXY] minigames" - - # Close button - close: - material: BARRIER - slot: 22 - amount: 1 - display_name: "&#FF6B6BClose" - lore: - - "" - - "&#AAAAAAClick to close this menu" - actions: - - "[CLOSE]" - - "[SOUND] BLOCK_CHEST_CLOSE" diff --git a/lovelocity/build.gradle.kts b/lovelocity/build.gradle.kts deleted file mode 100644 index 923dbb6..0000000 --- a/lovelocity/build.gradle.kts +++ /dev/null @@ -1,40 +0,0 @@ -plugins { - java - checkstyle -} - -repositories { - mavenCentral() - maven("https://repo.papermc.io/repository/maven-public/") - maven("https://repo.velocitypowered.com/snapshots/") -} - -dependencies { - compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT") - annotationProcessor("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT") - implementation("com.google.code.gson:gson:2.10.1") - - testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.0") - testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.10.0") -} - -tasks.jar { - archiveFileName.set("LoVelocity-1.5.5.jar") - from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) - duplicatesStrategy = DuplicatesStrategy.EXCLUDE -} - -checkstyle { - toolVersion = "10.12.5" - configFile = file("${rootProject.rootDir}/config/checkstyle/checkstyle.xml") - isIgnoreFailures = false - maxWarnings = 0 -} - -tasks.withType { - reports { - xml.required.set(false) - html.required.set(true) - } -} diff --git a/lovelocity/src/main/java/com/loki/lovelocity/LoVelocity.java b/lovelocity/src/main/java/com/loki/lovelocity/LoVelocity.java deleted file mode 100644 index 2e0f0b0..0000000 --- a/lovelocity/src/main/java/com/loki/lovelocity/LoVelocity.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.loki.lovelocity; - -import com.google.inject.Inject; -import com.loki.lovelocity.commands.HubCommand; -import com.velocitypowered.api.command.CommandMeta; -import com.velocitypowered.api.event.Subscribe; -import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; -import com.velocitypowered.api.plugin.Plugin; -import com.velocitypowered.api.plugin.annotation.DataDirectory; -import com.velocitypowered.api.proxy.ProxyServer; -import org.slf4j.Logger; - -import java.nio.file.Path; - -@Plugin( - id = "lovelocity", - name = "LoVelocity", - version = "1.5.5", - description = "Velocity integration for LoNetwork", - authors = {"loki"} -) -public class LoVelocity { - - private final ProxyServer server; - private final Logger logger; - private final Path dataDirectory; - - @Inject - public LoVelocity(ProxyServer server, Logger logger, @DataDirectory Path dataDirectory) { - this.server = server; - this.logger = logger; - this.dataDirectory = dataDirectory; - } - - @Subscribe - public void onProxyInitialization(ProxyInitializeEvent event) { - logger.info("LoVelocity loaded!"); - logger.info("Version: 1.5.5"); - - registerCommands(); - registerListeners(); - } - - private void registerCommands() { - CommandMeta hubMeta = server.getCommandManager().metaBuilder("hub") - .aliases("lobby") - .plugin(this) - .build(); - - server.getCommandManager().register(hubMeta, new HubCommand(this)); - - logger.info("Commands registered: /hub, /lobby"); - } - - private void registerListeners() { - server.getEventManager().register(this, new com.loki.lovelocity.listeners.ServerSwitchListener(this)); - logger.info("Listeners registered"); - } - - public ProxyServer getServer() { - return server; - } - - public Logger getLogger() { - return logger; - } - - public Path getDataDirectory() { - return dataDirectory; - } -} diff --git a/lovelocity/src/main/java/com/loki/lovelocity/commands/HubCommand.java b/lovelocity/src/main/java/com/loki/lovelocity/commands/HubCommand.java deleted file mode 100644 index 762eaef..0000000 --- a/lovelocity/src/main/java/com/loki/lovelocity/commands/HubCommand.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.loki.lovelocity.commands; - -import com.loki.lovelocity.LoVelocity; -import com.velocitypowered.api.command.SimpleCommand; -import com.velocitypowered.api.proxy.Player; -import com.velocitypowered.api.proxy.server.RegisteredServer; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; - -import java.util.List; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; - -public class HubCommand implements SimpleCommand { - - private final LoVelocity plugin; - private final List hubServers = List.of("hub", "lobby"); - - public HubCommand(LoVelocity plugin) { - this.plugin = plugin; - } - - @Override - public void execute(Invocation invocation) { - if (!(invocation.source() instanceof Player player)) { - invocation.source().sendMessage(Component.text("This command is only for players!", NamedTextColor.RED)); - return; - } - - Optional currentServer = player.getCurrentServer().map(s -> s.getServer()); - - if (currentServer.isEmpty()) { - player.sendMessage(Component.text("Failed to determine current server!", NamedTextColor.RED)); - return; - } - - String currentServerName = currentServer.get().getServerInfo().getName().toLowerCase(); - - if (isHubServer(currentServerName)) { - player.sendMessage(Component.text("You are already on the hub!", NamedTextColor.YELLOW)); - return; - } - - Optional hubServer = findHubServer(); - - if (hubServer.isEmpty()) { - player.sendMessage(Component.text("Hub server not found!", NamedTextColor.RED)); - plugin.getLogger().warn("Hub server not found! Available servers: " + - plugin.getServer().getAllServers().stream() - .map(s -> s.getServerInfo().getName()) - .toList()); - return; - } - - player.sendMessage(Component.text("Teleporting to hub...", NamedTextColor.GREEN)); - - player.createConnectionRequest(hubServer.get()).fireAndForget(); - } - - private boolean isHubServer(String serverName) { - return hubServers.stream().anyMatch(hub -> serverName.contains(hub)); - } - - private Optional findHubServer() { - return plugin.getServer().getAllServers().stream() - .filter(server -> isHubServer(server.getServerInfo().getName().toLowerCase())) - .findFirst(); - } - - @Override - public CompletableFuture> suggestAsync(Invocation invocation) { - return CompletableFuture.completedFuture(List.of()); - } - - @Override - public boolean hasPermission(Invocation invocation) { - return invocation.source().hasPermission("lovelocity.hub"); - } -} diff --git a/lovelocity/src/main/java/com/loki/lovelocity/listeners/ServerSwitchListener.java b/lovelocity/src/main/java/com/loki/lovelocity/listeners/ServerSwitchListener.java deleted file mode 100644 index 0b22391..0000000 --- a/lovelocity/src/main/java/com/loki/lovelocity/listeners/ServerSwitchListener.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.loki.lovelocity.listeners; - -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import com.loki.lovelocity.LoVelocity; -import com.velocitypowered.api.event.PostOrder; -import com.velocitypowered.api.event.Subscribe; -import com.velocitypowered.api.event.connection.DisconnectEvent; -import com.velocitypowered.api.event.player.ServerConnectedEvent; -import com.velocitypowered.api.proxy.Player; -import com.velocitypowered.api.proxy.server.RegisteredServer; - -import java.util.Optional; - -public class ServerSwitchListener { - - private final LoVelocity plugin; - private static final String CHANNEL = "lohub:switch"; - - public ServerSwitchListener(LoVelocity plugin) { - this.plugin = plugin; - } - - @Subscribe(order = PostOrder.LAST) - public void onServerConnected(ServerConnectedEvent event) { - Player player = event.getPlayer(); - RegisteredServer toServer = event.getServer(); - Optional previousServer = event.getPreviousServer(); - - // If player is switching from another server (not first join) - if (previousServer.isPresent()) { - String fromServerName = previousServer.get().getServerInfo().getName(); - String toServerName = toServer.getServerInfo().getName(); - - // Send plugin message to hub server about server switch - sendServerSwitchMessage(player, fromServerName, toServerName); - - plugin.getLogger().info(player.getUsername() + " switched from " + fromServerName + " to " + toServerName); - } - } - - @Subscribe(order = PostOrder.LAST) - public void onDisconnect(DisconnectEvent event) { - // Player left the network - handled by backend server - } - - private void sendServerSwitchMessage(Player player, String fromServer, String toServer) { - // Create plugin message - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("ServerSwitch"); - out.writeUTF(player.getUsername()); - out.writeUTF(fromServer); - out.writeUTF(toServer); - - byte[] data = out.toByteArray(); - - // Send to hub server (assuming hub server name is "hub") - plugin.getServer().getServer("hub").ifPresent(hubServer -> { - hubServer.sendPluginMessage(() -> CHANNEL, data); - }); - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index e9ef55e..4243e4f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,3 @@ rootProject.name = "LoNetwork" include("lohub") -include("lovelocity") diff --git a/spacelegacy-config.yml b/spacelegacy-config.yml deleted file mode 100644 index f5decd4..0000000 --- a/spacelegacy-config.yml +++ /dev/null @@ -1,344 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoHub Configuration - SpaceLegacy โ•‘ -# โ•‘ Hub plugin for Paper/Folia 1.20.1+ โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | GENERAL SETTINGS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -check-updates: true - -# Disabled worlds (plugin won't work there) -disabled-worlds: - invert: false - worlds: - - world_nether - - witp - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SPAWN SETTINGS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -spawn: - teleport-on-join: true - teleport-on-respawn: true - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | WORLDGUARD INTEGRATION | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -worldguard: - auto-create-region: true - region-radius: 100 - region-name: "lohub_spawn" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | WORLD PROTECTION | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -world_settings: - disable_hunger_loss: true - disable_fall_damage: true - disable_player_pvp: true - disable_void_death: true - disable_fire_damage: true - disable_drowning: true - disable_off_hand_swap: true - disable_weather_change: true - disable_death_message: true - disable_mob_spawning: true - disable_item_drop: true - disable_item_pickup: false - disable_block_break: true - disable_block_place: true - disable_block_interact: true - disable_block_burn: true - disable_block_fire_spread: true - disable_block_leaf_decay: true - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | LAUNCHPAD | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -launchpad: - enabled: true - launch_power: 3.0 - launch_power_y: 1.0 - top_block: STONE_PRESSURE_PLATE - bottom_block: REDSTONE_BLOCK - actions: - - '[SOUND] ENTITY_BAT_TAKEOFF' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | DOUBLE JUMP | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -double_jump: - enabled: false - launch_power: 1.0 - launch_power_y: 0.9 - cooldown: 3 - actions: - - '[SOUND] ENTITY_BAT_TAKEOFF' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | COMMAND BLOCKER | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -command_block: - enabled: true - blocked_commands: - - /pl - - /plugins - - /? - - /bukkit:? - - /bukkit:plugins - - /bukkit:pl - - /bukkit:help - - /ver - - /version - - /bukkit:version - - /bukkit:ver - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | ANTI-SWEAR | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -anti_swear: - enabled: true - blocked_words: - - ะฑะปัั‚ัŒ - - ััƒะบะฐ - - ะฟะธะทะดะฐ - - ั…ัƒะน - - ะตะฑะฐั‚ัŒ - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | PLAYER JOIN | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -join_leave_messages: - enabled: true - join_message: "&#B798A8&lโ–ถ ẲE9%player% &7ะฟั€ะธัะพะตะดะธะฝะธะปัั" - quit_message: "&c&lโ—€ &#B798A8%player% &7ะฒั‹ัˆะตะป" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SERVER SWITCH MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -server_switch_messages: - enabled: true - switch_message: "&#B798A8&lโ–ถ ẲE9%player% &7ะฟะพะดะบะปัŽั‡ะธะปัั ะบ &#B798A8%server%" - server_names: - hub: "ะฅะฐะฑัƒ" - vanilla: "ะ’ะฐะฝะธะปะปะต" - grif: "ะ“ั€ะธั„ัƒ" - darktown: "ะ”ะฐั€ะบะฐัƒะฝัƒ" - -join_events: - - "[CONSOLE] effect clear %player%" - - "[MESSAGE] &#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "[MESSAGE] &r" - - "[MESSAGE] &7ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ, ẲE9&n%player%&r&7!" - - "[MESSAGE] &r" - - "[MESSAGE] &#B798A8&lโ™ฆ &#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y" - - "[MESSAGE] &#B798A8&lโ™ฆ ะกะะ™ะข ẲE9spacelegacy.ru" - - "[MESSAGE] &#B798A8&lโ™ฆ DISCORD &f/discord" - - "[MESSAGE] &r" - - "[MESSAGE] &7&oะ–ะตะปะฐะตะผ ะฟั€ะธัั‚ะฝะพะน ะธะณั€ั‹!" - - "[MESSAGE] &#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "[TITLE] &#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y;&fะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ!;1;3;1" - - "[SOUND] ENTITY_PLAYER_LEVELUP" - - "[GAMEMODE] survival" - -join_settings: - spawn_join: true - heal: true - extinguish: true - clear_inventory: false - - firework: - enabled: true - first_join_only: true - type: BALL_LARGE - power: 1 - flicker: true - trail: true - colors: - - PURPLE - - WHITE - - BLUE - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CUSTOM JOIN ITEMS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -custom_join_items: - enabled: true - disable_inventory_movement: true - - items: - parkour: - material: FEATHER - amount: 1 - slot: 0 - display_name: "&#B798A8&lโ™ฆ ẲE9ะŸะฐั€ะบัƒั€" - lore: - - "&7ะะฐะถะผะธ ะŸะšะœ, ั‡ั‚ะพะฑั‹ ะฟะตั€ะตะนั‚ะธ ะฝะฐ ะฟะฐั€ะบัƒั€" - actions: - - "[MESSAGE] &#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "[MESSAGE] &#B798A8&lโ™ฆ &fะขะตะปะตะฟะพั€ั‚ะฐั†ะธั ะฝะฐ ẲE9ะŸะฐั€ะบัƒั€&f..." - - "[MESSAGE] &#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "[CONSOLE] ip forcejoin %player%" - - "[SOUND] ENTITY_ENDERMAN_TELEPORT" - - server_selector: - material: NETHER_STAR - amount: 1 - slot: 4 - display_name: "&#B798A8&lโ™ฆ ẲE9ะ’ั‹ะฑะพั€ ะ ะตะถะธะผะฐ" - lore: - - "&7ะะฐะถะผะธ ะŸะšะœ, ั‡ั‚ะพะฑั‹ ะฒั‹ะฑั€ะฐั‚ัŒ ั€ะตะถะธะผ" - actions: - - "[MENU] serverselector" - - player_hider: - material: LIME_DYE - amount: 1 - slot: 8 - display_name: '&a&lโ™ฆ ẲE9ะ˜ะณั€ะพะบะธ ะฒะธะดะฝั‹ &7(ะŸะšะœ)' - lore: - - '&7ะกะบั€ั‹ั‚ัŒ ะปะธัˆะฝะธั… ะธะณั€ะพะบะพะฒ' - actions: - - "[PLAYER_HIDER]" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | PLAYER HIDER | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -player_hider: - enabled: true - slot: 8 - disable_inventory_movement: true - cooldown: 3 - - not_hidden: - material: LIME_DYE - amount: 1 - display_name: '&a&lโ™ฆ ẲE9ะ˜ะณั€ะพะบะธ ะฒะธะดะฝั‹ &7(ะŸะšะœ)' - lore: - - '&7ะะฐะถะผะธ, ั‡ั‚ะพะฑั‹ ัะบั€ั‹ั‚ัŒ' - - hidden: - material: GRAY_DYE - amount: 1 - display_name: '&c&lโ™ฆ &#B798A8ะ˜ะณั€ะพะบะธ ัะบั€ั‹ั‚ั‹ &7(ะŸะšะœ)' - lore: - - '&7ะะฐะถะผะธ, ั‡ั‚ะพะฑั‹ ะฟะพะบะฐะทะฐั‚ัŒ' - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | SCOREBOARD | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -scoreboard: - enabled: false - - display_delay: - server_enter: 60 - world_change: 40 - - refresh: - enabled: true - rate: 200 - - title: "&#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y" - lines: - - "&#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - - "&#B798A8โ—† &fะ˜ะณั€ะพะบẲE9:" - - " &7%player%" - - "" - - "&#B798A8โ—† &fะ ะฐะฝะณẲE9:" - - " ẲE9%vault_rank%" - - "" - - "&#B798A8โ—† &fะžะฝะปะฐะนะฝẲE9:" - - " &f%online% ะธะณั€ะพะบะพะฒ" - - "&#B798A8&mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | TABLIST | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -tablist: - enabled: true - - refresh: - enabled: true - rate: 400 - - header: - - "" - - " &#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y " - - "&fะกะตั€ะฒะตั€: &#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y.ru &7| &fะžะฝะปะฐะนะฝ: ẲE9%online%" - - "" - - footer: - - "" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&#B798A8โ—† &fะะฐัˆ DiscordẲE9: &7/discord" - - "&#B798A8โ—† &fะกะฐะนั‚ẲE9: &fspacelegacy.ru" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | ANNOUNCEMENTS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# - -announcements: - enabled: true - delay: 120 - required_players: 1 - - sound: - enabled: true - value: BLOCK_NOTE_BLOCK_PLING - volume: 1.0 - pitch: 1.5 - - announcements: - announce1: - - "&r" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&#B798A8&lโ™ฆ ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•" - - "&7ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฝะฐ &#B798A8s&#B192AFp&#AA8BB5a&#A485BCc E7EC2e⚖C9l⏔CFeB6BD6gⅵDCaE5EE3cẲE9y&7!" - - "&7ะŸั€ะธัั‚ะฝะพะน ะธะณั€ั‹ ะธ ั‡ะตัั‚ะฝั‹ั… ัั€ะฐะถะตะฝะธะน!" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&r" - announce2: - - "&r" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&#B798A8&lโ™ฆ ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•" - - "&7ะะฐัˆ Discord ะดะปั ัะฒัะทะธ ั ั‚ะตั…-ะฟะพะดะดะตั€ะถะบะพะน:" - - "ẲE9/discord ะธะปะธ /links" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&r" - announce3: - - "&r" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&#B798A8&lโ™ฆ ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•" - - "&7ะะฐัˆ ัะฐะนั‚: ẲE9spacelegacy.ru" - - "&7ะกะปะตะดะธ ะทะฐ ะพะฑะฝะพะฒะปะตะฝะธัะผะธ ัะตั€ะฒะตั€ะฐ!" - - "&#B798A8โ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌโ–ฌ" - - "&r" - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | CUSTOM COMMANDS | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# All custom commands are now in commands.yml -# You can create custom commands with actions there - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# | MESSAGES | -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# -# All messages are now in messages.yml -# You can customize the plugin prefix and all messages there diff --git a/src/main/java/com/loki/lochat/LoChat.java b/src/main/java/com/loki/lochat/LoChat.java index fe40073..009d357 100644 --- a/src/main/java/com/loki/lochat/LoChat.java +++ b/src/main/java/com/loki/lochat/LoChat.java @@ -59,6 +59,7 @@ public final class LoChat extends JavaPlugin { // ะšะพะผะฐะฝะดั‹ ะธ ัะปัƒัˆะฐั‚ะตะปะธ registerCommands(); registerListeners(); + registerPluginChannels(); // ะะฒั‚ะพัะพะพะฑั‰ะตะฝะธั autoMessageManager.start(); @@ -108,9 +109,11 @@ public final class LoChat extends JavaPlugin { getCommand("reply").setExecutor(new ReplyCommand(this)); getCommand("ignore").setExecutor(new IgnoreCommand(this)); getCommand("unignore").setExecutor(new UnignoreCommand(this)); + getCommand("ignorelist").setExecutor(new IgnoreListCommand(this)); getCommand("announce").setExecutor(new AnnounceCommand(this)); getCommand("chatspy").setExecutor(new ChatSpyCommand(this)); getCommand("clearchat").setExecutor(new ClearChatCommand(this)); + getCommand("hub").setExecutor(new HubCommand(this)); NickCommand nickCmd = new NickCommand(this); getCommand("nick").setExecutor(nickCmd); @@ -149,6 +152,11 @@ public final class LoChat extends JavaPlugin { getLogger().info("ะกะปัƒัˆะฐั‚ะตะปะธ ะทะฐั€ะตะณะธัั‚ั€ะธั€ะพะฒะฐะฝั‹ (ะฝะพะฒะฐั ะฐั€ั…ะธั‚ะตะบั‚ัƒั€ะฐ)"); } + private void registerPluginChannels() { + getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + getLogger().info("BungeeCord plugin messaging channel registered"); + } + public void reload() { configManager.reload(); messageConfig.reload(); diff --git a/src/main/java/com/loki/lochat/commands/CustomCommandManager.java b/src/main/java/com/loki/lochat/commands/CustomCommandManager.java new file mode 100644 index 0000000..71be886 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/CustomCommandManager.java @@ -0,0 +1,107 @@ +package com.loki.lochat.commands; + +import com.loki.lochat.LoChat; +import com.loki.lochat.commands.custom.*; +import org.bukkit.command.CommandExecutor; + +import java.util.HashMap; +import java.util.Map; + +/** + * ะœะตะฝะตะดะถะตั€ ะบะฐัั‚ะพะผะฝั‹ั… ะบะพะผะฐะฝะด + */ +public class CustomCommandManager { + + private final LoChat plugin; + private final Map commands; + + public CustomCommandManager(LoChat plugin) { + this.plugin = plugin; + this.commands = new HashMap<>(); + registerCommands(); + } + + /** + * ะ ะตะณะธัั‚ั€ะธั€ัƒะตั‚ ะฒัะต ะบะฐัั‚ะพะผะฝั‹ะต ะบะพะผะฐะฝะดั‹ + */ + private void registerCommands() { + // ะ˜ะฝั„ะพั€ะผะฐั†ะธะพะฝะฝั‹ะต ะบะพะผะฐะฝะดั‹ + commands.put("help", new HelpCommand(plugin)); + commands.put("rules", new RulesCommand(plugin)); + commands.put("discord", new DiscordCommand(plugin)); + + // ะฃั‚ะธะปะธั‚ั‹ + commands.put("coords", new CoordsCommand(plugin)); + commands.put("ping", new PingCommand(plugin)); + commands.put("stats", new StatsCommand(plugin)); + + // ะงะฐั‚ ะบะพะผะฐะฝะดั‹ + commands.put("me", new MeCommand(plugin)); + commands.put("sounds", new SoundsCommand(plugin)); + + // TODO: ะ”ะพะฑะฐะฒะธั‚ัŒ ะพัั‚ะฐะปัŒะฝั‹ะต ะบะพะผะฐะฝะดั‹ + // commands.put("website", new WebsiteCommand(plugin)); + // commands.put("time", new TimeCommand(plugin)); + // commands.put("list", new ListCommand(plugin)); + // commands.put("top", new TopCommand(plugin)); + // commands.put("afk", new AfkCommand(plugin)); + // commands.put("back", new BackCommand(plugin)); + // commands.put("broadcast", new BroadcastCommand(plugin)); + // commands.put("maintenance", new MaintenanceCommand(plugin)); + // commands.put("motd", new MotdCommand(plugin)); + // commands.put("tps", new TpsCommand(plugin)); + // commands.put("memory", new MemoryCommand(plugin)); + // commands.put("version", new VersionCommand(plugin)); + // commands.put("reload", new ReloadCommand(plugin)); + // commands.put("automessage", new AutoMessageCommand(plugin)); + } + + /** + * ะ ะตะณะธัั‚ั€ะธั€ัƒะตั‚ ะบะพะผะฐะฝะดั‹ ะฒ Bukkit + */ + public void registerBukkitCommands() { + for (Map.Entry entry : commands.entrySet()) { + String commandName = entry.getKey(); + CommandExecutor executor = entry.getValue(); + + if (plugin.getCommand(commandName) != null) { + plugin.getCommand(commandName).setExecutor(executor); + plugin.getLogger().info("ะ—ะฐั€ะตะณะธัั‚ั€ะธั€ะพะฒะฐะฝะฐ ะบะฐัั‚ะพะผะฝะฐั ะบะพะผะฐะฝะดะฐ: /" + commandName); + } else { + plugin.getLogger().warning("ะะต ัƒะดะฐะปะพััŒ ะทะฐั€ะตะณะธัั‚ั€ะธั€ะพะฒะฐั‚ัŒ ะบะพะผะฐะฝะดัƒ: /" + commandName + + " (ะฝะต ะฝะฐะนะดะตะฝะฐ ะฒ plugin.yml)"); + } + } + } + + /** + * ะŸะพะปัƒั‡ะธั‚ัŒ ะธัะฟะพะปะฝะธั‚ะตะปั ะบะพะผะฐะฝะดั‹ + */ + public CommandExecutor getCommandExecutor(String command) { + return commands.get(command.toLowerCase()); + } + + /** + * ะŸั€ะพะฒะตั€ะธั‚ัŒ, ัะฒะปัะตั‚ัั ะปะธ ะบะพะผะฐะฝะดะฐ ะบะฐัั‚ะพะผะฝะพะน + */ + public boolean isCustomCommand(String command) { + return commands.containsKey(command.toLowerCase()); + } + + /** + * ะŸะพะปัƒั‡ะธั‚ัŒ ะฒัะต ะทะฐั€ะตะณะธัั‚ั€ะธั€ะพะฒะฐะฝะฝั‹ะต ะบะพะผะฐะฝะดั‹ + */ + public Map getCommands() { + return new HashMap<>(commands); + } + + /** + * ะŸะตั€ะตะทะฐะณั€ัƒะทะธั‚ัŒ ะบะพะผะฐะฝะดั‹ + */ + public void reload() { + commands.clear(); + registerCommands(); + registerBukkitCommands(); + plugin.getLogger().info("ะšะฐัั‚ะพะผะฝั‹ะต ะบะพะผะฐะฝะดั‹ ะฟะตั€ะตะทะฐะณั€ัƒะถะตะฝั‹!"); + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/HubCommand.java b/src/main/java/com/loki/lochat/commands/HubCommand.java new file mode 100644 index 0000000..a5ce606 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/HubCommand.java @@ -0,0 +1,52 @@ +package com.loki.lochat.commands; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HubCommand implements CommandExecutor { + + private final LoChat plugin; + + public HubCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("general.players-only"))); + return true; + } + + // Check if hub command is enabled + if (!plugin.getConfigManager().getBoolean("hub_command.enabled", true)) { + player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("general.command-disabled"))); + return true; + } + + String hubServer = plugin.getConfigManager().getString("hub_command.server", "hub"); + + // Send player to hub server via BungeeCord + sendToServer(player, hubServer); + + String message = plugin.getMessageConfig().get("hub.connecting") + .replace("%server%", hubServer); + player.sendMessage(ChatFormatter.parse(message)); + + return true; + } + + private void sendToServer(Player player, String server) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Connect"); + out.writeUTF(server); + + player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray()); + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/IgnoreListCommand.java b/src/main/java/com/loki/lochat/commands/IgnoreListCommand.java new file mode 100644 index 0000000..e94235f --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/IgnoreListCommand.java @@ -0,0 +1,60 @@ +package com.loki.lochat.commands; + +import com.loki.lochat.LoChat; +import com.loki.lochat.api.service.IgnoreService; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; +import java.util.UUID; + +/** + * ะšะพะผะฐะฝะดะฐ /ignorelist - ะฟะพะบะฐะทั‹ะฒะฐะตั‚ ัะฟะธัะพะบ ะธะณะฝะพั€ะธั€ัƒะตะผั‹ั… ะธะณั€ะพะบะพะฒ + */ +public class IgnoreListCommand implements CommandExecutor { + + private final LoChat plugin; + private final IgnoreService ignoreService; + + public IgnoreListCommand(LoChat plugin) { + this.plugin = plugin; + this.ignoreService = plugin.getServiceRegistry().get(IgnoreService.class); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage("ะขะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!"); + return true; + } + + Set ignoredPlayers = ignoreService.getIgnoredPlayers(player.getUniqueId()); + + if (ignoredPlayers.isEmpty()) { + player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-empty"))); + return true; + } + + player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-header"))); + + for (UUID ignoredUuid : ignoredPlayers) { + String playerName = com.loki.lochat.utils.PlayerUtil.getPlayerName(ignoredUuid); + if (playerName != null) { + player.sendMessage(ChatFormatter.parse("WCEEBโ€ข &#FFFFFF" + playerName)); + } + } + + player.sendMessage(ChatFormatter.parse( + plugin.getMessageConfig().get("ignore.list-footer") + .replace("{count}", String.valueOf(ignoredPlayers.size())) + )); + + return true; + } +} diff --git a/src/main/java/com/loki/lochat/commands/custom/CoordsCommand.java b/src/main/java/com/loki/lochat/commands/custom/CoordsCommand.java new file mode 100644 index 0000000..431c538 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/CoordsCommand.java @@ -0,0 +1,45 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ะบะพะพั€ะดะธะฝะฐั‚ ะธะณั€ะพะบะฐ + */ +public class CoordsCommand implements CommandExecutor { + + private final LoChat plugin; + + public CoordsCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(ChatFormatter.parse("ะญั‚ะฐ ะบะพะผะฐะฝะดะฐ ั‚ะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!")); + return true; + } + + int x = (int) player.getLocation().getX(); + int y = (int) player.getLocation().getY(); + int z = (int) player.getLocation().getZ(); + String world = player.getWorld().getName(); + + String message = String.format(""" + ะ’ะฐัˆะธ ะบะพะพั€ะดะธะฝะฐั‚ั‹: + X: %d + Y: %d + Z: %d + ะœะธั€: %s + """, x, y, z, world); + + player.sendMessage(ChatFormatter.parse(message)); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/DiscordCommand.java b/src/main/java/com/loki/lochat/commands/custom/DiscordCommand.java new file mode 100644 index 0000000..697b613 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/DiscordCommand.java @@ -0,0 +1,41 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ Discord ัะตั€ะฒะตั€ะฐ + */ +public class DiscordCommand implements CommandExecutor { + + private final LoChat plugin; + + public DiscordCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + String discordLink = plugin.getConfig().getString("discord.invite-link", "discord.gg/example"); + + String message = String.format(""" + โ•โ•โ•โ•โ•โ•โ• ะะฐัˆ Discord โ•โ•โ•โ•โ•โ•โ• + ะŸั€ะธัะพะตะดะธะฝัะนั‚ะตััŒ ะบ ะฝะฐัˆะตะผัƒ ัะพะพะฑั‰ะตัั‚ะฒัƒ! + + ๐Ÿ”— %s + + ะ’ Discord ะฒั‹ ะผะพะถะตั‚ะต: + โ€ข ะžะฑั‰ะฐั‚ัŒัั ั ะธะณั€ะพะบะฐะผะธ + โ€ข ะŸะพะปัƒั‡ะฐั‚ัŒ ะฝะพะฒะพัั‚ะธ ัะตั€ะฒะตั€ะฐ + โ€ข ะฃั‡ะฐัั‚ะฒะพะฒะฐั‚ัŒ ะฒ ัะพะฑั‹ั‚ะธัั… + โ€ข ะŸะพะปัƒั‡ะฐั‚ัŒ ะฟะพะดะดะตั€ะถะบัƒ + """, discordLink, discordLink); + + sender.sendMessage(ChatFormatter.parse(message)); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/HelpCommand.java b/src/main/java/com/loki/lochat/commands/custom/HelpCommand.java new file mode 100644 index 0000000..06445c1 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/HelpCommand.java @@ -0,0 +1,44 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ะฟะพะผะพั‰ะธ ัะตั€ะฒะตั€ะฐ + */ +public class HelpCommand implements CommandExecutor { + + private final LoChat plugin; + + public HelpCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + String message = """ + โ•โ•โ•โ•โ•โ•โ• ะŸะพะผะพั‰ัŒ ะฟะพ ัะตั€ะฒะตั€ัƒ โ•โ•โ•โ•โ•โ•โ• + /rules - ะฟั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ + /discord - ะฝะฐัˆ Discord + /website - ะพั„ะธั†ะธะฐะปัŒะฝั‹ะน ัะฐะนั‚ + /coords - ะฒะฐัˆะธ ะบะพะพั€ะดะธะฝะฐั‚ั‹ + /time - ะฒั€ะตะผั ะฝะฐ ัะตั€ะฒะตั€ะต + /ping - ะฒะฐัˆ ะฟะธะฝะณ + /list - ัะฟะธัะพะบ ะธะณั€ะพะบะพะฒ + /me <ะดะตะนัั‚ะฒะธะต> - ะดะตะนัั‚ะฒะธะต ะพั‚ ั‚ั€ะตั‚ัŒะตะณะพ ะปะธั†ะฐ + /msg <ะธะณั€ะพะบ> <ัะพะพะฑั‰ะตะฝะธะต> - ะปะธั‡ะฝะพะต ัะพะพะฑั‰ะตะฝะธะต + /reply <ัะพะพะฑั‰ะตะฝะธะต> - ะพั‚ะฒะตั‚ะธั‚ัŒ ะฝะฐ ะ›ะก + /ignore <ะธะณั€ะพะบ> - ะธะณะฝะพั€ะธั€ะพะฒะฐั‚ัŒ ะธะณั€ะพะบะฐ + /color <ั†ะฒะตั‚ะฐ> - ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ + /prefix <ั‚ะตะบัั‚> - ะบะฐัั‚ะพะผะฝั‹ะน ะฟั€ะตั„ะธะบั + """; + + sender.sendMessage(ChatFormatter.parse(message)); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/MeCommand.java b/src/main/java/com/loki/lochat/commands/custom/MeCommand.java new file mode 100644 index 0000000..0365f2f --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/MeCommand.java @@ -0,0 +1,75 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ะดะตะนัั‚ะฒะธั ะพั‚ ั‚ั€ะตั‚ัŒะตะณะพ ะปะธั†ะฐ + */ +public class MeCommand implements CommandExecutor { + + private final LoChat plugin; + + public MeCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(ChatFormatter.parse("ะญั‚ะฐ ะบะพะผะฐะฝะดะฐ ั‚ะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!")); + return true; + } + + if (!player.hasPermission("chat.me")) { + player.sendMessage(ChatFormatter.parse("ะฃ ะฒะฐั ะฝะตั‚ ะฟั€ะฐะฒ ะดะปั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ัั‚ะพะน ะบะพะผะฐะฝะดั‹!")); + return true; + } + + if (args.length == 0) { + player.sendMessage(ChatFormatter.parse("ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะธะต: /me <ะดะตะนัั‚ะฒะธะต>")); + return true; + } + + // ะŸั€ะพะฒะตั€ัะตะผ ะผัƒั‚ + if (plugin.getMuteService() != null && plugin.getMuteService().isMuted(player.getUniqueId())) { + String muteMessage = plugin.getMessagesConfig().getString("mute.you-muted", + "ะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹!"); + player.sendMessage(ChatFormatter.parse(muteMessage)); + return true; + } + + // ะกะพะฑะธั€ะฐะตะผ ะดะตะนัั‚ะฒะธะต ะธะท ะฐั€ะณัƒะผะตะฝั‚ะพะฒ + String action = String.join(" ", args); + + // ะŸะพะปัƒั‡ะฐะตะผ ะพั‚ะพะฑั€ะฐะถะฐะตะผะพะต ะธะผั ะธะณั€ะพะบะฐ (ั ะณั€ะฐะดะธะตะฝั‚ะพะผ ะตัะปะธ ะตัั‚ัŒ) + String displayName = player.getDisplayName(); + if (plugin.getGradientModule() != null) { + displayName = plugin.getGradientModule().getFormattedName(player); + } + + // ะคะพั€ะผะฐั‚ะธั€ัƒะตะผ ัะพะพะฑั‰ะตะฝะธะต ะดะตะนัั‚ะฒะธั + String message = String.format("* %s %s", displayName, action); + + // ะžั‚ะฟั€ะฐะฒะปัะตะผ ะฒัะตะผ ะธะณั€ะพะบะฐะผ ะฒ ั€ะฐะดะธัƒัะต (ะบะฐะบ ะปะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚) + int radius = plugin.getConfig().getInt("chat.local.radius", 100); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (onlinePlayer.getWorld().equals(player.getWorld()) && + onlinePlayer.getLocation().distance(player.getLocation()) <= radius) { + onlinePlayer.sendMessage(ChatFormatter.parse(message)); + } + } + + // ะ›ะพะณะธั€ัƒะตะผ ะดะตะนัั‚ะฒะธะต + plugin.getLogger().info(String.format("[ME] %s: %s", player.getName(), action)); + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/PingCommand.java b/src/main/java/com/loki/lochat/commands/custom/PingCommand.java new file mode 100644 index 0000000..a349529 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/PingCommand.java @@ -0,0 +1,74 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ะฟะธะฝะณะฐ ะธะณั€ะพะบะฐ + */ +public class PingCommand implements CommandExecutor { + + private final LoChat plugin; + + public PingCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(ChatFormatter.parse("ะญั‚ะฐ ะบะพะผะฐะฝะดะฐ ั‚ะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!")); + return true; + } + + // ะ•ัะปะธ ัƒะบะฐะทะฐะฝ ะฐั€ะณัƒะผะตะฝั‚ - ะฟะพะบะฐะทะฐั‚ัŒ ะฟะธะฝะณ ะดั€ัƒะณะพะณะพ ะธะณั€ะพะบะฐ + if (args.length > 0) { + if (!player.hasPermission("lochat.ping.others")) { + player.sendMessage(ChatFormatter.parse("ะฃ ะฒะฐั ะฝะตั‚ ะฟั€ะฐะฒ ะดะปั ะฟั€ะพัะผะพั‚ั€ะฐ ะฟะธะฝะณะฐ ะดั€ัƒะณะธั… ะธะณั€ะพะบะพะฒ!")); + return true; + } + + Player target = Bukkit.getPlayer(args[0]); + if (target == null || !target.isOnline()) { + player.sendMessage(ChatFormatter.parse("ะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ ะธะปะธ ะฝะต ะฒ ัะตั‚ะธ!")); + return true; + } + + int ping = target.getPing(); + String color = getPingColor(ping); + + String message = String.format( + "ะŸะธะฝะณ ะธะณั€ะพะบะฐ %s: <%s>%dะผั", + target.getName(), color, ping, color + ); + + player.sendMessage(ChatFormatter.parse(message)); + } else { + // ะŸะพะบะฐะทะฐั‚ัŒ ัะฒะพะน ะฟะธะฝะณ + int ping = player.getPing(); + String color = getPingColor(ping); + + String message = String.format( + "ะ’ะฐัˆ ะฟะธะฝะณ: <%s>%dะผั", + color, ping, color + ); + + player.sendMessage(ChatFormatter.parse(message)); + } + + return true; + } + + private String getPingColor(int ping) { + if (ping < 50) return "green"; + if (ping < 100) return "yellow"; + if (ping < 200) return "gold"; + return "red"; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/RulesCommand.java b/src/main/java/com/loki/lochat/commands/custom/RulesCommand.java new file mode 100644 index 0000000..c7580e9 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/RulesCommand.java @@ -0,0 +1,41 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ะฟั€ะฐะฒะธะป ัะตั€ะฒะตั€ะฐ + */ +public class RulesCommand implements CommandExecutor { + + private final LoChat plugin; + + public RulesCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + String message = """ + โ•โ•โ•โ•โ•โ•โ• ะŸั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ โ•โ•โ•โ•โ•โ•โ• + 1. ะะต ะธัะฟะพะปัŒะทัƒะนั‚ะต ั‡ะธั‚ั‹ ะธ ะผะพะดั‹ + 2. ะฃะฒะฐะถะฐะนั‚ะต ะดั€ัƒะณะธั… ะธะณั€ะพะบะพะฒ + 3. ะะต ัะฟะฐะผัŒั‚ะต ะฒ ั‡ะฐั‚ะต + 4. ะะต ัั‚ั€ะพะนั‚ะต ั€ัะดะพะผ ั ั‡ัƒะถะธะผะธ ะฟะพัั‚ั€ะพะนะบะฐะผะธ + 5. ะะต ะธัะฟะพะปัŒะทัƒะนั‚ะต ะผะฐั‚ ะธ ะพัะบะพั€ะฑะปะตะฝะธั + 6. ะะต ั€ะตะบะปะฐะผะธั€ัƒะนั‚ะต ะดั€ัƒะณะธะต ัะตั€ะฒะตั€ั‹ + 7. ะกะปัƒัˆะฐะนั‚ะตััŒ ะฐะดะผะธะฝะธัั‚ั€ะฐั†ะธัŽ + 8. ะะต ะทะปะพัƒะฟะพั‚ั€ะตะฑะปัะนั‚ะต ะฑะฐะณะฐะผะธ + + ะะฐั€ัƒัˆะตะฝะธะต ะฟั€ะฐะฒะธะป ะบะฐั€ะฐะตั‚ัั ะผัƒั‚ะพะผ ะธะปะธ ะฑะฐะฝะพะผ! + ะ—ะฐ ะฟะพะผะพั‰ัŒัŽ ะพะฑั€ะฐั‰ะฐะนั‚ะตััŒ ะบ ะฐะดะผะธะฝะธัั‚ั€ะฐั†ะธะธ + """; + + sender.sendMessage(ChatFormatter.parse(message)); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/SoundsCommand.java b/src/main/java/com/loki/lochat/commands/custom/SoundsCommand.java new file mode 100644 index 0000000..98ae9d0 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/SoundsCommand.java @@ -0,0 +1,79 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ัƒะฟั€ะฐะฒะปะตะฝะธั ะทะฒัƒะบะฐะผะธ + */ +public class SoundsCommand implements CommandExecutor { + + private final LoChat plugin; + + public SoundsCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(ChatFormatter.parse("ะญั‚ะฐ ะบะพะผะฐะฝะดะฐ ั‚ะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!")); + return true; + } + + String playerUUID = player.getUniqueId().toString(); + boolean currentState = plugin.getPlayerData().getBoolean("players." + playerUUID + ".settings.sounds-enabled", true); + + if (args.length == 0) { + // ะŸะพะบะฐะทะฐั‚ัŒ ั‚ะตะบัƒั‰ะตะต ัะพัั‚ะพัะฝะธะต + String status = currentState ? "ะฒะบะปัŽั‡ะตะฝั‹" : "ะพั‚ะบะปัŽั‡ะตะฝั‹"; + String message = String.format( + "ะ—ะฒัƒะบะธ ัะตะนั‡ะฐั %s\n" + + "ะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /sounds on ะธะปะธ /sounds off ะดะปั ะธะทะผะตะฝะตะฝะธั", + status + ); + player.sendMessage(ChatFormatter.parse(message)); + return true; + } + + String action = args[0].toLowerCase(); + boolean newState; + + switch (action) { + case "on", "ะฒะบะปัŽั‡ะธั‚ัŒ", "ะฒะบะป" -> { + newState = true; + player.sendMessage(ChatFormatter.parse("ะ—ะฒัƒะบะธ ะฒะบะปัŽั‡ะตะฝั‹!")); + } + case "off", "ะพั‚ะบะปัŽั‡ะธั‚ัŒ", "ะฒั‹ะบะป" -> { + newState = false; + player.sendMessage(ChatFormatter.parse("ะ—ะฒัƒะบะธ ะพั‚ะบะปัŽั‡ะตะฝั‹!")); + } + case "toggle", "ะฟะตั€ะตะบะปัŽั‡ะธั‚ัŒ" -> { + newState = !currentState; + String status = newState ? "ะฒะบะปัŽั‡ะตะฝั‹" : "ะพั‚ะบะปัŽั‡ะตะฝั‹"; + player.sendMessage(ChatFormatter.parse(String.format("ะ—ะฒัƒะบะธ %s!", status))); + } + default -> { + player.sendMessage(ChatFormatter.parse(""" + ะะตะฒะตั€ะฝะพะต ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต! + ะ”ะพัั‚ัƒะฟะฝั‹ะต ะบะพะผะฐะฝะดั‹: + /sounds on - ะฒะบะปัŽั‡ะธั‚ัŒ ะทะฒัƒะบะธ + /sounds off - ะพั‚ะบะปัŽั‡ะธั‚ัŒ ะทะฒัƒะบะธ + /sounds toggle - ะฟะตั€ะตะบะปัŽั‡ะธั‚ัŒ + """)); + return true; + } + } + + // ะกะพั…ั€ะฐะฝัะตะผ ะฝะฐัั‚ั€ะพะนะบัƒ + plugin.getPlayerData().set("players." + playerUUID + ".settings.sounds-enabled", newState); + plugin.savePlayerData(); + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/commands/custom/StatsCommand.java b/src/main/java/com/loki/lochat/commands/custom/StatsCommand.java new file mode 100644 index 0000000..98bacc2 --- /dev/null +++ b/src/main/java/com/loki/lochat/commands/custom/StatsCommand.java @@ -0,0 +1,114 @@ +package com.loki.lochat.commands.custom; + +import com.loki.lochat.LoChat; +import com.loki.lochat.utils.ChatFormatter; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * ะšะพะผะฐะฝะดะฐ ัั‚ะฐั‚ะธัั‚ะธะบะธ ั‡ะฐั‚ะฐ + */ +public class StatsCommand implements CommandExecutor { + + private final LoChat plugin; + + public StatsCommand(LoChat plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!sender.hasPermission("lochat.stats")) { + sender.sendMessage(ChatFormatter.parse("ะฃ ะฒะฐั ะฝะตั‚ ะฟั€ะฐะฒ ะดะปั ะฟั€ะพัะผะพั‚ั€ะฐ ัั‚ะฐั‚ะธัั‚ะธะบะธ!")); + return true; + } + + if (args.length > 0) { + // ะกั‚ะฐั‚ะธัั‚ะธะบะฐ ะบะพะฝะบั€ะตั‚ะฝะพะณะพ ะธะณั€ะพะบะฐ + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(ChatFormatter.parse("ะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ!")); + return true; + } + + showPlayerStats(sender, target); + } else { + // ะžะฑั‰ะฐั ัั‚ะฐั‚ะธัั‚ะธะบะฐ ัะตั€ะฒะตั€ะฐ + showServerStats(sender); + } + + return true; + } + + private void showPlayerStats(CommandSender sender, Player target) { + // ะŸะพะปัƒั‡ะฐะตะผ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ะธะณั€ะพะบะฐ ะธะท ะบะพะฝั„ะธะณะฐ ะธะปะธ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + int messagesSent = plugin.getPlayerData().getInt("players." + target.getUniqueId() + ".messages-sent", 0); + int commandsUsed = plugin.getPlayerData().getInt("players." + target.getUniqueId() + ".commands-used", 0); + long playtime = plugin.getPlayerData().getLong("players." + target.getUniqueId() + ".total-playtime", 0); + + String playtimeFormatted = formatTime(playtime); + + String message = String.format(""" + โ•โ•โ• ะกั‚ะฐั‚ะธัั‚ะธะบะฐ ะธะณั€ะพะบะฐ %s โ•โ•โ• + ะกะพะพะฑั‰ะตะฝะธะน ะพั‚ะฟั€ะฐะฒะปะตะฝะพ: %d + ะšะพะผะฐะฝะด ะธัะฟะพะปัŒะทะพะฒะฐะฝะพ: %d + ะ’ั€ะตะผั ะฒ ะธะณั€ะต: %s + ะกั‚ะฐั‚ัƒั: ะ’ ัะตั‚ะธ + ะŸะธะฝะณ: %dะผั + """, target.getName(), messagesSent, commandsUsed, playtimeFormatted, target.getPing()); + + sender.sendMessage(ChatFormatter.parse(message)); + } + + private void showServerStats(CommandSender sender) { + // ะŸะพะปัƒั‡ะฐะตะผ ะพะฑั‰ัƒัŽ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ัะตั€ะฒะตั€ะฐ + int totalMessages = plugin.getStatisticsData().getInt("global.total-messages", 0); + int messagesToday = plugin.getStatisticsData().getInt("global.messages-today", 0); + int onlinePlayers = Bukkit.getOnlinePlayers().size(); + int maxPlayers = Bukkit.getMaxPlayers(); + + String message = String.format(""" + โ•โ•โ• ะกั‚ะฐั‚ะธัั‚ะธะบะฐ ัะตั€ะฒะตั€ะฐ โ•โ•โ• + ะ’ัะตะณะพ ัะพะพะฑั‰ะตะฝะธะน: %d + ะกะพะพะฑั‰ะตะฝะธะน ัะตะณะพะดะฝั: %d + ะ˜ะณั€ะพะบะพะฒ ะพะฝะปะฐะนะฝ: %d/%d + ะะบั‚ะธะฒะฝั‹ั… ะผัƒั‚ะพะฒ: %d + TPS: %.1f + """, totalMessages, messagesToday, onlinePlayers, maxPlayers, + getActiveMutesCount(), getCurrentTPS()); + + sender.sendMessage(ChatFormatter.parse(message)); + } + + private String formatTime(long milliseconds) { + long seconds = milliseconds / 1000; + long minutes = seconds / 60; + long hours = minutes / 60; + long days = hours / 24; + + if (days > 0) { + return String.format("%dะด %dั‡ %dะผ", days, hours % 24, minutes % 60); + } else if (hours > 0) { + return String.format("%dั‡ %dะผ", hours, minutes % 60); + } else { + return String.format("%dะผ", minutes); + } + } + + private int getActiveMutesCount() { + return plugin.getMuteData().getConfigurationSection("active-mutes") != null ? + plugin.getMuteData().getConfigurationSection("active-mutes").getKeys(false).size() : 0; + } + + private double getCurrentTPS() { + try { + return Bukkit.getTPS()[0]; + } catch (Exception e) { + return 20.0; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java b/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java index 8e2e48c..30327c0 100644 --- a/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java +++ b/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java @@ -22,25 +22,69 @@ public class AdvancedMessageFilter { "(.)\\1{3,}" ); + // ะŸะฐั‚ั‚ะตั€ะฝ ะดะปั ัะบั€ั‹ั‚ั‹ั… ััั‹ะปะพะบ (h t t p, w w w ะธ ั‚.ะด.) + private static final Pattern HIDDEN_URL_PATTERN = Pattern.compile( + "(?i)(h\\s*t\\s*t\\s*p|w\\s*w\\s*w|d\\s*o\\s*t\\s*c\\s*o\\s*m)", + Pattern.CASE_INSENSITIVE + ); + + // ะŸะฐั‚ั‚ะตั€ะฝ ะดะปั ะดะพะผะตะฝะพะฒ ะฑะตะท http + private static final Pattern DOMAIN_PATTERN = Pattern.compile( + "\\b([a-zA-Z0-9-]+\\.(com|net|org|ru|gg|me|io|xyz|tk|ml|ga|cf|gq))\\b", + Pattern.CASE_INSENSITIVE + ); + private final FileConfiguration config; private final List whitelistedDomains; private final List blacklistedDomains; + private final CapsFilter capsFilter; public AdvancedMessageFilter(FileConfiguration config) { this.config = config; - this.whitelistedDomains = config.getStringList("filters.url.whitelist"); - this.blacklistedDomains = config.getStringList("filters.url.blacklist"); + this.whitelistedDomains = config.getStringList("filters.advertising.whitelist"); + this.blacklistedDomains = config.getStringList("filters.advertising.blacklist"); + + // ะ˜ะฝะธั†ะธะฐะปะธะทะฐั†ะธั ะบะฐะฟั ั„ะธะปัŒั‚ั€ะฐ + int maxCapsPercent = config.getInt("filters.caps.max-percent", 70); + int minLength = config.getInt("filters.caps.min-length", 5); + boolean autoLowercase = config.getBoolean("filters.caps.auto-lowercase", true); + boolean blockMessage = config.getBoolean("filters.caps.block", false); + this.capsFilter = new CapsFilter(maxCapsPercent, minLength, autoLowercase, blockMessage); } public FilterResult filterMessage(Player player, String message) { - if (config.getBoolean("filters.url.enabled", true)) { + // ะšะฐะฟั ั„ะธะปัŒั‚ั€ + if (config.getBoolean("filters.caps.enabled", true)) { + String filtered = capsFilter.filter(player, message); + if (filtered == null) { + return new FilterResult(false, message, "&#FF6B6Bะะต ะบั€ะธั‡ะธั‚ะต ะฒ ั‡ะฐั‚ะต!"); + } + message = filtered; + } + + // ะะฝั‚ะธ-ั€ะตะบะปะฐะผะฐ (ะพะฑัŠะตะดะธะฝะตะฝะฝะฐั ะฟั€ะพะฒะตั€ะบะฐ) + if (config.getBoolean("filters.advertising.enabled", true)) { + // URL ั„ะธะปัŒั‚ั€ FilterResult urlResult = filterUrls(player, message); if (!urlResult.allowed()) { return urlResult; } message = urlResult.filteredMessage(); + + // ะกะบั€ั‹ั‚ั‹ะต ััั‹ะปะบะธ + FilterResult hiddenResult = filterHiddenUrls(player, message); + if (!hiddenResult.allowed()) { + return hiddenResult; + } + + // ะ”ะพะผะตะฝั‹ ะฑะตะท http + FilterResult domainResult = filterDomains(player, message); + if (!domainResult.allowed()) { + return domainResult; + } } + // IP ั„ะธะปัŒั‚ั€ if (config.getBoolean("filters.ip.enabled", true)) { FilterResult ipResult = filterIPs(player, message); if (!ipResult.allowed()) { @@ -49,6 +93,7 @@ public class AdvancedMessageFilter { message = ipResult.filteredMessage(); } + // ะŸะพะฒั‚ะพั€ััŽั‰ะธะตัั ัะธะผะฒะพะปั‹ if (config.getBoolean("filters.repeat.enabled", true)) { message = filterRepeatingChars(message); } @@ -138,6 +183,70 @@ public class AdvancedMessageFilter { return url; } + /** + * ะคะธะปัŒั‚ั€ัƒะตั‚ ัะบั€ั‹ั‚ั‹ะต ััั‹ะปะบะธ (h t t p, w w w ะธ ั‚.ะด.) + */ + private FilterResult filterHiddenUrls(Player player, String message) { + if (!config.getBoolean("filters.advertising.block-hidden-urls", true)) { + return new FilterResult(true, message, null); + } + + if (player.hasPermission("lochat.bypass.hiddenurls")) { + return new FilterResult(true, message, null); + } + + Matcher matcher = HIDDEN_URL_PATTERN.matcher(message); + if (matcher.find()) { + return new FilterResult(false, message, + config.getString("filters.advertising.blocked-message", "&#FF6B6Bะ ะตะบะปะฐะผะฐ ะทะฐะฟั€ะตั‰ะตะฝะฐ!")); + } + + return new FilterResult(true, message, null); + } + + /** + * ะคะธะปัŒั‚ั€ัƒะตั‚ ะดะพะผะตะฝั‹ ะฑะตะท http (example.com, discord.gg ะธ ั‚.ะด.) + */ + private FilterResult filterDomains(Player player, String message) { + if (!config.getBoolean("filters.advertising.block-domains", true)) { + return new FilterResult(true, message, null); + } + + if (player.hasPermission("lochat.bypass.domains")) { + return new FilterResult(true, message, null); + } + + Matcher matcher = DOMAIN_PATTERN.matcher(message); + + while (matcher.find()) { + String domain = matcher.group(); + + // ะŸั€ะพะฒะตั€ัะตะผ whitelist + if (!whitelistedDomains.isEmpty()) { + boolean isWhitelisted = whitelistedDomains.stream() + .anyMatch(d -> domain.toLowerCase().contains(d.toLowerCase())); + + if (!isWhitelisted) { + return new FilterResult(false, message, + config.getString("filters.advertising.blocked-message", "&#FF6B6Bะ ะตะบะปะฐะผะฐ ะทะฐะฟั€ะตั‰ะตะฝะฐ!")); + } + } + + // ะŸั€ะพะฒะตั€ัะตะผ blacklist + if (!blacklistedDomains.isEmpty()) { + boolean isBlacklisted = blacklistedDomains.stream() + .anyMatch(d -> domain.toLowerCase().contains(d.toLowerCase())); + + if (isBlacklisted) { + return new FilterResult(false, message, + config.getString("filters.advertising.blocked-message", "&#FF6B6Bะ ะตะบะปะฐะผะฐ ะทะฐะฟั€ะตั‰ะตะฝะฐ!")); + } + } + } + + return new FilterResult(true, message, null); + } + public record FilterResult(boolean allowed, String filteredMessage, String blockReason) { } } diff --git a/src/main/java/com/loki/lochat/core/filter/CapsFilter.java b/src/main/java/com/loki/lochat/core/filter/CapsFilter.java new file mode 100644 index 0000000..547624d --- /dev/null +++ b/src/main/java/com/loki/lochat/core/filter/CapsFilter.java @@ -0,0 +1,83 @@ +package com.loki.lochat.core.filter; + +import org.bukkit.entity.Player; + +/** + * ะคะธะปัŒั‚ั€ ะบะฐะฟัะฐ (ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ) + */ +public class CapsFilter { + private final int maxCapsPercent; + private final int minLength; + private final boolean autoLowercase; + private final boolean blockMessage; + + public CapsFilter(int maxCapsPercent, int minLength, boolean autoLowercase, boolean blockMessage) { + this.maxCapsPercent = maxCapsPercent; + this.minLength = minLength; + this.autoLowercase = autoLowercase; + this.blockMessage = blockMessage; + } + + /** + * ะŸั€ะพะฒะตั€ัะตั‚ ะธ ะพะฑั€ะฐะฑะฐั‚ั‹ะฒะฐะตั‚ ัะพะพะฑั‰ะตะฝะธะต ั ะบะฐะฟัะพะผ + * + * @return ะพะฑั€ะฐะฑะพั‚ะฐะฝะฝะพะต ัะพะพะฑั‰ะตะฝะธะต ะธะปะธ null ะตัะปะธ ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝะพ + */ + public String filter(Player player, String message) { + // Bypass ะดะปั ะฐะดะผะธะฝะพะฒ + if (player.hasPermission("lochat.bypass.caps")) { + return message; + } + + // ะ˜ะณะฝะพั€ะธั€ัƒะตะผ ะบะพั€ะพั‚ะบะธะต ัะพะพะฑั‰ะตะฝะธั + if (message.length() < minLength) { + return message; + } + + // ะŸะพะดัั‡ะธั‚ั‹ะฒะฐะตะผ ะฟั€ะพั†ะตะฝั‚ ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ + int totalLetters = 0; + int capsLetters = 0; + + for (char c : message.toCharArray()) { + if (Character.isLetter(c)) { + totalLetters++; + if (Character.isUpperCase(c)) { + capsLetters++; + } + } + } + + // ะ•ัะปะธ ะฑัƒะบะฒ ะผะฐะปะพ, ะฟั€ะพะฟัƒัะบะฐะตะผ + if (totalLetters < 3) { + return message; + } + + int capsPercent = (capsLetters * 100) / totalLetters; + + // ะ•ัะปะธ ะบะฐะฟัะฐ ะฑะพะปัŒัˆะต ะปะธะผะธั‚ะฐ + if (capsPercent > maxCapsPercent) { + if (blockMessage) { + return null; // ะ‘ะปะพะบะธั€ัƒะตะผ ัะพะพะฑั‰ะตะฝะธะต + } else if (autoLowercase) { + // ะŸะพะฝะธะถะฐะตะผ ั€ะตะณะธัั‚ั€ (ะฟะตั€ะฒะฐั ะฑัƒะบะฒะฐ ะทะฐะณะปะฐะฒะฝะฐั) + return capitalizeFirst(message.toLowerCase()); + } + } + + return message; + } + + /** + * ะ”ะตะปะฐะตั‚ ะฟะตั€ะฒัƒัŽ ะฑัƒะบะฒัƒ ะทะฐะณะปะฐะฒะฝะพะน + */ + private String capitalizeFirst(String text) { + if (text == null || text.isEmpty()) { + return text; + } + return Character.toUpperCase(text.charAt(0)) + text.substring(1); + } + + public int getMaxCapsPercent() { + return maxCapsPercent; + } +} diff --git a/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java b/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java index dc6d4b1..1ef717b 100644 --- a/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java +++ b/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java @@ -32,20 +32,40 @@ public class MuteServiceImpl implements MuteService { @Override public void mute(UUID uuid, String playerName, long duration, String reason, String mutedBy) { + if (uuid == null) { + plugin.getLogger().warning("Attempted to mute player with null UUID"); + return; + } + + if (playerName == null || playerName.isEmpty()) { + plugin.getLogger().warning("Attempted to mute player with null or empty name"); + return; + } + long endTime = duration > 0 ? System.currentTimeMillis() + duration : 0; MuteData data = new MuteData(uuid, playerName, endTime, reason, mutedBy); mutes.put(uuid, data); historyManager.addEntry(uuid, playerName, duration, reason, mutedBy); saveAsync(); + + plugin.getLogger().info("Player " + playerName + " muted by " + mutedBy + + " for " + (duration > 0 ? formatTime(duration) : "permanent") + + (reason != null ? " (reason: " + reason + ")" : "")); } @Override public boolean unmute(UUID uuid, String unmutedBy) { + if (uuid == null) { + plugin.getLogger().warning("Attempted to unmute player with null UUID"); + return false; + } + MuteData removed = mutes.remove(uuid); if (removed != null) { historyManager.updateUnmute(uuid, unmutedBy); saveAsync(); + plugin.getLogger().info("Player " + removed.getPlayerName() + " unmuted by " + unmutedBy); return true; } return false; @@ -53,6 +73,10 @@ public class MuteServiceImpl implements MuteService { @Override public boolean isMuted(UUID uuid) { + if (uuid == null) { + return false; + } + MuteData data = mutes.get(uuid); if (data == null) { return false; @@ -61,6 +85,7 @@ public class MuteServiceImpl implements MuteService { if (isExpired(data)) { mutes.remove(uuid); saveAsync(); + plugin.getLogger().info("Mute expired for player " + data.getPlayerName()); return false; } return true; diff --git a/src/main/java/com/loki/lochat/data/model/ChatMessage.java b/src/main/java/com/loki/lochat/data/model/ChatMessage.java index 53259fd..f483db0 100644 --- a/src/main/java/com/loki/lochat/data/model/ChatMessage.java +++ b/src/main/java/com/loki/lochat/data/model/ChatMessage.java @@ -19,9 +19,9 @@ public class ChatMessage { } public static ChatMessage create(Player sender, String rawMessage) { - // ะžะฟั€ะตะดะตะปัะตะผ ั‚ะธะฟ ั‡ะฐั‚ะฐ - boolean isGlobal = rawMessage.startsWith("!") && - sender.hasPermission("chat.global.use"); + // ะก "!" = ะณะปะพะฑะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + // ะ‘ะตะท "!" = ะปะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + boolean isGlobal = rawMessage.startsWith("!"); String content = isGlobal ? rawMessage.substring(1).trim() : diff --git a/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java b/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java index f9bc218..51834f7 100644 --- a/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java +++ b/src/main/java/com/loki/lochat/gradient/config/GradientConfig.java @@ -28,100 +28,88 @@ public class GradientConfig { } private void loadConfig() { - configFile = new File(plugin.getDataFolder(), "gradient-config.yml"); - if (!configFile.exists()) { - plugin.saveResource("gradient-config.yml", false); - } - config = YamlConfiguration.loadConfiguration(configFile); - - // ะ—ะฐะณั€ัƒะถะฐะตะผ ะดะตั„ะพะปั‚ั‹ - InputStream defStream = plugin.getResource("gradient-config.yml"); - if (defStream != null) { - YamlConfiguration defConfig = YamlConfiguration.loadConfiguration( - new InputStreamReader(defStream, StandardCharsets.UTF_8)); - config.setDefaults(defConfig); - } + // ะงะธั‚ะฐะตะผ ะธะท ะณะปะฐะฒะฝะพะณะพ config.yml ะฒะผะตัั‚ะพ ะพั‚ะดะตะปัŒะฝะพะณะพ ั„ะฐะนะปะฐ + config = plugin.getConfig(); + plugin.getLogger().info("Gradient ะบะพะฝั„ะธะณ ะทะฐะณั€ัƒะถะตะฝ ะธะท config.yml"); } public void reload() { + plugin.reloadConfig(); this.mainConfig = plugin.getConfig(); - loadConfig(); + this.config = plugin.getConfig(); } public void save() { - try { - config.save(configFile); - } catch (IOException e) { - plugin.getLogger().warning("ะžัˆะธะฑะบะฐ ัะพั…ั€ะฐะฝะตะฝะธั gradient-config.yml: " + e.getMessage()); - } + // ะกะพั…ั€ะฐะฝะตะฝะธะต ะฝะต ั‚ั€ะตะฑัƒะตั‚ัั, ะธัะฟะพะปัŒะทัƒะตะผ ะณะปะฐะฒะฝั‹ะน ะบะพะฝั„ะธะณ + plugin.saveConfig(); } public boolean isEnabled() { - return config.getBoolean("enabled", true); + return config.getBoolean("gradient.enabled", true); } public int getMaxColors() { - return config.getInt("max-colors", 7); + return config.getInt("gradient.max-colors", 7); } public int getMinColors() { - return config.getInt("min-colors", 1); + return config.getInt("gradient.min-colors", 1); } public int getPricePerColor() { - return config.getInt("price-per-color", 50); + return config.getInt("gradient.price-per-color", 50); } public int getPrefixPrice() { - return config.getInt("prefix-price", 500); + return config.getInt("gradient.prefix-price", 500); } public boolean isPrefixOneTimePurchase() { - return config.getBoolean("prefix-one-time-purchase", true); + return config.getBoolean("gradient.prefix-one-time-purchase", true); } public int getColorCooldown() { - return config.getInt("color-cooldown", 60); + return config.getInt("gradient.color-cooldown", 60); } public int getPrefixCooldown() { - return config.getInt("prefix-cooldown", 300); + return config.getInt("gradient.prefix-cooldown", 120); } public int getMaxPrefixLength() { - return config.getInt("max-prefix-length", 7); + return config.getInt("gradient.max-prefix-length", 16); } public String getPrefixFormat() { - return config.getString("prefix-format", "[{prefix}] "); + return config.getString("gradient.prefix-format", "[{prefix}] "); } public boolean isGradientOnPrefix() { - return config.getBoolean("gradient-on-prefix", true); + return config.getBoolean("gradient.gradient-on-prefix", true); } public boolean isGradientOnLuckPermsPrefix() { - return config.getBoolean("gradient-on-luckperms-prefix", true); + return config.getBoolean("gradient.gradient-on-luckperms-prefix", true); } public boolean isContinuousGradient() { - return config.getBoolean("continuous-gradient", true); + return config.getBoolean("gradient.continuous-gradient", true); } public boolean isUseLegacyRgbFormat() { - return config.getBoolean("use-legacy-rgb-format", true); + return config.getBoolean("gradient.use-legacy-rgb-format", true); } public String getStorageType() { - return config.getString("storage-type", "YAML"); + return config.getString("gradient.storage-type", "file"); } public String getSqliteFile() { - return config.getString("sqlite-file", "gradient-data.db"); + return config.getString("gradient.sqlite-file", "gradient-data.db"); } public List getPrefixBlacklist() { - return config.getStringList("prefix-blacklist"); + return config.getStringList("gradient.prefix-blacklist"); } public boolean isPrefixBlacklisted(String prefix) { diff --git a/src/main/java/com/loki/lochat/gradient/config/GradientMessages.java b/src/main/java/com/loki/lochat/gradient/config/GradientMessages.java index a44ff4b..abfd4ef 100644 --- a/src/main/java/com/loki/lochat/gradient/config/GradientMessages.java +++ b/src/main/java/com/loki/lochat/gradient/config/GradientMessages.java @@ -27,13 +27,13 @@ public class GradientMessages { } private void loadMessages() { - messagesFile = new File(plugin.getDataFolder(), "gradient-messages.yml"); + messagesFile = new File(plugin.getDataFolder(), "messages.yml"); if (!messagesFile.exists()) { - plugin.saveResource("gradient-messages.yml", false); + plugin.saveResource("messages.yml", false); } messages = YamlConfiguration.loadConfiguration(messagesFile); - InputStream defStream = plugin.getResource("gradient-messages.yml"); + InputStream defStream = plugin.getResource("messages.yml"); if (defStream != null) { YamlConfiguration defConfig = YamlConfiguration.loadConfiguration( new InputStreamReader(defStream, StandardCharsets.UTF_8)); @@ -49,7 +49,7 @@ public class GradientMessages { * ะŸะพะปัƒั‡ะฐะตั‚ ัะพะพะฑั‰ะตะฝะธะต ะบะฐะบ ัั‚ั€ะพะบัƒ ั MiniMessage ั‚ะตะณะฐะผะธ */ public String get(String key) { - String message = messages.getString(key, "&#FF0000ะกะพะพะฑั‰ะตะฝะธะต ะฝะต ะฝะฐะนะดะตะฝะพ: " + key); + String message = messages.getString("gradient." + key, "&#FF0000ะกะพะพะฑั‰ะตะฝะธะต ะฝะต ะฝะฐะนะดะตะฝะพ: " + key); return ChatFormatter.convertAllColors(message); } @@ -57,7 +57,7 @@ public class GradientMessages { * ะŸะพะปัƒั‡ะฐะตั‚ ัะพะพะฑั‰ะตะฝะธะต ะบะฐะบ ัั‚ั€ะพะบัƒ ั ะทะฐะผะตะฝะฐะผะธ */ public String get(String key, String... replacements) { - String message = messages.getString(key, "&#FF0000ะกะพะพะฑั‰ะตะฝะธะต ะฝะต ะฝะฐะนะดะตะฝะพ: " + key); + String message = messages.getString("gradient." + key, "&#FF0000ะกะพะพะฑั‰ะตะฝะธะต ะฝะต ะฝะฐะนะดะตะฝะพ: " + key); for (int i = 0; i < replacements.length; i += 2) { if (i + 1 < replacements.length) { message = message.replace("{" + replacements[i] + "}", replacements[i + 1]); diff --git a/src/main/java/com/loki/lochat/listener/ChatEventListener.java b/src/main/java/com/loki/lochat/listener/ChatEventListener.java index 98b7bcf..fde76e9 100644 --- a/src/main/java/com/loki/lochat/listener/ChatEventListener.java +++ b/src/main/java/com/loki/lochat/listener/ChatEventListener.java @@ -54,23 +54,44 @@ public class ChatEventListener implements Listener { } String filteredMessage = filterResult.filteredMessage(); - event.message(Component.text(filteredMessage)); + + // ะžะฟั€ะตะดะตะปัะตะผ ั‚ะธะฟ ั‡ะฐั‚ะฐ + boolean isGlobal = message.startsWith("!"); + + event.message(com.loki.lochat.utils.ChatFormatter.parse(filteredMessage)); - event.renderer(new EnhancedChatRenderer(sender, event.message())); + event.renderer(new EnhancedChatRenderer(sender, event.message(), isGlobal)); } private class EnhancedChatRenderer implements ChatRenderer { private final Player sender; private final Component originalMessage; + private final boolean isGlobal; - public EnhancedChatRenderer(Player sender, Component originalMessage) { + public EnhancedChatRenderer(Player sender, Component originalMessage, boolean isGlobal) { this.sender = sender; this.originalMessage = originalMessage; + this.isGlobal = isGlobal; } @Override public Component render(Player source, Component sourceDisplayName, Component message, Audience viewer) { - String prefix = plugin.getConfig().getString("chat.global.prefix", "[G]"); + // ะŸั€ะตั„ะธะบั ะฒ ะทะฐะฒะธัะธะผะพัั‚ะธ ะพั‚ ั‚ะธะฟะฐ ั‡ะฐั‚ะฐ + Component prefixComponent; + if (isGlobal) { + // [G] ั ะถะตะปั‚ะพะน ะฑัƒะบะฒะพะน G + prefixComponent = Component.text("[") + .color(net.kyori.adventure.text.format.NamedTextColor.GRAY) + .append(Component.text("G").color(net.kyori.adventure.text.format.NamedTextColor.GOLD)) + .append(Component.text("]").color(net.kyori.adventure.text.format.NamedTextColor.GRAY)); + } else { + // [L] ั ะณะพะปัƒะฑะพะน ะฑัƒะบะฒะพะน L + prefixComponent = Component.text("[") + .color(net.kyori.adventure.text.format.NamedTextColor.GRAY) + .append(Component.text("L").color(net.kyori.adventure.text.format.NamedTextColor.AQUA)) + .append(Component.text("]").color(net.kyori.adventure.text.format.NamedTextColor.GRAY)); + } + Component playerComponent = createPlayerComponent(source, sourceDisplayName); Component processedMessage = message; @@ -82,9 +103,10 @@ public class ChatEventListener implements Listener { processedMessage = mentionHandler.processMentions(processedMessage, source, viewerPlayer); } - return Component.text(prefix + " ") + return prefixComponent + .append(Component.text(" ")) .append(playerComponent) - .append(Component.text(": ")) + .append(Component.text(": ").color(net.kyori.adventure.text.format.NamedTextColor.GRAY)) .append(processedMessage); } @@ -129,7 +151,8 @@ public class ChatEventListener implements Listener { private Component processUrls(Component message) { String plainText = PlainTextComponentSerializer.plainText().serialize(message); - String urlPattern = "(https?://[\\w\\-._~:/?#\\[\\]@!35538117-c5a8-4bfe-b9f2-b0dcf9374222'()*+,;=%]+)"; + // Fixed regex: escape the dash in character class to avoid illegal range + String urlPattern = "(https?://[\\w\\-._~:/?#\\[\\]@!$&'()*+,;=%]+)"; java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(urlPattern); java.util.regex.Matcher matcher = pattern.matcher(plainText); diff --git a/src/main/java/com/loki/lochat/managers/AutoMessageManager.java b/src/main/java/com/loki/lochat/managers/AutoMessageManager.java index 5d626fa..e810a72 100644 --- a/src/main/java/com/loki/lochat/managers/AutoMessageManager.java +++ b/src/main/java/com/loki/lochat/managers/AutoMessageManager.java @@ -31,20 +31,15 @@ public class AutoMessageManager { } private void loadMessages() { - File file = new File(plugin.getDataFolder(), "automessages.yml"); - if (!file.exists()) { - plugin.saveResource("automessages.yml", false); - } - - FileConfiguration config = YamlConfiguration.loadConfiguration(file); + FileConfiguration config = plugin.getConfig(); // ะะฐัั‚ั€ะพะนะบะธ - prefix = config.getString("settings.prefix", "&6[&eINFO&6]&r"); - mode = config.getString("settings.mode", "sequential").toLowerCase(); + prefix = plugin.getConfigManager().getString("prefix", "�D4FF[LoChat]"); + mode = "sequential"; // ะ’ัะตะณะดะฐ ะฟะพัะปะตะดะพะฒะฐั‚ะตะปัŒะฝะพ - // ะ—ะฐะณั€ัƒะถะฐะตะผ ัะพะพะฑั‰ะตะฝะธั + // ะ—ะฐะณั€ัƒะถะฐะตะผ ัะพะพะฑั‰ะตะฝะธั ะธะท config.yml messages = new LinkedHashMap<>(); - ConfigurationSection msgSection = config.getConfigurationSection("messages"); + ConfigurationSection msgSection = config.getConfigurationSection("automessages-list"); if (msgSection != null) { for (String key : msgSection.getKeys(false)) { @@ -65,32 +60,7 @@ public class AutoMessageManager { } } - // ะžะฟั€ะตะดะตะปัะตะผ ะฟะพั€ัะดะพะบ - messageOrder = new ArrayList<>(); - - if (mode.equals("custom")) { - String orderStr = config.getString("settings.order", ""); - for (String item : orderStr.split(",")) { - String trimmed = item.trim(); - if (!trimmed.isEmpty()) { - try { - int index = Integer.parseInt(trimmed) - 1; - List keys = new ArrayList<>(messages.keySet()); - if (index >= 0 && index < keys.size()) { - messageOrder.add(keys.get(index)); - } - } catch (NumberFormatException e) { - if (messages.containsKey(trimmed)) { - messageOrder.add(trimmed); - } - } - } - } - } - - if (messageOrder.isEmpty()) { - messageOrder.addAll(messages.keySet()); - } + messageOrder = new ArrayList<>(messages.keySet()); plugin.getLogger().info("ะ—ะฐะณั€ัƒะถะตะฝะพ " + messages.size() + " ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธะน"); } diff --git a/src/main/java/com/loki/lochat/util/ChatFormatter.java b/src/main/java/com/loki/lochat/util/ChatFormatter.java deleted file mode 100644 index f35d12e..0000000 --- a/src/main/java/com/loki/lochat/util/ChatFormatter.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.loki.lochat.util; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.command.CommandSender; - -/** - * ะฃั‚ะธะปะธั‚ะฐ ะดะปั ั„ะพั€ะผะฐั‚ะธั€ะพะฒะฐะฝะธั ัะพะพะฑั‰ะตะฝะธะน - */ -public class ChatFormatter { - private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); - private static final LegacyComponentSerializer LEGACY = LegacyComponentSerializer.legacyAmpersand(); - - public static Object parse(String message) { - try { - return MINI_MESSAGE.deserialize(message); - } catch (Exception e) { - return LEGACY.deserialize(message); - } - } - - public static String toPlain(Object message) { - if (message instanceof Component component) { - return LegacyComponentSerializer.legacySection().serialize(component); - } - return message.toString(); - } - - public static void sendMessage(CommandSender sender, Object message) { - if (message instanceof Component component) { - sender.sendMessage(component); - } else { - sender.sendMessage(message.toString()); - } - } - - public static void broadcast(Object message) { - if (message instanceof Component component) { - org.bukkit.Bukkit.broadcast(component); - } - } - - public static String stripTags(String message) { - return message.replaceAll("<[^>]+>", "").replaceAll("ยง[0-9a-fk-or]", ""); - } - - public static String convertAllColors(String message) { - return message.replace("&", "ยง"); - } -} diff --git a/src/main/java/com/loki/lochat/utils/ChatFormatter.java b/src/main/java/com/loki/lochat/utils/ChatFormatter.java index c8e1349..61f21a8 100644 --- a/src/main/java/com/loki/lochat/utils/ChatFormatter.java +++ b/src/main/java/com/loki/lochat/utils/ChatFormatter.java @@ -40,24 +40,24 @@ public final class ChatFormatter { private static String convertLegacyFormats(String message) { if (message == null) return ""; - // ะšะพะฝะฒะตั€ั‚ะธั€ัƒะตะผ &#RRGGBB ะฒ <#RRGGBB> + // ะšะพะฝะฒะตั€ั‚ะธั€ัƒะตะผ &#RRGGBB ะฒ java.util.regex.Pattern pattern1 = java.util.regex.Pattern.compile("&#([0-9a-fA-F]{6})"); java.util.regex.Matcher matcher1 = pattern1.matcher(message); StringBuffer sb1 = new StringBuffer(); while (matcher1.find()) { String hex = matcher1.group(1).toLowerCase(); - matcher1.appendReplacement(sb1, "<#" + hex + ">"); + matcher1.appendReplacement(sb1, ""); } matcher1.appendTail(sb1); message = sb1.toString(); - // ะšะพะฝะฒะตั€ั‚ะธั€ัƒะตะผ #RRGGBB ะฒ <#RRGGBB> (ั‚ะพะปัŒะบะพ ะตัะปะธ ะฝะต ะฒะฝัƒั‚ั€ะธ ั‚ะตะณะพะฒ) + // ะšะพะฝะฒะตั€ั‚ะธั€ัƒะตะผ #RRGGBB ะฒ (ั‚ะพะปัŒะบะพ ะตัะปะธ ะฝะต ะฒะฝัƒั‚ั€ะธ ั‚ะตะณะพะฒ) java.util.regex.Pattern pattern2 = java.util.regex.Pattern.compile("(?)"); java.util.regex.Matcher matcher2 = pattern2.matcher(message); StringBuffer sb2 = new StringBuffer(); while (matcher2.find()) { String hex = matcher2.group(1).toLowerCase(); - matcher2.appendReplacement(sb2, "<#" + hex + ">"); + matcher2.appendReplacement(sb2, ""); } matcher2.appendTail(sb2); message = sb2.toString(); diff --git a/src/main/java/com/loki/lochat/utils/PlayerUtil.java b/src/main/java/com/loki/lochat/utils/PlayerUtil.java index bdb2b3f..a43e38d 100644 --- a/src/main/java/com/loki/lochat/utils/PlayerUtil.java +++ b/src/main/java/com/loki/lochat/utils/PlayerUtil.java @@ -17,20 +17,32 @@ public final class PlayerUtil { /** * Safely parses a sound name from config. - * Uses deprecated Sound.valueOf() for backward compatibility with string-based config values. + * Uses Registry API for modern sound parsing with fallback to reflection. * * @param soundName the sound name to parse * @param defaultSound the default sound to return if parsing fails * @return the parsed Sound or the default if invalid */ - @SuppressWarnings("deprecation") public static Sound parseSound(String soundName, Sound defaultSound) { if (soundName == null || soundName.isEmpty()) { return defaultSound; } + try { - return Sound.valueOf(soundName.toUpperCase()); - } catch (IllegalArgumentException e) { + // Try to get sound by key using Registry (modern way) + Sound sound = org.bukkit.Registry.SOUNDS.match(soundName); + if (sound != null) { + return sound; + } + } catch (Exception e) { + // Registry failed, try fallback + } + + // Fallback: try direct field access via reflection + try { + java.lang.reflect.Field field = Sound.class.getField(soundName.toUpperCase().trim()); + return (Sound) field.get(null); + } catch (Exception ex) { return defaultSound; } } diff --git a/src/main/java/com/loki/lochat/utils/TimeFormatter.java b/src/main/java/com/loki/lochat/utils/TimeFormatter.java index a5c12ee..54c3469 100644 --- a/src/main/java/com/loki/lochat/utils/TimeFormatter.java +++ b/src/main/java/com/loki/lochat/utils/TimeFormatter.java @@ -6,9 +6,13 @@ public final class TimeFormatter { } public static String format(long millis) { - if (millis <= 0) { + if (millis < 0) { return "0ั"; } + + if (millis == 0) { + return "ะฝะฐะฒัะตะณะดะฐ"; + } long seconds = millis / 1000; long minutes = seconds / 60; @@ -16,18 +20,21 @@ public final class TimeFormatter { long days = hours / 24; if (days > 0) { - return days + "ะด " + (hours % 24) + "ั‡"; + long remainingHours = hours % 24; + return remainingHours > 0 ? days + "ะด " + remainingHours + "ั‡" : days + "ะด"; } else if (hours > 0) { - return hours + "ั‡ " + (minutes % 60) + "ะผ"; + long remainingMinutes = minutes % 60; + return remainingMinutes > 0 ? hours + "ั‡ " + remainingMinutes + "ะผ" : hours + "ั‡"; } else if (minutes > 0) { - return minutes + "ะผ " + (seconds % 60) + "ั"; + long remainingSeconds = seconds % 60; + return remainingSeconds > 0 ? minutes + "ะผ " + remainingSeconds + "ั" : minutes + "ะผ"; } else { return seconds + "ั"; } } public static long parse(String timeStr) { - if (timeStr == null || timeStr.isEmpty()) { + if (timeStr == null || timeStr.trim().isEmpty()) { return 0; } @@ -38,8 +45,12 @@ public final class TimeFormatter { if (Character.isDigit(c)) { number.append(c); } else if (number.length() > 0) { - long value = Long.parseLong(number.toString()); - totalMillis += getMillisForUnit(c, value); + try { + long value = Long.parseLong(number.toString()); + totalMillis += getMillisForUnit(c, value); + } catch (NumberFormatException e) { + // Skip invalid numbers + } number.setLength(0); } } diff --git a/src/main/resources/automessages.yml b/src/main/resources/automessages.yml deleted file mode 100644 index d696774..0000000 --- a/src/main/resources/automessages.yml +++ /dev/null @@ -1,90 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoChat Auto Messages โ•‘ -# โ•‘ ะะฒั‚ะพัะพะพะฑั‰ะตะฝะธั ั‡ะฐั‚ะฐ โ•‘ -# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -settings: - # ะŸั€ะตั„ะธะบั ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธะน - prefix: "�D4FF[�D4FFI�CAF7N�C0EEF�B7E6OcCC]" - - # ะ ะตะถะธะผ ะพั‚ะฟั€ะฐะฒะบะธ: sequential (ะฟะพ ะฟะพั€ัะดะบัƒ), random (ัะปัƒั‡ะฐะนะฝะพ), custom (ัะฒะพะน ะฟะพั€ัะดะพะบ) - mode: "sequential" - - # ะกะฒะพะน ะฟะพั€ัะดะพะบ ัะพะพะฑั‰ะตะฝะธะน (ั‚ะพะปัŒะบะพ ะดะปั ั€ะตะถะธะผะฐ custom) - # ะœะพะถะฝะพ ัƒะบะฐะทั‹ะฒะฐั‚ัŒ ะฝะพะผะตั€ะฐ ะธะปะธ ะฝะฐะทะฒะฐะฝะธั ัะพะพะฑั‰ะตะฝะธะน - order: "welcome, rules, discord, website" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -messages: - # ะŸั€ะธะฒะตั‚ัั‚ะฒะตะฝะฝะพะต ัะพะพะฑั‰ะตะฝะธะต - welcome: - - "ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฝะฐ ะฝะฐัˆ ัะตั€ะฒะตั€!" - - "ะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /help ะดะปั ะฟะพะปัƒั‡ะตะฝะธั ะฟะพะผะพั‰ะธ" - - # ะŸั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ - rules: - - "ะกะพะฑะปัŽะดะฐะนั‚ะต ะฟั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ!" - - "ะŸะพะดั€ะพะฑะฝะตะต: /rules" - - # ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ Discord - discord: - - "ะŸั€ะธัะพะตะดะธะฝัะนั‚ะตััŒ ะบ ะฝะฐัˆะตะผัƒ Discord!" - - "ะกัั‹ะปะบะฐ: discord.gg/example" - - # ะ’ะตะฑ-ัะฐะนั‚ - website: - - "ะŸะพัะตั‚ะธั‚ะต ะฝะฐัˆ ัะฐะนั‚!" - - "ะะดั€ะตั: example.com" - - # ะ”ะพะฝะฐั‚ ะธะฝั„ะพั€ะผะฐั†ะธั - donate: - - "ะŸะพะดะดะตั€ะถะธั‚ะต ัะตั€ะฒะตั€!" - - "ะ”ะพะฝะฐั‚: donate.example.com" - - # ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ - gradients: - - "ะกะพะทะดะฐะนั‚ะต ะบั€ะฐัะธะฒั‹ะน ะฝะธะบ!" - - "ะšะพะผะฐะฝะดะฐ: /color ะดะปั ะณั€ะฐะดะธะตะฝั‚ะพะฒ" - - # ะงะฐั‚ ะบะพะผะฐะฝะดั‹ - chat-commands: - - "ะŸะพะปะตะทะฝั‹ะต ะบะพะผะฐะฝะดั‹ ั‡ะฐั‚ะฐ:" - - "/msg <ะธะณั€ะพะบ> <ัะพะพะฑั‰ะตะฝะธะต> - ะปะธั‡ะฝะพะต ัะพะพะฑั‰ะตะฝะธะต" - - "/ignore <ะธะณั€ะพะบ> - ะธะณะฝะพั€ะธั€ะพะฒะฐั‚ัŒ ะธะณั€ะพะบะฐ" - - # ะžะฝะปะฐะนะฝ ัั‚ะฐั‚ะธัั‚ะธะบะฐ - online-stats: - - "ะกะตะนั‡ะฐั ะพะฝะปะฐะนะฝ: {online} ะธะณั€ะพะบะพะฒ" - - "ะœะฐะบัะธะผัƒะผ ะทะฐ ะดะตะฝัŒ: {max_online}" - - # ะ’ั€ะตะผั ะฝะฐ ัะตั€ะฒะตั€ะต - server-time: - - "ะ’ั€ะตะผั ะฝะฐ ัะตั€ะฒะตั€ะต: {time}" - - "ะ”ะฐั‚ะฐ: {date}" - - # ะกะพะฑั‹ั‚ะธั - events: - - "ะกะปะตะดะธั‚ะต ะทะฐ ัะพะฑั‹ั‚ะธัะผะธ!" - - "ะ ะฐัะฟะธัะฐะฝะธะต: /events" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะŸะ›ะ•ะ™ะกะฅะžะ›ะ”ะ•ะ ะซ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะ”ะพัั‚ัƒะฟะฝั‹ะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹ ะฒ ัะพะพะฑั‰ะตะฝะธัั…: -# {online} - ะบะพะปะธั‡ะตัั‚ะฒะพ ะธะณั€ะพะบะพะฒ ะพะฝะปะฐะนะฝ -# {max_online} - ะผะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะธะณั€ะพะบะพะฒ (ะธะท server.properties) -# {time} - ั‚ะตะบัƒั‰ะตะต ะฒั€ะตะผั -# {date} - ั‚ะตะบัƒั‰ะฐั ะดะฐั‚ะฐ -# {server_name} - ะฝะฐะทะฒะฐะฝะธะต ัะตั€ะฒะตั€ะฐ -# {tps} - TPS ัะตั€ะฒะตั€ะฐ (ะตัะปะธ ะดะพัั‚ัƒะฟะฝะพ) -# -# ะขะฐะบะถะต ะฟะพะดะดะตั€ะถะธะฒะฐัŽั‚ัั ะฒัะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹ PlaceholderAPI \ No newline at end of file diff --git a/src/main/resources/chat.yml b/src/main/resources/chat.yml deleted file mode 100644 index 2bad806..0000000 --- a/src/main/resources/chat.yml +++ /dev/null @@ -1,3 +0,0 @@ -formats: - global: "[G] {prefix}{name}: {message}" - local: "{prefix}{name}: {message}" diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1abd5ba..2652b42 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,75 +1,122 @@ # โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— # โ•‘ LoChat Configuration โ•‘ -# โ•‘ ะŸั€ะพะดะฒะธะฝัƒั‚ั‹ะน ั‡ะฐั‚-ะฟะปะฐะณะธะฝ ะดะปั Paper โ•‘ # โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ -# โ•‘ ะะฒั‚ะพั€: loki โ•‘ # โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -config-version: 3 +config-version: 4 +prefix: "�D4FF[LoChat]" # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ”‚ ะ”ะžะŸะžะ›ะะ˜ะขะ•ะ›ะฌะะซะ• ะšะžะะคะ˜ะ“ะ˜ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -# ะŸั€ะตั„ะธะบั ะฟะปะฐะณะธะฝะฐ ะฒ ัะพะพะฑั‰ะตะฝะธัั… -prefix: "�D4FF[�D4FFL�CAF7o�C0EEC�B7E6h�ADDDa�A3D5tcCC]" +# ะ—ะฐะณั€ัƒะถะฐั‚ัŒ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะพะฝะฝั‹ะต ั„ะฐะนะปั‹ +load-additional-configs: true + +# ะกะฟะธัะพะบ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ั… ะบะพะฝั„ะธะณะพะฒ ะดะปั ะทะฐะณั€ัƒะทะบะธ +additional-configs: + - "config/chat-formats.yml" # ะคะพั€ะผะฐั‚ั‹ ั‡ะฐั‚ะฐ ะธ ัะพะพะฑั‰ะตะฝะธะน + - "config/filters.yml" # ะะฐัั‚ั€ะพะนะบะธ ั„ะธะปัŒั‚ั€ะพะฒ + - "config/gradient-config.yml" # ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะณั€ะฐะดะธะตะฝั‚ะพะฒ + - "config/automessages.yml" # ะะฒั‚ะพัะพะพะฑั‰ะตะฝะธั + - "config/mute-config.yml" # ะกะธัั‚ะตะผะฐ ะผัƒั‚ะพะฒ + - "config/sounds.yml" # ะ—ะฒัƒะบะพะฒั‹ะต ัั„ั„ะตะบั‚ั‹ + - "config/database.yml" # ะ‘ะฐะทะฐ ะดะฐะฝะฝั‹ั… + - "config/integrations.yml" # ะ˜ะฝั‚ะตะณั€ะฐั†ะธะธ ั ะดั€ัƒะณะธะผะธ ะฟะปะฐะณะธะฝะฐะผะธ + - "config/custom-commands.yml" # ะšะฐัั‚ะพะผะฝั‹ะต ะบะพะผะฐะฝะดั‹ + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะ ะฃะšะขะฃะ ะ ะ”ะะะะซะฅ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +# ะะฐัั‚ั€ะพะนะบะธ ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั… +data-storage: + # ะžัะฝะพะฒะฝะฐั ะฟะฐะฟะบะฐ ะดะปั ะดะฐะฝะฝั‹ั… + data-folder: "data/" + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะพั‚ะดะตะปัŒะฝั‹ะต ั„ะฐะนะปั‹ ะดะปั ั€ะฐะทะฝั‹ั… ั‚ะธะฟะพะฒ ะดะฐะฝะฝั‹ั… + separate-files: true + + # ะคะฐะนะปั‹ ะดะฐะฝะฝั‹ั… + files: + main: "data.yml" # ะžัะฝะพะฒะฝั‹ะต ะดะฐะฝะฝั‹ะต (ะตัะปะธ separate-files: false) + players: "players.yml" # ะ”ะฐะฝะฝั‹ะต ะธะณั€ะพะบะพะฒ + gradients: "gradients.yml" # ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ + mutes: "mutes.yml" # ะœัƒั‚ั‹ ะธ ะธัั‚ะพั€ะธั + ignores: "ignores.yml" # ะ˜ะณะฝะพั€ะธั€ะพะฒะฐะฝะธะต + statistics: "statistics.yml" # ะกั‚ะฐั‚ะธัั‚ะธะบะฐ + filter-words: "filter-words.json" # ะ—ะฐะฟั€ะตั‰ะตะฝะฝั‹ะต ัะปะพะฒะฐ + + # ะะฒั‚ะพัะพั…ั€ะฐะฝะตะฝะธะต (ัะตะบัƒะฝะดั‹) + auto-save-interval: 300 + + # ะกะพะทะดะฐะฒะฐั‚ัŒ ั€ะตะทะตั€ะฒะฝั‹ะต ะบะพะฟะธะธ + backup: + enabled: true + interval: 3600 # ะšะฐะถะดั‹ะน ั‡ะฐั + max-backups: 24 + folder: "backups/" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ HUB COMMAND โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +hub_command: + # Enable/disable /hub command + enabled: true + + # Target server name for /hub command + # Sends player to this server via BungeeCord + server: "hub" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะšะะกะขะžะœะะซะ• ะšะžะœะะะ”ะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +custom-commands: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะบะฐัั‚ะพะผะฝั‹ะต ะบะพะผะฐะฝะดั‹ + enabled: true + + # ะะฐัั‚ั€ะพะนะบะธ Discord ะบะพะผะฐะฝะดั‹ + discord: + invite-link: "discord.gg/example" + + # ะะฐัั‚ั€ะพะนะบะธ Website ะบะพะผะฐะฝะดั‹ + website: + url: "https://example.com" + + # ะะฐัั‚ั€ะพะนะบะธ ะบะพะพั€ะดะธะฝะฐั‚ + coords: + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะบะพะพั€ะดะธะฝะฐั‚ั‹ ะฒ actionbar + show-in-actionbar: true + # ะ’ั€ะตะผั ะฟะพะบะฐะทะฐ ะฒ actionbar (ั‚ะธะบะธ) + actionbar-duration: 60 # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” # โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะงะะขะ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ chat: - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - # ะ“ะ›ะžะ‘ะะ›ะฌะะซะ™ ะงะะข - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• global: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะณะปะพะฑะฐะปัŒะฝั‹ะน ั‡ะฐั‚ enabled: true - # ะกะธะผะฒะพะป ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ ะฒ ะณะปะพะฑะฐะปัŒะฝั‹ะน ั‡ะฐั‚ - symbol: "!" - # ะšัƒะปะดะฐัƒะฝ ะผะตะถะดัƒ ัะพะพะฑั‰ะตะฝะธัะผะธ (ัะตะบัƒะฝะดั‹) cooldown: 3 - # ะŸั€ะตั„ะธะบั ะณะปะพะฑะฐะปัŒะฝะพะณะพ ั‡ะฐั‚ะฐ prefix: "&#FFD700[G]" - format: "{prefix} �FF88{player}򇨣: {message}" - - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - # ะ›ะžะšะะ›ะฌะะซะ™ ะงะะข - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + local: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะปะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚ enabled: true - # ะ ะฐะดะธัƒั ะปะพะบะฐะปัŒะฝะพะณะพ ั‡ะฐั‚ะฐ (ะฑะปะพะบะธ) radius: 100 - # ะšัƒะปะดะฐัƒะฝ ะผะตะถะดัƒ ัะพะพะฑั‰ะตะฝะธัะผะธ (ัะตะบัƒะฝะดั‹) cooldown: 1 - # ะŸั€ะตั„ะธะบั ะปะพะบะฐะปัŒะฝะพะณะพ ั‡ะฐั‚ะฐ prefix: "WCEEB[L]" - format: "{prefix} �FF88{player}򇨣: {message}" - - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - # ะ›ะ˜ะงะะซะ• ะกะžะžะ‘ะฉะ•ะะ˜ะฏ - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + pm: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะปะธั‡ะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั enabled: true - # ะšัƒะปะดะฐัƒะฝ ะผะตะถะดัƒ PM (ัะตะบัƒะฝะดั‹) cooldown: 2 - # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ PM ะฒ ะบะพะฝัะพะปัŒ - log: false - # ะ—ะฒัƒะบ ะฟั€ะธ ะฟะพะปัƒั‡ะตะฝะธะธ PM sound: true sound-type: "BLOCK_NOTE_BLOCK_PLING" - - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - # HOVER TOOLTIP (ะฝะฐะฒะตะดะตะฝะธะต ะฝะฐ ะฝะธะบ) - # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + log: false + hover: - # ะ’ะบะปัŽั‡ะธั‚ัŒ hover tooltip ะฟั€ะธ ะฝะฐะฒะตะดะตะฝะธะธ ะฝะฐ ะฝะธะบ enabled: true - # ะคะพั€ะผะฐั‚ tooltip (ัะฟะธัะพะบ ัั‚ั€ะพะบ) - # ะŸะปะตะนัั…ะพะปะดะตั€ั‹: {player}, {world}, {ping}, {gamemode}, {health}, {food} - # ะŸะพะดะดะตั€ะถะบะฐ PlaceholderAPI: %placeholder% format: - "ะ˜ะณั€ะพะบ: {player}" - "ะœะธั€: {world}" @@ -81,87 +128,54 @@ chat: # โ”‚ ะ“ะ ะะ”ะ˜ะ•ะะขะะซะ• ะะ˜ะšะ˜ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -# ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะผ ะผะพะดัƒะปะตะผ (ะฒัั‚ั€ะพะตะฝะฝั‹ะน LoPreff) lopreff: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ enabled: true - # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ ะฒ ั‡ะฐั‚ะต use-gradient-name: true - # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะฐัั‚ะพะผะฝั‹ะน ะฟั€ะตั„ะธะบั use-custom-prefix: true -# ะะฐัั‚ั€ะพะนะบะธ ะพั‚ะพะฑั€ะฐะถะตะฝะธั ะฝะธะบะฐ display: - # ะžะฑะฝะพะฒะปัั‚ัŒ display name ะธะณั€ะพะบะฐ (ะฟะพะบะฐะทั‹ะฒะฐะตั‚ ะฟั€ะตั„ะธะบั+ะฝะธะบ ะฝะฐะด ะณะพะปะพะฒะพะน) update-display-name: true - # ะžะฑะฝะพะฒะปัั‚ัŒ tab list update-tab-list: true # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะฃะŸะžะœะ˜ะะะะ˜ะฏ โ”‚ +# โ”‚ ะ”ะžะŸะžะ›ะะ˜ะขะ•ะ›ะฌะะซะ• ะคะฃะะšะฆะ˜ะ˜ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ mentions: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ัะธัั‚ะตะผัƒ ัƒะฟะพะผะธะฝะฐะฝะธะน (@nickname) enabled: true - # ะ’ะพัะฟั€ะพะธะทะฒะพะดะธั‚ัŒ ะทะฒัƒะบ ะฟั€ะธ ัƒะฟะพะผะธะฝะฐะฝะธะธ sound: true - # ะขะธะฟ ะทะฒัƒะบะฐ sound-type: "BLOCK_NOTE_BLOCK_PLING" - # ะŸะพะดัะฒะตั‚ะบะฐ ัƒะฟะพะผะธะฝะฐะฝะธั ะฒ ั‡ะฐั‚ะต highlight: "&#FFFF00@{player}" self-highlight: "&#FFD700{player}" -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะะ’ะขะžะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + everyone: + enabled: true + permission: "lochat.mention.everyone" + here: + enabled: true + permission: "lochat.mention.here" + role: + enabled: true + permission: "lochat.mention.role" automessages: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธั enabled: true - # ะ˜ะฝั‚ะตั€ะฒะฐะป ะผะตะถะดัƒ ัะพะพะฑั‰ะตะฝะธัะผะธ (ัะตะบัƒะฝะดั‹) interval: 300 - # ะกะปัƒั‡ะฐะนะฝั‹ะน ะฟะพั€ัะดะพะบ ัะพะพะฑั‰ะตะฝะธะน random: false -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - announcements: - # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ title ะฟั€ะธ ะพะฑัŠัะฒะปะตะฝะธะธ show-title: true - # ะ—ะฐะณะพะปะพะฒะพะบ title title-header: "&#FF6B6Bะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•" - # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ actionbar ะฟั€ะธ ะพะฑัŠัะฒะปะตะฝะธะธ show-actionbar: true - # ะ’ั€ะตะผั ะฟะพะบะฐะทะฐ title (ะฒ ัะตะบัƒะฝะดะฐั…) title-duration: 3 -# ะคะพั€ะผะฐั‚ ะพะฑัŠัะฒะปะตะฝะธั -formats: - announcement: "&#FF6B6B[ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•] " - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะงะ˜ะกะขะšะ ะงะะขะ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - clearchat: message: - # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต ะฟะพัะปะต ะพั‡ะธัั‚ะบะธ ั‡ะฐั‚ะฐ enabled: true - # ะขะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั ({player} - ะธะผั ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะฐ) text: "&#FF6B6Bะงะฐั‚ ะพั‡ะธั‰ะตะฝ ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะพะผ {player}" -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะ“ะžะ›ะžะ’ะซ ะ˜ะ“ะ ะžะšะžะ’ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - head-emoji: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ัƒะฝะบั†ะธัŽ ะณะพะปะพะฒ ะธะณั€ะพะบะพะฒ enabled: true - # ะ ะฐะทั€ะตัˆะธั‚ัŒ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต @head ะบะพะผะฐะฝะด allow-player-heads: true - # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะณะพะปะพะฒ ะฒ ะพะดะฝะพะผ ัะพะพะฑั‰ะตะฝะธะธ max-heads-per-message: 3 # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” @@ -169,29 +183,8 @@ head-emoji: # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ mute: - # ะกะพะพะฑั‰ะตะฝะธั ั ะฟะปะตะนัั…ะพะปะดะตั€ะฐะผะธ: - # %duration% - ะฒั€ะตะผั ะผัƒั‚ะฐ - # %reason% - ะฟั€ะธั‡ะธะฝะฐ - # %player% - ะทะฐะผัƒั‡ะตะฝะฝั‹ะน ะธะณั€ะพะบ - # %operator% - ะผะพะดะตั€ะฐั‚ะพั€ - - messages: - muted: "&#FF6B6B%player% 󙀸ะฑั‹ะป ะทะฐะผัƒั‡ะตะฝ ะฝะฐ &#FF6B6B%duration% 󙀸ะผะพะดะตั€ะฐั‚ะพั€ะพะผ &#FF6B6B%operator%󙀸. ะŸั€ะธั‡ะธะฝะฐ: &#FF6B6B%reason%" - unmuted: "BCB77%player% 󙀸ะฑั‹ะป ั€ะฐะทะผัƒั‡ะตะฝ ะผะพะดะตั€ะฐั‚ะพั€ะพะผ BCB77%operator%" - you-muted: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹ ะฝะฐ %duration%! ะŸั€ะธั‡ะธะฝะฐ: %reason%" - you-muted-permanent: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹ ะฝะฐะฒัะตะณะดะฐ! ะŸั€ะธั‡ะธะฝะฐ: %reason%" - cannot-chat: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹! ะžัั‚ะฐะปะพััŒ: %duration%" - cannot-chat-permanent: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹ ะฝะฐะฒัะตะณะดะฐ!" - silent-muted: "󙀸[ะขะธั…ะพ] &#FF6B6B%player% 󙀸ะทะฐะผัƒั‡ะตะฝ ะฝะฐ &#FF6B6B%duration% 󙀸(%operator%). ะŸั€ะธั‡ะธะฝะฐ: %reason%" - silent-unmuted: "󙀸[ะขะธั…ะพ] BCB77%player% 󙀸ั€ะฐะทะผัƒั‡ะตะฝ (%operator%)" - - # ะŸั€ะธั‡ะธะฝะฐ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะตัะปะธ ะฝะต ัƒะบะฐะทะฐะฝะฐ default-reason: "ะะฐั€ัƒัˆะตะฝะธะต ะฟั€ะฐะฒะธะป" - - # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะฒั€ะตะผั ะผัƒั‚ะฐ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (ะตัะปะธ ะฝะต ัƒะบะฐะทะฐะฝะพ ะฒั€ะตะผั) default-duration: "7d" - - # ะ”ะพัั‚ัƒะฟะฝั‹ะต ะดะปะธั‚ะตะปัŒะฝะพัั‚ะธ ะดะปั ะฟั€ะฐะฒ lochat.mute.dur.<ะฒั€ะตะผั> durations: - "10m" - "30m" @@ -210,8 +203,16 @@ mute: # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ filters: - url: + caps: enabled: true + max-percent: 70 + min-length: 5 + auto-lowercase: true + + advertising: + enabled: true + block-hidden-urls: true + block-domains: true whitelist: - "youtube.com" - "youtu.be" @@ -219,30 +220,59 @@ filters: - "twitch.tv" blacklist: - "scam-site.com" - blocked-message: "&#FF6B6Bะก&#FF5F5Fั&#FF5353ั‹&#FF4747ะป&#FF3B3Bะบ&#FF2F2Fะธ &#FF2323ะท&#FF1717ะฐ&#FF0B0Bะฟ&#FF0000ั€&#FF0000ะต&#FF0000ั‰&#FF0000ะต&#FF0000ะฝ&#FF0000ั‹!" - + ip: enabled: true block: false replacement: "[IP ัะบั€ั‹ั‚]" - blocked-message: "&#FF6B6BI&#FF5F5FP &#FF5353ะฐ&#FF4747ะด&#FF3B3Bั€&#FF2F2Fะต&#FF2323ั&#FF1717ะฐ &#FF0B0Bะท&#FF0000ะฐ&#FF0000ะฟ&#FF0000ั€&#FF0000ะต&#FF0000ั‰&#FF0000ะต&#FF0000ะฝ&#FF0000ั‹!" - + repeat: enabled: true max-repeats: 3 +# ะคะพั€ะผะฐั‚ั‹ (ะฝะต ั‚ั€ะพะณะฐั‚ัŒ) +formats: + announcement: "&#FF6B6B[ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•] " + # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะฃะŸะžะœะ˜ะะะะ˜ะฏ โ”‚ +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะ“ะ ะะ”ะ˜ะ•ะะขะžะ’ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -advanced-mentions: - enabled: true - everyone: - enabled: true - permission: "lochat.mention.everyone" - here: - enabled: true - permission: "lochat.mention.here" - role: - enabled: true - permission: "lochat.mention.role" \ No newline at end of file +gradient: + storage-type: "file" + min-colors: 1 + max-colors: 7 + price-per-color: 50 + prefix-price: 500 + prefix-one-time-purchase: true + max-prefix-length: 16 + color-cooldown: 60 + prefix-cooldown: 120 + + presets: + fire: [ "#FF4500", "#FF6347", "#FFD700" ] + ocean: [ "#00CED1", "#1E90FF", "#4169E1" ] + forest: [ "#228B22", "#32CD32", "#90EE90" ] + sunset: [ "#FF69B4", "#FF1493", "#DC143C" ] + rainbow: [ "#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#9400D3" ] + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะ’ะขะžะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +automessages-list: + welcome: + - "&#FFD700ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฝะฐ ะฝะฐัˆ ัะตั€ะฒะตั€!" + - "WCEEBะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /help ะดะปั ะฟะพะปัƒั‡ะตะฝะธั ะฟะพะผะพั‰ะธ" + + rules: + - "&#FF6B6BะกะพะฑะปัŽะดะฐะนั‚ะต ะฟั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ!" + - "WCEEBะŸะพะดั€ะพะฑะฝะตะต: /rules" + + discord: + - "ᱹDAะŸั€ะธัะพะตะดะธะฝัะนั‚ะตััŒ ะบ ะฝะฐัˆะตะผัƒ Discord!" + - "WCEEBะกัั‹ะปะบะฐ: discord.gg/example" + + website: + - "�FF88ะŸะพัะตั‚ะธั‚ะต ะฝะฐัˆ ัะฐะนั‚!" + - "WCEEBะะดั€ะตั: example.com" diff --git a/src/main/resources/config/automessages.yml b/src/main/resources/config/automessages.yml new file mode 100644 index 0000000..5208575 --- /dev/null +++ b/src/main/resources/config/automessages.yml @@ -0,0 +1,255 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Auto Messages โ•‘ +# โ•‘ ะะฒั‚ะพัะพะพะฑั‰ะตะฝะธั โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +settings: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธั + enabled: true + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะผะตะถะดัƒ ัะพะพะฑั‰ะตะฝะธัะผะธ (ัะตะบัƒะฝะดั‹) + interval: 300 + + # ะกะปัƒั‡ะฐะนะฝั‹ะน ะฟะพั€ัะดะพะบ ัะพะพะฑั‰ะตะฝะธะน + random: true + + # ะœะธะฝะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะธะณั€ะพะบะพะฒ ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ + min-players: 1 + + # ะŸั€ะตั„ะธะบั ะดะปั ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธะน + prefix: "�D4FF[ะะฒั‚ะพ]" + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ะฒ ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะต ะผะธั€ั‹ + worlds: + - "world" + - "world_nether" + - "world_the_end" + + # ะขะธะฟ ะพั‚ะฟั€ะฐะฒะบะธ: chat, actionbar, title, bossbar + type: "chat" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +messages: + welcome: + enabled: true + weight: 10 # ะ’ะตั ะดะปั ัะปัƒั‡ะฐะนะฝะพะณะพ ะฒั‹ะฑะพั€ะฐ (ะฑะพะปัŒัˆะต = ั‡ะฐั‰ะต) + permission: "" # ะŸัƒัั‚ะพะต = ะดะปั ะฒัะตั… + worlds: [] # ะŸัƒัั‚ะพะต = ะฒะพ ะฒัะตั… ะผะธั€ะฐั… + content: + - "&#FFD700ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฝะฐ ะฝะฐัˆ ัะตั€ะฒะตั€!" + - "WCEEBะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /help ะดะปั ะฟะพะปัƒั‡ะตะฝะธั ะฟะพะผะพั‰ะธ" + - "BCB77ะŸั€ะธัั‚ะฝะพะน ะธะณั€ั‹!" + + rules: + enabled: true + weight: 8 + permission: "" + worlds: [] + content: + - "&#FF6B6BะกะพะฑะปัŽะดะฐะนั‚ะต ะฟั€ะฐะฒะธะปะฐ ัะตั€ะฒะตั€ะฐ!" + - "WCEEBะŸะพะดั€ะพะฑะฝะตะต: /rules" + - "&#FFA726ะะฐั€ัƒัˆะตะฝะธั ะบะฐั€ะฐัŽั‚ัั ะผัƒั‚ะพะผ ะธะปะธ ะฑะฐะฝะพะผ" + + discord: + enabled: true + weight: 7 + permission: "" + worlds: [] + content: + - "ᱹDAะŸั€ะธัะพะตะดะธะฝัะนั‚ะตััŒ ะบ ะฝะฐัˆะตะผัƒ Discord!" + - "WCEEBะกัั‹ะปะบะฐ: discord.gg/example" + - "BCB77ะžะฑั‰ะฐะนั‚ะตััŒ ั ะธะณั€ะพะบะฐะผะธ ะฒะฝะต ะธะณั€ั‹!" + + website: + enabled: true + weight: 6 + permission: "" + worlds: [] + content: + - "�FF88ะŸะพัะตั‚ะธั‚ะต ะฝะฐัˆ ัะฐะนั‚!" + - "WCEEBะะดั€ะตั: example.com" + - "BCB77ะšะฐั€ั‚ะฐ ัะตั€ะฒะตั€ะฐ, ัั‚ะฐั‚ะธัั‚ะธะบะฐ ะธ ะผะฝะพะณะพะต ะดั€ัƒะณะพะต!" + + donate: + enabled: true + weight: 5 + permission: "" + worlds: [] + content: + - "&#FFD700ะŸะพะดะดะตั€ะถะธั‚ะต ัะตั€ะฒะตั€ ะดะพะฝะฐั‚ะพะผ!" + - "WCEEBะŸะพะปัƒั‡ะธั‚ะต VIP ัั‚ะฐั‚ัƒั ะธ ะฟั€ะธะฒะธะปะตะณะธะธ" + - "BCB77ะŸะพะดั€ะพะฑะฝะตะต: /donate" + + tips: + enabled: true + weight: 9 + permission: "" + worlds: [] + content: + - "WCEEB๐Ÿ’ก ะกะพะฒะตั‚: ะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /coords ะดะปั ะฟั€ะพัะผะพั‚ั€ะฐ ะบะพะพั€ะดะธะฝะฐั‚" + - "WCEEB๐Ÿ’ก ะกะพะฒะตั‚: /ignore <ะธะณั€ะพะบ> - ะธะณะฝะพั€ะธั€ะพะฒะฐั‚ัŒ ะธะณั€ะพะบะฐ" + - "WCEEB๐Ÿ’ก ะกะพะฒะตั‚: /msg <ะธะณั€ะพะบ> <ัะพะพะฑั‰ะตะฝะธะต> - ะปะธั‡ะฝะพะต ัะพะพะฑั‰ะตะฝะธะต" + - "WCEEB๐Ÿ’ก ะกะพะฒะตั‚: /reply <ัะพะพะฑั‰ะตะฝะธะต> - ะพั‚ะฒะตั‚ะธั‚ัŒ ะฝะฐ ะ›ะก" + - "WCEEB๐Ÿ’ก ะกะพะฒะตั‚: /color <ั†ะฒะตั‚> - ะธะทะผะตะฝะธั‚ัŒ ั†ะฒะตั‚ ะฝะธะบะฐ" + + events: + enabled: false + weight: 3 + permission: "" + worlds: [] + content: + - "&#FF69B4๐ŸŽ‰ ะกะบะพั€ะพ ัะพะฑั‹ั‚ะธะต ะฝะฐ ัะตั€ะฒะตั€ะต!" + - "WCEEBะกะปะตะดะธั‚ะต ะทะฐ ะฝะพะฒะพัั‚ัะผะธ ะฒ Discord" + - "BCB77ะฃั‡ะฐัั‚ะฒัƒะนั‚ะต ะธ ะฟะพะปัƒั‡ะฐะนั‚ะต ะฟั€ะธะทั‹!" + + economy: + enabled: false + weight: 4 + permission: "" + worlds: [] + content: + - "&#FFD700๐Ÿ’ฐ ะ—ะฐั€ะฐะฑะฐั‚ั‹ะฒะฐะนั‚ะต ะดะตะฝัŒะณะธ ะฝะฐ ัะตั€ะฒะตั€ะต!" + - "WCEEBะŸั€ะพะดะฐะฒะฐะนั‚ะต ั€ะตััƒั€ัั‹ ะฒ ะผะฐะณะฐะทะธะฝะต" + - "BCB77ะšะพะผะฐะฝะดั‹: /shop, /sell, /balance" + + pvp: + enabled: false + weight: 2 + permission: "" + worlds: ["world_pvp"] + content: + - "&#FF6B6Bโš”๏ธ ะ’ั‹ ะฒ PvP ะทะพะฝะต!" + - "&#FFA726ะ‘ัƒะดัŒั‚ะต ะพัั‚ะพั€ะพะถะฝั‹ ั ะดั€ัƒะณะธะผะธ ะธะณั€ะพะบะฐะผะธ" + - "WCEEBะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /spawn ะดะปั ะฒั‹ั…ะพะดะฐ" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะŸะ•ะฆะ˜ะะ›ะฌะะซะ• ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +special: + # ะกะพะพะฑั‰ะตะฝะธั ะดะปั ะฝะพะฒะธั‡ะบะพะฒ (ะฟะตั€ะฒั‹ะน ะฒั…ะพะด) + newbie: + enabled: true + delay: 30 # ะ—ะฐะดะตั€ะถะบะฐ ะฟะพัะปะต ะฒั…ะพะดะฐ (ัะตะบัƒะฝะดั‹) + content: + - "BCB77ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฝะฐ ัะตั€ะฒะตั€, {player}!" + - "WCEEBะญั‚ะพ ะฒะฐัˆ ะฟะตั€ะฒั‹ะน ะฒะธะทะธั‚. ะ˜ะทัƒั‡ะธั‚ะต /help" + - "&#FFD700ะ–ะตะปะฐะตะผ ะฟั€ะธัั‚ะฝะพะน ะธะณั€ั‹!" + + # ะกะพะพะฑั‰ะตะฝะธั ะฟั€ะธ ะฒั…ะพะดะต + join: + enabled: false + delay: 5 + content: + - "BCB77ะก ะฒะพะทะฒั€ะฐั‰ะตะฝะธะตะผ, {player}!" + - "WCEEBะะต ะทะฐะฑัƒะดัŒั‚ะต ะฟั€ะพะฒะตั€ะธั‚ัŒ ะฝะพะฒะพัั‚ะธ: /news" + + # ะกะพะพะฑั‰ะตะฝะธั ะฟั€ะธ ะดะพัั‚ะธะถะตะฝะธัั… + achievement: + enabled: false + content: + - "&#FFD700๐Ÿ† ะŸะพะทะดั€ะฐะฒะปัะตะผ ั ะดะพัั‚ะธะถะตะฝะธะตะผ!" + - "WCEEBะŸั€ะพะดะพะปะถะฐะนั‚ะต ะธััะปะตะดะพะฒะฐั‚ัŒ ะผะธั€" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะžะขะžะ‘ะ ะะ–ะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +display: + # ะะฐัั‚ั€ะพะนะบะธ ะดะปั title ัะพะพะฑั‰ะตะฝะธะน + title: + fade-in: 10 + stay: 40 + fade-out: 10 + title: "&#FFD700ะ˜ะฝั„ะพั€ะผะฐั†ะธั" + subtitle: "{message}" + + # ะะฐัั‚ั€ะพะนะบะธ ะดะปั actionbar ัะพะพะฑั‰ะตะฝะธะน + actionbar: + duration: 60 # ะ’ั€ะตะผั ะฟะพะบะฐะทะฐ (ั‚ะธะบะธ) + + # ะะฐัั‚ั€ะพะนะบะธ ะดะปั bossbar ัะพะพะฑั‰ะตะฝะธะน + bossbar: + color: "BLUE" # BLUE, GREEN, PINK, PURPLE, RED, WHITE, YELLOW + style: "SOLID" # SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20 + duration: 100 # ะ’ั€ะตะผั ะฟะพะบะฐะทะฐ (ั‚ะธะบะธ) + + # ะ—ะฒัƒะบะพะฒั‹ะต ัั„ั„ะตะบั‚ั‹ + sound: + enabled: false + type: "BLOCK_NOTE_BLOCK_PLING" + volume: 0.5 + pitch: 1.0 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะฃะกะ›ะžะ’ะ˜ะฏ ะžะขะŸะ ะะ’ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +conditions: + # ะ’ั€ะตะผั ััƒั‚ะพะบ (24-ั‡ะฐัะพะฒะพะน ั„ะพั€ะผะฐั‚) + time: + enabled: false + start: "09:00" + end: "23:00" + + # ะ”ะฝะธ ะฝะตะดะตะปะธ (1-7, ะณะดะต 1 = ะฟะพะฝะตะดะตะปัŒะฝะธะบ) + days: + enabled: false + allowed: [1, 2, 3, 4, 5, 6, 7] + + # ะ˜ัะบะปัŽั‡ะธั‚ัŒ ะธะณั€ะพะบะพะฒ ะฒ AFK + exclude-afk: false + + # ะ˜ัะบะปัŽั‡ะธั‚ัŒ ะธะณั€ะพะบะพะฒ ะฒ ั‚ะฒะพั€ั‡ะตัะบะพะผ ั€ะตะถะธะผะต + exclude-creative: false + + # ะ˜ัะบะปัŽั‡ะธั‚ัŒ ะธะณั€ะพะบะพะฒ ั ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะผะธ ะฟั€ะฐะฒะฐะผะธ + exclude-permissions: + - "lochat.automessage.ignore" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะŸะ•ะ ะกะžะะะ›ะ˜ะ—ะะฆะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +personalization: + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะธะผั ะธะณั€ะพะบะฐ ะฒ ัะพะพะฑั‰ะตะฝะธัั… + use-player-name: true + + # ะะดะฐะฟั‚ะธั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ะฟะพะด ะณั€ัƒะฟะฟัƒ ะธะณั€ะพะบะฐ + group-specific: false + + # ะกะพะพะฑั‰ะตะฝะธั ะดะปั ั€ะฐะทะฝั‹ั… ะณั€ัƒะฟะฟ + groups: + vip: + prefix: "&#FFD700[VIP ะะฒั‚ะพ]" + messages: + - "&#FFD700ะกะฟะฐัะธะฑะพ ะทะฐ ะฟะพะดะดะตั€ะถะบัƒ ัะตั€ะฒะตั€ะฐ, {player}!" + - "WCEEBะ’ั‹ ะฟะพะปัƒั‡ะฐะตั‚ะต ัะบัะบะปัŽะทะธะฒะฝั‹ะต ะฟั€ะธะฒะธะปะตะณะธะธ" + + newbie: + prefix: "BCB77[ะŸะพะผะพั‰ัŒ]" + messages: + - "BCB77ะัƒะถะฝะฐ ะฟะพะผะพั‰ัŒ, {player}? ะกะฟั€ะพัะธั‚ะต ะฒ ั‡ะฐั‚ะต!" + - "WCEEBะ˜ัะฟะพะปัŒะทัƒะนั‚ะต /help ะดะปั ัะฟะธัะบะฐ ะบะพะผะฐะฝะด" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะะขะ˜ะกะขะ˜ะšะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +statistics: + # ะ’ะตัั‚ะธ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ะพั‚ะฟั€ะฐะฒะปะตะฝะฝั‹ั… ัะพะพะฑั‰ะตะฝะธะน + enabled: true + + # ะคะฐะนะป ะดะปั ัะพั…ั€ะฐะฝะตะฝะธั ัั‚ะฐั‚ะธัั‚ะธะบะธ + file: "plugins/LoChat/automessage-stats.yml" + + # ะกะฑั€ะฐัั‹ะฒะฐั‚ัŒ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ะบะฐะถะดั‹ะน ะผะตััั† + reset-monthly: true \ No newline at end of file diff --git a/src/main/resources/config/chat-formats.yml b/src/main/resources/config/chat-formats.yml new file mode 100644 index 0000000..6cb9b01 --- /dev/null +++ b/src/main/resources/config/chat-formats.yml @@ -0,0 +1,215 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Chat Formats โ•‘ +# โ•‘ ะคะพั€ะผะฐั‚ั‹ ั‡ะฐั‚ะฐ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะžะ ะœะะขะซ ะงะะขะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +# ะ”ะพัั‚ัƒะฟะฝั‹ะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹: +# {player} - ะธะผั ะธะณั€ะพะบะฐ +# {display_name} - ะพั‚ะพะฑั€ะฐะถะฐะตะผะพะต ะธะผั ั ะณั€ะฐะดะธะตะฝั‚ะพะผ +# {prefix} - ะฟั€ะตั„ะธะบั ะธะณั€ะพะบะฐ +# {suffix} - ััƒั„ั„ะธะบั ะธะณั€ะพะบะฐ +# {world} - ะผะธั€ ะธะณั€ะพะบะฐ +# {message} - ัะพะพะฑั‰ะตะฝะธะต +# {time} - ะฒั€ะตะผั +# {date} - ะดะฐั‚ะฐ +# ะ’ัะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹ PlaceholderAPI + +formats: + # ะ“ะปะพะฑะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + global: + enabled: true + format: "&#FFD700[G] {prefix}{display_name}&r: {message}" + hover: + - "ะ˜ะณั€ะพะบ: {player}" + - "ะœะธั€: {world}" + - "ะŸะธะฝะณ: %player_ping%ms" + - "" + - "โ–ถ ะšะปะธะบ: ะฝะฐะฟะธัะฐั‚ัŒ ะ›ะก" + click: + action: "suggest_command" + value: "/msg {player} " + + # ะ›ะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + local: + enabled: true + format: "WCEEB[L] {prefix}{display_name}&r: {message}" + hover: + - "ะ˜ะณั€ะพะบ: {player}" + - "ะšะพะพั€ะดะธะฝะฐั‚ั‹: {x}, {y}, {z}" + - "ะ ะฐััั‚ะพัะฝะธะต: %distance%ะผ" + - "" + - "โ–ถ ะšะปะธะบ: ะฝะฐะฟะธัะฐั‚ัŒ ะ›ะก" + click: + action: "suggest_command" + value: "/msg {player} " + + # ะ›ะธั‡ะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั + private: + sent: "&7[โ†’] WCEEBะ’ั‹ &7โ†’ {display_name}&7: {message}" + received: "&7[โ†] {display_name} &7โ†’ WCEEBะ’ั‹&7: {message}" + hover: + - "ะžั‚ะฟั€ะฐะฒะปะตะฝะพ: %time%" + - "" + - "โ–ถ ะšะปะธะบ: ะพั‚ะฒะตั‚ะธั‚ัŒ" + click: + action: "suggest_command" + value: "/reply " + + # ะžะฑัŠัะฒะปะตะฝะธั + announcement: + format: "&#FF6B6B[ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•] " + title: + enabled: true + title: "&#FF6B6Bะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•" + subtitle: "{message}" + fade-in: 10 + stay: 60 + fade-out: 10 + actionbar: + enabled: true + format: "&#FF6B6B[ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะ•] {message}" + + # ะกะธัั‚ะตะผะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั + system: + join: "BCB77+ {display_name} BCB77ะฟั€ะธัะพะตะดะธะฝะธะปัั ะบ ะธะณั€ะต" + quit: "&#FF6B6B- {display_name} &#FF6B6Bะฟะพะบะธะฝัƒะป ะธะณั€ัƒ" + death: "&#FF6B6Bโ˜  {display_name} &#FF6B6B{death_message}" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะžะ ะœะะขะซ ะŸะž ะ“ะ ะฃะŸะŸะะœ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +groups: + owner: + priority: 1000 + prefix: "&#FF0000[OWNER]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "&#FF0000" + + admin: + priority: 900 + prefix: "&#FF6B6B[ADMIN]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "&#FF6B6B" + + moderator: + priority: 800 + prefix: "&#FFA726[MOD]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "&#FFA726" + + helper: + priority: 700 + prefix: "WCEEB[HELPER]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "WCEEB" + + vip: + priority: 600 + prefix: "&#FFD700[VIP]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "&#FFD700" + + premium: + priority: 500 + prefix: "BCB77[PREMIUM]" + suffix: "" + format: "{prefix} {display_name}&r: {message}" + name-color: "BCB77" + + default: + priority: 0 + prefix: "" + suffix: "" + format: "{display_name}&r: {message}" + name-color: "&#FFFFFF" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะŸะ•ะฆะ˜ะะ›ะฌะะซะ• ะคะžะ ะœะะขะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +special: + # ะคะพั€ะผะฐั‚ ะดะปั ะผัƒั‚ะพะฒ + mute: + message: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹! ะžัั‚ะฐะปะพััŒ: {time}" + permanent: "&#FF6B6Bะ’ั‹ ะทะฐะผัƒั‡ะตะฝั‹ ะฝะฐะฒัะตะณะดะฐ!" + + # ะคะพั€ะผะฐั‚ ะดะปั ัƒะฟะพะผะธะฝะฐะฝะธะน + mention: + format: "&#FFFF00@{player}" + sound: "BLOCK_NOTE_BLOCK_PLING" + volume: 1.0 + pitch: 1.0 + + # ะคะพั€ะผะฐั‚ ะดะปั ัะผะพะดะทะธ ะณะพะปะพะฒ + head-emoji: + format: ":head_{player}:" + max-per-message: 3 + + # ะคะพั€ะผะฐั‚ ะดะปั ััั‹ะปะพะบ + url: + format: "ะžั‚ะบั€ั‹ั‚ัŒ ััั‹ะปะบัƒ'>{url}" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะžะขะžะ‘ะ ะะ–ะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +display: + # ะœะฐะบัะธะผะฐะปัŒะฝะฐั ะดะปะธะฝะฐ ัะพะพะฑั‰ะตะฝะธั + max-message-length: 256 + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฒั€ะตะผั ะฒ ั‡ะฐั‚ะต + show-time: false + time-format: "[HH:mm]" + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะผะธั€ ะฒ ั‡ะฐั‚ะต + show-world: false + world-format: "[{world}]" + + # ะšะพะผะฟะฐะบั‚ะฝั‹ะน ั€ะตะถะธะผ (ัƒะฑะธั€ะฐะตั‚ ะปะธัˆะฝะธะต ะฟั€ะพะฑะตะปั‹) + compact-mode: false + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟะตั€ะตะฝะพัะธั‚ัŒ ะดะปะธะฝะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั + word-wrap: true + + # ะฆะฒะตั‚ ัะพะพะฑั‰ะตะฝะธะน ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ + default-message-color: "&#FFFFFF" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ˜ะะขะ•ะ“ะ ะะฆะ˜ะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +integrations: + # PlaceholderAPI + placeholderapi: + enabled: true + + # LuckPerms + luckperms: + enabled: true + use-prefix: true + use-suffix: true + + # Vault + vault: + enabled: true + + # DiscordSRV + discordsrv: + enabled: false + format: "**{player}**: {message}" + + # Dynmap + dynmap: + enabled: false + format: "{player}: {message}" \ No newline at end of file diff --git a/src/main/resources/custom-commands.yml b/src/main/resources/config/custom-commands.yml similarity index 88% rename from src/main/resources/custom-commands.yml rename to src/main/resources/config/custom-commands.yml index d44c95b..d985368 100644 --- a/src/main/resources/custom-commands.yml +++ b/src/main/resources/config/custom-commands.yml @@ -5,7 +5,41 @@ # โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะŸะ ะ˜ะœะ•ะ ะซ ะšะžะœะะะ” โ”‚ +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะšะžะœะะะ” โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +settings: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะบะฐัั‚ะพะผะฝั‹ะต ะบะพะผะฐะฝะดั‹ + enabled: true + + # ะะฐัั‚ั€ะพะนะบะธ Discord ะบะพะผะฐะฝะดั‹ + discord: + invite-link: "discord.gg/example" + + # ะะฐัั‚ั€ะพะนะบะธ Website ะบะพะผะฐะฝะดั‹ + website: + url: "https://example.com" + + # ะะฐัั‚ั€ะพะนะบะธ ะบะพะพั€ะดะธะฝะฐั‚ + coords: + show-in-actionbar: true + actionbar-duration: 60 + + # ะะฐัั‚ั€ะพะนะบะธ /me ะบะพะผะฐะฝะดั‹ + me: + radius: 100 # ะ ะฐะดะธัƒั ะดะปั ะปะพะบะฐะปัŒะฝะพะณะพ ะดะตะนัั‚ะฒะธั + + # ะะฐัั‚ั€ะพะนะบะธ ะทะฒัƒะบะพะฒ + sounds: + allow-toggle: true + + # ะะฐัั‚ั€ะพะนะบะธ ัั‚ะฐั‚ะธัั‚ะธะบะธ + stats: + show-server-stats: true + show-player-stats: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะขะ•ะšะกะขะžะ’ะซะ• ะšะžะœะะะ”ะซ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ # ะกั‚ั€ัƒะบั‚ัƒั€ะฐ ะบะพะผะฐะฝะดั‹: diff --git a/src/main/resources/config/database.yml b/src/main/resources/config/database.yml new file mode 100644 index 0000000..f98335a --- /dev/null +++ b/src/main/resources/config/database.yml @@ -0,0 +1,346 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Database Configuration โ•‘ +# โ•‘ ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +settings: + # ะขะธะฟ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั…: file, sqlite, mysql, postgresql + type: "file" + + # ะŸั€ะตั„ะธะบั ะดะปั ั‚ะฐะฑะปะธั† + table-prefix: "lochat_" + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัะพะทะดะฐะฒะฐั‚ัŒ ั‚ะฐะฑะปะธั†ั‹ + auto-create-tables: true + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะพะฑะฝะพะฒะปัั‚ัŒ ัั‚ั€ัƒะบั‚ัƒั€ัƒ ั‚ะฐะฑะปะธั† + auto-update-tables: true + + # ะšะพะดะธั€ะพะฒะบะฐ ะดะปั MySQL + charset: "utf8mb4" + + # Collation ะดะปั MySQL + collation: "utf8mb4_unicode_ci" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะะ™ะ›ะžะ’ะžะ• ะฅะ ะะะ•ะะ˜ะ• โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +file: + # ะŸะฐะฟะบะฐ ะดะปั ั…ั€ะฐะฝะตะฝะธั ั„ะฐะนะปะพะฒ ะดะฐะฝะฝั‹ั… + data-folder: "plugins/LoChat/data/" + + # ะคะพั€ะผะฐั‚ ั„ะฐะนะปะพะฒ: yaml, json + format: "yaml" + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะพะต ัะพั…ั€ะฐะฝะตะฝะธะต (ัะตะบัƒะฝะดั‹) + auto-save-interval: 300 + + # ะกะพะทะดะฐะฒะฐั‚ัŒ ั€ะตะทะตั€ะฒะฝั‹ะต ะบะพะฟะธะธ + backup: + enabled: true + interval: 3600 # ะšะฐะถะดั‹ะน ั‡ะฐั + max-backups: 24 # ะฅั€ะฐะฝะธั‚ัŒ 24 ะบะพะฟะธะธ + folder: "plugins/LoChat/backups/" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ SQLITE โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +sqlite: + # ะŸัƒั‚ัŒ ะบ ั„ะฐะนะปัƒ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + file: "plugins/LoChat/database.db" + + # ะะฐัั‚ั€ะพะนะบะธ ัะพะตะดะธะฝะตะฝะธั + connection: + # ะขะฐะนะผะฐัƒั‚ ัะพะตะดะธะฝะตะฝะธั (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + timeout: 30000 + + # ะ’ะบะปัŽั‡ะธั‚ัŒ WAL ั€ะตะถะธะผ (Write-Ahead Logging) + wal-mode: true + + # ะ ะฐะทะผะตั€ ะบััˆะฐ (KB) + cache-size: 2000 + + # ะกะธะฝั…ั€ะพะฝะธะทะฐั†ะธั: OFF, NORMAL, FULL + synchronous: "NORMAL" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ MYSQL โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +mysql: + # ะฅะพัั‚ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + host: "localhost" + + # ะŸะพั€ั‚ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + port: 3306 + + # ะ˜ะผั ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + database: "lochat" + + # ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั + username: "root" + + # ะŸะฐั€ะพะปัŒ + password: "password" + + # ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฟะพะดะบะปัŽั‡ะตะฝะธั + properties: + useSSL: false + allowPublicKeyRetrieval: true + serverTimezone: "UTC" + characterEncoding: "utf8" + useUnicode: true + autoReconnect: true + failOverReadOnly: false + maxReconnects: 3 + initialTimeout: 1 + + # ะะฐัั‚ั€ะพะนะบะธ ะฟัƒะปะฐ ัะพะตะดะธะฝะตะฝะธะน (HikariCP) + pool: + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ัะพะตะดะธะฝะตะฝะธะน + maximum-pool-size: 10 + + # ะœะธะฝะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟั€ะพัั‚ะฐะธะฒะฐัŽั‰ะธั… ัะพะตะดะธะฝะตะฝะธะน + minimum-idle: 2 + + # ะขะฐะนะผะฐัƒั‚ ะฟะพะปัƒั‡ะตะฝะธั ัะพะตะดะธะฝะตะฝะธั (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + connection-timeout: 30000 + + # ะ’ั€ะตะผั ะถะธะทะฝะธ ะฟั€ะพัั‚ะฐะธะฒะฐัŽั‰ะตะณะพ ัะพะตะดะธะฝะตะฝะธั (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + idle-timeout: 600000 + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะฒั€ะตะผั ะถะธะทะฝะธ ัะพะตะดะธะฝะตะฝะธั (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + max-lifetime: 1800000 + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะฟั€ะพะฒะตั€ะบะธ ัะพะตะดะธะฝะตะฝะธะน (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + leak-detection-threshold: 60000 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ POSTGRESQL โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +postgresql: + # ะฅะพัั‚ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + host: "localhost" + + # ะŸะพั€ั‚ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + port: 5432 + + # ะ˜ะผั ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + database: "lochat" + + # ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั + username: "postgres" + + # ะŸะฐั€ะพะปัŒ + password: "password" + + # ะกั…ะตะผะฐ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + schema: "public" + + # ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฟะพะดะบะปัŽั‡ะตะฝะธั + properties: + ssl: false + sslmode: "disable" + serverTimezone: "UTC" + characterEncoding: "utf8" + autoReconnect: true + + # ะะฐัั‚ั€ะพะนะบะธ ะฟัƒะปะฐ ัะพะตะดะธะฝะตะฝะธะน + pool: + maximum-pool-size: 10 + minimum-idle: 2 + connection-timeout: 30000 + idle-timeout: 600000 + max-lifetime: 1800000 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะ ะฃะšะขะฃะ ะ ะขะะ‘ะ›ะ˜ะฆ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +tables: + # ะขะฐะฑะปะธั†ะฐ ะธะณั€ะพะบะพะฒ + players: + name: "players" + columns: + uuid: "VARCHAR(36) PRIMARY KEY" + name: "VARCHAR(16) NOT NULL" + display_name: "TEXT" + first_join: "BIGINT NOT NULL" + last_join: "BIGINT NOT NULL" + last_quit: "BIGINT" + total_playtime: "BIGINT DEFAULT 0" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + updated_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" + + # ะขะฐะฑะปะธั†ะฐ ะณั€ะฐะดะธะตะฝั‚ะพะฒ + gradients: + name: "gradients" + columns: + uuid: "VARCHAR(36) PRIMARY KEY" + colors: "TEXT" + prefix: "TEXT" + enabled: "BOOLEAN DEFAULT TRUE" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + updated_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" + + # ะขะฐะฑะปะธั†ะฐ ะผัƒั‚ะพะฒ + mutes: + name: "mutes" + columns: + id: "INT AUTO_INCREMENT PRIMARY KEY" + uuid: "VARCHAR(36) NOT NULL" + moderator_uuid: "VARCHAR(36)" + reason: "TEXT NOT NULL" + start_time: "BIGINT NOT NULL" + end_time: "BIGINT" + active: "BOOLEAN DEFAULT TRUE" + silent: "BOOLEAN DEFAULT FALSE" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + + # ะ˜ัั‚ะพั€ะธั ะผัƒั‚ะพะฒ + mute_history: + name: "mute_history" + columns: + id: "INT AUTO_INCREMENT PRIMARY KEY" + uuid: "VARCHAR(36) NOT NULL" + moderator_uuid: "VARCHAR(36)" + reason: "TEXT NOT NULL" + duration: "BIGINT NOT NULL" + start_time: "BIGINT NOT NULL" + end_time: "BIGINT" + unmute_reason: "TEXT" + unmute_moderator: "VARCHAR(36)" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + + # ะขะฐะฑะปะธั†ะฐ ะธะณะฝะพั€ะธั€ะพะฒะฐะฝะธั + ignores: + name: "ignores" + columns: + id: "INT AUTO_INCREMENT PRIMARY KEY" + player_uuid: "VARCHAR(36) NOT NULL" + ignored_uuid: "VARCHAR(36) NOT NULL" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + + # ะขะฐะฑะปะธั†ะฐ ัะพะพะฑั‰ะตะฝะธะน (ะตัะปะธ ะฒะบะปัŽั‡ะตะฝะพ ะปะพะณะธั€ะพะฒะฐะฝะธะต) + messages: + name: "messages" + columns: + id: "INT AUTO_INCREMENT PRIMARY KEY" + uuid: "VARCHAR(36) NOT NULL" + type: "VARCHAR(20) NOT NULL" + content: "TEXT NOT NULL" + server: "VARCHAR(50)" + world: "VARCHAR(50)" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + + # ะะฐัั‚ั€ะพะนะบะธ ะธะณั€ะพะบะพะฒ + player_settings: + name: "player_settings" + columns: + uuid: "VARCHAR(36) PRIMARY KEY" + sounds_enabled: "BOOLEAN DEFAULT TRUE" + sound_volume: "FLOAT DEFAULT 1.0" + auto_messages: "BOOLEAN DEFAULT TRUE" + mentions_enabled: "BOOLEAN DEFAULT TRUE" + pm_sounds: "BOOLEAN DEFAULT TRUE" + created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + updated_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ˜ะะ”ะ•ะšะกะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +indexes: + # ะ˜ะฝะดะตะบัั‹ ะดะปั ะพะฟั‚ะธะผะธะทะฐั†ะธะธ ะทะฐะฟั€ะพัะพะฒ + players: + - "CREATE INDEX idx_players_name ON {prefix}players(name)" + - "CREATE INDEX idx_players_last_join ON {prefix}players(last_join)" + + mutes: + - "CREATE INDEX idx_mutes_uuid ON {prefix}mutes(uuid)" + - "CREATE INDEX idx_mutes_active ON {prefix}mutes(active)" + - "CREATE INDEX idx_mutes_end_time ON {prefix}mutes(end_time)" + + mute_history: + - "CREATE INDEX idx_mute_history_uuid ON {prefix}mute_history(uuid)" + - "CREATE INDEX idx_mute_history_moderator ON {prefix}mute_history(moderator_uuid)" + - "CREATE INDEX idx_mute_history_start_time ON {prefix}mute_history(start_time)" + + ignores: + - "CREATE INDEX idx_ignores_player ON {prefix}ignores(player_uuid)" + - "CREATE INDEX idx_ignores_ignored ON {prefix}ignores(ignored_uuid)" + - "CREATE UNIQUE INDEX idx_ignores_unique ON {prefix}ignores(player_uuid, ignored_uuid)" + + messages: + - "CREATE INDEX idx_messages_uuid ON {prefix}messages(uuid)" + - "CREATE INDEX idx_messages_type ON {prefix}messages(type)" + - "CREATE INDEX idx_messages_created_at ON {prefix}messages(created_at)" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะงะ˜ะกะขะšะ ะ”ะะะะซะฅ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +cleanup: + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะฐั ะพั‡ะธัั‚ะบะฐ ัั‚ะฐั€ั‹ั… ะดะฐะฝะฝั‹ั… + enabled: true + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะพั‡ะธัั‚ะบะธ (ัะตะบัƒะฝะดั‹) + interval: 86400 # ะ ะฐะท ะฒ ะดะตะฝัŒ + + # ะะฐัั‚ั€ะพะนะบะธ ะพั‡ะธัั‚ะบะธ ะดะปั ะบะฐะถะดะพะน ั‚ะฐะฑะปะธั†ั‹ + tables: + mute_history: + # ะฃะดะฐะปัั‚ัŒ ะทะฐะฟะธัะธ ัั‚ะฐั€ัˆะต N ะดะฝะตะน + max-age-days: 90 + # ะžัั‚ะฐะฒะปัั‚ัŒ ะผะธะฝะธะผัƒะผ ะทะฐะฟะธัะตะน ะฝะฐ ะธะณั€ะพะบะฐ + min-records-per-player: 5 + + messages: + max-age-days: 30 + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะทะฐะฟะธัะตะน + max-records: 100000 + + players: + # ะฃะดะฐะปัั‚ัŒ ะฝะตะฐะบั‚ะธะฒะฝั‹ั… ะธะณั€ะพะบะพะฒ (ะดะฝะธ) + inactive-days: 365 + # ะะต ัƒะดะฐะปัั‚ัŒ ะธะณั€ะพะบะพะฒ ั ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะผะธ ะดะฐะฝะฝั‹ะผะธ + keep-with-data: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะœะ˜ะ“ะ ะะฆะ˜ะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +migrations: + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฒั‹ะฟะพะปะฝัั‚ัŒ ะผะธะณั€ะฐั†ะธะธ + auto-migrate: true + + # ะกะพะทะดะฐะฒะฐั‚ัŒ ั€ะตะทะตั€ะฒะฝั‹ะต ะบะพะฟะธะธ ะฟะตั€ะตะด ะผะธะณั€ะฐั†ะธะตะน + backup-before-migrate: true + + # ะ’ะตั€ัะธั ัั…ะตะผั‹ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… + schema-version: 1 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะขะ›ะะ”ะšะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +debug: + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ SQL ะทะฐะฟั€ะพัั‹ + log-queries: false + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะผะตะดะปะตะฝะฝั‹ะต ะทะฐะฟั€ะพัั‹ (ะผะธะปะปะธัะตะบัƒะฝะดั‹) + slow-query-threshold: 1000 + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ัะพะตะดะธะฝะตะฝะธะน + show-connection-stats: false + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะฒั‹ะฒะพะดะฐ ัั‚ะฐั‚ะธัั‚ะธะบะธ (ัะตะบัƒะฝะดั‹) + stats-interval: 300 \ No newline at end of file diff --git a/src/main/resources/config/filters.yml b/src/main/resources/config/filters.yml new file mode 100644 index 0000000..5812333 --- /dev/null +++ b/src/main/resources/config/filters.yml @@ -0,0 +1,286 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Filters Configuration โ•‘ +# โ•‘ ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ั„ะธะปัŒั‚ั€ะพะฒ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะ—ะะ“ะ›ะะ’ะะซะฅ ะ‘ะฃะšะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +caps: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ะธะปัŒั‚ั€ ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ + enabled: true + + # ะœะฐะบัะธะผะฐะปัŒะฝั‹ะน ะฟั€ะพั†ะตะฝั‚ ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ (0-100) + max-percent: 70 + + # ะœะธะฝะธะผะฐะปัŒะฝะฐั ะดะปะธะฝะฐ ัะพะพะฑั‰ะตะฝะธั ะดะปั ะฟั€ะพะฒะตั€ะบะธ + min-length: 5 + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟะตั€ะตะฒะพะดะธั‚ัŒ ะฒ ะฝะธะถะฝะธะน ั€ะตะณะธัั‚ั€ + auto-lowercase: true + + # ะ”ะตะนัั‚ะฒะธะต ะฟั€ะธ ะฝะฐั€ัƒัˆะตะฝะธะธ: block, warn, lowercase + action: "lowercase" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะกะปะธัˆะบะพะผ ะผะฝะพะณะพ ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ!" + + # ะกะพะพะฑั‰ะตะฝะธะต-ะฟั€ะตะดัƒะฟั€ะตะถะดะตะฝะธะต + warn-message: "&#FFA726ะะต ะธัะฟะพะปัŒะทัƒะนั‚ะต ัะปะธัˆะบะพะผ ะผะฝะพะณะพ ะทะฐะณะปะฐะฒะฝั‹ั… ะฑัƒะบะฒ" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะ ะ•ะšะ›ะะœะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +advertising: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ะธะปัŒั‚ั€ ั€ะตะบะปะฐะผั‹ + enabled: true + + # ะ‘ะปะพะบะธั€ะพะฒะฐั‚ัŒ ัะบั€ั‹ั‚ั‹ะต URL (bit.ly, tinyurl ะธ ั‚.ะด.) + block-hidden-urls: true + + # ะ‘ะปะพะบะธั€ะพะฒะฐั‚ัŒ ะดะพะผะตะฝั‹ + block-domains: true + + # ะ‘ะปะพะบะธั€ะพะฒะฐั‚ัŒ IP ะฐะดั€ะตัะฐ + block-ips: true + + # ะ”ะตะนัั‚ะฒะธะต ะฟั€ะธ ะพะฑะฝะฐั€ัƒะถะตะฝะธะธ: block, warn, replace + action: "block" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะ ะตะบะปะฐะผะฐ ะทะฐะฟั€ะตั‰ะตะฝะฐ!" + + # ะ—ะฐะผะตะฝะฐ ะดะปั ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝะฝะพะณะพ ะบะพะฝั‚ะตะฝั‚ะฐ + replacement: "[ะ ะ•ะšะ›ะะœะ ะฃะ”ะะ›ะ•ะะ]" + + # ะ‘ะตะปั‹ะน ัะฟะธัะพะบ ะดะพะผะตะฝะพะฒ (ั€ะฐะทั€ะตัˆะตะฝะฝั‹ะต) + whitelist: + - "youtube.com" + - "youtu.be" + - "discord.gg" + - "twitch.tv" + - "imgur.com" + - "gyazo.com" + - "prntscr.com" + + # ะงะตั€ะฝั‹ะน ัะฟะธัะพะบ ะดะพะผะตะฝะพะฒ (ะทะฐะฟั€ะตั‰ะตะฝะฝั‹ะต) + blacklist: + - "scam-site.com" + - "virus-site.ru" + - "fake-minecraft.net" + + # ะ ะตะณัƒะปัั€ะฝั‹ะต ะฒั‹ั€ะฐะถะตะฝะธั ะดะปั ะฟะพะธัะบะฐ ั€ะตะบะปะฐะผั‹ + patterns: + - "(?i)\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?::[0-9]{1,5})?\\b" # IP ะฐะดั€ะตัะฐ + - "(?i)\\b[a-z0-9.-]+\\.(com|net|org|ru|de|uk)\\b" # ะ”ะพะผะตะฝั‹ + - "(?i)\\b(server|ัะตั€ะฒะตั€)\\s*[:-]?\\s*[a-z0-9.-]+\\b" # ะกะตั€ะฒะตั€ั‹ + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  IP ะะ”ะ ะ•ะกะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +ip: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ะธะปัŒั‚ั€ IP ะฐะดั€ะตัะพะฒ + enabled: true + + # ะ‘ะปะพะบะธั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต ะธะปะธ ะทะฐะผะตะฝัั‚ัŒ IP + block: false + + # ะ—ะฐะผะตะฝะฐ ะดะปั IP ะฐะดั€ะตัะพะฒ + replacement: "[IP ะกะšะ ะซะข]" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6BIP ะฐะดั€ะตัะฐ ะทะฐะฟั€ะตั‰ะตะฝั‹!" + + # ะ‘ะตะปั‹ะน ัะฟะธัะพะบ IP (ั€ะฐะทั€ะตัˆะตะฝะฝั‹ะต) + whitelist: + - "127.0.0.1" + - "localhost" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะŸะžะ’ะขะžะ ะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +repeat: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ะธะปัŒั‚ั€ ะฟะพะฒั‚ะพั€ััŽั‰ะธั…ัั ัะธะผะฒะพะปะพะฒ + enabled: true + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟะพะฒั‚ะพั€ะพะฒ ะฟะพะดั€ัะด + max-repeats: 3 + + # ะ”ะตะนัั‚ะฒะธะต: block, warn, replace + action: "replace" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะะต ะฟะพะฒั‚ะพั€ัะนั‚ะต ัะธะผะฒะพะปั‹!" + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัะพะบั€ะฐั‰ะฐั‚ัŒ ะฟะพะฒั‚ะพั€ั‹ + auto-reduce: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะกะŸะะœะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +spam: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะฐะฝั‚ะธัะฟะฐะผ + enabled: true + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะพะดะธะฝะฐะบะพะฒั‹ั… ัะพะพะฑั‰ะตะฝะธะน + max-similar-messages: 3 + + # ะ’ั€ะตะผั ะดะปั ัะฑั€ะพัะฐ ัั‡ะตั‚ั‡ะธะบะฐ (ัะตะบัƒะฝะดั‹) + reset-time: 60 + + # ะŸั€ะพั†ะตะฝั‚ ัั…ะพะถะตัั‚ะธ ัะพะพะฑั‰ะตะฝะธะน (0-100) + similarity-threshold: 80 + + # ะ”ะตะนัั‚ะฒะธะต ะฟั€ะธ ัะฟะฐะผะต: block, warn, mute + action: "warn" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะะต ัะฟะฐะผัŒั‚ะต!" + + # ะ’ั€ะตะผั ะผัƒั‚ะฐ ะทะฐ ัะฟะฐะผ (ัะตะบัƒะฝะดั‹) + mute-duration: 300 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะœะะขะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +swear: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ั„ะธะปัŒั‚ั€ ะผะฐั‚ะฐ + enabled: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฒะฝะตัˆะฝะธะน ั„ะฐะนะป ัะพ ัะปะพะฒะฐะผะธ + use-external-file: true + + # ะคะฐะนะป ัะพ ัะปะพะฒะฐะผะธ (ะพั‚ะฝะพัะธั‚ะตะปัŒะฝะพ ะฟะฐะฟะบะธ ะฟะปะฐะณะธะฝะฐ) + words-file: "filter-words.json" + + # ะ”ะตะนัั‚ะฒะธะต: block, warn, replace, mute + action: "replace" + + # ะกะธะผะฒะพะป ะดะปั ะทะฐะผะตะฝั‹ + replacement-char: "*" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะœะฐั‚ ะทะฐะฟั€ะตั‰ะตะฝ!" + + # ะ’ั€ะตะผั ะผัƒั‚ะฐ ะทะฐ ะผะฐั‚ (ัะตะบัƒะฝะดั‹) + mute-duration: 600 + + # ะ’ัั‚ั€ะพะตะฝะฝั‹ะน ัะฟะธัะพะบ ัะปะพะฒ (ะตัะปะธ ะฝะต ะธัะฟะพะปัŒะทัƒะตั‚ัั ะฒะฝะตัˆะฝะธะน ั„ะฐะนะป) + words: + - "ะฟะปะพั…ะพะต_ัะปะพะฒะพ1" + - "ะฟะปะพั…ะพะต_ัะปะพะฒะพ2" + + # ะŸั€ะพะฒะตั€ัั‚ัŒ ั„ั€ะฐะณะผะตะฝั‚ั‹ ัะปะพะฒ + check-fragments: true + + # ะ˜ะณะฝะพั€ะธั€ะพะฒะฐั‚ัŒ ั€ะตะณะธัั‚ั€ + ignore-case: true + + # ะŸั€ะพะฒะตั€ัั‚ัŒ ั‚ั€ะฐะฝัะปะธั‚ะตั€ะฐั†ะธัŽ + check-transliteration: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะ˜ะ›ะฌะขะ  ะคะ›ะฃะ”ะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +flood: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะฐะฝั‚ะธั„ะปัƒะด + enabled: true + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ัะพะพะฑั‰ะตะฝะธะน ะฒ ะฟะตั€ะธะพะด + max-messages: 5 + + # ะŸะตั€ะธะพะด ะฒั€ะตะผะตะฝะธ (ัะตะบัƒะฝะดั‹) + time-period: 10 + + # ะ”ะตะนัั‚ะฒะธะต ะฟั€ะธ ั„ะปัƒะดะต: block, warn, mute + action: "warn" + + # ะกะพะพะฑั‰ะตะฝะธะต ะฟั€ะธ ะฑะปะพะบะธั€ะพะฒะบะต + block-message: "&#FF6B6Bะะต ั„ะปัƒะดะธั‚ะต!" + + # ะ’ั€ะตะผั ะผัƒั‚ะฐ ะทะฐ ั„ะปัƒะด (ัะตะบัƒะฝะดั‹) + mute-duration: 180 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ”ะžะŸะžะ›ะะ˜ะขะ•ะ›ะฌะะซะ• ะคะ˜ะ›ะฌะขะ ะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +additional: + # ะคะธะปัŒั‚ั€ ัะผะพะดะทะธ + emoji: + enabled: false + max-per-message: 5 + block-message: "&#FF6B6Bะกะปะธัˆะบะพะผ ะผะฝะพะณะพ ัะผะพะดะทะธ!" + + # ะคะธะปัŒั‚ั€ ะดะปะธะฝะฝั‹ั… ัะพะพะฑั‰ะตะฝะธะน + length: + enabled: true + max-length: 256 + action: "truncate" # truncate ะธะปะธ block + block-message: "&#FF6B6Bะกะพะพะฑั‰ะตะฝะธะต ัะปะธัˆะบะพะผ ะดะปะธะฝะฝะพะต!" + + # ะคะธะปัŒั‚ั€ ะฟัƒัั‚ั‹ั… ัะพะพะฑั‰ะตะฝะธะน + empty: + enabled: true + block-message: "&#FF6B6BะŸัƒัั‚ั‹ะต ัะพะพะฑั‰ะตะฝะธั ะทะฐะฟั€ะตั‰ะตะฝั‹!" + + # ะคะธะปัŒั‚ั€ ั‚ะพะปัŒะบะพ ะฟั€ะพะฑะตะปะพะฒ + whitespace: + enabled: true + block-message: "&#FF6B6Bะกะพะพะฑั‰ะตะฝะธะต ะฝะต ะผะพะถะตั‚ ัะพัั‚ะพัั‚ัŒ ั‚ะพะปัŒะบะพ ะธะท ะฟั€ะพะฑะตะปะพะฒ!" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะžะ‘ะฅะžะ”ะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +bypass: + # ะŸั€ะฐะฒะฐ ะดะปั ะพะฑั…ะพะดะฐ ั„ะธะปัŒั‚ั€ะพะฒ + permissions: + caps: "lochat.bypass.caps" + advertising: "lochat.bypass.advertising" + ip: "lochat.bypass.ip" + repeat: "lochat.bypass.repeat" + spam: "lochat.bypass.spam" + swear: "lochat.bypass.swear" + flood: "lochat.bypass.flood" + all: "lochat.bypass.filter" + + # ะ“ั€ัƒะฟะฟั‹, ะบะพั‚ะพั€ั‹ะต ะพะฑั…ะพะดัั‚ ะฒัะต ั„ะธะปัŒั‚ั€ั‹ + groups: + - "admin" + - "moderator" + + # ะœะธั€ั‹, ะณะดะต ั„ะธะปัŒั‚ั€ั‹ ะพั‚ะบะปัŽั‡ะตะฝั‹ + worlds: + - "creative_world" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ›ะžะ“ะ˜ะ ะžะ’ะะะ˜ะ• โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +logging: + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั + enabled: true + + # ะคะฐะนะป ะดะปั ะปะพะณะพะฒ + file: "plugins/LoChat/logs/filter.log" + + # ะคะพั€ะผะฐั‚ ะปะพะณะฐ + format: "[{time}] {player} ({filter}): {message}" + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะฒ ะบะพะฝัะพะปัŒ + console: true + + # ะฃะฒะตะดะพะผะปัั‚ัŒ ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะพะฒ + notify-admins: true + + # ะŸั€ะฐะฒะพ ะดะปั ะฟะพะปัƒั‡ะตะฝะธั ัƒะฒะตะดะพะผะปะตะฝะธะน + notify-permission: "lochat.filter.notify" \ No newline at end of file diff --git a/src/main/resources/config/gradient-config.yml b/src/main/resources/config/gradient-config.yml new file mode 100644 index 0000000..5585758 --- /dev/null +++ b/src/main/resources/config/gradient-config.yml @@ -0,0 +1,208 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Gradient Configuration โ•‘ +# โ•‘ ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะณั€ะฐะดะธะตะฝั‚ะพะฒ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +gradient: + # ะขะธะฟ ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั…: file, mysql, sqlite + storage-type: "file" + + # ะœะธะฝะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ั†ะฒะตั‚ะพะฒ ะฒ ะณั€ะฐะดะธะตะฝั‚ะต + min-colors: 1 + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ั†ะฒะตั‚ะพะฒ ะฒ ะณั€ะฐะดะธะตะฝั‚ะต + max-colors: 7 + + # ะกั‚ะพะธะผะพัั‚ัŒ ะทะฐ ะบะฐะถะดั‹ะน ั†ะฒะตั‚ (PlayerPoints) + price-per-color: 50 + + # ะกั‚ะพะธะผะพัั‚ัŒ ะฟั€ะตั„ะธะบัะฐ + prefix-price: 500 + + # ะžะดะฝะพั€ะฐะทะพะฒะฐั ะฟะพะบัƒะฟะบะฐ ะฟั€ะตั„ะธะบัะฐ (true) ะธะปะธ ะทะฐ ะบะฐะถะดะพะต ะธะทะผะตะฝะตะฝะธะต (false) + prefix-one-time-purchase: true + + # ะœะฐะบัะธะผะฐะปัŒะฝะฐั ะดะปะธะฝะฐ ะฟั€ะตั„ะธะบัะฐ + max-prefix-length: 16 + + # ะšัƒะปะดะฐัƒะฝ ะฝะฐ ัะผะตะฝัƒ ั†ะฒะตั‚ะฐ (ัะตะบัƒะฝะดั‹) + color-cooldown: 60 + + # ะšัƒะปะดะฐัƒะฝ ะฝะฐ ัะผะตะฝัƒ ะฟั€ะตั„ะธะบัะฐ (ัะตะบัƒะฝะดั‹) + prefix-cooldown: 120 + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟั€ะธะผะตะฝัั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ ะบ ะฝะธะบัƒ + auto-apply-gradient: true + + # ะžะฑะฝะพะฒะปัั‚ัŒ ะพั‚ะพะฑั€ะฐะถะฐะตะผะพะต ะธะผั + update-display-name: true + + # ะžะฑะฝะพะฒะปัั‚ัŒ ั‚ะฐะฑ-ะปะธัั‚ + update-tab-list: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ“ะžะขะžะ’ะซะ• ะŸะ ะ•ะกะ•ะขะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +presets: + fire: + name: "ะžะณะพะฝัŒ" + colors: [ "#FF4500", "#FF6347", "#FFD700" ] + permission: "gradient.preset.fire" + price: 100 + + ocean: + name: "ะžะบะตะฐะฝ" + colors: [ "#00CED1", "#1E90FF", "#4169E1" ] + permission: "gradient.preset.ocean" + price: 100 + + forest: + name: "ะ›ะตั" + colors: [ "#228B22", "#32CD32", "#90EE90" ] + permission: "gradient.preset.forest" + price: 100 + + sunset: + name: "ะ—ะฐะบะฐั‚" + colors: [ "#FF69B4", "#FF1493", "#DC143C" ] + permission: "gradient.preset.sunset" + price: 150 + + rainbow: + name: "ะ ะฐะดัƒะณะฐ" + colors: [ "#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#9400D3" ] + permission: "gradient.preset.rainbow" + price: 300 + + gold: + name: "ะ—ะพะปะพั‚ะพ" + colors: [ "#FFD700", "#FFA500", "#FF8C00" ] + permission: "gradient.preset.gold" + price: 200 + + silver: + name: "ะกะตั€ะตะฑั€ะพ" + colors: [ "#C0C0C0", "#A9A9A9", "#808080" ] + permission: "gradient.preset.silver" + price: 150 + + purple: + name: "ะคะธะพะปะตั‚ะพะฒั‹ะน" + colors: [ "#9400D3", "#8A2BE2", "#DA70D6" ] + permission: "gradient.preset.purple" + price: 120 + + ice: + name: "ะ›ั‘ะด" + colors: [ "#B0E0E6", "#87CEEB", "#4682B4" ] + permission: "gradient.preset.ice" + price: 120 + + lava: + name: "ะ›ะฐะฒะฐ" + colors: [ "#DC143C", "#B22222", "#8B0000" ] + permission: "gradient.preset.lava" + price: 150 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะ‘ะะ—ะซ ะ”ะะะะซะฅ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +database: + mysql: + host: "localhost" + port: 3306 + database: "lochat" + username: "root" + password: "password" + table-prefix: "lochat_" + + # ะะฐัั‚ั€ะพะนะบะธ ะฟัƒะปะฐ ัะพะตะดะธะฝะตะฝะธะน + pool: + maximum-pool-size: 10 + minimum-idle: 5 + connection-timeout: 30000 + idle-timeout: 600000 + max-lifetime: 1800000 + + sqlite: + file: "plugins/LoChat/gradient-data.db" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ”ะžะŸะžะ›ะะ˜ะขะ•ะ›ะฌะะซะ• ะคะฃะะšะฆะ˜ะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +features: + # ะะฝะธะผะธั€ะพะฒะฐะฝะฝั‹ะต ะณั€ะฐะดะธะตะฝั‚ั‹ + animated-gradients: + enabled: false + speed: 1000 # ะผะธะปะปะธัะตะบัƒะฝะดั‹ + + # ะกะปัƒั‡ะฐะนะฝั‹ะต ะณั€ะฐะดะธะตะฝั‚ั‹ + random-gradients: + enabled: true + change-interval: 3600 # ัะตะบัƒะฝะดั‹ (1 ั‡ะฐั) + + # ะ“ั€ะฐะดะธะตะฝั‚ั‹ ะฒ ั‡ะฐั‚ะต + chat-gradients: + enabled: true + apply-to-messages: true + + # ะ“ั€ะฐะดะธะตะฝั‚ั‹ ะฒ ั‚ะฐะฑะต + tab-gradients: + enabled: true + update-interval: 20 # ั‚ะธะบะธ + + # ะกะพั…ั€ะฐะฝะตะฝะธะต ะณั€ะฐะดะธะตะฝั‚ะพะฒ ะฟั€ะธ ะฒั‹ั…ะพะดะต + save-on-quit: true + + # ะ’ะพััั‚ะฐะฝะพะฒะปะตะฝะธะต ะณั€ะฐะดะธะตะฝั‚ะพะฒ ะฟั€ะธ ะฒั…ะพะดะต + restore-on-join: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะŸะ ะะ’ะ ะ”ะžะกะขะฃะŸะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +permissions: + # ะ‘ะฐะทะพะฒั‹ะต ะฟั€ะฐะฒะฐ + use-gradient: "gradient.use" + use-prefix: "gradient.prefix" + admin: "gradient.admin" + + # ะžะฑั…ะพะด ะพะณั€ะฐะฝะธั‡ะตะฝะธะน + bypass-cooldown: "gradient.bypass.cooldown" + bypass-cost: "gradient.bypass.cost" + bypass-length: "gradient.bypass.length" + + # ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ั†ะฒะตั‚ะฐ + extra-colors: + "gradient.colors.5": 5 + "gradient.colors.10": 10 + "gradient.colors.15": 15 + "gradient.colors.unlimited": 999 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะคะžะ ะœะะขะ˜ะ ะžะ’ะะะ˜ะ• โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +formatting: + # ะคะพั€ะผะฐั‚ ะฝะธะบะฐ ั ะณั€ะฐะดะธะตะฝั‚ะพะผ + nick-format: "{gradient}{nick}" + + # ะคะพั€ะผะฐั‚ ะฟั€ะตั„ะธะบัะฐ ั ะณั€ะฐะดะธะตะฝั‚ะพะผ + prefix-format: "{gradient}{prefix}" + + # ะคะพั€ะผะฐั‚ ะฒ ั‚ะฐะฑะต + tab-format: "{prefix} {gradient}{nick}" + + # ะคะพั€ะผะฐั‚ ะฒ ั‡ะฐั‚ะต + chat-format: "{prefix} {gradient}{nick}&r: {message}" + + # ะ ะฐะทะดะตะปะธั‚ะตะปัŒ ะผะตะถะดัƒ ะฟั€ะตั„ะธะบัะพะผ ะธ ะฝะธะบะพะผ + separator: " " \ No newline at end of file diff --git a/src/main/resources/config/integrations.yml b/src/main/resources/config/integrations.yml new file mode 100644 index 0000000..a12610f --- /dev/null +++ b/src/main/resources/config/integrations.yml @@ -0,0 +1,380 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Integrations โ•‘ +# โ•‘ ะ˜ะฝั‚ะตะณั€ะฐั†ะธะธ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ PLACEHOLDERAPI โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +placeholderapi: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั PlaceholderAPI + enabled: true + + # ะ ะตะณะธัั‚ั€ะธั€ะพะฒะฐั‚ัŒ ัะพะฑัั‚ะฒะตะฝะฝั‹ะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹ + register-placeholders: true + + # ะ”ะพัั‚ัƒะฟะฝั‹ะต ะฟะปะตะนัั…ะพะปะดะตั€ั‹ LoChat: + # %lochat_player_muted% - ะทะฐะผัƒั‡ะตะฝ ะปะธ ะธะณั€ะพะบ (true/false) + # %lochat_player_mute_time% - ะพัั‚ะฐะฒัˆะตะตัั ะฒั€ะตะผั ะผัƒั‚ะฐ + # %lochat_player_mute_reason% - ะฟั€ะธั‡ะธะฝะฐ ะผัƒั‚ะฐ + # %lochat_player_gradient% - ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ + # %lochat_player_prefix% - ะบะฐัั‚ะพะผะฝั‹ะน ะฟั€ะตั„ะธะบั + # %lochat_player_ignored_count% - ะบะพะปะธั‡ะตัั‚ะฒะพ ะธะณะฝะพั€ะธั€ัƒะตะผั‹ั… ะธะณั€ะพะบะพะฒ + # %lochat_player_messages_sent% - ะพั‚ะฟั€ะฐะฒะปะตะฝะพ ัะพะพะฑั‰ะตะฝะธะน + # %lochat_player_last_message% - ะฟะพัะปะตะดะฝะตะต ัะพะพะฑั‰ะตะฝะธะต + # %lochat_server_muted_count% - ะบะพะปะธั‡ะตัั‚ะฒะพ ะทะฐะผัƒั‡ะตะฝะฝั‹ั… ะธะณั€ะพะบะพะฒ + # %lochat_server_messages_today% - ัะพะพะฑั‰ะตะฝะธะน ัะตะณะพะดะฝั + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ LUCKPERMS โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +luckperms: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั LuckPerms + enabled: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟั€ะตั„ะธะบัั‹ ะธะท LuckPerms + use-prefix: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ััƒั„ั„ะธะบัั‹ ะธะท LuckPerms + use-suffix: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะผะตั‚ะฐ-ะดะฐะฝะฝั‹ะต ะธะท LuckPerms + use-meta: true + + # ะŸั€ะธะพั€ะธั‚ะตั‚ ะณั€ัƒะฟะฟ ะดะปั ั„ะพั€ะผะฐั‚ะธั€ะพะฒะฐะฝะธั ั‡ะฐั‚ะฐ + group-priority: true + + # ะšััˆะธั€ะพะฒะฐั‚ัŒ ะดะฐะฝะฝั‹ะต LuckPerms + cache-data: true + + # ะ’ั€ะตะผั ะบััˆะธั€ะพะฒะฐะฝะธั (ัะตะบัƒะฝะดั‹) + cache-duration: 300 + + # ะกะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐั‚ัŒ ะธะทะผะตะฝะตะฝะธั ะฟั€ะฐะฒ + sync-changes: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ VAULT โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +vault: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Vault + enabled: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ Vault ะดะปั ะฟั€ะฐะฒ + use-permissions: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ Vault ะดะปั ัะบะพะฝะพะผะธะบะธ + use-economy: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ Vault ะดะปั ั‡ะฐั‚ะฐ (ะฟั€ะตั„ะธะบัั‹/ััƒั„ั„ะธะบัั‹) + use-chat: true + + # ะŸั€ะธะพั€ะธั‚ะตั‚ Vault ะฝะฐะด ะดั€ัƒะณะธะผะธ ัะธัั‚ะตะผะฐะผะธ + priority: 1 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ PLAYERPOINTS โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +playerpoints: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั PlayerPoints + enabled: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะพะธะฝั‚ั‹ ะดะปั ะฟะพะบัƒะฟะบะธ ะณั€ะฐะดะธะตะฝั‚ะพะฒ + use-for-gradients: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะพะธะฝั‚ั‹ ะดะปั ะฟะพะบัƒะฟะบะธ ะฟั€ะตั„ะธะบัะพะฒ + use-for-prefixes: true + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัะฟะธัั‹ะฒะฐั‚ัŒ ะฟะพะธะฝั‚ั‹ + auto-deduct: true + + # ะฃะฒะตะดะพะผะปัั‚ัŒ ะพ ัะฟะธัะฐะฝะธะธ ะฟะพะธะฝั‚ะพะฒ + notify-deduction: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ LIBERTYBANS โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +libertybans: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั LibertyBans + enabled: false + + # ะกะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐั‚ัŒ ะผัƒั‚ั‹ ั LibertyBans + sync-mutes: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ LibertyBans ะดะปั ะผัƒั‚ะพะฒ ะฒะผะตัั‚ะพ ะฒัั‚ั€ะพะตะฝะฝะพะน ัะธัั‚ะตะผั‹ + use-for-mutes: false + + # ะ˜ะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ััƒั‰ะตัั‚ะฒัƒัŽั‰ะธะต ะผัƒั‚ั‹ ะธะท LibertyBans + import-existing: false + + # ะญะบัะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะผัƒั‚ั‹ ะฒ LibertyBans + export-mutes: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ SKINSRESTORER โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +skinsrestorer: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั SkinsRestorer + enabled: true + + # ะžะฑะฝะพะฒะปัั‚ัŒ ะพั‚ะพะฑั€ะฐะถะตะฝะธะต ะฟั€ะธ ัะผะตะฝะต ัะบะธะฝะฐ + update-on-skin-change: true + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ัะบะธะฝั‹ ะฒ head emoji + use-in-head-emoji: true + + # ะšััˆะธั€ะพะฒะฐั‚ัŒ ะดะฐะฝะฝั‹ะต ัะบะธะฝะพะฒ + cache-skins: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ DISCORDSRV โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +discordsrv: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั DiscordSRV + enabled: false + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ั‡ะฐั‚ะฐ ะฒ Discord + send-chat-to-discord: true + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ะธะท Discord ะฒ ะธะณั€ัƒ + send-discord-to-chat: true + + # ะšะฐะฝะฐะป ะดะปั ะณะปะพะฑะฐะปัŒะฝะพะณะพ ั‡ะฐั‚ะฐ + global-chat-channel: "global-chat" + + # ะšะฐะฝะฐะป ะดะปั ะปะพะบะฐะปัŒะฝะพะณะพ ั‡ะฐั‚ะฐ + local-chat-channel: "local-chat" + + # ะšะฐะฝะฐะป ะดะปั ะพะฑัŠัะฒะปะตะฝะธะน + announcement-channel: "announcements" + + # ะคะพั€ะผะฐั‚ ัะพะพะฑั‰ะตะฝะธะน ะฒ Discord + discord-format: "**{player}**: {message}" + + # ะคะพั€ะผะฐั‚ ัะพะพะฑั‰ะตะฝะธะน ะธะท Discord + minecraft-format: "&7[Discord] &b{user}&7: {message}" + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ ะฒ Discord + use-gradients-in-discord: false + + # Webhook ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ ัะพะพะฑั‰ะตะฝะธะน + webhook: + enabled: false + url: "" + username: "LoChat" + avatar-url: "" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ DYNMAP โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +dynmap: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Dynmap + enabled: false + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ั‡ะฐั‚ะฐ ะฝะฐ ะฒะตะฑ-ะบะฐั€ั‚ัƒ + send-chat-to-web: true + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ั ะฒะตะฑ-ะบะฐั€ั‚ั‹ ะฒ ะธะณั€ัƒ + send-web-to-chat: true + + # ะคะพั€ะผะฐั‚ ัะพะพะฑั‰ะตะฝะธะน ะฝะฐ ะฒะตะฑ-ะบะฐั€ั‚ะต + web-format: "{player}: {message}" + + # ะคะพั€ะผะฐั‚ ัะพะพะฑั‰ะตะฝะธะน ั ะฒะตะฑ-ะบะฐั€ั‚ั‹ + minecraft-format: "&7[Web] &a{player}&7: {message}" + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ ะฝะฐ ะฒะตะฑ-ะบะฐั€ั‚ะต + use-gradients-on-web: false + + # ะคะธะปัŒั‚ั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ะดะปั ะฒะตะฑ-ะบะฐั€ั‚ั‹ + filter-messages: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ BLUEMAP โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +bluemap: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั BlueMap + enabled: false + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ั‡ะฐั‚ะฐ ะฝะฐ ะบะฐั€ั‚ัƒ + send-chat-to-map: true + + # ะคะพั€ะผะฐั‚ ัะพะพะฑั‰ะตะฝะธะน ะฝะฐ ะบะฐั€ั‚ะต + map-format: "{player}: {message}" + + # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ ะฝะฐ ะบะฐั€ั‚ะต + use-gradients-on-map: false + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ PLAN โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +plan: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Plan + enabled: false + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ั‡ะฐั‚ะฐ ะฒ Plan + send-chat-stats: true + + # ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ัั‚ะฐั‚ะธัั‚ะธะบัƒ ะผัƒั‚ะพะฒ ะฒ Plan + send-mute-stats: true + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะพั‚ะฟั€ะฐะฒะบะธ ัั‚ะฐั‚ะธัั‚ะธะบะธ (ัะตะบัƒะฝะดั‹) + stats-interval: 300 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ COREPROTECT โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +coreprotect: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั CoreProtect + enabled: false + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั ั‡ะฐั‚ะฐ + log-chat-messages: true + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะบะพะผะฐะฝะดั‹ + log-commands: true + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะผัƒั‚ั‹ + log-mutes: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ AUTHME โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +authme: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั AuthMe + enabled: false + + # ะ‘ะปะพะบะธั€ะพะฒะฐั‚ัŒ ั‡ะฐั‚ ะดะปั ะฝะตะฐะฒั‚ะพั€ะธะทะพะฒะฐะฝะฝั‹ั… ะธะณั€ะพะบะพะฒ + block-chat-for-unregistered: true + + # ะกะพะพะฑั‰ะตะฝะธะต ะดะปั ะฝะตะฐะฒั‚ะพั€ะธะทะพะฒะฐะฝะฝั‹ั… ะธะณั€ะพะบะพะฒ + unregistered-message: "&#FF6B6Bะ’ะพะนะดะธั‚ะต ะฒ ะฐะบะบะฐัƒะฝั‚ ะดะปั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ั‡ะฐั‚ะฐ!" + + # ะ ะฐะทั€ะตัˆะตะฝะฝั‹ะต ะบะพะผะฐะฝะดั‹ ะดะปั ะฝะตะฐะฒั‚ะพั€ะธะทะพะฒะฐะฝะฝั‹ั… + allowed-commands: + - "/login" + - "/register" + - "/l" + - "/reg" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ TOWNY โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +towny: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Towny + enabled: false + + # ะงะฐั‚ ะณะพั€ะพะดะฐ + town-chat: + enabled: true + format: "&6[Town] {prefix}{player}&r: {message}" + command: "/tc" + + # ะงะฐั‚ ะฝะฐั†ะธะธ + nation-chat: + enabled: true + format: "&5[Nation] {prefix}{player}&r: {message}" + command: "/nc" + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะณะพั€ะพะด ะฒ ั‡ะฐั‚ะต + show-town-in-chat: true + + # ะคะพั€ะผะฐั‚ ะณะพั€ะพะดะฐ ะฒ ั‡ะฐั‚ะต + town-format: "&7[{town}]" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ FACTIONS โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +factions: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Factions + enabled: false + + # ะงะฐั‚ ั„ั€ะฐะบั†ะธะธ + faction-chat: + enabled: true + format: "&c[Faction] {prefix}{player}&r: {message}" + command: "/fc" + + # ะงะฐั‚ ะฐะปัŒัะฝัะฐ + alliance-chat: + enabled: true + format: "&a[Alliance] {prefix}{player}&r: {message}" + command: "/ac" + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ั„ั€ะฐะบั†ะธัŽ ะฒ ั‡ะฐั‚ะต + show-faction-in-chat: true + + # ะคะพั€ะผะฐั‚ ั„ั€ะฐะบั†ะธะธ ะฒ ั‡ะฐั‚ะต + faction-format: "&7[{faction}]" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ MULTIVERSE โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +multiverse: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ ั Multiverse + enabled: false + + # ะ ะฐะทะดะตะปัั‚ัŒ ั‡ะฐั‚ ะฟะพ ะผะธั€ะฐะผ + separate-chat-by-world: false + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะผะธั€ ะฒ ั‡ะฐั‚ะต + show-world-in-chat: true + + # ะคะพั€ะผะฐั‚ ะผะธั€ะฐ ะฒ ั‡ะฐั‚ะต + world-format: "&7[{world}]" + + # ะะฐัั‚ั€ะพะนะบะธ ั‡ะฐั‚ะฐ ะดะปั ะบะพะฝะบั€ะตั‚ะฝั‹ั… ะผะธั€ะพะฒ + world-settings: + world_nether: + chat-color: "&c" + prefix: "&4[Nether]" + + world_the_end: + chat-color: "&5" + prefix: "&d[End]" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะ‘ะฉะ˜ะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +general: + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะพะฟั€ะตะดะตะปัั‚ัŒ ะดะพัั‚ัƒะฟะฝั‹ะต ะฟะปะฐะณะธะฝั‹ + auto-detect-plugins: true + + # ะ˜ะฝั‚ะตั€ะฒะฐะป ะฟั€ะพะฒะตั€ะบะธ ะฟะปะฐะณะธะฝะพะฒ (ัะตะบัƒะฝะดั‹) + plugin-check-interval: 60 + + # ะ›ะพะณะธั€ะพะฒะฐั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธะธ + log-integrations: true + + # ะฃะฒะตะดะพะผะปัั‚ัŒ ะพ ะฟะพะดะบะปัŽั‡ะตะฝะธะธ/ะพั‚ะบะปัŽั‡ะตะฝะธะธ ะธะฝั‚ะตะณั€ะฐั†ะธะน + notify-integration-changes: true + + # ะŸั€ะธะพั€ะธั‚ะตั‚ ะธะฝั‚ะตะณั€ะฐั†ะธะน (ั‡ะตะผ ะฒั‹ัˆะต ั‡ะธัะปะพ, ั‚ะตะผ ะฒั‹ัˆะต ะฟั€ะธะพั€ะธั‚ะตั‚) + integration-priority: + luckperms: 100 + vault: 90 + placeholderapi: 80 + playerpoints: 70 + libertybans: 60 + skinsrestorer: 50 + discordsrv: 40 + dynmap: 30 + plan: 20 + coreprotect: 10 \ No newline at end of file diff --git a/src/main/resources/config/mute-config.yml b/src/main/resources/config/mute-config.yml new file mode 100644 index 0000000..675c031 --- /dev/null +++ b/src/main/resources/config/mute-config.yml @@ -0,0 +1,336 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Mute Configuration โ•‘ +# โ•‘ ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะผัƒั‚ะพะฒ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +settings: + # ะŸั€ะธั‡ะธะฝะฐ ะผัƒั‚ะฐ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ + default-reason: "ะะฐั€ัƒัˆะตะฝะธะต ะฟั€ะฐะฒะธะป ั‡ะฐั‚ะฐ" + + # ะ”ะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ะผัƒั‚ะฐ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ + default-duration: "1h" + + # ะœะฐะบัะธะผะฐะปัŒะฝะฐั ะดะปะธะฝะฐ ะฟั€ะธั‡ะธะฝั‹ ะผัƒั‚ะฐ + max-reason-length: 100 + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฟั€ะธั‡ะธะฝัƒ ะผัƒั‚ะฐ ะธะณั€ะพะบัƒ + show-reason: true + + # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะพัั‚ะฐะฒัˆะตะตัั ะฒั€ะตะผั ะผัƒั‚ะฐ + show-remaining-time: true + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ั€ะฐะทะผัƒั‡ะธะฒะฐั‚ัŒ ะฟั€ะธ ะธัั‚ะตั‡ะตะฝะธะธ ะฒั€ะตะผะตะฝะธ + auto-unmute: true + + # ะกะพั…ั€ะฐะฝัั‚ัŒ ะธัั‚ะพั€ะธัŽ ะผัƒั‚ะพะฒ + save-history: true + + # ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะทะฐะฟะธัะตะน ะฒ ะธัั‚ะพั€ะธะธ ะฝะฐ ะธะณั€ะพะบะฐ + max-history-entries: 50 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ”ะžะกะขะฃะŸะะซะ• ะ”ะ›ะ˜ะขะ•ะ›ะฌะะžะกะขะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +durations: + # ะคะพั€ะผะฐั‚: "ะฒั€ะตะผั": "ะฟั€ะฐะฒะพ ะดะปั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั" + "5m": + permission: "lochat.mute.dur.5m" + display: "5 ะผะธะฝัƒั‚" + + "10m": + permission: "lochat.mute.dur.10m" + display: "10 ะผะธะฝัƒั‚" + + "30m": + permission: "lochat.mute.dur.30m" + display: "30 ะผะธะฝัƒั‚" + + "1h": + permission: "lochat.mute.dur.1h" + display: "1 ั‡ะฐั" + + "3h": + permission: "lochat.mute.dur.3h" + display: "3 ั‡ะฐัะฐ" + + "6h": + permission: "lochat.mute.dur.6h" + display: "6 ั‡ะฐัะพะฒ" + + "12h": + permission: "lochat.mute.dur.12h" + display: "12 ั‡ะฐัะพะฒ" + + "1d": + permission: "lochat.mute.dur.1d" + display: "1 ะดะตะฝัŒ" + + "3d": + permission: "lochat.mute.dur.3d" + display: "3 ะดะฝั" + + "7d": + permission: "lochat.mute.dur.7d" + display: "7 ะดะฝะตะน" + + "14d": + permission: "lochat.mute.dur.14d" + display: "14 ะดะฝะตะน" + + "30d": + permission: "lochat.mute.dur.30d" + display: "30 ะดะฝะตะน" + + "perm": + permission: "lochat.mute.dur.perm" + display: "ะะฐะฒัะตะณะดะฐ" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ“ะžะขะžะ’ะซะ• ะŸะ ะ˜ะงะ˜ะะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +reasons: + spam: + text: "ะกะฟะฐะผ ะฒ ั‡ะฐั‚ะต" + duration: "30m" + permission: "lochat.mute.reason.spam" + + caps: + text: "ะ—ะปะพัƒะฟะพั‚ั€ะตะฑะปะตะฝะธะต ะทะฐะณะปะฐะฒะฝั‹ะผะธ ะฑัƒะบะฒะฐะผะธ" + duration: "15m" + permission: "lochat.mute.reason.caps" + + swear: + text: "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะฝะตั†ะตะฝะทัƒั€ะฝะพะน ะปะตะบัะธะบะธ" + duration: "1h" + permission: "lochat.mute.reason.swear" + + flood: + text: "ะคะปัƒะด ะฒ ั‡ะฐั‚ะต" + duration: "20m" + permission: "lochat.mute.reason.flood" + + advertising: + text: "ะ ะตะบะปะฐะผะฐ" + duration: "3h" + permission: "lochat.mute.reason.advertising" + + insult: + text: "ะžัะบะพั€ะฑะปะตะฝะธั ะธะณั€ะพะบะพะฒ" + duration: "2h" + permission: "lochat.mute.reason.insult" + + toxicity: + text: "ะขะพะบัะธั‡ะฝะพะต ะฟะพะฒะตะดะตะฝะธะต" + duration: "6h" + permission: "lochat.mute.reason.toxicity" + + politics: + text: "ะžะฑััƒะถะดะตะฝะธะต ะฟะพะปะธั‚ะธะบะธ" + duration: "1h" + permission: "lochat.mute.reason.politics" + + religion: + text: "ะ ะตะปะธะณะธะพะทะฝั‹ะต ัะฟะพั€ั‹" + duration: "1h" + permission: "lochat.mute.reason.religion" + + begging: + text: "ะŸะพะฟั€ะพัˆะฐะนะฝะธั‡ะตัั‚ะฒะพ" + duration: "30m" + permission: "lochat.mute.reason.begging" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะ’ะขะžะœะะขะ˜ะงะ•ะกะšะ˜ะ• ะœะฃะขะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +auto-mute: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะฐะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธะต ะผัƒั‚ั‹ + enabled: true + + # ะœัƒั‚ ะทะฐ ัะฟะฐะผ + spam: + enabled: true + threshold: 5 # ะšะพะปะธั‡ะตัั‚ะฒะพ ัะพะพะฑั‰ะตะฝะธะน + time-window: 10 # ะ—ะฐ ะบะฐะบะพะต ะฒั€ะตะผั (ัะตะบัƒะฝะดั‹) + duration: "10m" + reason: "ะะฒั‚ะพะผัƒั‚: ัะฟะฐะผ ะฒ ั‡ะฐั‚ะต" + + # ะœัƒั‚ ะทะฐ ะผะฐั‚ + swear: + enabled: true + threshold: 3 # ะšะพะปะธั‡ะตัั‚ะฒะพ ะฝะฐั€ัƒัˆะตะฝะธะน + duration: "30m" + reason: "ะะฒั‚ะพะผัƒั‚: ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะผะฐั‚ะฐ" + + # ะœัƒั‚ ะทะฐ ะทะฐะณะปะฐะฒะฝั‹ะต ะฑัƒะบะฒั‹ + caps: + enabled: true + threshold: 5 # ะšะพะปะธั‡ะตัั‚ะฒะพ ะฝะฐั€ัƒัˆะตะฝะธะน + duration: "5m" + reason: "ะะฒั‚ะพะผัƒั‚: ะทะปะพัƒะฟะพั‚ั€ะตะฑะปะตะฝะธะต CAPS" + + # ะœัƒั‚ ะทะฐ ั€ะตะบะปะฐะผัƒ + advertising: + enabled: true + threshold: 1 # ะžะดะฝะพ ะฝะฐั€ัƒัˆะตะฝะธะต + duration: "1h" + reason: "ะะฒั‚ะพะผัƒั‚: ั€ะตะบะปะฐะผะฐ" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะญะกะšะะ›ะะฆะ˜ะฏ ะะะšะะ—ะะะ˜ะ™ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +escalation: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ััะบะฐะปะฐั†ะธัŽ ะฝะฐะบะฐะทะฐะฝะธะน + enabled: true + + # ะŸะตั€ะธะพะด ะดะปั ะฟะพะดัั‡ะตั‚ะฐ ะฝะฐั€ัƒัˆะตะฝะธะน (ะดะฝะธ) + period: 30 + + # ะฃั€ะพะฒะฝะธ ะฝะฐะบะฐะทะฐะฝะธะน + levels: + 1: + duration: "30m" + reason: "ะŸะตั€ะฒะพะต ะฝะฐั€ัƒัˆะตะฝะธะต" + + 2: + duration: "2h" + reason: "ะŸะพะฒั‚ะพั€ะฝะพะต ะฝะฐั€ัƒัˆะตะฝะธะต" + + 3: + duration: "12h" + reason: "ะขั€ะตั‚ัŒะต ะฝะฐั€ัƒัˆะตะฝะธะต" + + 4: + duration: "3d" + reason: "ะงะตั‚ะฒะตั€ั‚ะพะต ะฝะฐั€ัƒัˆะตะฝะธะต" + + 5: + duration: "7d" + reason: "ะŸัั‚ะพะต ะฝะฐั€ัƒัˆะตะฝะธะต" + + 6: + duration: "perm" + reason: "ะกะธัั‚ะตะผะฐั‚ะธั‡ะตัะบะธะต ะฝะฐั€ัƒัˆะตะฝะธั" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะฃะ’ะ•ะ”ะžะœะ›ะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +notifications: + # ะฃะฒะตะดะพะผะปัั‚ัŒ ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะพะฒ ะพ ะผัƒั‚ะฐั… + notify-staff: true + + # ะŸั€ะฐะฒะพ ะดะปั ะฟะพะปัƒั‡ะตะฝะธั ัƒะฒะตะดะพะผะปะตะฝะธะน + staff-permission: "lochat.mute.notify" + + # ะŸัƒะฑะปะธั‡ะฝั‹ะต ัƒะฒะตะดะพะผะปะตะฝะธั ะพ ะผัƒั‚ะฐั… + public-mute: false + + # ะŸัƒะฑะปะธั‡ะฝั‹ะต ัƒะฒะตะดะพะผะปะตะฝะธั ะพ ั€ะฐะทะผัƒั‚ะฐั… + public-unmute: false + + # ะกะบั€ั‹ั‚ั‹ะต ะผัƒั‚ั‹ (ั ั„ะปะฐะณะพะผ -s) + silent-mute: + enabled: true + permission: "lochat.mute.silent" + notify-permission: "lochat.mute.see-silent" + + # ะคะพั€ะผะฐั‚ ัƒะฒะตะดะพะผะปะตะฝะธะน + formats: + mute: "&#FF6B6B{moderator} ะทะฐะผัƒั‚ะธะป {player} ะฝะฐ {duration}. ะŸั€ะธั‡ะธะฝะฐ: {reason}" + unmute: "BCB77{moderator} ั€ะฐะทะผัƒั‚ะธะป {player}" + silent-mute: "&#FFA726[ะขะ˜ะฅะž] {moderator} ะทะฐะผัƒั‚ะธะป {player} ะฝะฐ {duration}. ะŸั€ะธั‡ะธะฝะฐ: {reason}" + auto-mute: "&#FF6B6B[ะะ’ะขะž] {player} ะทะฐะผัƒั‡ะตะฝ ะฝะฐ {duration}. ะŸั€ะธั‡ะธะฝะฐ: {reason}" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ˜ะะขะ•ะ“ะ ะะฆะ˜ะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +integrations: + # LibertyBans + libertybans: + enabled: false + sync-mutes: true + + # AdvancedBan + advancedban: + enabled: false + sync-mutes: true + + # LiteBans + litebans: + enabled: false + sync-mutes: true + + # Discord ัƒะฒะตะดะพะผะปะตะฝะธั + discord: + enabled: false + webhook-url: "" + format: "**{moderator}** ะทะฐะผัƒั‚ะธะป **{player}** ะฝะฐ **{duration}**\nะŸั€ะธั‡ะธะฝะฐ: {reason}" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะฅะ ะะะ•ะะ˜ะ• ะ”ะะะะซะฅ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +storage: + # ะขะธะฟ ั…ั€ะฐะฝะตะฝะธั: file, mysql, sqlite + type: "file" + + # ะะฐัั‚ั€ะพะนะบะธ MySQL + mysql: + host: "localhost" + port: 3306 + database: "lochat" + username: "root" + password: "password" + table-prefix: "lochat_" + + # ะะฐัั‚ั€ะพะนะบะธ SQLite + sqlite: + file: "plugins/LoChat/mutes.db" + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะฐั ะพั‡ะธัั‚ะบะฐ ัั‚ะฐั€ั‹ั… ะทะฐะฟะธัะตะน + cleanup: + enabled: true + days: 90 # ะฃะดะฐะปัั‚ัŒ ะทะฐะฟะธัะธ ัั‚ะฐั€ัˆะต N ะดะฝะตะน + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ”ะžะŸะžะ›ะะ˜ะขะ•ะ›ะฌะะซะ• ะคะฃะะšะฆะ˜ะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +features: + # ะ’ั€ะตะผะตะฝะฝั‹ะต ะผัƒั‚ั‹ (ะฐะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัะฝะธะผะฐัŽั‚ัั) + temporary-mutes: true + + # IP ะผัƒั‚ั‹ (ะผัƒั‚ะธั‚ัŒ ะฟะพ IP ะฐะดั€ะตััƒ) + ip-mutes: + enabled: false + permission: "lochat.mute.ip" + + # ะœัƒั‚ ะบะพะผะฐะฝะด (ะฑะปะพะบะธั€ะพะฒะฐั‚ัŒ ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะต ะบะพะผะฐะฝะดั‹) + command-mute: + enabled: false + blocked-commands: + - "me" + - "say" + - "tell" + + # ะŸั€ะตะดัƒะฟั€ะตะถะดะตะฝะธั ะฟะตั€ะตะด ะผัƒั‚ะพะผ + warnings: + enabled: true + max-warnings: 3 + reset-time: 3600 # ะกะฑั€ะพั ะฟั€ะตะดัƒะฟั€ะตะถะดะตะฝะธะน (ัะตะบัƒะฝะดั‹) + + # ะะฟะตะปะปัั†ะธะธ ะฝะฐ ะผัƒั‚ั‹ + appeals: + enabled: false + command: "/appeal" + permission: "lochat.appeal" \ No newline at end of file diff --git a/src/main/resources/config/sounds.yml b/src/main/resources/config/sounds.yml new file mode 100644 index 0000000..2f72b96 --- /dev/null +++ b/src/main/resources/config/sounds.yml @@ -0,0 +1,313 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Sounds Configuration โ•‘ +# โ•‘ ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะทะฒัƒะบะพะฒ โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +settings: + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะทะฒัƒะบะธ + enabled: true + + # ะ“ะปะพะฑะฐะปัŒะฝะฐั ะณั€ะพะผะบะพัั‚ัŒ (0.0 - 1.0) + global-volume: 0.5 + + # ะ“ะปะพะฑะฐะปัŒะฝะฐั ะฒั‹ัะพั‚ะฐ ั‚ะพะฝะฐ (0.5 - 2.0) + global-pitch: 1.0 + + # ะ ะฐะทั€ะตัˆะธั‚ัŒ ะธะณั€ะพะบะฐะผ ะพั‚ะบะปัŽั‡ะฐั‚ัŒ ะทะฒัƒะบะธ + allow-disable: true + + # ะšะพะผะฐะฝะดะฐ ะดะปั ัƒะฟั€ะฐะฒะปะตะฝะธั ะทะฒัƒะบะฐะผะธ + toggle-command: "/sounds" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะ˜ ะกะžะžะ‘ะฉะ•ะะ˜ะ™ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +messages: + # ะ›ะธั‡ะฝั‹ะต ัะพะพะฑั‰ะตะฝะธั + private-message: + enabled: true + sound: "BLOCK_NOTE_BLOCK_PLING" + volume: 0.8 + pitch: 1.2 + # ะ˜ะณั€ะฐั‚ัŒ ั‚ะพะปัŒะบะพ ะฟะพะปัƒั‡ะฐั‚ะตะปัŽ + receiver-only: true + + # ะฃะฟะพะผะธะฝะฐะฝะธั ะฒ ั‡ะฐั‚ะต + mention: + enabled: true + sound: "BLOCK_NOTE_BLOCK_BELL" + volume: 0.7 + pitch: 1.5 + # ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะน ะทะฒัƒะบ ะดะปั @everyone + everyone-sound: "BLOCK_NOTE_BLOCK_CHIME" + + # ะ“ะปะพะฑะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + global-chat: + enabled: false + sound: "UI_BUTTON_CLICK" + volume: 0.3 + pitch: 1.0 + + # ะ›ะพะบะฐะปัŒะฝั‹ะน ั‡ะฐั‚ + local-chat: + enabled: false + sound: "UI_BUTTON_CLICK" + volume: 0.2 + pitch: 0.8 + + # ะžะฑัŠัะฒะปะตะฝะธั + announcement: + enabled: true + sound: "BLOCK_NOTE_BLOCK_CHIME" + volume: 1.0 + pitch: 1.0 + # ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะทะฒัƒะบะธ ะดะปั ะฒะฐะถะฝั‹ั… ะพะฑัŠัะฒะปะตะฝะธะน + important-sound: "ENTITY_ENDER_DRAGON_GROWL" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะ˜ ะกะ˜ะกะขะ•ะœะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +system: + # ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะบ ัะตั€ะฒะตั€ัƒ + join: + enabled: false + sound: "ENTITY_PLAYER_LEVELUP" + volume: 0.5 + pitch: 1.0 + # ะ˜ะณั€ะฐั‚ัŒ ั‚ะพะปัŒะบะพ ะฟะพะดะบะปัŽั‡ะธะฒัˆะตะผัƒัั ะธะณั€ะพะบัƒ + self-only: true + + # ะžั‚ะบะปัŽั‡ะตะฝะธะต ะพั‚ ัะตั€ะฒะตั€ะฐ + quit: + enabled: false + sound: "BLOCK_NOTE_BLOCK_BASS" + volume: 0.3 + pitch: 0.8 + + # ะœัƒั‚ ะธะณั€ะพะบะฐ + mute: + enabled: true + sound: "BLOCK_ANVIL_LAND" + volume: 0.6 + pitch: 0.5 + # ะ˜ะณั€ะฐั‚ัŒ ะทะฐะผัƒั‡ะตะฝะฝะพะผัƒ ะธะณั€ะพะบัƒ + target-sound: "ENTITY_VILLAGER_NO" + + # ะ ะฐะทะผัƒั‚ ะธะณั€ะพะบะฐ + unmute: + enabled: true + sound: "ENTITY_PLAYER_LEVELUP" + volume: 0.7 + pitch: 1.2 + # ะ˜ะณั€ะฐั‚ัŒ ั€ะฐะทะผัƒั‡ะตะฝะฝะพะผัƒ ะธะณั€ะพะบัƒ + target-sound: "ENTITY_VILLAGER_YES" + + # ะžั‡ะธัั‚ะบะฐ ั‡ะฐั‚ะฐ + clear-chat: + enabled: true + sound: "ITEM_BUCKET_EMPTY" + volume: 0.5 + pitch: 1.5 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะ˜ ะ“ะ ะะ”ะ˜ะ•ะะขะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +gradient: + # ะฃัั‚ะฐะฝะพะฒะบะฐ ะณั€ะฐะดะธะตะฝั‚ะฐ + color-set: + enabled: true + sound: "BLOCK_NOTE_BLOCK_HARP" + volume: 0.6 + pitch: 1.3 + + # ะกะฑั€ะพั ะณั€ะฐะดะธะตะฝั‚ะฐ + color-reset: + enabled: true + sound: "BLOCK_NOTE_BLOCK_BASS" + volume: 0.4 + pitch: 0.7 + + # ะฃัั‚ะฐะฝะพะฒะบะฐ ะฟั€ะตั„ะธะบัะฐ + prefix-set: + enabled: true + sound: "BLOCK_NOTE_BLOCK_CHIME" + volume: 0.7 + pitch: 1.4 + + # ะžัˆะธะฑะบะฐ (ะฝะตะดะพัั‚ะฐั‚ะพั‡ะฝะพ ัั€ะตะดัั‚ะฒ, ะบัƒะปะดะฐัƒะฝ ะธ ั‚.ะด.) + error: + enabled: true + sound: "ENTITY_VILLAGER_NO" + volume: 0.5 + pitch: 0.8 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะ˜ ะšะžะœะะะ” โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +commands: + # ะฃัะฟะตัˆะฝะพะต ะฒั‹ะฟะพะปะฝะตะฝะธะต ะบะพะผะฐะฝะดั‹ + success: + enabled: false + sound: "ENTITY_EXPERIENCE_ORB_PICKUP" + volume: 0.4 + pitch: 1.2 + + # ะžัˆะธะฑะบะฐ ะฒั‹ะฟะพะปะฝะตะฝะธั ะบะพะผะฐะฝะดั‹ + error: + enabled: true + sound: "ENTITY_VILLAGER_NO" + volume: 0.5 + pitch: 0.8 + + # ะะตะดะพัั‚ะฐั‚ะพั‡ะฝะพ ะฟั€ะฐะฒ + no-permission: + enabled: true + sound: "BLOCK_NOTE_BLOCK_BASS" + volume: 0.6 + pitch: 0.5 + + # ะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ + player-not-found: + enabled: true + sound: "ENTITY_ITEM_BREAK" + volume: 0.4 + pitch: 0.6 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะ˜ ะคะ˜ะ›ะฌะขะ ะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +filters: + # ะกะพะพะฑั‰ะตะฝะธะต ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝะพ ั„ะธะปัŒั‚ั€ะพะผ + blocked: + enabled: true + sound: "ENTITY_VILLAGER_NO" + volume: 0.6 + pitch: 0.7 + + # ะŸั€ะตะดัƒะฟั€ะตะถะดะตะฝะธะต ะพั‚ ั„ะธะปัŒั‚ั€ะฐ + warning: + enabled: true + sound: "BLOCK_NOTE_BLOCK_PLING" + volume: 0.5 + pitch: 0.9 + + # ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะพะต ะธัะฟั€ะฐะฒะปะตะฝะธะต (ะฝะฐะฟั€ะธะผะตั€, caps) + auto-fix: + enabled: false + sound: "UI_BUTTON_CLICK" + volume: 0.3 + pitch: 1.1 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะšะะกะขะžะœะะซะ• ะ—ะ’ะฃะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +custom: + # ะ—ะฒัƒะบะธ ะดะปั VIP ะธะณั€ะพะบะพะฒ + vip: + enabled: false + join-sound: "ENTITY_PLAYER_LEVELUP" + message-sound: "BLOCK_NOTE_BLOCK_HARP" + volume: 0.8 + pitch: 1.3 + + # ะ—ะฒัƒะบะธ ะดะปั ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะพะฒ + admin: + enabled: false + join-sound: "ENTITY_ENDER_DRAGON_GROWL" + command-sound: "BLOCK_ANVIL_USE" + volume: 0.7 + pitch: 1.0 + + # ะŸั€ะฐะทะดะฝะธั‡ะฝั‹ะต ะทะฒัƒะบะธ + holiday: + enabled: false + christmas: + sound: "BLOCK_NOTE_BLOCK_CHIME" + volume: 0.6 + pitch: 1.5 + new-year: + sound: "ENTITY_FIREWORK_ROCKET_BLAST" + volume: 0.8 + pitch: 1.2 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ—ะ’ะฃะšะžะ’ะซะ• ะกะฅะ•ะœะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +schemes: + # ะšะปะฐััะธั‡ะตัะบะฐั ัั…ะตะผะฐ + classic: + name: "ะšะปะฐััะธั‡ะตัะบะฐั" + description: "ะกั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะต ะทะฒัƒะบะธ Minecraft" + sounds: + private-message: "BLOCK_NOTE_BLOCK_PLING" + mention: "BLOCK_NOTE_BLOCK_BELL" + announcement: "BLOCK_NOTE_BLOCK_CHIME" + + # ะœะธะฝะธะผะฐะปะธัั‚ะธั‡ะฝะฐั ัั…ะตะผะฐ + minimal: + name: "ะœะธะฝะธะผะฐะปัŒะฝะฐั" + description: "ะขะพะปัŒะบะพ ะฒะฐะถะฝั‹ะต ะทะฒัƒะบะธ" + sounds: + private-message: "UI_BUTTON_CLICK" + mention: "BLOCK_NOTE_BLOCK_PLING" + announcement: "ENTITY_EXPERIENCE_ORB_PICKUP" + + # ะžั‚ะบะปัŽั‡ะตะฝะฝะฐั ัั…ะตะผะฐ + silent: + name: "ะขะธัˆะธะฝะฐ" + description: "ะ’ัะต ะทะฒัƒะบะธ ะพั‚ะบะปัŽั‡ะตะฝั‹" + sounds: {} + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะŸะž ะœะ˜ะ ะะœ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +worlds: + # ะะฐัั‚ั€ะพะนะบะธ ะดะปั ะบะพะฝะบั€ะตั‚ะฝั‹ั… ะผะธั€ะพะฒ + world_nether: + volume-modifier: 0.7 # ะฃะผะตะฝัŒัˆะธั‚ัŒ ะณั€ะพะผะบะพัั‚ัŒ ะฝะฐ 30% + pitch-modifier: 0.8 # ะŸะพะฝะธะทะธั‚ัŒ ั‚ะพะฝ + + world_the_end: + volume-modifier: 0.5 + pitch-modifier: 1.2 + # ะžั‚ะบะปัŽั‡ะธั‚ัŒ ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะต ะทะฒัƒะบะธ + disabled-sounds: + - "global-chat" + - "local-chat" + + creative_world: + volume-modifier: 1.2 + # ะ’ะบะปัŽั‡ะธั‚ัŒ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะทะฒัƒะบะธ + extra-sounds: + build: "BLOCK_STONE_PLACE" + fly: "ENTITY_BAT_TAKEOFF" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะŸะ•ะ ะกะžะะะ›ะฌะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +personal: + # ะ ะฐะทั€ะตัˆะธั‚ัŒ ะธะณั€ะพะบะฐะผ ะฝะฐัั‚ั€ะฐะธะฒะฐั‚ัŒ ะณั€ะพะผะบะพัั‚ัŒ + allow-volume-control: true + + # ะ ะฐะทั€ะตัˆะธั‚ัŒ ะธะณั€ะพะบะฐะผ ะฒั‹ะฑะธั€ะฐั‚ัŒ ะทะฒัƒะบะพะฒั‹ะต ัั…ะตะผั‹ + allow-scheme-selection: true + + # ะกะพั…ั€ะฐะฝัั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะธะณั€ะพะบะพะฒ + save-preferences: true + + # ะคะฐะนะป ะดะปั ัะพั…ั€ะฐะฝะตะฝะธั ะฝะฐัั‚ั€ะพะตะบ + preferences-file: "plugins/LoChat/sound-preferences.yml" \ No newline at end of file diff --git a/src/main/resources/data/data.yml b/src/main/resources/data/data.yml new file mode 100644 index 0000000..d9e44af --- /dev/null +++ b/src/main/resources/data/data.yml @@ -0,0 +1,91 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ LoChat Data Storage โ•‘ +# โ•‘ ะฅั€ะฐะฝะธะปะธั‰ะต ะดะฐะฝะฝั‹ั… LoChat โ•‘ +# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะญั‚ะพั‚ ั„ะฐะนะป ัะพะดะตั€ะถะธั‚ ะพัะฝะพะฒะฝั‹ะต ะดะฐะฝะฝั‹ะต ะฟะปะฐะณะธะฝะฐ +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +last-updated: 0 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ”ะะะะซะ• ะ˜ะ“ะ ะžะšะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +players: {} +# ะกั‚ั€ัƒะบั‚ัƒั€ะฐ: +# uuid: +# name: "PlayerName" +# display-name: "GradientName" +# first-join: 1234567890 +# last-join: 1234567890 +# total-playtime: 3600000 +# settings: +# sounds-enabled: true +# auto-messages: true +# mentions-enabled: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ“ะ ะะ”ะ˜ะ•ะะขะะซะ• ะะ˜ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +gradients: {} +# ะกั‚ั€ัƒะบั‚ัƒั€ะฐ: +# uuid: +# colors: ["#FF0000", "#00FF00", "#0000FF"] +# prefix: "[CUSTOM]" +# enabled: true +# created: 1234567890 +# last-updated: 1234567890 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะะšะขะ˜ะ’ะะซะ• ะœะฃะขะซ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +mutes: {} +# ะกั‚ั€ัƒะบั‚ัƒั€ะฐ: +# uuid: +# moderator: "ModeratorUUID" +# reason: "ะŸั€ะธั‡ะธะฝะฐ ะผัƒั‚ะฐ" +# start-time: 1234567890 +# end-time: 1234567890 +# silent: false +# active: true + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ˜ะ“ะะžะ ะ˜ะ ะžะ’ะะะ˜ะ• โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +ignores: {} +# ะกั‚ั€ัƒะบั‚ัƒั€ะฐ: +# player-uuid: +# - "ignored-uuid-1" +# - "ignored-uuid-2" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะะขะ˜ะกะขะ˜ะšะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +statistics: + total-messages: 0 + messages-today: 0 + last-reset: 0 + top-chatters: {} + # uuid: message-count + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะšะญะจะ˜ะ ะžะ’ะะะะซะ• ะ”ะะะะซะ• โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +cache: + last-messages: {} + # uuid: "last message" + + cooldowns: {} + # uuid: + # global: 1234567890 + # local: 1234567890 + # pm: 1234567890 + # gradient: 1234567890 \ No newline at end of file diff --git a/src/main/resources/filter-words.json b/src/main/resources/data/filter-words.json similarity index 100% rename from src/main/resources/filter-words.json rename to src/main/resources/data/filter-words.json diff --git a/src/main/resources/data/gradients.yml b/src/main/resources/data/gradients.yml new file mode 100644 index 0000000..3b29b00 --- /dev/null +++ b/src/main/resources/data/gradients.yml @@ -0,0 +1,22 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ Gradient Data โ•‘ +# โ•‘ ะ”ะฐะฝะฝั‹ะต ะณั€ะฐะดะธะตะฝั‚ะพะฒ โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +gradients: {} + +# ะŸั€ะธะผะตั€ ัั‚ั€ัƒะบั‚ัƒั€ั‹: +# 550e8400-e29b-41d4-a716-446655440000: +# colors: +# - "#FF0000" +# - "#00FF00" +# - "#0000FF" +# prefix: "[VIP]" +# enabled: true +# created: 1640995200000 +# last-updated: 1640995200000 +# preset-used: "rainbow" +# cost-paid: 300 \ No newline at end of file diff --git a/src/main/resources/data/ignores.yml b/src/main/resources/data/ignores.yml new file mode 100644 index 0000000..45acede --- /dev/null +++ b/src/main/resources/data/ignores.yml @@ -0,0 +1,19 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ Ignore Data โ•‘ +# โ•‘ ะ”ะฐะฝะฝั‹ะต ะธะณะฝะพั€ะธั€ะพะฒะฐะฝะธั โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +ignores: {} + +# ะŸั€ะธะผะตั€ ัั‚ั€ัƒะบั‚ัƒั€ั‹: +# 550e8400-e29b-41d4-a716-446655440000: +# ignored-players: +# - uuid: "ignored-player-uuid-1" +# name: "IgnoredPlayer1" +# added: 1640995200000 +# - uuid: "ignored-player-uuid-2" +# name: "IgnoredPlayer2" +# added: 1640995300000 \ No newline at end of file diff --git a/src/main/resources/data/mutes.yml b/src/main/resources/data/mutes.yml new file mode 100644 index 0000000..c5ec414 --- /dev/null +++ b/src/main/resources/data/mutes.yml @@ -0,0 +1,39 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ Mute Data โ•‘ +# โ•‘ ะ”ะฐะฝะฝั‹ะต ะผัƒั‚ะพะฒ โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +active-mutes: {} +mute-history: {} + +# ะŸั€ะธะผะตั€ ัั‚ั€ัƒะบั‚ัƒั€ั‹ ะฐะบั‚ะธะฒะฝั‹ั… ะผัƒั‚ะพะฒ: +# active-mutes: +# 550e8400-e29b-41d4-a716-446655440000: +# id: 1 +# moderator: "admin-uuid" +# moderator-name: "AdminName" +# reason: "ะกะฟะฐะผ ะฒ ั‡ะฐั‚ะต" +# start-time: 1640995200000 +# end-time: 1640998800000 +# duration: 3600000 +# silent: false +# active: true +# server: "lobby" + +# ะŸั€ะธะผะตั€ ะธัั‚ะพั€ะธะธ ะผัƒั‚ะพะฒ: +# mute-history: +# 550e8400-e29b-41d4-a716-446655440000: +# - id: 1 +# moderator: "admin-uuid" +# moderator-name: "AdminName" +# reason: "ะŸะตั€ะฒะพะต ะฝะฐั€ัƒัˆะตะฝะธะต" +# start-time: 1640995200000 +# end-time: 1640998800000 +# duration: 3600000 +# unmute-reason: "ะ’ั€ะตะผั ะธัั‚ะตะบะปะพ" +# unmute-moderator: null +# silent: false +# server: "lobby" \ No newline at end of file diff --git a/src/main/resources/data/players.yml b/src/main/resources/data/players.yml new file mode 100644 index 0000000..cd85116 --- /dev/null +++ b/src/main/resources/data/players.yml @@ -0,0 +1,30 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ Player Data โ•‘ +# โ•‘ ะ”ะฐะฝะฝั‹ะต ะธะณั€ะพะบะพะฒ โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +players: {} + +# ะŸั€ะธะผะตั€ ัั‚ั€ัƒะบั‚ัƒั€ั‹: +# 550e8400-e29b-41d4-a716-446655440000: +# name: "PlayerName" +# display-name: "&#FF0000P&#FF3300l&#FF6600a&#FF9900y&#FFcc00e&#FFff00r" +# first-join: 1640995200000 +# last-join: 1640995200000 +# last-quit: 1640995200000 +# total-playtime: 3600000 +# settings: +# sounds-enabled: true +# sound-volume: 1.0 +# auto-messages: true +# mentions-enabled: true +# pm-sounds: true +# statistics: +# messages-sent: 150 +# commands-used: 45 +# mutes-received: 2 +# last-message: "ะŸั€ะธะฒะตั‚ ะฒัะตะผ!" +# join-count: 25 \ No newline at end of file diff --git a/src/main/resources/data/statistics.yml b/src/main/resources/data/statistics.yml new file mode 100644 index 0000000..71151db --- /dev/null +++ b/src/main/resources/data/statistics.yml @@ -0,0 +1,76 @@ +# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +# โ•‘ Statistics Data โ•‘ +# โ•‘ ะกั‚ะฐั‚ะธัั‚ะธะบะฐ โ•‘ +# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +# ะะ• ะ ะ•ะ”ะะšะขะ˜ะ ะฃะ™ะขะ• ะญะขะžะข ะคะะ™ะ› ะ’ะ ะฃะงะะฃะฎ! + +data-version: 1 +last-updated: 0 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะ‘ะฉะะฏ ะกะขะะขะ˜ะกะขะ˜ะšะ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +global: + total-messages: 0 + messages-today: 0 + messages-this-week: 0 + messages-this-month: 0 + last-reset: 0 + peak-online: 0 + peak-online-time: 0 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะะขะ˜ะกะขะ˜ะšะ ะŸะž ะขะ˜ะŸะะœ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +by-type: + global-chat: 0 + local-chat: 0 + private-messages: 0 + announcements: 0 + commands: 0 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะขะžะŸ ะ˜ะ“ะ ะžะšะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +top-players: + by-messages: {} + by-playtime: {} + by-commands: {} + +# ะŸั€ะธะผะตั€: +# by-messages: +# 550e8400-e29b-41d4-a716-446655440000: +# name: "PlayerName" +# count: 1500 +# last-updated: 1640995200000 + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะะขะ˜ะกะขะ˜ะšะ ะœะฃะขะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +mute-stats: + total-mutes: 0 + active-mutes: 0 + mutes-today: 0 + mutes-this-week: 0 + mutes-this-month: 0 + top-reasons: {} + top-moderators: {} + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะกะขะะขะ˜ะกะขะ˜ะšะ ะคะ˜ะ›ะฌะขะ ะžะ’ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +filter-stats: + total-blocked: 0 + blocked-today: 0 + by-filter: + caps: 0 + swear: 0 + spam: 0 + advertising: 0 + flood: 0 \ No newline at end of file diff --git a/src/main/resources/gradient-config.yml b/src/main/resources/gradient-config.yml deleted file mode 100644 index 99487be..0000000 --- a/src/main/resources/gradient-config.yml +++ /dev/null @@ -1,141 +0,0 @@ -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoChat Gradient Config โ•‘ -# โ•‘ ะะฐัั‚ั€ะพะนะบะธ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ั… ะฝะธะบะพะฒ โ•‘ -# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะกะะžะ’ะะซะ• ะะะกะขะ ะžะ™ะšะ˜ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะ’ะบะปัŽั‡ะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ -enabled: true - -# ะขะธะฟ ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั…: file ะธะปะธ sqlite -storage-type: "file" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะฆะ’ะ•ะขะžะ’ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะœะธะฝะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ั†ะฒะตั‚ะพะฒ ะฒ ะณั€ะฐะดะธะตะฝั‚ะต -min-colors: 1 - -# ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ั†ะฒะตั‚ะพะฒ ะฒ ะณั€ะฐะดะธะตะฝั‚ะต -max-colors: 7 - -# ะฆะตะฝะฐ ะทะฐ ะบะฐะถะดั‹ะน ั†ะฒะตั‚ (PlayerPoints) -price-per-color: 50 - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะะะกะขะ ะžะ™ะšะ˜ ะŸะ ะ•ะคะ˜ะšะกะžะ’ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะฆะตะฝะฐ ะทะฐ ะฟั€ะตั„ะธะบั (PlayerPoints) -prefix-price: 500 - -# ะžะดะฝะพั€ะฐะทะพะฒะฐั ะฟะพะบัƒะฟะบะฐ ะฟั€ะตั„ะธะบัะฐ (true) ะธะปะธ ะทะฐ ะบะฐะถะดะพะต ะธะทะผะตะฝะตะฝะธะต (false) -prefix-one-time-purchase: true - -# ะœะฐะบัะธะผะฐะปัŒะฝะฐั ะดะปะธะฝะฐ ะฟั€ะตั„ะธะบัะฐ (ัะธะผะฒะพะปั‹) -max-prefix-length: 16 - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะšะฃะ›ะ”ะะฃะะซ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะšัƒะปะดะฐัƒะฝ ะฝะฐ ะธะทะผะตะฝะตะฝะธะต ั†ะฒะตั‚ะฐ (ัะตะบัƒะฝะดั‹) -color-cooldown: 60 - -# ะšัƒะปะดะฐัƒะฝ ะฝะฐ ะธะทะผะตะฝะตะฝะธะต ะฟั€ะตั„ะธะบัะฐ (ัะตะบัƒะฝะดั‹) -prefix-cooldown: 120 - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะ˜ะะขะ•ะ“ะ ะะฆะ˜ะ˜ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั LuckPerms -luckperms: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ - enabled: true - # ะŸั€ะธะพั€ะธั‚ะตั‚ ะฟั€ะตั„ะธะบัะฐ ะฒ LuckPerms - prefix-priority: 100 - # ะžะฑะฝะพะฒะปัั‚ัŒ ะฟั€ะตั„ะธะบั ะฒ LuckPerms ะฟั€ะธ ะธะทะผะตะฝะตะฝะธะธ - update-prefix: true - -# ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั PlayerPoints -playerpoints: - # ะ’ะบะปัŽั‡ะธั‚ัŒ ะธะฝั‚ะตะณั€ะฐั†ะธัŽ (ะฟะพะบัƒะฟะบะธ ะทะฐ ะฟะพะธะฝั‚ั‹) - enabled: true - # ะŸะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฑะฐะปะฐะฝั ะฒ GUI - show-balance: true - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะŸะ ะ•ะ”ะฃะกะขะะะžะ’ะšะ˜ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะŸั€ะตะดัƒัั‚ะฐะฝะพะฒะปะตะฝะฝั‹ะต ะณั€ะฐะดะธะตะฝั‚ั‹ -presets: - fire: [ "#FF4500", "#FF6347", "#FFD700" ] - ocean: [ "#00CED1", "#1E90FF", "#4169E1" ] - forest: [ "#228B22", "#32CD32", "#90EE90" ] - sunset: [ "#FF69B4", "#FF1493", "#DC143C" ] - rainbow: [ "#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#9400D3" ] - ice: [ "#B0E0E6", "#87CEEB", "#4682B4" ] - gold: [ "#FFD700", "#FFA500", "#FF8C00" ] - purple: [ "#9370DB", "#8A2BE2", "#4B0082" ] - pink: [ "#FFB6C1", "#FF69B4", "#FF1493" ] - green: [ "#00FF7F", "#00FA9A", "#98FB98" ] - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ GUI ะะะกะขะ ะžะ™ะšะ˜ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -gui: - # ะะฐะทะฒะฐะฝะธะต GUI ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธั - confirm-title: "ะŸะพะดั‚ะฒะตั€ะถะดะตะฝะธะต ะฟะพะบัƒะฟะบะธ" - - # ะ ะฐะทะผะตั€ GUI (9, 18, 27, 36, 45, 54) - size: 27 - - # ะŸั€ะตะดะผะตั‚ั‹ ะฒ GUI - items: - confirm: - material: "GREEN_WOOL" - name: "โœ“ ะŸะพะดั‚ะฒะตั€ะดะธั‚ัŒ" - lore: - - "ะะฐะถะผะธั‚ะต ะดะปั ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธั" - - "ะฟะพะบัƒะฟะบะธ ะณั€ะฐะดะธะตะฝั‚ะฐ" - - cancel: - material: "RED_WOOL" - name: "โœ— ะžั‚ะผะตะฝะธั‚ัŒ" - lore: - - "ะะฐะถะผะธั‚ะต ะดะปั ะพั‚ะผะตะฝั‹" - - "ะฟะพะบัƒะฟะบะธ" - - info: - material: "PAPER" - name: "ะ˜ะฝั„ะพั€ะผะฐั†ะธั" - lore: - - "ะฆะตะฝะฐ: {price} ะฟะพะธะฝั‚ะพะฒ" - - "ะฆะฒะตั‚ะฐ: {colors}" - - "" - - "ะ’ะฐัˆ ะฑะฐะปะฐะฝั: {balance}" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะ ะะ—ะ ะ•ะจะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธะต ั€ะฐะทั€ะตัˆะตะฝะธั ะดะปั ะณั€ัƒะฟะฟ -permissions: - # ะ“ั€ัƒะฟะฟั‹, ะบะพั‚ะพั€ั‹ะต ะฟะพะปัƒั‡ะฐัŽั‚ ะฑะตัะฟะปะฐั‚ะฝั‹ะต ะณั€ะฐะดะธะตะฝั‚ั‹ - free-groups: - - "vip" - - "premium" - - "admin" - - # ะ“ั€ัƒะฟะฟั‹, ะบะพั‚ะพั€ั‹ะต ะผะพะณัƒั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะปัŽะฑั‹ะต ั†ะฒะตั‚ะฐ - unlimited-colors: - - "admin" - - "owner" \ No newline at end of file diff --git a/src/main/resources/gradient-messages.yml b/src/main/resources/gradient-messages.yml deleted file mode 100644 index 9d23baa..0000000 --- a/src/main/resources/gradient-messages.yml +++ /dev/null @@ -1,157 +0,0 @@ -#file: noinspection YAMLDuplicatedKeys,YAMLDuplicatedKeys -# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— -# โ•‘ LoChat Gradient Messages โ•‘ -# โ•‘ ะกะพะพะฑั‰ะตะฝะธั ะณั€ะฐะดะธะตะฝั‚ะฝะพะณะพ ะผะพะดัƒะปั โ•‘ -# โ•‘ ะ’ะตั€ัะธั: 1.5.5-1.20.1 โ•‘ -# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะกะะžะ’ะะซะ• ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -# ะŸั€ะตั„ะธะบั ะณั€ะฐะดะธะตะฝั‚ะฝะพะณะพ ะผะพะดัƒะปั -prefix: "⒚DB[⒚DBGE6CD9r΀AD7aℓD5dF65D3iA62D1eᶈCFnˁDCDtB5BCB]" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะšะžะœะะะ”ะ /color โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -color: - # ะฃัะฟะตัˆะฝั‹ะต ะดะตะนัั‚ะฒะธั - set: "ะ“ั€ะฐะดะธะตะฝั‚ ัƒัั‚ะฐะฝะพะฒะปะตะฝ!" - enabled: "ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ ะฒะบะปัŽั‡ะตะฝ" - disabled: "ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ ะพั‚ะบะปัŽั‡ะตะฝ" - reset: "ะ“ั€ะฐะดะธะตะฝั‚ ัะฑั€ะพัˆะตะฝ" - copied: "ะ“ั€ะฐะดะธะตะฝั‚ ัะบะพะฟะธั€ะพะฒะฐะฝ ั ะธะณั€ะพะบะฐ {player}" - - # ะžัˆะธะฑะบะธ - invalid-hex: "ะะตะฒะตั€ะฝั‹ะน HEX ั†ะฒะตั‚: {color}" - too-many-colors: "ะกะปะธัˆะบะพะผ ะผะฝะพะณะพ ั†ะฒะตั‚ะพะฒ! ะœะฐะบัะธะผัƒะผ: {max}" - too-few-colors: "ะกะปะธัˆะบะพะผ ะผะฐะปะพ ั†ะฒะตั‚ะพะฒ! ะœะธะฝะธะผัƒะผ: {min}" - no-permission: "ะะตั‚ ะฟั€ะฐะฒ ะฝะฐ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะณั€ะฐะดะธะตะฝั‚ะพะฒ" - cooldown: "ะŸะพะดะพะถะดะธั‚ะต {time} ัะตะบ ะฟะตั€ะตะด ะธะทะผะตะฝะตะฝะธะตะผ ั†ะฒะตั‚ะฐ" - not-enough-points: "ะะตะดะพัั‚ะฐั‚ะพั‡ะฝะพ ะฟะพะธะฝั‚ะพะฒ! ะัƒะถะฝะพ: {price}, ัƒ ะฒะฐั: {balance}" - player-not-found: "ะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ" - no-gradient: "ะฃ ะธะณั€ะพะบะฐ ะฝะตั‚ ะณั€ะฐะดะธะตะฝั‚ะฐ ะดะปั ะบะพะฟะธั€ะพะฒะฐะฝะธั" - - # ะŸะพะผะพั‰ัŒ - help: - - "โ•โ•โ•โ•โ•โ•โ• ะšะพะผะฐะฝะดั‹ ะณั€ะฐะดะธะตะฝั‚ะฐ โ•โ•โ•โ•โ•โ•โ•" - - "/color [hex2] ... - ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/color on/off - ะฒะบะปัŽั‡ะธั‚ัŒ/ะฒั‹ะบะปัŽั‡ะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/color reset - ัะฑั€ะพัะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/color copy <ะธะณั€ะพะบ> - ัะบะพะฟะธั€ะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/color preset <ะฝะฐะทะฒะฐะฝะธะต> - ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟั€ะตะดัƒัั‚ะฐะฝะพะฒะบัƒ" - - "" - - "ะŸั€ะตะดัƒัั‚ะฐะฝะพะฒะบะธ: fire, ocean, forest, sunset, rainbow, ice, gold, purple, pink, green" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะšะžะœะะะ”ะ /prefix โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -prefix: - # ะฃัะฟะตัˆะฝั‹ะต ะดะตะนัั‚ะฒะธั - set: "ะŸั€ะตั„ะธะบั ัƒัั‚ะฐะฝะพะฒะปะตะฝ!" - enabled: "ะŸั€ะตั„ะธะบั ะฒะบะปัŽั‡ะตะฝ" - disabled: "ะŸั€ะตั„ะธะบั ะพั‚ะบะปัŽั‡ะตะฝ" - reset: "ะŸั€ะตั„ะธะบั ัะฑั€ะพัˆะตะฝ" - - # ะžัˆะธะฑะบะธ - too-long: "ะŸั€ะตั„ะธะบั ัะปะธัˆะบะพะผ ะดะปะธะฝะฝั‹ะน! ะœะฐะบัะธะผัƒะผ: {max} ัะธะผะฒะพะปะพะฒ" - no-permission: "ะะตั‚ ะฟั€ะฐะฒ ะฝะฐ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะฟั€ะตั„ะธะบัะพะฒ" - cooldown: "ะŸะพะดะพะถะดะธั‚ะต {time} ัะตะบ ะฟะตั€ะตะด ะธะทะผะตะฝะตะฝะธะตะผ ะฟั€ะตั„ะธะบัะฐ" - not-enough-points: "ะะตะดะพัั‚ะฐั‚ะพั‡ะฝะพ ะฟะพะธะฝั‚ะพะฒ! ะัƒะถะฝะพ: {price}, ัƒ ะฒะฐั: {balance}" - - # ะŸะพะผะพั‰ัŒ - help: - - "โ•โ•โ•โ•โ•โ•โ• ะšะพะผะฐะฝะดั‹ ะฟั€ะตั„ะธะบัะฐ โ•โ•โ•โ•โ•โ•โ•" - - "/prefix <ั‚ะตะบัั‚> - ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ ะฟั€ะตั„ะธะบั" - - "/prefix on/off - ะฒะบะปัŽั‡ะธั‚ัŒ/ะฒั‹ะบะปัŽั‡ะธั‚ัŒ ะฟั€ะตั„ะธะบั" - - "/prefix reset - ัะฑั€ะพัะธั‚ัŒ ะฟั€ะตั„ะธะบั" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะะ”ะœะ˜ะะกะšะ˜ะ• ะšะžะœะะะ”ะซ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -admin: - # ะฃัะฟะตัˆะฝั‹ะต ะดะตะนัั‚ะฒะธั - reloaded: "ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะณั€ะฐะดะธะตะฝั‚ะพะฒ ะฟะตั€ะตะทะฐะณั€ัƒะถะตะฝะฐ" - color-set: "ะ“ั€ะฐะดะธะตะฝั‚ ัƒัั‚ะฐะฝะพะฒะปะตะฝ ะธะณั€ะพะบัƒ {player}" - prefix-set: "ะŸั€ะตั„ะธะบั ัƒัั‚ะฐะฝะพะฒะปะตะฝ ะธะณั€ะพะบัƒ {player}" - color-enabled: "ะ“ั€ะฐะดะธะตะฝั‚ ะฒะบะปัŽั‡ะตะฝ ะดะปั {player}" - color-disabled: "ะ“ั€ะฐะดะธะตะฝั‚ ะพั‚ะบะปัŽั‡ะตะฝ ะดะปั {player}" - prefix-enabled: "ะŸั€ะตั„ะธะบั ะฒะบะปัŽั‡ะตะฝ ะดะปั {player}" - prefix-disabled: "ะŸั€ะตั„ะธะบั ะพั‚ะบะปัŽั‡ะตะฝ ะดะปั {player}" - color-reset: "ะ“ั€ะฐะดะธะตะฝั‚ ัะฑั€ะพัˆะตะฝ ะดะปั {player}" - prefix-reset: "ะŸั€ะตั„ะธะบั ัะฑั€ะพัˆะตะฝ ะดะปั {player}" - updated-all: "ะžะฑะฝะพะฒะปะตะฝั‹ ะฒัะต ะธะณั€ะพะบะธ ({count})" - - # ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพะฑ ะธะณั€ะพะบะต - info: - - "โ•โ•โ•โ•โ•โ•โ• ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ {player} โ•โ•โ•โ•โ•โ•โ•" - - "ะ“ั€ะฐะดะธะตะฝั‚: {gradient_status}" - - "ะฆะฒะตั‚ะฐ: {colors}" - - "ะŸั€ะตั„ะธะบั: {prefix_status}" - - "ะขะตะบัั‚ ะฟั€ะตั„ะธะบัะฐ: {prefix_text}" - - "ะžั‚ะพะฑั€ะฐะถะฐะตะผะพะต ะธะผั: {display_name}" - - # ะžัˆะธะฑะบะธ - player-not-found: "ะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ" - invalid-hex: "ะะตะฒะตั€ะฝั‹ะน HEX ั†ะฒะตั‚: {color}" - - # ะŸะพะผะพั‰ัŒ - help: - - "โ•โ•โ•โ•โ•โ•โ• ะะดะผะธะฝัะบะธะต ะบะพะผะฐะฝะดั‹ โ•โ•โ•โ•โ•โ•โ•" - - "/aprefix reload - ะฟะตั€ะตะทะฐะณั€ัƒะทะธั‚ัŒ ะบะพะฝั„ะธะณ" - - "/aprefix info <ะธะณั€ะพะบ> - ะธะฝั„ะพั€ะผะฐั†ะธั ะพะฑ ะธะณั€ะพะบะต" - - "/aprefix setcolor <ะธะณั€ะพะบ> <ั†ะฒะตั‚ะฐ> - ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/aprefix setprefix <ะธะณั€ะพะบ> <ั‚ะตะบัั‚> - ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ ะฟั€ะตั„ะธะบั" - - "/aprefix coloron/coloroff <ะธะณั€ะพะบ> - ะฒะบะป/ะฒั‹ะบะป ะณั€ะฐะดะธะตะฝั‚" - - "/aprefix prefixon/prefixoff <ะธะณั€ะพะบ> - ะฒะบะป/ะฒั‹ะบะป ะฟั€ะตั„ะธะบั" - - "/aprefix resetcolor <ะธะณั€ะพะบ> - ัะฑั€ะพัะธั‚ัŒ ะณั€ะฐะดะธะตะฝั‚" - - "/aprefix resetprefix <ะธะณั€ะพะบ> - ัะฑั€ะพัะธั‚ัŒ ะฟั€ะตั„ะธะบั" - - "/aprefix updateall - ะพะฑะฝะพะฒะธั‚ัŒ ะฒัะตั… ะธะณั€ะพะบะพะฒ" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ GUI ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -gui: - # ะ—ะฐะณะพะปะพะฒะบะธ - confirm-title: "ะŸะพะดั‚ะฒะตั€ะถะดะตะฝะธะต ะฟะพะบัƒะฟะบะธ" - - # ะšะฝะพะฟะบะธ - confirm-button: "โœ“ ะŸะพะดั‚ะฒะตั€ะดะธั‚ัŒ ะฟะพะบัƒะฟะบัƒ" - cancel-button: "โœ— ะžั‚ะผะตะฝะธั‚ัŒ" - - # ะžะฟะธัะฐะฝะธั - confirm-lore: - - "ะฆะตะฝะฐ: {price} ะฟะพะธะฝั‚ะพะฒ" - - "ะฆะฒะตั‚ะฐ: {colors}" - - "" - - "ะ’ะฐัˆ ะฑะฐะปะฐะฝั: {balance}" - - "" - - "ะะฐะถะผะธั‚ะต ะดะปั ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธั" - - cancel-lore: - - "ะะฐะถะผะธั‚ะต ะดะปั ะพั‚ะผะตะฝั‹" - - # ะ ะตะทัƒะปัŒั‚ะฐั‚ั‹ - purchase-success: "ะ“ั€ะฐะดะธะตะฝั‚ ัƒัะฟะตัˆะฝะพ ะบัƒะฟะปะตะฝ!" - purchase-cancelled: "ะŸะพะบัƒะฟะบะฐ ะพั‚ะผะตะฝะตะฝะฐ" - -# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -# โ”‚ ะžะ‘ะฉะ˜ะ• ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ -# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - -general: - # ะกั‚ะฐั‚ัƒัั‹ - enabled: "ะ’ะบะปัŽั‡ะตะฝะพ" - disabled: "ะžั‚ะบะปัŽั‡ะตะฝะพ" - none: "ะะตั‚" - - # ะ•ะดะธะฝะธั†ั‹ ะฒั€ะตะผะตะฝะธ - seconds: "ัะตะบ" - minutes: "ะผะธะฝ" - hours: "ั‡" - days: "ะด" \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 0624c38..29d8789 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -35,16 +35,16 @@ pm: # ะคะพั€ะผะฐั‚ั‹ ะปะธั‡ะฝั‹ั… ัะพะพะฑั‰ะตะฝะธะน # {sender} - ะฝะธะบ ะพั‚ะฟั€ะฐะฒะธั‚ะตะปั, {receiver} - ะฝะธะบ ะฟะพะปัƒั‡ะฐั‚ะตะปั # {sender_display} - ะพั‚ะฟั€ะฐะฒะธั‚ะตะปัŒ ั ะณั€ะฐะดะธะตะฝั‚ะพะผ, {receiver_display} - ะฟะพะปัƒั‡ะฐั‚ะตะปัŒ ั ะณั€ะฐะดะธะตะฝั‚ะพะผ - # {message} - ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั - format-sent: "[PM] ะขั‹ โ†’ {receiver_display}: {message}" - format-received: "[PM] {sender_display} โ†’ ะขั‹: {message}" + # {message} - ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธะต + format-sent: "&7[โ†’] WCEEBะ’ั‹ &7โ†’ {receiver_display}&7: {message}" + format-received: "&7[โ†] {sender_display} &7โ†’ WCEEBะ’ั‹&7: {message}" # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะณั€ะฐะดะธะตะฝั‚ะฝั‹ะต ะฝะธะบะธ ะฒ PM use-gradient-names: true # ะกั‚ะฐั€ั‹ะต ั„ะพั€ะผะฐั‚ั‹ (ะดะปั ัะพะฒะผะตัั‚ะธะผะพัั‚ะธ) - sent: "[PM] ะขั‹ โ†’ {player}: {message}" - received: "[PM] {player} โ†’ ะขั‹: {message}" + sent: "&7[โ†’] WCEEBะ’ั‹ &7โ†’ &f{player}&7: {message}" + received: "&7[โ†] &f{player} &7โ†’ WCEEBะ’ั‹&7: {message}" # ะžัˆะธะฑะบะธ PM no-reply: "&#FF6B6Bะ&#FF5F5Fะต&#FF5353ะบ&#FF4747ะพ&#FF3B3Bะผ&#FF2F2Fัƒ &#FF2323ะพ&#FF1717ั‚&#FF0B0Bะฒ&#FF0000ะต&#FF0000ั‚&#FF0000ะธ&#FF0000ั‚&#FF0000ัŒ" @@ -62,6 +62,9 @@ ignore: already-ignored: "&#FFA726ะ˜&#FFA322ะณ&#FF9F1Eั€&#FF9B1Aะพ&#FF9716ะบ &#FF9312ัƒ&#FF8F0Eะถ&#FF8B0Aะต &#FF8706ะฒ &#FF8302ะธ&#FF8000ะณ&#FF8000ะฝ&#FF8000ะพ&#FF8000ั€&#FF8000ะต" not-ignored: "&#FFA726ะ˜&#FFA322ะณ&#FF9F1Eั€&#FF9B1Aะพ&#FF9716ะบ &#FF9312ะฝ&#FF8F0Eะต &#FF8B0Aะฒ &#FF8706ะธ&#FF8302ะณ&#FF8000ะฝ&#FF8000ะพ&#FF8000ั€&#FF8000ะต" self: "&#FF6B6Bะ&#FF5F5Fะต&#FF5353ะป&#FF4747ัŒ&#FF3B3Bะท&#FF2F2Fั &#FF2323ะธ&#FF1717ะณ&#FF0B0Bะฝ&#FF0000ะพ&#FF0000ั€&#FF0000ะธ&#FF0000ั€&#FF0000ะพ&#FF0000ะฒ&#FF0000ะฐ&#FF0000ั‚&#FF0000ัŒ &#FF0000ั&#FF0000ะต&#FF0000ะฑ&#FF0000ั" + list-empty: "WCEEBะ’UCBE9ะฐSC8E7ัˆ QC5E5ัFC2E3ะฟDBFE1ะธBBCDFั̟BDDะพṶDBะบ ᶫD9ะธ᳠D7ะณᰖD5ะฝF8DD3ะพD8AD1ั€B87CFะฐ ᭈCDะฟ᩾CBัƒᦴC9ัɽDC7ั‚" + list-header: "&#FFD700โ•&#FFC900โ•&#FFBB00โ• &#FFAD00ะ˜&#FF9F00ะณ&#FF9100ะฝ&#FF8300ะพ&#FF7500ั€&#FF6700ะธ&#FF5900ั€&#FF4B00ัƒ&#FF3D00ะต&#FF2F00ะผ&#FF2100ั‹&#FF1300ะต &#FF0500ะธ&#FF0000ะณ&#FF0000ั€&#FF0000ะพ&#FF0000ะบ&#FF0000ะธ &#FFD700โ•&#FFC900โ•&#FFBB00โ•" + list-footer: "WCEEBะ’UCBE9ัSC8E7ะตQC5E5ะณFC2E3ะพDBFE1: BBCDFi̟BDD{ṶDBcᶫD9o᳠D7uᰖD5nF8DD3tD8AD1}B87CF ᭈCDะธ᩾CBะณᦴC9ั€ɽDC7ะพB7AC5ะบʹCC3ะพ᩻C1ะฒ" # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” # โ”‚ ะžะ‘ะชะฏะ’ะ›ะ•ะะ˜ะฏ โ”‚ @@ -77,8 +80,8 @@ announce: spy: enabled: "BCB77ะจ>C973ะฟAC76Fะธ3C56Bะพ1C367ะฝ (C163ั€&BF5FะตFBD5BะถBB57ะธEB953ะผ B74Fะฒ�DB54BะบB347ะปB347ัŽB347ั‡B347ะตB347ะฝ" disabled: "&#FF6B6Bะจ&#FF5F5Fะฟ&#FF5353ะธ&#FF4747ะพ&#FF3B3Bะฝ &#FF2F2Fั€&#FF2323ะต&#FF1717ะถ&#FF0B0Bะธ&#FF0000ะผ &#FF0000ะฒ&#FF0000ั‹&#FF0000ะบ&#FF0000ะป&#FF0000ัŽ&#FF0000ั‡&#FF0000ะต&#FF0000ะฝ" - format: "[SPY] {sender} โ†’ {receiver}: {message}" - chat-format: "[SPY] {type} {sender}: {message}" + format: "&7[SPY] &#FFD700{&#FFC900s&#FFBB00e&#FFAD00n&#FF9F00d&#FF9100e&#FF8300r&#FF7500} &7โ†’ WCEEB{UCBE9rSC8E7eQC5E5cFC2E3eDBFE1iBBCDFv̟BDDeṶDBrᶫD9}&7: &f{message}" + chat-format: "&7[SPY] &#FFA726{&#FFA322t&#FF9F1Ey&#FF9B1Ap&#FF9716e&#FF9312} �FF88{�F582s�EB7Ce�E176n�D770d�CD6Ae�C364r�B95E}&7: &f{message}" # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” # โ”‚ ะคะ˜ะ›ะฌะขะ  ะœะะขะ โ”‚ @@ -120,6 +123,25 @@ errors: player-not-found: "&#FF6B6Bะ˜&#FF5F5Fะณ&#FF5353ั€&#FF4747ะพ&#FF3B3Bะบ &#FF2F2Fะฝ&#FF2323ะต &#FF1717ะฝ&#FF0B0Bะฐ&#FF0000ะน&#FF0000ะด&#FF0000ะต&#FF0000ะฝ" invalid-usage: "&#FFA726ะ˜&#FFA322ั&#FF9F1Eะฟ&#FF9B1Aะพ&#FF9716ะป&#FF9312ัŒ&#FF8F0Eะท&#FF8B0Aะพ&#FF8706ะฒ&#FF8302ะฐ&#FF8000ะฝ&#FF8000ะธ&#FF8000ะต&#FF8000: &#FF8000{&#FF8000u&#FF8000s&#FF8000a&#FF8000g&#FF8000e&#FF8000}" +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะžะ‘ะฉะ˜ะ• ะกะžะžะ‘ะฉะ•ะะ˜ะฏ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +general: + no-permission: "{prefix} &#FF6B6Bะฃ ะฒะฐั ะฝะตั‚ ะฟั€ะฐะฒ!" + players-only: "{prefix} &#FF6B6BะขะพะปัŒะบะพ ะดะปั ะธะณั€ะพะบะพะฒ!" + config-reloaded: "{prefix} BCB77ะšะพะฝั„ะธะณ ะฟะตั€ะตะทะฐะณั€ัƒะถะตะฝ!" + invalid-player: "{prefix} &#FF6B6Bะ˜ะณั€ะพะบ %player% ะฝะต ะฝะฐะนะดะตะฝ!" + cooldown-active: "{prefix} &#FF6B6BะŸะพะดะพะถะดะธั‚ะต %time%ั ะฟะตั€ะตะด ะฟะพะฒั‚ะพั€ะฝั‹ะผ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ!" + command-disabled: "{prefix} &#FF6B6Bะญั‚ะฐ ะบะพะผะฐะฝะดะฐ ะพั‚ะบะปัŽั‡ะตะฝะฐ!" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ HUB COMMAND โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +hub: + connecting: "{prefix} BCB77ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะบ ัะตั€ะฒะตั€ัƒ %server%..." + # โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” # โ”‚ ะกะ˜ะกะขะ•ะœะ ะœะฃะขะžะ’ โ”‚ # โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ @@ -130,4 +152,22 @@ mute: already-muted: "&#FFA726ะ˜&#FFA322ะณ&#FF9F1Eั€&#FF9B1Aะพ&#FF9716ะบ &#FF9312ัƒ&#FF8F0Eะถ&#FF8B0Aะต &#FF8706ะท&#FF8302ะฐ&#FF8000ะผ&#FF8000ัƒ&#FF8000ั‡&#FF8000ะต&#FF8000ะฝ" not-muted: "&#FFA726ะ˜&#FFA322ะณ&#FF9F1Eั€&#FF9B1Aะพ&#FF9716ะบ &#FF9312ะฝ&#FF8F0Eะต &#FF8B0Aะท&#FF8706ะฐ&#FF8302ะผ&#FF8000ัƒ&#FF8000ั‡&#FF8000ะต&#FF8000ะฝ" you-muted: "&#FF6B6Bะ’&#FF5F5Fั‹ &#FF5353ะท&#FF4747ะฐ&#FF3B3Bะผ&#FF2F2Fัƒ&#FF2323ั‡&#FF1717ะต&#FF0B0Bะฝ&#FF0000ั‹&#FF0000! &#FF0000ะž&#FF0000ั&#FF0000ั‚&#FF0000ะฐ&#FF0000ะป&#FF0000ะพ&#FF0000ั&#FF0000ัŒ&#FF0000: &#FF0000{&#FF0000t&#FF0000i&#FF0000m&#FF0000e&#FF0000}" - permanent: "&#FF6B6Bะ’&#FF5F5Fั‹ &#FF5353ะท&#FF4747ะฐ&#FF3B3Bะผ&#FF2F2Fัƒ&#FF2323ั‡&#FF1717ะต&#FF0B0Bะฝ&#FF0000ั‹ &#FF0000ะฝ&#FF0000ะฐ&#FF0000ะฒ&#FF0000ั&#FF0000ะต&#FF0000ะณ&#FF0000ะด&#FF0000ะฐ&#FF0000!" \ No newline at end of file + permanent: "&#FF6B6Bะ’&#FF5F5Fั‹ &#FF5353ะท&#FF4747ะฐ&#FF3B3Bะผ&#FF2F2Fัƒ&#FF2323ั‡&#FF1717ะต&#FF0B0Bะฝ&#FF0000ั‹ &#FF0000ะฝ&#FF0000ะฐ&#FF0000ะฒ&#FF0000ั&#FF0000ะต&#FF0000ะณ&#FF0000ะด&#FF0000ะฐ&#FF0000!" + +# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +# โ”‚ ะ“ะ ะะ”ะ˜ะ•ะะขะะซะ• ะะ˜ะšะ˜ โ”‚ +# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + +gradient: + color-set: "BCB77ะ“ั€ะฐะดะธะตะฝั‚ ัƒัั‚ะฐะฝะพะฒะปะตะฝ!" + color-enabled: "BCB77ะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ ะฒะบะปัŽั‡ะตะฝ" + color-disabled: "&#FF6B6Bะ“ั€ะฐะดะธะตะฝั‚ะฝั‹ะน ะฝะธะบ ะพั‚ะบะปัŽั‡ะตะฝ" + color-reset: "&#FFA726ะ“ั€ะฐะดะธะตะฝั‚ ัะฑั€ะพัˆะตะฝ" + prefix-set: "BCB77ะŸั€ะตั„ะธะบั ัƒัั‚ะฐะฝะพะฒะปะตะฝ!" + prefix-reset: "&#FFA726ะŸั€ะตั„ะธะบั ัะฑั€ะพัˆะตะฝ" + invalid-hex: "&#FF6B6Bะะตะฒะตั€ะฝั‹ะน HEX ั†ะฒะตั‚: {color}" + too-many-colors: "&#FF6B6Bะกะปะธัˆะบะพะผ ะผะฝะพะณะพ ั†ะฒะตั‚ะพะฒ! ะœะฐะบัะธะผัƒะผ: {max}" + too-few-colors: "&#FF6B6Bะกะปะธัˆะบะพะผ ะผะฐะปะพ ั†ะฒะตั‚ะพะฒ! ะœะธะฝะธะผัƒะผ: {min}" + cooldown: "&#FFA726ะŸะพะดะพะถะดะธั‚ะต {time} ัะตะบ" + not-enough-points: "&#FF6B6Bะะตะดะพัั‚ะฐั‚ะพั‡ะฝะพ ะฟะพะธะฝั‚ะพะฒ! ะัƒะถะฝะพ: {price}" + player-not-found: "&#FF6B6Bะ˜ะณั€ะพะบ ะฝะต ะฝะฐะนะดะตะฝ" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d76321b..8fccfeb 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -56,6 +56,12 @@ commands: permission: chat.pm.ignore aliases: [ ั€ะฐะทะธะณะฝะพั€, ะณั‚ัˆะฟั‚ั‰ะบัƒ ] + ignorelist: + description: List ignored players + usage: /ignorelist + permission: chat.pm.ignore + aliases: [ ะธะณะฝะพั€ะปะธัั‚, ัˆะฟั‚ั‰ะบัƒะดัˆั‹ะต ] + announce: description: Send announcement usage: /announce @@ -86,6 +92,11 @@ commands: permission: lochat.clearchat.config aliases: [ ccc, ะฝะฐัั‚ั€ะพะนะบะฐะพั‡ะธัั‚ะบะธ ] + hub: + description: Connect to hub server + usage: /hub + aliases: [ lobby, ั…ะฐะฑ, ั€ะณะธ ] + lochat: description: LoChat admin command usage: /lochat [reload] @@ -140,6 +151,134 @@ commands: permission: lochat.muteblame aliases: [ muteblame, ะผัƒั‚ะฑะปะตะนะผ, ัŒะณะตัƒะธะดั„ัŒัƒ ] + # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + # ะšะะกะขะžะœะะซะ• ะšะžะœะะะ”ะซ + # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + + help: + description: Show server help + usage: /help + aliases: [ ะฟะพะผะพั‰ัŒ, ั…ะตะปะฟ ] + + rules: + description: Show server rules + usage: /rules + aliases: [ ะฟั€ะฐะฒะธะปะฐ, rule ] + + discord: + description: Show Discord invite + usage: /discord + aliases: [ ะดะธัะบะพั€ะด, ds ] + + website: + description: Show website link + usage: /website + aliases: [ ัะฐะนั‚, site ] + + coords: + description: Show your coordinates + usage: /coords + aliases: [ ะบะพะพั€ะดะธะฝะฐั‚ั‹, pos, position ] + + time: + description: Show server time + usage: /time + aliases: [ ะฒั€ะตะผั, ะดะฐั‚ะฐ ] + + playerinfo: + description: Show player information + usage: /playerinfo [player] + permission: lochat.playerinfo + aliases: [ pinfo, ะธะฝั„ะพ, info ] + + sounds: + description: Toggle sound effects + usage: /sounds [on|off] + aliases: [ ะทะฒัƒะบะธ, sound ] + + automessage: + description: Toggle auto messages + usage: /automessage [on|off] + aliases: [ ะฐะฒั‚ะพัะพะพะฑั‰ะตะฝะธั, am ] + + stats: + description: Show chat statistics + usage: /stats [player] + permission: lochat.stats + aliases: [ ัั‚ะฐั‚ะธัั‚ะธะบะฐ, ัั‚ะฐั‚ั‹ ] + + top: + description: Show top chatters + usage: /top [messages|playtime] + aliases: [ ั‚ะพะฟ, ั€ะตะนั‚ะธะฝะณ ] + + me: + description: Send action message + usage: /me + permission: chat.me + aliases: [ action, ะดะตะนัั‚ะฒะธะต ] + + broadcast: + description: Broadcast message to all players + usage: /broadcast + permission: lochat.broadcast + aliases: [ bc, ะพะฑัŠัะฒะธั‚ัŒ ] + + maintenance: + description: Toggle maintenance mode + usage: /maintenance [on|off] [reason] + permission: lochat.maintenance + aliases: [ ั‚ะตั…-ั€ะฐะฑะพั‚ั‹, ั‚ะตั…ั€ะฐะฑะพั‚ั‹ ] + + motd: + description: Show message of the day + usage: /motd + aliases: [ ัะพะพะฑั‰ะตะฝะธะต-ะดะฝั, ะผะพั‚ะด ] + + ping: + description: Show your ping + usage: /ping [player] + aliases: [ ะฟะธะฝะณ ] + + list: + description: Show online players + usage: /list + aliases: [ ะพะฝะปะฐะนะฝ, online, who ] + + afk: + description: Toggle AFK status + usage: /afk [reason] + aliases: [ ะฐั„ะบ, away ] + + back: + description: Return from AFK + usage: /back + aliases: [ ะฝะฐะทะฐะด, return ] + + tps: + description: Show server TPS + usage: /tps + permission: lochat.tps + aliases: [ ั‚ะฟั, performance ] + + memory: + description: Show server memory usage + usage: /memory + permission: lochat.memory + aliases: [ mem, ะฟะฐะผัั‚ัŒ, ram ] + + version: + description: Show plugin version + usage: /version + permission: lochat.version + aliases: [ ver, ะฒะตั€ัะธั ] + + reload: + description: Reload plugin configuration + usage: /reload + permission: lochat.reload + aliases: [ rl, ะฟะตั€ะตะทะฐะณั€ัƒะทะธั‚ัŒ ] + permissions: chat.global.use: default: true @@ -256,3 +395,50 @@ permissions: lochat.bypass.ipfilter: description: Bypass IP filter default: op + lochat.bypass.caps: + description: Bypass caps filter + default: op + lochat.bypass.hiddenurls: + description: Bypass hidden URLs filter + default: op + lochat.bypass.domains: + description: Bypass domains filter + default: op + + # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + # ะŸะ ะะ’ะ ะšะะกะขะžะœะะซะฅ ะšะžะœะะะ” + # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + + lochat.playerinfo: + description: Can view player information + default: op + lochat.stats: + description: Can view chat statistics + default: op + chat.me: + description: Can use /me command + default: true + lochat.broadcast: + description: Can broadcast messages + default: op + lochat.maintenance: + description: Can toggle maintenance mode + default: op + lochat.tps: + description: Can view server TPS + default: op + lochat.memory: + description: Can view server memory + default: op + lochat.version: + description: Can view plugin version + default: true + lochat.reload: + description: Can reload plugin + default: op + lochat.afk: + description: Can use AFK commands + default: true + lochat.ping.others: + description: Can view other players' ping + default: op diff --git a/temp_methods.txt b/temp_methods.txt deleted file mode 100644 index f35ee6f..0000000 --- a/temp_methods.txt +++ /dev/null @@ -1,20 +0,0 @@ - /** - * ะกะบั€ั‹ะฒะฐะตั‚ TextDisplay ะธะณั€ะพะบะฐ (ะฟั€ะธ ะฟั€ะธัะตะดะฐะฝะธะธ) - */ - public void hidePlayerDisplay(UUID playerId) { - TextDisplay display = playerDisplays.get(playerId); - if (display != null && display.isValid()) { - display.setViewRange(0.0f); - } - } - - /** - * ะŸะพะบะฐะทั‹ะฒะฐะตั‚ TextDisplay ะธะณั€ะพะบะฐ (ะบะพะณะดะฐ ะฟะตั€ะตัั‚ะฐะตั‚ ะฟั€ะธัะตะดะฐั‚ัŒ) - */ - public void showPlayerDisplay(UUID playerId) { - TextDisplay display = playerDisplays.get(playerId); - if (display != null && display.isValid()) { - display.setViewRange(64.0f); - } - } -}