Nether Reactor V18-1-6 HOTFIX 1.0.31

CHANGES SINCE 1.0.27 (1.0.28 through 1.0.31 combined; 1.0.29 only re-versioned
1.0.28, 1.0.30 fixes the NW corner hint for corroded copper)
- Fixed a height-check edge case: a player standing at the correct height could be
  told they were too low because their feet Y was a hair under the integer (for
  example 0.9999) and was floored down a block. The check now compares the raw
  feet Y with a 0.15-block tolerance (also covers soul sand). The log now prints
  the exact feet Y.
- Base corner rules are now position-dependent:
  * Northwest (-X,-Z) corner: gold_block or netherite_block only.
  * The other three base corners: gold_block, netherite_block, or copper at
    "exposed" or better. Accepted copper: copper_block, cut_copper,
    chiseled_copper, exposed_copper, exposed_cut_copper, exposed_chiseled_copper,
    and the waxed versions of all of those (waxed_copper / waxed_copper_block,
    waxed_cut_copper, waxed_chiseled_copper, waxed_exposed_copper,
    waxed_exposed_cut_copper, waxed_exposed_chiseled_copper).
  * Weathered and oxidized copper (waxed or not) are rejected as too corroded.
- Extra corner hints appear after the normal "Not the correct pattern!" message,
  and only when copper is involved:
  * Any listed copper (allowed or corroded) at the NW corner: "Gold or netherite
    block expected at the northwest (-X,-Z) base corner".
  * Corroded copper (weathered/oxidized, waxed or not) at any other corner:
    "...is too corroded; use exposed or better".
  Any other mistake keeps only the generic message.
- Corner copper blocks are mineable during a reaction like gold and netherite
  corners, and count as solid for the clearance check.
- Both pack versions and the dependency set to 1.0.31. UUIDs unchanged.

TESTING
Syntax and mocked corner-check cases verified outside the game. Confirm in
Minecraft that your target version uses the block IDs listed above.

----- PREVIOUS RELEASE NOTES (1.0.27 AND EARLIER) -----

Nether Reactor V18-1-6 HOTFIX 1.0.27

CHANGES SINCE 1.0.26
- At 20 seconds, spawn an adult zombie pigman (Bedrock ID minecraft:zombie_pigman)
  instead of a baby zoglin. On Peaceful, this slot becomes an adult piglin.
  The 22- and 25-second slots remain baby zoglins (baby hoglins on Peaceful).
  Mob spawn timing and overall count remain unchanged (4 adults + 2 babies).
- Replace the four cardinal Nether explosions with one overhead explosion
  centered at (core.x+0.5, core.y+1.5, core.z+0.5). Scripted power is 14,
  reduced from the single-blast power 16 used in the older version. The blast
  originates in the vented cavity rather than inside the protected core.
- If the explosion API is unavailable or returns false, a single TNT fallback
  is primed above the finished casing instead of four TNT charges.
- Both pack versions and their dependency set to 1.0.27. UUIDs, resources,
  recipes, original time-of-day fixes, spawns, and all other behavior preserved.

TESTING
JavaScript syntax, manifests, unchanged-file equality, and mocked Script API
reaction paths verified outside the game. In-game explosion visuals still
need Minecraft client testing.

----- PREVIOUS RELEASE NOTES (1.0.26 AND EARLIER) -----

Nether Reactor V18-1-6 HOTFIX 1.0.26

CHANGES SINCE 1.0.25
- Bedrock noon/sunset/midnight correction: midnight is time-of-day 18000,
  not 12000 (sunset). Smooth forward shift keeps approximately 20 game-time
  ticks of movement each server tick, speeding up slightly when necessary to
  reach midnight before normal 46-second burnout. Final time is set with the
  native world.setTimeOfDay(18000) once, not /time add.
- When the reactor reaches midnight, the daylight cycle is paused temporarily
  (only if it was enabled) and resumed on completion/cancellation. A persistent
  recovery marker restores the cycle on world reload if the session was closed
  mid-reaction. A world whose daylight cycle was already disabled is unchanged.
- When the spire is broken early while a valid core remains, immediately set
  midnight before finishing the reaction. Destroying/moving/unloading the core
  instead cancels the time shift at its current time, without forcing midnight.
- Nether blast is now four cardinal-side scripted explosions of radius 14,
  rather than a single +X radius-16 blast. The blastproof core remains intact.
  If native explosions are unavailable, the fallback primes four TNT charges
  around (not on) the reactor core.
