Skip to content
Closed
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# ChemLib — Migration Notes (1.20.1 → 1.21.1)

This release ports ChemLib from Forge 1.20.1 to NeoForge 21.1.228 / Minecraft 1.21.1. The
update is **API-breaking**. The notes below cover every change a downstream mod needs to make.

The mod id (`chemlib`) and Java package roots (`com.smashingmods.chemlib.*`) are unchanged.

---

## `Element.getGroupName()` → `getGroupKey()`

`Element.getGroupName()` is renamed to `getGroupKey()`. The return value is no longer a literal
display string ("Alkali Metals") — it is a translation key ("chemlib.group.alkali_metals").
Consumers must pass it through `Component.translatable(...)` to obtain the localized text.

```java
// before (1.20.1)
Component label = Component.literal(element.getGroupName());

// after (1.21.1)
Component label = Component.translatable(element.getGroupKey()).withStyle(ChatFormatting.GRAY);
```

Empty-string return (atomic numbers outside the periodic table groupings) is preserved — callers
should still guard with `if (!groupKey.isEmpty())`.

---

## Tag namespace `forge:` → `c:`

NeoForge 1.21 adopts the cross-loader **Common** tag namespace (`c:`) also used by Fabric.
ChemLib's block and item tag generators emit tags under `c:` instead of `forge:`. Datapacks,
recipe JSONs, and any code references must be updated.

Affected tag families (generated for every chemical):

- `c:dusts/{chemical}` (was `forge:dusts/{chemical}`)
- `c:storage_blocks/{chemical}` (was `forge:storage_blocks/{chemical}`)

Plus the following special-case dust tags:

- `c:dusts/niter` (was `forge:dusts/niter`)
- `c:dusts/apatite` (was `forge:dusts/apatite`)
- `c:dusts/cinnabar` (was `forge:dusts/cinnabar`)
- `c:sawdust` (was `forge:sawdust`)

Suggested search-and-replace in any consumer:
- `forge:dusts/` → `c:dusts/`
- `forge:storage_blocks/` → `c:storage_blocks/`
- `forge:sawdust` → `c:sawdust`

---

## `ChemicalLiquidBlock` constructor

```java
// before (1.20.1)
public ChemicalLiquidBlock(Supplier<? extends FlowingFluid> pFluid, String pChemicalName)

// after (1.21.1)
public ChemicalLiquidBlock(FlowingFluid pFluid, String pChemicalName)
```

Unwrap the supplier at the call site (`fluidSupplier.get()`).
187 changes: 65 additions & 122 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,97 +1,85 @@
plugins {
id 'java'
id 'java-library'
id 'idea'
id 'net.minecraftforge.gradle' version '[6.0,6.2)'
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
id 'com.matthewprenger.cursegradle' version '1.4.0'
id 'maven-publish'
id 'net.neoforged.moddev' version '2.0.78'
}

apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'org.parchmentmc.librarian.forgegradle'
apply plugin: 'maven-publish'
version = mod_version
group = mod_group_id

version = "$minecraft_version-$mod_version"
group = 'com.smashingmods'
archivesBaseName = 'chemlib'
base {
archivesName = "${mod_id}"
}

java.toolchain.languageVersion = JavaLanguageVersion.of(21)

java.toolchain.languageVersion = JavaLanguageVersion.of(17)
neoForge {
version = neoforge_version

parchment {
mappingsVersion = parchment_mapping_version
minecraftVersion = parchment_minecraft_version
}

minecraft {
mappings channel: mapping_channel, version: "$mapping_version-1.20.1"
copyIdeResources = true
runs {
configureEach {
systemProperty 'forge.logging.markers', 'REGISTRIES'
systemProperty 'forge.logging.console.level', 'debug'
}
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
jvmArgs '-XX:+AllowEnhancedClassRedefinition'

mods {
chemlib {
source sourceSets.main
}
}
client()
}

server {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
jvmArgs '-XX:+AllowEnhancedClassRedefinition'

mods {
chemlib {
source sourceSets.main
}
}
server()
}

data {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
jvmArgs '-XX:+AllowEnhancedClassRedefinition'
args '--mod', "$archivesBaseName", '--all', '--output', file('src/generated/resources'), '--existing', file('src/main/resources')

mods {
chemlib {
source sourceSets.main
}
}
data()
programArguments.addAll '--mod', mod_id, '--all',
'--output', file('src/generated/resources/').absolutePath,
'--existing', file('src/main/resources/').absolutePath
}
}
}

sourceSets.main.resources { srcDir 'src/generated/resources' }
mods {
"${mod_id}" {
sourceSet sourceSets.main
}
}
}

repositories {
maven { url "https://maven.blamejared.com/" }
maven {
url "https://www.cursemaven.com"
content {
includeGroup "curse.maven"
}
name = 'JEI'
url = 'https://maven.blamejared.com/'
}
}

dependencies {
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
implementation fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}")
runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")
compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"
compileOnly "mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}"
runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}"
}

def resourceTargets = ['META-INF/mods.toml', 'pack.mcmeta']
sourceSets.main.resources { srcDir 'src/generated/resources' }

def resourceTargets = ['META-INF/neoforge.mods.toml', 'pack.mcmeta']
def replaceProperties = [
minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range,
forge_version: forge_version, forge_version_range: forge_version_range,
loader_version_range: loader_version_range,
mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version,
mod_authors: mod_authors, mod_description: mod_description
minecraft_version : minecraft_version,
minecraft_version_range : minecraft_version_range,
neoforge_version : neoforge_version,
neoforge_version_range : neoforge_version_range,
loader_version_range : loader_version_range,
mod_id : mod_id,
mod_name : mod_name,
mod_license : mod_license,
mod_version : mod_version,
mod_authors : mod_authors,
mod_description : mod_description
]

processResources {
inputs.properties replaceProperties
replaceProperties.put 'project', project

filesMatching(resourceTargets) {
expand replaceProperties
}
Expand All @@ -100,33 +88,17 @@ processResources {
jar {
manifest {
attributes([
"Specification-Title" : "$archivesBaseName",
"Specification-Vendor" : "SmashingMods",
"Specification-Version" : "1",
"Implementation-Title" : project.name,
"Implementation-Version" : project.version,
"Implementation-Vendor" : "SmashingMods",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
'Specification-Title' : mod_id,
'Specification-Vendor' : 'SmashingMods',
'Specification-Version' : '1',
'Implementation-Title' : project.name,
'Implementation-Version' : project.version,
'Implementation-Vendor' : 'SmashingMods',
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}

def secrets = new Properties()
file('secrets.properties').withInputStream {
stream -> secrets.load(stream)
}

fileTree("secrets").matching {
include "**/*.properties"
}.each {
File file ->
file.withInputStream {
stream -> secrets.load(stream)
}
}

jar.finalizedBy('reobfJar')

java {
withSourcesJar()
withJavadocJar()
Expand All @@ -135,45 +107,16 @@ java {
publishing {
publications {
mavenJava(MavenPublication) {
afterEvaluate {
artifact project.jar
artifact project.sourcesJar
artifact project.javadocJar
}
setGroupId 'smashingmods'
setArtifactId 'chemlib'
from components.java
groupId = project.group
artifactId = mod_id
}
}
repositories {
maven {
url "https://maven.tamaized.com/releases"
credentials {
username secrets.getProperty("maven_username")
password secrets.getProperty("maven_password")
}
}
}
}

curseforge {
apiKey = secrets.getProperty("apiKey")
project {
id = '340666'
releaseType = 'release'
changelogType = 'markdown'
changelog = file("changelog.md")
addGameVersion 'Forge'
addGameVersion 'Java 17'
addGameVersion "$minecraft_version"
mainArtifact(jar) {
displayName = "ChemLib $version"
relations {
optionalDependency 'jei'
}
}
mavenLocal()
}
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
}
20 changes: 10 additions & 10 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

minecraft_version=1.20.1
minecraft_version_range=[1.20,1.21)
forge_version=47.1.3
forge_version_range=[47,)
loader_version_range=[47,)
mapping_channel=parchment
mapping_version=2023.09.03
minecraft_version=1.21.1
minecraft_version_range=[1.21.1,1.22)
neoforge_version=21.1.228
neoforge_version_range=[21.1.0,)
loader_version_range=[4,)
parchment_minecraft_version=1.21.1
parchment_mapping_version=2024.11.17

mod_id=chemlib
mod_name=ChemLib
mod_license=LGPLv2.1
mod_version=2.0.19
mod_license=LGPL-2.1-only
mod_version=2.0.20
mod_group_id=com.smashingmods.chemlib
mod_authors=DarkArcana
mod_description=ChemLib provides all of the elements of the periodic table and many compounds of those elements. It also includes some items based on the elements and compounds such as ingots and lamps.\nCredits:\n- Andrea Hazard, creator of 'Enhanced Bohr Model' images. Their work is shared under the Creative Commons Attribution-Share Alike 4.0 International license. Read more about the license here: https://creativecommons.org/licenses/by-sa/4.0/deed.en

jei_version=15.2.0.22
jei_version=19.21.1.312
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
16 changes: 12 additions & 4 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven { url = 'https://files.minecraftforge.net/maven' }
maven { url = 'https://maven.parchmentmc.org' }
maven {
name = 'NeoForged'
url = 'https://maven.neoforged.net/releases'
}
maven {
name = 'Parchment'
url = 'https://maven.parchmentmc.org'
}
}
}

plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
}
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
}

rootProject.name = 'chemlib'
13 changes: 12 additions & 1 deletion src/generated/resources/assets/chemlib/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,17 @@
"block.chemlib.zinc_metal_block": "Zinc Block",
"block.chemlib.zirconium_metal_block": "Zirconium Block",
"chemlib.effect.on_hit": "Effects on Hit",
"chemlib.group.actinides": "Actinides",
"chemlib.group.alkali_metals": "Alkali Metals",
"chemlib.group.alkaline_earth_metals": "Alkaline Earth Metals",
"chemlib.group.halogens": "Halogens",
"chemlib.group.lanthanides": "Lanthanides",
"chemlib.group.metalloids": "Metalloids",
"chemlib.group.noble_gases": "Noble Gases",
"chemlib.group.post_transition_metals": "Post-Transition Metals",
"chemlib.group.reactive_non_metals": "Reactive Non-Metals",
"chemlib.group.transition_metals": "Transition Metals",
"chemlib.group.unknown_properties": "Unknown Properties",
"chemlib.jei.compound.acetic_acid.description": "The acid that gives vinegar its flavor. It is useful not only in food, but as an antiseptic and a protic solvent.",
"chemlib.jei.compound.acetylene.description": "This hydrocarbon gas burns intensely when mixed with oxygen, and has been used both for lighthouse lamps and welding torches.",
"chemlib.jei.compound.acetylsalicylic_acid.description": "Also known as aspirin, this chemical is well known for its ability to reduce pain, fever, and inflammation.",
Expand Down Expand Up @@ -1021,4 +1032,4 @@
"itemGroup.chemlib.elements": "Elements",
"itemGroup.chemlib.metals": "Metals",
"itemGroup.chemlib.misc": "Misc Items"
}
}
Loading