Skip to content

V2 - #142

Merged
Giovanniricotta2002 merged 911 commits into
mainfrom
V2
Aug 22, 2026
Merged

V2#142
Giovanniricotta2002 merged 911 commits into
mainfrom
V2

Conversation

@Giovanniricotta2002

Copy link
Copy Markdown
Member

test

MathisGredt and others added 30 commits June 9, 2026 15:58
…blage

fix: improve reactor disassembly logic and ensure proper controller h…
…mble checks

handleOnPlace now takes a boolean to drive pattern.findController's assemble
vs. disassemble path, used by both placement and removal flows. handleRemoval
calls handleOnPlace(pos, level, false) instead of duplicating the
findController(..., false) call.
Comment out CExplode nesting in CNCServer and the maxHeat/
rodFuelMaxForCoolerRod ConfigInt fields in CRods, as these are
not currently used.
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.
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.
Giovanniricotta2002 and others added 20 commits July 26, 2026 12:24
- Add an explicit import for ForgeConfigSpec.ConfigValue and use the
  unqualified ConfigValue<List<? extends String>> type for
  ENTITY_BLACKLIST instead of the fully-qualified
  ForgeConfigSpec.ConfigValue reference. No behavioral change.
…mity math asymmetry

- DefaultHeatCalculator.computeHeat: read the rod pattern directly from
  the blueprint item via ReactorBluePrintItem.getItemStorage(...)
  (an ItemStackHandler) instead of manually parsing raw "pattern"/
  "Items" NBT compound tags — removes the ListTag/Tag NBT walk in
  favor of the same accessor GameTest fixtures already use.
- Rewrite the fuel/cooler proximity scoring to be symmetric: a fuel
  rod's neighbor scan now only ever contributes when adjacent to
  another fuel rod (RodType.TypeRodPredicate.isFuel), and a cooler's
  scan only contributes when adjacent to another cooler
  (isCooled) — replacing the previous asymmetric logic where a cooler
  never scored anything and a fuel-next-to-cooler used a
  fuel.base/cooler.proximity division. Add the RodType(RodType) new
  isFuel/isCooled predicate overloads used for this.
  NOTE: this changes DefaultHeatCalculatorGameTest's asymmetry test
  from correct to outdated — that test still asserts the old
  fuel/cooler division behavior and needs re-verification against
  this new logic.
- computeHeat now skips TypeRod.NONE rods explicitly and clamps the
  final result to a minimum of 0 (Math.max(0, heat + overHeat))
  instead of allowing negative heat.
- Thread a new previousHeat/currentHeat parameter through the whole
  heat-calculation call chain (IHeatService, DefaultHeatService,
  HeatManager, IOverheatController, DefaultOverheatController,
  IReactorHeatUpdateCoordinator, ReactorHeatUpdateCoordinator,
  ReactorControllerBlockEntity) so DefaultOverheatController can force
  the overheat timer to increment once the reactor's heat exceeds its
  active fluid's configured maxHeat, in addition to the pre-existing
  fluid-shortage/negative-ratio conditions.
- Minor cleanup: drop unused imports in HeatManager, remove a stray
  blank line in ReactorControllerInventory, and remove a dead
  `formattedPattern[j][k] == 99` sentinel check in DefaultHeatCalculator
  (now unreachable since slots are matched by value, not sentinel).
… cooler-to-cooler

- DefaultHeatCalculator.computeHeat: correct the cooler branch's
  neighbor check — the previous commit's rewrite still compared
  isCooled(rod) && isCooled(neighborRod), which never triggers a
  cooler's own contribution (two coolers never award heat to each
  other under this formula); now correctly checks
  isCooled(rod) && isFuel(neighborRod), matching the external design
  spec's "Graphite extra: -1/4Q of the heating rod" and the
  reference JS calculator (verified 128 on both sides for the
  [G,T,G]/[T,U,T]/[G,T,G] pattern).
- AUDIT_ACTUEL.md: document this fix in §0 (commit 691dfb1 + this
  follow-up), close the §2.2 fuel/cooler asymmetry item as resolved,
  update §3's GameTest coverage row and add a new
  ReactorFluidType.maxHeat() row noting it's no longer dead code,
  update §7 item 6's optimization note, and add the corresponding
  §8.1 changelog row — all cross-referencing that
  DefaultHeatCalculatorGameTest still asserts the old (now incorrect)
  division-based behavior and needs to be rewritten to match.
…a and add a 3x3 wiki-reference test

- DefaultHeatCalculatorGameTest: rename and rewrite test 3
  (fuelCoolerMix_onlyFuelScansContributeProximityHeat_coolerAdjacencyIsAsymmetric
  -> fuelCoolerMix_coolerScansItsOwnFuelNeighborsSymmetrically) to
  assert the current cooler-scans-fuel-neighbor multiplication formula
  (neighborRod.baseRodHeat() * rod.proximityRodHeat()) instead of the
  old fuel-scans-cooler-neighbor division formula, per the
  DefaultHeatCalculator fix landed in the previous commit.
- Fix test 2 (singleCoolerRod_noNeighbors_addsOnlyItsOwnBaseRodHeat):
  computeHeat now floors its result at 0
  (Math.max(0, heat + overHeat)), so an isolated cooler's negative
  baseRodHeat was previously being swallowed by the floor and the
  test's -32 expectation was unreachable; add a large overHeat (50)
  to keep the total positive and actually exercise baseRodHeat's
  contribution.
- Add a new test 4 (threeByThreeDiamond_matchesWikiCalculatorReferenceValue)
  covering a full interior 3x3 rod pattern (4 corner graphites, 4 edge
  thoriums, 1 center uranium), asserting against a config-derived
  expected value that matches the community wiki calculator's
  reference result of 128 for this pattern under default balance.
- AUDIT_ACTUEL.md: update §2.2, §3's GameTest coverage row, and the
  §8.1 changelog entry to record that DefaultHeatCalculatorGameTest is
  now up to date with the corrected formula, and document the
  in-game GameTest run (./gradlew runGameTestServer, 30 tests, 3
  failures — 2 already-known/expected ReactorInputFluidManager
  over-extraction contract markers, 1 fixed here from the new
  Math.max(0, ...) floor).
…he O(81) position lookup

- DefaultHeatCalculator: replace the per-rod double loop over the full
  9x9 formattedPattern grid (used just to relocate a rod's own slot
  before scanning its neighbors) with a static
  NEIGHBORS_BY_SLOT map (Map<Integer slot, List<Integer> neighborSlots>),
  built once via buildNeighborsBySlot() from the pattern/offsets.
  computeHeat now looks up a rod's neighbor slots directly instead of
  re-scanning all 81 grid cells per rod (~57x81 ≈ 4617 iterations/tick
  on a full reactor down to O(1) map lookups), matching the low-risk
  optimization already tracked in AUDIT_ACTUEL.md §2.2/§7.
- formattedPattern/offsets fields become static final
  FORMATTED_PATTERN/OFFSETS constants shared across instances instead
  of being rebuilt per DefaultHeatCalculator instance.
- No behavioral change: neighbor resolution order and the fuel/cooler
  proximity formulas are unchanged.
…_ACTUEL.md, cross-referenced to 37613d8

- §2.2: mark the remaining O(81) position-lookup loop as resolved
  (commit 37613d8), pointing to the new §8.1 entry instead of
  repeating the recommendation inline.
- §3 (multiblock optimization table): flip the
  DefaultHeatCalculator.computeHeat row from "partially fixed, low
  priority" to "fixed, closed", referencing the new NEIGHBORS_BY_SLOT
  map and commit 37613d8.
- §7 (priority 6, minor optimizations): mark the slot->neighbor
  precompute item as done, describing NEIGHBORS_BY_SLOT and
  buildNeighborsBySlot().
- §8.1 (changelog table): correct the previous fuel/cooler-asymmetry
  entry's hash reference (drop the "+ correctif suivant... non
  commité" placeholder, now that that follow-up has its own commit),
  and add a new changelog row for 37613d8 documenting the O(81) ->
  O(1) neighbor-lookup optimization (FORMATTED_PATTERN/OFFSETS made
  static final, new precomputed NEIGHBORS_BY_SLOT map), noting it is
  a no-behavior-change performance fix.
