<div align="center">
<h1>
<span style="color: #D946EF; text-shadow: 0 0 30px #D946EF, 0 0 60px rgba(217,70,239,0.2);">⚗️THE ALCHEMIST'S PURIFICATION⚗️</span>
<span style="color: #F59E0B; font-size: 0.5em; display: block; margin-top: 6px;">v0.9.4 — ALL THAT WAS BROKEN, REFORGED</span>
</h1>
<img src="https://img.shields.io/badge/🔥_Blaze_Blossom-F97316?style=for-the-badge&logoColor=white">
<img src="https://img.shields.io/badge/💎_Miner's_Fortune-3B82F6?style=for-the-badge&logoColor=white">
<img src="https://img.shields.io/badge/🧹_Phantom_Purge-8B5CF6?style=for-the-badge&logoColor=white">
<img src="https://img.shields.io/badge/🌑_Shadow_Mending-1F2937?style=for-the-badge&logoColor=white">
<br><br>
<p><i>"First, we identify the corruption."</i></p>
<p><i>"Then, we burn away the dross."</i></p>
<p><i>"Finally, we pour what remains into a vessel that will hold."</i></p>
</div>
---
<div align="center">
## 📖 THE FORMULARY
</div>
---
## ⚗️ REAGENT I · The Blaze Blossom's Secret
> *The Blaze Blossom (flower_6) was a liar.*
>
> *It promised fire to those who harvested it, yet gave nothing. Its Java heart was bound by a hardcoded law: "Only shears may claim me." All other hands—bare, pickaxe, shovel—were met with emptiness. The loot table sat ignored, a recipe written in a language the flower refused to speak.*
>
> *We have taught it a new truth.*
**🔥 Distillation:**
- `BlazeFlowerBlock` born from `DyedreamFlowerBlock` — shears yield the blossom itself; all other methods yield **1× Blaze Powder**
- `flower_6` extracted from the `FLOWERS_SINGLE` batch forge and given its own crucible
- Loot table synchronized: shears → self; all else → `minecraft:blaze_powder`
---
## 🧹 REAGENT II · Purging the Phantom Forms
> *In the archives beneath the workshop, we found ghosts.*
>
> *Sixty-three files that wore the faces of the living yet served no master. They were duplicates—shadows cast by old path confusion, bloating the tome without purpose. Twenty-seven geometries and twenty-six animations, perfectly mirrored in the subdirectories below, yet clinging to the root like stubborn spirits.*
>
> *Ten more were orphans—old names abandoned by their identifiers, answering to calls that no longer exist.*
>
> *The exorcism is complete.*
**🧹 Purification Details:**
| Category | Count | Fate |
|:---|:---:|:---|
| Exact duplicates (unreferenced) | 53 | Dissolved |
| Orphaned old-name entities | 10 | Dissolved |
| Hardcoded root-path keepers | 6 geo + 4 anim | Preserved |
| **Total removed** | **63** | **Purged** |
> *The jar is lighter now. The spirits are at rest.*
---
## 🎭 REAGENT III · Breathing Life into Dolls
> *Four dolls stood motionless in their glass cases. The Geckolib animators wept: "We cannot find their breath."*
>
> *Their bodies existed. Their textures existed. But the animation scrolls—the sheets that tell a doll how to sway, how to blink, how to pretend it is alive—were absent. The console screamed: "Couldn't load animation."*
>
> *We have given them the breath of emptiness. A placeholder. A silence that is, at least, intentional.*
**🎭 Animation Scrolls Restored:**
- `qin_doll_0` · `little_purple_doll_0` · `eoul_doll` · `love_u_doll`
- All four now bear empty animation placeholders (matching `empty.animation.json`)
- No more dead resource wails in the log
---
## 📜 REAGENT IV · The Codex of Proper Form
> *There is a right way to inscribe a loot table. A grammar, precise as alchemical notation. We had forgotten it.*
>
> *The old scribes wrote in the tongue of 1.20. The new world speaks 1.21.1. The predicates were wrong. The enchantments nested incorrectly. And so, twenty-three tablets—sixty-two inscriptions—were silently declared void. The ores, when struck, gave up their whole selves instead of their raw essence.*
>
> *We have rewritten the codex. The stones now break as they should.*
**📜 The Law Inscribed:**
```json
// The Old Corruption (1.20)
"predicate": { "enchantments": [ { "enchantment": "minecraft:silk_touch" } ] }
// The Purified Form (1.21.1)
"predicate": { "predicates": { "minecraft:enchantments": [ { "enchantments": "minecraft:silk_touch" } ] } }
```
**📜 Scope of Purification:**
- **23 tablets** (loot_table/blocks/*.json)
- **62 inscriptions** corrected
- **303 total JSONs** now parse cleanly
- Ores finally respect **Silk Touch** vs **Fortune** vs **bare hands**
**📜 New Canonical Texts:**
- `AGENTS.md` — Loot table format specification for NeoForge 1.21.1
- `.github/skills/neoforge-block-drops/SKILL.md` — `match_tool` predicate trap documented with correct/incorrect examples
---
## 💎 REAGENT V · Unbreaking the Miner's Fortune
> *The SelfDropBlock was overzealous. A guardian that refused to trust the loot tables, it would shove the entire block into the player's hands whenever the table returned empty—even when the emptiness was intentional, even when Silk Touch had not been invoked.*
>
> *Titanium ore. Soul ore. Wind-condensed ore. All of them, handing over their whole bodies instead of their rough shards.*
>
> *We have taught the guardian discernment: only intervene when there is NO table at all. If a table exists, respect its verdict—even if that verdict is silence.*
**💎 Reforged Logic:**
| Condition | Before | After |
|:---|:---|:---|
| Block has valid loot table | Fallback to self on empty drop | **Trust the table completely** |
| Block has NO loot table | Fallback to self | **Fallback to self** (unchanged) |
| Affected ores | All dropping selves | **Dropping raw ores correctly** |
> *The miner swings the pickaxe. The stone breaks. The rough shard falls. As it was always meant to be.*
---
## 🌸 REAGENT VI · The White Flower's Return
> *The White Flower Brooch (white_flower_body) was exiled to an outer realm—the PasterDreamSanity addon. Yet the main world cried out for it. The creative tab held an empty space. The Aaroncus hand chests reached for it and found air. The smoketest rituals failed.*
>
> *We have called it home.*
**🌸 Reintegration Rite:**
- Registered in **main mod** via `CurioAPI.create("white_flower_body").slot(BODY)`
- New `WhiteFlowerBodyItem.java` migrated to main module
- `PDItems` re-exports; `PDCreativeTabsCurio` displays directly
- `data/curios/tags/item/body.json` updated
- **PasterDreamSanity** stripped of duplicate registration (now a hollow placeholder)
> *The brooch no longer asks permission from another realm. It lives here, as it always should have.*
---
## 🌑 REAGENT VII · Mending the Shadow's Path
> *Four fractures in the dark. Four stitches.*
### 🛏️ The Long Bed of Shadows
- **Symptom:** The True Shadow Bed refused entry, checking for an achievement granted only *after* entering the Lamp Shadow World—a deadlock of causality.
- **Remedy:** Logic rewritten to check prerequisites properly (`key=true` + `achievement_hide_9`), allowing passage on the first right-click when conditions are met.
### ⏳ The Dungeon's Frozen Hourglass
- **Symptom:** Shadow Dungeon Portal cooldown never ticked. The repaired portal block had inherited no clock from its broken predecessor.
- **Remedy:** `onPlace` and `tick` cooldown logic restored. Time flows. The hourglass turns.
### 🚪 The Door That Forgot Its Direction
- **Symptom:** Dungeon doors placed by jigsaw structure generation ignored rotation, standing perpendicular to their walls like drunk sentinels.
- **Remedy:** `FACING` property added to `ShadowDungeonDoorBlock`. Blockstates now carry four orientations. The doors stand at attention.
### 🌱 The Bud That Hoarded Itself
- **Symptom:** Dyedream Bud Block, when broken, dropped itself instead of its nugget essence.
- **Remedy:** `getDrops` now yields `dyedream_bud_nugget`. The plant shares its seed.
---
<div align="center">
## 📋 THE MASTER FORMULA
</div>
```diff
+ 🔥 BlazeFlowerBlock: flower_6 now drops Blaze Powder on non-shear harvest
+ 🧹 63 phantom geo/animation files purged from root directories
+ 🎭 4 doll empty animation placeholders (qin_doll_0, little_purple_doll_0, eoul_doll, love_u_doll)
+ 📜 Loot table format codified in AGENTS.md + SKILL.md (1.21.1 match_tool spec)
+ 💎 62 match_tool predicates corrected from 1.20 → 1.21.1 format across 23 files
+ 💎 SelfDropBlock: only self-fallback when NO loot table exists (ores drop raw correctly)
+ 🌸 white_flower_body merged from Sanity addon into main mod registration
+ 🛏️ True Shadow Bed entry logic fixed (no more achievement deadlock)
+ ⏳ Shadow Dungeon Portal cooldown ticking restored
+ 🚪 Shadow Dungeon Door FACING property + 4-direction blockstates
+ 🌱 Dyedream Bud Block now drops dyedream_bud_nugget instead of self
- 🧹 53 unreferenced duplicate geo/animation files
- 🧹 10 orphaned old-identifier entity geo copies
- 📜 62 instances of 1.20-style match_tool predicates
- 🌸 Duplicate white_flower_body registration in PasterDreamSanity
```
---
<div align="center">
**⚗️ THE CRUCIBLE COOLS. THE PURIFICATION IS COMPLETE. ⚗️**
<br>
> *"Every corruption was a lesson. Every phantom, a map to what we had forgotten."*
> *"The dream is lighter now. The stones break true. The dolls breathe emptiness."*
> *"And the alchemist turns to the next page."*
<br>
[](https://github.com/LOVE-U987/NeoPasterDream1)
<br>
*✨ For those who break stones and expect shards, not whole mountains.*
*✨ For those who know that every phantom file is a debt to the future.*
*✨ For those who mend the dream, one predicate at a time.*
<br>
**🌙 v0.9.4 — THE DREAM IS PURER NOW. SLEEP DEEP. 🌙**
</div>
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }