Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
def1405
fix messages config, change val to var
Navio1430 Aug 7, 2026
254e31a
remove VelocityEventDispatcher which faked PlayerChooseInitialServerE…
Navio1430 Aug 31, 2026
d30ce2f
chore: update .gitignore
Navio1430 Aug 31, 2026
1229a31
chore: update CHANGELOG
Navio1430 Aug 31, 2026
e202e26
bump version to 0.2.1
Navio1430 Aug 31, 2026
6eedccd
chore: update CHANGELOG
Navio1430 Aug 31, 2026
806509f
add not found usernames cache; add better exception handling for prof…
Navio1430 Aug 31, 2026
5964d71
chore: update changelog
Navio1430 Aug 31, 2026
638d691
bump version to 0.3.0-SNAPSHOT
Navio1430 Aug 31, 2026
46a970c
chore: use libs.versions.toml for all deps
Navio1430 Aug 31, 2026
bdaba07
update gradle to 9.7.1, update to java 25, update to velocity 4.1.1
Navio1430 Sep 1, 2026
6eb3bc7
chore: update readme and changelog
Navio1430 Sep 1, 2026
8655339
docs: use jvm 25 as default
Navio1430 Sep 3, 2026
dcc8b0b
bump deps
Navio1430 Sep 3, 2026
85a60e6
apply format
Navio1430 Sep 5, 2026
4024c31
chore: update changelog
Navio1430 Sep 5, 2026
f398a58
feat: add command aliases
WejsoneKK Sep 6, 2026
f6420d5
feat: Command Alias
WejsoneKK Sep 6, 2026
b9b3747
apply format; rename config classes
Navio1430 Sep 6, 2026
29aecab
remove command permissions and subcommands config
Navio1430 Sep 6, 2026
3218e08
update default commands configs and their comments; updated CommandCo…
Navio1430 Sep 6, 2026
eca888e
Merge pull request #49 from WejsoneKK/feat/command-alias
Navio1430 Sep 6, 2026
550b9dd
chore: update changelog
Navio1430 Sep 6, 2026
55b690b
chore: fix changelog
Navio1430 Sep 6, 2026
d8fb224
chore: update changelog, add new contributors
Navio1430 Sep 6, 2026
cdf8f00
apply format
Navio1430 Sep 6, 2026
d2f9343
chore: add 'spotlessCheck' task in formatAll task
Navio1430 Sep 6, 2026
93001ec
chore: update readme
Navio1430 Sep 6, 2026
0f72ef6
move GeneralConfig/commandsConfig into separate commands.yml config
Navio1430 Sep 6, 2026
7678247
reject /changepassword for premium accounts
Navio1430 Sep 6, 2026
141f90f
chore: update changelog
Navio1430 Sep 6, 2026
cc39700
fix change password command 'task already queued' exception
Navio1430 Sep 6, 2026
31598b0
fix encryption queue: release player slot before completing future to…
Navio1430 Sep 6, 2026
7cec4e1
update docs
Navio1430 Sep 6, 2026
013c6cf
Fixed accountMigrationSuccess multification not being sent to the pla…
ThomasWega Sep 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ build/
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
.idea/AndroidProjectSystem.xml
*.iws
*.iml
*.ipr
Expand Down
3 changes: 2 additions & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

47 changes: 47 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,51 @@

## 0.3.0

### Changes
```diff
+ Update to Java 25
+ Update to Velocity 4.1.2

+ Added commands configuration: [name, aliases, enabled] per command

+ Mojang profile lookup now also caches non-premium (not found) usernames, so repeated login
attempts against nicknames that have no Mojang account no longer hit the profile API every time
+ Only username resolution during login/register reads this not-found cache (avoids rate limits /
latency on login spam and brute-force attempts)
+ Authoritative lookups (e.g. /premium, admin commands, username migration) keep using the live
API and ignore the not-found cache, so they always reflect the current Mojang state
+ After successful login/register, the player is now sent directly to the initial
server via VelocityServerConnectService instead of firing a faked PlayerChooseInitialServerEvent
+ Priority of PlayerChooseInitialServerEvent and ServerPreConnectEvent listeners set to always
have the final say (MIN)
- No more fake PlayerChooseInitialServerEvent dispatch
```

### Tradeoffs
- A not-found cache entry is stored for the configured `profileCacheTTL`.
If a player becomes premium (buys the game / renames to that nickname) within that window,
username resolution may briefly still treat the name as non-premium until the cache expires.

### Fixes
- fix unexpectedErrorOccurred message: changed val to var (this was causing warning messages and no changes after /reload)
- /changepassword now notifies premium accounts that they can't change their password

### Config
**Messages** config:
```diff
+ profileApiFailureKickMessage
+ accountNotNonPremiumError
```

**General** config:
```diff
+ commandsConfig
```

### New contributors
WejsoneKK - implemented command aliases - Thanks!


## 0.2.0

### Changes
Expand Down
20 changes: 7 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ We are working on additional configuration options and other improvements to pre
<p><b>NavAuth</b> is a next-generation Minecraft login plugin built for <b>speed</b>, <b>security</b>, and seamless player authentication. Designed with modern servers in mind, it combines <b>performance</b>, <b>reliability</b>, and <b>integration flexibility</b>.</p>

[![Velocity](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/supported/velocity_vector.svg)](https://modrinth.com/plugin/navauth)
[![Modrinth](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/available/modrinth_vector.svg)](https://modrinth.com/plugin/navauth)
[![Github](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/available/github_vector.svg)](https://github.com/Navio1430/NavAuth)

[//]: # ( [![Modrinth]&#40;https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/available/modrinth_vector.svg&#41;]&#40;https://modrinth.com/plugin/navauth&#41;)

[![Gradle](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/built-with/gradle_vector.svg)](https://gradle.org/)
[![Kotlin](assets/built_with_kotlin.svg)](https://kotlinlang.org/docs/home.html)
![Java](assets/built_with_java.svg)

[![Documentation](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/documentation/generic_vector.svg)](https://navio1430.github.io/NavAuth/docs)
[![Kotlin](assets/read_javadoc.svg)](https://navio1430.github.io/NavAuth/javadoc)
Expand Down Expand Up @@ -60,6 +60,7 @@ You can also use other plugins (like Anti-VPN's) for that.
Thanks to **NavAuth contributors**:
- urhatedjack - logo design
- [KotreQ](https://github.com/KotreQ) - help with the QR code generation
- [WejsoneKK](https://github.com/WejsoneKK) - commands configuration feature

Thanks to **Discord support team**:
- [Blavez](https://github.com/Blavezz)
Expand All @@ -79,10 +80,11 @@ Thanks to people that kept **LibreLoginProd alive** until NavAuth release and ke

### 🧩 Requirements

* Java 21
* Java 25
* Velocity 4.1.2+
* Limbo server e.g., NanoLimbo, PicoLimbo
* Velocity forwarding set to MODERN
* All backend servers must be 1.13+
* All backend servers must be 1.13+ (because of modern forward)

### FAQ
Q: Why have I switched from maintaining LibreLoginProd?
Expand All @@ -99,12 +101,4 @@ NavAuth is licensed under the GNU AGPL v3. See the license file for more informa
[![GNU AGPL Logo](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.en.html)

## 💡 TODO List
More planned features are described in [Documentation](https://navio1430.github.io/NavAuth/docs/offer.html#%F0%9F%9A%80-planned-features)
- readme:
- add banner
- github/gh actions:
- modrinth CD
- issue template:
- bug report
- feature request
- commands and messages localization
Planned features are described in [Documentation](https://navio1430.github.io/NavAuth/docs/offer.html#%F0%9F%9A%80-planned-features)
14 changes: 9 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

plugins {
id("java")
kotlin("jvm") version "2.2.21"
kotlin("jvm") version "2.4.10"
alias(libs.plugins.spotless)
}

Expand All @@ -11,7 +11,7 @@ repositories {

allprojects {
group = "pl.spcode.navauth"
version = "0.2.0-SNAPSHOT"
version = "0.3.0-SNAPSHOT"
}

tasks.register("formatAll") {
Expand Down Expand Up @@ -43,12 +43,15 @@ subprojects {
}

kotlin {
jvmToolchain(21)
jvmToolchain(25)
}

java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
toolchain {
languageVersion = JavaLanguageVersion.of(25)
targetCompatibility = JavaVersion.VERSION_25
sourceCompatibility = JavaVersion.VERSION_25
}
}

tasks.test {
Expand All @@ -62,6 +65,7 @@ subprojects {

dependsOn("spotlessJavaApply")
dependsOn("spotlessKotlinApply")
dependsOn("spotlessCheck")
}

spotless {
Expand Down
18 changes: 8 additions & 10 deletions docs/docs/offer.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,18 @@ Cracking the whole database of a bad plugin takes less than a **FEW MINUTES**.
| Feature | NavAuth | LibreLoginProd |
|:----------------------------------------------------------------|----------------------------------------|---------------------------------------|
| Supported Platforms | Velocity | Paper, Velocity |
| Premium auto-login | ✅ | ✅ |
| Premium auto-login | ✅ | ✅ |
| Security | High | Moderate |
| Performance | Fast | Moderate |
| Large scale support | ✅ | ❌ |
| Commands aliases | ✅ | ❌ |
| Codebase quality | Good | Bad |
| Supported Databases | PostgreSQL, MySQL, MariaDB, SQLite, H2 | PostgreSQL, MySQL, MariaDB, SQLite |
| [2FA](/general/2fa.html) | ✅ | 🟧 (needs additional plugin) |
| [User sessions](/general/user-lookup.html#lookup-user-sessions) | ✅ | ❌ |
| Active Maintenance | ✅ | ❌ |
| Active Support | ✅ | ❌ |
| Multification | ✅ | ❌ |
| Plugins migration | ✅ (any db type) | 🟧 (only for specific configurations) |
| Database type migration | ✅ | 🟧 (partial) |
| Floodgate | ❌ (planned) | ✅ |
| [2FA](/general/2fa.html) | ✅ | 🟧 (needs additional plugin) |
| [User sessions](/general/user-lookup.html#lookup-user-sessions) | ✅ | ❌ |
| Multification | ✅ | ❌ |
| Plugins migration | ✅ (any db type) | 🟧 (only for specific configurations) |
| Database type migration | ✅ | 🟧 (partial) |
| Floodgate | ❌ (planned) | ✅ |

## 🚀 Planned Features
- ~~support Paper platform~~ based on experience with LibreLoginProd, I've decided not to continue with the idea of paper support
Expand Down
49 changes: 45 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,57 @@
[versions]
# libs
velocity-api = "3.4.0-SNAPSHOT"
velocity-api = "4.1.2-SNAPSHOT"
bstats = "3.2.1"
tribufu-rcon = "1.2.0"
multification = "1.2.4"
guice = "7.0.0"
gson = "2.14.0"
hikaricp = "7.1.0"
ormlite = "6.1"
okaeri-configs = "6.1.0-beta.4"
bcrypt = "0.10.2"
bouncycastle = "1.85"
adventure-minimessage = "5.2.0"
h2 = "2.4.240"
mysql = "26.7.0"
postgresql = "42.7.13"
sqlite = "3.53.4.0"
zxing = "3.5.4"
kotest = "6.2.4"
mockk = "1.14.11"
ajqueue-api = "2.9.1"
# plugins
shadow = "9.2.0"
shadow = "9.6.1"
blossom = "2.2.0"
spotless = "8.0.0"
litecommands = "3.10.6"
spotless = "8.10.1"
litecommands = "3.11.0"

[libraries]
velocitypowered-velocity-api = { module = "com.velocitypowered:velocity-api", version.ref = "velocity-api" }
litecommands-core = { module = "dev.rollczi:litecommands-core", version.ref = "litecommands" }
litecommands-velocity = { module = "dev.rollczi:litecommands-velocity", version.ref = "litecommands" }
bstats-velocity = { module = "org.bstats:bstats-velocity", version.ref = "bstats" }
tribufu-velocity-rcon = { module = "com.tribufu:Tribufu-VelocityRcon", version.ref = "tribufu-rcon" }
multification-core = { module = "com.eternalcode:multification-core", version.ref = "multification" }
multification-okaeri = { module = "com.eternalcode:multification-okaeri", version.ref = "multification" }
guice = { module = "com.google.inject:guice", version.ref = "guice" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
hikaricp = { module = "com.zaxxer:HikariCP", version.ref = "hikaricp" }
ormlite-jdbc = { module = "com.j256.ormlite:ormlite-jdbc", version.ref = "ormlite" }
okaeri-configs-yaml-snakeyaml = { module = "eu.okaeri:okaeri-configs-yaml-snakeyaml", version.ref = "okaeri-configs" }
bcrypt = { module = "at.favre.lib:bcrypt", version.ref = "bcrypt" }
bouncycastle-prov = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bouncycastle" }
bouncycastle-util = { module = "org.bouncycastle:bcutil-jdk18on", version.ref = "bouncycastle" }
adventure-text-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure-minimessage" }
h2 = { module = "com.h2database:h2", version.ref = "h2" }
mysql = { module = "com.mysql:mysql-connector-j", version.ref = "mysql" }
postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
zxing-core = { module = "com.google.zxing:core", version.ref = "zxing" }
kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5", version.ref = "kotest" }
kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
ajqueue-api = { module = "us.ajg0702.queue.api:api", version.ref = "ajqueue-api" }

[plugins]
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
11 changes: 4 additions & 7 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 12 additions & 24 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion integration/ajqueue/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,5 @@ dependencies {
compileOnly(project(":navauth-common"))
compileOnly(libs.velocitypowered.velocity.api)
kapt(libs.velocitypowered.velocity.api)
compileOnly("us.ajg0702.queue.api:api:2.9.1")
compileOnly(libs.ajqueue.api)
}
Loading