HakuuLib.Minecraft 0.1.2

Suggested Alternatives

HakuuLib.MultiplayerLAN

dotnet add package HakuuLib.Minecraft --version 0.1.2
                    
NuGet\Install-Package HakuuLib.Minecraft -Version 0.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="HakuuLib.Minecraft" Version="0.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="HakuuLib.Minecraft" Version="0.1.2" />
                    
Directory.Packages.props
<PackageReference Include="HakuuLib.Minecraft" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add HakuuLib.Minecraft --version 0.1.2
                    
#r "nuget: HakuuLib.Minecraft, 0.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package HakuuLib.Minecraft@0.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=HakuuLib.Minecraft&version=0.1.2
                    
Install as a Cake Addin
#tool nuget:?package=HakuuLib.Minecraft&version=0.1.2
                    
Install as a Cake Tool

HakuuLib.Minecraft

A .NET library for Minecraft LAN discovery and forwarding, supporting both Java Edition and Bedrock Edition.

Features

  • LAN Discovery: Listen for Minecraft servers broadcasting on your local network
  • LAN Forwarding: Expose remote servers as if they were on your local network
  • Cross-Edition Support: Full support for both Java Edition (TCP) and Bedrock Edition (UDP/RakNet)

Installation

dotnet add package HakuuLib.Minecraft

Quick Start

Factory Class

Use the MinecraftLan factory class for convenient access:

using HakuuLib.Minecraft;

var minecraft = new MinecraftLan();

// Java Edition
var javaListener = minecraft.CreateJavaHostListener();
var javaForwarder = minecraft.CreateJavaForwarder(options);

// Bedrock Edition
var bedrockListener = minecraft.CreateBedrockDiscoveryListener();
var bedrockForwarder = minecraft.CreateBedrockForwarder(options);

Java Edition

Discovery

Listen for Java Edition LAN game announcements (multicast on 224.0.2.60:4445):

using HakuuLib.Minecraft.Java.Discovery;

var options = new JavaLanDiscoveryOptions
{
    MulticastAddress = "224.0.2.60",
    Port = 4445
};

await using var listener = new JavaLanDiscoveryListener(options);
await listener.StartAsync();

await foreach (var server in listener.ReadAllAsync())
{
    Console.WriteLine($"Found: {server.Motd} at {server.Address}:{server.Port}");
}

Forwarding

Forward a remote Java Edition server to appear on your LAN:

using HakuuLib.Minecraft.Java.Forwarding;

var options = new JavaLanForwarderOptions
{
    RemoteHost = "your-server.example.com",
    RemotePort = 25565,
    ListenPort = 25565,
    Motd = "My Forwarded Server"
};

await using var forwarder = new JavaLanForwarder(options);
forwarder.SessionStarted += (s, e) => Console.WriteLine($"Player connected from {e.ClientEndpoint}");
forwarder.SessionEnded += (s, e) => Console.WriteLine($"Player disconnected");

await forwarder.StartAsync();

// Keep running...
await Task.Delay(Timeout.Infinite);

Bedrock Edition

Discovery

Discover Bedrock Edition servers by sending RakNet ping packets:

using HakuuLib.Minecraft.Bedrock.Discovery;

var options = new BedrockLanDiscoveryOptions
{
    Port = 19132,
    PingInterval = TimeSpan.FromSeconds(1)
};

await using var listener = new BedrockLanDiscoveryListener(options);
await listener.StartAsync();

await foreach (var server in listener.ReadAllAsync())
{
    Console.WriteLine($"Found: {server.MotdLine1}");
    Console.WriteLine($"  Version: {server.VersionName} (Protocol {server.ProtocolVersion})");
    Console.WriteLine($"  Players: {server.PlayerCount}/{server.MaxPlayerCount}");
    Console.WriteLine($"  Game Mode: {server.GameModeName}");
    Console.WriteLine($"  Address: {server.Address}:{server.PortV4}");
}

Query a Specific Server

Query a specific Bedrock server directly:

using HakuuLib.Minecraft.Bedrock.Discovery;

var server = await BedrockServerQuery.QueryAsync("192.168.1.100", 19132);
if (server != null)
{
    Console.WriteLine($"Server: {server.MotdLine1}");
    Console.WriteLine($"Players: {server.PlayerCount}/{server.MaxPlayerCount}");
}

Forwarding

Forward a remote Bedrock Edition server to appear on your LAN:

using HakuuLib.Minecraft.Bedrock.Forwarding;

var options = new BedrockLanForwarderOptions
{
    RemoteHost = "your-bedrock-server.example.com",
    RemotePort = 19132,
    ListenPort = 19132,
    MotdLine1 = "My Forwarded Bedrock Server",
    MotdLine2 = "Welcome!",
    VersionName = "1.21.50",
    ProtocolVersion = 748,
    MaxPlayerCount = 10,
    GameMode = BedrockGameMode.Survival
};

await using var forwarder = new BedrockLanForwarder(options);
forwarder.SessionStarted += (s, e) => Console.WriteLine($"Client connected from {e.ClientEndpoint}");
forwarder.SessionEnded += (s, e) => Console.WriteLine($"Client disconnected");

await forwarder.StartAsync();

// Update player count dynamically
forwarder.UpdatePlayerCount(5, 10);

// Keep running...
await Task.Delay(Timeout.Infinite);

Broadcaster Only

If you just want to respond to LAN pings without forwarding:

using HakuuLib.Minecraft.Bedrock.Forwarding;

var broadcaster = new BedrockLanBroadcaster();
broadcaster.Configure(
    motdLine1: "My Server",
    motdLine2: "Bedrock World",
    versionName: "1.21.50",
    protocolVersion: 748,
    playerCount: 0,
    maxPlayerCount: 10,
    gameMode: BedrockGameMode.Survival
);

await broadcaster.StartAsync(19132);

Project Structure

Minecraft/
├── MinecraftLan.cs                    # Factory class
├── Bedrock/
│   ├── RakNetConstants.cs             # RakNet protocol constants
│   ├── RakNetPacketType.cs            # Packet type definitions
│   ├── RakNetPing.cs                  # Ping packet handling
│   ├── RakNetPong.cs                  # Pong packet handling
│   ├── RakNetUtils.cs                 # Utility functions
│   ├── Discovery/
│   │   ├── BedrockLanAnnouncement.cs  # Server announcement data
│   │   ├── BedrockLanDiscoveryListener.cs
│   │   ├── BedrockLanDiscoveryOptions.cs
│   │   └── BedrockServerQuery.cs      # Direct server query
│   └── Forwarding/
│       ├── BedrockLanBroadcaster.cs   # Responds to ping packets
│       ├── BedrockLanForwarder.cs     # Full forwarding solution
│       ├── BedrockLanForwarderOptions.cs
│       └── BedrockUdpRelay.cs         # UDP traffic relay
└── Java/
    ├── Discovery/
    │   ├── JavaLanAnnouncement.cs     # Server announcement data
    │   ├── JavaLanDiscoveryListener.cs
    │   └── JavaLanDiscoveryOptions.cs
    └── Forwarding/
        ├── JavaLanBroadcaster.cs      # Multicast broadcaster
        ├── JavaLanForwarder.cs        # Full forwarding solution
        ├── JavaLanForwarderOptions.cs
        └── JavaTcpRelay.cs            # TCP traffic relay

Protocol Details

Java Edition

  • Transport: TCP
  • Default Port: 25565
  • Discovery: UDP multicast on 224.0.2.60:4445
  • Message Format: [MOTD]server_name[/MOTD][AD]port[/AD]

Bedrock Edition

  • Transport: UDP (RakNet)
  • Default Port: 19132 (IPv4), 19133 (IPv6)
  • Discovery: RakNet Unconnected Ping/Pong
  • Magic Bytes: 0x00ffff00fefefefefdfdfdfd12345678
  • Server ID String Format:
    Edition;MOTD1;Protocol;Version;Players;MaxPlayers;ServerID;MOTD2;GameMode;GameModeNum;PortV4;PortV6;
    

License

MIT License

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.2 127 1/30/2026 0.1.2 is deprecated because it is no longer maintained and has critical bugs.
0.1.0 116 1/29/2026 0.1.0 is deprecated because it is no longer maintained.