A NeoForge 1.21.1 compatibility addon that renders configured TaCZ weapon lights through the separate Veil Volume Lights library. Client installations need both veiltaczlights and veilvolumelights; installing only the TaCZ addon JAR on a server remains optional and enables datapack-profile and multiplayer flashlight-state synchronization.
I have no plans to support forge 1.20.1. Feel free to port it yourself if you wish. Will port to future versions when necessary.
VolumeLight.Spot per rendered player every frame.LASER attachments whose models contain a flashlight-like emitter bone, with explicit third-party profiles available in TOML.Press L(by default) to toggle the local player's weapon light.
The client config includes thirdPersonFlare, thirdPersonFlareSize, and thirdPersonFlareIntensity. Flare distance uses the existing thirdPersonLightDistance limit.
NeoForge creates config/veiltaczlights-client.toml for global fallback behavior. Bounds are enforced for every numeric option.
Attachment profiles are datapack files at:
data/<attachment namespace>/veiltaczlights/attachment_profiles/<attachment path>.json
For example, data/addonpack/veiltaczlights/attachment_profiles/weapon_light.json configures addonpack:weapon_light:
{
"enabled": true,
"emitter_bone": "flashlight",
"beam": {
"length": 40.0,
"width": 14.0,
"inner_width": 7.0,
"color": "#F2FAFF",
"intensity": 1.2,
"shadows": true,
"volumetric_strength": 0.4
}
}
length is the maximum distance in blocks. width and optional inner_width are full beam diameters in blocks at that distance, which the addon converts to Veil cone angles. color accepts #RRGGBB or a three-number RGB array. Datapack profiles take priority and reload with /reload.
In singleplayer, the integrated server loads and synchronizes these files and flashlight states automatically. For a dedicated multiplayer server, install the addon JAR on the server to synchronize server datapack profiles and player flashlight toggles to clients. TaCZ and Veil are not required server-side, and clients can still join servers that do not install this addon; in that case only the client's legacy TOML fallback is available and remote recognized lights default to on.
The addon still creates config/veiltaczlights-attachments.toml as a legacy/local fallback when no datapack profile exists for an attachment:
[attachments."addonpack:weapon_light"]
enabled = true
emitterBone = "flashlight"
range = 40.0
intensity = 1.2
outerConeAngle = 30.0
innerConeAngle = 16.0
red = 1.0
green = 0.97
blue = 0.90
shadows = true
volumetricStrength = 0.0
Set emitterBone = "@attachment" only for a pack whose attachment origin itself is authored at the lamp. Set enabled = false to override automatic recognition for an attachment.
The bundled JSON defaults use a clearly visible volumetric strength. Veil Volume Lights excludes transparent surfaces from the terminating depth snapshot, coalesces adjacent identical media, and integrates the actual distance traveled inside each volume. Colored media multiply their wavelength transmission along a light path, while separate light sources remain framebuffer-additive. The same behavior applies to point, spot, and area lights.
If an attachment lacks a recognized/configured emitter bone, it is skipped. Debug mode logs its resolved gun, attachment, bone, position, forward vector, and Veil handle state at most once per second per player.