
Fairy Lights
A modern port of the beloved decorative hanging lights mod, bringing customizable string lights, bunting, and garlands to Minecraft 1.21.1.
5.1K
9
v8.0.10
release2 мая 2026 г.Fairy Lights 8.0.10 - Performance: Remove Dead Reflection Code
Performance Fixes
CapabilityHandler (~16% render thread overhead eliminated)
- Removed per-tick reflection calls in
getFastenerCapability()for bothEntityandBlockEntityoverloads. The code was callingClass.getMethod()/Method.invoke()every tick trying to find old Forge API methods (getCapability,getData,setData,addCapability,getOrCreateCapability) that don't exist in NeoForge 1.21.1. Each call threwNoSuchMethodExceptionwhich is expensive to construct. - The
instanceofchecks forFastenerBlockEntity,FenceFastenerEntity, andPlayeralready covered all real use cases — the reflection fallbacks never succeeded.
Bug Fixes
Connection Item Matching (Connection.java)
- Fixed
matches()andreplace()using deadgetTag()reflection instead of the Data Components API.ItemStack.getTag()was removed in 1.20.5 — the reflection always failed and returnednull, causingmatches()to always returntruefor same-type items (preventing valid NBT comparison) andreplace()to always pass empty data (losing connection properties like color/pattern). Now correctly reads fromFLDataComponents.CONNECTION_LOGIC.
Dead Code Removal
FenceFastenerEntity.java
- Removed two useless reflection attempts for
NbtAccounter.unlimitedHeap()andNbtAccounter.createUnlimited(int)inreadSpawnData()— neither exists in 1.21.1. The correctNbtAccounter.create()was already the final fallback.
NetBuilder.java
- Removed dead reflection in
sendToClient()tryingPayloadRegistrar.send()andPayloadRegistrar.sendToPlayer()— neither method exists. The handler map fallback was the actual working code path.
ClientEventHandler.java
- Removed reflection-based
addVertexToBuffer()trying the oldVertexConsumer.vertex(double,double,double)chained API. This code path is unreachable (only called from commented-outdrawEntityHighlight).
ClientProxy.java
- Removed unused
getUvIndex()method containingVertexFormatElement.getUsage()reflection — never called from anywhere in the codebase.
v8.0.9
release3 апреля 2026 г.- Suppressed
FL_DEBUGandFL_DEBUG_CRITICALconsole spam.
v8.0.8
release2 марта 2026 г.Fairy Lights 8.0.8 - Letter & Pennant Bunting Rendering Fix
Major Fixes
Letter Bunting Rendering
- Fixed letters not appearing on string: Letters now render correctly on letter bunting after entering text in the dialog. The root cause was a broken manual vertex extraction approach — replaced with Minecraft's native
putBulkData()method for rendering BakedQuads.
Pennant Bunting Rendering
- Fixed pennants not appearing on string: Pennants now render correctly. The model lookup was using the wrong variant (
"inventory"instead of"standalone"), causing all models to return the missing model. - Fixed pennants off-center: Added proper centering translation to align pennants under their attachment points on the string.
Rendering Pipeline
- Fixed texture atlas mismatch: BakedQuad rendering was using the mod's custom entity texture atlas, but the quad UV coordinates reference the block texture atlas. Switched to
Sheets.cutoutBlockSheet()for correct rendering.
Technical Improvements
- Replaced ~120 lines of broken manual vertex extraction and reflection-based rendering with a single
putBulkData()call - Fixed model variant from
"inventory"to"standalone"inPennantBuntingRenderer - Updated
FenceFastenerRendererto use theMultiBufferSourceoverload - Removed excessive debug logging and
System.out.printlnstatements - Removed unnecessary depth offset hacks from all connection renderers
v8.0.7
release7 февраля 2026 г.Fairy Lights 8.0.7 - Connection Placement & Item Drop Fixes
Major Fixes
Connection Placement System
- Fixed placement after breaking: Hanging lights can now be placed at different distances after breaking the first fastener. Previously, the connection would remain in the player's hand and block new placements.
- Fixed reconnection logic: When placing a connection at a different distance, the system now properly handles reconnecting to a new destination or creating a new connection if the old destination is invalid.
- Improved connection validation: The placement system now correctly ignores removed or invalid connections, allowing new placements even when stale connection data exists.
Item Drop System
- Fixed swapped light drops: When breaking a hanging lights connection, all individual lights from the pattern (including any lights you swapped in) are now properly dropped as items. Previously, swapped-in lights would be lost.
- Fixed drop behavior: Pattern items are now dropped both when manually disconnecting a connection and when breaking the fastener block, ensuring you always get your lights back.
Technical Improvements
- Enhanced connection type matching to allow reconnection when types match
- Improved handling of stale connections in player capability
- Better null safety checks in connection removal code
- Fixed item dropping to occur in both
onRemove()anddisconnect()methods
Notes
- Breaking a hanging lights connection now returns all lights that were placed in the pattern
- You can now freely place connections at different distances without being blocked by previous placements
- The connection system now properly cleans up invalid connections automatically
v8.0.6
release5 февраля 2026 г.Fairy Lights 8.0.6 - Hanging Lights Interaction & On/Off Toggle Fixes
Major Fixes
Hanging Lights Interaction System
- Fixed individual light swapping: Lights can now be individually replaced by clicking on them with a different light item in hand. Each light maintains its own state and can be changed independently.
- Fixed light shape changes: Swapping lights now correctly changes both the color AND shape of the light, not just the color.
- Fixed interaction detection: Improved client-side interaction detection to reliably detect clicks on individual lights, fasteners, and the rope itself.
On/Off Toggle System
- Fixed on/off state persistence: Lights now correctly maintain their on/off state and properly toggle when clicked with an empty hand.
- Fixed state synchronization: The on/off state now correctly synchronizes from server to client, ensuring all players see the same state.
- Fixed light block removal: When lights are turned off, the light blocks (that emit actual light) are now properly removed on both server and client, so the area becomes dark as expected.
- Fixed toggle behavior: Lights only toggle on/off when clicking with an empty hand. Swapping lights no longer triggers the toggle.
Technical Improvements
- Improved network synchronization for connection state updates
- Enhanced client-side state management for hanging lights
- Better handling of light block placement and removal
- Fixed duplicate interaction handling to prevent double-toggles
Notes
- The on/off toggle requires an empty hand - holding an item will swap the light instead
- Individual lights can be swapped by clicking on them with a different light item
- Light blocks are automatically removed when lights are turned off, restoring normal lighting
Совместимость
Создатели
Детали
Лицензия:MIT
Опубликован:3 месяца назад
Обновлён:4 дня назад
