Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
c3e8c28
Support 1.21.2
BoomEaro Oct 23, 2024
529b1b9
Support 1.21.4, update dependencies and minor improvements
BoomEaro Dec 9, 2024
a4b5886
Fix missing 1.21.1 display name
BoomEaro Dec 9, 2024
8ce14bf
Add github actions
BoomEaro Dec 9, 2024
ea7b15e
Fix wrong codec for 1.20.5
BoomEaro Dec 9, 2024
7ca2e4b
Support 1.21.5
BoomEaro Mar 25, 2025
b61c08d
Bump netty 4.1.119.Final
BoomEaro Mar 25, 2025
d90a6e3
Bump gradle 8.13
BoomEaro Mar 25, 2025
ad525a6
Fix typo
BoomEaro Mar 28, 2025
d0679ce
Bump 1.9
BoomEaro Mar 28, 2025
6a50f6e
Update readme
BoomEaro Mar 28, 2025
e594a38
Bump netty 4.2.0
BoomEaro Apr 5, 2025
ac2d934
Update other dependencies
BoomEaro Apr 5, 2025
c4a0cd0
Reorganize and improve registry encoding and sending
BoomEaro Apr 5, 2025
1956c0c
More correctly decode packets and add simple packet limit check
BoomEaro Apr 5, 2025
e2c68e8
Bump 1.9.1
BoomEaro Apr 5, 2025
d0b364d
More correctly write CompoundBinaryTag
BoomEaro May 31, 2025
bcf40d4
Bump gradle 8.14.1
BoomEaro May 31, 2025
7ea65dc
Bump 1.9.2
BoomEaro May 31, 2025
de85541
Fix PacketLoginStart decoding for 1.19.3 and bump 1.9.3
BoomEaro Jun 8, 2025
4a3bd7b
Support 1.21.6
BoomEaro Jun 18, 2025
9d0eb38
Bump gradle 8.14.2
BoomEaro Jun 18, 2025
3ecc20e
Update dependencies
BoomEaro Jun 18, 2025
4523dd6
Bump 1.9.4
BoomEaro Jun 18, 2025
be44eaf
Support 1.21.7
BoomEaro Jun 30, 2025
4fb7e7d
Bump 1.9.5
BoomEaro Jun 30, 2025
b4136a7
Add ability to enable secure profile
BoomEaro Jul 5, 2025
6dbcfa9
Optimize varint reading
BoomEaro Jul 5, 2025
b811784
Bump gradle 8.14.3
BoomEaro Jul 5, 2025
82b21bb
Bump 1.9.6
BoomEaro Jul 5, 2025
6a832a1
Ignore empty packets
BoomEaro Jul 20, 2025
f791bce
Bump netty 4.2.3
BoomEaro Jul 20, 2025
bc272e5
Update buildconfig and gradle shadow dependencies
BoomEaro Jul 20, 2025
4dae86d
1.21.8 has the same protocol
BoomEaro Jul 20, 2025
d1c5e1a
Bump 1.9.7
BoomEaro Jul 20, 2025
ef4e4e4
Packet Limiter - maxPacketBytesRate
Pantera07 Aug 10, 2025
823be08
Merge pull request #3 from Pantera07/packet-limiter_bps
BoomEaro Aug 16, 2025
e70ef2b
Rise minimum java version to 17 and use new java features
BoomEaro Aug 16, 2025
ea9674c
Bump gradle 9.0.0
BoomEaro Aug 16, 2025
f77a715
Update dependencies
BoomEaro Aug 16, 2025
97d28db
Remove archive classifier
BoomEaro Aug 16, 2025
bc49fbf
Update readme
BoomEaro Aug 16, 2025
e8fe64e
Bump 1.9.8
BoomEaro Aug 16, 2025
962dda0
Trim nickname to 16 characters for PacketPlayerInfo
BoomEaro Sep 12, 2025
bc48266
Update dependencies
BoomEaro Sep 12, 2025
425c8f8
Remove unused test framework
BoomEaro Sep 12, 2025
f0ce3a2
Little improve NanoLimbo build
BoomEaro Sep 12, 2025
a4a195e
Bump 1.9.9
BoomEaro Sep 12, 2025
7243601
Print current protocol state, version and packet type
BoomEaro Sep 13, 2025
0f88aaa
Add build workflow
BoomEaro Sep 13, 2025
0eb056e
Limit max username length to 16 characters and use netty's readString…
BoomEaro Sep 14, 2025
9e233af
Update README.md
BoomEaro Sep 14, 2025
24d32a9
Limit max host length name
BoomEaro Sep 14, 2025
6196e9f
Revert "Limit max host length name"
BoomEaro Sep 14, 2025
c0dc0d9
Bump gradle 9.1.0
BoomEaro Sep 23, 2025
d9c1af4
Lombok & cleanup
eliasfalch Sep 25, 2025
d81d2f3
Merge pull request #8 from eliasfalch/feature/1.21.2
BoomEaro Sep 30, 2025
b1c39db
Use a bit more lombok features
BoomEaro Sep 30, 2025
d89c09b
Support 1.21.9
BoomEaro Oct 1, 2025
8271183
Bump 1.9.10
BoomEaro Oct 1, 2025
d6c1713
Add missing copyright headers
BoomEaro Nov 29, 2025
227ef44
Update dependencies
BoomEaro Nov 29, 2025
d4dfe95
Use gson for bungee guard token parsing
BoomEaro Nov 29, 2025
38e1f4f
Migrate to kotlin dsl
BoomEaro Nov 29, 2025
5d553d0
Bump 1.10.0
BoomEaro Nov 29, 2025
3feb8fa
Just cleanup
BoomEaro Nov 29, 2025
336a43e
Fix chunks encoding
BoomEaro Nov 29, 2025
4354d62
Little cleanup
BoomEaro Nov 29, 2025
c6da1d9
Actualize readme
BoomEaro Nov 29, 2025
c8a6f64
Add support for io_uring and kqueue
BoomEaro Dec 6, 2025
1086ddf
Bump 1.10.1
BoomEaro Dec 6, 2025
5b65d83
Support for 1.21.11
BoomEaro Dec 9, 2025
7a73bf4
Bump 1.10.2
BoomEaro Dec 9, 2025
3e188a1
Update readme
BoomEaro Dec 26, 2025
376365a
Fix handshake intention handling
BoomEaro Jan 2, 2026
ea587fa
Update readme
BoomEaro Jan 2, 2026
037fb39
Update dependencies
BoomEaro Jan 2, 2026
6405ce2
Bump 1.10.3
BoomEaro Jan 2, 2026
7e38ad8
Implement full minimessage support
BoomEaro Jan 3, 2026
8f327e4
More correctly serialize config data and cleanup
BoomEaro Jan 3, 2026
ecd0cea
More correctly disable leak detector
BoomEaro Jan 3, 2026
ffbcaa9
More correctly encode login packet and little cleanup
BoomEaro Jan 3, 2026
03fa7f6
Simplify registry creation
BoomEaro Jan 3, 2026
58ead7b
Simplify update tags creation and little improve packet registry encode
BoomEaro Jan 3, 2026
fd91e43
Add missing copyright headers
BoomEaro Jan 3, 2026
82b83d3
Just little cleanup
BoomEaro Jan 3, 2026
f16ef84
Actualize velocity forwarding
BoomEaro Jan 4, 2026
71cf094
Refactor forwarding a bit
BoomEaro Jan 4, 2026
b2f7cd4
Actualize default config
BoomEaro Jan 4, 2026
a00bcb5
Update readme
BoomEaro Jan 4, 2026
15d85ee
Bump 1.11.0
BoomEaro Jan 4, 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
26 changes: 26 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Java CI with Gradle
on:
push:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
cache: gradle
- name: Current Java version
run: java -version
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: gradle shadowJar
- name: Upload NanoLimbo
uses: actions/[email protected]
with:
name: NanoLimbo
path: "build/libs/*.jar"
35 changes: 35 additions & 0 deletions .github/workflows/releases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Java CI with Gradle
on:
release:
types: [ published ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
cache: gradle
- name: Current Java version
run: java -version
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: gradle shadowJar
- name: Find correct JAR
id: find-jar
run: |
output="$(find build/libs/ ! -name "*-javadoc.jar" ! -name "*-sources.jar" -type f -printf "%f\n")"
echo "::set-output name=jarname::$output"
- name: Upload to the GitHub release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: build/libs/${{ steps.find-jar.outputs.jarname }}
asset_name: ${{ steps.find-jar.outputs.jarname }}
asset_content_type: application/java-archive
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
.idea
.gradle
.idea
build
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ General features:
* Doesn't spawn threads per player. Use a fixed thread pool.
* Support for **BungeeCord** and **Velocity** info forwarding.
* Support for [BungeeGuard](https://www.spigotmc.org/resources/79601/) handshake format.
* Support for [MiniMessage](https://docs.papermc.io/adventure/minimessage/format/) text format.
* Multiple versions support.
* Fully configurable.
* Lightweight. App size around **3MB**.
* Lightweight. App size around **5MB**.

![](https://i.imgur.com/sT8p1Gz.png)

Expand All @@ -36,7 +37,7 @@ Symbol `X` means all minor versions.
- [x] 1.18.X
- [x] 1.19.X
- [x] 1.20.X
- [x] 1.21
- [x] 1.21.X

The server **doesn't** support snapshots.

Expand All @@ -45,20 +46,21 @@ The server **doesn't** support snapshots.
* `help` - Show help message
* `conn` - Display number of connections
* `mem` - Display memory usage stats
* `version` - Display limbo version
* `stop` - Stop the server

Note that the server also will be closed correctly if you just press `Ctrl+C`.

### Installation

Required software: JRE 11+
Required software: JRE 17+

The installation process is simple.

1. Download the latest version of the program [**here**](https://github.com/Nan1t/NanoLimbo/releases).
1. Download the latest version of the program [**here**](https://github.com/BoomEaro/NanoLimbo/releases).
2. Put the jar file in the folder you want.
3. Create a start script as you did for Bukkit or BungeeCord, with a command like this:
`java -jar NanoLimbo-<version>.jar`
`java -jar NanoLimbo.jar`
4. The server will create `settings.yml` file, which is the server configuration.
5. Configure it as you want and restart the server.

Expand All @@ -85,8 +87,8 @@ to add some functionality that is suitable for a limbo server and won't signific

Required software:

* JDK 11+
* Gradle 7+ (optional)
* JDK 17+
* Gradle 9+ (optional)

To build a minimized jar, go to the project root directory and run in the terminal:

Expand Down
55 changes: 0 additions & 55 deletions build.gradle

This file was deleted.

73 changes: 73 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
plugins {
id("java")
id("com.gradleup.shadow") version "8.3.9"
id("com.github.gmazzo.buildconfig") version "6.0.7"
}

group = "ua.nanit"
version = "1.11.0"

repositories {
mavenCentral()
}

dependencies {
implementation("ch.qos.logback:logback-classic:1.5.18")
implementation("org.spongepowered:configurate-yaml:4.2.0")

implementation("io.netty:netty-handler:4.2.9.Final")
implementation("io.netty:netty-transport-native-epoll:4.2.9.Final:linux-x86_64")
implementation("io.netty:netty-transport-native-epoll:4.2.9.Final:linux-aarch_64")
implementation("io.netty:netty-transport-native-io_uring:4.2.9.Final:linux-x86_64")
implementation("io.netty:netty-transport-native-io_uring:4.2.9.Final:linux-aarch_64")
implementation("io.netty:netty-transport-native-kqueue:4.2.9.Final:osx-x86_64")
implementation("io.netty:netty-transport-native-kqueue:4.2.9.Final:osx-aarch_64")

implementation("net.kyori:adventure-api:4.26.1")
implementation("net.kyori:adventure-text-serializer-gson:4.26.1")
implementation("net.kyori:adventure-text-serializer-legacy:4.26.1")
implementation("net.kyori:adventure-text-serializer-json-legacy-impl:4.26.1")
implementation("net.kyori:adventure-text-serializer-plain:4.26.1")
implementation("net.kyori:adventure-text-minimessage:4.26.1")
implementation("net.kyori:adventure-nbt:4.26.1")

implementation("com.google.code.gson:gson:2.13.2")

compileOnly("org.projectlombok:lombok:1.18.42")
annotationProcessor("org.projectlombok:lombok:1.18.42")
}

tasks.compileJava {
options.encoding = "UTF-8"
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}


buildConfig {
className("BuildConfig")
packageName("ua.nanit.limbo")
buildConfigField("LIMBO_VERSION", provider { "${project.version}" })
}

tasks.shadowJar {
from("LICENSE")

archiveClassifier.set("")
archiveVersion.set("")

manifest {
attributes(
mapOf(
"Main-Class" to "ua.nanit.limbo.NanoLimbo"
)
)
}

minimize {
exclude(dependency("ch.qos.logback:logback-classic:.*:.*"))
}
}
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,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
50 changes: 32 additions & 18 deletions gradlew
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
Expand Down Expand Up @@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand All @@ -80,13 +82,11 @@ do
esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
Expand All @@ -133,22 +132,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand All @@ -165,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

JAVACMD=$( cygpath --unix "$JAVACMD" )

Expand Down Expand Up @@ -193,18 +198,27 @@ if "$cygwin" || "$msys" ; then
done
fi

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
Expand Down
Loading