Skip to content

v1.0.2 - NeoForge 1.21.1

Latest

Choose a tag to compare

@igentuman igentuman released this 27 Jun 10:34

v1.0.2 - NeoForge 1.21.1

Per-Entry Config Gating

  • config/Entries.java - universal TOML toggle per ModEntryBuilder registration, default enabled
  • ModEntry.isEnabled() - single accessor read live per-call, so config reload takes effect without restart
  • Enforced in creative tab (every entry kind), GlobalBlockEntity.serverTick (disabled = inert), and block menu open
  • Disabled entries stay registered (inert + hidden), not unregistered; Processors aligned to the unified gate

New Registry Builders

  • Registers: PARTICLE_TYPES, ENTITY_TYPES, SOUND_EVENTS, MOB_EFFECTS, ATTACHMENT_TYPES
  • ModEntryBuilder: addParticleType, addEntityType, addSoundEvent, addMobEffect, addWorldCapability, addEntityCapability
  • World/entity persistent data backed by AttachmentType (uniform DeferredRegister path)

Catalyst System

  • CatalystType (ENERGY / SPEED / EFFICIENCY), abstract Catalyst with power + preTick/postTick, CatalystRegistry, CatalystDef, CatalystFactory
  • Concrete EnergyCatalyst, SpeedCatalyst, EfficiencyCatalyst
  • ModEntryBuilder.addCatalyst(name, type, factory) registers the catalyst item + def; .catalysts(types...) declares processor support
  • UniversalProcessorBE attaches active catalysts from the catalyst slot and runs hooks around operation; power = catalyst item count

Tag-Based Recipe Outputs

  • Item and fluid recipe outputs may be tags; recipe/ItemOutput + recipe/FluidOutput union types with either-form codecs
  • TagOutputResolver resolves a tag to one concrete stack via mod_tag_priority (config/Common); global cache refreshed on config reload
  • Empty tags mark a recipe incomplete (runtime skip); item-tag datagen emits a NOT(tag_empty) condition (no native fluid-tag condition in NeoForge 21.1.228)
  • UniversalProcessorRecipe carries union outputs + getOutputStack/getOutputFluidStack; RecipeInfo.produceOutputs resolves at production
  • JEI/EMI display all tag members, priority-ordered

Custom Rendering

  • BillboardingEffectRenderer - draws a camera-facing animated sprite at any world position
  • CustomEffect - billboard descriptor (texture sprite-sheet grid, position, RGBA color, scale)
  • DelayedRenderHandler - per-frame translucent render queue; depth-sorted, flushed at AFTER_TRANSLUCENT_BLOCKS, translated to world origin
  • DistortShader - screen-space lens distortion post effect; DistortionSource registry keyed by arbitrary object; depth-buffer occlusion; per-source radius/magnification
  • ModRenderType.BILLBOARD render type + ModShaders (billboard core shader + distort post chain), auto-registered via RegisterShadersEvent
  • Shaders: rendertype_billboard core (POSITION_TEX_COLOR), distort post chain + program GLSL

Docs

  • docs/entry-config-gating.md - per-entry config gating guide
  • docs/registry-builders.md - new registry builder reference
  • docs/catalysts.md - catalyst system guide
  • docs/tag-outputs.md - tag-based recipe output guide
  • docs/custom-rendering.md - billboard + distortion guide with worked "Anomaly" block chain example (block + block entity + BlockEntityRenderer)