Repository navigation
Building from source
You need JDK 25. If it’s missing, Gradle downloads it through the foojay resolver.
-
Clone the repository:
git clone https://github.com/MairwunNx/mojoins cd mojoins -
Build and test:
./gradlew build
-
Take the jar from
build/libs/mojoins-dev.jar.
The jar is shaded: Kotlin, kaml, and the MaxMind reader sit inside it, relocated under ru.mairwunnx.mojoins.libs, so they can’t clash with other plugins. Local builds carry the version dev, CI builds dev-<commit>, and only the release workflow sets a real one.
./gradlew build runs the tests. There is no MockBukkit for Paper 26.3, so they cover the pure parts: the config, the language files, the language picker, and the colors. ResourcesTest fails when a bundled language misses a message key, or when config.yml and the defaults in Settings drift apart.
.claude/scripts/paper_smoke.py starts a Paper server with the jar and the optional plugins, then stops it, and fails on any error about the plugin:
python3 -I .claude/scripts/paper_smoke.py --game 26.3 --plugin build/libs/mojoins-dev.jar \
--modrinth placeholderapi --modrinth plan \
--jar https://cdn.modrinth.com/data/HQyibRsN/versions/N2WfJ0ll/MiniPlaceholders-Paper-3.2.0.jar \
--command "miniplaceholders expansions" \
--expect "PlaceholderAPI found" --expect "Plan found" --expect "MiniPlaceholders found" \
--ignore "Plan\] Failed to enable geolocation"Join, first-join, and quit lines need a game client: join and leave once.
Next: Stack and architecture
Mo’Joins on GitHub · Related projects · IP Geolocation by DB-IP, CC BY 4.0