Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
75f6b8b
Move...
Rongmario Jul 16, 2026
94ab44f
Step 1 of Rewrite - CG 0.2.0
Rongmario Jul 18, 2026
b4d561b
CG 0.3.0, notes in dependencies block
Rongmario Jul 20, 2026
42749a7
Move...
Rongmario Jul 16, 2026
2ba2552
Step 1 of Rewrite - CG 0.2.0
Rongmario Jul 18, 2026
2f1679f
CG 0.3.0, notes in dependencies block
Rongmario Jul 20, 2026
f263cdd
Merge remote-tracking branch 'origin/feature/cleanroomgradle' into fe…
Rongmario Aug 11, 2026
e7b005e
Update CG to 0.4.2
Rongmario Aug 11, 2026
7ef5a3f
Added CleanMix, MixinExtras versions to gradle.properties
Rongmario Aug 11, 2026
2b449a3
Exclude `com.ibm.icu:icu4j-core-mojang`, `com.mojang:patchy` dependen…
Rongmario Aug 11, 2026
b8060ab
Refrain from using afterEvaluate
Rongmario Aug 11, 2026
8b42158
Specify directories for patch development
Rongmario Aug 11, 2026
561fadc
Exclude LWJGL 2 natives from runtime
Rongmario Aug 11, 2026
bb730ef
Remove google's jsr305 dep, documented jakarta/java 8's javax differe…
Rongmario Aug 11, 2026
28eb98f
Added `ca.weblite:java-objc-bridge:1.2` back
Rongmario Aug 11, 2026
2c452ff
Updated LWJGL to 3.4.2 and clarified bindings
Rongmario Aug 11, 2026
a608e89
Stop all `RunMinecraft` tasks from inheriting mixin debug args by def…
Rongmario Aug 11, 2026
14cc475
Added a test task
Rongmario Aug 11, 2026
f7d077a
Cleaner gitignore
Rongmario Aug 11, 2026
70f4fd7
BREAKING: Renamed kirino submodule
Rongmario Aug 11, 2026
08d4bae
Moved new files from the rebase
Rongmario Aug 11, 2026
077c9ae
Move ConfigAnytime to builtin module
Rongmario Aug 11, 2026
92901f2
Update CG to 0.4.3, tidied up natives
Rongmario Aug 11, 2026
5405f3d
Update buildscript and CG
Rongmario Aug 12, 2026
31c13db
Update CG + configure to auto download sources/javadocs
Rongmario Aug 13, 2026
bad7f27
Ported Patches Pt. 1
Rongmario Aug 13, 2026
b0a3b36
Get started with the SDL ecosystem
Rongmario Aug 13, 2026
ba72773
Fix some vanilla/Forge methods to match new LWJGL 3 names
Rongmario Aug 14, 2026
c944066
Remove comments to minimize OpenGlHelper.java.patch
Rongmario Aug 14, 2026
82a2490
Add lwjgl-freetype
Rongmario Aug 14, 2026
d8de626
Temp exclude kirino classes that depend on local artifacts
Rongmario Aug 14, 2026
3658721
Remove previous IME hacks
Rongmario Aug 14, 2026
ff244a4
Native handle cleanup with taskbars/dwm
Rongmario Aug 14, 2026
8bb595a
LWJGLYTransformer
Rongmario Aug 14, 2026
126d818
Bridging classes
Rongmario Aug 15, 2026
fc30f04
SplashProgress...
Rongmario Aug 15, 2026
7970b2a
Fixed `World#setBlockState` hunk regression
Rongmario Aug 15, 2026
565dd6c
Fixed `WorldGenTaiga1` & `WorldGenTaiga2` hunk regressions
Rongmario Aug 15, 2026
38e0d05
Fixed `WorldGenTrees` patch regression
Rongmario Aug 15, 2026
4cdc248
Update kirino submodule
Rongmario Aug 15, 2026
3a4863b
Fixed `WorldGeneratorBonusChest` hunk regression
Rongmario Aug 15, 2026
1864055
Fixed `BlockVine` hunk regression
Rongmario Aug 15, 2026
c692c5b
Fixed `BlockPistonStructureHelper` hunk regression
Rongmario Aug 15, 2026
0ebcb5d
Include Kirino's ShutdownManager hook in patch
Rongmario Aug 15, 2026
7fe20d9
Fixed patch regression for `StructureVillagePieces`
Rongmario Aug 15, 2026
f5e9227
Remove ChunkPos getX + getY helpers
Rongmario Aug 16, 2026
b7e5f6c
Bring Kirino's ShutdownManager before clearing window
Rongmario Aug 16, 2026
83022df
Catch up versioning, and use temp version class before token plugin g…
Rongmario Aug 16, 2026
cd473dc
Bump CG to 0.7.0
Rongmario Aug 17, 2026
02d1f17
Update kirino submodule
Rongmario Aug 17, 2026
b398538
Uninstall WindowBridge
Rongmario Aug 17, 2026
5c1d2d4
Close/swap contexts with more grace
Rongmario Aug 17, 2026
9a6d9f4
Nuke old patches
Rongmario Aug 17, 2026
3556a66
Fixed mouse deltas not resetting on explicit grab
Rongmario Aug 18, 2026
0dbbef8
Update CG, start using Versioning + TokenEnvoy
Rongmario Aug 19, 2026
a1be8a0
Move `input` => `sdl`
Rongmario Aug 19, 2026
f33e61a
Catchup Kirino module
Rongmario Aug 19, 2026
11690db
SDL Text API, includes IME func
Rongmario Aug 19, 2026
76dbece
IME support for editing signs, writing books and more
Rongmario Aug 19, 2026
7325272
Update CG to 0.9.0
Rongmario Aug 19, 2026
0d20595
Update CG to 0.9.1, removed/modified patches accordingly
Rongmario Aug 19, 2026
e4e0411
Capitalization, multiline, autocorrect
Rongmario Aug 19, 2026
b1cc9bf
Drops
Rongmario Aug 19, 2026
a6f7c82
Snap
Rongmario Aug 19, 2026
9942699
SDLException, oops
Rongmario Aug 19, 2026
dae5fb8
HID Devices
Rongmario Aug 19, 2026
b60211c
Displays
Rongmario Aug 19, 2026
45de5a0
Clipboard
Rongmario Aug 19, 2026
da32c6a
Some more SDL funny moments
Rongmario Aug 19, 2026
2a7df65
Gamepads
Rongmario Aug 19, 2026
7c358cb
Haptic Feedback
Rongmario Aug 19, 2026
d38d7ef
Joysticks
Rongmario Aug 19, 2026
2d8d5b2
Some more SDL stuff
Rongmario Aug 19, 2026
8139211
Keyboard, keys, mouse, pens
Rongmario Aug 19, 2026
1a08f96
Sensors and surfaces
Rongmario Aug 19, 2026
4aa03cb
Remove `lwjgl-tinyfd`
Rongmario Aug 19, 2026
16341ef
Window with many more events to be dispatched and properties to be had
Rongmario Aug 19, 2026
e23debd
Add category into SDL3 logging
Rongmario Aug 19, 2026
86e0ee8
Would you look at that, SDL3 also reports system themes
Rongmario Aug 19, 2026
944d84b
Flashing, progress bar, theme changes - through SDL3
Rongmario Aug 19, 2026
a9e071a
Clipboard + open link replacement in GuiScreen
Rongmario Aug 19, 2026
2407bf4
setIcon + error dialog on crash + fullscreen + borderless
Rongmario Aug 19, 2026
de8e864
Remove redundant SideOnly patches with the help of a SAS file
Rongmario Aug 19, 2026
f4744c2
Better memory management in Clipboard
Rongmario Aug 20, 2026
6fcab5b
More cleanups
Rongmario Aug 20, 2026
258fae0
Update kirino submodule
Rongmario Aug 20, 2026
054ff51
Proper fullscreen + borderless support
Rongmario Aug 20, 2026
21d7420
Fixed token placeholders
Rongmario Aug 20, 2026
fa551ce
Use new non-LZMA ClassPatchManager
Rongmario Aug 21, 2026
10f18d4
Add exclusion for cleanroom class patcher
Rongmario Aug 22, 2026
8f45d07
Update CG to 0.10.3
Rongmario Aug 22, 2026
8da100b
More patches fixed
Rongmario Aug 22, 2026
09dbd5a
Update CG to 0.10.4
Rongmario Aug 22, 2026
e8441d4
Merge branch 'main' into feature/cleanroomgradle
Rongmario Aug 22, 2026
ddf125c
Bump Kirino
Rongmario Aug 23, 2026
aa0551f
Effort to reduce AWT initializations
Rongmario Aug 23, 2026
ff2cdfd
Update CleanroomGradle and LWJGL 3
Rongmario Aug 24, 2026
8f2d707
Update CG + ImagineBreaker
Rongmario Aug 25, 2026
66595fb
Catchup kirino
Rongmario Aug 26, 2026
eb61c35
Catchup Kirino again
Rongmario Aug 26, 2026
1881956
Update Foundation
Rongmario Aug 27, 2026
57258a5
Early exit ClassPatchManager if we're in dev
Rongmario Aug 27, 2026
5dfb786
Update Forge tests to JUnit 6
Rongmario Aug 28, 2026
8b86b75
Update CG to 0.13.7 and set root name
Rongmario Aug 28, 2026
1354823
Move SDL listeners to eventbus
Rongmario Aug 28, 2026
0fbbaa0
Update CG and Kirino
Rongmario Aug 29, 2026
d118a9c
Encapsulation, and some semantic differences in some input devices
Rongmario Sep 1, 2026
96e17bb
Fix MinecraftResourceUtils
tttsaurus Sep 2, 2026
62f42ff
chore: update kirino
Rongmario Sep 2, 2026
ff1f710
chore: update to CleanroomGradle 0.15.1
Rongmario Sep 3, 2026
2832949
Refactor ICS for future font reloading impl
tttsaurus Sep 3, 2026
8386f46
fix: exclude old lwjgl module from runtimeClasspath
Rongmario Sep 3, 2026
3087375
Implement font resource pack reloading
tttsaurus Sep 3, 2026
426d6bc
chore: update kirino
Rongmario Sep 8, 2026
4def075
Merge remote-tracking branch 'origin/main' into feature/cleanroomgradle
Rongmario Sep 8, 2026
6acbe99
fix: use KirinoConfig::isEnabled in EntityRenderer
Rongmario Sep 9, 2026
5051d72
refactor: remove popup when the game crashes for now
Rongmario Sep 9, 2026
ae24c73
fix(sdl): open input devices through SDL's refcounted open calls
Rongmario Sep 9, 2026
83d1b15
fix(sdl): release duplicate haptic reference when the device is alrea…
Rongmario Sep 9, 2026
c1974fa
fix(sdl): unlock the surface before destroying it on icon conversion …
Rongmario Sep 9, 2026
6574823
fix(sdl): make the window current before creating the shared GL context
Rongmario Sep 9, 2026
364ddfb
fix(sdl): make the offered clipboard image volatile for the SDL callback
Rongmario Sep 9, 2026
7febaa8
fix(sdl): guard HidDevice.info against a closed handle
Rongmario Sep 9, 2026
6a1bfa1
fix(sdl): synchronize the Window icon mutators with the rest of the w…
Rongmario Sep 9, 2026
563f792
fix(sdl): stop opening every haptic device just to list them
Rongmario Sep 9, 2026
387b9c5
fix(sdl): drain completed file dialog allocations on shutdown
Rongmario Sep 9, 2026
3f8102a
fix(sdl): copy clipboard data instead of handing out SDL's buffer
Rongmario Sep 9, 2026
8615494
fix(sdl): only release the shared GL context when it is the current one
Rongmario Sep 9, 2026
1c2ae9a
fix(sdl): bound-check the joystick button index like axis and hat
Rongmario Sep 9, 2026
78ecc81
fix(sdl): clamp gamepad LED channels instead of truncating to byte
Rongmario Sep 9, 2026
b8e52a3
docs(sdl): repair malformed javadoc in VideoInternal and Haptic
Rongmario Sep 9, 2026
c2086b7
doc: README
Rongmario Sep 9, 2026
bf87970
Merge branch 'main' into feature/cleanroomgradle
Rongmario Sep 18, 2026
edb86d4
build: drop the versioning plugin until Conventions lands
Rongmario Sep 18, 2026
99a32d9
fix: lwjgl natives inaccessible in gl tests
Rongmario Sep 21, 2026
4666011
fix: normalize archive base name
Rongmario Sep 21, 2026
ab22dd8
Merge remote-tracking branch 'origin/main' into feature/cleanroomgradle
Rongmario Sep 22, 2026
e7ba53c
Update kirino
tttsaurus Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/DISCUSSION_TEMPLATE/draft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ body:
attributes:
label: Guidelines
description: |
View the guidelines here: [Cleanroom Feature Proposal Guidelines](../blob/main/CFP_GUIDELINES.md)
View the guidelines here: [Cleanroom Feature Proposal Guidelines](https://github.com/CleanroomMC/Cleanroom/discussions/63#discussion-6236162)
options:
- label: I have and will continue to adhere to the guidelines
required: true
14 changes: 5 additions & 9 deletions .github/workflows/BuildTest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ name: Build and Upload Test Artifact
on:
push:
paths:
- 'src/**'
- 'module/**'
- 'buildSrc/**'
- 'patches/**'
- 'projects/**/build.gradle'
- 'projects/kirino'
- 'build.gradle'
- 'settings.gradle'
- 'gradle.properties'
- 'script/**'
- '.github/**'
Expand Down Expand Up @@ -63,23 +62,20 @@ jobs:
- name: Build Jars
run: ./gradlew build -Prun_number=${{ github.run_number }}

- name: Get version
run: echo "CLEANROOM_VERSION=$(cat version.txt)" >> $GITHUB_ENV

- name: Upload Universal Jar
uses: actions/upload-artifact@v7
with:
path: projects/cleanroom/build/libs/*-universal.jar
path: build/libs/*-universal.jar
archive: false

- name: Upload Installer Jar
uses: actions/upload-artifact@v7
with:
path: projects/cleanroom/build/libs/*-installer.jar
path: build/libs/*-installer.jar
archive: false

- name: Upload MMC pack zip
uses: actions/upload-artifact@v7
with:
path: projects/cleanroom/build/libs/*.zip
path: build/libs/*.zip
archive: false
22 changes: 6 additions & 16 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,18 +1,8 @@
/.idea/*
/.run/
/.gradle/
/projects/cleanroom/**
/projects/minecraft/**
/projects/mcp/**
/projects/cleanroom/!build.gradle
/projects/minecraft/!build.gradle
/projects/mcp/!build.gradle
/buildSrc/.gradle/
/buildSrc/build/
/buildSrc/out/
/logs/
build/
version.txt
src/main/java/com/cleanroommc/common/CleanroomVersion.java
**/.idea/*
**/.run/
**/.gradle/
**/build/
**/run/
/module/minecraft/src/

!/.idea/icon.svg
4 changes: 2 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "projects/kirino"]
path = projects/kirino
[submodule "kirino"]
path = module/kirino
url = https://github.com/CleanroomMC/Kirino-Engine.git
8 changes: 0 additions & 8 deletions CFP_GUIDELINES.md

This file was deleted.

140 changes: 71 additions & 69 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,94 +1,96 @@
# Cleanroom Minecraft
# Cleanroom

## Features
### Implemented
Cleanroom is an ecosystem for Minecraft 1.12.2, built on a continuation of MinecraftForge.
- Runs on modern Java versions (25+)
- LWJGL 3 + SDL 3 rendering and input stack
- Compatible with almost all Forge mods, with edge cases handled by [Fugue](https://github.com/CleanroomMC/Fugue)

- 1.12.2 on Java 25+
- *Latest* LWJGL3
- A working *mod development template/kit*
- Patches for loading incompatible mods
- Built-in Mixin w/ handy bootstrapping
- Develop using Scala 3 + Kotlin 2
- Compatibility to 99% of Forge mods
If you want to...
- Play or make modpacks? Jump to [Installation](#installation).
- Write mods? See [For Mod Developers](#for-mod-developers).

### Planning
## Runtime

- CleanroomGradle to replace ForgeGradle
- Actually useful APIs (See [here](https://github.com/orgs/CleanroomMC/projects/4/))
- Optimized
- Java 25
- LWJGL 3, with LWJGLY shim for LWJGL 2 APIs
- Foundation, powerful LaunchWrapper replacement
- CleanMix, Mixin fork with proper bootstrapping and more features
- ImagineBreaker
- Netty 4.2, Guava 33, Apache HttpClient 5, Jakarta APIs and more

## Components:
## Kirino Engine

- Minecraft Coder Pack
- CleanroomLoader (Continuation + Revamp of ForgeModLoader)
- Cleanroom Minecraft (Continuation + Revamp of MinecraftForge)
- Customized Mixin with improved bootstraps
- [Foundation](https://github.com/kappa-maintainer/Foundation/), a LaunchWrapper replacement with better debug logging.
- Bytecode Patcher (Coming Soon) \[Inspired by [Bansoukou](https://github.com/LoliKingdom/Bansoukou) and [Bytecode Patcher](https://github.com/jbredwards/Bytecode-Patcher)]
- [Fugue](https://www.curseforge.com/minecraft/mc-mods/fugue), a mod patches many incompatible mods.
- [Scalar](https://www.curseforge.com/minecraft/mc-mods/scalar-legacy), a Scala provider. We made Scala libraries become a standalone mod so it can be updated.
- [Forgelin-Continuous](https://www.curseforge.com/minecraft/mc-mods/forgelin-continuous) and [LibrarianLib-Continuous](https://www.curseforge.com/minecraft/mc-mods/librarianlib-continuous)
[Kirino Engine](https://github.com/CleanroomMC/Kirino-Engine) ships as a module of this repository and is wired into the loader lifecycle.

## Download & Installation:
It is a work-in-progress rendering engine that replaces Minecraft's implicit render state with an explicit structure, and gives mod authors a real rendering API instead of another layer of mixins.

- For MultiMC-based launchers (PolyMC, PrismLauncher), download the MMC instance from [release](https://github.com/CleanroomMC/Cleanroom/releases), import it in your launcher(alternatively unzip patches and json inside to your 1.12 instance).
- For regular launcher (official launcher, AT launcher, FTB, HMCL), install the [relauncher](https://www.curseforge.com/minecraft/mc-mods/cleanroom-relauncher), launch the game and follow instructions.
- **WARNING:** Only MultiMC-based launchers are officially supported. This is because of the limit on removing vanilla libraries in other launchers.
- **Remember to install [Fugue](https://www.curseforge.com/minecraft/mc-mods/fugue)!**
- **And [Scalar](https://www.curseforge.com/minecraft/mc-mods/scalar-legacy)!**
- If you were told to use **action builds**, download them here: [Cleanroom](https://github.com/CleanroomMC/Cleanroom/actions), [Fugue](https://github.com/CleanroomMC/Fugue/actions)
- You need to log in your GitHub account to download action artifacts.
## Installation

## Cleanroom on Server
> [!IMPORTANT]
> Follow [our guide over at our website](https://cleanroommc.com/wiki/end-user-guide/preparing-your-modpack)!
> It explains steps needed to take to port existing modpacks, and also informs you of the latest and greatest mods to use and to update to.

- Cleanroom can be installed on server.
- Just use the installer mentioned in previous section, and run the jar with `--installServer`. See [this page](https://minecraft.fandom.com/wiki/Tutorials/Setting_up_a_Minecraft_Forge_server) for more detail.
### Client

## Pack-making with Cleanroom
- **MultiMC-based Launchers (PrismLauncher, PolyMC etc)**: download the .zip (MMC instance) and import it.
- Alternatively, unzip and move the patches directory into your existing 1.12 instance (same level as the `.minecraft` directory).
- **Minecraft Official Launcher**: follow instructions when launching the installer jar. Or launch it with cli.
- **Other Launchers (ATLauncher, HMCL etc):** install the [relauncher](https://www.curseforge.com/minecraft/mc-mods/cleanroom-relauncher), and follow instructions in the pop-up GUI.

### Steps of Making Your Pack Cleanroom Ready
> [!NOTE]
> Direct downloads can be found in GitHub Actions, Releases & the [CleanroomMC Download Page](https://download.cleanroommc.com/).
> Action builds require logging into GitHub before downloading.

1. Add Scalar and Fugue in your pack.
2. Add Relauncher (optional, this will make your pack a full Cleanroom pack)
3. Test launching and remove incompatible mods
### Server

### Steps of Migrating Your Pack Fully to Cleanroom
- Follow instructions when launching the installer jar. Or launch it with cli.

1. Make your pack Cleanroom ready.
2. Install relauncher to your pack. There are 3 variants available: [official](https://www.curseforge.com/minecraft/mc-mods/cleanroom-relauncher), [unofficial](https://www.curseforge.com/minecraft/mc-mods/cleanroom-relauncher-unofficial), [improved](https://www.curseforge.com/minecraft/mc-mods/improved-cleanroom-relauncher)
3. Configure the relauncher. All variants have their pros and cons, choose what you need.
## For Mod Developers

### About Cross-compat Between Forge and Cleanroom
- The official template is [CleanroomModTemplate](https://github.com/CleanroomMC/CleanroomModTemplate). A porting guide is in the [Cleanroom wiki](https://cleanroommc.com/wiki/cleanroom-mod-development/introduction) (WIP).

- Cleanroom mods (Fugue, Scalar) will be ignored by Forge, so then won't crash Forge
- Jar of Cleanroom integrated mods (MixinBooter, ConfigAnyTime) will be ignored by Cleanroom, then won't crash under Cleanroom
- The version of built-in MixinBooter is configurable in forge_early.cfg
- Scala 3 and Kotlin 2 are both usable for mod code, through Scalar and Forgelin-Continuous.

### Prepare Your Mods for Cleanroom
## Development & Build System

Some mods are obsoleted or need extra handle. See [wiki](https://cleanroommc.com/wiki/end-user-guide/preparing-your-modpack#incompatible-problematic-mods-on-cleanroom-launcher)
1. Clone repository
2. `git submodule update --init`
3. Install a Java 25 JDK
4. Import `build.gradle`
5. `./gradlew setup`
6. `./gradlew build`

## Build Instructions:
**Run `git submodule update` every time you fetch upstream.**

1. Clone this repository
2. `git submodule init` then `git submodule update`
3. Import the `build.gradle` into your IDE (most preferably IntelliJ IDEA)
4. Once the import has finished, run `gradlew setup`
5. Run `gradlew --stop` to stop the daemon and prevent ForgeGradle gone wrong
6. Build with `gradlew build`
| Directory | Contents |
|--------------------|---------------------------------------------------------------------------------------------------------------------|
| `module/minecraft` | Patched Minecraft. Sources are generated by `setup` and are untracked, only `module/minecraft/patches` is committed |
| `module/forge` | Continuation of MinecraftForge |
| `module/cleanroom` | Cleanroom ecosystem: Boot/Loader/API/Implementations |
| `module/kirino` | Kirino Engine, WIP rendering backbone of Cleanroom |
| `module/builtin` | Mods integrated into Cleanroom itself |

**Remember to run `git submodule update` after everytime you fetched upstream!**
### Patches, ATs and SAS

## Development Tips:
- Change vanilla behavior by editing `module/minecraft/src/main/java/` only.
- Run `gradlew generateMinecraftDiffs` before committing, or the changes will not exist. Patches are written to `module/minecraft/patches`.
- Run `gradlew applyMinecraftDiffs` to rebuild `module/minecraft/src` from the committed patches.
- Such as after pulling from upstream, to properly update patched minecraft's sources.
- Keep patches small:
- Prefer one or two line calls into a hook class over logic inside Minecraft.
- Do not import classes, rather fully qualify your references for patches.
- Access transformers live in `module/forge/src/main/resources/forge_at.cfg`
- Side annotation strippers in `module/cleanroom/minecraft.sas`.
- Use SAS to strip side annotations rather than patch out a `@SideOnly`.

- Only modify `projects/cleanroom/src/` directory if you want to change vanilla
- Run `gradlew genPatches` before commit, or the changes won't exist
- Modifications on `src/` doesn't need generating patches
- [Tips from Forge](https://github.com/MinecraftForge/MinecraftForge/wiki/If-you-want-to-contribute-to-Forge) are still apply, keep the patches clean!
- The current patches is full of useless hunks after we switched to VineFlower, we encourage contributors to clean up these patches manually.
### Main Tasks

## Mod Development:

Official template is here: [template](https://github.com/CleanroomMC/CleanroomModTemplate)

A porting guide is available in [Cleanroom wiki](https://cleanroommc.com/wiki/cleanroom-mod-development/introduction) (WIP).
| Task | Behavior |
|---------------------------------------------|-----------------------------------------------------------------------|
| `setup` | Workspace setup (chain of tasks) |
| `runCleanroomClient` / `runCleanroomServer` | Launches the game from the development environment |
| `runVanillaClient` / `runVanillaServer` | Launches unmodified Minecraft, to compare behavior |
| `generateMinecraftDiffs` | Regenerates the patch set from edited Minecraft sources |
| `applyMinecraftDiffs` | Recreates the Minecraft sources from the committed patch set |
| `build` | Builds the universal, installer, userdev and MMC pack artifacts |
| `cleanroomInfo` | Prints the effective CleanroomGradle mode, versions, caches and tools |
Loading
Loading