Resolved conflicts in AbstractDataAbilities, DataAbilities, PlayerAbilityData
to integrate both toggle system (upstream) and chain delay tracking (local).
ChainedAbility now has UUID and DisplayName fields matching Ability pattern.
ChainedAbilityController rewritten: saves in abilities/chained/, dual-index
by name and UUID, legacy migration from chained_abilities/ directory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The dot product was being computed but not used - panels were blocking
projectiles from both sides. Now correctly checks which side the
projectile approaches from and only blocks if it's moving toward
the panel surface.
https://claude.ai/code/session_01EV9KpiykvW4rASz7ju5iTG
Implements four new energy ability types:
- Energy Dome: Spherical barrier centered on caster that blocks incoming
energy projectiles. Configurable per-projectile-type damage multipliers,
HP/durability and duration modes. RING telegraph.
- Energy Wall: Placeable flat energy panel with configurable dimensions
and height offset (can float above ground). Optional launching mode
fires the wall forward with damage/knockback.
- Energy Shield: Held energy panel that follows the caster and rotates
with their look direction. Defensive blocking ability.
- Energy Slicer: Thin wide blade projectile (JJK Cleave inspired).
Extends AbstractEnergyProjectileAbility. Piercing by default.
Architecture:
- EnergyBarrierData: HP, duration, per-type damage multiplier map
- EnergyPanelData: Panel dimensions, height offset, launch properties
- AbstractEnergyBarrierAbility: Shared base for Dome/Wall/Shield
- EntityEnergyDome, EntityEnergyPanel, EntityEnergySlicer entities
- RenderEnergyDome, RenderEnergyPanel, RenderEnergySlicer renderers
with translucent inner/outer layers (voxel-blocky aesthetic)
- Projectile-barrier collision system in EntityAbilityProjectile
https://claude.ai/code/session_01EV9KpiykvW4rASz7ju5iTG
Introduce client-side trap presets and a visual "trigger reveal" for traps, plus related entity/renderer changes.
- AbilityTrap: add TrapPreset enum and applyTrapPresetDefaults; wire a SubGuiTrapPresetSelector hook to apply presets from the GUI; pass visibility into created trap entities.
- EntityAbilityZone: add visible flag, TRIGGER_FLASH_STATUS state, setEntityState usage to notify clients of triggers, handleHealthUpdate to start client-side flash, and adjust construction/serialization accordingly.
- RenderAbilityZone: implement trigger-reveal visuals (revealFade, triggerReveal) that briefly show a burst when traps trigger, skip rendering for invisible traps unless revealing, and tweak flash/timing logic.
- Minor cleanup: remove/condense comment blocks and refactor noisy helpers across AbilityZone/AbilityHazard, plus language entry update and new SubGuiTrapPresetSelector GUI class.
These changes enable preset application for traps and improve client-side feedback when traps trigger.
Perform more complete client-side checks before predicting currency deductions in GuiNPCTrader.handleMouseClick. The method now verifies that the item can be given to the player (canGivePlayerClient), that the slot is enabled, and that stock is available, mirroring server-side checks. When a client-side purchase is accepted, availableStock is decremented if applicable. Added a private canGivePlayerClient(ItemStack) helper to check cursor-stack compatibility and max stack size. These changes prevent the UI from showing incorrect balances for trades the server would reject.
Ki Cost belongs in the DBC Addon's DBCAbilityStats system,
not in the base ability infrastructure.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>