…mble/disassemble sound events

- CNSoundEvents: rename the NUCLEAR_EXPLOSION_RINGING sound entry
  from "explosion/nuclear_explosion_ringing" to "explosion/ringing",
  matching the renamed audio asset (nuclear_explosion_ringing.ogg
  deleted, replaced by the new ringing.ogg).
- NuclearMushroomCloudParticle: fix the ringing playback to actually
  use CNSoundEvents.NUCLEAR_EXPLOSION_RINGING instead of
  NUCLEAR_EXPLOSION_SHOCKWAVE (kept as a commented-out reference).
- ReactorControllerBlock: switch the assemble/disassemble sound
  effects from REACTOR_ACTIVATION/REACTOR_SHUT_OFF to the dedicated
  MOTOR_ASSEMBLE/MOTOR_DISASSEMBLE sound events.
- gradle.properties: bump mod_version from 2.0.17-beta-sound to
  2.0.17-beta-sound2.
- Regenerate affected datagen output (sounds.json, en_us.json,
  en_ud.json, .cache index entries) to reflect the renamed sound
  file.
…version

- IrradiatedBiomes: register a new .backgroundMusic(new Music(...))
  entry for the irradiated_land biome, reusing the same
  BIOME_WASTELAND sound event as the ambient loop sound (min_delay 0,
  max_delay 300, replace_current_music true). The existing
  .ambientLoopSound(...) call is kept but flagged in a new comment as
  pending replacement by a dedicated ambient-loop sound distinct from
  the background music.
- BiomeIrradiationService: add unused ServerPlayer and CreateNuclear
  imports (no behavioral change yet in this diff).
- gradle.properties: bump mod_version from 2.0.17-beta-sound2 to
  2.0.17-beta-sound3.
- Regenerate the corresponding datagen output
  (worldgen/biome/irradiated_land.json gains a "music" block; .cache
  index updated).
…verheat, in addition to fluid conditions

- Add new HeatBalance record (content/multiblock/reactorLogic) holding
  weighted heatPoints (fuel) and coolingPoints (cooler) sums, with a
  resolve() method comparing their ratio against the wiki-reference
  6:1 TARGET_RATIO to produce an EquilibriumState.
- Add new EquilibriumState enum (OVERHEATING / BALANCED / OVERCOOLING);
  only OVERHEATING currently drives behavior (BALANCED/OVERCOOLING are
  placeholders for a future status display / output bonus-malus).
- Move heat-balance computation from a static
  ReactorHeatUpdateCoordinator.calculateActualTotalHeatRatio(...)
  helper into the IReactorHeatUpdateCoordinator interface as an
  instance method calculateHeatBalance(...), now returning a
  HeatBalance instead of a single int — it separately accumulates
  heatPoints for FUEL rods and coolingPoints for COOLER rods (each
  weighted by RodType.ratio()) instead of summing every rod's
  heatRatio into one signed total. Document all four
  IReactorHeatUpdateCoordinator methods with full parameter Javadoc.
- DefaultOverheatController.updateState: take a HeatBalance instead of
  a raw totalHeatRatio int. The overheat timer now escalates on two
  independent malus points — rodMalus (HeatBalance.resolve() ==
  OVERHEATING) and fluidMalus (insufficient fluid / exceeds fluid
  maxHeat) — and when both are active simultaneously, overHeat
  increases by 2 per tick instead of 1, and overFlowLimiter decreases
  by the same malusPoints count (floored at 2) instead of always by 1.
- Thread the new HeatBalance type through the whole heat-calculation
  call chain in place of the old totalHeatRatio int: IHeatService,
  DefaultHeatService, HeatManager, IOverheatController,
  ReactorHeatUpdateCoordinator, ReactorControllerBlockEntity (new
  heatBalance field, initialized to HeatBalance(0, 0), now populated
  via heatCoordinator.calculateHeatBalance(...) instead of the removed
  static helper).
- RodType: rename the heatRatio field/accessor/builder methods to
  ratio (and its codec key "heatRatio" -> "ratio", default unchanged
  at 1); update all call sites (CNItems rod registration, RodsStats
  tooltip, ReactorBluePrintMenu's totalHeatRatio -> totalRatio local
  var and NBT key "totalHeatRatio" -> "totalRatio").
- CRods: change graphiteHeatRatio's default value from -6 to 1, since
  cooling/heating weighting is now handled by HeatBalance's separate
  heatPoints/coolingPoints sums rather than by sign.
- tooltips.json / regenerated en_us.json, en_ud.json: rename the
  "heatRatio" tooltip key to "ratio" and reword its text to "Rod Value
  for ratio: %d".
…unused worldgen imports

- ReactorOutputEntity: remove the dead/unused controllerEntity,
  controller fields and their setController(...)/setSpeed(...)/
  getDir()/setDir(...) accessors, plus the overridden tick() method
  that looked up the reactor controller 3 blocks above and force-set
  speed to 0 whenever it wasn't found or wasn't assembled — none of
  this was reachable from outside the class and getGeneratedSpeed()
  never consulted these fields. Also drop now-unused imports
  (BlockGetter, Level, CNBlocks, ReactorControllerBlock,
  ReactorControllerBlockEntity, the static DIR import), a stray
  commented-out ScrollValueBehaviour field/getGeneratedSpeed body, and
  redundant blank lines; make the inner ReactorOutputValue class
  static since it no longer needs an outer-instance reference.
- IrradiatedBiomes: remove unused imports (Carvers,
  MiscOverworldPlacements, GenerationStep) left over from prior
  worldgen cleanup.
extractFluids never decremented fluidNeeded between handlers, so the requested
amount was treated as a per-input quota instead of a total: a reactor asking for
10 units with two fluid inputs holding 10 each drained both, removing 20. The
more inputs the player placed, the faster the coolant vanished.

An `if (toExtract > 1)` guard also silently dropped requests for exactly one
unit, which is what FluidConsumptionRateCalculator asks for at the low end of
the consumption curve, so the smallest reactors leaked their buffer accounting.

The loop now tracks what is left to extract, stops once satisfied, and subtracts
what the handler actually returned rather than what was asked of it.

The Javadoc claimed "true if the full amount was extracted" while the code
returned true on any partial extraction. The code's behaviour is the right one -
the reactor should consume whatever coolant it can reach rather than refuse to
run - so the Javadoc now documents that instead.

The two gametests that pinned the buggy behaviour are removed, and
extractFluids_returnsTrueEvenWhenNotFullyExtracted_javadocMismatch is renamed
now that there is no mismatch. runGameTestServer now runs 28 tests and exits 0.

The identical fix is applied to the NeoForge branch, keeping the two
implementations byte-identical.
extractFluids never decremented fluidNeeded between handlers, so the requested
amount was treated as a per-input quota instead of a total: a reactor asking for
10 units with two fluid inputs holding 10 each drained both, removing 20. The
more inputs the player placed, the faster the coolant vanished.

An `if (toExtract > 1)` guard also silently dropped requests for exactly one
unit, which is what FluidConsumptionRateCalculator asks for at the low end of
the consumption curve, so the smallest reactors leaked their buffer accounting.

The loop now tracks what is left to extract, stops once satisfied, and subtracts
what the handler actually returned rather than what was asked of it.

The Javadoc claimed "true if the full amount was extracted" while the code
returned true on any partial extraction. The code's behaviour is the right one -
the reactor should consume whatever coolant it can reach rather than refuse to
run - so the Javadoc now documents that instead.

The two gametests that pinned the buggy behaviour are removed, and
extractFluids_returnsTrueEvenWhenNotFullyExtracted_javadocMismatch is renamed
now that there is no mismatch. runGameTestServer now runs 28 tests and exits 0.

The identical fix is applied to the NeoForge branch, keeping the two
implementations byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tractorItem

Pendant d'un renommage fait cote NeoForge, ou 8 fichiers portaient un nom
different du notre pour un contenu identique (section 1 de
PARITE_FORGE_NEOFORGE.md). Sept ont ete alignes sur Forge. Celui-ci est le
huitieme, et le seul ou la faute etait de notre cote : nous ecrivions
"Irrad-a-tion", NeoForge ecrivait deja "Irrad-ia-tion". Aligner NeoForge sur
nous aurait propage la faute dans les deux depots.

