Skip to content

V2 correctif audit#135

Open
Giovanniricotta2002 wants to merge 184 commits into
V2from
V2-CorrectifAudit
Open

V2 correctif audit#135
Giovanniricotta2002 wants to merge 184 commits into
V2from
V2-CorrectifAudit

Conversation

@Giovanniricotta2002

Copy link
Copy Markdown
Member

No description provided.

Remove dead V2 relics: lib.multiblock.manager.* (MultiBlockCache,
MultiBlockManager, RegisteredMultiBlockPattern), IBetterPattern,
the non-aisle SimpleMultiBlockPatternBuilder, and the legacy
IrradiatedSurfaceRules v1 implementation. The v2 surface rule logic
now lives in IrradiatedSurfaceRules, and CNNoiseGeneratorSettings
points back to it.

Introduce IMultiblockController to decouple
MultiBlockManagerBeta.findStructure from the concrete
ReactorControllerBlockEntity, and consolidate the duplicated
FALLBACK rod/fluid type ResourceKeys into CreateNuclearRegistries.

Also drop unused fields/imports (CNDensityFunctions.NOODLES,
CNNoiseData basalt mare keys, commented-out registrations and
mob spawns, debug logger call in
SimpleMultiBlockAislePatternBuilder, dead
getDistanceControllerTest), and fix a typo in
MultiBlockOffsetPos (caracter -> character).
Move all radiation-related classes (CNRadiationValues, RadiationBucketItem,
RadiationItem, RadiationEffect, RadiationEffectHandler, the radiation
capability, and RadiationOverlay) out of foundation/item/radiation,
content/effects/capability, foundation/events/overlay and impl/effect
into a single content.radiation package and content.radiation.capability /
content.radiation.client subpackages, to
give the feature one owner instead of spreading it across four layers.

Drop the now-unused RadiationSyncPacket and ClientRadiationData
(dead client-sync packet) along with their CNPackets registration.

Fix the RadiationEffetcHandler typo (-> RadiationEffectHandler) and
merge foundation/util into foundation/utility by moving ClothTagHelper,
updating all references in AntiRadiationArmorItem and
SmithingTransformRecipeMixin.

Add a guard in RadiationRegistry.build() that throws if an item already
implements IRadiationSource, preventing double-counted radiation values
between the two parallel radiation sources.
…yManager

Move the frame fluid cache, fill-ratio computation, and frame column
bounds (min/max Y) out of ReactorControllerBlockEntity into a new
ReactorFrameDisplayManager/ReactorFrameDisplayManagerI pair, following
the manager/service extraction pattern already used for output, input
fluid, and alarm logic.

ReactorFrameRenderer and ReactorAssembler now go through
getFrameDisplayManager() instead of calling the now-removed
getDisplayedFluid/getDisplayedFluidFillRatio/setFrameColumn/
hasFrameColumn/getFrameColumnMinY/getFrameColumnMaxY methods directly
on the controller. NBT read/write for the frame column bounds is
delegated to the new manager as well.

Also expose getInputFluidManager() on the controller, drop a leftover
commented-out debug block in onSpeedChanged, fix a stray line break in
setMultiblockFacing, and tighten changeBiome's visibility to private.
…ion and BoundingBox

IMultiblockController.setMultiblockFacing/getMultiblockFacing and
ReactorControllerBlockEntity's reactorFacing now use Direction instead
of a raw String ("north"/"east"/...), and reactorPos/multiblockStructure
now uses vanilla's BoundingBox instead of a hand-rolled
[xMin,xMax,yMin,yMax,zMin,zMax] int array. MultiBlockManagerBeta and
ReactorPattern.isInReactorRange are updated accordingly, with
isInReactorRange now delegating to BoundingBox.isInside.

DefaultPersistenceService serializes the facing via
Direction.getSerializedName()/byName and the structure bounds via
BoundingBox.CODEC.

ReactorAssembler gains a static getStructureBound(BlockPos, int,
Direction) computing the reactor's BoundingBox from its center, size,
and facing, replacing the old @deprecated
getStructureBounds/applyOffset switch-based lookup tables on the
controller (also removes the dead @deprecated getBlockPosForReactor).
findAndRegisterSpecialBlocks now takes a BoundingBox.

Extract the reactor explosion's circular biome-irradiation logic out of
ReactorControllerBlockEntity.changeBiome/createCircularResolver into a
new BiomeIrradiationService, with biome-tag-based target resolution via
BiomeIrradiationMapping/BiomeIrradiationMappings (overworld/nether/end
each map to their own irradiated biome instead of always Irradiated
Plains).

@Giovanniricotta2002 Giovanniricotta2002 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

h

Giovanniricotta2002 and others added 25 commits June 13, 2026 22:15
…n packages

Sweep of dead/unused imports left over from previous refactors:
SimpleMultiBlockAislePatternBuilder, ClientEvents, ReactorFluidTypesValue,
SmithingClothRecipeBuilder, MultiBlockManagerBeta,
AnimalUtil, VicinityEffect, ClothItem, BigFluidStack, ReactorAssembler,
ReactorControllerBlockEntity, ReactorSummaryDisplaySource,
CNDensityFunctions and IrradiatedBiomes.

Also move the RADIATION_VALUE static import below the regular imports
in RadiationCapability and drop a stray blank line in
IRadiationCapability, with no behavioral change.
…or and ReactorDebugDiagnostics

