Skip to content
Low-Drag-MCPublic

About

No description, website, or topics provided.

Resources

Stars

257 stars

Watchers

2 watching

Forks

Repository files navigation

LDLib2

A modern Minecraft modding library for UI, rendering, synchronization, persistence, and in-game editors.

GitHub stars CurseForge downloads Modrinth downloads Latest Maven version NeoForge License

Documentation | Java Integration | UI Guide | Compose | Discord | CurseForge | Modrinth


LDLib2 is a complete rewrite of the original LDLib, redesigned around modern Minecraft and NeoForge development. It gives mod authors a higher-level foundation for building UI, in-game tools, renderer-backed content, synchronized data, and persistent runtime systems without rebuilding the same infrastructure in every project.

Feature Highlights

LDLib2 UI showcase
LDLib2 UI
Build Minecraft screens with Taffy-powered layout, LSS stylesheets, reusable components, XML definitions, data bindings, RPC events, and HUD overlays.
A Kotlin composable next to the LDLib2 panel it renders
Compose UI
Write screens in Kotlin as a function of state on the Compose runtime. Lists, tabs, and dialogs follow your data, and every widget is a real LDLib2 element. Ships as the optional ldlib2-compose module.
Data synchronization and persistence overview
Data Synchronization and Persistence
Annotate fields with @Persisted, @DescSynced, and RPC helpers to generate NBT IO, codecs, dirty-field sync, and packet flow with minimal boilerplate.
Annotated fields next to the property editors LDLib2 generates
Configurable
Turn annotated Java objects into inspector-ready property panels, including ranges, selectors, lists, item and fluid pickers, search fields, undo history, and persistence.
Node Graph Toolkit editor
Node Graph Toolkit
Create in-game graph editors with nodes, ports, wires, variables, subgraphs, blackboards, auto layout, undoable commands, and resource-backed graph assets.
LDLib2 in-game UI editor
In-game Editor Framework
Build Unity-, Blender-, or Blockbench-style tools with dockable views, project files, an asset browser, inspectors, history, rebindable shortcuts, and settings.
LDLib2 XEI integration
Rendering and Integrations
Use LDLib2's shader, texture, model rendering, and scene utilities together with JEI, REI, EMI, KubeJS, and Java plugin entry points.
A Snake HUD opened and driven by an LDLib2 UI test scenario
UI Test Harness
Script scenarios that open real UIs in a real client, click and type through them, wait for server sync, and save screenshots and reports. Runs headless, in parallel, or on a dedicated server with several clients.

Java Integration

LDLib2 is published to the FirstDark Maven snapshots repository.

repositories {
    maven { url = "https://maven.firstdark.dev/snapshots" }
}

dependencies {
    implementation("com.lowdragmc.ldlib2:ldlib2-neoforge-${minecraft_version}:${ldlib2_version}:all")
}

For LDLib2 versions before 2.2.1, disable transitive dependencies and add Yoga manually:

dependencies {
    implementation("com.lowdragmc.ldlib2:ldlib2-neoforge-${minecraft_version}:${ldlib2_version}:all") {
        transitive = false
    }
    compileOnly("org.appliedenergistics.yoga:yoga:1.0.0")
}

Recommended project variables:

minecraft_version=1.21.1
ldlib2_version=2.2.44

Optional: Compose UI

Compose UI is a separate mod, ldlib2-compose, that your mod ships as Jar-in-Jar. It is written against Kotlin and needs the Kotlin Compose compiler plugin at the same version as your Kotlin plugin.

Its version starts with the Minecraft line it is built for: 21.0.0.1 is the first release for 1.21.1, and each Minecraft version gets its own build. Only 1.21.1 is published so far.

dependencies {
    implementation "com.lowdragmc.ldlib2:ldlib2-compose-1.21.1:21.0.0.1"
    jarJar(group: 'com.lowdragmc.ldlib2', name: 'ldlib2-compose-1.21.1') {
        version { require '[21.0.0.1,)'; prefer '21.0.0.1' }
    }
}

See Optional module: ldlib2-compose for the plugin, repository, and neoforge.mods.toml setup.

LDLib Plugin Entry Point

Create a plugin class when your mod needs to register LDLib2 resources, integrations, or startup hooks.

import com.lowdragmc.lowdraglib2.plugin.ILDLibPlugin;
import com.lowdragmc.lowdraglib2.plugin.LDLibPlugin;

@LDLibPlugin
public class MyLDLibPlugin implements ILDLibPlugin {
    @Override
    public void onLoad() {
        // Register LDLib2 extensions here.
    }
}

Quick UI Example

This creates a small ModularUI with a label, a button, and a styled root element.

public class MyScreenUi {
    public static ModularUI createUi() {
        var root = new UIElement()
                .layout(layout -> layout.paddingAll(7).gapAll(5))
                .style(style -> style.background(Sprites.BORDER));

        root.addChildren(
                new Label().setText("My First LDLib2 UI"),
                new Button()
                        .setText("Click Me")
                        .setOnClick(event -> {
                            // Handle the click here.
                        })
        );

        return ModularUI.of(UI.of(root));
    }
}

For a full walkthrough, see the UI Getting Started guide.

With Compose UI, the screen is a Kotlin function of its state, and changing the state updates the elements:

@Composable
fun Counter() {
    var count by remember { mutableStateOf(0) }

    Column(layout = { width(120.px); padding { all(6.px) }; gap { all(4.px) } }) {
        Text("Clicked $count times")
        Button(onClick = { count++ }, text = "Click")
    }
}

fun openCounter() {
    val mc = Minecraft.getInstance()
    val mui = composeModularUI(mc.player, StylesheetManager.MODERN) { Counter() }
    mc.setScreen(ModularUIScreen(mui, Component.literal("Counter")))
}

Developer Tools

If you develop with LDLib2, install the LDLib Dev Tool IDEA plugin for editor assistance around LDLib2-specific files and annotations. The Java Integration guide covers code highlighting, syntax checks, jump-to-definition, autocomplete, and annotation support.

Migrating from LDLib

LDLib2 is not a small patch over LDLib. It removes old systems and rebuilds the core architecture for Minecraft 1.21+.

  • Legacy UI and outdated framework pieces have been removed.
  • UI layout, styling, events, and data flow have been redesigned.
  • Documentation and examples are written around the new architecture.
  • Compatibility work focuses on modern NeoForge and current modding integrations.

Links

License

LDLib2 is licensed under the LGPL-3.0 license.

About

No description, website, or topics provided.

Resources

Stars

257 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages