Skip to content

Commit 04513cc

Browse files
committed
Bring basePower and old worlds to Minecraft 1.14.4
1 parent 07dabcb commit 04513cc

707 files changed

Lines changed: 4934 additions & 4287 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Power Advantage 1.14 CI
1+
name: basePower 1.14 CI
22

33
on:
44
push:
@@ -10,7 +10,7 @@ permissions:
1010
contents: read
1111

1212
concurrency:
13-
group: poweradvantage-1.14-${{ github.workflow }}-${{ github.ref }}
13+
group: basepower-1.14-${{ github.workflow }}-${{ github.ref }}
1414
cancel-in-progress: true
1515

1616
jobs:
@@ -19,7 +19,7 @@ jobs:
1919
runs-on: ubuntu-latest
2020
timeout-minutes: 90
2121
steps:
22-
- name: Check out PowerAdvantage
22+
- name: Check out basePower
2323
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2424
- name: Check out pinned OreSpawn
2525
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
@@ -73,20 +73,21 @@ jobs:
7373
- name: Upload audited release candidate
7474
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
7575
with:
76-
name: PowerAdvantage-1.14.4-${{ github.sha }}
76+
name: basePower-1.14.4-${{ github.sha }}
7777
if-no-files-found: error
7878
retention-days: 30
7979
path: |
80-
build/libs/PowerAdvantage-2.4.5.114041.jar
81-
build/libs/PowerAdvantage-2.4.5.114041-sources.jar
82-
build/libs/PowerAdvantage-2.4.5.114041-javadoc.jar
80+
build/libs/basePower-2.4.6.114041.jar
81+
build/libs/basePower-2.4.6.114041-sources.jar
82+
build/libs/basePower-2.4.6.114041-javadoc.jar
83+
build/libs-dev/basePower-2.4.6.114041-deobf.jar
8384
build/release/SHA256SUMS
8485
CHANGELOG.txt
8586
- name: Upload diagnostics on failure
8687
if: failure()
8788
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
8889
with:
89-
name: PowerAdvantage-1.14.4-diagnostics-${{ github.sha }}
90+
name: basePower-1.14.4-diagnostics-${{ github.sha }}
9091
if-no-files-found: ignore
9192
retention-days: 14
9293
path: |

‎.github/workflows/release-on-tag.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ permissions:
1010
contents: read
1111

1212
concurrency:
13-
group: poweradvantage-release-tag-${{ github.ref_name }}
13+
group: basepower-release-tag-${{ github.ref_name }}
1414
cancel-in-progress: false
1515

1616
jobs:
1717
validate-release-tag:
1818
name: Validate tag for manual release confirmation
19-
if: github.repository == 'MinecraftModDevelopmentMods/PowerAdvantage'
19+
if: github.repository == 'MinecraftModDevelopmentMods/basePower'
2020
runs-on: ubuntu-latest
2121
timeout-minutes: 10
2222

‎CHANGELOG.txt‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
Unreleased - Minecraft 1.14.4
1+
2.4.6.114041 - basePower for Minecraft 1.14.4
2+
3+
- Continue Power Advantage under the basePower name on Forge 1.14.4.
4+
- Open worlds from the original Advantage mods and earlier base* releases without replacing their machines.
5+
- Put all three mods' items on one basePower creative tab.
6+
7+
Earlier 1.14.4 fixes
28

39
- Keep steel frames non-opaque on dedicated servers without changing their collision or drops.
410

‎README.md‎

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
1-
# PowerAdvantage
1+
# basePower for Minecraft 1.14.4
22

3-
**Minecraft 1.14.4**
3+
basePower continues DrCyano's Power Advantage. It provides conveyors, fluids and the shared systems used by baseSteam and baseElectric. Look for the sprocket on the **basePower** creative tab for items from all three mods.
44

5-
This port has passed the automated machine/migration tests and a manual check of
6-
visuals and recipe unlocks. See the [qualification report](docs/1.14/BROADER-QUALIFICATION.md)
7-
for coverage and limits. Use disposable copies for upgrades.
5+
Use Forge 28.2.26 and Java 8 with Base Metals 3.0.1.114041 and OreSpawn 4.1.1.114041. Back up the world and configuration and open a copy first. Keep the three base* mods together, and check that the other mods in your world support Minecraft 1.14.4.
86

