01
Launch
Compose Desktop / Material 3. Install Minecraft from Alpha to the latest release. Microsoft accounts use OAuth 2.0 Device Code. Java 8 / 17 / 21 is detected or downloaded automatically; Apple Silicon can use the x86_64 compatibility layer.
lash.org.cn
lash.org.cn needs a few seconds to verify.
Notice. At the primary server was hit by a malicious attack. This site is temporarily running on Xingchen Cloud.
This site can only be opened on a desktop computer.
Ray ID:
Performance & security by HCS
01 / 06
01 / 10
Pick a version and start the game.
Play02 / 10
Minecraft.net RSS.
News03 / 10
Rooms.
Online04 / 10
Versions, the mod marketplace, and the Wiki.
Install05 / 10
Mods, shaders, and resource packs.
Content06 / 10
Worlds and screenshots.
Saves07 / 10
Microsoft accounts.
Account08 / 10
Themes and download sources.
Prefs09 / 10
Those 35 commands.
Shell10 / 10
Plugin manager and plugin pages.
ExtendScroll to open this letter · download, build, plugins
Shipped on GitHub Releases. Installers carry SHA-256 and Ed25519 signatures; the launcher checks them again before updating. The current v1.3.0 release only has a Fat JAR; native installers will appear on the same page when they are ready.
| macOS | arm64 / x86_64 · pkg、dmg、jar |
|---|---|
| Windows | x64 · msi、exe、jar |
| Linux | x64 (Java path also scans LoongArch / RISC-V) · deb, rpm, AppImage, jar |
Running pmcl-*-all.jar needs JDK 21+ on this machine: java -jar pmcl-1.3.0-all.jar. Java 8 / 17 / 21 for the game is downloaded by the launcher.
JDK 21+, Gradle 8.10+ (the repo includes gradlew). JavaFX native libraries follow the machine you compile on.
# clone
git clone https://github.com/PCML-Z/PCML.git
cd PCML
./gradlew :ui:fatJar
java -jar ui/build/libs/pmcl-1.3.0-all.jar
./gradlew :ui:packageDistributionForCurrentOS
PMCL/
├── core/ # Java core
├── ui/ # Compose, 22 pages
├── cli/ # 35 commands
├── plugin-api/
├── hmcl-plugin/
├── custom-downloader-plugin/
├── test-plugin/
└── test-plugin-package/
Implement PmclPlugin. Install into ~/.pmcl/plugins/<id>/.
class MyPlugin : PmclPlugin {
override val pluginId = "my-plugin"
override fun onEnable(ctx: PluginContext) {
ctx.registerCommand("hello", "Say hello") { args ->
"Hello, ${args.firstOrNull() ?: "World"}!"
}
ctx.registerPage("my-page", "My Page", MyPageContent())
}
}
plugin package /absolute/path/to/my-plugin-1.0.0.ppk
my-plugin-1.0.0.ppk
├── plugin.xml
├── META-INF/pmcl-plugin.properties
├── classes/
├── lib/
├── resources/
└── src/
Rejected if the path prefix, extension, main class, or version does not match. Full rules in PLUGIN_REQUIREMENTS.md。
Checks GitHub Releases once on launch. In Settings you can poll every 30 minutes. After you confirm, the matching OS/arch package is downloaded to ~/.pmcl/updates/, verified, then the launcher exits and a helper finishes the install.
v from tag_name..sig.X-RateLimit-Remaining: 0, the interval stretches to two hours.| UI | Compose Multiplatform 1.7.0 |
|---|---|
| Language | Kotlin 2.0.21 / Java 21 |
| Build | Gradle 8.10 (Kotlin DSL), 8 modules |
| Serialization | Gson 2.11 + kotlinx.serialization |
| Network | OkHttp 4.12; falls back to system curl if TLS is interfered with |
| System info | OSHI 6.6.5 |
| JavaFX | OpenJFX 25 |
| Update signing | SHA-256 + Ed25519 |
| Architecture | java -XshowSettings:properties -version reads the real arch. Apple Silicon prefers natives-*-arm64. |
|---|---|
| Legacy versions | 1.12.2 and earlier require Java 8. LWJGL 2 .jnilib files get a .dylib copy on Java 9+. |
| Modpacks | gameDir points at the version folder, not mcRoot, so packs stay isolated. |
| Fat JAR | All module-info.class files are stripped at package time. |
Also building LBSH Society and Lash Think Tank.