Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
name: Base Metals 1.15.2 CI
name: Base Metals 1.16.5 CI

on:
push:
branches:
- master-1.15.2
- master-1.16.5
- 'feature/**'
pull_request:
branches:
- master-1.15.2
- master-1.16.5

permissions:
contents: read

concurrency:
group: basemetals-1.15-${{ github.workflow }}-${{ github.ref }}
group: basemetals-1.16-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -141,9 +141,9 @@ jobs:
./gradlew "${gradle_args[@]}"
first="$RUNNER_TEMP/basemetals-first"
mkdir -p "$first"
cp build/libs/BaseMetals-3.0.1.115021.jar "$first/"
cp build/libs/BaseMetals-3.0.1.115021-sources.jar "$first/"
cp build/libs/BaseMetals-3.0.1.115021-javadoc.jar "$first/"
cp build/libs/BaseMetals-3.1.0.116051.jar "$first/"
cp build/libs/BaseMetals-3.1.0.116051-sources.jar "$first/"
cp build/libs/BaseMetals-3.1.0.116051-javadoc.jar "$first/"
cp build/release/SHA256SUMS "$first/"

- name: Rebuild and prove byte-identical archives
Expand All @@ -159,9 +159,9 @@ jobs:
-Dorg.gradle.java.installations.auto-download=false
)
./gradlew "${gradle_args[@]}"
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.0.1.115021.jar" build/libs/BaseMetals-3.0.1.115021.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.0.1.115021-sources.jar" build/libs/BaseMetals-3.0.1.115021-sources.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.0.1.115021-javadoc.jar" build/libs/BaseMetals-3.0.1.115021-javadoc.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.116051.jar" build/libs/BaseMetals-3.1.0.116051.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.116051-sources.jar" build/libs/BaseMetals-3.1.0.116051-sources.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.116051-javadoc.jar" build/libs/BaseMetals-3.1.0.116051-javadoc.jar
cmp "$RUNNER_TEMP/basemetals-first/SHA256SUMS" build/release/SHA256SUMS

- name: Run exact-OreSpawn dedicated-server probe
Expand All @@ -181,21 +181,21 @@ jobs:
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: BaseMetals-1.15.2-${{ github.sha }}
name: BaseMetals-1.16.5-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/BaseMetals-3.0.1.115021.jar
build/libs/BaseMetals-3.0.1.115021-sources.jar
build/libs/BaseMetals-3.0.1.115021-javadoc.jar
build/libs/BaseMetals-3.1.0.116051.jar
build/libs/BaseMetals-3.1.0.116051-sources.jar
build/libs/BaseMetals-3.1.0.116051-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

- name: Upload bounded diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: BaseMetals-1.15.2-diagnostics-${{ github.sha }}
name: BaseMetals-1.16.5-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: CodeQL
on:
push:
branches:
- master-1.15.2
- master-1.16.5
- 'feature/**'
pull_request:
branches:
- master-1.15.2
- master-1.16.5
schedule:
- cron: '37 7 * * 4'

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/validate-gradle-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: Validate Gradle Wrapper
on:
push:
branches:
- master-1.15.2
- master-1.16.5
- 'feature/**'
pull_request:
branches:
- master-1.15.2
- master-1.16.5

permissions:
contents: read
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
Base Metals 3.1.0.116051

- Bring the 1.15.2 release to Minecraft 1.16.5 and Forge 36.2.34.
- Keep the same materials, equipment, recipes, High/Low Fantasy settings and
material-based recipe discovery.
- Use the native 1.16 configuration screen, with the same Mods-list button
and OreSpawn cog. Keep the content-mode check when joining a server.
- Keep Kiri's ore overlays, vanilla host textures and automatic model updates.
- Increase the ore-overlay gap to reduce flickering when viewed from a distance.
- Use Forge's fluid-bucket models so filled buckets show the fluid's texture
and colour. Give all 36 buckets clear names in all 18 language files, such as
"Bucket of Molten Nickel" instead of "Nickel Bucket".
- Move to version 3.1 to distinguish these rendering improvements from the
3.0.1 releases for Minecraft 1.13–1.15.
- Generate the new low and tall wall sides, and convert older connected walls.
- Crush Nether gold ore into two gold powders and Ancient Debris into two
vanilla Netherite scraps. Gilded Blackstone is not included.
- Keep old-world upgrades and custom anvils working on Forge 36, without losing
saved item data, migration backups or protection for existing terrain.
- Keep ForgeGradle 7, Java 8 game compatibility, reproducible archives and
isolated test launches.
- Use the published OreSpawn 4.1.0.116051 release from Curse Maven, with its
download and checksum pinned. The eleven ore rules are unchanged.