Move triggerNuclearExplosion out of ReactorControllerBlockEntity into a new
ReactorMeltdownExecutor (IExplosionService), computing explosion size,
spawning the NuclearExplosionEntity, destroying the controller block and
irradiating the surrounding biome. The block entity now delegates to this
service via the existing service-injection pattern and just sets
isExploding.

Replace the verbose logReactorConnections debug dump (raw LOGGER.debug calls)
with ReactorDebugDiagnostics.sendReactorConnectionsTo, which reports input,
fluid input, output and alarm manager state directly to the requesting
player as translated chat messages. Add the corresponding
createnuclear.reactor.debug.* translation keys to reactor.json and update
ReactorControllerBlock's paper-item handler to pass the player through.
Drop the unused translation keys reactor.info.assembled.none,
reactor.info.assembled.destroyer and reactor.info.is from the default,
en_us and en_ud reactor lang files (none of them were referenced anywhere
in code).

Also remove the leftover commented-out "reactor is not assembled" chat
message in ReactorControllerBlock's interact handler.
…te/ReactorGoggleTooltipRenderer

Replace the three loose clientDisplayItems/clientDisplayFluids/clientMaxFluidCapacity
fields on ReactorControllerBlockEntity with a single immutable
ReactorDisplayState record (items, fluids, maxFluidCapacity), with its own
serializeNBT/deserializeNBT for the client sync packet. Move the
serialization logic out of readBasicState/writeBasicState into
DefaultPersistenceService, which now reads/writes the "displayState" tag on
client packets.

Move the Goggles tooltip rendering out of addToGoggleTooltip into a new
stateless ReactorGoggleTooltipRenderer that renders purely from a
ReactorDisplayState snapshot plus the current heat value.

Also switch the debug-connections interaction trigger from holding paper to
holding a debug stick.
Break the single render() method into renderHeaderAndHeat, renderItemRods
and renderFluidTanks, each responsible for one section of the Goggles
tooltip. Pure refactor, no behavioral change — render() now just calls the
three helpers in order.
…lder

Move the per-tick collection of input item/fluid data out of
ReactorControllerBlockEntity.tick() into a new ReactorInputSnapshot
record and ReactorInputSnapshotBuilder service. The builder scans the
input item/fluid handlers and produces a single immutable snapshot
(items, fluids, max fluid capacity, fuel/cooler rods), which the block
entity now uses to populate displayState, bigFuelItem, bigCoolerItem
and bigFluidStack.

This removes a chunk of inline collection logic and several now-unused
imports from the block entity, consolidating the snapshot into one
reusable source for tooltip display and future consumption/heat
calculations.
Stop tracking .claude/settings.local.json (machine-specific Claude
Code settings) and exclude .claude/* via .gitignore. Add AUDIT2.md,
an independent re-evaluation of the V2 refactor against AUDIT.md.
Drop the createnuclear-specific lead_ores, uranium_ores and
thorium_ores tags (CNTags, CNBlocks, CNStandardRecipeGen) and use the
shared forge:ores/lead, forge:ores/uranium and forge:ores/thorium tags
everywhere instead, removing duplicate tag definitions and regenerating
the recipe/advancement JSONs that referenced them.

Also fix harvest-tool tags for thorium ore and raw thorium block: add
NEEDS_DIAMOND_TOOL/NEEDS_IRON_TOOL to thorium ore (both deepslate and
stone variants) and NEEDS_DIAMOND_TOOL to raw_thorium_block, and add
deepslate_thorium_ore to needs_iron_tool, so thorium-related blocks
require the correct tool tier like their uranium/lead counterparts.
RodsTooltipHandler intentionally skips mod items (already handled via
setTooltipModifierFactory) to only process external/datapack items.
This is not a bug, but a readability risk — updated documentation
with the rationale and a recommendation to add a guard comment.
Document the semantic split between RadiationEffect's binary gate and
RadiationCapability's continuous dose attenuation, and propose
RadiationCapability.canBeIrradiated() as the single reusable gate with
a cached entity blacklist instead of rebuilding the HashSet per call.
Wire two CNSoundEvents entries into the irradiated_land biome definition so
players hear a persistent audio cue when inside the biome:

- IrradiatedBiomes: createPlain() and irradiated() now accept a
  HolderGetter<SoundEvent> parameter; the effectBuilder is extended with
  ambientLoopSound (GEIGER_LOW) and ambientAdditionsSound (GEIGER_MEDIUM,
  tick_chance 0.0111).
- CNBiomes.bootstrapRegistries: resolves a SoundEvent HolderGetter from the
  registry context and forwards it to IrradiatedBiomes.createPlain().
- irradiated_land.json: regenerated — ambient_sound and additions_sound entries
  now present in the biome JSON.

Also removes ReactorRodInputEntity.readInventory(), an unused public method
that duplicated inventory.deserializeNBT() without callers.
…rchive resolved items in new §8

The document had grown unwieldy: resolved items were interleaved as
strikethroughs among open issues across every section, making it increasingly
difficult to read the current action list without navigating resolved context.
This reorganisation applies a strict separation:

- §1–§7 now contain **only open or unvalidated items**; each section header
  updated accordingly.
- New §8 "Mémoire" (four subsections):
  - §8.1 — all confirmed corrections, each with commit hash, date, and a
    one-line summary; 16 entries covering everything from `8b0428e3`
    (IrradiatedBiomes.monsters()) back to `b309f231` (LOGGER spam). Commit
    hashes researched via `git log -S` where possible; canditate-only or
    unresolved cases annotated explicitly.
  - §8.2 — architecture affirmations from AUDIT_V1 that were refuted (no hash
    applicable — the alleged problems never existed or are the result of many
    accumulated commits).
  - §8.3 — product decisions that were executed (collar mechanic removal,
    WIP taming block).
  - §8.4 — AUDIT_V1 historical corrections for which no confident commit hash
    was found; scope and methodology documented for any future archaeology.

Other changes in this reorganisation:
- §0 updated: notes the stale "flicker" entry discovered during review (was
  documented as fully open, code correction already applied by `a18038db`);
  item reclassified in §1 as "partially resolved, in-game validation remaining."
- New §6: code documentation audit — 14 files (~5 %) with French-only comments
  on non-trivial logic; worst cases listed (VicinityEffect.java,
  CNPonderReactorScenes.java Javadoc), priority set to cosmetic/progressive.
- §7 roadmap fully rewritten: 9 numbered categories ordered by impact rather
  than the old quick-wins / targeted-fixes / product-decisions split.
- ReactorOutput.SPEED stale line numbers corrected (l.43/52/87 → l.56/91).
- §4 worldgen section: file/line references made explicit; dead-code pure items
  removed (now in §8.1).
- §5 priority table trimmed to the two remaining open points.
…fect and CNPonderReactorScenes

Addresses the two highest-priority cases from the §6 documentation audit:

- VicinityEffect.java: Javadoc of the abstract extension point
  onContaminate(LivingEntity) was bilingual (English opening sentence, then
  French body). Fully rewritten in English; meaning preserved verbatim.

- CNPonderReactorScenes.java: seven comments and three Javadoc blocks
  translated to English —
  - Positions class Javadoc: scene-coordinate convention now readable by any
    contributor.
  - STATIC_POS field Javadoc: dev-note phrasing ("adapte ces valeurs...")
    replaced with stable documentation.
  - Three "Exemple pour Tx" block comments → "Example for Tx".
  - positionsFor() Javadoc and its NPE-avoidance fallback comment.
  - Inline positional labels: "devant", "derrière", "à droite" → "front",
    "back", "right".
  - PEDESTAL_Y inline comment: "couche de piedestal" → "pedestal layer".

No logic or behaviour changed.
… close §6 Javadoc priority item

- §6 global count updated from 14/40 to 12 files/~25 lines following commit
  3be6252 (VicinityEffect.java + CNPonderReactorScenes.java fully translated).
- §6 top of section: four resolved Javadoc cases moved out of the "most
  significant" list and replaced with an explicit "Résolu" summary block;
  CNPonderReactorScenes removed from the recurring-pattern file list.
- §6 ambiguities: CNPonderReactorScenes.java:50,90 entry struck through and
  marked resolved (reformulated to stable documentation in the same commit).
- §6 priority recommendation updated: 4 public-Javadoc cases now committed and
  closed; remaining ~25 lines deferred to incremental cleanup.
- §7 roadmap item #8: Javadoc translation sub-task struck through as done;
  remaining scope (items 5-15, ~25 lines, 12 files) stated explicitly.
- §8.1 fix-log table: new entry for commit 3be6252 with affected files and
  updated file/line counts.
…dited over-extraction bug

Introduces the first automated tests in the project (src/test was empty until now).

ReactorInputFluidManagerGameTest.java — 23 GameTests running against a real
ServerLevel and real ReactorFluidInputEntity blocks (no mocks):

- NBT round-trip (read/write): absent key, clear-on-read, single and multiple
  entries, order preservation, write-then-read symmetry.
- clearInvalid: missing block entity, block entity without fluid capability,
  valid fluid input, mixed set.
- getBlocksPosition(Level): filters non-matching entity types.
- getFuildHandlers: capability present, insertion-order preservation.
- getInventory: empty case, aggregation across multiple handlers.
- extractFluids (core of the audited bug, AUDIT_ACTUEL.md §1):
  - null level, no handlers, single handler with enough/insufficient stock,
    need-zero guard, empty-handler graceful skip.
  - *_currentBehavior / *_characterization tests: document and pin what the
    code does today (toExtract > 1 guard silently ignores unit-1 requests;
    fluidNeeded never decremented causes both handlers to drain in full).
  - *_expectedContract tests: assert the intended contract and are EXPECTED TO
    FAIL against the current implementation — they act as regression markers
    for the upcoming fix.
  - Javadoc-mismatch characterization: return value semantics diverge from the
    method's own Javadoc (true on partial extraction).

empty_platform.nbt — 5×3×5 stone-floor structure used as the shared test
template; placed under data/createnuclear/structures/ per Forge's GameTest
auto-discovery convention.
…t lookups

- Turn the Positions inner class into a record, removing the boilerplate
  constructor.
- Extract per-position callout data into a new CalloutInfo record and a
  buildCallouts() map, replacing the single hardcoded controller-only
  callout in tryShowCallout().
- Replace the linear scan over pos.specials() with an O(1) HashMap lookup
  per (x, y, z) cell in showReactorStructure(), removing the now-unused
  tryShowCallout() in favor of a generic showCallout().
- Drop unused local `H` variables in t1(), t2(), t3(), and ioPlacement(),
  passing H_T1/H_T2/H_T3 directly instead.
- Reformat Javadoc comments to standard multi-line block style.
…ary record

- Add ReactorSummary.java: a new immutable record (status, size, fuel,
  cooler, fluid, heat) with a nested ReactorSummaryRow(label, value) and
  a Builder that fails fast via IllegalStateException listing any missing
  fields, plus a toRows() method that is now the single place where the
  positional List<List<MutableComponent>> ordering matters.
- Rework ReactorSummaryDisplaySource to build and consume a
  ReactorSummary instead of a raw Stream<List<MutableComponent>>:
  - Replace getComponents() with getReactorSummary(), returning
    Optional<ReactorSummary> so "no controller" is modeled explicitly
    instead of via a sentinel 1-element list.
  - Update provideText() and provideFlapDisplayText() to branch on
    Optional emptiness and call summary.toRows() instead of relying on
    components.size() < 6 and fragile positional access like
    components.get(2).get(1) for the fuel value.
  - Replace joptsimple's Strings.repeat(' ', n) with String.repeat(n).
  - Add explicit Map.Entry<Item, Integer> and List<BigFluidStack> types
    in place of var, and drop the now-unnecessary Mth import.
  - Add Javadoc to the class and its public/private methods documenting
    the new Optional-based control flow.
…ose §2.3/§6 items

- Bump HEAD reference and §0 changelog entry to commit `cc532f83`
  (ReactorSummary refactor), noting it also removes the last French
  comments from ReactorSummaryDisplaySource.
- Close §2.3 ("sentinelle de taille + accès positionnel fragiles"): mark
  resolved with a strikethrough pointing to §8.1 / `cc532f83`.
- Close §5 recommendation on replacing the fragile positional access
  with the same resolution note.
- Update §6 (French comment audit): move the resolved
  ReactorSummaryDisplaySource guard-clause comments (ex-item 9) into the
  "Résolu" list, renumber the remaining items (9-14, was 9-15), and
  update the file/line counts from 12/292 (~25 lines) to 11/292
  (~22 lines).
- Update the §6 recurring-pattern summary and §8 documentation section
  to reflect that ReactorSummaryDisplaySource, alongside
  CNPonderReactorScenes, is now fully translated.
- Add a new §8.1 table row documenting the `cc532f83` fix in detail
  (ReactorSummary record/Builder, Optional-based getReactorSummary(),
  String.repeat replacing joptsimple's Strings.repeat, added Javadoc).
…ounds

- Add new sound assets: biomes/wasteland.ogg (ambient loop for the
  irradiated biome) and reacteur/assemble_deassemble/motor_assemble.ogg
  / motor_disassemble.ogg.
- Register them in CNSoundEvents as BIOME_WASTELAND, MOTOR_ASSEMBLE, and
  MOTOR_DISASSEMBLE.
- Rename several CNSoundEvents entries for clarity and to fix a typo:
  REACTOR_CASING_BREAD -> REACTOR_CASING_BREAK, REACTOR_ALARM ->
  REACTOR_ALARM_ONESHOT, REACTOR_ALARM_2 -> REACTOR_ALARM_LOOP (with
  updated subtitle "Reactor Alarm Loop"), LARGE_NUCLEAR_EXPLOSION ->
  NUCLEAR_EXPLOSION_LARGE, and fix the "GeiGer Medium" subtitle typo to
  "Geiger Medium".
- Update the two call sites affected by the renames:
  ReactorAlarmEntity (REACTOR_ALARM_LOOP) and
  NuclearMushroomCloudParticle (NUCLEAR_EXPLOSION_LARGE).
- IrradiatedBiomes: replace the geiger low/medium ambient+additions
  sound pair with the new single BIOME_WASTELAND ambient loop sound,
  and reindent the BiomeSpecialEffects.Builder chain (tabs -> consistent
  spaces).
- Regenerate sounds.json, en_us.json/en_ud.json lang files,
  irradiated_land.json biome data, and datagen .cache files to match
  the sound registry changes above.
- Add DefaultHeatCalculatorGameTest, a new GameTestHolder-based suite
  that exercises DefaultHeatCalculator.computeHeat against a real
  ServerLevel, a real ReactorControllerBlockEntity, and real registered
  rod items instead of mocks — plain JUnit cannot resolve Item/ItemStack/
  RodType, which depend on bootstrapped Minecraft/Forge registries
  (AUDIT_ACTUEL.md §3).
- Add shared test fixtures: placeController() to spawn a
  REACTOR_CONTROLLER on the "empty_platform" template and loadPattern()
  to write a slot->Item map into the blueprint item's "pattern" NBT tag,
  mirroring how ReactorBluePrintItem.getItemStorage reads it back.
- Cover three cases: an isolated fuel rod contributing only its own
  baseRodHeat (+ overHeat), an isolated cooler rod behaving identically
  when isolated, and a three-rod fuel/cooler adjacency mix that
  documents the existing fuel<->cooler proximity-heat asymmetry
  (fuel-side addition vs. division, cooler scans never contributing)
  noted in AUDIT_ACTUEL.md §2.2. Expected values are derived from live
  CNConfigs.server().rods settings rather than hardcoded, so the tests
  stay correct if default balance changes.
…culator and fluid manager

- §0: add a 2026-07-13 update noting the first concrete progress on the
  §7 priority-1 test debt: DefaultHeatCalculatorGameTest (`498f9dc6`)
  and the previously undocumented ReactorInputFluidManagerGameTest
  (`200df62f`), plus the JUnit+Mockito attempt that was rejected
  because mocking Item/ItemStack/Level fails outside a running game
  (confirms GameTest is the only viable approach for Minecraft/Forge
  types).
- §0/§3: soften "l'absence totale de tests" to "l'absence de tests sur
  la majorité du code", since two components now have GameTest
  coverage; note the pattern matcher (ReactorPattern/CNMultiblock) and
  PersistentFluidLocks remain entirely uncovered.
- §3: update the `src/test` row to explain why it stays empty
  (Minecraft/Forge types can't initialize outside a bootstrapped game)
  and add a new "Couverture GameTest" row tracking 2/4 components
  covered.
- §7 priority 1: mark the DefaultHeatCalculator test item as done,
  referencing both new commits, and narrow the "reste" scope to the
  pattern matcher and PersistentFluidLocks.
- §8.1: add two new changelog rows documenting DefaultHeatCalculatorGameTest
  (`498f9dc6`) and ReactorInputFluidManagerGameTest (`200df62f`), including
  the regression-marker `*_expectedContract` tests for the §1
  over-extraction bug.
…ts in ReactorOutput

- Delete OriginalBiomeLookup.java: the class was unused dead code
  (a ServerLevel/BlockPos biome resolver that fell back to sampling the
  chunk generator's noise biome inside irradiated zones).
- IrradiatedBiomes: remove the unrelated vanilla worldgen leftovers
  flagged by AUDIT_ACTUEL.md §4 — BLUE_ICE feature and the
  addDefaultSoftDisks()/VOID_START_PLATFORM helper (and its only call
  site) — keeping only the NETHER_CAVE air carver in
  addDefaultIrradiatedOres.
- ReactorOutput: add @ParametersAreNonnullByDefault alongside the
  existing @MethodsReturnNonnullByDefault, drop the redundant @NotNull
  on getShape() now covered by the class-level annotation, and remove
  the commented-out SPEED property references (createBlockStateDefinition,
  getStateForPlacement) along with a stray blank line.
…ginalBiomeLookup removal

- §0: add a 2026-07-13 update summarizing commit `ae1e394d`, which
  closes the ReactorOutput.SPEED cleanup item, partially resolves the
  "worldgen irradié" item (BLUE_ICE and addDefaultSoftDisks()/
  VOID_START_PLATFORM removed, NETHER_CAVE kept without documented
  justification), and removes the never-called OriginalBiomeLookup.java
  (a class this audit hadn't previously flagged).
- §4: mark the ReactorOutput.SPEED "code commencé puis abandonné" item
  as resolved, and update the "worldgen irradié" entry to reflect the
  partial fix (BLUE_ICE/VOID_START_PLATFORM gone, NETHER_CAVE's fate
  still undecided); add OriginalBiomeLookup.java to the list of already-
  removed dead code.
- §6: adjust IrradiatedBiomes.java's line numbers (30-44, was 39-48) for
  item 11, shifted by the §4 code removal — content unchanged.
- §7: mark the SPEED cleanup item as done and the worldgen item as
  partially done, narrowing the remaining scope to the NETHER_CAVE
  decision and the STEEL_BLOCK fill-block choice.
- §8.1: add a changelog row for `ae1e394d` detailing the SPEED
  reference removal, the BLUE_ICE/addDefaultSoftDisks()/
  VOID_START_PLATFORM removal, the OriginalBiomeLookup.java deletion,
  and the added @ParametersAreNonnullByDefault / removed redundant
  @NotNull on ReactorOutput.getShape().
- Regenerate irradiated_land.json and its datagen .cache file to drop
  the now-removed blue_ice/void_start_platform features.
- Delete addDefaultIrradiatedOres() (its only remaining content was the
  NETHER_CAVE air carver) and its only call site in irradiated(),
  finishing the "worldgen irradié" cleanup left open in
  AUDIT_ACTUEL.md §4/§7 — the irradiated biome no longer carves any
  unrelated vanilla content.
- Regenerate irradiated_land.json and its datagen .cache file: the
  biome's "carvers" block is now empty.
…the worldgen cleanup item

- §0: add a 2026-07-13 update for commit `6bc20956`, noting the removal
  of NETHER_CAVE (via addDefaultIrradiatedOres() and its call site) and
  the regenerated irradiated_land.json with an empty carvers block;
  also amend the prior `ae1e394d` update to drop the now-outdated
  "partiellement clos" wording.
- §4: mark the "worldgen irradié" item as fully resolved across
  `ae1e394d`/`6bc20956` (BLUE_ICE, NETHER_CAVE, VOID_START_PLATFORM all
  gone), leaving only the CNNoiseGeneratorSettings.java STEEL_BLOCK
  fill-block choice open; flag a newly found, not-yet-fixed issue: the
  Carvers/MiscOverworldPlacements/GenerationStep imports in
  IrradiatedBiomes.java are now dead following `6bc20956`.
- §6: update IrradiatedBiomes.java's line numbers for item 11 (26-40,
  re-shifted by `ae1e394d`/`6bc20956`) and note that the parent §4
  "template non terminé" item is now closed, only the comment-line
  tracking remains.
- §7: mark the worldgen cleanup bullet as fully done across both
  commits, narrowing the remaining scope to the STEEL_BLOCK choice.
- §8.1: add a changelog row for `6bc20956` (removal of
  addDefaultIrradiatedOres()/NETHER_CAVE and regenerated
  irradiated_land.json) and amend the `ae1e394d` row to reflect that it
  only started the worldgen cleanup, completed by `6bc20956`.
- CreateNuclearJEI: store the IJeiRuntime made available via the new
  onRuntimeAvailable(IJeiRuntime) callback in a static `runtime` field,
  so other classes can access it once JEI has finished loading.
- Rename the static `Categories` field to an instance field
  `allCategories`, and thread it explicitly through CategoryBuilder
  (new constructor parameter `targetCategories`) instead of closing
  over a static list — CategoryBuilder.add() now appends to the
  instance-owned list.
- Reorder IModPlugin overrides (getPluginUid moved after field
  declarations, builder() moved next to loadCategories()) for a more
  logical top-to-bottom reading order; no behavioral change.
- CNStandardRecipeGen: remove the `// FIXME 5.1 refactor - recipe
  categories as markers instead of sections?` comment on viaShaped(),
  resolving the open item tracked in AUDIT_ACTUEL.md §4/§7 — recipe
  categories stay markers, not sections.
- IrradiatedBiomes: drop a trailing-whitespace-only blank line between
  createPlain() and irradiated().
…fix and recipe-category FIXME resolution

- §0: add a 2026-07-13 update for commit `e7900959`, summarizing both
  changes it makes: converting CreateNuclearJEI's static `Categories`
  field to an instance field `allCategories` (with IJeiRuntime now
  exposed via onRuntimeAvailable), and removing the
  CNStandardRecipeGen.java:226 FIXME with the decision that recipe
  categories stay markers, not sections.
- §2 (mineurs item 5): mark the CreateNuclearJEI static mutable field
  issue as resolved.
- §4 "Code commencé puis abandonné": mark the CNStandardRecipeGen FIXME
  as resolved with the decision rationale.
- §6: mark the CNStandardRecipeGen.java:226 language-independent
  ambiguity note as resolved.
- §7 (item 9 "cleanup à trancher"): mark the FIXME item as done.
- §7 (item 9 "à surveiller"): mark the CreateNuclearJEI static-field
  watch item as done.
- §8.1: add a changelog row documenting `e7900959` in detail (instance
  field conversion, CategoryBuilder's new targetCategories parameter,
  IJeiRuntime exposure, FIXME removal) and its closed audit items.
…ensions

Replace `var entityModelSet`/`var root` with explicit
EntityModelSet/ModelPart types in getHumanoidArmorModel(), for
consistency with the project's preference for explicit typing over var
(see e.g. ReactorSummaryDisplaySource's Map.Entry<Item, Integer> and
List<BigFluidStack> in commit e790095's predecessor).
…base

Complete the §6 French-comment cleanup tracked in AUDIT_ACTUEL.md
(items 6-14, minus the already-resolved ReactorSummaryDisplaySource
guard clauses): translate every remaining French inline comment and
Javadoc to English, with no functional or logic changes:

- CNFluids.java: translate the uranium/liquid-nitrogen/thorium fluid
  effect comments, including the freeze-tick compensation notes.
- ClientEvents.java: translate the tick-handling and camera-shake
  Javadoc/comments, and drop a redundant inline comment duplicating the
  method doc.
- PalettesVariantEntry.java: remove a dead, comment-only `if` block that
  only held a French note about render-type handling moving elsewhere.
- AntiRadiationArmorItem.java: translate the getArmorTexture comment.
- ReactorSizeDisplaySource.java: translate the label/gauge comments.
- CameraAccessor.java: translate/remove the package and Invoker
  comments (mixin invoker for Camera#move).
- GameRendererMixin.java: translate the sky-darkening and white-flash
  injection comments.
- RadiationHeartMixin.java: translate the Gui.class targeting comment
  and the renderHeart/heart-texture-swap comments.
- IrradiatedBiomes.java: translate the biome color comments (water,
  fog, sky, grass, foliage).

No file in this diff contains any remaining French text.
…and CNEntityType, update audit tracking

- NuclearExplosionEntity.java: translate the Alex's Caves compat
  comments (why `alexscaveHandler` is typed as Object, when the compat
  handler is instantiated, Raycat/Tremorzilla immunity handling) and
  the vanilla-block destroy-after-explode fix comment, expanding them
  with more precise explanations rather than a literal translation.
- CNEntityType.java: translate the "Utilise le renderer vide par
  défaut de Minecraft" comment on the mushroom cloud entity's renderer
  registration, explaining that the particle does the actual rendering.
- AUDIT_ACTUEL.md: record commit `9e8abe92` (2026-07-14), which
  translated the previous 9 remaining French-comment files from §6
  (CNFluids, ClientEvents, the three mixins, PalettesVariantEntry,
  AntiRadiationArmorItem, ReactorSizeDisplaySource, IrradiatedBiomes),
  dropping the affected file count from 11/292 to 2/292 (~3.8% to
  ~0.7%); also documents the newly-found CNEntityType.java:76 comment
  that prior audit passes had missed, and narrows the remaining §6
  scope down to NuclearExplosionEntity.java and CNEntityType.java.
…PEED cross-reference fix

- §0: add a 2026-07-14 update for commit `eeffe4fe`, translating the
  last 2 remaining French-comment files (NuclearExplosionEntity.java,
  CNEntityType.java) and confirming via a full src/main/java grep that
  §6 (French comments/Javadoc) is now entirely closed, 0/292 files.
- §6: rewrite the section to reflect full closure — replace the
  "Résolu"/"Cas restants" split with a single chronological "Historique
  de la résolution" list covering all four translation commits
  (`3be6252a`, `cc532f83`, `9e8abe92`, `eeffe4fe`), update the global
  count to 0/292 files, mark the ReactorOutput.SPEED ambiguity note as
  resolved (cross-referencing the earlier `ae1e394d` fix that this
  section had not yet reflected), and rewrite the "pattern récurrent"
  and "priorité recommandée" paragraphs to state the item is closed.
- §7 (item 8 "Documentation"): mark the last remaining translation
  bullet (NuclearExplosionEntity.java/CNEntityType.java) as done, with
  a note that §6 is now fully closed at 0/292 files.
- §8.1: add a changelog row documenting `eeffe4fe` (Alex's Caves compat
  comment translation plus a correction to a stale English comment
  about destroyBlock's drop-items parameter, and the CNEntityType.java
  renderer comment), noting no behavioral change and full §6 closure.
… refuted false positive

- §0: add a 2026-07-14 documentation-only update noting that the
  ReactorSummaryDisplaySource.formatValue "heat display mode
  inconsistency" item (§2.4/§7 priority 5) is refuted and closed after
  deeper analysis, not fixed by code.
- §2 (item 4): mark the item as refuted/closed with a strikethrough,
  pointing to the new §8.2 write-up instead of describing it as an
  open, unchanged inconsistency.
- §5 (design/UX improvements): mark the corresponding recommendation
  as refuted/closed without code, same cross-reference.
- §8.2: add a detailed rebuttal explaining that forcing a gauge for
  `heat` in normal mode (gaugeOnNormal=true) isn't an isolated
  exception — formatFluid does the same for `fluid` — so the summary
  widget consistently gauges its two most glance-critical stats while
  keeping fuel/cooler as text; HeatDisplaySource is a single-line,
  single-stat widget with different space constraints, so there was
  never an implicit rule that the two widgets' default modes should
  match. Also documents why a shared ReactorDisplayFormatting utility
  was considered and rejected: the three existing mode->render mappings
  have different semantics (3 vs 4 modes, per-stat gaugeOnNormal flag,
  optional unit suffix), so unifying them would cost more than the
  purely cosmetic inconsistency it would fix.
…em as confirmed status quo

- §0: add a 2026-07-14 documentation-only update confirming the §3/§7
  item 9 status quo — RadiationCapability.tickRadiation's lack of an
  inventory dirty-check for non-player LivingEntity is analyzed in
  depth and kept as-is, since the mob scan (6 slots, O(1) HashMap
  lookups via RadiationRegistry) is too small for a player-style hash
  (41 slots) to pay off, and the rest of tickRadiation likely dominates
  per-mob cost anyway.
- §3 table: rewrite the RadiationCapability.tickRadiation row from
  "point à surveiller" to "statu quo recommandé", summarizing why
  hashing 6 slots wouldn't be cheaper than the direct computation it
  would replace, and that event-driven invalidation
  (LivingEquipmentChangeEvent) — not a hash — would be the only
  approach worth revisiting if profiling ever flags this loop as hot.
- §7 (item 9 "à surveiller"): update the watch-item description with
  the same summary and §8.2 cross-reference.
- §8.2: add a detailed rebuttal with code references
  (RadiationCapability.java, RadiationRegistry.java) covering: the
  41-vs-6-slot asymmetry, why hashing wouldn't be cost-effective at mob
  scale, why the rest of tickRadiation likely dominates the per-mob
  cost regardless, the event-driven invalidation fallback if profiling
  ever justifies it, and a clarification that
  computeItemRadiation(Player) intentionally excludes player armor
  since no armor item in this mod is a radiation source (only
  resistance equipment).
…as still open

- Coverage-limits note (intro): mark B7, B10, B17 and B18 as re-verified
  by direct code reading instead of "neither confirmed nor refuted";
  note that the unnumbered "minor" list from AUDIT_V1.md §2 is still
  entirely unverified.
- §1 (bug table): add a new open bug row for
  IrradiatedOverlayRendererVision (foundation/events/overlay/IrradiatedOverlayRendererVision.java:23)
  — ex-B10 — mc.gameMode.getPlayerMode() is called with no null-guard
  on mc.gameMode, which can be null during world (re)load; the
  existing mc.player null-check happens later in the method and does
  not protect this earlier access. One-line fix identified but not
  yet applied.
- §8.2 (refuted/closed investigations): add two new entries refuting
  legacy AUDIT_V1.md claims after direct code inspection —
  CNNoiseData.bootstrapRegistries (B7): EROSION noise parameters are
  in fact registered, contrary to the "entirely commented out" claim;
  RodsTooltipHandler (B17): the namespace check is confirmed
  intentional (explicit in-code comment) to avoid double tooltips on
  mod rods already handled via Registrate's setTooltipModifierFactory,
  not an accidental inversion.
- Relocate ClientEvents from the createnuclear root package to
  net.nuclearteam.createnuclear.foundation.events, aligning it with
  the rest of the foundation/events/* classes (e.g. the overlay
  renderers).
- Update the package declaration and add explicit imports for
  CNClientProxy and CreateNuclear (previously implicit same-package
  references from the root package).
- No behavioral changes: nuke flash/shake ticking, camera-shake
  computation, and anti-radiation armor model-part hiding logic are
  unchanged.
…gister them under the "client" mixin block

- Relocate CameraAccessor, GameRendererMixin and RadiationHeartMixin
  from foundation.mixin to a new foundation.mixin.client subpackage,
  and update ClientEvents' import of CameraAccessor accordingly.
- createnuclear.forge.mixins.json: move RadiationHeartMixin,
  GameRendererMixin and CameraAccessor out of the common "mixins" list
  into the "client" list (with their new "client." prefix), so they
  are only applied on the client distribution instead of being loaded
  on dedicated servers; also drop the now-unused "accessWidener" entry.
- Rename mixin injector methods to the "CN$" prefix convention
  (cn_tick -> CN$tick, cn_render -> CN$render,
  createnuclear$changeHeartTexture -> CN$changeHeartTexture) for
  consistency across the mixin classes.
- RadiationHeartMixin: fix VANILLA_ICONS to use the single-argument
  ResourceLocation constructor (implicit "minecraft" namespace)
  instead of the deprecated explicit-namespace constructor.
…single Holder

- RodType and ReactorFluidType now hold a single Holder<Item>/Holder<Fluid>
  (fields renamed item/fluid) instead of a HolderSet<Item>/HolderSet<Fluid>
  that always contained exactly one entry in practice; codecs switch from
  RegistryCodecs.homogeneousList to RegistryFixedCodec, and generated JSON
  data (fluids/type/*.json, rods/type/*.json) is regenerated with the
  singular "fluid"/"item" fields instead of "fluids"/"items" arrays.
- RodType.Builder.addItems(ItemLike...) is replaced by a single-item
  item(ItemLike) setter; ReactorFluidType.Builder.fluid(...) now replaces
  rather than accumulates. Update all call sites (ItemRodTypesValue,
  CNRodTypes javadoc, DefaultHeatCalculator's rod.items().size() > 0
  checks switched to rod.isNotEmptyItem()).
- Default sentinel instances (ItemRodTypesValue.DEFAULT_ROD_TYPE,
  ReactorFluidTypesValue.DEFAULT_REACTOR_FLUID_TYPE) now use
  Items.AIR.builtInRegistryHolder() / Fluids.EMPTY.builtInRegistryHolder()
  instead of an empty HolderSet, and isNotEmptyItem()/isNotEmptyFluid()
  check identity against AIR/EMPTY instead of checking set size.
- ReactorFluidType: remove the unused useConfig/setRodConfig
  config-override mechanism (dead code — the CNConfigs lookup was
  already commented out) along with its now-redundant maxHeat()/
  efficiency() overrides.
- toString() on both records is updated to report the single fluid/item
  name instead of joining a list.
…echanism discrepancy

- CNConfiguredFeatures: bump lead ore's OreConfiguration vein size
  from 10 to 12.
- CNPlacedFeatures: rebalance ore placement counts — uranium 5 -> 4,
  thorium 8 -> 6 per chunk, and reduce striated_ores_overworld
  frequency from "on average once every 1 chunk" to once every 64
  chunks (was effectively placed almost everywhere before).
- Regenerate the corresponding datagen output
  (worldgen/configured_feature/lead_ore.json,
  worldgen/placed_feature/{striated_ores_overworld,thorium_ore,uranium_ore}.json).
- AUDIT_ACTUEL.md: add a new "on hold" §2 note (per user request,
  2026-07-25) flagging that Nitrate Ore's loot table uses vanilla
  minecraft:ore_drops while Thorium/Uranium use set_count +
  uniform_bonus_count — a pattern inconsistency to resolve later
  (harmonize or document as intentional), not addressed in this
  change.
…add its Reinforced Glass Bottle recipe chain

- Rename BiomeRestoreCellItem -> BiomeIrradationExtractorItem and the
  registered item biome_restore_cell -> biome_irradiation_extractor
  ("Biome Irradiation Extractor"), updating every reference
  (CNItems, CreateNuclearClient, CNBuilderTransformers) and the item
  model/texture path from item/biome_restore_cell/* to
  item/biome_irradiation_extractor/*. Old biome_restore_cell models
  and textures are deleted; new biome_irradiation_extractor models,
  advancement and lang entries are generated in their place.
- The extractor is no longer a standalone craftable item: it now has a
  shaped crafting recipe (8x) from 8 Reinforced Glass Bottles + 1
  Nether Star, gated behind a new has_reinforced_glass_bottle
  advancement/unlock, and its max stack size changes from 1 to 16.
- Add a new REINFORCED_GLASS_BOTTLE item (CNItems), craftable (3x)
  from Reinforced Glass in a diamond pattern, with its own generated
  model, recipe and texture.
- CBiomeRestore config: lower the default maxCharge from 16 to 8, and
  remove the now-unused alwaysShowBar option (and its comment).
- tooltips.json: add a beta-warning tooltip and a
  biome_irradiation_extractor restorations-counter tooltip
  ("Restorations: %d / %d"); minor unrelated whitespace cleanup
  (removed stray blank lines).
- Regenerate affected datagen output: en_us.json/en_ud.json lang
  files, the .cache index, and new recipe/advancement JSON for both
  biome_irradiation_extractor and reinforced_glass_bottle.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants