UnlegitDqrk dc3ccd47ba Small change
2026-02-22 19:12:11 +01:00
2026-01-18 21:00:56 +01:00
2026-02-22 19:12:11 +01:00
2024-07-07 23:13:20 +02:00
2025-09-20 10:16:14 +02:00
2026-02-22 19:12:11 +01:00
2026-02-21 19:49:27 +01:00

UnlegitLibrary

UnlegitLibrary is a modular Java library focused on reusable core building blocks: event handling, commands, addon loading, network communication (TCP/UDP with optional TLS), and various utility classes.

Contents

  • Features
  • Maven Integration
  • ArgumentParser
  • NetworkSystem (TCP/UDP + TLS/mTLS)
  • Create Certificates
  • License

Features

  • Addon system: loader, lifecycle, addon events
  • Event system: listeners, priorities, cancellable events
  • Command system: command manager, permissions, execute events
  • NetworkSystem: TCP/UDP, packet handling, optional TLS security, UDP encryption
  • Utilities: number/math, strings/colors, files, reflection, logging
  • ArgumentParser: registration, validation, and execution of arguments

Maven Integration

<repositories>
    <repository>
        <id>repounlegitdqrk</id>
        <url>https://repo.unlegitdqrk.dev/api/packages/unlegitdqrk/maven</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>dev.unlegitdqrk</groupId>
        <artifactId>unlegitlibrary</artifactId>
        <version>VERSION</version>
    </dependency>
</dependencies>

ArgumentParser

Basic Example

ArgumentParser parser = new ArgumentParser(args);

Argument verbose = new Argument("verbose", "Enable verbose output", false);
verbose.setRun((arg, value) -> System.out.println("Verbose on"));
parser.registerArgument(verbose);

Argument mode = new Argument("mode", "Run mode", true, true, false, List.of("dev", "prod"));
mode.setRun((arg, value) -> System.out.println("Mode: " + value.orElse("")));
parser.registerArgument(mode);

parser.runArguments();

Value Rules

  • Constructor: Argument(name, description, required, requireValue, optionalValue, values)
  • requireValue=false and optionalValue=false: no value allowed
  • requireValue=true and optionalValue=false: value is required
  • requireValue=false and optionalValue=true: value is optional
  • requireValue=true and optionalValue=true: invalid combination
  • If values is not empty, the provided value must be in the list

NetworkSystem (TCP/UDP + TLS)

  • TCP is the control channel (handshake, routing, session data).
  • UDP is optional and encrypted using a symmetric key negotiated over TCP.
  • TLS can be enabled or disabled.
  • mTLS is supported (ClientAuthMode.REQUIRED + TrustStore on the server side).

Basic Example

PacketHandler packetHandler = new PacketHandler();
packetHandler.registerPacket(() -> new ExamplePacket(""));
EventManager eventManager = new EventManager();

NetworkServer server = new NetworkServer.Builder()
    .packetHandler(packetHandler)
    .eventManager(eventManager)
    .sslEnabled(false)
    .clientAuthMode(ClientAuthMode.NONE)
    .build();
server.start(25565, 25566);

NetworkClient client = new NetworkClient.Builder()
    .packetHandler(packetHandler)
    .sslEnabled(false)
    .build();
client.connect("127.0.0.1", 25565);

TLS with TrustStore (Server Validation)

KeyStore serverKeyStore = loadStore("certs/server.p12", "changeit".toCharArray());
KeyStore clientTrustStore = loadStore("certs/client-trust.p12", "changeit".toCharArray());
EventManager eventManager = new EventManager();

NetworkServer server = new NetworkServer.Builder()
    .packetHandler(packetHandler)
    .eventManager(eventManager)
    .sslEnabled(true)
    .clientAuthMode(ClientAuthMode.NONE)
    .keyStore(serverKeyStore, "changeit".toCharArray())
    .build();
server.start(25565, 25566);

NetworkClient client = new NetworkClient.Builder()
    .packetHandler(packetHandler)
    .sslEnabled(true)
    .trustStore(clientTrustStore)
    .build();
client.connect("127.0.0.1", 25565);

TLS with Client Certificate (mTLS)

KeyStore serverKeyStore = loadStore("certs/server.p12", "changeit".toCharArray());
KeyStore serverTrustStore = loadStore("certs/server-trust.p12", "changeit".toCharArray());
KeyStore clientKeyStore = loadStore("certs/client.p12", "changeit".toCharArray());
KeyStore clientTrustStore = loadStore("certs/client-trust.p12", "changeit".toCharArray());
EventManager eventManager = new EventManager();

NetworkServer server = new NetworkServer.Builder()
    .packetHandler(packetHandler)
    .eventManager(eventManager)
    .sslEnabled(true)
    .clientAuthMode(ClientAuthMode.REQUIRED)
    .keyStore(serverKeyStore, "changeit".toCharArray())
    .trustStore(serverTrustStore)
    .build();
server.start(25565, 25566);

NetworkClient client = new NetworkClient.Builder()
    .packetHandler(packetHandler)
    .sslEnabled(true)
    .keyStore(clientKeyStore, "changeit".toCharArray())
    .trustStore(clientTrustStore)
    .build();
client.connect("127.0.0.1", 25565);

Certificates for NetworkSystem

Create Root CA

openssl genrsa -out myCA.key 4096
openssl req -x509 -new -key myCA.key -sha256 -days 365 -out myCA.pem -addtext basicConstraints=critical,CA:TRUE -addtext keyUsage=critical,keyCertSign,cRLSign
  • myCA.key: private CA key (keep secret)
  • myCA.pem: public root certificate

Create Server Certificate Based on Root CA

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out server.crt -days 365 -sha256
  • server.key: private server key
  • server.crt: server certificate signed by your root CA

Optional: Create Client Certificate Based on Root CA

openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out client.crt -days 365 -sha256
  • client.key: private client key
  • client.crt: client certificate signed by your root CA

Helper: Load PKCS12 Store in Java

private static KeyStore loadStore(String path, char[] password) throws Exception {
    KeyStore store = KeyStore.getInstance("PKCS12");
    try (FileInputStream in = new FileInputStream(path)) {
        store.load(in, password);
    }
    return store;
}

License

GNU General Public License v3.0 (GPLv3)

Default license for all users, projects, and distributions unless explicitly agreed otherwise.

Open Autonomous Public License (OAPL)

Special exception exclusively for the Open Autonomous Connection (OAC) project. Within that context, OAPL terms take precedence.

Description
No description provided
Readme GPL-3.0 716 KiB
Languages
Java 78.6%
Roff 21.4%