Base Metals 3.0.1.115021

- Bring Base Metals to Minecraft 1.15.2 and Forge 31.2.57.
Expand Down
46 changes: 26 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[![Discord](https://img.shields.io/badge/Discord-MMD-green.svg?style=flat&logo=Discord)](https://discord.moddev.zone)
[![CurseForge downloads](https://cf.way2muchnoise.eu/full_base-metals_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/base-metals)
[![Supported Minecraft versions](https://cf.way2muchnoise.eu/versions/Minecraft_base-metals_all.svg)](https://www.curseforge.com/minecraft/mc-mods/base-metals)
[![Build, test, and audit](https://github.com/MinecraftModDevelopmentMods/BaseMetals/actions/workflows/ci.yml/badge.svg?branch=master-1.15.2)](https://github.com/MinecraftModDevelopmentMods/BaseMetals/actions/workflows/ci.yml?query=branch%3Amaster-1.15.2)
[![Build, test, and audit](https://github.com/MinecraftModDevelopmentMods/BaseMetals/actions/workflows/ci.yml/badge.svg?branch=master-1.16.5)](https://github.com/MinecraftModDevelopmentMods/BaseMetals/actions/workflows/ci.yml?query=branch%3Amaster-1.16.5)

# Base Metals

Expand All @@ -12,7 +12,7 @@ shields, bows, crossbows, arrows, and bolts. The mod also includes Crack
Hammers, scythes, metal anvils, the human detector, villager trades,
advancements, and extra loot to find in chests.

This is Base Metals `3.0.1.115021` for Minecraft 1.15.2. It brings the 1.14.4
This is Base Metals `3.1.0.116051` for Minecraft 1.16.5. It brings the 1.15.2
release forward while keeping the same blocks, items and recipes. MMDLib and
Additional Loot Tables are no longer needed. OreSpawn places the ores, and
Base Metals supplies the metals and their recipes.
Expand All @@ -22,15 +22,19 @@ overlays, so resource packs can change their surroundings without making the
ores look out of place. Smith trades and village chest loot use the
Armorer, Weaponsmith and Toolsmith professions introduced in Minecraft 1.14.

The 3.1 release reduces ore-overlay flickering and uses Forge's fluid-bucket
icons, with names that clearly describe their contents. These improvements
are not yet included in the 3.0.1 builds for Minecraft 1.13–1.15.

## Requirements

- Minecraft `1.15.2`
- Forge `31.2.57`
- Minecraft `1.16.5`
- Forge `36.2.34`
- Java 8
- OreSpawn `[4.1.0.115021,5.0.0)` on both client and server
- OreSpawn `[4.1.0.116051,5.0.0)` on both client and server

Put `BaseMetals-3.0.1.115021.jar` and OreSpawn `4.1.0.115021` (or a later
compatible OreSpawn 4 build for 1.15.2) in the `mods` directory. MMDLib and
Put `BaseMetals-3.1.0.116051.jar` and OreSpawn `4.1.0.116051` (or a later
compatible OreSpawn 4 build for 1.16.5) in the `mods` directory. MMDLib and
Additional Loot Tables are not dependencies. Mineralogy is optional.

## Materials and gameplay
Expand Down Expand Up @@ -72,6 +76,8 @@ Notable mechanics include:
not regenerate.
- Molten-metal buckets let you place and collect fluids. Base Metals does not
include a smeltery; other mods may provide ways to produce these fluids.
- Crack Hammers turn Nether gold ore into two gold powders, and Ancient Debris
into two Netherite scraps. Gilded Blackstone is not a crushing ingredient.

Open the configuration from the main menu's **Mods → Base Metals → Config**
button, or from the Base Metals cog in OreSpawn's world-creation settings.
Expand Down Expand Up @@ -122,14 +128,14 @@ items in containers are protected too.

Always perform the first upgrade on a copy of the world and keep the untouched
original. Read [Migration](docs/MIGRATION.md) before opening an old save. A
world already upgraded to Minecraft 1.16 or later must not be opened in this
older version. Worlds from the Base Metals 1.13.2 and 1.14.4 ports can be
world already upgraded to Minecraft 1.17 or later must not be opened in this
older version. Worlds from the Base Metals 1.13.2, 1.14.4 and 1.15.2 ports can be
upgraded normally.

## Compatibility

Forge item, block, and fluid tags are Base Metals' public compatibility API.
The 1.15.2 line deliberately contains no version-specific Mekanism, Thermal,
The 1.16.5 line deliberately contains no version-specific Mekanism, Thermal,
Tinkers' Construct, Ender IO, IC2, or Thaumcraft plugin code. Compatible mods
can consume the common tags without linking to Base Metals internals. See
[Compatibility](docs/COMPATIBILITY.md) and [Supported versions](docs/VERSIONS.md).
Expand Down Expand Up @@ -175,7 +181,7 @@ Generate and verify Eclipse launches with:
```

Release candidates can also be exercised as packaged mods in prepared official
Forge 31 client and server runtimes with `packagedRuntimeIntegrationTest`; pass
Forge 36 client and server runtimes with `packagedRuntimeIntegrationTest`; pass
their directories through the `packagedForgeClientRuntime` and
`packagedForgeServerRuntime` Gradle properties. These probes load the exact
release JAR and OreSpawn dependency, create real worlds, validate client models
Expand All @@ -187,24 +193,24 @@ messages in disposable multiplayer profiles.

`packagedMineralogyIntegrationTest` checks ore placement alongside Mineralogy.
It uses the server runtime above and a `mineralogyTestJar` property pointing to
the qualified Mineralogy 1.15.2 JAR. Mineralogy remains optional for players.
the qualified Mineralogy 1.16.5 JAR. Mineralogy remains optional for players.

CI checks a fresh Forge setup, unit tests, generated files, a dedicated server
with the pinned OreSpawn release, release-JAR contents, checksums, reproducible
builds, CodeQL, wrapper validation, and Eclipse classpath isolation. Test probes
and historical fixtures are excluded from the published JAR.

Builds use the published [OreSpawn `4.1.0.115021` release](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9073591)
through Curse Maven. No sibling checkout or local candidate repository is
needed. The build verifies the download's checksum, Minecraft version and
configuration-screen API.
Development and packaged tests use the published
[OreSpawn `4.1.0.116051` release](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9080646)
through Curse Maven: `curse.maven:mmd-orespawn-245586:9080646`. The build checks
its checksum, Minecraft version and configuration-screen API.

CI stages that same download with `gradle/stage-orespawn-release.sh` and passes
the temporary repository through `orespawnVerificationRepository`. Local
candidate builds remain guarded against publication.
CI stages the same verified download with `gradle/stage-orespawn-release.sh`
and passes its temporary repository through `orespawnVerificationRepository`.
Normal development does not need a local OreSpawn checkout or repository.

Release artifacts use Maven coordinate
`zone.moddev.mc.basemetals:BaseMetals:3.0.1.115021`.
`zone.moddev.mc.basemetals:BaseMetals:3.1.0.116051`.

Report defects through the
[Base Metals issue tracker](https://github.com/MinecraftModDevelopmentMods/BaseMetals/issues).
Expand Down
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def mainModClasses = "${mod_id}%%${forgeMainOutputPath}${File.pathSeparator}${mo
def forgeProbeOutputPath = integrationTestModClassesDirectory.get().asFile.absolutePath
def probeModClasses = mainModClasses + "${File.pathSeparator}basemetalsprobe%%${forgeProbeOutputPath}" +
"${File.pathSeparator}basemetalsprobe%%${forgeProbeOutputPath}"
def forge31RunTargets = [client: 'fmluserdevclient', server: 'fmluserdevserver',
def forge36RunTargets = [client: 'fmluserdevclient', server: 'fmluserdevserver',
data: 'fmluserdevdata', runtimeProbeServer: 'fmluserdevserver', legacyUpgradeServer: 'fmluserdevserver']

minecraft {
Expand All @@ -136,7 +136,7 @@ minecraft {
systemProperty 'forge.logging.markers', 'REGISTRIES'
systemProperty 'forge.logging.console.level', 'info'
mods { basemetals { source sourceSets.main } }
environment 'target', forge31RunTargets[name]
environment 'target', forge36RunTargets[name]
environment 'MCP_MAPPINGS', "${mapping_channel}_${mapping_version}"
environment 'MCP_VERSION', mcp_version
environment 'FORGE_VERSION', forge_version
Expand Down Expand Up @@ -182,7 +182,7 @@ def prepareIntegrationTestModClasses = tasks.register('prepareIntegrationTestMod
}

tasks.withType(JavaExec).configureEach { JavaExec runTask ->
def runName = forge31RunTargets.keySet().find { runTask.name == 'run' + it.capitalize() }
def runName = forge36RunTargets.keySet().find { runTask.name == 'run' + it.capitalize() }
if (runName != null) {
runTask.dependsOn prepareForgeRunModClasses
if (runTask.name in ['runRuntimeProbeServer', 'runLegacyUpgradeServer']) {
Expand Down
4 changes: 2 additions & 2 deletions docs/COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ ores, crystals, shards, clumps, dirty dusts, and molten fluids.
Adamantite, Adamantium, Adamant, Quicksilver, and steel-sprocket names are
forwarding tags. Copper-consuming recipes accept `forge:ingots/copper`, except
Base Metals' own compacting and decompacting recipes, whose output must remain
the Base Metals item. On Minecraft 1.15.2 the copper ore, ingot, and storage
the Base Metals item. On Minecraft 1.16.5 the copper ore, ingot, and storage
tags contain Base Metals entries; other mods can add their equivalents through
normal tag merging.

This version has no mod-specific plugins for Mekanism, Thermal Expansion, Tinkers'
Construct, Ender IO, IC2, Thaumcraft, Dense Ores, VeinMiner, or Constructs
Armory. Their version-specific 1.18 data and APIs are not valid on Forge
31. Generic processors and tools can interoperate through Forge tags.
36. Generic processors and tools can interoperate through Forge tags.

Mineralogy is optional. When installed, OreSpawn can place the same ores in
Mineralogy's rocks. Base Metals does not need Mineralogy to run.
Expand Down
24 changes: 16 additions & 8 deletions docs/MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ blocks cannot be reconstructed by Mojang's vanilla fixer alone, so Base Metals
installs a narrowly scoped migration hook before Forge reads an old world.

Always upgrade a copy and retain the original 1.10/1.12 world. Install Base
Metals `3.0.1.115021`, OreSpawn `4.1.0.115021`, and any other 1.15.2 mods needed
Metals `3.1.0.116051`, OreSpawn `4.1.0.116051`, and any other 1.16.5 mods needed
by that world. Do not carry MMDLib, Additional Loot Tables, the OreSpawn 3
plugin, or Base Metals' old fallback generator into the new instance.

Expand Down Expand Up @@ -37,8 +37,8 @@ nugget, and the MMDLib Vanilla Bits block/item/fluid names.

The migration supports the original Cyano Base Metals 2.4 line and the later
MMD Base Metals releases for Minecraft 1.10.2 and 1.12.2. It is not a downgrade
path: do not open a world already saved by Minecraft 1.16 or newer, including
the Base Metals 1.18.2 port, in Minecraft 1.15.2.
path: do not open a world already saved by Minecraft 1.17 or newer, including
the Base Metals 1.18.2 port, in Minecraft 1.16.5.

## Mod settings

Expand All @@ -60,16 +60,19 @@ migration remains OreSpawn's responsibility. Keep a copy of the old OreSpawn
configuration alongside the untouched source world when validating an upgrade.

The generated manifests at `data/basemetals/registry_manifest_1_12.json` and
`data/basemetals/registry_manifest.json` document the historical registry
baseline and its 1.15.2 projection.
`data/basemetals/registry_manifest.json` list the old registered names and their
1.16.5 counterparts.

## Moving from Minecraft 1.13.2 or 1.14.4
## Moving from Minecraft 1.13.2, 1.14.4 or 1.15.2

Use a copy of your 1.13.2 or 1.14.4 world, with the 1.15.2 builds of Base Metals and
Use a copy of your 1.13.2, 1.14.4 or 1.15.2 world, with the 1.16.5 builds of Base Metals and
OreSpawn. Keep `basemetals-common.toml` and your OreSpawn settings: this port
uses the same configuration keys, registered names and ore-rule IDs. Existing
items, recipe-book progress and terrain should remain unchanged. Once Minecraft
has saved the copy in 1.15.2, do not reopen it in the older game.
has saved the copy in 1.16.5, do not reopen it in the older game.

Base Metals converts the old boolean wall connections to 1.16's low and absent
connections. Existing tall connections and wall posts are left as they are.

Forge 1.13 saved a profession registry that no longer exists in 1.14. Base
Metals removes that obsolete index when it contains only vanilla professions;
Expand All @@ -81,3 +84,8 @@ before Base Metals changes it.
The old vanilla sign and dye names are mapped to oak signs and the matching
1.14 dyes. Other missing registry entries still need the relevant mod's
migration support; Base Metals does not silently discard them.

On the first upgrade, Forge may also warn about vanilla registry entries that
Minecraft 1.16 removed or renamed, such as zombie pigmen, their spawn egg and
sounds. These warnings are separate from Base Metals' migration. Keep the
backup and check any missing entries from other mods before continuing.
17 changes: 9 additions & 8 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
# Supported versions

Base Metals `3.0.1.115021` targets Minecraft `1.15.2`, Forge `31.2.57`, and
Base Metals `3.1.0.116051` targets Minecraft `1.16.5`, Forge `36.2.34`, and
Java 8. The Gradle build itself runs on Java `17.0.1+12` and uses ForgeGradle
`7.0.34` with Gradle `9.6.1`; those build-time runtimes do not change the Java
8 requirement of the released mod.

Builds and tests use the published [OreSpawn `4.1.0.115021` release](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9073591),
CurseForge project `245586`, file `9073591`, with
SHA-256 `F7C9A110E834EC3F73D55C20E8F52EEA1CF48C4E3ACCFBE8FCEFB60E78ABE387`.
At runtime, Base Metals requires OreSpawn `[4.1.0.115021,5.0.0)` for Minecraft 1.15.2.
Builds and tests use the published
[OreSpawn `4.1.0.116051` release](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9080646) with
SHA-256 `CDF59D83F191C5FBCD8921228DB577066A63A8FEB25CA79DB4EAEEA32D32DB04`.
At runtime, Base Metals requires OreSpawn `[4.1.0.116051,5.0.0)` for Minecraft 1.16.5.
The configuration cog uses OreSpawn's public 4.1 client API.

The exact build dependency is `curse.maven:mmd-orespawn-245586:9073591`.
CI stages the same checksum-verified file in a temporary Maven repository.
The development coordinate is `curse.maven:mmd-orespawn-245586:9080646`:
CurseForge project `245586`, file `9080646`. CI downloads and checks the same
file before staging it in a temporary Maven repository.
The schema-3 provider supports the OreSpawn versions in the runtime range above.

Release artifacts use Maven coordinate
`zone.moddev.mc.basemetals:BaseMetals:3.0.1.115021`.
`zone.moddev.mc.basemetals:BaseMetals:3.1.0.116051`.
Loading
Loading