Skip to content

V2 - #25

Open
Giovanniricotta2002 wants to merge 53 commits into
mainfrom
V2
Open

V2#25
Giovanniricotta2002 wants to merge 53 commits into
mainfrom
V2

Conversation

@Giovanniricotta2002

Copy link
Copy Markdown
Member

No description provided.

Aph0rism and others added 30 commits July 22, 2026 13:38
Implement radiation items and effects, including RadiationItem class …
Add reactor alarm block and sound mechanics, including advancements f…
…on capability wiring

- Bump Create to 6.0.10-280, Ponder to 1.0.82, Flywheel to 1.0.6,
  Registrate to MC1.21-1.3.0+67, NeoForge to 21.1.247, JEI to
  19.43.0.390, and Jade to 7545219
- Disable Gradle configuration cache and add a client2 run
  configuration for local multiplayer testing
- Convert SimpleMultiBlockPattern to a record and drop the dead
  matches(java.util.logging.Level, ...) override and unused test()
  helper
- Remove the unused multiblock manager/cache classes
  (SimpleMultiBlockPatternBuilder, IBetterPattern, MultiBlockCache,
  MultiBlockManager, RegisteredMultiBlockPattern)
- Rename MultiBlockOffsetPos#caracter to #character and update all
  call sites
- Replace the unchecked Object cast in IodineEffect with a properly
  typed Attribute holder for CNAttributes.IRRADIATED_RESISTANCE
- Clean up fully-qualified references in CreateNuclear.java and
  PersistentFluidLocks.java in favor of imports
- Remove the enriching campfire block tag registration and its
  reactor casing sound events/subtitles (break, fall, hit, place,
  step) that are no longer used
- Add enriched_soul_soil to the enriching_fire_base_blocks tag and
  register enriching_fire/enriching_campfire as fan processing
  catalysts
- Add EnrichedRecipeGen skeleton under the new
  net.nuclearteam.createnuclear.api.data.recipe package, mirroring
  the existing foundation.data.recipe.EnrichedRecipeGen ahead of an
  API extraction
- Refresh generated datagen resources (lang files, sounds, block
  tags, datagen cache) to match the above changes
…turing

Remove the 48 per-color model, recipe, and advancement JSON files for
anti-radiation armor pieces, replacing them with a single default model
per armor slot (boots/chestplate/helmet/leggings) plus a colored/
variant folder. Introduce AntiRadiationArmorTextureMixin to resolve the
correct texture/color at render time instead of relying on baked
per-dye assets, and add ClothTagHelper and CNBuilderTransformers to
support the new tag-driven dye/cloth lookup.

Update CNItems, CNTags, CNDataComponents, CNEntityType,
AntiRadiationArmorItem/ClientExtensions, ClothItem, RadiationEffect,
and related registries to wire up the new structure, and drop the
now-unused default_anti_radiation_suit.png texture and obsolete dye
tag files (anti_radiation_*_dye.json, all_anti_radiation_armors.json).
Re-enable the previously commented-out SmithingClothRecipeBuilder calls
in CNItems for helmet, chestplate, leggings, and boots, generating a
smithing recipe per cloth color (skipping Cloths.DEFAULT) that applies
a colored cloth to the base armor piece. Back this with a new
SmithingTransformRecipeMixin (registered in
createnuclear.neoforge.mixins.json) and SmithingClothRecipeBuilder API
class, and regenerate the resulting smithing recipe/advancement JSON
under src/generated/resources/data/createnuclear/{recipe,advancement}/smithing/.

Change CNDataComponents' CLOTH_ITEM component from a raw ItemStack to a
new ClothItemStack wrapper record that implements content-based
equals/hashCode (via ItemStack.isSameItemSameComponents/
hashItemAndComponents), since NeoForge requires data component values
to implement proper value equality. Update ClothTagHelper and
CNBuilderTransformers accordingly, and refresh the colored anti-radiation
armor model JSONs to match. Minor unrelated fix to gradlew.bat.
mathi and others added 23 commits August 2, 2026 17:09
Add iodine effect and related potions; update radiation effect handling
…ase trigger implementation

Rework the advancement/trigger system to implement CriterionTrigger
directly instead of relying on Vanilla's SimpleCriterionTrigger,
register triggers via the vanilla registry at TRIGGER_TYPES event
time instead of a DeferredRegister on the mod bus, and make
CNAdvancement's data generation registry-aware (icons can now depend
on HolderLookup.Provider, e.g. items behind data components).

- Add CriterionTriggerBase<T>: a CriterionTrigger implementation
  managing PlayerAdvancements listeners directly and exposing a
  protected trigger(ServerPlayer, List<Supplier<Object>>) hook, plus
  a nested Instance base class with a test(...) predicate
- CNTriggers: drop the TRIGGERS DeferredRegister<CriterionTrigger<?>>;
  keep triggers in a local list and register them with
  Registry.register(BuiltInRegistries.TRIGGER_TYPES, ...) via the new
  no-arg register() method