9-
Power Advantage provides shared power, fluids, item transport and compatibility APIs for Steam Advantage and Electric Advantage.
10-
11-
This port keeps existing registry names and carries forward migration from 1.10 and 1.12.
12-
Always back up a world before upgrading, and check that its other mods also support the target version.
13-
The archived [1.13 qualification notes](docs/1.13/CURRENT-QUALIFICATION.md) separate its tested scenarios from remaining gaps;
14-
they are not a guarantee that an entire modpack can be upgraded without losses.
15-
The [1.14 qualification report](docs/1.14/BROADER-QUALIFICATION.md) records the
16-
repeated checks, exact tested jars and remaining limits for this candidate.
7+
See the [1.14.4 upgrade and testing notes](docs/1.14/BASE-IDENTITY-MIGRATION.md) for the upgrade routes, what the tests check, and what still needs a player.
178

189
Recipe-book discovery now follows relevant ingredients. See the [all-Advantage material checklist and automated discovery tests](docs/1.13/RECIPE-DISCOVERY.md). To regenerate the checked-in unlock JSON after changing recipes, run `node tools/generate-recipe-unlocks.js`; `check` rejects missing or stale ingredient criteria.
1910

@@ -49,20 +40,20 @@ Eclipse copies production resources from `build/resources/main`, not directly fr
4940

5041
To test all three Advantage mods together, run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, and launch `runClientAllAdvantage.launch`. This additional profile loads the pinned Steam/Electric deobf jars, Base Metals and OreSpawn alongside Power's Eclipse output. It uses the same `run` directory and test saves; it does not copy, open or modify a save automatically. The ordinary `runClient.launch` remains Power-only. Alternative checkout layouts can pass `-PsteamAdvantageDeobfJar=<path>` and `-PelectricAdvantageDeobfJar=<path>`; supplied jars must match the `test-rig/profiles/native114/dev-core.json` pins. Regenerate the combined launch after refreshing its dependencies or the base launch.
5142

52-
The combined [client resource probe](test-rig/client-resources/README.md) checks native baked models, textures, creative entries, translated item names, fluid rendering and tank gauges without opening a save. Static resource and locale regressions also run under `check`. Automated recipe-book fixtures and the accepted manual visual/recipe-unlock checks have separate scopes; see the [current port status](docs/1.14/PORT-STATUS.md).
43+
The combined [client resource probe](test-rig/client-resources/README.md) checks baked models, textures, creative entries, translated item names, fluid rendering and tank gauges without opening a save. Static resource and locale regressions also run under `check`. The recipe-book probe uses exported native recipes, but does not replace checking unlock notifications in play.
5344

54-
The [broader 1.14 test results and play-test checklist](docs/1.14/BROADER-QUALIFICATION.md) separate migration, connected machinery, endurance and manual checks. Test worlds and reports stay local; use disposable copies when trying an old save.
45+
The [earlier 1.14 qualification report](docs/1.14/BROADER-QUALIFICATION.md) covers the pre-rename builds. It is not evidence for the new base* jars.
5546

5647
## Compatibility
5748

58-
The implementation namespace is `zone.moddev.mc.poweradvantage`. The historical `cyano.poweradvantage.api` surface, including `FluidNetworkApi`, remains available to dependent mods. Registry names, fluids, tile IDs, NBT keys, OreSpawn provider IDs, and configuration meaning remain stable.
49+
The implementation namespace is `zone.moddev.mc.basepower`. The historical `cyano.poweradvantage.api` surface, including `FluidNetworkApi`, remains available to dependent mods. The saved-world migration maps original Advantage identities to their base* equivalents. Existing base* worlds keep their registry names, fluids, tile IDs, and machine data.
5950

6051
Forge 1.14 handles oil rendering, fluid containers, registered menus, tag updates
6152
and parts-loot events directly. Advantage's public fluid contract is bridged to
6253
native sided fluid capabilities; its millibucket units and saved tank keys remain
6354
unchanged. The remaining coremod runs before vanilla's legacy-world data fixes.
6455

65-
PowerAdvantage owns the shared pre-flattening migration hook used by all three Advantage mods. See [the 1.13 migration guide](docs/1.13/MIGRATION.md) before opening an irreplaceable 1.10 or 1.12 world. The [Advantage Works rig](test-rig/README.md) provides repeatable machine, restart, world-generation, and migration checks.
56+
basePower owns the shared pre-flattening migration hook used by all three mods. The [Advantage Works rig](test-rig/README.md) provides repeatable machine, restart, world-generation, and migration checks.
6657

6758
The [endurance protocol](docs/1.13/ENDURANCE.md) exercises repeat-batch operation in fresh and migrated disposable worlds, followed by a complete server-process restart. Its coverage limits are separate from frozen-state migration and manual client acceptance.
6859

@@ -87,7 +78,9 @@ The historical 1.10 handbook remains on the [1.10.2 branch](https://github.com/M
8778
The local [test-coverage backport](docs/1.14/TEST-COVERAGE-BACKPORT.md) records the
8879
repaired candidate, measured machine jobs, restart checks and GUI captures.
8980

90-
## Generator Follow-Up
81+
## Archived Advantage Builds
82+
83+
These checkpoints apply only to the earlier builds, before the base* rename.
9184

9285
The [generator follow-up](docs/1.14/TEST-COVERAGE-BACKPORT.md#generator-follow-up) records the older `pa114-candidate-c` inputs.
9386
Its 126 operating jobs and 126 cold checks, 39 GUI windows, 351 caption cases,
@@ -97,7 +90,7 @@ is retained. This is a pre-final Steam-control checkpoint, not qualification of
9790
the newer SteamAdvantage jars or harness. Those still need the final sweep.
9891
Manual play-testing and release review remain separate.
9992

100-
## Final T Candidate
93+
**Final pre-rename candidate**
10194

10295
The [final-t checkpoint](docs/1.14/TEST-COVERAGE-BACKPORT.md#final-t-candidate)
10396
records profile `pa114-candidate-e` and its exact jar hashes. All 132 operating

‎build.gradle‎

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616

1717
group = project.mod_group
1818
version = project.mod_version
19-
base.archivesName = 'PowerAdvantage'
19+
base.archivesName = 'basePower'
2020

2121
def versionParts = project.mod_version.toString().tokenize('.')
2222
if (versionParts.size() != 4 || !versionParts.every { it ==~ /\d+/ }) {
@@ -101,7 +101,7 @@ minecraft {
101101
workingDir.convention layout.projectDirectory.dir(configuredRunDirectory)
102102
systemProperty 'forge.logging.markers', 'REGISTRIES'
103103
systemProperty 'forge.logging.console.level', 'info'
104-
mods { poweradvantage { source sourceSets.main } }
104+
mods { basepower { source sourceSets.main } }
105105
environment 'target', forge28RunTargets[name]
106106
environment 'MCP_MAPPINGS', "${mapping_channel}_${mapping_version}"
107107
environment 'MCP_VERSION', mcp_version
@@ -314,7 +314,7 @@ tasks.register('verifyReleaseConfiguration') {
314314
group = 'verification'
315315
description = 'Validates release identity, target metadata, and optional integration policy.'
316316
doLast {
317-
if (project.mod_version != '2.4.5.114041') {
317+
if (project.mod_version != '2.4.6.114041') {
318318
throw new GradleException("Unexpected PowerAdvantage release version: ${project.mod_version}")
319319
}
320320
if (project.minecraft_version != '1.14.4'
@@ -330,10 +330,10 @@ tasks.register('verifyReleaseConfiguration') {
330330
|| project.gradle_java_version != '17') {
331331
throw new GradleException('Unexpected release dispatcher target metadata')
332332
}
333-
if (project.mod_id != 'poweradvantage'
334-
|| project.group.toString() != 'zone.moddev.mc.poweradvantage'
335-
|| base.archivesName.get() != 'PowerAdvantage'
336-
|| project.curseforge_project_id != '240982') {
333+
if (project.mod_id != 'basepower'
334+
|| project.group.toString() != 'zone.moddev.mc.basepower'
335+
|| base.archivesName.get() != 'basePower'
336+
|| project.curseforge_project_id != '1780140') {
337337
throw new GradleException('Unexpected Forge, Maven, archive, or CurseForge identity')
338338
}
339339
if (project.cf_requirements != 'base-metals,mmd-orespawn'
@@ -348,17 +348,17 @@ tasks.register('verifyReleaseConfiguration') {
348348
throw new GradleException('Unexpected Base Metals or OreSpawn dependency identity')
349349
}
350350
String mainSource = file(
351-
'src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java').getText('UTF-8')
352-
if (!mainSource.contains('MODID = "poweradvantage"')
353-
|| !mainSource.contains('VERSION = "2.4.5.114041"')
351+
'src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java').getText('UTF-8')
352+
if (!mainSource.contains('MODID = "basepower"')
353+
|| !mainSource.contains('VERSION = "2.4.6.114041"')
354354
|| !mainSource.contains('@Mod(PowerAdvantage.MODID)')) {
355355
throw new GradleException('PowerAdvantage source identity changed')
356356
}
357357
if (!file('src/main/java/cyano/poweradvantage/api/PoweredEntity.java').isFile()) {
358358
throw new GradleException('Legacy cyano.poweradvantage.api compatibility surface is missing')
359359
}
360360
String entitySource = file(
361-
'src/main/java/zone/moddev/mc/poweradvantage/init/Entities.java').getText('UTF-8')
361+
'src/main/java/zone/moddev/mc/basepower/init/Entities.java').getText('UTF-8')
362362
[
363363
'tileentity.pipe_terminal', 'tileentity.fluid_drain',
364364
'tileentity.fluid_discharge', 'tileentity.fluid_storage_tank',
@@ -372,7 +372,7 @@ tasks.register('verifyReleaseConfiguration') {
372372
}
373373
}
374374
String modsToml = file('src/main/resources/META-INF/mods.toml').getText('UTF-8').replace('\r\n', '\n')
375-
['modId="poweradvantage"', 'modId="basemetals"', 'modId="orespawn"',
375+
['modId="basepower"', 'modId="basemetals"', 'modId="orespawn"',
376376
'mandatory=true'].each { required ->
377377
if (!modsToml.contains(required)) {
378378
throw new GradleException("Source mods.toml is missing ${required}")
@@ -402,9 +402,9 @@ tasks.register('verifyReleaseConfiguration') {
402402
}
403403
}
404404
Map provider = new JsonSlurper().parse(file(
405-
'src/main/resources/data/poweradvantage/orespawn/provider.json')) as Map
405+
'src/main/resources/data/basepower/orespawn/provider.json')) as Map
406406
Map desertOil = provider.fluid_deposits[
407-
'poweradvantage:fluid_deposit/desert_crude_oil'].dimensions['minecraft:overworld'] as Map
407+
'basepower:fluid_deposit/desert_crude_oil'].dimensions['minecraft:overworld'] as Map
408408
if (desertOil.biome_dictionary != ['SANDY']
409409
|| (desertOil.excluded_biome_dictionary as Set) != (['BEACH', 'MESA'] as Set)) {
410410
throw new GradleException(
@@ -506,12 +506,12 @@ tasks.register('verifyReleaseArtifacts') {
506506
new ZipFile(mainJar).withCloseable { zip ->
507507
List<String> names = zip.entries().collect { it.name }
508508
['META-INF/mods.toml', 'pack.mcmeta',
509-
'zone/moddev/mc/poweradvantage/PowerAdvantage.class',
509+
'zone/moddev/mc/basepower/PowerAdvantage.class',
510510
'cyano/poweradvantage/api/PoweredEntity.class',
511511
'cyano/poweradvantage/api/fluid/FluidNetworkApi.class',
512-
'assets/poweradvantage/lang/en_us.json',
513-
'data/poweradvantage/recipes/fluid_drain.json',
514-
'data/poweradvantage/advancements/recipes/sprocket_rod_normal.json'].each { required ->
512+
'assets/basepower/lang/en_us.json',
513+
'data/basepower/recipes/fluid_drain.json',
514+
'data/basepower/advancements/recipes/sprocket_rod_normal.json'].each { required ->
515515
if (!names.contains(required)) {
516516
throw new GradleException("Release jar is missing ${required}")
517517
}
@@ -527,7 +527,7 @@ tasks.register('verifyReleaseArtifacts') {
527527
}
528528
String modsToml = zip.getInputStream(zip.getEntry('META-INF/mods.toml'))
529529
.getText(StandardCharsets.UTF_8.name())
530-
if (!modsToml.contains('modId="poweradvantage"')
530+
if (!modsToml.contains('modId="basepower"')
531531
|| !modsToml.contains("version=\"${project.mod_version}\"")
532532
|| !modsToml.contains('modId="basemetals"')
533533
|| !modsToml.contains('modId="orespawn"')) {
@@ -555,7 +555,7 @@ tasks.register('verifyReleaseArtifacts') {
555555
}
556556

557557
new ZipFile(new File(libs, expectedReleaseFiles.get()[1])).withCloseable { sourceZip ->
558-
if (sourceZip.getEntry('zone/moddev/mc/poweradvantage/PowerAdvantage.java') == null
558+
if (sourceZip.getEntry('zone/moddev/mc/basepower/PowerAdvantage.java') == null
559559
|| sourceZip.getEntry('cyano/poweradvantage/api/PoweredEntity.java') == null) {
560560
throw new GradleException('Sources jar is missing implementation or legacy API sources')
561561
}
@@ -655,17 +655,17 @@ publishing {
655655
pom {
656656
name = 'Power Advantage'
657657
description = project.mod_description
658-
url = 'https://github.com/MinecraftModDevelopmentMods/PowerAdvantage'
658+
url = 'https://github.com/MinecraftModDevelopmentMods/basePower'
659659
licenses {
660660
license {
661661
name = 'GNU Lesser General Public License, Version 3'
662662
url = 'https://www.gnu.org/licenses/lgpl-3.0.txt'
663663
}
664664
}
665665
scm {
666-
connection = 'scm:git:https://github.com/MinecraftModDevelopmentMods/PowerAdvantage.git'
667-
developerConnection = 'scm:git:ssh://git@github.com/MinecraftModDevelopmentMods/PowerAdvantage.git'
668-
url = 'https://github.com/MinecraftModDevelopmentMods/PowerAdvantage'
666+
connection = 'scm:git:https://github.com/MinecraftModDevelopmentMods/basePower.git'
667+
developerConnection = 'scm:git:ssh://git@github.com/MinecraftModDevelopmentMods/basePower.git'
668+
url = 'https://github.com/MinecraftModDevelopmentMods/basePower'
669669
}
670670
}
671671
}
@@ -1088,9 +1088,9 @@ tasks.register('verifyRecipeTagGuards') {
10881088
throw new GradleException("${recipeFile.path} contains a non-object recipe condition")
10891089
}
10901090
Set<String> guards = conditions
1091-
.findAll { it instanceof Map && it.type == 'poweradvantage:tag_not_empty' }
1091+
.findAll { it instanceof Map && it.type == 'basepower:tag_not_empty' }
10921092
.collect { it.tag as String } as Set<String>
1093-
Set<String> emptyGuards = conditions.findAll { it.type == 'poweradvantage:tag_empty' }
1093+
Set<String> emptyGuards = conditions.findAll { it.type == 'basepower:tag_empty' }
10941094
.collect { it.tag as String } as Set<String>
10951095
if (!(emptyGuards.intersect(guards)).isEmpty()) {
10961096
throw new GradleException("${recipeFile.path} requires the same tag to be empty and nonempty")
@@ -1131,10 +1131,10 @@ tasks.register('clientResourceProbeJar', Jar) {
11311131
// Optional coordinated play-test launch. The ordinary launch stays Power-only;
11321132
// these deobf jars are runtime inputs, never release contents or compile dependencies.
11331133
def advantageExtensionJars = [
1134-
steamadvantage: file(providers.gradleProperty('steamAdvantageDeobfJar').getOrElse(
1135-
'../SteamAdvantage/SteamAdvantage/build/libs-dev/SteamAdvantage-2.2.6.114041-deobf.jar')),
1136-
electricadvantage: file(providers.gradleProperty('electricAdvantageDeobfJar').getOrElse(
1137-
'../ElectricAdvantage/ElectricAdvantage/build/libs-dev/ElectricAdvantage-2.2.6.114041-deobf.jar'))
1134+
basesteam: file(providers.gradleProperty('steamAdvantageDeobfJar').getOrElse(
1135+
'../SteamAdvantage/SteamAdvantage/build/libs-dev/baseSteam-2.2.8.114041-deobf.jar')),
1136+
baseelectric: file(providers.gradleProperty('electricAdvantageDeobfJar').getOrElse(
1137+
'../ElectricAdvantage/ElectricAdvantage/build/libs-dev/baseElectric-2.2.8.114041-deobf.jar'))
11381138
]
11391139

11401140
tasks.register('prepareCombinedEclipseLaunch') {

0 commit comments

Comments
 (0)