Renommage de classe uniquement. BiomeIrradiationExtractorItem.TAG vaut
"biome_restore" et l'item reste enregistre sous "biome_irradiation_extractor" :
aucune ressource, aucune cle de lang et aucun monde existant n'est touche.

Verifie : compileJava passe, et le diff d'arborescence entre les deux depots ne
liste plus ce fichier.
…tractorItem

Pendant d'un renommage fait cote NeoForge, ou 8 fichiers portaient un nom
different du notre pour un contenu identique (section 1 de
PARITE_FORGE_NEOFORGE.md). Sept ont ete alignes sur Forge. Celui-ci est le
huitieme, et le seul ou la faute etait de notre cote : nous ecrivions
"Irrad-a-tion", NeoForge ecrivait deja "Irrad-ia-tion". Aligner NeoForge sur
nous aurait propage la faute dans les deux depots.

Renommage de classe uniquement. BiomeIrradiationExtractorItem.TAG vaut
"biome_restore" et l'item reste enregistre sous "biome_irradiation_extractor" :
aucune ressource, aucune cle de lang et aucun monde existant n'est touche.

Verifie : compileJava passe, et le diff d'arborescence entre les deux depots ne
liste plus ce fichier.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Giovanniricotta2002
Giovanniricotta2002 force-pushed the V2 branch 2 times, most recently from 57d5b4e to f6c815a Compare August 20, 2026 08:49
Gio and others added 6 commits August 20, 2026 10:55
…ove orphan alarm model

ResourceLocation was referenced by its fully qualified name inline in
PersistentFluidLocks instead of through an import like the other
Minecraft types in the file; added the import and shortened the call
site to match.

src/main/resources/assets/createnuclear/models/block/reactor/alarm/block.json
was an empty, unused model file at a path no blockstate or code
references. The alarm block already resolves to the generated
block/reactor_alarm.json model, which applies a single texture to
every face via cube_all, so this leftover was removed.
…ncy DSL and reset mod_version to 2.0.0

- build.gradle: replace the ForgeGradle-style `minecraft { ... }` block
  with ModDevGradle's `legacyForge { ... }` block — access transformer
  registration via `accessTransformers.from(...)`, parchment mappings
  via `parchment { minecraftVersion, mappingsVersion }` instead of
  `mappings channel:`, mod source set registration via
  `mods { "${mod_id}" { sourceSet ... } }`, and per-run-config updates
  (`jvmArguments.addAll(...)` instead of `jvmArguments =`,
  `systemProperty(...)` instead of `property ...`, `client()`/
  `gameDirectory` instead of `workingDirectory`, `type = "gameTestServer"`
  for the gametest run, refmap remap path updated to
  `build/moddev/artifacts/intermediateToNamed.srg`).
- Drop `fg.deobf(...)` wrapping (ForgeGradle-only) from all mod
  dependencies, switching to plain `modImplementation`/`modCompileOnly`/
  `modRuntimeOnly` configurations; Alex's Caves/Citadel move from
  `compileOnly fg.deobf(...)` to `modCompileOnly(...)`. Deduplicate the
  Create/Ponder/Flywheel/Registrate dependency block that was
  previously declared twice.
- Add `sourceSets.main.resources { srcDir 'src/generated/resources' }`
  so generated datagen resources are included on the classpath.
- Prefix the `base.version` with `${mod_version}-forge` instead of
  just `forge`, and remove the `mixin { debug.verbose/debug.export }`
  block (mixin debug flags are now set per-run via
  `systemProperty("mixin.debug.export"/"mixin.debug.verbose", "true")`
  instead).
- gradle.properties: reset mod_version from 2.0.17-beta-sound3 down to
  2.0.0.
- tooltips.json: reword the biome_irradiation_extractor beta tooltip
  ("will change it's form & texture in the next update" -> "might
  change in future updates").
- Regenerate affected datagen output (en_us.json, en_ud.json, .cache
  index entries).
@Giovanniricotta2002
Giovanniricotta2002 merged commit 26ceed4 into main Aug 22, 2026
@Giovanniricotta2002 Giovanniricotta2002 mentioned this pull request Aug 26, 2026
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