- All other 1.0.25 mechanics, mobs, loot tables, textures, recipes, and UI
  are retained without modification; existing pack UUIDs preserved.

INSTALLATION
Extract .mcaddon from ZIP; import into Minecraft; select Behavior/Resource
version 1.0.26 (pack UUIDs deliberately unchanged). Restart Minecraft before
import if it still caches 1.0.25.

TESTING
Automated syntax, package, configuration, and Script API mock tests are
performed outside the Minecraft client. Real in-game behavior remains to be
verified on the target Minecraft version.

1.0.25 - Nether explosion, night sequence, and pigmen pacing (2026-10-11)
- Restore the visible radius-16 Nether explosion used in 1.0.23 by offsetting the explosion origin into the air pocket, rather than into the blastproof core introduced by 1.0.24. Preserve Nether casing and crying-obsidian corners; retain safe ring TNT fallback.
- Restore a smooth Overworld time advance to exactly 12000 (midnight) at 20 time ticks per game tick, as in MCPE 0.6.1 Level.cpp night mode. Hold the night while a reactor runs and resume normal time on finish/early shutdown. Use World getTimeOfDay/setTimeOfDay rather than brittle command-result parsing and detached 60-tick timeouts.
- Source NetherReactorTileEntity.cpp uses up to two pigmen at 10 seconds, one at 13 seconds, and three total alive nearby. Schedule 2/1 adult zombie pigmen at 10/13 seconds, instead of 2/2/2/1 regular spawns.
- Replace THREE already scheduled late slots (20, 22, 25 seconds) with baby zoglins (baby hoglins on Peaceful), including the prior 25-second baby slot. Overall 6 scheduled mobs (3 adult + 3 baby) instead of 8; no extra slots added. All seven existing item-wave timings and amounts retained.
- Behavior/resource pack headers, modules, and dependency version set to 1.0.25, preserving all UUIDs and every non-script asset and definition.
- This is static and mock-tested; live Minecraft explosion behavior and entity AI still need in-game verification.

1.0.24 - User-requested changes (2026-10-11)
- Each mined reactor core now drops its own texture/phase block ID. All dropped cores are reusable (in_use defaults false when placed).
- All three reactor core blocks are explosion-proof but still mineable. Nether explosion fallback leaves the core and reactor base untouched; the Nether final core is made dead before detonation.
- On Peaceful difficulty the scheduled mobs are piglins and a baby hoglin at the final mob wave. On other difficulties existing zombified piglins (Bedrock ID zombie_pigman) are joined by a baby zoglin at the last mob wave, without increasing mob count.
- Any combination of netherite and gold blocks works for the bottom four corner blocks.
- Interact with an empty hand or any item to activate. Sneaking on the core allows normal placement with no pattern check.
- Pack/version identifiers bumped consistently to 1.0.24; scripting startup log also marks 1.0.24.
- Vanilla Peaceful despawning/zombification and entity visibility must be confirmed in live Minecraft.

V18-1-6 HOTFIX (pack version 1.0.23)
- The prior repaired 1.0.22 package used the same UUID and version as the broken
  V18-1-6 package. Minecraft ignores same-version re-imports, so 1.0.22 could
  continue running the old main.js with the extra brace at line 716.
- Incremented both packs' header and module versions, and the BP's RP dependency,
  to 1.0.23 while preserving every UUID. No gameplay logic changed in this hotfix.
- Added a startup console message: [NRC HOTFIX 1.0.23] Nether Reactor Core
  repaired script loaded. That message is visible only if this script actually runs.
- To install: extract the outer ZIP if supplied, import the .mcaddon inside it,
  confirm BOTH packs show version 1.0.23, and activate the updated packs. If the
  script log still reports PackId ending _1.0.22, Minecraft is loading the old pack.
- Validated the script inside the packaged MCADDON (ES-module syntax, mocked
  Bedrock Script API), JSON validity, version dependencies and archive integrity.
  In-game load and behavior cannot be verified by static or mocked testing.

Earlier update notes follow (historical version numbers):

V18-1-6 (pack version 1.0.22)
- Reusable cores: READY, ACTIVE-texture and DEAD-texture all support the nrc:in_use
  boolean block state. Only actively running reactions are blocked; dead-texture
  cores can be activated again after their normal pattern is rebuilt.
- Active or orphaned cores are normalized on interaction, and moved cores are
  reset on a best-effort pistonActivate scan. Mining any core variant uses a
  common ready-core loot table; actual Silk Touch drops require in-game testing.
- Non-Silk-Touch hellrock and obsidian now use documented pickaxe match_tool
  loot pools, dropping vanilla netherrack and obsidian at the proper tiers.
- Removed both silent exact-height gates. Feet below core Y-1 or players too
  far away now produce "All players need to be close to the reactor." in chat.
- The single "Active!" message now appears BEFORE spire/dome placement.
- The original glow stages are unchanged. Obsidian burnout now converts all
  nine top, eight middle and nine bottom non-core positions at steps 860/880/900.
- Item waves now occur at 200/260/400/500/600/760/800; step 440 keeps its
  piglin spawn, while item drops at 440/680/720 are removed to match footage.
- Hellrock and obsidian use vanilla netherrack and stone block sounds as the
  closest approximation to the original behavior. The experimental scoped
  sound mapping file was removed.
- Both packs updated to version 1.0.22 without changing any pack/module UUID.
- Repaired V18-1-6's JavaScript syntax, missing core helpers, core loot JSON
  component placement, state persistence checks, and piston event data access.

Validation: ES module syntax check, all JSON parsing, archive integrity, pack
reference checks, and 93 mocked Script API assertions. Not run in Minecraft.

Not verified in a real Minecraft client:
- Silk Touch double-drop risk on hellrock/obsidian loot pools, and behavior of
  Silk Touch on the three core variants.
- BlockPermutation.resolve with the new nrc:in_use states for cores already
  placed in existing worlds, including save migration and dropped items.
- pistonActivate detection and scan after two ticks on actual moving pistons.
- Whether vanilla netherrack/stone block sounds match the intended original.
- Seven item-wave times were inferred from footage, not original source code.
- Real-time reactor effect sequencing, UI display, terrain transitions,
  Nether/End explosions and spire deterioration in live Minecraft.

Exit Minecraft completely before importing/reopening to reload cached UI files.
Both packs should show 1.0.22.

Earlier update notes follow (historical version numbers):

V18-1-5 HUD TYPE FIX (pack version 1.0.21)
The HUD chat_label override now remains a label. The normal and yellow labels
are siblings under the existing chat background, with mutually exclusive
Active! equality bindings. Both preserve original placement, text binding,
font settings, and fade animation. No label is changed into a panel, so vanilla
label-only properties remain valid after UI definition merging.

Removed the unsupported Java NBT TNT summon path. The Script API explosion that
previously ran after that command failed is now tried directly. Its strength,
position and options are unchanged; the existing final fallback is retained.
This avoids unexpectedly enabling the formerly broken 25-TNT summon branch.

The remaining verbose normal/fly, normal/fizz and normal/step_lava sound lines
are missing optional sound mappings, not block registration errors. No global
sound substitutions were added. Core-missing/changed messages mean the existing
reactor loop found its core removed/replaced and stopped; that logic is unchanged.

Validated HUD control types and both visibility branches, JavaScript syntax,
explosion dispatch in a mocked API, manifests, JSON, unchanged block definitions,
and ZIP integrity. Actual Bedrock/iOS UI rendering has not been run here.
Exit Minecraft completely before importing/reopening to reload cached UI files.
Both packs should show 1.0.21.

Earlier update notes follow (historical version numbers):

V18-1-4 WORLD-START REGISTRATION FIX
Corrected menu_category.group on all three reactor core variants from
itemGroup.name.stone to minecraft:itemGroup.name.stone. Block format 1.21.100
requires a namespaced group. The missing namespace prevented core registration,
which in turn invalidated the core recipe and produced RP registry warnings.
Pack/module versions and the RP dependency were bumped together to 1.0.20.
Existing UUIDs and all gameplay, texture, sound, loot, and UI changes are retained.

Validation now explicitly checks namespaced menu groups (the prior JSON syntax
and mocked script checks did not detect this engine-level requirement).
The check rejects all three old definitions and accepts all seven current ones.
The .mcaddon has also been checked for JSON validity, block/recipe/resource
references, matching manifest versions, and ZIP integrity.
Minecraft/iOS world-start execution is not available in this environment.

Install: leave the world, import this update, then reopen the world with both
updated packs enabled. Both packs should report version 1.0.20. A log still
showing PackId ending in _1.0.19 means the old pack is still active.

Reference for namespaced groups:
https://learn.microsoft.com/en-us/minecraft/creator/documents/craftingitemcatalogdocumentation

Nether Reactor V18-1-4 - Bedrock 26.52 update

INSTALL
Import this .mcaddon and enable both its Behavior and Resource packs. Pack UUIDs
are preserved; their version is now 1.0.20. Put its Resource pack above packs
that also edit chat_screen.json or hud_screen.json to use the Active! color.
No Beta APIs or Upcoming Creator Features are required by this update.

BLOCKS
nrc:glowingobsidian: supplied glowing-obsidian pack PNG, light 13, netherite-block
hardness (50), netherite sounds, texture-matched particles.
nrc:hellrock: supplied Classic_Texture netherrack PNG, netherrack hardness (0.4),
classic stone sounds, matching particles. Silk Touch gives hellrock; otherwise
an appropriate pickaxe gives vanilla minecraft:netherrack.
nrc:obsidian: supplied retro obsidian PNG, obsidian hardness (50), classic stone
sounds, matching particles. Silk Touch gives the custom block; otherwise an
appropriate diamond/netherite pickaxe gives vanilla minecraft:obsidian.
Native Bedrock Silk Touch harvesting applies before custom loot processing;
explicit mutually exclusive Silk Touch/ordinary loot pools are also supplied.
Normal mining retains vanilla pickaxe/tier requirements. No spawner detection
or scripted item-spawning workaround is used.
The old nrc:glowing_obsidian remains registered but hidden from the creative
menu for existing saves; new generation and the existing recipe use the new ID.
The classic sound reference maps stone events to built-in dig.stone samples;
these scoped mappings are copied without globally replacing vanilla sounds.

REACTOR AND MESSAGES
Spire generation and deterioration use hellrock. Ordinary obsidian transitions
and casing use custom obsidian. Glow stages use glowingobsidian. Existing
crying obsidian behavior is retained. Natural Nether pocket clearing still
recognizes vanilla netherrack.
Active! is plain text, emitted only after activation succeeds. Exact-text UI
bindings select a label colored [1, 1, 0.33] for Active! in HUD and chat history;
other text uses the normal label. No section-sign formatting codes or arrow.
Pattern failures use: Not the correct pattern!
The original did not implement the requested distance/height messages. Added:
- All connected players must be in the same dimension and within 16 blocks of
  the core; otherwise: All players need to be close to the reactor.
- Generated structure must fit the dimension build range; otherwise the exact
  requested lower-down/higher-up message is sent. This uses current dimension
  limits, not the historical MCPE world ceiling.
The existing sword interaction and player-feet-at-core-Y-minus-one requirement
are retained. Active/dead cores cannot reactivate.

LOG FIXES
Removed the unnecessary placement_direction trait from the compatibility block.
Updated block formats and added explicit full-block geometry.
Corrected @minecraft/server dependency to stable string version 1.19.0.
Repaired recipe output and block registrations.
Removed obsolete blockBreak fallback and its misleading warning; retained
playerBreakBlock shutdown. Prevented duplicate/false Active! messages.
The supplied normal/fly verbose sound line is not the missing-block failure;
no global vanilla sound overrides were added to suppress unrelated diagnostics.

VALIDATION
All JSON parsed; recipe, loot, texture, and manifest references checked.
Three supplied block PNGs verified byte-for-byte. JavaScript syntax checked.
27 mocked Script API assertions exercised activation, failure messages, duplicate
activation, and Overworld/Nether/End sequences. This is not a Minecraft runtime
test. Import, native harvesting/mining timing, sound/particle rendering, and
chat UI appearance must still be verified in the actual 26.52 client.

REFERENCE DOCUMENTATION
https://learn.microsoft.com/en-us/minecraft/creator/documents/loottableconditions
https://learn.microsoft.com/en-us/minecraft/creator/reference/content/blockreference/examples/blockcomponents/minecraftblock_destruction_particles
https://www.minecraft.net/fr-fr/article/minecraft-1-21-50-bedrock-changelog
https://github.com/Mojang/bedrock-samples/tree/main/resource_pack/ui

ASSET SOURCES
User-supplied glowing-obsidian.mcpack, Classic_Texture.mcpack,
Lz-RetroLavaObsidian-1.20.x-1.0.0, and Old MCPE Sounds.mcpack.
