diff --git a/CHANGELOG.md b/CHANGELOG.md index b504b4ab..81dd8409 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,19 @@ way to 1.0.0; see [docs/ROADMAP.md](docs/ROADMAP.md). ## [Unreleased] +## [1.1.0-beta.8.1] - 2026-11-06 + +A hotfix for the Forge 26.3 jar, with no other changes. Worlds from 1.1.0-beta.8 load as before, and +the network protocol is unchanged. Betas are not uploaded to CurseForge. + +### Fixed + +- Released jars were missing files the game needs, because the list of files allowed into the jar was + written by hand and never kept up: the equipment recipes (since 1.1.0-beta.4), the thermal view's + post effect and shader (since beta.5), and the smoke particle and the drafting table's recipe, model + and block state (since beta.6). Development runs read the source folders, so they hid it. The list now + comes from the repository's resource folders. + ## [1.1.0-beta.8] - 2026-11-06 Phase 12 of the road to 1.1.0: the second half of the vehicle workshop. Betas are not uploaded to @@ -705,6 +718,7 @@ Phase 1: foundation and flyable helicopters. - Free look moved from Left Ctrl to Left Alt, because Left Ctrl is now the vanilla sprint key. - Roll damping runs per tick instead of per frame, so handling no longer depends on frame rate. +[1.1.0-beta.8.1]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.8.1 [1.1.0-beta.8]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.8 [1.1.0-beta.7]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.7 [1.1.0-beta.6]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.6 diff --git a/README.md b/README.md index 716d035f..f7ebf37a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ MCHeli Rework is a ground-up port of MCHeli 1.0.3, a mod that stopped at Minecra system is rewritten for the modern game, while the original vehicle definitions, models, textures and sounds load unchanged. -> **Status:** on the way to 1.1.0, now at phase 12 (`1.1.0-beta.8`). Every helicopter, plane, +> **Status:** on the way to 1.1.0, now at phase 12 (`1.1.0-beta.8.1`). Every helicopter, plane, > tank, car and ground vehicle can be placed, crewed and driven with the original handling, all > 229 weapons fire, and the scripted HUDs, fuel, the vehicle screen and all of the original's > equipment are in, down to UAV stations, the drafting table and the team manager. The vehicle diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 0f47e2b3..ce0636b0 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -179,17 +179,19 @@ releases page. See [the release channels](ROADMAP.md#release-channels). ## Original content Neither the repository nor the jar may contain EMB4's files. Don't commit anything from the zip -or from `run/mcheli/imported`. As a guard, the `jar` task excludes everything under -`assets/mcheli` except `lang`, the four fallback item models of the generic vehicle items and -the night glow particle (`particles/glow.json`, `textures/particle/glow.png`, both our own). +or from `run/mcheli/imported`. As a guard, the `jar` task leaves out anything under `assets/mcheli` +or `data/mcheli/recipe` that the resource folders of `common` and `minecraft-` do not hold, +such as copies left in the build output by an older build or the IDE. So what is committed there +ships, and anything added there is ours to redistribute. + After a build, check every jar with: ``` for jar in build/release/*.jar; do unzip -l "$jar" | grep -v "com/"; done ``` -which should list only the manifest, `mods.toml`, `pack.mcmeta`, the two lang files, the four -generic item models, the glow particle and its texture, and the damage type data. +which should list only the manifest, the loader's metadata, `pack.mcmeta`, and the files in those +resource folders. When the conversion changes, change `content.LegacyImporter` and bump its `FORMAT`, so existing installs, the dev run and the tests all convert again. Keys the rework adds go into the lang files diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 361e0c9b..0e473659 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -139,6 +139,7 @@ Rules that hold for every beta: | 10 | `1.1.0-beta.6` | The rest of the equipment (Forge 26.3 only) | Released | | 11 | `1.1.0-beta.7` | Workshop: model, parts and tuning (Forge 26.3 only) | Released | | 12 | `1.1.0-beta.8` | Workshop: textures, sounds and sharing (Forge 26.3 only) | Released | +| | `1.1.0-beta.8.1` | Hotfix: the files missing from the released jars | Released | | 13 | `1.1.0-beta.9` | Every loader on every supported version, 1.19.4 to 26.3 | Planned | | | `1.1.0` | Release on CurseForge | Planned | diff --git a/gradle.properties b/gradle.properties index 9b7d5dc8..0aca9b95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ net.minecraftforge.gradle.merge-source-sets=true mod_id=mcheli mod_name=MCHeli Rework mod_group=com.jnhprojects.mcheli -mod_version=1.1.0-beta.8 +mod_version=1.1.0-beta.8.1 mod_authors=JayMar921 (rework), EMB4 (original author), Fureniku (CurseForge maintainer) mod_license=MCHeli Rework Licence 1.0 (see LICENSE) diff --git a/gradle/loader.gradle b/gradle/loader.gradle index 6159b24b..f79e9b48 100644 --- a/gradle/loader.gradle +++ b/gradle/loader.gradle @@ -70,20 +70,27 @@ tasks.named('processResources', ProcessResources) { } } +// What the repository holds under its resource folders is ours and ships. Worked out from the +// folders, because a hand-written list misses every file added later and nothing shows it: +// development runs read the source folders, so only a real jar lacked them (betas 4 to 8 shipped +// without the equipment recipes, the thermal shader, the smoke particle or the drafting table model). +def ownResources = [] as Set +if (!scaffold) { + [project(':common').file('src/main/resources'), + rootProject.file("minecraft-${minecraft_version}/src/main/resources")].each { root -> + fileTree(root).visit { if (!it.directory) ownResources << it.relativePath.pathString } + } +} + tasks.named('jar', Jar) { // EMB4's content is never redistributed: players import it from their own copy of the original // zip (LegacyContent). The repository no longer holds it, but the jar is packed from the // resource output, which can still have copies from older builds and from the IDE. - def shipped = ['assets/mcheli/items/helicopter.json', 'assets/mcheli/items/plane.json', - 'assets/mcheli/items/tank.json', 'assets/mcheli/items/vehicle.json', - // Our own: the night glow sprite (generated, no EMB4 content) and its particle definition. - 'assets/mcheli/particles/glow.json', 'assets/mcheli/textures/particle/glow.png'] exclude { FileTreeElement element -> String path = element.relativePath.pathString - !element.directory && path.startsWith('assets/mcheli/') && !path.startsWith('assets/mcheli/lang/') && - !shipped.contains(path) + !element.directory && (path.startsWith('assets/mcheli/') || path.startsWith('data/mcheli/recipe/')) && + !ownResources.contains(path) } - exclude 'data/mcheli/recipe/**' includeEmptyDirs = false // The licence travels with every copy of the jar. from(rootProject.file('LICENSE'))