Sakalti 1.08 Sulphur ASM patch / mapping inspection report
Target: Minecraft 1.16.5, Forge 36.x, Tinkers' Construct 3.3+, Mantle 1.6+, Constructs Armory 2.0.0-alpha.2.

Verified from target JAR metadata and bytecode:
- MOD metadata declares JavaFML loader [36,), Minecraft [1.16.5], Forge [36,37), Mantle [1.6,), TConstruct [3.3,), Constructs Armory [2.0.0-alpha.2,3.0.0).
- com/sakalti/ModMain.<init>() calls ModMetals.register(IEventBus), ModFluids.register(IEventBus), and SakaltiOreRegistry.register(IEventBus).
- com/sakalti/ModMetals uses Forge DeferredRegister.create(IForgeRegistry,String), DeferredRegister.register(String,Supplier), and RegistryObject fields. Existing Sulphur block/item fields are SULPHUR_CHUNK, SULPHUR_BLOCK, SULPHUR_JEWEL.
- com/sakalti/ModMetalsBlockSupplier.level(String) already special-cases "sulphur_chunk" to harvest level 2; get() configures PICKAXE and calls Properties.harvestLevel(int).
- com/sakalti/ModFluids has FluidEntry(name), registerFluid(String), createProperties(FluidEntry), and register(IEventBus). registerFluid uses IDs <name> and <name>_flow and derives assets/sakalti/textures/fluid/<name>_still.png and <name>_flow.png.
- ASM patch adds ModFluids.SULPHUR_ENTRY, SULPHUR and SULPHUR_FLOWING and calls registerFluid("molten_sulphur") in ModFluids.<clinit>. The existing ModFluids.register(IEventBus) registers these through the existing FLUIDS DeferredRegister.
- ASM patch changes createProperties(FluidEntry): temperature is 200 for "molten_sulphur", otherwise preserves 1900 for other fluids.
- Existing bytecode contains SRG-style identifiers including AbstractBlock$Properties.func_200945_a(Material), func_200943_b(float), func_235861_h_(), and Item$Properties.func_200916_a(ItemGroup). Owners and descriptors were inspected with javap.

Mapping research:
- Forge documentation for 1.16.x says Forge uses Mojang Official mappings from 1.16.5, while legacy MCP mappings may be selected using snapshot channel version 20210309-1.16.5. References: https://docs.minecraftforge.net/en/1.16.x/gettingstarted/ and https://github.com/MinecraftForge/MCPConfig/blob/master/versions/release/1.16.5/config.json
- Forge documentation explains that production bytecode uses SRG identifiers and development mappings provide readable names: https://docs.minecraftforge.net/en/fg-5.x/configuration/
- No Forge/Minecraft development jars, MCP mapping archive, TConstruct/Mantle/Constructs Armory jars, Gradle, or Maven are installed in this execution environment. Shell network access to Maven Central failed DNS resolution. Consequently, the exact human-readable alias for each func_ identifier could not be cross-checked against the exact mapping artifact; no aliases have been guessed.

Validation performed:
- ASM transformation executed using the JDK-bundled ASM implementation (jdk.internal.org.objectweb.asm).
- javap parsed the transformed class and showed the added fields, molten_sulphur registration, and 200 temperature branch.
- ZIP integrity passed; no duplicate ZIP entries; all 762 JSON files parsed successfully; the 15 requested locale files contain the new fluid keys.
- Forge launch/gameplay test was not possible: no game instance or required dependency jars are available in this environment.
