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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/iron-age-furniture-0.4.0.120062.jar
build/libs/iron-age-furniture-0.4.0.120062-sources.jar
build/libs/iron-age-furniture-0.4.0.120062-javadoc.jar
build/libs/iron-age-furniture-0.4.1.120062.jar
build/libs/iron-age-furniture-0.4.1.120062-sources.jar
build/libs/iron-age-furniture-0.4.1.120062-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.md
- name: Upload diagnostics on failure
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# IronAgeFurniture 0.4.1.120062

- Remove the old tallow recipes so raw meat cooks normally again.

# IronAgeFurniture 0.4.0.120062

- Bring Phase 4 to Minecraft 1.20.6: single and double beds, canopies, wingback chairs and thrones in all supported vanilla and BOP woods and colours.
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

IronAgeFurniture adds chairs, stools, benches, lighting, and other ye olde-style furniture to Minecraft.

This branch is for Minecraft 1.20.6 with NeoForge 20.6.139. The Phase 4 version is `0.4.0.120062`.
This branch is for Minecraft 1.20.6 with NeoForge 20.6.139. The Phase 4 version is `0.4.1.120062`.

This fixes raw meat turning into tallow when cooked. Minecraft has its own candles now, so the old tallow recipes are no longer needed.

Phase 4 adds single and double beds, canopies, wingback chairs, thrones, removable shield displays and sconces that hold up to four candles. Shields and candles keep their names and other saved details when removed. Furniture is organised into four creative tabs, with gameplay settings controlled by the server. All 17 translations are included.

Expand Down Expand Up @@ -33,7 +35,7 @@ Generate reproducible Eclipse/Buildship metadata with:
gradlew.bat prepareEclipse verifyEclipseProductionClasspath
```

Releases use the manual publication workflow after CI passes. A local build does not publish anything. The Maven coordinate is `zone.moddev.mc:iron-age-furniture:0.4.0.120062`.
Releases use the manual publication workflow after CI passes. A local build does not publish anything. The Maven coordinate is `zone.moddev.mc:iron-age-furniture:0.4.1.120062`.

Furniture registrations and their matching blockstates, models, recipes, advancements, and translations are generated from `gradle/furniture-catalog.json`. Normal builds verify committed output without changing it; run `gradlew.bat updateFurnitureCatalog` only when intentionally changing the catalog.

Expand Down
32 changes: 12 additions & 20 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ tasks.register('verifyReleaseConfiguration') {
description = 'Verifies the exact IronAgeFurniture 1.20.6 NeoForge release identity.'
doLast {
Map<String, String> expected = [
mod_version : '0.4.0.120062',
mod_version : '0.4.1.120062',
mod_group : 'zone.moddev.mc',
mod_archive_name : 'iron-age-furniture',
mod_id : 'ironagefurniture',
Expand Down Expand Up @@ -679,8 +679,8 @@ tasks.register('verifyResourceJson') {
include '**/pack.mcmeta'
}.files.sort { it.path }
// Includes the copper-ingot fallback recipe and its discovery advancement.
if (jsonFiles.size() != 27232) {
throw new GradleException("Expected 27232 runtime JSON documents, found ${jsonFiles.size()}")
if (jsonFiles.size() != 27220) {
throw new GradleException("Expected 27220 runtime JSON documents, found ${jsonFiles.size()}")
}
jsonFiles.each { candidate ->
try {
Expand Down Expand Up @@ -733,13 +733,14 @@ tasks.register('verifyResourceJson') {
boolean optional = !(metal in ['iron', 'gold', 'copper'])
[("light_metal_ironage_sconce_floor_empty_${optional ? 'basemetals_' : ''}${metal}.json".toString()): metal]
}
Map<String, Integer> tallowYields = [porkchop: 3, beef: 2, mutton: 2, rabbit: 1, chicken: 1, rotten_flesh: 1]
Set<String> waxRecipes = (tallowYields.keySet().collect { "tallow_from_${it}.json".toString() }
+ ['candles_from_tallow.json']).toSet()
Set<String> waxRecipes = ['candles_from_tallow.json'].toSet()
if (!recipeDocuments.keySet()*.name.containsAll(frameRecipes.keySet() + waxRecipes)) {
throw new GradleException('All 23 fixed-material frame recipes and seven tallow/candle recipes are required')
throw new GradleException('All 23 fixed-material frame recipes and the legacy tallow-to-candle recipe are required')
}
recipeDocuments.each { recipeFile, document ->
if (document.result instanceof Map && document.result.id == 'ironagefurniture:tallow') {
throw new GradleException("Retired tallow production recipe remains: ${recipeFile}")
}
if (recipeFile.name == 'bed_recolour.json') {
if (document != [type: 'ironagefurniture:bed_recolour'])
throw new GradleException('Manual bed recolouring must retain its exact special recipe identity')
Expand Down Expand Up @@ -793,19 +794,10 @@ tasks.register('verifyResourceJson') {
}
}
if (waxRecipes.contains(recipeFile.name)) {
if (recipeFile.name == 'candles_from_tallow.json') {
if (document.type != 'minecraft:crafting_shapeless'
|| document.ingredients != [[item: 'ironagefurniture:tallow'], [item: 'minecraft:string']]
|| document.result != [id: 'minecraft:candle', count: 8]) {
throw new GradleException('Tallow plus string must retain the eight native vanilla candles recipe')
}
} else {
String meat = recipeFile.name.substring('tallow_from_'.length(), recipeFile.name.length() - 5)
if (document.type != 'minecraft:smelting' || document.ingredient != [item: "minecraft:${meat}".toString()]
|| document.result != [id: 'ironagefurniture:tallow', count: tallowYields[meat]]
|| document.experience != 0.1 || document.cookingtime != 200) {
throw new GradleException("Tallow smelting input, yield or native cooking contract changed: ${recipeFile}")
}
if (document.type != 'minecraft:crafting_shapeless'
|| document.ingredients != [[item: 'ironagefurniture:tallow'], [item: 'minecraft:string']]
|| document.result != [id: 'minecraft:candle', count: 8]) {
throw new GradleException('Tallow plus string must retain the eight native vanilla candles recipe')
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ IronAgeFurniture releases use `Major.Minor.Bug.Target`. The first three componen

The target is calculated as `MmmppL`: Minecraft major without padding, two-digit minor, two-digit patch, and a one-digit loader code. Forge uses loader code `1`; NeoForge uses `2`.

For Minecraft 1.20.6 NeoForge, the target is `120062`, so the Phase 4 version is `0.4.0.120062`. The release tag is the complete version, without a prefix. Local builds do not create tags or publish releases.
For Minecraft 1.20.6 NeoForge, the target is `120062`, so the Phase 4 version is `0.4.1.120062`. The release tag is the complete version, without a prefix. Local builds do not create tags or publish releases.

Equivalent Phase 4 ports retain `0.4.0` and change only the target. A player-visible feature or fix changes Major, Minor, or Bug independently of the target. The target does not imply compatibility with saves from newer Minecraft releases.
Equivalent ports retain their functional version and change only the target. A player-visible feature or fix changes Major, Minor, or Bug independently of the target. The target does not imply compatibility with saves from newer Minecraft releases.

The complete version must agree with `minecraft_version`, `loader_name`, and `loader_code` in `gradle.properties`. CI build numbers are never appended.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ org.gradle.caching=true
org.gradle.parallel=false

# Project and release identity.
mod_version=0.4.0.120062
mod_version=0.4.1.120062
mod_group=zone.moddev.mc
mod_archive_name=iron-age-furniture
mod_id=ironagefurniture
Expand Down
4 changes: 0 additions & 4 deletions gradle/lighting-catalog.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,5 @@ ext.renderLightingCatalog = { File outputRoot, Map language ->
write("${assets}/models/item/tallow.json", [parent: 'minecraft:item/generated', textures: [layer0: 'ironagefurniture:item/tallow']])
write("${data}/recipes/candles_from_tallow.json", [type: 'minecraft:crafting_shapeless', ingredients: [[item: 'ironagefurniture:tallow'], [item: 'minecraft:string']], result: [id: 'minecraft:candle', count: 8], 'neoforge:conditions': lightConditions])
discover('candles_from_tallow', 'ironagefurniture:tallow', lightConditions)
[porkchop: 3, beef: 2, mutton: 2, rabbit: 1, chicken: 1, rotten_flesh: 1].each { meat, count ->
write("${data}/recipes/tallow_from_${meat}.json", [type: 'minecraft:smelting', category: 'food', ingredient: [item: "minecraft:${meat}"], result: [id: 'ironagefurniture:tallow', count: count], experience: .1, cookingtime: 200, 'neoforge:conditions': lightConditions])
discover("tallow_from_${meat}".toString(), "minecraft:${meat}".toString(), lightConditions)
}
generated
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading