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
18 changes: 9 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,19 @@ jobs:
--no-daemon --stacktrace
first="$RUNNER_TEMP/basemetals-first"
mkdir -p "$first"
cp build/libs/BaseMetals-3.1.0.120011.jar "$first/"
cp build/libs/BaseMetals-3.1.0.120011-sources.jar "$first/"
cp build/libs/BaseMetals-3.1.0.120011-javadoc.jar "$first/"
cp build/libs/BaseMetals-3.1.1.120011.jar "$first/"
cp build/libs/BaseMetals-3.1.1.120011-sources.jar "$first/"
cp build/libs/BaseMetals-3.1.1.120011-javadoc.jar "$first/"
cp build/release/SHA256SUMS "$first/"

- name: Rebuild and prove byte-identical archives
run: |
./gradlew clean assemble verifyReleaseArtifacts writeReleaseChecksums \
-PorespawnVerificationRepository="${{ steps.orespawn.outputs.repository }}" \
--no-daemon --stacktrace
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.120011.jar" build/libs/BaseMetals-3.1.0.120011.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.120011-sources.jar" build/libs/BaseMetals-3.1.0.120011-sources.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.0.120011-javadoc.jar" build/libs/BaseMetals-3.1.0.120011-javadoc.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.1.120011.jar" build/libs/BaseMetals-3.1.1.120011.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.1.120011-sources.jar" build/libs/BaseMetals-3.1.1.120011-sources.jar
cmp "$RUNNER_TEMP/basemetals-first/BaseMetals-3.1.1.120011-javadoc.jar" build/libs/BaseMetals-3.1.1.120011-javadoc.jar
cmp "$RUNNER_TEMP/basemetals-first/SHA256SUMS" build/release/SHA256SUMS

- name: Run all required GameTests
Expand Down Expand Up @@ -128,9 +128,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/BaseMetals-3.1.0.120011.jar
build/libs/BaseMetals-3.1.0.120011-sources.jar
build/libs/BaseMetals-3.1.0.120011-javadoc.jar
build/libs/BaseMetals-3.1.1.120011.jar
build/libs/BaseMetals-3.1.1.120011-sources.jar
build/libs/BaseMetals-3.1.1.120011-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Base Metals 3.1.1.120011

- Fix startup failures when Base Metals is added to an existing modern world, including worlds with external chunks or empty region files.
- Stop old level.dat_old backups from replacing current player data or enabling legacy terrain protection.
- Keep genuine legacy upgrades, reloads and later-opened chunks supported, including chunks in nested custom dimensions.

Base Metals 3.1.0.120011

- Port the 1.19.4 version to Minecraft 1.20.1 and Forge 47.4.10.
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 structure loot.

This is the Minecraft 1.20.1 Forge version, `3.1.0.120011`. It keeps the
This is the Minecraft 1.20.1 Forge version, `3.1.1.120011`. It keeps the
fixes and features from 1.19.4, including raw metals, ore texture
overlays and High/Low Fantasy modes. Existing Base Metals items and blocks keep
their registry IDs. OreSpawn handles ore generation; MMDLib and Additional Loot
Expand All @@ -26,7 +26,7 @@ Tables are no longer needed.
- OreSpawn `[4.1.0.120011,5.0.0)` on both client and server

This version uses OreSpawn `4.1.0.120011`. Put
`BaseMetals-3.1.0.120011.jar` and a compatible OreSpawn JAR in the `mods`
`BaseMetals-3.1.1.120011.jar` and a compatible OreSpawn JAR in the `mods`
directory. MMDLib and Additional Loot Tables must not be carried forward from
an older installation. Mineralogy is optional.

Expand Down Expand Up @@ -130,6 +130,10 @@ is unavailable.
Always perform the first upgrade on a copy of the world and keep the untouched
original. Read [Migration](docs/MIGRATION.md) before starting an upgraded world.

Adding Base Metals to a modern world does not trigger the old numeric-ID
conversion just because an older backup is present. Existing player data stays
in place; genuine legacy upgrades still make backups before changing saved data.

## Mod and data-pack compatibility

Forge item, block, and fluid tags are Base Metals' public compatibility API.
Expand Down Expand Up @@ -183,7 +187,7 @@ artifacts. GameTests, smoke probes, migration fixtures, and reference sources
are isolated from the published JAR.

Release artifacts use Maven coordinate
`zone.moddev.mc.basemetals:BaseMetals:3.1.0.120011`.
`zone.moddev.mc.basemetals:BaseMetals:3.1.1.120011`.

Report defects and compatibility problems through the
[Base Metals issue tracker](https://github.com/MinecraftModDevelopmentMods/BaseMetals/issues).
Expand Down
16 changes: 16 additions & 0 deletions docs/MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,19 @@ dimensions, and heights.
The generated manifests at `data/basemetals/registry_manifest_1_12.json` and
`data/basemetals/registry_manifest.json` document the runtime baseline,
restored content, and explicit 1.18 additions.

## Existing modern worlds

Modern worlds do not need the old numeric-ID conversion. Base Metals only runs
it after confirming an older source save. A leftover `level.dat_old` does not
replace the current player or turn on legacy terrain protection.

For a genuine upgrade, the original single-player record is captured before
Minecraft reads it. The world-local migration sidecar keeps the source version
and saved registry map for reloads and chunks opened later; it does not store
a player record. A saved registry map from an earlier upgrade takes precedence
over an older backup.

Chunk reading uses Minecraft's supported region formats. Empty region files
are left alone, and backups include external chunk files when their region
needs conversion.
4 changes: 2 additions & 2 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Supported versions

Base Metals `3.1.0.120011` targets Minecraft 1.20.1, Forge 47.4.10 and Java 17.
Base Metals `3.1.1.120011` targets Minecraft 1.20.1, Forge 47.4.10 and Java 17.
OreSpawn `4.1.0.120011` is the exact build and test dependency. Clients and
servers need OreSpawn `[4.1.0.120011,5.0.0)`.

Expand All @@ -10,7 +10,7 @@ Its SHA-256 is
`E6BDE47C1BB0BF4D08396F1D1FD5B1D2D3F8A5DF09905F279D39E2601D7FE4B0`.

Release artifacts use Maven coordinate
`zone.moddev.mc.basemetals:BaseMetals:3.1.0.120011`.
`zone.moddev.mc.basemetals:BaseMetals:3.1.1.120011`.

The provider remains schema 3, revision 1. OreSpawn 4.1 is needed for the
configuration-screen API; the provider's eleven rule IDs and 1.18 distributions
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ mod_name=Base Metals
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=LGPL-2.1
# The mod version. See https://semver.org/
mod_version=3.1.0.120011
mod_version=3.1.1.120011
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
Expand Down
2 changes: 1 addition & 1 deletion gradle/ide/eclipse.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ def verifyEclipseProductionClasspath = tasks.register('verifyEclipseProductionCl
}
}
String metadata = new File(projectDir, 'bin/main/META-INF/mods.toml').getText('UTF-8')
if (metadata.contains('${') || !metadata.contains('version="3.1.0.120011"')) {
if (metadata.contains('${') || !metadata.contains('version="3.1.1.120011"')) {
throw new GradleException('Eclipse output contains unresolved or invalid Base Metals version metadata')
}
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/prepare-forge-client-runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
FORGE_INSTALLER_SHA256 = "1912760b4cb6b803d8a826de603c9076b1da71ec2765e9a1f8c1ca78f65278e3"
VERSION_MANIFEST_URL = "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json"
ASSET_OBJECT_URL = "https://resources.download.minecraft.net/{prefix}/{digest}"
USER_AGENT = "BaseMetals-release-validation/3.1.0.120011"
USER_AGENT = "BaseMetals-release-validation/3.1.1.120011"


def digest_file(path: Path, algorithm: str) -> str:
Expand Down
4 changes: 2 additions & 2 deletions gradle/release/artifacts.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ tasks.register('verifyReleaseConfiguration') {
dependsOn tasks.named('verifyMavenizerCompatibilityFixture')
dependsOn tasks.named('verifyJava17Toolchain')
doLast {
if (configuredReleaseIdentity.modVersion != '3.1.0.120011'
if (configuredReleaseIdentity.modVersion != '3.1.1.120011'
|| configuredReleaseIdentity.modGroup != expectedMavenGroup
|| configuredReleaseIdentity.minecraftVersion != '1.20.1'
|| configuredReleaseIdentity.forgeVersion != '47.4.10'
Expand Down Expand Up @@ -331,7 +331,7 @@ tasks.register('verifyReleaseArtifacts') {
}
String modsToml = zip.getInputStream(zip.getEntry('META-INF/mods.toml')).getText('UTF-8')
if (modsToml.contains('${')
|| !modsToml.contains('version="3.1.0.120011"')
|| !modsToml.contains('version="3.1.1.120011"')
|| !modsToml.contains('versionRange="[4.1.0.120011,5.0.0)"')) {
throw new GradleException('Release mods.toml contains unresolved or incompatible metadata')
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/verification/packaged-runtime.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def packagedServerStartupSmoke = tasks.register('packagedServerStartupSmoke', Ex
if (!marker.isFile()) throw new GradleException('Packaged dedicated-server completion marker is missing')
Properties values = new Properties()
marker.withInputStream { values.load(it) }
if (values.getProperty('basemetals') != '3.1.0.120011'
if (values.getProperty('basemetals') != '3.1.1.120011'
|| values.getProperty('orespawn') != '4.1.0.120011'
|| values.getProperty('forge') != '47.4.10') {
throw new GradleException("Packaged dedicated-server versions are wrong: ${values}")
Expand Down
Loading
Loading