V2 correctif audit#135
Open
Giovanniricotta2002 wants to merge 184 commits into
Open
Conversation
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).
…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.
…eactor components
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.
…going refactor progress
… the vicinity effect
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.