From e11a18359c4898c3927f8ac54a957571aef3e5b4 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Sun, 23 Aug 2026 15:24:31 +0100 Subject: [PATCH 01/10] Let's get it started --- .gitattributes | 12 + .github/workflows/build.yml | 31 --- .github/workflows/release-to-cf-mr.yml | 56 ----- .github/workflows/release.yml | 30 --- .gitignore | 45 ++-- LICENSE | 2 +- README.md | 82 +----- build.gradle | 235 ++---------------- gradle.properties | 78 +----- gradle/scripts/dependencies.gradle | 57 ----- gradle/scripts/extra.gradle | 5 - gradle/scripts/publishing.gradle | 25 -- gradle/wrapper/gradle-wrapper.jar | Bin 45633 -> 47505 bytes gradlew.bat | 186 +++++++------- settings.gradle | 28 +-- .../com/example/modid/Reference.java | 13 - .../java/com/example/modid/ExampleMod.java | 30 --- .../com/example/modid/proxy/ClientProxy.java | 4 - .../com/example/modid/proxy/CommonProxy.java | 4 - .../java/com/example/modid/proxy/IProxy.java | 4 - src/main/resource-templates/mcmod.info | 15 -- src/main/resource-templates/pack.mcmeta | 6 - src/main/resources/modid_at.cfg | 1 - 23 files changed, 154 insertions(+), 795 deletions(-) create mode 100644 .gitattributes delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/release-to-cf-mr.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 gradle/scripts/dependencies.gradle delete mode 100644 gradle/scripts/extra.gradle delete mode 100644 gradle/scripts/publishing.gradle delete mode 100644 src/main/java-templates/com/example/modid/Reference.java delete mode 100644 src/main/java/com/example/modid/ExampleMod.java delete mode 100644 src/main/java/com/example/modid/proxy/ClientProxy.java delete mode 100644 src/main/java/com/example/modid/proxy/CommonProxy.java delete mode 100644 src/main/java/com/example/modid/proxy/IProxy.java delete mode 100644 src/main/resource-templates/mcmod.info delete mode 100644 src/main/resource-templates/pack.mcmeta delete mode 100644 src/main/resources/modid_at.cfg diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f91f646 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,12 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + +# Binary files should be left untouched +*.jar binary + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 0cb8c99..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Build mod jar - -on: - [workflow_dispatch, push] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v7 - - name: Set up JDK - uses: actions/setup-java@v5 - with: - java-version: '25' - distribution: 'temurin' - - uses: gradle/actions/setup-gradle@v6 - name: Set up Gradle - - name: Add permission - run: chmod +x ./gradlew - - name: Execute Gradle build - run: ./gradlew build - - - name: Upload a Build Artifact - uses: actions/upload-artifact@v7 - with: - path: build/libs diff --git a/.github/workflows/release-to-cf-mr.yml b/.github/workflows/release-to-cf-mr.yml deleted file mode 100644 index 61b2139..0000000 --- a/.github/workflows/release-to-cf-mr.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Releases to CurseForge and/or Modrinth - -on: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - fetch-depth: 0 - - - name: Set up JDK - uses: actions/setup-java@v5 - with: - java-version: '25' - distribution: 'temurin' - - - uses: gradle/actions/setup-gradle@v6 - name: Set up Gradle - - - name: Add permission - run: chmod +x ./gradlew - - - name: Execute Gradle build - run: ./gradlew build - - - name: Get Changes between Tags - id: changes - uses: simbo/changes-between-tags-action@v1 - - - uses: Kir-Antipov/mc-publish@v3 - with: - # Only include this section if you wish to publish - # your assets on Modrinth. - modrinth-id: placeholder - modrinth-token: ${{ secrets.MODRINTH_TOKEN }} - - # Only include this section if you wish to publish - # your assets on CurseForge. - curseforge-id: placeholder - curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} - - files: | - build/libs/!(*-@(dev|sources|javadoc)).jar - build/libs/*-@(dev|sources|javadoc).jar - loaders: forge - game-versions: 1.12.2 - java: | - 25 - version: ${{ steps.changes.outputs.tag }} - changelog: ${{ steps.changes.outputs.changes }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index f009a98..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Releases - -on: - push: - tags: - - "*" - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@v7 - - name: Set up JDK - uses: actions/setup-java@v5 - with: - java-version: '25' - distribution: 'temurin' - - uses: gradle/actions/setup-gradle@v6 - name: Set up Gradle - - name: Add permission - run: chmod +x ./gradlew - - name: Execute Gradle build - run: ./gradlew build - - - uses: ncipollo/release-action@v1 - with: - artifacts: "build/libs/*" - generateReleaseNotes: true diff --git a/.gitignore b/.gitignore index 6633c2d..52691c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,26 @@ -.gradle -**/build/ -!src/**/build/ -run/ -out/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Avoid ignore Gradle wrappper properties -!gradle-wrapper.properties - -# Cache of project -.gradletasknamecache - -# Eclipse Gradle plugin generated files -# Eclipse Core -.project -# JDT-specific (Eclipse Java Development Tools) +# eclipse +bin +*.launch +.settings +.metadata .classpath +.project -# IDEA config +# idea +out +*.ipr +*.iws +*.iml .idea +# gradle +build +.gradle + +# kate +*.kate-swp + +# other +eclipse +run +runs diff --git a/LICENSE b/LICENSE index a00e084..5ca98f8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 kappa-maintainer +Copyright (c) 2026 CleanroomMC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 7ae6903..559ef4e 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,3 @@ -# CleanroomModTemplate -Mod development template for Cleanroom, uses a custom [Unimined fork](https://github.com/kappa-maintainer/Unimined) ([original](https://github.com/unimined/Unimined)) +# CleanroomDevEnv -### WARNING: Custom Unimined Fork -May have issues, report here or [here](https://github.com/kappa-maintainer/Unimined) when you encountered impossible field names or impossible Scala compiler errors. - -## DOs and DON'Ts -### Choose Branch -Choose mixin branch if you want to use Mixin. - -Use scala and kotlin branch if you want to use those languages. - -There are 4 branches available: -- main -- mixin -- scala -- kotlin - -If you want to use non-main branches, after clicked *Create a new repository* under *Use this template*, check the *Include all branches* checkbox. - -### Running Client or Server -If you are using IntelliJ, **DO NOT** use the `Minecraft Client` configure with a blue icon. Just use the `2. Run Client` Gradle task. - -### Adding Mod Dependencies -You can find dependencies block in `gradle/scripts/dependencies.gradle`. - -No more `rfg.deobf()` or `fg.deobf`. You **MUST** add mods by using `modImplementation` or `modRuntimeOnly`, or the game will crash when running. - -Use `modLibrary` for libs/mods that you don't want to remap. - -### Non-Mod Dependencies -Two new configuration types `contain` and `shadow` are available, check more details in `dependencies.gradle`. - -### gradle.properties -Edit gradle.properties and set your modid, mod version, mod name, package, etc. - -If you are writing a coremod, remember to set related settings to true. - -### Reference Class -There will be a `Reference` class under your top package. - -This is used to store mod version so you can fill it to `@Mod` annotation. - -You should change its location to fit your new package name. - -You can find its template under `src/main/java-templates`. - -### Mixin -1. Rename json config file to use your modid. -2. Add **all** your mixin classes there. -3. Use `IMixinConfigPlugin` to control if certain mixin should be enabled. -4. mixin classes will be passed to the plugin only when target class is loading, so you don't need to call `Loader.isModLoaded()` -5. Don't worry about refmap, Unimined will handle it automatically. You can still `disableRefmap()` manually though - -### Access Transformer -You **MUST** write AT file in MCP name. It will be remapped back to SRG name in artifact jar. - -Rename AT file name to your modid before using it. There's an example entry in AT file, remove it if you want to use AT. - -### Vanilla Source Code with Comments -Run `genSources` task in gradle. If it didn't work, run again until a file with `-sources.jar` suffix appeared. - -If you want to `find usage` from vanilla like RFG, just change the scope in IntelliJ settings. - -### GitHub Action -This template comes with three workflows. - -`build.yml` will build and upload artifact for every commit. Useful when you want to provide test builds for debugging. - -`release.yml` will make a GitHub release if you pushed a git tag. - -`release-to-cf-mr.yml` can publish your mod to CurseForge and/or Modrinth. - -You need to fill in your project IDs and configure your tokens in GitHub repository first. - -By default, you will need to manually trigger the workflow in web page, but you can also enable tag triggering by merging the third yml into `release.yml`. - -### Credit -Thanks @Karnatour for fixing shadow plugin - -Thanks @ghostflyby for making kotlin branch \ No newline at end of file +A mod development template for Cleanroom. Uses CleanroomGradle. diff --git a/build.gradle b/build.gradle index b596bcf..3e45d09 100644 --- a/build.gradle +++ b/build.gradle @@ -1,230 +1,29 @@ plugins { id 'java' - id 'java-library' - id 'maven-publish' - id 'com.gradleup.shadow' version '9.5.1' - id 'org.jetbrains.gradle.plugin.idea-ext' version '1.4.1' - id 'xyz.wagyourtail.unimined' version '1.4.36-kappa' - id 'net.kyori.blossom' version '2.2.0' + id 'com.cleanroommc.cleanroomgradle' + id 'com.cleanroommc.versioning' version '2.0.0' + id 'com.cleanroommc.tokenenvoy' version '1.1.0' } -import org.jetbrains.gradle.ext.Gradle - -ext { - //noinspection GroovyAssignabilityCheck - access_transformer_locations = "${mod_id}_at.cfg" -} - -version = mod_version -group = root_package - -base { - archivesName = mod_id -} - -java { - toolchain { - languageVersion = JavaLanguageVersion.of(25) - } - if (generate_sources_jar.toBoolean()) { - withSourcesJar() - } - if (generate_javadocs_jar.toBoolean()) { - withJavadocJar() - } -} - -configurations { - contain - implementation.extendsFrom(contain) - modCompileOnly - compileOnly.extendsFrom(modCompileOnly) - modRuntimeOnly - runtimeOnly.extendsFrom(modRuntimeOnly) -} - -def remapTaskName = enable_shadow.toBoolean() ? "remapShadowJar" : "remapJar" - -//noinspection GroovyAssignabilityCheck -unimined.minecraft { - version "1.12.2" - - mappings { - mcp("stable", "39-1.12") - } - - cleanroom { - if (use_access_transformer.toBoolean()) { - accessTransformer "${rootProject.projectDir}/src/main/resources/$access_transformer_locations" - } - loader "0.6.10-alpha" - runs.all { - args += ['--username', minecraft_username] - def extraArgs = extra_jvm_args - if (extraArgs != null && !extraArgs.trim().isEmpty()) { - jvmArgs += extraArgs.split { "\\s+" }.toList() - } - if (enable_foundation_debug.toBoolean()) { - systemProperty("foundation.dump", "true") - systemProperty("foundation.verbose", "true") - } - if (is_coremod.toBoolean()) { - systemProperty("fml.coreMods.load", coremod_plugin_class_name) - } - return - } - } - - defaultRemapJar = false - - String jarTaskName = enable_shadow.toBoolean() ? "shadowJar" : "jar" - - remap(tasks.named(jarTaskName).get()) - - mods { - remap(configurations.modCompileOnly) - remap(configurations.modRuntimeOnly) - } +cleanroom { + mode = 'userdev' } dependencies { - if (use_asset_mover.toBoolean()) { - implementation "com.cleanroommc:assetmover:${asset_mover_version}" - } - if (enable_junit_testing.toBoolean()) { - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.3' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - } -} - -apply from: 'gradle/scripts/dependencies.gradle' - -processResources { - rename '(.+_at.cfg)', 'META-INF/$1' -} - -sourceSets { - main { - blossom { - javaSources { - property('mod_id', mod_id) - property('mod_name', mod_name) - property('mod_version', mod_version) - property('package', "${root_package}.${mod_id}") - } - resources { - property('mod_id', mod_id) - property('mod_name', mod_name) - property('mod_version', mod_version) - property('mod_description', mod_description) - property('mod_authors', mod_authors.toString().split(',').findAll { !it.isBlank() }.collect { "\"${it.strip()}\"" }.join(', ')) - property('mod_credits', mod_credits) - property('mod_url', mod_url) - property('mod_update_json', mod_update_json) - property('mod_logo_path', mod_logo_path) - property('mod_issue_tracker', mod_issue_tracker) - } - } - } -} - -idea { - module { - inheritOutputDirs = true - } - project { - settings { - runConfigurations { - '1. Build'(Gradle) { - taskNames = ["build"] - } - '2. Run Client'(Gradle) { - taskNames = ["runClient"] - } - '3. Run Server'(Gradle) { - taskNames = ["runServer"] - } - } - compiler.javac { - afterEvaluate { - javacAdditionalOptions = '-encoding utf8' - moduleJavacAdditionalOptions = [ - (project.name + '.main'): tasks.compileJava.options.compilerArgs.collect { "\"${it}\"" }.join(' ') - ] - } - } - taskTriggers { - beforeSync tasks.named("genSources") - } - } - } -} - -if (!enable_shadow.toBoolean()) { - shadowJar.enabled = false -} - -compileJava { - sourceCompatibility = targetCompatibility = JavaVersion.VERSION_25 + // Point to locally built cleanroom userdev jar + cleanroomUserdev files(providers.gradleProperty('cleanroomUserDevJar')) } -jar { - archiveClassifier = 'dev' - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - if (configurations.contain.size() > 0) { - into('/') { - from configurations.contain - } - } - doFirst { - manifest { - def attribute_map = [:] - attribute_map['ModType'] = "CRL" - if (configurations.contain.size() > 0) { - attribute_map['ContainedDeps'] = configurations.contain.collect { it.name }.join(' ') - attribute_map['NonModDeps'] = true - } - if (is_coremod.toBoolean()) { - attribute_map['FMLCorePlugin'] = coremod_plugin_class_name - if (coremod_includes_mod.toBoolean()) { - attribute_map['FMLCorePluginContainsFMLMod'] = true - } - } - if (use_access_transformer.toBoolean()) { - attribute_map['FMLAT'] = access_transformer_locations - } - attributes(attribute_map) - } - } - finalizedBy(tasks.named(remapTaskName).get()) +tokenEnvoy { + set 'VERSION', project.version } - -shadowJar { - //noinspection GroovyAssignabilityCheck,GroovyAccessibility - configurations = [project.configurations.shadow] - archiveClassifier = "shadow" +// TODO +configurations.named('mergetool') { + resolutionStrategy.force( + 'org.ow2.asm:asm:9.10.1', + 'org.ow2.asm:asm-analysis:9.10.1', + 'org.ow2.asm:asm-tree:9.10.1', + 'org.ow2.asm:asm-util:9.10.1' + ) } - -compileTestJava { - sourceCompatibility = targetCompatibility = JavaVersion.VERSION_25 -} - -test { - useJUnitPlatform() - javaLauncher.set(javaToolchains.launcherFor { - languageVersion = JavaLanguageVersion.of(25) - }) - if (show_testing_output.toBoolean()) { - testLogging { - showStandardStreams = true - } - } -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' -} - -apply from: 'gradle/scripts/publishing.gradle' -apply from: 'gradle/scripts/extra.gradle' diff --git a/gradle.properties b/gradle.properties index b3b03d2..502a450 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,76 +1,4 @@ -# Gradle Properties -org.gradle.jvmargs = -Xmx3G +org.gradle.configuration-cache=true -# Compilation Options -generate_sources_jar = true -generate_javadocs_jar = false - -# Testing -enable_junit_testing = true -show_testing_output = false - -# Shadow -enable_shadow = false - -# Set this to true if you want to use old LWJGL2 methods. -# WARNING: Using LWJGL2 is no longer recommend, and some methods in LWJGL2 will be unavailable. -# If you are porting an old mod lazily just set this to true. -enable_lwjglx = true - -# Mod Information -# HIGHLY RECOMMEND complying with SemVer for mod_version: https://semver.org/ -mod_version = 1.0.0 -root_package = com.example -mod_id = modid -mod_name = Mod Name - -# Mod Metadata (Optional) -mod_description = -mod_url = -mod_update_json = -# Delimit authors with commas -mod_authors = -mod_credits = -mod_logo_path = -mod_issue_tracker = - -# Run Configurations -# If multiple arguments/tweak classes are stated, use spaces as the delimiter -minecraft_username = Developer -extra_jvm_args = -enable_foundation_debug = false - -# Maven Publishing (Provide secret: MAVEN_USER, MAVEN_PASS) -publish_to_maven = false -# Good for debugging artifacts before uploading to remote maven -# GitHub actions won't run if this is true, test this by running the task `publishToMavenLocal` -publish_to_local_maven = false -maven_name = ${mod_name} -maven_url = - -# If any properties changes below this line, refresh gradle again to ensure everything is working correctly. -# ---------------------------------------------------------------------------------------------------------------------- - -# Access Transformers -# A way to change visibility of Minecraft's classes, methods and fields -# An example access transformer file is given in the path: `src/main/resources/example_at.cfg` -# AT files should be in the root of src/main/resources with the filename formatted as: `mod_id_at.cfg` -# Use the property `access_transformer_locations` to state custom AT files if you aren't using the default `mod_id_at.cfg` location -# If multiple locations are stated, use spaces as the delimiter -# WARNING: Use MCP name in AT file. Unimined will remap it to srg name when building. -use_access_transformer = true - -# Coremods -# The most powerful way to change java classes at runtime, it is however very primitive with little documentation. -# Only make a coremod if you are absolutely sure of what you are doing -# Change the property `coremod_includes_mod` to false if your coremod doesn't have a @Mod annotation -# You MUST state a class name for `coremod_plugin_class_name` if you are making a coremod, the class should implement `IFMLLoadingPlugin` -is_coremod = false -coremod_includes_mod = true -coremod_plugin_class_name = - -# AssetMover -# Convenient way to allow downloading of assets from official vanilla Minecraft servers, CurseForge, or any direct links -# Documentation: https://github.com/CleanroomMC/AssetMover -use_asset_mover = false -asset_mover_version = 2.5 \ No newline at end of file +version=0.1.0 +versioning.stage=alpha diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle deleted file mode 100644 index 83f43b0..0000000 --- a/gradle/scripts/dependencies.gradle +++ /dev/null @@ -1,57 +0,0 @@ -repositories { - // Other repositories described by default: - // CleanroomMC: https://maven.cleanroommc.com - maven { - name = 'CurseMaven' - url = 'https://cursemaven.com' - } - maven { - name = 'CleanroomCurseMaven' - url = 'https://curse.cleanroommc.com' - } - maven { - name = 'Modrinth' - url = 'https://api.modrinth.com/maven' - } - mavenCentral() - mavenLocal() // Must be last for caching to work -} - -dependencies { - if (enable_lwjglx.toBoolean()) { - compileOnly "com.cleanroommc:lwjglx:1.0.0" - } - - modLibrary 'mezz:jei:4.33.0:dev' - - // Example - Dependency descriptor: - // 'com.google.code.gson:gson:2.8.6' << group: com.google.code.gson, name:gson, version:2.8.6 - // 'group:name:version:classifier' where classifier is optional - - // Example - CurseMaven dependencies: - // 'curse.maven:had-enough-items-557549:4543375' << had-enough-items = project slug, 557549 = project id, 4543375 = file id - // Full documentation: https://cursemaven.com/ - - // Example - Modrinth dependencies: - // 'maven.modrinth:jei:4.16.1.1000' << jei = project name, 4.16.1.1000 = file version - // Full documentation: https://docs.modrinth.com/docs/tutorials/maven/ - - // Common dependency types (configuration): - // implementation = dependency available at both compile time and runtime - // runtimeOnly = runtime dependency - // compileOnly = compile time dependency - // annotationProcessor = annotation processing dependencies - // contain = bundle dependency jars into final artifact, will extract them in mod loading. Can be used it as jar-in-jar - // shadow = bundle dependencies into shadow output artifact (relocation configurable in shadowJar task) - // modImplementation = mod dependency available at both compile time and runtime - // modCompileOnly = mod dependency available only at compile time - // modLibrary = won't be remap but will be forced injected into classpath later - - // Transitive dependencies: - // (Dependencies that your dependency depends on) - // If you wish to exclude transitive dependencies in the described dependencies - // Use a closure as such: - // implementation ('com.google.code.gson:gson:2.8.6') { - // transitive = false - // } -} diff --git a/gradle/scripts/extra.gradle b/gradle/scripts/extra.gradle deleted file mode 100644 index 106911e..0000000 --- a/gradle/scripts/extra.gradle +++ /dev/null @@ -1,5 +0,0 @@ -// You may write any gradle buildscript component in this file -// This file is automatically applied after build.gradle + dependencies.gradle is ran - -// Helper methods (assertProperty, assertSubProperties, setDefaultProperty) are -// defined directly in build.gradle's script scope and exported via ext. diff --git a/gradle/scripts/publishing.gradle b/gradle/scripts/publishing.gradle deleted file mode 100644 index 94a8e45..0000000 --- a/gradle/scripts/publishing.gradle +++ /dev/null @@ -1,25 +0,0 @@ -if (publish_to_maven.toBoolean()) { - publishing { - repositories { - maven { - name = maven_name.replaceAll("\\s", "") - url = maven_url - credentials(PasswordCredentials) - } - } - publications { - mavenJava(MavenPublication) { - from components.java // Publish with standard artifacts - setGroupId(root_package)// Publish with root package as maven group - setArtifactId(mod_id) // Publish artifacts with mod id as the artifact id - - // Custom artifact: - // If you want to publish a different artifact to the one outputted when building normally - // Create a different gradle task (Jar task), in extra.gradle - // Remove the 'from components.java' line above - // Add this line (change the task name): - // artifacts task_name - } - } - } -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f8e1ee3125fe0768e9a76ee977ac089eb657005e..eddabd2eef8d94a5437d6168ff9c87a78ff725b3 100644 GIT binary patch delta 39258 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%0D}_YK{Q?32MR^ESETLLJ>zQ@qcaOVwT<` z8gxsI$x)bqxxwA@nEM|&zM}g6CC@y<(_x^&5ZMxS?%gK-YOj$X`X6XIsID}DUIWmS zywQh)IWh!rN3S6r-Wm)z4|{CIs-R|Lw*|HcxbGjD^jUs z%k$O+6@=$W|0$ z!K7)!$tk%cYtzzuUJV_q=O$S@;`{Az<(>kAmsEhq0`7Le0{#brHCJwjtvtQwaKzS@ z5NVJ56x&!1pIbZ08p3h~*dYk^FR_AjYHcy4Eka?PiEdd7K9sNNPh7S?NW#E3x@ zCey%p@Ot*RK8-R~@53|mZ8^)@E4D-gvMjTf$bV;Dqj2OaxFL2bla@{WJ~eQsn1k<*W*0D{kv#jJymHXsTX6}7TI<&l3!Kn*-#9p_DK61+WKi4X zlLs4eNF|vLkx$h3Q+_5+`y$hO48gTzDTr&Q>Gw~E@TV*Uu);s_U8FV7a8^Y3}3er8GK& z)VjgYrxLpjf86AbzqYxX@zaul3bkb7B@`d1k&FdEOr6E(eO}oDA`G@FMW!l)(8#dA z91U|<*yCg#gqC^^0>+0#ua^J7{ZLqOa8rG7RK5Oj0gRGs`6*H5ntylb5Ajv-xJDhR z4&*Pi?0VX9*+#xH#Ci`>Ad4e6caGIPqI)ehOGd5#O^DbV#8&rld%;HHbkNB@s;{ub zJ=}2x#vW(0kL0)@trD2$ng;?AIDv_gkQ?`OyyDVk@K#eHv-8rbNhFrONP{k_ufusV zH|53^0Ie`gmeJW#=_`$0(9w%AWEWd8ZIPkX$%d^?@NR2CA95QN(p8qFy#XH9cpjI* z_D!T0P~4-)4~AXC!tacHJ~s#2Y}=P2g3v>r5L=sMn;=<~jsaoI%7%I=_sLNCWw#jU z4I&uOG|2iB_mbwW$TIR|Xm`PU8`DD@ZZY;arv1$mU!|=dSo0nOxD@(`{RW9hc|866$ zygwR9WIj53ERWPuPcPY`jUP1l@y0u(A|7<(^ln-K{B!@U<5*!0;r;b50fIU&*?iS! z#@u#7-s5)BgueQUSIdX}-8sGi)1*l;0K{H}TSjhIXV=OV%Rb(PK@UtCXeYG&Cn}U; zZJ`o~mU@iH9|3CkaHi6v(#fgVuF8+S@__Jki0Z~B(zdBO?qPpxLQ+I#zQKK3{5{>! zt@a0hp(XsnmcquAXZFs17~ic^a_SYD@g~88VVHf^1_P;q9I9%OwrAjx%KxPf zsQfTfF1~Fx#Urw?bwu}k1OWd}l_Tn#oFjdy@^5heE0{9Us7a!t07YdiQMACRAS5OM z7RExO&Pn)hOzt8c(B@*1xgte)g3k{NC{s@X#r{^18E%MAZ!8g5_mL7%^u?VK_Y_$we>9b;;uv{cUknOvPyeVMa! zPZ1_^&0AYl$g`HvYvh#7R?qPb>#T|@OBPe94Lj3d$|EhTb|&?Ab}kR(n_Qy1G)FSL zE~;a2DkoohLE>ZpZcZYDkOy=-t7qwiHbnJfZ1Q)U`i0O4KyEKvDlR(luZ`I^IdxkW zD3Th|ZxsBfS-=>iOUG=szrrg6Lcwtr6W_J!8e_nL5S5<_b%qRQmVP?eHl#OFP%shv zMJ<{HiSIfSa4#d&fPqA&OagI_72`l0GP@3<f_rUo?F*Kc58v0Ce28Bx4X;^bD@$V@2g zTIN!meqe&0b7VRWon0oFmIz_>kfl3BW!7fvYPn5Q6OVt7ap}JM2rg-Pk?48jW7PD+ z_GvP4*@Hk97(@YOy34fpd(QTA;PK6JPtOO632cx>E5PgVZ1!m)5nWPfBG#dpvhawa z8hvpRm&>r8dp`1biix&u$g>8EkA5V@%z$|RY}Jh3IL6}ut7}xBGJMv@h<=b8-CQ~C z+G)m#R=+ZESXg_`6C?XrE3q&szsu2j{V6Ar(TEM^^M`JOMv%%ppZH{>6lPIc(xPvn zg}t8`C&0l8KRTD!i9Q^nrJXtV5Lm5h1@8ph!9VOw0%4nT%?i5#E1Sa(kx15yIoZSJ z-Os?+=VE5NkQk*>3QJM2+fupQXa?>AGYeK>@iL2kPT|Vy#j&>*GLJx%4sP4WhTKJG*F-VW0i2O>&}0~Ysg9)6yeSrCrOxWrc&<|@ z<=`G@r_a>PUED7*a51isWatNKZ7~13yiWVDqmhLVO?#vK#8}OjDcZVo;R*Bv$djkJ zgbe2jWc96X=@1I7YW_iR-bo>)y`>2i#I1KPw$YEaL!5(c3=lmY3+T3Bq~!OuBinrl z`B|}s&b>CA5rZy_RnA#X9B7?*^FNZgRZ0BwpgY6WGDm+Pfeij0MsEHY^sEPS>hWPKC3DOC-4 z5$KlO%qUFole%}hLJ8edY{K(W0={RTq$@sh7X-}#Zv0+e7Wn0fFt=MqkJX=yTu^T? zZ|XvUu$?|xz+#aT)?Zr9?AFn3tx|qdqjx{w`Q&gEqkmoR2F@yxvb{u8161$rYN?XB z{SW!SV;qqpvZOb>Xy^n;k=e)8gt3-?r3RwoSvza2YEx=&Jc+vpd7v7^W)KKC9+{x= zvEE1O7^?9*Yg0&f(60~<{cM<7V%{FyS6d_GFl2z{Dayd22KWf;almFqkMO<=_^?&BX(r zozi5mvI7_8R}?Yz6&*$2NVTN=BqmSHh5*<{^+-fdUfFT~6Wqde03HLS`moF59e9d@ zLav0@9=Kb^%?j1@$1aGvw<`3Uog&PFKvCz2%npnMom4o%i@LxAvyMs^6~r$=oLvh+ zOpyV$hMv{$#DCgWXZ>Q$gxhL{x{JPI{@{;#4Cp5a{^|8Nt>m^Hw(dFMX`hBcx=|p# zBIgWV()#1)B9@{C04~uiG`m2C{!ZCHC^TiP^#I)4VTWX^{Sb?lili+XwUV-zB*`!x zn)UQ%5y4*lCVZQGu9fl%x#v9coHG#6KOxi2OmacDKQI|gI1l*g@K`ft89<@tyitJxdzO57hZTM)G|fDA~zI1BqaBr_?*Y?f4V?J^81%4AY{iPf;64y3ZM!G8R4S9k6UTZmV+~(XzWR7{!Zl0 zHzF~z-XDA;uZ4tNka-vGdYF?FdVqb9)(nK#fR6epoy)^XBJ}xje~vGMEa5CY!RkmB7_WUi%L@h%p>l82nc3a+ zzZ>6F57XhvzX{hpA?v7|ue6f#=yXq>c%C&~ul#LCi-aBu?LqlZu5n1dMFYONIrRTG zeHm#LfT8oe7G4la)c&yhddfGIaAVAG}< zyIKCvOLoTigc}4qd)lQnED{jInJ z^2Ap_v*DBVRFZ3LqKy4cY8?9|BGb^d^B1Ly_Jb81Q5oGa)vTPnoGhMh5-@X+UJ%i* zz07?CU_0rGroc`bV}$_t^|Pc(*V(mC%}lkrwq(SJ)5F?_;LW8-nCUz`r#2lDB)Ahj*(nJ;BV}}w4BlU5P~t3K--sQui^!z=CN~8zKjV+4vwcCc1e$;H{fWk3 zi+k`{c*@ud7UWU@VHgkhb4tFO1W&+cI=6;IPZm}bgm7vUxBf#}kjCI1Vap@~5cRC- zyg$^?zut9dv(LEvQ#{eTkW^A8YBjdN6JA-La@x73YBO%|G!jRaAAGz3V>#gk?h~L( z1eB$prkmh7@#nrUT{%YXlp>kqQ4LR46L#jU;E}h=DU`@ij>{4zhS6@IZ&IPk;;<_m zQ#X_*(x9^GIRS3*BFenkhrL_@R82o`rDZ{u{G3$k4{@VFBj^vMEu=AL#8ueseWky& zM1Qd_v(x_2T;pE7ng3dOW%2YU9sXYGmg(QIZlpp|DAjt~c?Vf>*eUj^W3)Q*Kr($) zij#6&evm4Z-61&y7~FZxQ?*YgE&8Zp`@2I9L;deYvVSXSXl)rF+HCMkbz^`w-sT8C zTZ#}dDPMwRPme;oE^QPiM~$Q(+s=>ZRG7TSw$yAFx`83Z!|w%k?I)3UBv44yTnXKe z6JId(g8A`(ul5Xn(|ibjJ?Vh{|Ew0Gyf{Et`M(gN6QTlsX-Ml%cTD-bm_BwQ1dE8F ziU>Sh{cWFt70cy`N9k5Z$e_#~>FumFw_YL5FswLZ-|i-l8~He;m6 zC`n*>qRv9Tn0f(O4LR`1tFbV7*F+TR&&IR1knLi489%-fe$=UO+dHwuY{%$8wvQhA zcj`buwSpnr88Tt?nWIRY-AZVesnQ#s-{**!D607R#YPvbFOc(-@PG`ZX&(TF!b4@> z5gy)Vi?K*6kI_#$RL}N%A4#uEs!tXeS7$nhC^+wq_vAz3v@ZJswYsris8OX^m*_VFNLsLAlU+Sb{s>v zvk^JjU2@5{Ls-=>hVKaN^&j zY^)sn2jle^D6+gx;1|90ZHP$*W4;+%3IqjrX@( znovd~@oXBTHWVH|Ds_WR`8UHEPw87I3r}!qcTx4**@AV;GO_N1wBY!hKOh?*Azgpu`41{Gnm(`GGQd z(Ip^YN;*IZNrnGykm)T(6apVEk=k^%jwx(297*(+!`<6^#rJR;DSj|twZ6NFz+5qK zsae9_F{%F|sVT$}+TPKAUdwJiqN%#MN$cyV@9~!7Z|!AGDr)b$@hN=#`FWrB%=Z~^ zIx-W8(#v?T88V`jvj%86O+2F13YeUx$}F0?-936b^7)n{Us@%`k##C#jrr|1E~lZo zb81MHaT}eqY2W;>8UHpBakH9lM;9N@Tw=2uv22N}b^lf?eSNNfj$-Qlz>r3Cq-)ZI1!ak0hi+VjPQ2>*KETNil}Jxt_x?$+iOeOmM~NcaE}FN#WHYS$Z|( zCfDunDYNkO8L3mE8$Spkbz-xiVmSr8 z^!}>eIhe$nxK6aci!u#NfpeKxlX3a$_wgq+Aa^R5tYrW~+}(OhO=ACCQAXo7nHYk# z6sB%W>2ZLj|BQuP>Vz{X)(0%DZgJ#7@y}{Tplr~<^%NH(ZG6|Kt%1agA>^8(wcGhW zuHG@Wv+s@9uB|DjwvDMVwQbwB`>k!;wr$(()V6Ir{r}FBoa7`sS=reu+3!|XuKNQ7 zi=?_a+Z>A4csw`*l&i`C5h3vI$Os(`{nBywv1#;;qW9+Md8nl3CmrPgKh^nWmI1nV zBc#oCSL|kh;;g{(zB%1yeFcO)y$hILZiuJ5S5Fev8vla_*cEXC$77~6?Y(+>jC$-f z?}duw(>bYS090-@y3Yo_5YoR>D}qqcEh~yp5th>nU%mTp;=gc%U~D=QJvDmgP!B9Y{3_wJ~T9nlTtN62IofUelL33B8 z4bfcyCXZnGJC_G|&UT+naOvqh0^D$QYN%t9R4e<ktjcY?)|+g94mr zm%X7DCZw#?F8Ytwtoqd{u|(WUCFxlcKqF*NjYeOu*zo7k3fn$l-yb3bA0rI~b$vHq z`oqQfD^+;0_c|W+euVcuFF&g$@jby`6HtDlkWIJi0HoWCL5T~UWG?GU-kq$o`9S*7 zZS%&Ye7t2sI?m<)B4~RWL&aDib!B9dHE@E@yc>NYKU37aP~iW9B27NCFH3z0NN~BB zQsU@Ut-yFv65h#yRhdjG?nsp)ZJhoH(pv@D^OU(w0q*qeF+ei2nPJ#aQS5imm}oTn z=;{0SIJiAe7PnhDz<#|T_QJ(KBH*f(FwaL(WIN5#_O~t_aEJeRz;{|g?ps6ood@m^ z?sv`LEv2bXFww$4l&C!ZPFE!cP*gHcU#pb(tqj}wv3=v+blt-|E2{Oa_lN#rHSO2b z=XV~&2gsLV?Ma^vC|~Zt&F`i&TlZQ`*kQmv0OZH0(tyRpWMygkZAez_HaFLJn0NFf zi09%Mn^g_QKpNpjkakT98?88rb|EC^l|E2BcpdU(4rKNrL5EAB7G&T9c&89wrIUT$ z6eW+8p=?jF(N$t&{_3(*H})<4&4d=T|S|c|cPyYE&uXUzKK4fto*y(KASRsdi8-91x3YdP@QAx z&75^N4W&GBp7z>#S2<0a7wOE`u(3g9+#F##F*(w3nYccxpAth`wrJM|SFyh*Cj{4G z*GSF~faz9u=Xphwi!_8~sRU=K`dI6-a;Z#echt^svb!;vep^KVwvztwcG!HKxlkuz zGR@)bVTYEJwWG)pUvrd zDjT{b*jgCS1m8}5jDa^n&bgsE2M5m0m$ad^Xtp& zFu21%q^(n_l%gBi5o9nD{xQts(_#oN>lg2tVyiA*3U3`rT#7HOVxlIl)Nz%p?kd6J z)V9p`7N)9{b8F)&$fkiIL_F26#7o^Pn5*Yssf8nVXS{KHECHaCK88k{dr|7-ueF}L zGR3x^=Eg&S%IA*<(6lEhNs+2iSGn`aU~5q~@`fNA9I;|Y$_}H$+Q!3Ic@Y z^N^WcPM%fw$U|<)d-MrhUDH=`YQ>j>vS)@d{ ze-52#__T{}<{HG9Z?K_lSPxlHZaITqhkqUIx70rY%vA-S^)|y|;-2}9)c{};CKq1@ zZ&1XO11wIa4d7^u$E0c8+bcf2L$54?@W);;4XJ<5EH`jd5=T5}?QmX+Tt&MhIo_I% z^f@dK*3R#_5rIy(udxWmfcu``JJ>ac&x4+#W@Kc}JDzWysH?8cr|7&@viqU7FdpUZ! zdD;GgC&c@h!42VkX4g*~C$cGOU-{VX1*fvu4VpN`UVCLb@!$gajGS?JV1HC9_Xe&_ zhva(anZTmh4m1)gU}&Ki;#s%BFRC|Y)>sdK{Y!CC{<0H(3+DycUvWjk_za&8Sg~4$ z@cO_M8eMV3-%u^^*iznQ@P%Q6a=Q>mZ0qp&7Wu|v{rU>R9P)SI-E z^o)M@axQ(j`3bw9*P_q_=i0;LAITQBrAMa3OD}ke81C{uPiOTUZiX2dZVK^5bcG$D zfJ?-#foscueN$eG6pT<2Y^d3zJs9{5gM?-{G@qB zg|BU(5iRieA}d{sRw7QC7?@9yf_SbM z4U{xsk^$sjE3A%~jvvwK`Zwp0I$C#U7WH<94&&&BmBIvI100kOb(>`iQp*_FI@O?Y zl6+Lq&;1#t4fPLRd~H5YGWtO2aJ)zwaVu=53Vqz9H63Pl7MYOI=;5ZIxk9<~f^1aA z$!hyKBFJImC#qL^m60$u&z0XwU?ZNJOfyj3S97dYR;)FoK)p63S$^!sIwN6+fxL&o ze&NI5+W;>BGiB4%E_2Q~{3Ukd`tl}(1Ao^2o7C#GHBkEOTmM@>80fQ;P$T{mH+$fj zx~Q~BzTIhtDK(1-XyYt$qU+<5OZlmFZjT0@!uL?n4rH!ApY*kG_=Vzk;GL#bEP`| zV2s~V90n(~z{FwzZ&7DRMes>Vzve9CTc*_W_dMta($}GCSUlb~Dsgmm-BvHGmWyf) zm48q{Si1=LsYYQ^^_)<|#<0H~oAo!=m0N1Fr$6f}REtdSpsIPpwViIkmyBXFR_#1( zGra{Mk6maW=wQYDRBO#Fg=f8p$$|nX%kLz7#~Z2pgi} zd!@DM{$xE}Pqtj=^nkbp3J1HInog}@pNDpM|8ie$KXj==n^4xr5zB_4suw(j4!0x( zmjxsBeo+Y1p+pMz60_WeI`1l~nM(C80sPy4?k_RA`$gl~;s z01|#fCv#hy|7XPhC%R8&fB`NT7slygkXZ=luV%_XDn*CA-$Ec5a%R`yWqpx#Vk0Ot zW7xmFUeFsksGkTvn(v&?@4M%jV+mC6VbOx&yVd;=5&i%M8v6 zEWt@oj()LDE&a)daKHnZi*n*Uh<0J!gRx59j8%@k^$8W5VmJJ2PtQrFVQmo-M-o48 znshPqD=!eC-ph&;|3Z~BiQZzMLK1Kk@gwrAC(PNEEbsLah_$y%!TYlUJE~p#FfCPx zbJ1Gp7YNjqXBfCH98?qHtFY>G6v$wmL$E28`U%ouN z1RSofU8i5Oyk9quWw@Wfd>v_u0zv<2HMqY5lF+mz>|(HBm0zg*H_;x^_-WTLqAA8| z(eFi?V#m+z|Kw9aC$V`Z1+uMFKs=Ku%n1e6Xoit2zJ+(=*(#mh2ZKkU5jwBl&91^> z>t+vK%Lo&7)~ZI4r&7_=*s{0mUN}-$yZAymgd~SUE;a3jN|Y|{@kH_1lcLIFKMy4V zx_SR>wNATTvTUy<+DZ9G$$6yJtC~kr)MXDxX{VI+6@qc~p&xqpn=f&F7{23C_))&LqK* zRjX&A23>h;?lp_G97f5w`v5H(dC6oCz!*209Hi;b9Lpui6rs?s_n|dgi9|~v#ZpX& z(qwy2o5g80o*dTlXLc3sKMl+;Y<6}$2WwOj(ew>sIvPlbS*FVKmzy+osihWDk5pG* z)UxK14`Vi>8BViGvSFS3iOcj|^C^pG4O%qVronv;t^QZ_B9l>x)>r~)Q6q#*HS04Q zcxDG3c66C+J{h(Gx=SJ0<#97WKWG0#ck5coU_+k3iV_9fT~XO>j>MocD`xd%eajvZ zrtr$&QcuKC~6t zdpXWYVx4s9G@YISp?^y(q>P-wk=OEw%LNjN3o?x|Jc1Tyw7{~AqQVL-1qGO>0yA3{ z6wJG=px7{a-&Utq$<;{=Y0@VL*4ZvtoaagMR%^5DDf0544`P~9EtBC3vZole`LIy- zTxj`))3v11vp|#T$2v}c3#(S~AT_QYIhFZIgk@!~k(xAnFXNFBeFO!O;Rwn{d#7(_ zNj@;TH~mvs?UrmQ=O3bAc2y{{8kUAK%IF&-^6FujI!E}vg#GkBvDABGmhwRX9~T4> zF{qI?8M!r*eW2=N1{I=T*4xV~*{RL+&2zI<)+z7H0%MQH$;v8p1 z`9SWbF+_TnT`buJ$-}9VaEnD_7t!yEKQWFY^$NmuufLJuolJt!xp-De1fx;pD;FahHx+t-JSU>)J}JBJ(H zXTs}82`nOq4H{pf%9w>aidIrJ(d|zNbY4S;2s1!G4oXx_qVwmkHr ztxpWJwYvhqMzj>7WBg<~l>TX$K6@q0rtM?=K+O9pR7eAG#!JMX^5yWb#pDOt+CS|l zH*0U^u!JK+eze>gKL2skk(KqynBz@5($%d1&nQ(XNm6`0- z?7TBY??Ya{FoK23spIUg@6ML}+uqn-s(in2kF{x&$uFN2X@JPlmPk?!Ie4F* zUjpP-@u4NRxVi)R>_sMOsVg^7O`*3{yICz2(PtqQ{ zvBTSdH~6d8+dY*ZtPzBBbSOHq6YkL;kYvaom4+%hLkxI^{f(_J2HER6QaiIyz>5_nRk@q%;xtTw|KXGmuypF_+edm~J16iR2zCOm5 zWBK!4=5#StVMS^V3Z*x$=SB9yOf~Q_keyQ(H2wDt8^3Y3%|iFC3ac8cQhDkUBu!W^ zGEtEjpBbz%+9>9bFHu4+4=4&a+XEXEh`hi@{?Q>2>#Xn)jvR|EkP`S;K4b!zrlv$= zkQw7AR%ZEsoDt0Gk9N?HLW*%lsi3Qd%^dIuXK`hklXS4ma)i>-ZiBhY6&K1p5|!Iv z#$tHVIE%o}#4cZ^+&E!Mr;dT-hHtOq*OFhQ_+NY$azLK>yxina>HG1l*hQt|d zh$$t~-6`XjKG*|f7~^LTQ855y29GJxC0Dtq9Y_hvhMrlCGhhd+LwKqMYdR`7XvNG% zq6s+o)7P)VE-$?mr&#>QYn@sIlUXbt#GC{RkNxtS;4BCKJUoOhy#6X>Ul!K@spXl3*)P04c$0t7`e4(vkBsR>Ha-S)PZ%$MDFuP> zQG4!CD=w0A5M;7?P$TJFiBY?t(S5nUyIH4$bP(LA6W492A=@D_YUkZ3LmgQG=+NZ5 z6NYzl>YO`Nx++jv8en87v^bEYy`vTuBcE!n3+IA+;(B4vvpKM!oUESJKI@&^J1_OB zfF6s(R>85x>d)a@ywvk-iez0F16RIKhk%6f*QYEgM({ceGFHiLQjkp;8DGz=ilqt~ zHSCWyz}ePuKHwoXlIU$5j*DmVi^0W?y;*g=fb|Vter>UE9#93A*5(t2cW4$JO^XzL zEaC_e!|2fzt1g3_WYSC_mqR9qs`&72y}<2Yv5_9uVVNjaNKEtg=Zy+C{*(aMBfX! zAD>qhEJ_>ib;4L;2kKhPY ziVRvad0pRF>KM*rrIaj6ORxh&wFAEm>y?m-)FIO=rS*p~E0635_?T_j1MZc>YzxOq zKR4E(GVx0011_`sH$C|@NJ!;!BS}oOM2;P(;q>01BOqC5JL%Lot}KFhGLJpHLQlGz z%1}bd>rotL)g{vO9PO=}{Sk6?VtbMtcHd%R1_ovMHLmsQ-iTNKCF>#mWwI{SryqX0 zb)uGLc&4>Jk~NKkYpjO67MD$0^kM1=?Hnz6;hf$pT{ zq4@7Nwm$HB9pS>WNTL$W%0yQU=0bls!dpl!wjmZtBz6d8M#-c%ahI?y?B&Nq-+rk5 zs+Gy#{vh%&(}cftW36kn)tyWniRL|$4>E2p^l+xIwOa%QvK}W2xCuu z=oLd`nl$KmArbz+X!AH}k!2Ge%7YFq)C-D;2#K9Bvl7n4pUPKlC@Z9Agrzea(@W*l zHmaS9B3UI1dmuuDkFuq`Mhx#ASHPZce%A^+d2JYkQP%UIT`KISCC%4SFq25%nCXH+ z?*VeqhU{(t_3W>gXgs5j@O4ofFyIDf4-k*0Y-vZp@+?3@t_ zC}&kl3OJ%3AARah`TVB>MMLUH86vIyvYb1#FiL*S+KZQ1rbJiE;96j9in2k4uCYAf z1O>%pMiY22A|{m%gV(ARhh0zBM%_?X*aDIQhX|lCA{laDx4Sl2ewO?XFs>t0E;Dsa9nv`UOL9mN2CL;i@_noH~h zE*Wg7JaC--e3zUhL#CW9L!#HUoI~tAT^c%N ze)`;~H><(7cDLn8l&lGG(KbwTUhl4BC0Xr9Th_NSh zxT#_$VQnoA*$ig51spDySpgZVt4oW>;5gpDnRn;s7ezaSXwI8ob&(^qM*zlgn>Phk z96|`IX7p#B4;KEc=o9H$t6k*VT*s$rcKUJ<6 zO6e%^JCIXq(~s#)TJfdywN;cGudrK&*D*AH`1R0V6CZYf-DYfrcOO7o&?UIYH+BVQ zI5e%~M%iHrV>x;PFPd(H*XvcI?;KY3MX2xm7HaO6#j8@YKn`g)&9FHg+JrOX_om+- z@cF%9-hPkdZ8N~Ii2^XYU&hPtW7*WbZvMw35(69)>SgAMqo5bi)LjtSt->WF8!j{! zHYpb3ge`;L*A+YYVETa*dlMVDkE{c<)u#aM3_DYX#h)g2Nt}6x1FnxL<*RzP{i~81 z=;4@V7V3C>Z|o<%*EX1YwfmLW*F+YCq`nTg){II=2s_!%T^pWjnR&y7uFO*{!rRL&6I{G6>@(G*4S9i ze8R7p#XDvj@Y{?lc>ayt%2lwsh0YxNK)tK#>o;fc=~C}BJlw5eme1O-4KH7>4zEzp z@@b3t+b7azkxEHV${e5b8{2iV9a5``J!+?7g=TD6css%#n`em)rH>Pf+Q;%*G?S$G zW~*Kwj+&sTUEK-Vif=_=hoj@{11l$7Mcaymr4fqn*Vy|HJYr-~eW-6yHUCu1QmSU*}vdR5C;4p2h9?uM*?KR0ABZgt)A`2u}~0MX;oiWXHa7OOdu z8-ktNP#&t`Vx{YM;!{??Q>9)o$<6z#1cA%N{CW zs|Gs(9{~GfiEpY(iRzG_wOChQH0at9K>`<+qj17Boj12S5@4!=t=l1Pqwt5t?+rno zQ4$tHAUV$TI)){=#;>sja;Y1?VZqXF!Mo7BdJ;Zag=}7Ls%XXruT$cVlUIW!l9khi zC2jrXw6b4(^c1+x7SOu_sa+jex>lzP>!y`ZX1EPN@uaQcueAA`bcK|V|H0FQ)PFP{ zO}ge9@g4QxUNg*cwe6{r^j0GOqtz1Z&*>v|v(xTo$kmI(&pz>6IYTUhx6z1g1#Tx? zsx7Yl()FpN+y7qFQDbZD81;<~3cmy`oZ6H?Y3YI(H^}q7ZY|ry8{xe3O=65F5)6YM zb*p;(zwL^qVpq!>Y1JqW;)e2raE^``0^)=UKpG!syv|EV%RAn?^b~M;@B$`J0f1PyQD@*H5SArt!m(r~eNqZSbW9RCz$_ ztslBS-*<9;#a9l>;E>8A$kFWyHv6&2$hBIL6OuIx?t`f!G1Py!(hy0Ch$5G;P*Ydx z+O9QfgC0^uwp*HK%o1QTMOR_h^4qSALr@nv(FQeF&Q=u>Ze6>7w`Y!?cKhIycsy>+ ze12rBzLq2)@<|9?D_k45pYHSlF3-0+ya6Nn4y+(=L)$893)AjNhKlxvMpwRf3h1>J2^x$>r^Xl2p4@MsXcJLMPSR_$ z;3UT0LvoJstOL}_Mhw?N`gcWVW4wyH8F&`+)JbIoT)E-hsr)R4?Wx%Ceyy-vI%}!l zn00id$#A$$=AcbEu?52!0@csIjf*@2nPU;mY zC{E-ubV@>47Y=8`P8fgItSJEW2g|~n4nl~E$7j6&y?H4}S}CDmpL>jqO?M1jD^nj1tP}*{0naWjIVPHvqJSZ9sVkD^qBN;vh*Bxb) zxivWR`@V&r>Vu8BB`3hTB7y|=l+>I#U3!SgkaiOg8VnVLZP+1wODNU|y1nz7ZcUUR(kUQWo4&%2x?D%NWNJan@5vz{_QN}X#vt-7bk{zKOA@|XP58y24O9DQB=L6SvdVaSKDp+;^)&G|)Nm{Z~(lU3ICNilYqIX(} z8&xf7*z7Cwuj)K<+#fBtRPYmQm`a@_fKC_H9QxE>LgN9ykHMrmCmNLB(?%i-dC6Wh zR>`%gA@ih2n?%1R!bQ>__5#hwIl#1s>;&6hkovenXw2b5T?Q?EsB9X`S1t5I68xy$&JUE4@T}vJh<6X<#p_oaD~%Hx#gwJZh>2m_<$(1u z5S?6MP=Fr$Q34}$*7+G3l3i>|2#`t(izG21`(`m~rHsR6R9w6G`{;VoQUB$+Ku4u% zFpIczRyxw2KQ@Yf~Lv7ERv z9D4snm|b0uhXcq0Vq<1T0dxnPvZxb-Mf1tus(-D#RVoBuudKG{&P%Xei~}{zOZrM5 zx(@509Y!bCCL1p{w%Yn8SerZ4>p%&xiOzo7!R+GK%#$l1>lXDe!WCUG&RRbRAyn0m z%2DuV{M+hNOquN?A}n`MR}fYa)8AX*r{sK`JlyI25tZI@7x&^<08-$yV}O#T5egq& z=;;%sbZ30DRxkF3Kqfe;4M228C5=g`wuaDbC<}=KKzGErO--qWom4iR@|JR_1`a#> z2PWJ|4Xnvlm)GZ3S2Id3a3p_M0RQV?t9G{Mkuo}to{~P--Y^sI^rj)!H}@f}1Nvo; z!Uj7;>yAqHH$pzk1n~Odk4uyT*U~uRf`NowAmqI4tPx?^x-?+vo~0z_I@SU!r;(B& z#KlAmb0pEf){7Btt`&%zVr{#=(o_a8y)M4|)NFRPb+{$nQ`GR{S}?JYRLGyWP%MYA z*>_>1*Hfw(Mq6*u?k+P7`T5^60i^^3&C-}xT9d;B<)S(nz`0F$R0RiA7A?GM!#e6w z&2YJ$y0Xso-|T(uuA7mO9z%Wofiv}tad{>WAFt>WwlBYA`y&}sC_pdN2vs8;pWYp_g zSN`zV_lax?2x>jWw}RMCx(s|&CwK2$n-JUsizFmxS_*a-_n?$-$tp+8=dZ(!^XU z^E09Wgh&8oo99d#F6iDs@^}#!7-R(ynfG4Aa^7#Qrly6(BpFb%o`->K93nEGt-gND znKOYCv66y&;rwF5Wt)KY`G)n`GEdHodiaTPWUiKN~5Ri{7^@2@{0XN#-p|n zGhtScZhfgm%|NS{SFamuDOfQ=ZKeg@h_V0!2y2rh$Bj!!6~6T1hMF0x+ltvU2QFL- zRi^k-Y|Edjh&LrmUx*VVw7q1TH@TIu?DT+0liq{n3Re-Sk?R>Nk;p4`!!z?vD3#(^ zyhu{8{a&gQEpVqi+SBm}|B?sU{XDdVUmu5h#S+pb61oN>7A0`dpC3X5+Mas3vbkXd zxI;)1%^a033?SZteduv55(*ba;MY&me@E^g?t>H}GL~Z_4r2Xb%Sbz^RXa@c59PLD zh>O_e9NrS+wuA{!cW+bi$$MKwLmRmKoO27XoN z50`o+6qAstL#xCR|JU)GG){JbOmm_EkQb5TFV9LGZKM^MKGIQF3E_InT++ERttOb9 zvDGs4(5*<-9o~1}XfZypjgolpJ<48$59>0?S^9$C3^T z?p!I+@uFL)CRCW)azwIs(9`E-Xigp9T`CFtcHw!TSy(@C?jtLYd7bl%2jN*m{1uXiJKZ!T-g!RFh$V~-$8<+wh z6?v2tiQ27rN!&a9ZUh>!b;23NNQGl~NB>qCmZzFrW}QW#wZ+Cdlkt3YU0%HI`k;^m zo&@-E$HB#g$CuSZ3TJ_E-tX%H&Tx6vg{`^4D_!0?^L!uRU+fXjWNYg42$UsOcSWFi zc7A*}zQE0F656(yDunQDiR+RDPN1do$~s@+PwIavkWNdK#f1MU|MWm|R2lCoI5vXK zkG<#|n9^%)0|NQwB2$ieP>ph?vAv+R7;-&Mu}B=&E%;OaF< zegNU)La>Gv|JB#yPRUQm#;Y@dSsCX<;D}=KRVS+k<4__RP6+TFU|MG&?|D&Fx_LHt@xoWvo<+FS(X#>)#klNqz zOh#9`tWe>637kSs3F_f80$Bb+vSTr5r~W1YN}|fa6DjR6oy}-UNJ%HY^UT0G?4k#C zniom(fVfMt2_rUq3tWcu9?fS@0lTl109G$s2(HomqlWdIP1PBY*2#hxLjtK?j#6i^ zxz&0QL0VR)OvwenVu+C3_ME!`A8m5TSPC8?IXg+n$N@P|L2%Q^Qa)M7mETW9qz9LYog3&RiO_m(;PkBN>J1|sJ?1OK7 zF<+h~QdMCpI%=XAL~ONT0B|2F)4vM^_0f7_4ygO=pufKWn+v#@n}k9P$`OK3Mxqdt zNk_}E=8Rc{B(C>4GO^96t9CaZSvq%Wn z>ACJB=00xcV6nRHqNrCa+_oZyz1Mgci z`qN$?Y%HCjv+z4Jzj^*k^7hbLqiEPp8gwxVOjgrg5$FAxzbeFj-n;e2lKoP-S4h|< z8DI$5O^!@g-M>$D)&H*OBOmi=w72nyANFu~;9VzvFimih9JR4@o-E7ju@B1R4QY=6 z@#)x3D~Jiw#C4VFnmce^^P1fyA1TrCdqRA@l#QLRotZPuaB$LW6%|6Smz}+gY38)5 zlEI&D4N1@Nn*QTxcD6&}O^Czf@Sqy&n6wShakPmZez)r;^zT}QE_l(ALs-Xz5Z2|T zc?fcRP#*mdOSy%@WKf^|H*0Bo;SBcUP3&^SzgZ`zgbb1j&Wj1bL-DX+;n_d1IGLFv zhL7QAh|nLg)@zT}aOyzMng62hiu{I6e`j*XRcs7|tBOE-W44@yT+KxcGngid!ej&p z{N`i2(@Wac#jS_Wy!nf;`6Gd0JSS*J0bA@f{Cu%@Q1zmWS9c<6dl z`PBbM#()jRt`Fkc5B4J%Y59nbd%oAVqg~Wl$*uB+Pqz*3$j%KO7NxJ(?sOXCK{eCz z@EN7Mn%fB(c9ES=Xo(we`JQ4u*&P9>egF8<;`^k@$4qDW80f!nZ&Ej|7LP)HQwJ$; zwQh}z7TMyIlnkAdovd@bb-%p!gysNHb$#pcOE88MRC*P#^jYbp=K*HNAFKM3u01E% zId2G+mINzKnL3EiqiS2c+o`#1jt|>}?>HT)rJ%$6v%{yIS>+iY2pNdY9tHrfGYn~c zYj6$^NWgH(R!@`oTE2Aeu`FIv3=?yiU&&;?%hVP3CY|r9SVyMHX>+uOvnQ~2<@(eO zuX%@gijAv0pSMDYFX1MFqC$)MTd2*U;<7hPJ$vL6!)Dd{^W3Kr@{>05UjqAp?4_rh zMhXD@gXCS;HI1p z)vWDyBms9dW(zYBj^gKQN}D04R_tnL>@18$bGzguh&+E^A=!v<4Lts4!B*M}&lAR< z?o#pT>HRL^rq1u=QBJOqOrPU~#SHu`+wX^C^Lu+$|wd znJcUG-N=n80*~_q2|gD2j7m>~XC^W~3n4)W9jtVAq@hytYq6 z_|XGVqjIar4t#1PglNlG)~VYsoNf6D*RYL9b1xRKdm&WUSM8l=*mPa1&X&f;*4|Wo zziGB6?k$EsT^~T?QUAI0Bgi%+V7p=+`*dLbj`;(032w$MO?TM1~)V6dt zWgtx;SV&)KOBV$FUkiO`sB9FLn3A2clIgRJdxWU=lL!E(>Qe0a1Dc0|Xr| zsrf6v<*VO^LrOH@E!F@o=^e&UiSyNpqs@xFN5|L2zV)we!NH~Akp8bSuJ2kUAYb69 zmSXt7To8cm5>Rs(uXQ9baK_~wP1+N!2$pux&IkQQ{0_cI=AO{lceI_6f?nVmV%e@p z)LTWdXObm`aG>gvHZNY7#wNK7gu7dYsbfpIHK9=Jo{G*)`xGn?B&ZAYcJmq{(atZcIJx&=vT}OCMtPFnVC* z1y(yX`^}%|W-C^?Y@#}uG%!j?8}5X06Uke2yQBIYE2jUpwH#lnRNm(yHjo@P_?4SJ zTAPV%}-y-)TVn zoNWLRaMOHzZ1)l8vdRljK-lO+4^k;2#&zJ)VQ@mOUhhj%4D=%S`S3l@#kFK0w zc=Ue!l2o-Juvd9!uhH6}CHF6{E1V-!5O#odVV`$Hq`N7Gv>d@n{F0fIrv@jX7SU7T z&2FKZlc$u2VjJ4S4NGM@gilDk1GGnIDvGGuXuM%)R55b1=sv{kTt}x&GxR}CH8A+~ z$7QwG(vN%ZG-NCJ?o<`Eh$tA*55HzHccWb!r0{wbpV>y5k;4$%+{Gqug3`Idf_%WZ z4uxVGfqtRN*PMQ$3I%Pn)LqN~2#^jikemO{sr7=3cr)|))66?!8`}TzWcXn+YHs-_ zv#MI8>)#>V>_EHS zC@rZ&#mKV8Va1*MRbInqa1D%dy(&Oa?a=kTt6i$vUqtt=1K1%l1oc7B+a4;>C&kMV zIvHaBD)^`Mbn~-mTrs;}pB(53Xi@eL3k>;auCp&=!Z`M1*{YsJ=B77q%029ZrudmH zl%jtF0h)L20wa zuWi|#*I#h5#c*h68JVR5F{Qtpdzb&hQICJBHwE_(AR>IveVz@6*h#Od{PouEx?$?X z$?p^cQ1l|*x+JwRY@9d8CcKBO$yK4mkbEg!=4egk?!mH3m8TNUIw2R^GuPxQ=*G)f zqcXCaBvOktmVi~-j$7AAghK#p$PWFE=K~!UONY&0TN+Eo*CE%Op5%+onP)*pj%Pd} zl*A4vzbK(Xr^+e_eZPD{du{(hjV%39W6!I$_GfRjUj{xcKNq0u5DJQ24^}&N<@cq6 zx$FjVQV-~fI4C6aO50{BtDY(QWfz%UA-+~jP9fKb$`zQ*J*40tWrqMrI$NlV(&Zpx zAcvBrfD|5up(+r5-PCAm2@I3V8#D`~SNTKXYO{FB-!9&QpR4KY8OmF+zJ5x#=@Zsn zzE12U)e=+Co%lrQq0zEkeC+g&{3+E^GmqWwov;Anjzg?f`ot|QqtYs1Ch=l z-8E1e0T~j~Ej>~|kPwh=l#m8N;5YI4$-}dM_S)|Ie$PF1(nlpoMZW8SPKWz zel`b7gRT&9_wF;Ue(Eu#^hPN{=*@(;9%P1!ifR~{4C}q}C?UUyt&zS{V;u_JSJtm3 zQ?@h5dOOHnmXw8;`Esm0#}2j;8_DL%3hZTQDA>Ov#jzqf?4oTE)IVnoQkSsj%Rmky zP@5i-_&z{uDdv-f(qB__*LtmD&4dRcX{N(5@Iz~&cjlp`es3C5{>LqeFQPBij11{U zI7GBke`?a>saXPl9gPJ0k<%RIM+8uVH!JVBjel8|G`>t7CFguRqtNCdC{t%Xu9V@! z5xwdS;th2}lbi~pK8j2D#W%!SO2;KQ!agTcmGHgzr%OP+2lXB#b*<>V1{Sl3sIsBL zqng)i)3qaa^tm{yj}qovcCiL-o?^cEE`FO7GI+MesN7Za*1>Z z0sxR7Uca~oC5k|zOeCE(9k47_CD;TQVG$T|7vTb=KLuxT`#bzAs7TG}_Z~E13g`hL zo=8RsXK+s#$K&ec%q^?q%!8(N#ZLou#>Opobl{lq^t?Q#d~LhT&GQc1cN9e}d7Oof z_CByKsZqDc+G+f^=N9rN&sncj&mztMZxe5Fn{p+gj}hK){V4uZ=x z4dM7Lfu!)$`{FAIdtE6Xjd`H=JCk@CzuY;x4%^*E210BeY>+ezoow;}e1US52mS%O zV#eJ+Dn}ghdS0ITWrYwSJuuwdf)rWybL1*HcB;WqXC3hw%sh#~qbT%iKQ&=(AU2Pq zv==Y9)3v6Dkm?>oy`j~ylbnk9zBrFcf2qGcF6EahTb=s4Sx?dLPJ%-_W~yIsdy|8R%J{C?edwBoXG5s*w0WdAI~&$Pg*m?)~^#)r%a9 zRb_Kxy%Np4s+}Qkm@zpE`oQFwt{sYc1gg6U2H^`GXuCO`(~(gx7C$vxx44+Bov$BY zwLKt4F)}vdq);|e2t65#X@Zf|Hm8w%=T}G?0L~t%Qxa^363Qv~P9=Q76Cs?NHnMBB z(q~l=;DSV5Xju94_D;sw6cB)U?8&b#-IZC0&n(yrDu*XaoE*oS*Ab$(-{emeWtk#q zUlM_rs2}jE5sH$gT3Q5RrF!7L&#%t!ttTZ(X@>fdF;B$=9ekk-X^0AxSRL{J_ho!f zg0osnaei*6_KovP{fzueh-aq8i;#JXX_j6bU&qLZGXH5^4F!_5+cqqkMe+4Qu9^%1 z6q?fJK$hQXt7P&kJUg0|ixYA{s;s!DLCNilS;~^sz_nX@Hw-I9x3&4AZJ=AEsK#TU z6-jE0Oh%~ncM&5MtSG1;=08+JxnCJTfZ7OmBxtNnOb%TaS{PHPU=vlFs5dI|0H8b-dV zRzHz>U!SYXlPF`Pj2;hcydU$%AAPCVY|hB*A}b10j3OD#8x7sC)q$bl{33Tq0(5qj zaY9tdX?hC+}L4y5^u98E;P)ZEHM>QhZtZR2+osEhlcJoxqYJ)rE5Yn&*t61jTk{bBi33~=&nSr z+^%JIn|fczN?v$Zlz()~c>~RX)D1jw><2b|4Yv@Y7($&3&3t9c8MD)J*1WIDDhs zC3nbkDDXxm8&gSjsz1~+951NSgH|X;k_cG{&OJP{n6Y|F%VbchNz_CGDW()M!9RmV z(qvd}aD(6XK5twcBcwXbl2Uv{W+enmukE4p)F-~*fxhZ^C|vACBpex7AE`Qpc!$7P z9cbYc9b3^|_rd_Q@=~!=3Uiq?QI^lOMgnt=4i~50@Yy6MyztdzgO~_IO50EFxgL6{ zAyb2P6x5Kh#x}txcS$}IL1a+XrGuWJF8PbwL*1FzEe#USi`cCK! z)N>Yur6zqCYWMIRt9xHe7`8tfX<*{l_GAlv7ay<`<{}?4Xr|QFa~ixTFvR8Q!*STN z9=k;o<@K#u!XSNywZD@-wE^96SsjDD=G|5(L9d2O9U(i^TGu~40di_e8@sZGtEJ%^ zI>Zw13XgwCy9yyLx znS>s7l}WU~qJE-@xyf<*Z&!-QI{O@^8eZxqwvdiAot7O6E7ekpC3nwmH?Ux%>Y|oL zEU;a5eSAYkf!|I0F+}I$bs0r;USWqsa?5K2FtI?=8Q!IS;~V(&bBjo)RVrI9XX*Sc zg0OiuE{&wcQBuWGE7<3L486!Uqq1vd~5dKUg|HA zRToS#p);_Y_fsYvh;Z*m_=wq0m)kwJ-|eogxJ*pj%F8@PcEzS8pUETbMz-@KrE5P& z7RB5FPttD+xQ5DZl1hCDR7F9?1S9_nDRy%WV5vU;rd*b1xMXT(B}-l}J>4ronm?Jl zDbx_pmuv%<@`mNm*i(G{Gg0r?xp2Y*gn32)+TZzWIF)G7@(K{dPz~%fqC)6jx?nQN z)3)dfDdchh+Ehj?@hi-PHU^_0=cdx=a&Dst%PTlebJ!UyDep^}FQGvKT6>1N)j!hi z_4{QVWVmFxI66Tte(nL==xnf!m6g-ShwNT&N|{o8hap@%bBjdsDr}vHT(?GgdG3Bw z(+T_#n25ad>hL9GIIL9s#rWX;Is;XWo{N$2I0dVXy)k^{qHfgjkKc76Lv`%;VnbZ} zl7sCKdNJ?b87G=x7rt6nFl^%IXjge|VZ5o}sPkAP!B>=6&4+3+*8F6kg^Q_}0pGe8 zv}azbJF{aSvy(8~e0PnM5bi2w>wZxlOJkU=G1W2pb+FkQGA58d5A)$!`F@q5msE9r zHPO5{7eFJykEZ>M|v-NzzwT=ubU8M=PdbjL zg_Tj9*U*=;LSz>^L_aMH!#k$5v9&#*^@S10qon(UW2*WEN7#5|X$iQnk4z zEF)hCSLn1X!hZ}e(<(>?`oAM2O-y0x?pOqB!0NfX4hcyLWTA|*E{q7p`~!81MS*YZ z>eWx?qM!S1FT5H3=G&7zQv(ouQFmtsV`?^jc8Hi4i4JoQP+S4PtJ?Ai7!fpCBF;Mi znf+0@|3dnK^B&?Fk96(eDUc-y0XwKqkon`*n)fuLm_5R=6bOy)q}sDdyLX4fmbpY% z?hWY%wr&;0`D8=qvB1Q{-7`t;S~sfgvx?Z7;W#&aK`qZ6b#bMh+ zZ{?uJc_WvKY1MePmO~8_G`K0Yl`AguC!*_q*#}uCenUSupvL}y1*0Y=$nI8yOW1i< zbnNDoobIP5=Xq1U`~-t(`H`w)U^qLIf|Zh*Q(x{_aUvAxEs&ZSKhxvCXd5a@9>&4;xFs=U9?06`I`BftY?irAAG#?l+mc~2HI9xS+4r$ zF{9+dG-Zj{#k7+OSrp1NAa9es2PjW66Qa95*~L*o~zdlwN<3g)6e8hQBJ&{X~KCvJ|;)y=tO;jGalt z?z3Z_!z3QMt1D;CM8?wz9wcS!2_BsO3SM;aul4&^hig4W)LMDZf*_$H`ipQq9Hi=^ zvLo`qdMQ6J{xG@MsWXY(M?RVHQsL4#`%}UlTr(i;olWu_sa5$wrRi5=3jWe4Umd?D z^n2Um>ko65H%?vt+Q8o>ekR6L?(ggsWZ5H6VkYTI%UNE8(HZwPfJ>jhSWQYkq>v(; zSSMlmKD&7n%*=U=6&3P4u8k7Kc49W0Xj04Ln+19d*=k2=slFyTTaGqCy|Rfll%dWp zcD`HQIG$#n<#|DFj((-XhlZNUDtp^4{;dv2qQi5NPX+ATW1rzt{#yh(qtSK1ZL}cL zwl@-Nly7x|7|4xhr;-MxCJWlmZFf+G3=?$eoGkhVzwDMrk=}z$j_~U`xm|_l`UVu3 zrmuW0FBA4@q->W&5$^O8xIY|orYC)0rZM@aPp}nvLXZP5QaR`2L3cOoZ1pH!K@Q=! z(?Fz*;pZKhSE3%XLfKivKfX0{8M2{p!%PQIzO9@FtIAbn%1+p8wJFEkb)IG4&gFcN;i!>VwW{DDTC{j2bM68n75toJtO?#F*V^i8s0Wn#3i3=`%D@OuH8N)_a6e8JE!+j{RYdoNrv{ z2mGJo8fye+Yj&quH^y+WJT^9ZY%|R7B~{KL))W3P_Bnxi^LNXiCyZ3GLvg>8F;GMN5xkeXQ9Ip2i=FT3R!ur{I@3QNS>J%XG96 z?kmcdXio>ifk(YbrpnTct5dR1eQM~`+%~1wXk{L%{b)|;ilR-lb{6X00T@|R4W?_! z)unsH0C8AP+#z;zKAejhX}Uq`ONCjKL1s ztEwe__}rSR%U1d=H{S`zrN`&HZ9Nx+)!LMt7ra za6yGLYC2b>ScI2D-=PoC)QRy?6qrwTz{KaBHL6JI;<6|E7+n+J231x&^2MANwgvA+ zODFsBrv*MLvsuvxmK`l*z7Mu2(@`Yjj?c|f2R1frc(>BKKM$Mtoj4ni$;Lig_OwY_ zTE<#h&f$WnfKJA`_EcicOigR?d6|hxI?diG?u~(9NmjTBVY$L#K8>twxVFLSfxOqF z!)L66>j&-EFY8jwFZhqF^)XDN9H`eah(R2wu?Wno3 zWoh^KI!AMUFg@%e{k8jjh-{6yHe#^8Ez0c!pJNZC*{scLZ`*xE%yW_~Y;s^+DDY|K z95n1?z)i)#@lDYY_f9Z z-G!1OX@wbmD!2NFf%TcE0RvB)cm=LFYM+DJ zn`I5DZ0>dS2{~_WbN$e%;S<$&jH|U|2wU($Uu4n=$xisfRgUVS6XkVw3fSDU58k7Z z^9znS#o6g_lH2m|MY}-qSdI%{P@aqy=Zl2UK;tTiAWuXtL&2va!n=5n2rmbF{R2to z-#dQ}47OPXK9Q=^d6}fs)zhcf?MF9Hx4i)&2#UV&-zj|7j5nhu5#qDw+$4VdsKXg1 z0KFjB>zHGUu-|1Ub!fbsU7xFz5)cztugg8)a@;+V6BXfoUx)~XYlb5VX3a2S%Fq;U zZ)GmBsa08E*3cL_sBBk3lgdELU=f?dgb{FTPvb z^?*=G7zi3bj0S}RDWEFl2#?O^M9(Y{frill0MT184)H%Q+co%EirRh{ah%o&4IQyt z;40bQs96O9AcyISBtb;-fr#X9M`WS-3sTY2Uq?MODqLzsz-$O-o7+)G>HflV^bFVV zwJ|)R7#<>a5V~~;s7(KYQK47wSV4ciz!90dT?$*ww_tHrqU-249@PK<@2%*LY=3v? zVkf_b|9A=m0QHDWir<2DIIiJgPR?ua#!U0Sl_kLaPgGQd9WfQ?|6X&thzh-3tC<4O z%_2$Ajbj=Bz>9e# zLxr}Ka)55sa{ilpe9M180%U}&5Y!k(2fA5~1OTw!ifUr@4@`ZXnVaQ2008YRP}K_o z5+hbIF@bK@pZxb2J-iW+Ea+xz6#$^V6-B@o0f4S+H~;{C$?r4U{{R|dsAd2F delta 37448 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 O00CYA5YPTOBmDNUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle index 0191728..0be7e5a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,35 +1,15 @@ pluginManagement { repositories { - gradlePluginPortal() { - content { - excludeGroup('org.apache.logging.log4j') - } - } - mavenCentral() - maven { - url = 'https://maven.minecraftforge.net/' - } - maven { - url = 'https://maven.fabricmc.net/' - } maven { - url = 'https://maven.wagyourtail.xyz/releases' + url = 'https://maven.cleanroommc.com' } maven { - url = 'https://maven.arcseekers.com/releases' - } - - maven { - url = 'https://maven.wagyourtail.xyz/snapshots' + url = 'https://maven.minecraftforge.net/' } + gradlePluginPortal() } } plugins { - // Automatic toolchain provisioning - id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' + id 'com.cleanroommc.cleanroomgradle.settings' version '0.11.0' } - -// Due to an IntelliJ bug, this has to be done -// rootProject.name = archives_base_name -rootProject.name = rootProject.projectDir.getName() diff --git a/src/main/java-templates/com/example/modid/Reference.java b/src/main/java-templates/com/example/modid/Reference.java deleted file mode 100644 index 28b38f1..0000000 --- a/src/main/java-templates/com/example/modid/Reference.java +++ /dev/null @@ -1,13 +0,0 @@ -package {{ package }}; - -/** - * Tags storage class, you can change at will - */ -public class Reference { - private Reference() {} - - public static final String MOD_ID = "{{ mod_id }}"; - public static final String MOD_NAME = "{{ mod_name }}"; - public static final String VERSION = "{{ mod_version }}"; - -} diff --git a/src/main/java/com/example/modid/ExampleMod.java b/src/main/java/com/example/modid/ExampleMod.java deleted file mode 100644 index 5cf1b14..0000000 --- a/src/main/java/com/example/modid/ExampleMod.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.modid; - -import com.example.modid.proxy.IProxy; -import net.minecraft.client.Minecraft; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION) -public class ExampleMod { - - public static final Logger LOGGER = LogManager.getLogger(Reference.MOD_NAME); - - @SidedProxy(modId = Reference.MOD_ID, clientSide = "com.example.modid.proxy.ClientProxy", serverSide = "com.example.modid.proxy.CommonProxy") - public static IProxy proxy; - /** - * - * Take a look at how many FMLStateEvents you can listen to via the @Mod.EventHandler annotation here - * - */ - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - LOGGER.info("Hello From {}!", Reference.MOD_NAME); - LOGGER.info("Proxy is {}", proxy); - LOGGER.info("Language: {}", Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage()); - } - -} diff --git a/src/main/java/com/example/modid/proxy/ClientProxy.java b/src/main/java/com/example/modid/proxy/ClientProxy.java deleted file mode 100644 index e8b612d..0000000 --- a/src/main/java/com/example/modid/proxy/ClientProxy.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.modid.proxy; - -public class ClientProxy implements IProxy{ -} diff --git a/src/main/java/com/example/modid/proxy/CommonProxy.java b/src/main/java/com/example/modid/proxy/CommonProxy.java deleted file mode 100644 index 7e5ed51..0000000 --- a/src/main/java/com/example/modid/proxy/CommonProxy.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.modid.proxy; - -public class CommonProxy implements IProxy { -} diff --git a/src/main/java/com/example/modid/proxy/IProxy.java b/src/main/java/com/example/modid/proxy/IProxy.java deleted file mode 100644 index af31e09..0000000 --- a/src/main/java/com/example/modid/proxy/IProxy.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.modid.proxy; - -public interface IProxy { -} diff --git a/src/main/resource-templates/mcmod.info b/src/main/resource-templates/mcmod.info deleted file mode 100644 index 7845443..0000000 --- a/src/main/resource-templates/mcmod.info +++ /dev/null @@ -1,15 +0,0 @@ -[{ - "modid": "{{ mod_id }}", - "name": "{{ mod_name }}", - "version": "{{ mod_version }}", - "mcversion": "1.12.2", - "description": "{{ mod_description }}", - "authorList": [{{ mod_authors }}], - "credits": "{{ mod_credits }}", - "url": "{{ mod_url }}", - "updateJSON": "{{ mod_update_json }}", - "logoFile": "{{ mod_logo_path }}", - "modProperties": { - "issueTrackerUrl": "{{ mod_issue_tracker }}" - } -}] diff --git a/src/main/resource-templates/pack.mcmeta b/src/main/resource-templates/pack.mcmeta deleted file mode 100644 index 51e635d..0000000 --- a/src/main/resource-templates/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "description": "{{ mod_name }} Resources", - "pack_format": 3 - } -} \ No newline at end of file diff --git a/src/main/resources/modid_at.cfg b/src/main/resources/modid_at.cfg deleted file mode 100644 index 3d61d66..0000000 --- a/src/main/resources/modid_at.cfg +++ /dev/null @@ -1 +0,0 @@ -public net.minecraft.client.Minecraft fileResourcepacks # Example mcp name AT entry \ No newline at end of file From 0330961434e1cb929c330af6abb9914340ada582 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Fri, 28 Aug 2026 10:59:45 +0100 Subject: [PATCH 02/10] Update CG --- settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index 0be7e5a..246308a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,5 +11,5 @@ pluginManagement { } plugins { - id 'com.cleanroommc.cleanroomgradle.settings' version '0.11.0' + id 'com.cleanroommc.cleanroomgradle.settings' version '0.13.7' } From 32e04573731e894a9b28baaf0c33fa69a90a8e01 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Mon, 12 Oct 2026 14:16:50 +0100 Subject: [PATCH 03/10] fix(foundation): classloader issue workaround --- build.gradle | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 3e45d09..bcd7cc3 100644 --- a/build.gradle +++ b/build.gradle @@ -18,12 +18,7 @@ tokenEnvoy { set 'VERSION', project.version } -// TODO -configurations.named('mergetool') { - resolutionStrategy.force( - 'org.ow2.asm:asm:9.10.1', - 'org.ow2.asm:asm-analysis:9.10.1', - 'org.ow2.asm:asm-tree:9.10.1', - 'org.ow2.asm:asm-util:9.10.1' - ) +// TODO: fundamental Foundation issue +tasks.withType(JavaExec).configureEach { + systemProperty 'foundation.loadsall', 'true' } From 3c6a088250f5ea34ef7e8c6a709239680b2b9fa2 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Tue, 13 Oct 2026 03:34:56 +0100 Subject: [PATCH 04/10] chore(deps): Cleanroom 0.7.0 & CleanroomGradle 0.19.0 --- build.gradle | 17 +++++++++++++---- gradle.properties | 2 ++ settings.gradle | 5 +---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index bcd7cc3..aeeaf42 100644 --- a/build.gradle +++ b/build.gradle @@ -5,13 +5,22 @@ plugins { id 'com.cleanroommc.tokenenvoy' version '1.1.0' } -cleanroom { - mode = 'userdev' +repositories { + exclusiveContent { + forRepository { + maven { + name 'CurseMaven' + url 'https://curse.cleanroommc.com' + } + } + filter { + includeGroup 'curse.maven' + } + } } dependencies { - // Point to locally built cleanroom userdev jar - cleanroomUserdev files(providers.gradleProperty('cleanroomUserDevJar')) + implementation cleanroom.userdev(providers.gradleProperty('cleanroom_version').get()) } tokenEnvoy { diff --git a/gradle.properties b/gradle.properties index 502a450..c6b08ea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,3 +2,5 @@ org.gradle.configuration-cache=true version=0.1.0 versioning.stage=alpha + +cleanroom_version=0.7.0 diff --git a/settings.gradle b/settings.gradle index 246308a..bf4ba55 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,13 +3,10 @@ pluginManagement { maven { url = 'https://maven.cleanroommc.com' } - maven { - url = 'https://maven.minecraftforge.net/' - } gradlePluginPortal() } } plugins { - id 'com.cleanroommc.cleanroomgradle.settings' version '0.13.7' + id 'com.cleanroommc.cleanroomgradle.settings' version '0.19.0' } From d8771ef59cdd28b2c09ee3dcf961dde4254bc0ce Mon Sep 17 00:00:00 2001 From: Rongmario Date: Tue, 13 Oct 2026 03:55:11 +0100 Subject: [PATCH 05/10] feature: adopt conventions & expose mod options as gradle properties --- .editorconfig | 30 + .gitattributes | 51 +- .github/workflows/ci.yml | 19 + .github/workflows/release.yml | 22 + .gitignore | 138 ++- HEADER | 2 + LICENSE | 861 +++++++++++++++++- README.md | 20 +- build.gradle | 70 +- checkstyle.xml | 190 ++++ cliff.toml | 190 ++++ formatj.toml | 259 ++++++ gradle.properties | 66 +- gradle/wrapper/gradle-wrapper.jar | Bin 47505 -> 48749 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 6 +- gradlew.bat | 85 +- .../java/com/example/modid/ExampleMod.java | 29 + src/main/resources/mcmod.info | 12 + src/main/resources/pack.mcmeta | 6 + tokens.properties | 13 + 21 files changed, 1977 insertions(+), 96 deletions(-) create mode 100644 .editorconfig create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release.yml create mode 100644 HEADER create mode 100644 checkstyle.xml create mode 100644 cliff.toml create mode 100644 formatj.toml create mode 100644 src/main/java/com/example/modid/ExampleMod.java create mode 100644 src/main/resources/mcmod.info create mode 100644 src/main/resources/pack.mcmeta create mode 100644 tokens.properties diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4356e65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,30 @@ +# Managed by CleanroomMC/Conventions. Do not edit locally. +# Change it there and bump the convention plugin version instead. +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 +max_line_length = 160 + +[*.{java,gradle,groovy,kt,kts}] +indent_size = 4 + +[*.{json,json5,yml,yaml,toml,xml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[{Makefile,*.mk}] +indent_style = tab + +[*.{bat,cmd}] +end_of_line = crlf + +[gradlew] +end_of_line = lf diff --git a/.gitattributes b/.gitattributes index f91f646..f67fcb7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,12 +1,45 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf +# Managed by CleanroomMC/Conventions. Do not edit locally. +# Change it there and bump the convention plugin version instead. -# These are Windows script files and should use crlf -*.bat text eol=crlf +# Normalise on commit, check out LF everywhere. Windows contributors included. +* text=auto eol=lf -# Binary files should be left untouched -*.jar binary +*.bat text eol=crlf +*.cmd text eol=crlf +gradlew text eol=lf +*.sh text eol=lf +*.java text +*.gradle text +*.groovy text +*.kt text +*.kts text +*.scala text +*.properties text +*.json text +*.json5 text +*.toml text +*.xml text +*.yml text +*.yaml text +*.md text + +*.jar binary +*.zip binary +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ogg binary +*.wav binary +*.nbt binary +*.dat binary +*.class binary +*.ttf binary +*.otf binary +*.so binary +*.dll binary +*.dylib binary + +# Keep the wrapper jar out of diffs, it is verified by checksum +**/gradle/wrapper/gradle-wrapper.jar binary linguist-vendored linguist-generated diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..911e3ba --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,19 @@ +name: CI + +on: + push: + branches: + - main + - 'develop/**' + pull_request: + types: [opened, synchronize, reopened, ready_for_review, review_requested] + workflow_dispatch: + +permissions: + contents: read + +jobs: + build: + uses: CleanroomMC/Conventions/.github/workflows/build.yml@1.4.0 + with: + release-branch: main diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..f49b930 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,22 @@ +name: Release + +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+-*' + workflow_dispatch: + +permissions: + contents: write + issues: read + pull-requests: read + +jobs: + release: + uses: CleanroomMC/Conventions/.github/workflows/release.yml@1.4.0 + with: + publish-maven: false + # Needs curseforge_project_id or modrinth_project_id in gradle.properties, and the matching token secret + publish-mods: true + secrets: inherit diff --git a/.gitignore b/.gitignore index 52691c5..3a07c35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,126 @@ -# eclipse -bin -*.launch -.settings -.metadata -.classpath -.project +# >>> cleanroom-conventions +# Managed by CleanroomMC/Conventions. Do not edit the marked region locally. +# Change it there and bump the convention plugin version instead. +# Project-specific ignores go below the closing marker. +# +# Scope: JVM projects. Java, Kotlin, Groovy, Scala, and the build tools around them. + +# Build output +build/ +!**/src/**/build/ +out/ +!**/src/**/out/ +bin/ +!**/src/**/bin/ +target/ +!**/src/**/target/ +classes/ +!**/src/**/classes/ +dist/ +!**/src/**/dist/ +*.class +*.tasty + +# Gradle +.gradle/ +gradle-app.setting +.gradletasknamecache +local.properties +!**/gradle/wrapper/gradle-wrapper.jar -# idea -out +# Maven +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +release.properties +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +dependency-reduced-pom.xml +buildNumber.properties +.flattened-pom.xml + +# sbt and Scala +.bsp/ +.bloop/ +.metals/ +.scala-build/ +project/project/ +project/target/ +.scala_dependencies +.worksheet + +# Kotlin +.kotlin/ +*.kotlin_module +.kotlin_native/ + +# IntelliJ IDEA +# The code style is convention-owned and must stay tracked +.idea/* +!.idea/codeStyles/ +!.idea/codeStyles/** +*.iml *.ipr *.iws -*.iml -.idea +.idea_modules/ +atlassian-ide-plugin.xml + +# Eclipse +.classpath +.project +.settings/ +.metadata/ +.apt_generated/ +.apt_generated_tests/ +.factorypath +.springBeans +.sts4-cache/ + +# NetBeans +nbproject/private/ +nbbuild/ +nbdist/ +.nb-gradle/ + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# JVM crash and profiling output +hs_err_pid* +replay_pid* +*.hprof +*.jfr +*.log + +# Minecraft Development +run/ +!**/src/**/run/ +logs/ +!**/src/**/logs/ +crash-reports/ +.mixin.out/ -# gradle -build -.gradle +# OS noise +.DS_Store +.AppleDouble +.LSOverride +._* +Thumbs.db +Desktop.ini +$RECYCLE.BIN/ -# kate -*.kate-swp +# Editors and temporary files +*.swp +*.swo +*~ +*.bak +*.orig +*.rej +# <<< cleanroom-conventions -# other -eclipse -run runs diff --git a/HEADER b/HEADER new file mode 100644 index 0000000..ca91c06 --- /dev/null +++ b/HEADER @@ -0,0 +1,2 @@ +Copyright (c) 2026 CleanroomMC contributors +SPDX-License-Identifier: LGPL-3.0-only diff --git a/LICENSE b/LICENSE index 5ca98f8..0ed0a38 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,840 @@ -MIT License - -Copyright (c) 2026 CleanroomMC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md index 559ef4e..dfc3f0e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,19 @@ -# CleanroomDevEnv +# CleanroomModTemplate -A mod development template for Cleanroom. Uses CleanroomGradle. +A mod development template for Cleanroom. Requires Cleanroom 0.7.0 or above. Uses [CleanroomGradle](https://github.com/CleanroomMC/CleanroomGradle) and [Conventions](https://github.com/CleanroomMC/Conventions). + +## Getting Started + +1. Set `root_package`, `mod_id` and `mod_name` in `gradle.properties`, and move the sources to match. +2. Set `conventions.license`, then run `./gradlew extractConventions applyLicenseHeader`. +3. Run `./gradlew runClient`. + +Every other option is documented next to its property in `gradle.properties`. + +## Versioning + +The version is computed from git tags. Tag `1.0.0` on `main` to release it, `./gradlew -q printVersion` prints the current value. + +## Tokens + +`@{NAME}` markers in classes and resources are replaced at build time. `tokens.properties` declares them. diff --git a/build.gradle b/build.gradle index aeeaf42..e8b7699 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,29 @@ plugins { id 'java' id 'com.cleanroommc.cleanroomgradle' - id 'com.cleanroommc.versioning' version '2.0.0' - id 'com.cleanroommc.tokenenvoy' version '1.1.0' + id 'com.cleanroommc.conventions' version '1.4.0' +} + +group = root_package + +base { + archivesName = mod_id +} + +def accessTransformerNames = access_transformers.tokenize() + +conventions { + if (mod_authors) { + author = mod_authors + } + mods { + if (curseforge_project_id) { + curseforge = curseforge_project_id + } + if (modrinth_project_id) { + modrinth = modrinth_project_id + } + } } repositories { @@ -20,11 +41,52 @@ repositories { } dependencies { - implementation cleanroom.userdev(providers.gradleProperty('cleanroom_version').get()) + implementation cleanroom.userdev(cleanroom_version) { + accessTransformers.from(accessTransformerNames.collect { "src/main/resources/META-INF/$it" }) + } +} + +cleanroom { + runs { + client { + configure { + username = minecraft_username + jvmArgs extra_jvm_args.tokenize() + } + } + server { + configure { + jvmArgs extra_jvm_args.tokenize() + } + } + } } tokenEnvoy { - set 'VERSION', project.version + set 'MOD_VERSION', project.version + set file('tokens.properties') +} + +jar { + manifest { + if (accessTransformerNames) { + attributes 'FMLAT': accessTransformerNames.join(' ') + } + if (coremod_plugin_class) { + attributes 'FMLCorePlugin': coremod_plugin_class + if (coremod_includes_mod.toBoolean()) { + attributes 'FMLCorePluginContainsFMLMod': true, 'ForceLoadAsMod': true + } + } + } +} + +tasks.withType(Checkstyle).configureEach { + enabled = enable_checkstyle.toBoolean() +} + +tasks.matching { it.name in ['clearSkiesCheck', 'formatJavaCheck'] }.configureEach { + enabled = enable_formatting.toBoolean() } // TODO: fundamental Foundation issue diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000..f16e2ac --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 0000000..8b74ea0 --- /dev/null +++ b/cliff.toml @@ -0,0 +1,190 @@ +# git-cliff configuration. Managed by CleanroomMC/Conventions. Do not edit locally. +# +# The shared release workflow runs this twice: once with --latest for the GitHub +# Release body, once over the full history for CHANGELOG.md committed to the repository. + +# GitHub usernames come from the API. The workflow supplies GITHUB_TOKEN +# and GITHUB_REPO. Commits whose email is not linked to a GitHub account +# have an empty username. The first-time contributor section skips those, +# the GitHub owner (often an organization), bot accounts, and the founder +# on the first release. Bot logins end in [bot], except the Copilot coding +# agent, which the API reports as plain Copilot. +# +# Set CLIFF_INCLUDE_DATE=1 when generating CHANGELOG.md +# Each entry has a date for version heading, GitHub links for commits. + +[changelog] +header = """ +# Changelog +""" +body = """ +{%- macro remote_url() -%} +https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} +{%- endmacro -%} +{%- macro author(username) -%} +{%- if get_env(name="CLIFF_INCLUDE_DATE", default="") != "" -%} +[@{{ username }}](https://github.com/{{ username }}) +{%- else -%} +@{{ username }} +{%- endif -%} +{%- endmacro -%} +{%- macro issue_ref(hit) -%} +{{ hit | replace_regex(from="(?i)^(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?):?\\s+", to="") }} +{%- endmacro -%} +{%- macro coauthors(commit, commits) -%} +{%- for footer in commit.footers | default(value=[]) -%} +{%- if footer.token == "Co-authored-by" -%} +{%- set name = footer.value | replace_regex(from="\\s*<[^>]*>", to="") | trim -%} +{%- if name != "" and name != commit.author.name -%} +, {{ name }} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- for other in commits -%} +{%- if other.id == commit.id and other.group is containing("Co-authors") -%} +{%- set name = other.message | split(pat="\n") | first | replace_regex(from="\\s*<[^>]*>", to="") | trim -%} +{%- if name != "" and name != commit.author.name -%} +, {{ name }} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- endmacro -%} +{%- macro print_commit(commit, commits) -%} +- {% if commit.scope %}**{{ commit.scope }}**: {% endif -%} +{{ commit.message | split(pat="\f") | first | trim | upper_first -}} +{%- if commit.remote.pr_number %} *[PR by {% if commit.remote.username %}{{ self::author(username=commit.remote.username) }}{% else %}{{ commit.author.name }}{% endif %}{{ self::coauthors(commit=commit, commits=commits) }} in {% if get_env(name="CLIFF_INCLUDE_DATE", default="") != "" %}[#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}){% else %}#{{ commit.remote.pr_number }}{% endif %}]* +{%- elif commit.remote.username %} *[commit by {{ self::author(username=commit.remote.username) }}{{ self::coauthors(commit=commit, commits=commits) }} in {% if get_env(name="CLIFF_INCLUDE_DATE", default="") != "" %}[{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}){% else %}{{ commit.id | truncate(length=7, end="") }}{% endif %}]* +{%- elif commit.author.name %} *[commit by {{ commit.author.name }}{{ self::coauthors(commit=commit, commits=commits) }} in {% if get_env(name="CLIFF_INCLUDE_DATE", default="") != "" %}[{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}){% else %}{{ commit.id | truncate(length=7, end="") }}{% endif %}]* +{%- endif -%} +{%- if commit.breaking -%} +{# split_commits folds the body into breaking_description, so pull the footer text back out. #} +{%- set breaking_note = commit.breaking_description | default(value="") | find_regex(pat="(?is)BREAKING[ -]CHANGE:.*") -%} +{%- if breaking_note | length > 0 %} +{{ " - " }}{{ breaking_note | first | replace_regex(from="(?is)^BREAKING[ -]CHANGE:\\s*", to="") | replace(from="\f", to=" ") | trim | upper_first }} +{%- endif -%} +{%- endif -%} +{%- for hit in commit.raw_message | default(value="") | find_regex(pat="(?i)(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?):?\\s+(?:[\\w.-]+/[\\w.-]+)?#\\d+") %} +{{ " " }}*[Fixes issue {{ self::issue_ref(hit=hit) }}]* +{%- endfor %} +{%- endmacro -%} +{%- set include_date = get_env(name="CLIFF_INCLUDE_DATE", default="") -%} +{%- if include_date -%} +## {% if version %}{{ version }} - {{ timestamp | date(format="%Y-%m-%d") }}{% else %}Unreleased{% endif %} +{%- endif %} +{% if version and previous.version -%} +{% if version | split(pat=".") | first != previous.version | split(pat=".") | first %} +> [!IMPORTANT] +> This is a new major version ({{ previous.version | split(pat=".") | first }}.x → {{ version | split(pat=".") | first }}.x). +{% endif -%} +{% endif -%} +{% set founder = commits | last -%} +{% set all_commits = commits -%} +{% if commits | filter(attribute="breaking", value=true) | length != 0 %} +> [!WARNING] +> This version has breaking changes! More details below. +{% endif -%} +{% if commits | filter(attribute="breaking", value=true) | length != 0 %} +##{% if include_date %}#{% endif %} Breaking Changes + +{% for commit in commits | filter(attribute="breaking", value=true) -%} +{{ self::print_commit(commit=commit, commits=all_commits) }} +{% endfor -%} +{% endif -%} +{% for group, commits in commits | group_by(attribute="group") -%} +{% if group | striptags | trim == "Co-authors" %}{% continue %}{% endif -%} +{% set_global shown = false -%} +{% for commit in commits -%} +{% if commit.breaking %}{% continue %}{% endif -%} +{% if not shown %} +##{% if include_date %}#{% endif %} {{ group | striptags | trim }} + +{% set_global shown = true -%} +{% endif -%} +{{ self::print_commit(commit=commit, commits=all_commits) }} +{% endfor -%} +{% endfor -%} +{% set_global first_timer_heading = false -%} +{% if github and github.contributors -%} +{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) -%} +{% if not contributor.username %}{% continue %}{% endif -%} +{% if contributor.username == remote.github.owner %}{% continue %}{% endif -%} +{% if contributor.username is ending_with("[bot]") %}{% continue %}{% endif -%} +{% if contributor.username == "Copilot" %}{% continue %}{% endif -%} +{% if not previous.version and founder.remote.username == contributor.username %}{% continue %}{% endif -%} +{% if not previous.version and founder.author.name == contributor.username %}{% continue %}{% endif -%} +{% if not first_timer_heading %} +##{% if include_date %}#{% endif %} First-time Contributors + +{% set_global first_timer_heading = true -%} +{% endif -%} +- **{{ self::author(username=contributor.username) }} made their first contribution!** +{% endfor -%} +{% endif -%} +{% if version and previous.version and remote.github.owner %} +**Full Changelog**: {{ self::remote_url() }}/compare/{{ previous.version }}...{{ version }} +{% endif %} +""" +footer = "" +# trim would strip the blank line between releases in CHANGELOG.md. +trim = false + +[git] +conventional_commits = true +filter_unconventional = false +split_commits = true +# Split before parsers so a pack: subject cannot swallow its nested lines. +processing_order = [ + "commit_preprocessors", + "split_commits", + "conventional_commits", + "commit_parsers", + "link_parsers", +] +protect_breaking_commits = true +filter_commits = false +recurse_submodules = true +use_branch_tags = true +topo_order = false +sort_commits = "newest" + +# GitHub squash-merge appends "(#123)" to the subject. Strip it so the +# changelog line stays the commit message, with the hash in the byline. +# +# pack: is the opt-in multi-change squash type. Nested body lines are +# often GitHub bullets; strip those so they parse as conventional commits. +# split_commits is global, so non-pack bodies are collapsed onto the subject +# line with FF, which git-cliff's lines() does not split on. Co-authored-by +# lines keep their newline so they split off into the Co-authors group, which +# the template folds back into the byline. FF and not CR because git-conventional +# treats a lone CR as a line ending and then fails to parse the commit, which +# loses the type, scope and breaking flag. +# Rust's regex crate has no look-ahead, so the pattern only gates on the +# message being multi-line and the pack check lives in the awk program. +commit_preprocessors = [ + { pattern = '\s*\((\w+\s)?#([0-9]+)\)', replace = "" }, + { pattern = '(?m)^[ \t]*[-*][ \t]+', replace = "" }, + { pattern = '(?s)^.*\n', replace_command = '''awk 'NR==1 && /^pack[(!:]/ {pack=1} {printf "%s%s", (NR==1 ? "" : (pack || tolower($0) ~ /^co-authored-by:/ ? "\n" : "\f")), $0}' ''' }, +] + +# HTML comments force group order; Tera's group_by is alphabetical otherwise. +# The template strips them with striptags. +# pack: lands in Comprehensive. Nested feat/fix/… lines keep their groups. +commit_parsers = [ + { message = "^pack(?:\\(|:|!)", group = "Comprehensive" }, + { message = "^feat", group = "Feature" }, + { message = "^fix", group = "Bug Fix" }, + { message = "^perf", group = "Performance" }, + { message = "^refactor", group = "Refactor" }, + { message = "^doc", group = "Documentation" }, + { message = "^test", group = "Testing" }, + { message = "^build", group = "Build and Dependencies" }, + { message = "^chore\\(deps\\)", group = "Build and Dependencies" }, + { message = "^ci", group = "CI" }, + { message = "^chore", skip = true }, + { message = "^style", skip = true }, + { message = "^Merge", skip = true }, + { message = "^revert", skip = true }, + { message = "^Signed-off-by", skip = true }, + { message = "^Co-authored-by", group = "Co-authors" }, + { message = ".*", group = "Other" } +] diff --git a/formatj.toml b/formatj.toml new file mode 100644 index 0000000..a7dd9b5 --- /dev/null +++ b/formatj.toml @@ -0,0 +1,259 @@ +# Managed by CleanroomMC/Conventions. Do not edit locally. +# +# This is the single source of truth for Java layout in this organization. +# +# Rules are spelled out even where they match FormatJ's built-in default. + +[file] +# .editorconfig fixes the line ending and the final newline for every file in the repository, +# so those two follow it rather than the old profile (which never added a final newline). +line-ending = "lf" +final-newline = true +trim-trailing-whitespace = true +charset = "UTF-8" +tab-width = 4 + +[indent] +size = 4 +use-tabs = false +continuation = 4 +chained-call = 4 +array-initializer = 4 +ternary = 4 +throws-clause = 4 +switch-case-labels = true +switch-case-body = true +blank-lines = false + +[wrapping] +max-line-length = 120 +method-parameters = "wrap-if-long" +method-arguments = "wrap-if-long" +chained-calls = "break-all-when-too-long" +chain-threshold = 2 +binary-operators = "wrap-if-long" +operator-position = "after-operator" +method-reference = "never" +method-reference-operator-position = "before-operator" +instanceof = "preserve" +instanceof-operator-position = "after-operator" +multicatch = "never" +multicatch-separator-position = "before-operator" +intersection-types = "never" +intersection-separator-position = "before-operator" +ternary = "wrap-if-long" +assignment = "never" +assignment-break = "inside-value" +hug-sole-argument = true +array-initializers = "chop-down-if-long" +extends-implements = "never" +throws-clause = "wrap-if-long" +type-parameters = "never" +annotation-arguments = "wrap-if-long" +closing-delimiter = "own-line" +break-after-open-paren = false +enum-constants = "chop-down-always" +require-enum-constant-semicolon = false +for-statement = "chop-down-if-long" +try-resources = "never" +keep-simple-methods-on-one-line = false +keep-simple-classes-on-one-line = false +keep-simple-lambdas-on-one-line = false + +[braces] +class-placement = "end-of-line" +method-placement = "end-of-line" +control-placement = "end-of-line" +lambda-placement = "end-of-line" +if-else = "always" +for-loop = "always" +while-loop = "always" +else-on-new-line = false +catch-on-new-line = false +finally-on-new-line = false +empty-class-body = "spaced" +empty-method-body = "spaced" +empty-control-body = "expanded" + +[spacing] +before-method-declaration-parenthesis = false +before-method-call-parenthesis = false +before-if-parenthesis = true +before-for-parenthesis = true +before-while-parenthesis = true +before-switch-parenthesis = true +before-catch-parenthesis = true +before-synchronized-parenthesis = true +within-parentheses = false +within-brackets = false +within-array-initializer-braces = true +within-angle-brackets = false +around-assignment-operators = true +around-binary-operators = true +around-unary-operators = false +around-lambda-arrow = true +around-ternary-operators = true +around-method-reference-operator = false +around-multicatch-separator = true +around-intersection-separator = true +after-comma = true +before-comma = false +after-semicolon-in-for = true +before-semicolon = false +after-type-cast = true +before-colon-in-enhanced-for = true +after-colon-in-enhanced-for = true +before-colon-in-case-label = false +around-case-arrow = true +before-annotation-parenthesis = false +before-array-brackets = false +after-varargs-ellipsis = true + +[blank-lines] +max-consecutive = 1 +after-package = 1 +after-imports = 1 +before-class = 1 +before-method = 1 +before-field = 0 +after-class-opening-brace = 1 +before-class-closing-brace = 1 +strip-at-brace-edges = false +around-initializer-block = 1 +before-record-compact-constructor = 1 +after-enum-constants = 0 +before-first-enum-constant = 1 +between-switch-cases = 0 +between-member-groups = 1 + +[alignment] +consecutive-fields = "none" +consecutive-variables = "none" +consecutive-assignments = "none" +method-chains = "none" +annotation-values = "none" +switch-arrows = "none" +ternary-branches = "none" +trailing-comments = "none" + +[annotations] +declaration-placement = "new-line" +parameter-placement = "same-line" +field-placement = "same-line" +single-marker-inline = false + +[imports] +order = "ascending" +# Groups descend from the code we own to the platforms we sit on. The longest matching prefix wins, +# so a prefix that no file uses costs nothing. +groups = [ + # Ours + ["com.cleanroommc", "zone.rong", "top.outlands"], + # Third-party + "*", + # Gradle + "org.gradle", + # Coremods and bytecode + ["org.spongepowered", "com.llamalad7", "org.objectweb.asm"], + # The game + ["net.minecraft", "net.minecraftforge", "mcp", "com.mojang", "org.lwjgl"], + # JDK + ["javax", "java"], +] +static-placement = "last" +blank-line-between-groups = true +module-imports-first = true +remove-unused = false + +[modifiers] +order = "canonical" +remove-redundant = true + +[module] +brace-placement = "inherit" +empty-body = "inherit" +blank-lines-after-opening-brace = "inherit" +blank-lines-before-closing-brace = "inherit" +blank-lines-between-directive-groups = 0 +exports-opens-target-list-wrapping = "never" +provides-implementation-list-wrapping = "never" + +[comments] +reflow = "preserve" +block-comment-star-alignment = true +trailing-comment-min-spaces = 1 +trailing-comment-column = 0 +keep-first-column-comments = false +indent-with-code = true +honour-formatter-off = true +off-marker = "@formatter:off" +on-marker = "@formatter:on" + +[javadoc] +wrap = false +tag-order = "preserve" +blank-line-before-tags = true +align-tag-descriptions = false +add-paragraph-tags = false +keep-single-line = false +tag-continuation-indent = 0 +closing-tag-form = "preserve" +opening-tag-position = "preserve" + +[switch] +case-style = "arrow" +arrow-case-braces = "when-multi-statement" +yield-style = "expression-when-possible" +multi-label-wrapping = "wrap-if-long" +null-default-on-one-line = true +guard-on-same-line = true +arrow-body-on-new-line-when-long = true + +[records] +component-wrapping = "chop-down-if-long" +single-line-empty-body = false +compact-constructor-blank-line = false +with-style = "inline-when-short" +space-before-with-block = true + +[patterns] +deconstruction-wrapping = "wrap-if-long" +keep-simple-pattern-inline = true +nested-indent = 4 + +[sealed] +permits-wrapping = "wrap-if-long" +permits-order = "preserve" +permits-on-new-line = false + +[lambdas] +parameter-style = "omit-when-possible" +body-braces = "when-multi-statement" +keep-single-expression-inline = true + +[text-blocks] +indent-policy = "preserve" +closing-delimiter-on-own-line = false +escape-trailing-spaces = false + +[literals] +long-suffix = "upper" +hex-digits = "upper" + +[semicolons] +remove-redundant = true + +[preservation] +keep-author-blank-lines = true +max-preserved-blank-lines = 1 +keep-line-break-after-open-paren = false +keep-simple-blocks-inline = false +keep-array-initializer-layout = false +respect-existing-chain-breaks = false +never-join-lines = false + +[arrays] +c-style-brackets = "java" + +[members] +order = "intellij" diff --git a/gradle.properties b/gradle.properties index c6b08ea..a232f25 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,64 @@ -org.gradle.configuration-cache=true +org.gradle.configuration-cache = true -version=0.1.0 -versioning.stage=alpha +# Cleanroom +# This template only works with Cleanroom 0.7.0 and above +cleanroom_version = 0.7.0 -cleanroom_version=0.7.0 +# Mod Information +# The version is computed from git tags by Versioning, run `gradlew -q printVersion` to see it +# Tag `1.0.0` to release it. A suffix on the tag picks the release type: +# 1.0.0-alpha = alpha +# 1.0.0-beta = beta +# 1.0.0-rc = release candidate, uploaded to CurseForge and Modrinth as beta +# 1.0.0-release = release, same as the bare `1.0.0` +# Untagged builds inherit the type of the highest staged tag in the same major version, +# else beta below 1.0.0 and release from there on +root_package = com.example +mod_id = modid +mod_name = Mod Name + +# Mod Metadata (Optional) +# Every property in the two sections above and below is a Token Envoy token, see tokens.properties +mod_description = +mod_url = +mod_update_json = +# Delimit authors with commas. When set, they also become the copyright holder in LICENSE and HEADER +mod_authors = +mod_credits = +mod_logo_path = + +# Run Configurations +# Delimit multiple JVM arguments with spaces +minecraft_username = Developer +extra_jvm_args = + +# Access Transformers (Optional) +# File names under src/main/resources/META-INF, delimited with spaces, e.g. modid_at.cfg +access_transformers = + +# Coremod (Optional) +# Fully-qualified name of the class implementing IFMLLoadingPlugin +coremod_plugin_class = +# Set to false when the coremod jar has no @Mod class +coremod_includes_mod = true + +# Publishing (Optional), ran by the release workflow through `publishMods` +# Provide secrets: CURSEFORGE_TOKEN, MODRINTH_TOKEN +# The CurseForge project ID is the numerical ID and not the slug +curseforge_project_id = +modrinth_project_id = + +# Conventions (https://github.com/CleanroomMC/Conventions#configuration) +# One of: free (MIT), open (LGPLv3), visible (CleanroomMC License), none +# Run `gradlew extractConventions applyLicenseHeader` after changing it +conventions.license = open +conventions.javaMajor = 25 +# Code Style +# When true, `gradlew build` fails on a violation. The `Apply` tasks work either way +# Checkstyle, with the rules in checkstyle.xml. It also requires the license header on every Java file +enable_checkstyle = false +# FormatJ and ClearSkies, fix with `gradlew clearSkiesApply formatJavaApply` +enable_formatting = false + +# The branch release tags are cut from +versioning.releaseBranch = main diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index eddabd2eef8d94a5437d6168ff9c87a78ff725b3..9fa7f288283f81eec4952784c271abd7e0938dee 100644 GIT binary patch delta 40003 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 delta 38903 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1e922f4..2e7bb9f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.1-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index adff685..249efbb 100755 --- a/gradlew +++ b/gradlew @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/gradlew.bat b/gradlew.bat index c4bdd3a..3185a43 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,39 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +@rem Catch executions from older scripts and ensure they exit cleanly. +@rem This can be removed once we can be reasonably confident that few people +@rem will be migrating directly to this new wrapper. +goto afterSafetyNet +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto exitWithErrorLevel +:afterSafetyNet set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -45,13 +72,14 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -59,35 +87,26 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :execute @rem Setup the command line -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem This label must not be changed. We rely on old scripts being able to jump to this point. +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/src/main/java/com/example/modid/ExampleMod.java b/src/main/java/com/example/modid/ExampleMod.java new file mode 100644 index 0000000..3739fc0 --- /dev/null +++ b/src/main/java/com/example/modid/ExampleMod.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2026 CleanroomMC contributors + * SPDX-License-Identifier: LGPL-3.0-only + */ + +package com.example.modid; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; + +@Mod(modid = "@{MOD_ID}", name = "@{MOD_NAME}", version = "@{MOD_VERSION}") +public class ExampleMod { + + public static final Logger LOGGER = LogManager.getLogger("@{MOD_NAME}"); + + /** + * + * Take a look at how many FMLStateEvents you can listen to via the @Mod.EventHandler annotation here + * + */ + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + LOGGER.info("Hello From {}!", "@{MOD_NAME}"); + } + +} diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info new file mode 100644 index 0000000..4abdc8a --- /dev/null +++ b/src/main/resources/mcmod.info @@ -0,0 +1,12 @@ +[{ + "modid": "@{MOD_ID}", + "name": "@{MOD_NAME}", + "version": "@{MOD_VERSION}", + "mcversion": "1.12.2", + "description": "@{MOD_DESCRIPTION}", + "authorList": ["@{MOD_AUTHORS}"], + "credits": "@{MOD_CREDITS}", + "url": "@{MOD_URL}", + "updateJSON": "@{MOD_UPDATE_JSON}", + "logoFile": "@{MOD_LOGO_PATH}" +}] diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..953babc --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "@{MOD_NAME} Resources", + "pack_format": 3 + } +} diff --git a/tokens.properties b/tokens.properties new file mode 100644 index 0000000..17bdb37 --- /dev/null +++ b/tokens.properties @@ -0,0 +1,13 @@ +# Token Envoy tokens, written as `@{KEY}` in classes and resources +# Values may reference any gradle property with ${property_name} +# MOD_VERSION is declared in build.gradle, since it is computed from git tags + +MOD_ID = ${mod_id} +MOD_NAME = ${mod_name} +MOD_DESCRIPTION = ${mod_description} +MOD_URL = ${mod_url} +MOD_UPDATE_JSON = ${mod_update_json} +MOD_AUTHORS = ${mod_authors} +MOD_CREDITS = ${mod_credits} +MOD_LOGO_PATH = ${mod_logo_path} +CLEANROOM_VERSION = ${cleanroom_version} From de8cd09f7120e1ac2a808f94da5e46fe9df0fe68 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Tue, 13 Oct 2026 11:03:04 +0100 Subject: [PATCH 06/10] chore(deps): update CleanroomGradle to 0.20.0 --- settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index bf4ba55..21a94df 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,5 +8,5 @@ pluginManagement { } plugins { - id 'com.cleanroommc.cleanroomgradle.settings' version '0.19.0' + id 'com.cleanroommc.cleanroomgradle.settings' version '0.20.0' } From a069cd5be4448837736bb0d775c1ce27d5fc2636 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Tue, 13 Oct 2026 11:03:22 +0100 Subject: [PATCH 07/10] feature: include refmap property and docs --- gradle.properties | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gradle.properties b/gradle.properties index a232f25..492e86e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -42,6 +42,11 @@ coremod_plugin_class = # Set to false when the coremod jar has no @Mod class coremod_includes_mod = true +# Mixin (Optional) +# Name of the refmap the Mixin config points at, e.g. mixins.modid.refmap.json +# Setting it adds the Mixin annotation processors and puts the refmap in both jars +cg.userdev.refmap = + # Publishing (Optional), ran by the release workflow through `publishMods` # Provide secrets: CURSEFORGE_TOKEN, MODRINTH_TOKEN # The CurseForge project ID is the numerical ID and not the slug From 1035af22ae7dabbe733f89a8c560462e536c32f4 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 14 Oct 2026 15:49:52 +0100 Subject: [PATCH 08/10] chore: update Cleanroom to correct versioning (0.7.3-alpha) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 492e86e..96b13bf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.configuration-cache = true # Cleanroom # This template only works with Cleanroom 0.7.0 and above -cleanroom_version = 0.7.0 +cleanroom_version = 0.7.3-alpha # Mod Information # The version is computed from git tags by Versioning, run `gradlew -q printVersion` to see it From d35f0147cdd66e2b010e5b051bef7025856b6295 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 14 Oct 2026 15:58:57 +0100 Subject: [PATCH 09/10] fix: split mod_authors into separate authorList entries --- build.gradle | 1 + tokens.properties | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index e8b7699..018dee1 100644 --- a/build.gradle +++ b/build.gradle @@ -64,6 +64,7 @@ cleanroom { tokenEnvoy { set 'MOD_VERSION', project.version + set 'MOD_AUTHORS', mod_authors.tokenize(',')*.trim().join('", "') set file('tokens.properties') } diff --git a/tokens.properties b/tokens.properties index 17bdb37..9105945 100644 --- a/tokens.properties +++ b/tokens.properties @@ -1,13 +1,12 @@ # Token Envoy tokens, written as `@{KEY}` in classes and resources # Values may reference any gradle property with ${property_name} -# MOD_VERSION is declared in build.gradle, since it is computed from git tags +# MOD_VERSION and MOD_AUTHORS are declared in build.gradle, since they are computed MOD_ID = ${mod_id} MOD_NAME = ${mod_name} MOD_DESCRIPTION = ${mod_description} MOD_URL = ${mod_url} MOD_UPDATE_JSON = ${mod_update_json} -MOD_AUTHORS = ${mod_authors} MOD_CREDITS = ${mod_credits} MOD_LOGO_PATH = ${mod_logo_path} CLEANROOM_VERSION = ${cleanroom_version} From b95dc7ba081ab677d0b96daaf747adbe325da850 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 14 Oct 2026 16:26:05 +0100 Subject: [PATCH 10/10] chore: update Cleanroom & CleanroomGradle --- gradle.properties | 2 +- settings.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 96b13bf..bbb0120 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.configuration-cache = true # Cleanroom # This template only works with Cleanroom 0.7.0 and above -cleanroom_version = 0.7.3-alpha +cleanroom_version = 0.7.4-alpha # Mod Information # The version is computed from git tags by Versioning, run `gradlew -q printVersion` to see it diff --git a/settings.gradle b/settings.gradle index 21a94df..3799fca 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,5 +8,5 @@ pluginManagement { } plugins { - id 'com.cleanroommc.cleanroomgradle.settings' version '0.20.0' + id 'com.cleanroommc.cleanroomgradle.settings' version '0.22.0' }