- CreateNuclear: remove the modEventBus CNTriggers.register() call
  from the constructor; call the new CNTriggers.register() from the
  TRIGGER_TYPES registry event handler, alongside CNAdvancement.register()
- SimpleCreateNuclearTrigger: extend CriterionTriggerBase instead of
  SimpleCriterionTrigger; take an id in its constructor; replace the
  record Instance with a class Instance extending
  CriterionTriggerBase.Instance and implementing test(...)
- CreateNuclearAdvancement: build the Advancement.Builder and its
  nested Builder eagerly as fields; defer display()/icon
  configuration to save(), which now also receives a
  HolderLookup.Provider so an icon can be computed lazily via a new
  Builder.icon(Function<Provider, ItemStack>) overload; set the
  advancement's parent from the parent's datagenResult instead of by
  resource location; rename TaskType.frame to advancementType
- CNAdvancement: make the run() output depend on the registries
  future via thenCompose(...) instead of blocking with join(), and
  pass the resolved HolderLookup.Provider through to each
  CreateNuclearAdvancement.save(...) call
- CNAdvancementBehaviour: update write()/read() to override the
  current BlockEntityBehaviour signature (add HolderLookup.Provider
  and call super); add awardPlayerIfNear(...) to only award when the
  player is within a given distance of the block entity; add a
  tryAward(BlockGetter, BlockPos, CreateAdvancement) static helper
  bridging to Create's own AdvancementBehaviour; fix award() to check
  `advancements.contains(advancement)` instead of the removed
  isAlreadyAwardedTo(...); drop the stale toString() override
- CreateNuclearDatagen: register CNAdvancement as a server-side data
  provider (event.includeServer()) instead of a client-side one
  (event.includeClient()), matching where advancement JSONs actually
  belong
refactor(advancement): replace SimpleCriterionTrigger with a custom base trigger implementation
…cable attachment and clean up codebase-wide leftovers

Move the mod's data-attachment registration into a new dedicated
CNAttachmentTypes class, rework RadiationCapability from an
INBTSerializable-backed attachment to a plain Codec/StreamCodec-driven
one (fixing sync to clients), route item/fan/mob-effect radiation
exposure through it, and sweep up a large batch of unrelated
1.21.1/NeoForge cleanup (fully-qualified names, dead code, deleted
scratch files) accumulated on this branch.

Radiation attachment rework:
- Add CNAttachmentTypes: new home for the ATTACHMENT_TYPES
  DeferredRegister and the RADIATION attachment, now built with
  .serialize(RadiationCapability.CODEC).sync(RadiationCapability.STREAM_CODEC)
  instead of AttachmentType.serializable(...), so capability state is
  also synced to the client, not just persisted
- RadiationCapability: drop INBTSerializable/AttachmentType-registration
  responsibilities from the class itself; add CODEC and STREAM_CODEC
  (radiation, inventory hash, last biome, contagion dose/ticks) and a
  private create(...) factory instead of serializeNBT/deserializeNBT;
  reference CNAttachmentTypes.RADIATION instead of a local constant;
  call player.syncData(...) after updating radiation so held-item
  radiation changes propagate to the client; drop the explicit
  @EventBusSubscriber bus (defaults to the mod bus, matching the
  NewRegistry deprecation note also cleaned up in
  CreateNuclearRegistriesImpl); use CNTags.CNEntityTags import instead
  of the fully-qualified CNTags.CNEntityTags path; fix
  getRawBiomeRadiation to call RadiationRegistry.getRadiation(biomeKey, null)
  instead of the removed RadiationRegistry.get(biomeKey)
- RadiationRegistry: mark the LivingEntity parameter of
  getRadiation(ItemStack, ...) and getRadiation(ResourceKey<Biome>, ...)
  as @nullable, since callers may now pass null (see
  RadiationCapability above)
- RadiationItem: drop the inventoryTick() override that force-applied
  the RADIATION MobEffectInstance every tick — item radiation is now
  read from RadiationCapability's item-hash-based scan instead
- CreateNuclear: call CNAttachmentTypes.register(modEventBus) instead
  of RadiationCapability.register(modEventBus); enqueue
  CNOpenPipeEffectHandlers::registerDefaults during common setup
- Add CNOpenPipeEffectHandlers: registers a RadiationEffectHandler for
  Create's OpenPipeEffectHandler on the uranium fluid source, so open
  pipes carrying uranium fluid apply radiation

Dead code / cleanup removal:
- Delete foundation/block/EventTriggerBlock.java (unused
  packet-broadcasting block)
- Delete foundation/events/possible code (a stray, uncompiled
  Forge-era scratch file with a non-Java filename)
- HudRenderer: drop the now-dangling import of the removed
  RadiationOverlay
- CNGuiTextures: drop redundant `private` modifiers on enum
  constructors (enum constructors are implicitly private)
- CommentEventClients / CNConfigs: drop explicit
  `bus = EventBusSubscriber.Bus.MOD`, relying on the default (mod
  bus) per the same NeoForge 1.21.1 deprecation as above
- CreateNuclearRegistriesImpl: remove the stale comment explaining
  the now-completed bus-argument cleanup
- CreateNuclearClient / CNPonderIndex: drop stray blank lines

Fully-qualified-name / import cleanup (no behavior change), across
CNClientProxy, CNEntityType, CNFluids, CNSoundEvents, ClientEvents,
BiomeIrradiationExtractorItem, NuclearExplosionEntity,
ReactorControllerBlockEntity, ReactorOutputEntity,
IrradiatedParticlesData, ReactorSummaryDisplaySource,
CNShapelessRecipeGen, CNStandardRecipeGen, CNBiomeModifiers:
- Replace fully-qualified type references (e.g.
  net.minecraft.core.component.DataComponents,
  com.google.common.base.Supplier,
  com.simibubi.create.foundation.mixin.accessor.MappedRegistryAccessor)
  with proper imports and short names
- Drop an unused AllPlacedFeatures import in CNBiomeModifiers

Formatting-only re-indentation (no behavior change): CNShapes,
IrradiatedBiomes, CreateNuclearRegistriesImpl, CNItemApplicationRecipeGen,
CNRecipeProvider

Other:
- BigFluidStack: replace the hand-written write()/read()/send() NBT
  and StreamCodec plumbing with declarative CODEC/STREAM_CODEC fields
  built from FluidStack's own OPTIONAL_CODEC/OPTIONAL_STREAM_CODEC;
  simplify receive() and duplicateWrappers() to match (drop the
  now-unneeded stack.copy() since FluidStack is treated as immutable
  here)
- foundation/damagesTypes/CNDamageSources.java: fix the package
  declaration (`damageTypes` → `damagesTypes`) to match the directory
  it actually lives in
…d of an eagerly-created SoundEvent

SoundEvent.createVariableRangeEvent(id) built a real SoundEvent
before the sound registry existed, so registering it via
RegisterHelper duplicated identity/timing issues; switch
CustomSoundEntry/WrappedSoundEntry to hold a
DeferredHolder<SoundEvent, SoundEvent> instead, resolving the actual
SoundEvent lazily via .get() and only constructing it at register()
time. Also drop five reactor-casing sound entries that no longer have
matching content, and reformat CNSoundEvents' SoundEntry field list.

- CustomSoundEntry: replace the `SoundEvent event` field with
  `DeferredHolder<SoundEvent, SoundEvent> event`, created via
  DeferredHolder.create(Registries.SOUND_EVENT, id) in prepare();
  register() now constructs the SoundEvent via
  SoundEvent.createVariableRangeEvent(location) at registration time
  instead of upfront; getMainEvent()/getMainEventHolder() and play()/
  playAt() updated to resolve through event.get()/event, replacing
  the previous BuiltInRegistries.SOUND_EVENT.wrapAsHolder(event)
  workaround
- WrappedSoundEntry.CompiledSoundEvent: same DeferredHolder switch for
  each wrapped event; getMainEvent()/getMainEventHolder()/play()/
  playAt() updated accordingly; use compiledEvents.getFirst() instead
  of .get(0) in getMainEventHolder()
- Remove the REACTOR_CASING_BREAK/STEP/PLACE/HIT/FALL SoundEntry
  constants
- Reformat the SoundEntry field declaration list and
  playItemPickup()'s playSound(...) call for consistent indentation
  (no behavior change)
- Add missing imports (AllSoundEvents, DeferredHolder) needed by the
  above
updating sounds in the assets and in soundevents
…ed reactor-casing sounds

Replace the alarm, wasteland biome, and reactor-running audio assets
with updated recordings, and delete the reactor-casing sound files
(break/fall/hit/place/step) and the nuclear explosion ringing sound,
which no longer have matching SoundEntry registrations.

- Update src/main/resources/assets/createnuclear/sounds/alarm/alarm.ogg
- Update src/main/resources/assets/createnuclear/sounds/biomes/wasteland.ogg
- Update src/main/resources/assets/createnuclear/sounds/reacteur/running.ogg
- Delete src/main/resources/assets/createnuclear/sounds/explosion/nuclear_explosion_ringing.ogg
- Delete src/main/resources/assets/createnuclear/sounds/reacteur/casing_break.ogg
- Delete src/main/resources/assets/createnuclear/sounds/reacteur/casing_fall.ogg
- Delete src/main/resources/assets/createnuclear/sounds/reacteur/casing_hit.ogg
- Delete src/main/resources/assets/createnuclear/sounds/reacteur/casing_place.ogg
- Delete src/main/resources/assets/createnuclear/sounds/reacteur/casing_step.ogg
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.

3 participants