From 9ebaf780e1ccb5d9f2f7c7bcb3a3d37fb21d2064 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 25 Jan 2026 17:13:53 -0300 Subject: [PATCH 01/85] i hate git --- gradle-plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-plugins b/gradle-plugins index e193079bf..bfa9565fc 160000 --- a/gradle-plugins +++ b/gradle-plugins @@ -1 +1 @@ -Subproject commit e193079bf7392e83d233ce2e120ee0f2b645021f +Subproject commit bfa9565fce3110adb8fb4e9fd1a52bafdd7d35e6 From 92e69bb270645c452268dc4568300998a00dc588 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 25 Jan 2026 21:13:42 -0300 Subject: [PATCH 02/85] Changed Player Dialog Events to work like NPC Dialog Events --- .../java/noppes/npcs/NoppesUtilPlayer.java | 6 ++--- .../java/noppes/npcs/NoppesUtilServer.java | 2 +- .../scripted/event/player/DialogEvent.java | 27 +++++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index c78ffdf46..7f9753104 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -306,18 +306,18 @@ public class NoppesUtilPlayer { if (dialog == null) return; DialogOption option = dialog.options.get(optionId); - if (EventHooks.onDialogOption(player, new DialogEvent.DialogOption((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) + if (EventHooks.onDialogOption(player, new DialogEvent.DialogOption((IPlayer) NpcAPI.Instance().getIEntity(player), dialogId, optionId, dialog))) return; if (!npc.isRemote()) { EventHooks.onNPCDialogClosed(npc, player, dialogId, optionId + 1, dialog); if (!dialog.hasDialogs(player) && !dialog.hasOtherOptions()) { - EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); + EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialogId, optionId, dialog)); return; } if (option == null || option.optionType == EnumOptionType.DialogOption && (!option.isAvailable(player) || !option.hasDialog()) || option.optionType == EnumOptionType.Disabled || option.optionType == EnumOptionType.QuitOption) { - EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); + EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialogId, optionId, dialog)); return; } } diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 08c04f6f4..ffc778eb0 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -241,7 +241,7 @@ public class NoppesUtilServer { if (EventHooks.onNPCDialog(npc, player, dialog.id, optionId, dialog)) { return; } - if (EventHooks.onDialogOpen(player, new DialogEvent.DialogOpen((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) { + if (EventHooks.onDialogOpen(player, new DialogEvent.DialogOpen((IPlayer) NpcAPI.Instance().getIEntity(player), dialog.id, optionId, dialog))) { return; } } diff --git a/src/main/java/noppes/npcs/scripted/event/player/DialogEvent.java b/src/main/java/noppes/npcs/scripted/event/player/DialogEvent.java index a5ebfc1ff..a6291cac0 100644 --- a/src/main/java/noppes/npcs/scripted/event/player/DialogEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/player/DialogEvent.java @@ -8,24 +8,36 @@ import noppes.npcs.constants.EnumScriptType; public class DialogEvent extends PlayerEvent implements IDialogEvent { public final IDialog dialog; + public final int dialogId; + public final int optionId; - public DialogEvent(IPlayer player, IDialog dialog) { + public DialogEvent(IPlayer player, int id, int optionId, IDialog dialog) { super(player); this.dialog = dialog; + this.dialogId = id; + this.optionId = optionId; } public IDialog getDialog() { return dialog; } + public int getDialogId() { + return dialogId; + } + + public int getOptionId() { + return optionId; + } + public String getHookName() { return EnumScriptType.DIALOG_EVENT.function; } @Cancelable public static class DialogOpen extends DialogEvent implements IDialogEvent.DialogOpen { - public DialogOpen(IPlayer player, IDialog dialog) { - super(player, dialog); + public DialogOpen(IPlayer player, int id, int optionId, IDialog dialog) { + super(player, id, optionId, dialog); } public String getHookName() { @@ -35,8 +47,8 @@ public class DialogEvent extends PlayerEvent implements IDialogEvent { @Cancelable public static class DialogOption extends DialogEvent implements IDialogEvent.DialogOption { - public DialogOption(IPlayer player, IDialog dialog) { - super(player, dialog); + public DialogOption(IPlayer player, int id, int optionId, IDialog dialog) { + super(player, id, optionId, dialog); } public String getHookName() { @@ -46,13 +58,12 @@ public class DialogEvent extends PlayerEvent implements IDialogEvent { } public static class DialogClosed extends DialogEvent implements IDialogEvent.DialogClosed { - public DialogClosed(IPlayer player, IDialog dialog) { - super(player, dialog); + public DialogClosed(IPlayer player, int id, int optionId, IDialog dialog) { + super(player, id, optionId, dialog); } public String getHookName() { return EnumScriptType.DIALOG_CLOSE.function; } - } } From de043f4a2557ccd4123554c762b705bc000d70e9 Mon Sep 17 00:00:00 2001 From: Kam Date: Sun, 25 Jan 2026 20:39:01 -0500 Subject: [PATCH 03/85] Ability Changes --- .gitignore | 3 +- Ability_Update_Review.md | 301 +++++++++ src/api | 2 +- .../client/renderer/RenderAbilityBeam.java | 347 +++++++++++ .../client/renderer/RenderAbilityDisc.java | 136 +++++ .../client/renderer/RenderAbilityLaser.java | 200 ++++++ .../client/renderer/RenderAbilityOrb.java | 105 ++++ .../client/renderer/RenderAbilityOrbCube.java | 56 ++ .../renderer/RenderAbilityProjectile.java | 255 ++++++++ .../client/renderer/RenderAbilitySweeper.java | 210 +++++++ .../renderer/quadric/QuadricRenderer.java | 138 +++++ .../renderer/quadric/SphereRenderer.java | 37 ++ .../controllers/data/ability/Ability.java | 158 ++--- .../data/ability/AbilityController.java | 10 +- .../data/ability/TargetingMode.java | 17 +- .../data/ability/type/AbilityBeam.java | 335 ---------- .../data/ability/type/AbilityCharge.java | 2 +- .../data/ability/type/AbilityDisc.java | 237 ++++++++ .../data/ability/type/AbilityEnergyBeam.java | 227 +++++++ .../data/ability/type/AbilityGuard.java | 2 +- .../data/ability/type/AbilityHazard.java | 50 +- .../data/ability/type/AbilityHeal.java | 41 +- .../data/ability/type/AbilityHeavyHit.java | 2 +- .../data/ability/type/AbilityLaserShot.java | 202 +++++++ .../data/ability/type/AbilityOrb.java | 328 ++++------ .../data/ability/type/AbilityShockwave.java | 2 +- .../data/ability/type/AbilitySlam.java | 2 +- .../data/ability/type/AbilitySweeper.java | 217 +++++++ .../data/ability/type/AbilityTrap.java | 35 +- .../data/ability/type/AbilityVortex.java | 2 +- .../data/telegraph/TelegraphInstance.java | 32 +- .../npcs/entity/EntityAbilityBeam.java | 428 +++++++++++++ .../npcs/entity/EntityAbilityDisc.java | 329 ++++++++++ .../npcs/entity/EntityAbilityLaser.java | 326 ++++++++++ .../kamkeel/npcs/entity/EntityAbilityOrb.java | 225 +++++++ .../npcs/entity/EntityAbilityProjectile.java | 570 ++++++++++++++++++ .../npcs/entity/EntityAbilitySweeper.java | 437 ++++++++++++++ src/main/java/noppes/npcs/CustomNpcs.java | 10 + src/main/java/noppes/npcs/DataAbilities.java | 35 +- .../java/noppes/npcs/ai/CombatHandler.java | 6 +- .../java/noppes/npcs/client/ClientProxy.java | 16 + .../gui/advanced/SubGuiAbilityConfig.java | 81 ++- .../advanced/ability/SubGuiAbilityBeam.java | 110 ---- .../advanced/ability/SubGuiAbilityDisc.java | 227 +++++++ .../ability/SubGuiAbilityEnergyBeam.java | 228 +++++++ .../ability/SubGuiAbilityLaserShot.java | 159 +++++ .../advanced/ability/SubGuiAbilityOrb.java | 96 +++ .../ability/SubGuiAbilitySweeper.java | 198 ++++++ .../assets/customnpcs/lang/en_US.lang | 30 + .../customnpcs/textures/entity/white.png | Bin 0 -> 176 bytes .../customnpcs/textures/entity/whiteSmall.png | Bin 0 -> 139 bytes 51 files changed, 6287 insertions(+), 915 deletions(-) create mode 100644 Ability_Update_Review.md create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java delete mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java create mode 100644 src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeam.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java create mode 100644 src/main/resources/assets/customnpcs/textures/entity/white.png create mode 100644 src/main/resources/assets/customnpcs/textures/entity/whiteSmall.png diff --git a/.gitignore b/.gitignore index f24532312..d24cc7cf7 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ addon.late.local.gradle.kts layout.json out run -src/main/resources/assets/customnpcs/api \ No newline at end of file +src/main/resources/assets/customnpcs/api +df/ diff --git a/Ability_Update_Review.md b/Ability_Update_Review.md new file mode 100644 index 000000000..2ceb38797 --- /dev/null +++ b/Ability_Update_Review.md @@ -0,0 +1,301 @@ +# Ability System Review - CustomNPC+ + +A comprehensive technical review of the Ability System identifying bugs, logic issues, incomplete features, and inconsistencies. + +--- + +## Critical Issues + +### 1. Cooldown Uses Mixed Time Systems +**Status:** FIXED +**Files:** +- `Ability.java` - Removed cooldown tracking (cooldownEndTime, startCooldown(), isOnCooldown(), canUse()) +- `DataAbilities.java` - Now sole owner of cooldown management using world time + +**Solution:** Removed all cooldown tracking from `Ability.java`. Cooldowns are now managed exclusively by `DataAbilities` using `world.getTotalWorldTime()` for consistency. + +--- + +### 2. AbilityHeal - Heal Over Time Completely Broken +**Status:** FIXED +**File:** `AbilityHeal.java` + +**Solution:** Refactored to separate ally-finding from healing. The `findAlliesInRadius()` method is now called regardless of `instantHeal` flag, populating the list for HoT to use. Added heal particles during HoT ticks. + +--- + +### 3. AbilityGuard - Counter Integration Missing +**Status:** FIXED +**Files:** +- `DataAbilities.java:onDamage()` - Added integration to call `AbilityGuard.onDamageTaken()` +- `DataAbilities.java:getGuardDamageReduction()` - Added helper method for damage reduction + +**Solution:** `DataAbilities.onDamage()` now checks if current ability is an `AbilityGuard` and calls `onDamageTaken()` when the NPC is hit while guarding. + +--- + +## High Priority Issues + +### 4. knockbackUp Stored But Never Applied +**Status:** FIXED +**File:** `Ability.java` + +**Solution:** Updated `applyNpcKnockback()` to accept a `knockbackUp` parameter and use it instead of hardcoded `0.1D`. Both `applyAbilityDamage()` and `applyAbilityDamageWithDirection()` now pass the knockbackUp value from the HitEvent. + +--- + +### 5. Targeting Modes Not Implemented +**Status:** FIXED (Removed) +**File:** `TargetingMode.java` + +**Solution:** Removed the unused targeting modes (`RANDOM_ENEMY`, `LOWEST_HP`, `HIGHEST_THREAT`) from the enum. Only the implemented modes remain: `AGGRO_TARGET`, `SELF`, `AOE_SELF`, `AOE_TARGET`. + +--- + +### 6. Damage Source Inconsistency +**Status:** FIXED +**File:** `Ability.java` + +**Solution:** Standardized both `applyAbilityDamage()` and `applyAbilityDamageWithDirection()` to use `NpcDamageSource("mob", npc)` for consistent damage source handling. + +--- + +## Incomplete Features + +### 7. AbilityProjectile - No Actual Projectile +**Status:** CONFIRMED - INCOMPLETE +**File:** `AbilityProjectile.java:88` + +```java +// TODO: Use custom EntityAbilityProjectile for actual tracking +applyAbilityDamageWithDirection(npc, target, damage, knockback, dx, dz); +``` + +**Current behavior:** +- `speed`, `homing`, `homingStrength` fields exist but are unused +- No projectile entity is spawned +- Damage is instant, just with particle cosmetics + +--- + +### 8. AbilityOrb - No Visual Orb Rendering +**Status:** CONFIRMED - INCOMPLETE +**File:** `AbilityOrb.java:117-179` + +**Problem:** The orb tracks position (`orbX`, `orbY`, `orbZ`) with runtime getters but nothing renders it client-side. Players only see particle effects on hit, not the flying orb itself. + +--- + +### 9. AbilityBeam - No Visual Beam Rendering +**Status:** CONFIRMED - INCOMPLETE +**File:** `AbilityBeam.java:213-220` + +**Problem:** Only spawns flame particles along the path. No actual beam entity or proper beam visual. The `lockOnTarget` telegraph during active phase isn't visually communicated. + +--- + +## Medium Priority Issues + +### 10. Hazard/Trap Telegraph Offset Mismatch +**Status:** CONFIRMED +**Files:** +- `AbilityHazard.java:119-147, 201-248` +- `AbilityTrap.java:109-138, 166-205` + +**Problem:** Telegraph is created at target position, but actual effect applies random offset: + +```java +// createTelegraph() - No offset applied, shows at target position + +// onExecute() - Random offset applied AFTER telegraph locks +double[] pos = calculateOffsetPosition(telegraph.getX(), telegraph.getY(), telegraph.getZ()); +zoneX = pos[0]; // Actual effect position differs from telegraph +``` + +**Impact:** Players see telegraph at one location, damage happens elsewhere. Misleading visual feedback. + +**Fix:** Either apply offset during telegraph creation, or update telegraph position in `onExecute()`. + +--- + +### 11. AbilityCharge Telegraph Direction Timing +**Status:** CONFIRMED - MINOR +**File:** `AbilityCharge.java:91, 254-286` + +**Problem:** Telegraph created at tick 0, direction locked at tick 1: + +```java +// Telegraph created during setup (tick 0) with current target direction +// Line 91: Direction locked at tick 1 +if (tick == 1) { + lockChargeDirection(npc, target); +} +``` + +**Impact:** If target moves between tick 0-1, telegraph direction won't match actual charge. + +--- + +### 12. AbilitySlam - activeTicks May End Before Landing +**Status:** CONFIRMED - MINOR +**File:** `AbilitySlam.java:52-53, 230-250` + +**Problem:** `activeTicks = 60` is fixed, but if NPC takes longer to land, ability transitions to RECOVERY without `onLanding()` being called. + +**Secondary issue:** If NPC lands early (tick 15), active phase continues until tick 60 doing nothing - wasted ticks. + +--- + +### 13. FOLLOW Mode Telegraph Not Updated +**Status:** CONFIRMED +**Files:** `AbilityHazard.java:139-146`, `AbilityVortex.java` + +**Problem:** For `FOLLOW_TARGET` mode, telegraph locks position on execute, but the actual hazard zone follows the target. Visual mismatch between warning and danger. + +--- + +## Redundancies + +### 14. Duplicate findGroundLevel() Methods +**Status:** FIXED +**Files:** +- `Ability.java` - Made `findGroundLevel()` public static +- `TelegraphInstance.java` - Now uses `Ability.findGroundLevel()` + +--- + +### 15. Duplicate calculateOffsetPosition() Methods +**Status:** FIXED +**Files:** +- `Ability.java` - Added shared static `calculateOffsetPosition()` method +- `AbilityTrap.java` - Removed duplicate, uses `Ability.calculateOffsetPosition()` +- `AbilityHazard.java` - Removed duplicate, uses `Ability.calculateOffsetPosition()` + +--- + +### 16. Unused applyKnockback in AbilityOrb +**Status:** FIXED +**File:** `AbilityOrb.java` + +Removed the unused `applyKnockback()` method. + +--- + +### 17. Duplicate Reset/Interrupt Cleanup +**Status:** NOT FIXED (Low Priority) +**Multiple ability files** + +Most abilities override both `reset()` and `onInterrupt()` with duplicate cleanup code. Pattern should have `onInterrupt()` call `reset()` or use shared cleanup method. + +--- + +## Minor Issues & Inconsistencies + +### 18. Field Naming Confusion +- `AbilityHazard`: `damagePerSecond` with `damageInterval` - name suggests per-second but applied every N ticks +- `AbilityCharge`: `hitWidth` stored as `hitRadius` in older NBT (backward compat exists) + +### 19. AbilityVortex Entity Lookup Performance +**File:** `AbilityVortex.java:201-212` + +Iterates through ALL loaded entities every tick to find pulled entities by UUID. Should cache entity references or use entity IDs. + +### 20. Telegraph Yaw Rotation +**File:** `TelegraphRenderer.java:95` + +Uses `GL11.glRotatef(-instance.getYaw(), 0, 1, 0)` - negative yaw. Should verify this matches Minecraft's yaw conventions. + +### 21. Missing Null Checks +Various locations where `target` could be null but is used without defensive checks: +- `AbilityProjectile.java:73` +- `AbilityOrb.java:138-171` + +--- + +## Missing Features (Enhancement Requests) + +These are not bugs but notable missing functionality: + +1. **No Ability Chaining/Combo System** - No way to trigger abilities from other abilities +2. **No Cooldown Reduction on Hit** - Can't reduce cooldowns based on successful hits +3. **No Multi-Target Hit Limit** - AOE abilities hit unlimited targets (unlike Vortex's `maxTargets`) +4. **No Damage Type Configuration** - All abilities use mob/melee damage, no magic/fire/etc options +5. **No Target Validation During Execution** - If target dies/despawns mid-ability, behavior varies + +--- + +## Priority Summary + +| Priority | Issue | Status | +|----------|-------|--------| +| **CRITICAL** | Cooldown time system mismatch | FIXED | +| **CRITICAL** | AbilityHeal HoT broken | FIXED | +| **CRITICAL** | AbilityGuard counter not integrated | FIXED | +| **HIGH** | knockbackUp ignored | FIXED | +| **HIGH** | Targeting modes unimplemented | FIXED (Removed) | +| **HIGH** | Damage source inconsistency | FIXED | +| **MEDIUM** | Projectile/Orb/Beam no visuals | Not Fixed | +| **MEDIUM** | Hazard/Trap telegraph offset | Not Fixed | +| **LOW** | Charge telegraph timing | Not Fixed | +| **LOW** | Slam activeTicks timing | Not Fixed | +| **LOW** | Code redundancies | FIXED | + +--- + +## Remaining Issues + +The following issues were not addressed in this fix round: + +1. **Projectile/Orb/Beam Visual Rendering** - These abilities still only use particles, no actual entity rendering +2. **Hazard/Trap Telegraph Offset Mismatch** - Telegraph shows at target, effect spawns with offset +3. **Charge Telegraph Direction Timing** - Minor visual mismatch between tick 0-1 +4. **Slam activeTicks Timing** - Fixed at 60 ticks regardless of landing time + +--- + +## Changes Made + +### Ability.java +- Removed `cooldownEndTime` transient field +- Removed `startCooldown()`, `isOnCooldown()`, `canUse()` methods (cooldown managed by DataAbilities) +- Updated `tick()` to not call startCooldown (DataAbilities handles it) +- Updated `reset()` to not reset cooldownEndTime +- Made `findGroundLevel()` public static for shared use +- Added static `calculateOffsetPosition()` utility method +- Fixed `applyNpcKnockback()` to accept and use knockbackUp parameter +- Standardized damage source to `NpcDamageSource("mob", npc)` in both damage methods +- Removed deprecated getters/setters (telegraphColor, castSound, animationId) + +### IAbility.java (API) +- Removed `isOnCooldown()` method from interface + +### DataAbilities.java +- Added AbilityGuard import +- Added guard counter integration in `onDamage()` +- Added `getGuardDamageReduction()` helper method +- Removed deprecated `isMovementBlocked()` method +- Updated knockbackUp javadoc (no longer deprecated) + +### CombatHandler.java +- Renamed `isMovementBlocked()` to `isAbilityControllingMovement()` + +### TargetingMode.java +- Removed unused modes: `RANDOM_ENEMY`, `LOWEST_HP`, `HIGHEST_THREAT` + +### AbilityHeal.java +- Fixed HoT by separating `findAlliesInRadius()` from healing logic +- Allies are now found in `onExecute()` regardless of instantHeal flag +- Added heal particles during HoT ticks + +### AbilityHazard.java +- Removed duplicate `calculateOffsetPosition()`, uses `Ability.calculateOffsetPosition()` +- Removed deprecated `getDamagePerTick()`/`setDamagePerTick()` methods + +### AbilityTrap.java +- Removed duplicate `calculateOffsetPosition()`, uses `Ability.calculateOffsetPosition()` + +### AbilityOrb.java +- Removed unused `applyKnockback()` method + +### TelegraphInstance.java +- Removed duplicate `findGroundLevel()`, uses `Ability.findGroundLevel()` diff --git a/src/api b/src/api index 2e5d86993..b84763a8e 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 2e5d86993cd47e6df4572323514d4fe2166c570c +Subproject commit b84763a8eefdc0be7fb909888ac5ad6d22e3f987 diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java new file mode 100644 index 000000000..49cb4fb6c --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -0,0 +1,347 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.entity.EntityAbilityBeam; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.util.Vec3; +import org.lwjgl.opengl.GL11; + +import java.util.ArrayList; +import java.util.List; + +/** + * Renders the AbilityBeam entity with a head, tail orb, and curving trail. + * The trail shows the path the head has traveled using laser-style rectangular segments. + * + * IMPORTANT: Trail points are stored RELATIVE to the origin position. + * We render by translating to the origin first, then drawing all points relative to that. + * + * Trail segments now share vertices at connection points to prevent gaps during curves. + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilityBeam extends RenderAbilityProjectile { + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilityBeam beam = (EntityAbilityBeam) entity; + + setupRenderState(); + + // Get trail points (these are RELATIVE to origin) + List trail = beam.getTrailPoints(); + if (trail.isEmpty()) { + restoreRenderState(); + return; + } + + // Get interpolated head offset + double headOffsetX = beam.getInterpolatedHeadOffsetX(partialTicks); + double headOffsetY = beam.getInterpolatedHeadOffsetY(partialTicks); + double headOffsetZ = beam.getInterpolatedHeadOffsetZ(partialTicks); + + // The render system passes x,y,z as the position to render the entity at + // Entity position = origin + headOffset (in world coords) + // So origin render position = x,y,z - headOffset + double renderOriginX = x - headOffsetX; + double renderOriginY = y - headOffsetY; + double renderOriginZ = z - headOffsetZ; + + // Get beam properties + float beamWidth = beam.getBeamWidth(); + float headSize = beam.getHeadSize(); + int innerColor = beam.getInnerColor(); + int outerColor = beam.getOuterColor(); + + // Render everything relative to origin position + GL11.glPushMatrix(); + GL11.glTranslated(renderOriginX, renderOriginY, renderOriginZ); + + // Render tail orb at origin (0,0,0) - static, no rotation + renderTailOrb(headSize * 0.8f, innerColor, outerColor); + + // Render trail segments with smooth connections + renderSmoothTrail(trail, beamWidth, innerColor, outerColor); + + // Render head at interpolated offset position + renderHead(beam, headOffsetX, headOffsetY, headOffsetZ, headSize, innerColor, outerColor, partialTicks); + + GL11.glPopMatrix(); + + restoreRenderState(); + } + + /** + * Render the tail orb at the origin (where the beam emanates from). + * This orb does not rotate - it's a stable anchor point. + */ + private void renderTailOrb(float size, int innerColor, int outerColor) { + GL11.glPushMatrix(); + // Already at origin (0,0,0) + + // Render outer glow + GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glScalef(size, size, size); + renderCube(outerColor, 0.4f, 0.5f); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + + // Render inner core (smaller, solid) + GL11.glPushMatrix(); + GL11.glScalef(size * 0.6f, size * 0.6f, size * 0.6f); + renderCube(innerColor, 1.0f, 0.5f); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } + + /** + * Render the beam trail with smooth connections between segments. + * Uses averaged perpendicular vectors at connection points to prevent gaps. + */ + private void renderSmoothTrail(List trail, float width, int innerColor, int outerColor) { + if (trail.size() < 2) return; + + int trailSize = trail.size(); + + // Pre-compute perpendicular frames at each point + // At connection points, average the perpendiculars for smooth transitions + List perpFrames = computePerpendiculars(trail); + + // Render outer glow trail (wider, translucent) + GL11.glDepthMask(false); + renderTrailTube(trail, perpFrames, width * 1.8f, outerColor, 0.3f, true); + GL11.glDepthMask(true); + + // Render inner core trail + renderTrailTube(trail, perpFrames, width * 0.6f, innerColor, 0.9f, false); + } + + /** + * Compute perpendicular frames for each point in the trail. + * At interior points, average the perpendiculars from both directions for smooth curves. + * Returns list of [horzX, horzY, horzZ, vertX, vertY, vertZ] for each point. + */ + private List computePerpendiculars(List trail) { + List frames = new ArrayList<>(); + int size = trail.size(); + + for (int i = 0; i < size; i++) { + double[] frame = new double[6]; + + // Calculate direction at this point + double dx, dy, dz; + if (i == 0) { + // First point - use direction to next + Vec3 p1 = trail.get(0); + Vec3 p2 = trail.get(1); + dx = p2.xCoord - p1.xCoord; + dy = p2.yCoord - p1.yCoord; + dz = p2.zCoord - p1.zCoord; + } else if (i == size - 1) { + // Last point - use direction from previous + Vec3 p1 = trail.get(size - 2); + Vec3 p2 = trail.get(size - 1); + dx = p2.xCoord - p1.xCoord; + dy = p2.yCoord - p1.yCoord; + dz = p2.zCoord - p1.zCoord; + } else { + // Interior point - average directions + Vec3 p0 = trail.get(i - 1); + Vec3 p1 = trail.get(i); + Vec3 p2 = trail.get(i + 1); + double dx1 = p1.xCoord - p0.xCoord; + double dy1 = p1.yCoord - p0.yCoord; + double dz1 = p1.zCoord - p0.zCoord; + double dx2 = p2.xCoord - p1.xCoord; + double dy2 = p2.yCoord - p1.yCoord; + double dz2 = p2.zCoord - p1.zCoord; + // Average the directions + dx = (dx1 + dx2) * 0.5; + dy = (dy1 + dy2) * 0.5; + dz = (dz1 + dz2) * 0.5; + } + + // Normalize direction + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0.001) { + dx /= len; + dy /= len; + dz /= len; + } else { + dx = 0; dy = 0; dz = 1; + } + + // Calculate perpendicular vectors using consistent up reference + double upX = 0, upY = 1, upZ = 0; + if (Math.abs(dy) > 0.9) { + upX = 1; upY = 0; upZ = 0; + } + + // Cross product for horizontal perpendicular + double horzX = dy * upZ - dz * upY; + double horzY = dz * upX - dx * upZ; + double horzZ = dx * upY - dy * upX; + double horzLen = Math.sqrt(horzX * horzX + horzY * horzY + horzZ * horzZ); + if (horzLen > 0) { + horzX /= horzLen; + horzY /= horzLen; + horzZ /= horzLen; + } + + // Cross product for vertical perpendicular + double vertX = dy * horzZ - dz * horzY; + double vertY = dz * horzX - dx * horzZ; + double vertZ = dx * horzY - dy * horzX; + + frame[0] = horzX; frame[1] = horzY; frame[2] = horzZ; + frame[3] = vertX; frame[4] = vertY; frame[5] = vertZ; + frames.add(frame); + } + + return frames; + } + + /** + * Render the trail as a continuous tube using pre-computed perpendicular frames. + */ + private void renderTrailTube(List trail, List perpFrames, + float width, int color, float baseAlpha, boolean fadeFromStart) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + float halfWidth = width * 0.5f; + int size = trail.size(); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + for (int i = 0; i < size - 1; i++) { + Vec3 p1 = trail.get(i); + Vec3 p2 = trail.get(i + 1); + double[] frame1 = perpFrames.get(i); + double[] frame2 = perpFrames.get(i + 1); + + // Calculate alpha based on position (fade from start or constant) + float alpha1, alpha2; + if (fadeFromStart) { + float progress1 = (float) i / size; + float progress2 = (float) (i + 1) / size; + alpha1 = baseAlpha * progress1; + alpha2 = baseAlpha * progress2; + } else { + alpha1 = baseAlpha; + alpha2 = baseAlpha; + } + + // Calculate 4 corners at start + double s1x = p1.xCoord - frame1[0] * halfWidth - frame1[3] * halfWidth; + double s1y = p1.yCoord - frame1[1] * halfWidth - frame1[4] * halfWidth; + double s1z = p1.zCoord - frame1[2] * halfWidth - frame1[5] * halfWidth; + + double s2x = p1.xCoord + frame1[0] * halfWidth - frame1[3] * halfWidth; + double s2y = p1.yCoord + frame1[1] * halfWidth - frame1[4] * halfWidth; + double s2z = p1.zCoord + frame1[2] * halfWidth - frame1[5] * halfWidth; + + double s3x = p1.xCoord + frame1[0] * halfWidth + frame1[3] * halfWidth; + double s3y = p1.yCoord + frame1[1] * halfWidth + frame1[4] * halfWidth; + double s3z = p1.zCoord + frame1[2] * halfWidth + frame1[5] * halfWidth; + + double s4x = p1.xCoord - frame1[0] * halfWidth + frame1[3] * halfWidth; + double s4y = p1.yCoord - frame1[1] * halfWidth + frame1[4] * halfWidth; + double s4z = p1.zCoord - frame1[2] * halfWidth + frame1[5] * halfWidth; + + // Calculate 4 corners at end + double e1x = p2.xCoord - frame2[0] * halfWidth - frame2[3] * halfWidth; + double e1y = p2.yCoord - frame2[1] * halfWidth - frame2[4] * halfWidth; + double e1z = p2.zCoord - frame2[2] * halfWidth - frame2[5] * halfWidth; + + double e2x = p2.xCoord + frame2[0] * halfWidth - frame2[3] * halfWidth; + double e2y = p2.yCoord + frame2[1] * halfWidth - frame2[4] * halfWidth; + double e2z = p2.zCoord + frame2[2] * halfWidth - frame2[5] * halfWidth; + + double e3x = p2.xCoord + frame2[0] * halfWidth + frame2[3] * halfWidth; + double e3y = p2.yCoord + frame2[1] * halfWidth + frame2[4] * halfWidth; + double e3z = p2.zCoord + frame2[2] * halfWidth + frame2[5] * halfWidth; + + double e4x = p2.xCoord - frame2[0] * halfWidth + frame2[3] * halfWidth; + double e4y = p2.yCoord - frame2[1] * halfWidth + frame2[4] * halfWidth; + double e4z = p2.zCoord - frame2[2] * halfWidth + frame2[5] * halfWidth; + + // Bottom face (s1-s2-e2-e1) + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(s2x, s2y, s2z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e1x, e1y, e1z); + + // Top face (s4-e4-e3-s3) + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s4x, s4y, s4z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(e3x, e3y, e3z); + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s3x, s3y, s3z); + + // Left face (s1-e1-e4-s4) + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s1x, s1y, s1z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e4x, e4y, e4z); + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s4x, s4y, s4z); + + // Right face (s2-s3-e3-e2) + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(s3x, s3y, s3z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e2x, e2y, e2z); + } + + tess.draw(); + } + + /** + * Render the beam head as a glowing cube. + * Coordinates are relative to origin. + */ + private void renderHead(EntityAbilityBeam beam, double x, double y, double z, + float size, int innerColor, int outerColor, float partialTicks) { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + // Pulsing effect + float pulseTime = beam.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.2f) * 0.1f; + float scale = size * (1.0f + scaleModifier); + + // Rotation + GL11.glRotatef(beam.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); + GL11.glRotatef(beam.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); + GL11.glRotatef(beam.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Render outer glow + GL11.glDepthMask(false); + renderCube(outerColor, 0.5f, 0.5f); + GL11.glDepthMask(true); + + // Render inner core + float innerScale = 0.6f; + GL11.glScalef(innerScale, innerScale, innerScale); + renderCube(innerColor, 1.0f, 0.5f); + + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java new file mode 100644 index 000000000..93049fad5 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java @@ -0,0 +1,136 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.entity.EntityAbilityDisc; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; + +/** + * Renders the AbilityDisc entity as a flat spinning square. + * Rotates only on Y axis (flat spin like a saw blade). + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilityDisc extends RenderAbilityProjectile { + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilityDisc disc = (EntityAbilityDisc) entity; + + setupRenderState(); + + GL11.glTranslated(x, y, z); + + // Get interpolated values + float size = disc.getInterpolatedSize(partialTicks); + float radius = disc.getDiscRadius() * size; + float thickness = disc.getDiscThickness() * size; + + // Subtle pulsing effect + float pulseTime = entity.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.1f) * 0.03f; + float scale = 1.0f + scaleModifier; + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Apply ONLY Y-axis rotation for flat spin + GL11.glRotatef(disc.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); + + // Render outer square (translucent) + GL11.glDepthMask(false); + renderFlatSquare(disc.getOuterColor(), 0.5f, radius, thickness); + GL11.glDepthMask(true); + + // Render inner square (solid, smaller) + float innerScale = 0.6f; + renderFlatSquare(disc.getInnerColor(), 1.0f, radius * innerScale, thickness * 1.2f); + + GL11.glPopMatrix(); + + restoreRenderState(); + } + + /** + * Render a flat square (thin cube) centered at origin. + * The square lies flat on the XZ plane with thin Y height. + */ + private void renderFlatSquare(int color, float alpha, float halfSize, float thickness) { + float halfThick = thickness * 0.5f; + + // Render as a thin cube + renderCubeCustom(color, alpha, halfSize, halfThick, halfSize); + } + + /** + * Render a cube with custom dimensions. + */ + private void renderCubeCustom(int color, float alpha, float halfX, float halfY, float halfZ) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + + net.minecraft.client.renderer.Tessellator tess = net.minecraft.client.renderer.Tessellator.instance; + + // Top face (y+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 1, 0); + tess.addVertex(-halfX, halfY, halfZ); + tess.addVertex(halfX, halfY, halfZ); + tess.addVertex(halfX, halfY, -halfZ); + tess.addVertex(-halfX, halfY, -halfZ); + tess.draw(); + + // Bottom face (y-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, -1, 0); + tess.addVertex(-halfX, -halfY, -halfZ); + tess.addVertex(halfX, -halfY, -halfZ); + tess.addVertex(halfX, -halfY, halfZ); + tess.addVertex(-halfX, -halfY, halfZ); + tess.draw(); + + // Front face (z+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 0, 1); + tess.addVertex(-halfX, -halfY, halfZ); + tess.addVertex(halfX, -halfY, halfZ); + tess.addVertex(halfX, halfY, halfZ); + tess.addVertex(-halfX, halfY, halfZ); + tess.draw(); + + // Back face (z-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 0, -1); + tess.addVertex(halfX, -halfY, -halfZ); + tess.addVertex(-halfX, -halfY, -halfZ); + tess.addVertex(-halfX, halfY, -halfZ); + tess.addVertex(halfX, halfY, -halfZ); + tess.draw(); + + // Right face (x+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(1, 0, 0); + tess.addVertex(halfX, -halfY, halfZ); + tess.addVertex(halfX, -halfY, -halfZ); + tess.addVertex(halfX, halfY, -halfZ); + tess.addVertex(halfX, halfY, halfZ); + tess.draw(); + + // Left face (x-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(-1, 0, 0); + tess.addVertex(-halfX, -halfY, -halfZ); + tess.addVertex(-halfX, -halfY, halfZ); + tess.addVertex(-halfX, halfY, halfZ); + tess.addVertex(-halfX, halfY, -halfZ); + tess.draw(); + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java new file mode 100644 index 000000000..0c1d4a1e8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java @@ -0,0 +1,200 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.entity.EntityAbilityLaser; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; + +/** + * Renders the AbilityLaser entity as a rectangular beam with clear inner/outer colors. + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilityLaser extends RenderAbilityProjectile { + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilityLaser laser = (EntityAbilityLaser) entity; + + // Don't render if length is 0 + if (laser.getCurrentLength() <= 0) return; + + setupRenderState(); + + // Get laser parameters + double startX = laser.getStartX(); + double startY = laser.getStartY(); + double startZ = laser.getStartZ(); + double endX = laser.getEndX(); + double endY = laser.getEndY(); + double endZ = laser.getEndZ(); + float width = laser.getLaserWidth(); + float alpha = laser.getLingerAlpha(); + + // Calculate render offset (entity position is used as reference) + double offsetX = x - laser.posX; + double offsetY = y - laser.posY; + double offsetZ = z - laser.posZ; + + // Render start relative to camera + double renderStartX = startX + offsetX; + double renderStartY = startY + offsetY; + double renderStartZ = startZ + offsetZ; + double renderEndX = endX + offsetX; + double renderEndY = endY + offsetY; + double renderEndZ = endZ + offsetZ; + + // Calculate perpendicular vectors for the beam rectangle + double dx = renderEndX - renderStartX; + double dy = renderEndY - renderStartY; + double dz = renderEndZ - renderStartZ; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len < 0.001) { + restoreRenderState(); + return; + } + + // Normalize direction + dx /= len; + dy /= len; + dz /= len; + + // Calculate perpendicular vectors (one horizontal, one vertical relative to beam) + double upX = 0, upY = 1, upZ = 0; + if (Math.abs(dy) > 0.9) { + upX = 1; upY = 0; upZ = 0; + } + + // Cross product for horizontal perpendicular + double horzX = dy * upZ - dz * upY; + double horzY = dz * upX - dx * upZ; + double horzZ = dx * upY - dy * upX; + double horzLen = Math.sqrt(horzX * horzX + horzY * horzY + horzZ * horzZ); + if (horzLen > 0) { + horzX /= horzLen; + horzY /= horzLen; + horzZ /= horzLen; + } + + // Cross product for vertical perpendicular + double vertX = dy * horzZ - dz * horzY; + double vertY = dz * horzX - dx * horzZ; + double vertZ = dx * horzY - dy * horzX; + + // Render outer rectangle (larger, outer color, translucent) + GL11.glDepthMask(false); + renderBeamRectangle(renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + width * 1.8f, laser.getOuterColor(), alpha * 0.4f); + + // Render middle layer + renderBeamRectangle(renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + width * 1.3f, laser.getOuterColor(), alpha * 0.7f); + GL11.glDepthMask(true); + + // Render inner core (smaller, inner color, solid) + renderBeamRectangle(renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + width * 0.6f, laser.getInnerColor(), alpha); + + restoreRenderState(); + } + + /** + * Render a beam as a 3D rectangular prism (box along a line). + */ + private void renderBeamRectangle(double x1, double y1, double z1, + double x2, double y2, double z2, + double horzX, double horzY, double horzZ, + double vertX, double vertY, double vertZ, + float width, int color, float alpha) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + + float halfWidth = width * 0.5f; + + // Calculate 8 corners of the box + // Start corners + double s1x = x1 - horzX * halfWidth - vertX * halfWidth; + double s1y = y1 - horzY * halfWidth - vertY * halfWidth; + double s1z = z1 - horzZ * halfWidth - vertZ * halfWidth; + + double s2x = x1 + horzX * halfWidth - vertX * halfWidth; + double s2y = y1 + horzY * halfWidth - vertY * halfWidth; + double s2z = z1 + horzZ * halfWidth - vertZ * halfWidth; + + double s3x = x1 + horzX * halfWidth + vertX * halfWidth; + double s3y = y1 + horzY * halfWidth + vertY * halfWidth; + double s3z = z1 + horzZ * halfWidth + vertZ * halfWidth; + + double s4x = x1 - horzX * halfWidth + vertX * halfWidth; + double s4y = y1 - horzY * halfWidth + vertY * halfWidth; + double s4z = z1 - horzZ * halfWidth + vertZ * halfWidth; + + // End corners + double e1x = x2 - horzX * halfWidth - vertX * halfWidth; + double e1y = y2 - horzY * halfWidth - vertY * halfWidth; + double e1z = z2 - horzZ * halfWidth - vertZ * halfWidth; + + double e2x = x2 + horzX * halfWidth - vertX * halfWidth; + double e2y = y2 + horzY * halfWidth - vertY * halfWidth; + double e2z = z2 + horzZ * halfWidth - vertZ * halfWidth; + + double e3x = x2 + horzX * halfWidth + vertX * halfWidth; + double e3y = y2 + horzY * halfWidth + vertY * halfWidth; + double e3z = z2 + horzZ * halfWidth + vertZ * halfWidth; + + double e4x = x2 - horzX * halfWidth + vertX * halfWidth; + double e4y = y2 - horzY * halfWidth + vertY * halfWidth; + double e4z = z2 - horzZ * halfWidth + vertZ * halfWidth; + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + + // Bottom face + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e1x, e1y, e1z); + + // Top face + tess.addVertex(s4x, s4y, s4z); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(s3x, s3y, s3z); + + // Left face + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(s4x, s4y, s4z); + + // Right face + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(s3x, s3y, s3z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e2x, e2y, e2z); + + // Start cap + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(s4x, s4y, s4z); + tess.addVertex(s3x, s3y, s3z); + tess.addVertex(s2x, s2y, s2z); + + // End cap + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e4x, e4y, e4z); + + tess.draw(); + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java new file mode 100644 index 000000000..3a09e7b6a --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java @@ -0,0 +1,105 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.client.renderer.quadric.SphereRenderer; +import kamkeel.npcs.entity.EntityAbilityOrb; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +/** + * Renders the AbilityOrb entity as a glowing sphere with inner and outer layers. + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilityOrb extends Render { + + // White texture for solid color rendering + private static final ResourceLocation WHITE_TEXTURE = new ResourceLocation("customnpcs", "textures/entity/white.png"); + + // Static sphere renderer - shared across all orb renders + private static final SphereRenderer sphere = new SphereRenderer(0.5f, 16); + + public RenderAbilityOrb() { + this.shadowSize = 0.0f; + } + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilityOrb orb = (EntityAbilityOrb) entity; + + GL11.glPushMatrix(); + + // Disable culling, enable rescale normal + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + // Enable blending for transparency + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); + + // Disable lighting for self-illumination + GL11.glDisable(GL11.GL_LIGHTING); + + // Translate to render position + GL11.glTranslated(x, y, z); + + // Bind texture + this.bindTexture(WHITE_TEXTURE); + + // Get interpolated size for smooth rendering + float size = orb.getInterpolatedSize(partialTicks); + + // Pulsing scale effect + float pulseTime = entity.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.15f) * 0.05f; + float scale = size * (1.0f + scaleModifier); + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Use entity's interpolated rotation for smooth spinning + GL11.glRotatef(orb.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); + GL11.glRotatef(orb.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); + GL11.glRotatef(orb.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); + + // Render outer sphere (translucent) + GL11.glDepthMask(false); + this.bindTexture(WHITE_TEXTURE); + renderSphere(orb.getOuterColor(), 0.6f); + GL11.glDepthMask(true); + + // Render inner sphere (more opaque) + float innerScale = 0.75f; + GL11.glPushMatrix(); + GL11.glScalef(innerScale, innerScale, innerScale); + this.bindTexture(WHITE_TEXTURE); + renderSphere(orb.getInnerColor(), 1.0f); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + + // Restore GL state + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + private void renderSphere(int color, float alpha) { + // Set sphere properties and render (rotation already applied to matrix) + sphere.setScale(1.0f); + sphere.setAlpha(alpha); + sphere.setColor(color); + sphere.render(0); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return WHITE_TEXTURE; + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java new file mode 100644 index 000000000..29656e597 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java @@ -0,0 +1,56 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.entity.EntityAbilityOrb; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; + +/** + * Renders the AbilityOrb entity as a cube with inner and outer layers. + * Minecraft-style blocky appearance using Tessellator. + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilityOrbCube extends RenderAbilityProjectile { + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilityOrb orb = (EntityAbilityOrb) entity; + + setupRenderState(); + + GL11.glTranslated(x, y, z); + + // Get interpolated size for smooth rendering + float size = orb.getInterpolatedSize(partialTicks); + + // Pulsing scale effect + float pulseTime = entity.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.15f) * 0.05f; + float scale = size * (1.0f + scaleModifier); + + // Use entity's interpolated rotation for smooth spinning + GL11.glRotatef(orb.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); + GL11.glRotatef(orb.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); + GL11.glRotatef(orb.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Render outer cube (translucent) + GL11.glDepthMask(false); + renderCube(orb.getOuterColor(), 0.5f, 0.5f); + GL11.glDepthMask(true); + + // Render inner cube (solid, smaller) + float innerScale = 0.6f; + GL11.glScalef(innerScale, innerScale, innerScale); + renderCube(orb.getInnerColor(), 1.0f, 0.5f); + + GL11.glPopMatrix(); + + restoreRenderState(); + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java new file mode 100644 index 000000000..4180783bf --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java @@ -0,0 +1,255 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +/** + * Base renderer for ability projectiles. + * Provides common GL state setup and rendering utilities. + * + * Design inspired by LouisXIV's energy rendering system. + */ +@SideOnly(Side.CLIENT) +public abstract class RenderAbilityProjectile extends Render { + + protected static final ResourceLocation WHITE_TEXTURE = new ResourceLocation("customnpcs", "textures/entity/white.png"); + + public RenderAbilityProjectile() { + this.shadowSize = 0.0f; + } + + /** + * Setup GL state for translucent, self-illuminated rendering. + */ + protected void setupRenderState() { + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + } + + /** + * Restore GL state after rendering. + */ + protected void restoreRenderState() { + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + } + + /** + * Extract RGB components from color int. + */ + protected float[] extractRGB(int color) { + float r = ((color >> 16) & 0xFF) / 255.0f; + float g = ((color >> 8) & 0xFF) / 255.0f; + float b = (color & 0xFF) / 255.0f; + return new float[]{r, g, b}; + } + + /** + * Render a cube centered at origin with given color and alpha. + */ + protected void renderCube(int color, float alpha, float halfSize) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + + Tessellator tess = Tessellator.instance; + + // Front face (z+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 0, 1); + tess.addVertex(-halfSize, -halfSize, halfSize); + tess.addVertex(halfSize, -halfSize, halfSize); + tess.addVertex(halfSize, halfSize, halfSize); + tess.addVertex(-halfSize, halfSize, halfSize); + tess.draw(); + + // Back face (z-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 0, -1); + tess.addVertex(halfSize, -halfSize, -halfSize); + tess.addVertex(-halfSize, -halfSize, -halfSize); + tess.addVertex(-halfSize, halfSize, -halfSize); + tess.addVertex(halfSize, halfSize, -halfSize); + tess.draw(); + + // Top face (y+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 1, 0); + tess.addVertex(-halfSize, halfSize, halfSize); + tess.addVertex(halfSize, halfSize, halfSize); + tess.addVertex(halfSize, halfSize, -halfSize); + tess.addVertex(-halfSize, halfSize, -halfSize); + tess.draw(); + + // Bottom face (y-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, -1, 0); + tess.addVertex(-halfSize, -halfSize, -halfSize); + tess.addVertex(halfSize, -halfSize, -halfSize); + tess.addVertex(halfSize, -halfSize, halfSize); + tess.addVertex(-halfSize, -halfSize, halfSize); + tess.draw(); + + // Right face (x+) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(1, 0, 0); + tess.addVertex(halfSize, -halfSize, halfSize); + tess.addVertex(halfSize, -halfSize, -halfSize); + tess.addVertex(halfSize, halfSize, -halfSize); + tess.addVertex(halfSize, halfSize, halfSize); + tess.draw(); + + // Left face (x-) + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(-1, 0, 0); + tess.addVertex(-halfSize, -halfSize, -halfSize); + tess.addVertex(-halfSize, -halfSize, halfSize); + tess.addVertex(-halfSize, halfSize, halfSize); + tess.addVertex(-halfSize, halfSize, -halfSize); + tess.draw(); + } + + /** + * Render a flat disc (cylinder with very small height) centered at origin. + * The disc lies flat on the XZ plane. + */ + protected void renderDisc(int color, float alpha, float radius, float thickness, int segments) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + + Tessellator tess = Tessellator.instance; + float halfThick = thickness * 0.5f; + + // Top face + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, 1, 0); + for (int i = 0; i < segments; i++) { + float angle1 = (float) (2 * Math.PI * i / segments); + float angle2 = (float) (2 * Math.PI * (i + 1) / segments); + float x1 = (float) Math.cos(angle1) * radius; + float z1 = (float) Math.sin(angle1) * radius; + float x2 = (float) Math.cos(angle2) * radius; + float z2 = (float) Math.sin(angle2) * radius; + + tess.addVertex(0, halfThick, 0); + tess.addVertex(x1, halfThick, z1); + tess.addVertex(x2, halfThick, z2); + tess.addVertex(0, halfThick, 0); + } + tess.draw(); + + // Bottom face + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.setNormal(0, -1, 0); + for (int i = 0; i < segments; i++) { + float angle1 = (float) (2 * Math.PI * i / segments); + float angle2 = (float) (2 * Math.PI * (i + 1) / segments); + float x1 = (float) Math.cos(angle1) * radius; + float z1 = (float) Math.sin(angle1) * radius; + float x2 = (float) Math.cos(angle2) * radius; + float z2 = (float) Math.sin(angle2) * radius; + + tess.addVertex(0, -halfThick, 0); + tess.addVertex(x2, -halfThick, z2); + tess.addVertex(x1, -halfThick, z1); + tess.addVertex(0, -halfThick, 0); + } + tess.draw(); + + // Edge + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + for (int i = 0; i < segments; i++) { + float angle1 = (float) (2 * Math.PI * i / segments); + float angle2 = (float) (2 * Math.PI * (i + 1) / segments); + float x1 = (float) Math.cos(angle1) * radius; + float z1 = (float) Math.sin(angle1) * radius; + float x2 = (float) Math.cos(angle2) * radius; + float z2 = (float) Math.sin(angle2) * radius; + + // Normal pointing outward + float nx = (float) Math.cos((angle1 + angle2) * 0.5); + float nz = (float) Math.sin((angle1 + angle2) * 0.5); + tess.setNormal(nx, 0, nz); + + tess.addVertex(x1, -halfThick, z1); + tess.addVertex(x2, -halfThick, z2); + tess.addVertex(x2, halfThick, z2); + tess.addVertex(x1, halfThick, z1); + } + tess.draw(); + } + + /** + * Render a line segment as a quad billboard facing the camera. + */ + protected void renderLineSegment(double x1, double y1, double z1, + double x2, double y2, double z2, + float width, int color, float alpha) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + + // Calculate direction + double dx = x2 - x1; + double dy = y2 - y1; + double dz = z2 - z1; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len < 0.001) return; + + // Perpendicular vectors for billboard + double perpX, perpY, perpZ; + if (Math.abs(dy) < 0.9) { + // Cross with up vector + perpX = -dz; + perpY = 0; + perpZ = dx; + } else { + // Cross with right vector + perpX = 0; + perpY = dz; + perpZ = -dy; + } + double perpLen = Math.sqrt(perpX * perpX + perpY * perpY + perpZ * perpZ); + if (perpLen > 0) { + perpX = perpX / perpLen * width * 0.5; + perpY = perpY / perpLen * width * 0.5; + perpZ = perpZ / perpLen * width * 0.5; + } + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, alpha); + tess.addVertex(x1 - perpX, y1 - perpY, z1 - perpZ); + tess.addVertex(x2 - perpX, y2 - perpY, z2 - perpZ); + tess.addVertex(x2 + perpX, y2 + perpY, z2 + perpZ); + tess.addVertex(x1 + perpX, y1 + perpY, z1 + perpZ); + tess.draw(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return WHITE_TEXTURE; + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java new file mode 100644 index 000000000..735c1e183 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java @@ -0,0 +1,210 @@ +package kamkeel.npcs.client.renderer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.entity.EntityAbilitySweeper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +/** + * Renders the Sweeper beam as a thin rotating laser attached to the NPC. + * Uses similar rendering style to the Beam trail for visual consistency. + */ +@SideOnly(Side.CLIENT) +public class RenderAbilitySweeper extends Render { + + @Override + public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { + EntityAbilitySweeper sweeper = (EntityAbilitySweeper) entity; + + setupRenderState(); + + float beamLength = sweeper.getBeamLength(); + float beamWidth = sweeper.getBeamWidth(); + int innerColor = sweeper.getInnerColor(); + int outerColor = sweeper.getOuterColor(); + float angle = sweeper.getInterpolatedAngle(partialTicks); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + // Rotate the beam around Y axis (angle already includes baseYaw) + GL11.glRotatef(-angle, 0, 1, 0); // Negative for correct direction + + // Render the beam extending in the +Z direction (like beam trail segments) + renderBeam(beamLength, beamWidth, innerColor, outerColor); + + GL11.glPopMatrix(); + + restoreRenderState(); + } + + private void setupRenderState() { + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + } + + private void restoreRenderState() { + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glPopAttrib(); + } + + /** + * Render beam using the same style as the Beam entity trail. + * Three layers: outer glow, middle, inner core. + */ + private void renderBeam(float length, float width, int innerColor, int outerColor) { + // Extract colors + float outerR = ((outerColor >> 16) & 0xFF) / 255.0f; + float outerG = ((outerColor >> 8) & 0xFF) / 255.0f; + float outerB = (outerColor & 0xFF) / 255.0f; + + float innerR = ((innerColor >> 16) & 0xFF) / 255.0f; + float innerG = ((innerColor >> 8) & 0xFF) / 255.0f; + float innerB = (innerColor & 0xFF) / 255.0f; + + // Render from origin (0,0,0) to (0,0,length) in local coords + // After rotation this extends in the correct world direction + + // Outer glow (wider, translucent) - like beam trail + GL11.glDepthMask(false); + renderBeamSegment(0, 0, 0, 0, 0, length, width * 1.8f, outerR, outerG, outerB, 0.3f); + GL11.glDepthMask(true); + + // Middle layer + renderBeamSegment(0, 0, 0, 0, 0, length, width * 1.3f, outerR, outerG, outerB, 0.6f); + + // Inner core (solid) - like beam trail inner + renderBeamSegment(0, 0, 0, 0, 0, length, width * 0.6f, innerR, innerG, innerB, 1.0f); + } + + /** + * Render a beam segment as a 3D rectangular prism. + * Uses the same approach as RenderAbilityBeam.renderBeamRectangle. + */ + private void renderBeamSegment(double x1, double y1, double z1, + double x2, double y2, double z2, + float width, float r, float g, float b, float a) { + // Calculate direction + double dx = x2 - x1; + double dy = y2 - y1; + double dz = z2 - z1; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len < 0.001) return; + + // Normalize direction + dx /= len; + dy /= len; + dz /= len; + + // Calculate perpendicular vectors + double upX = 0, upY = 1, upZ = 0; + if (Math.abs(dy) > 0.9) { + upX = 1; upY = 0; upZ = 0; + } + + // Cross product for horizontal perpendicular + double horzX = dy * upZ - dz * upY; + double horzY = dz * upX - dx * upZ; + double horzZ = dx * upY - dy * upX; + double horzLen = Math.sqrt(horzX * horzX + horzY * horzY + horzZ * horzZ); + if (horzLen > 0) { + horzX /= horzLen; + horzY /= horzLen; + horzZ /= horzLen; + } + + // Cross product for vertical perpendicular + double vertX = dy * horzZ - dz * horzY; + double vertY = dz * horzX - dx * horzZ; + double vertZ = dx * horzY - dy * horzX; + + float halfWidth = width * 0.5f; + + // Calculate 8 corners of the box + double s1x = x1 - horzX * halfWidth - vertX * halfWidth; + double s1y = y1 - horzY * halfWidth - vertY * halfWidth; + double s1z = z1 - horzZ * halfWidth - vertZ * halfWidth; + + double s2x = x1 + horzX * halfWidth - vertX * halfWidth; + double s2y = y1 + horzY * halfWidth - vertY * halfWidth; + double s2z = z1 + horzZ * halfWidth - vertZ * halfWidth; + + double s3x = x1 + horzX * halfWidth + vertX * halfWidth; + double s3y = y1 + horzY * halfWidth + vertY * halfWidth; + double s3z = z1 + horzZ * halfWidth + vertZ * halfWidth; + + double s4x = x1 - horzX * halfWidth + vertX * halfWidth; + double s4y = y1 - horzY * halfWidth + vertY * halfWidth; + double s4z = z1 - horzZ * halfWidth + vertZ * halfWidth; + + double e1x = x2 - horzX * halfWidth - vertX * halfWidth; + double e1y = y2 - horzY * halfWidth - vertY * halfWidth; + double e1z = z2 - horzZ * halfWidth - vertZ * halfWidth; + + double e2x = x2 + horzX * halfWidth - vertX * halfWidth; + double e2y = y2 + horzY * halfWidth - vertY * halfWidth; + double e2z = z2 + horzZ * halfWidth - vertZ * halfWidth; + + double e3x = x2 + horzX * halfWidth + vertX * halfWidth; + double e3y = y2 + horzY * halfWidth + vertY * halfWidth; + double e3z = z2 + horzZ * halfWidth + vertZ * halfWidth; + + double e4x = x2 - horzX * halfWidth + vertX * halfWidth; + double e4y = y2 - horzY * halfWidth + vertY * halfWidth; + double e4z = z2 - horzZ * halfWidth + vertZ * halfWidth; + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + tess.setColorRGBA_F(r, g, b, a); + + // Bottom face + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e1x, e1y, e1z); + + // Top face + tess.addVertex(s4x, s4y, s4z); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(s3x, s3y, s3z); + + // Left face + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(s4x, s4y, s4z); + + // Right face + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(s3x, s3y, s3z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e2x, e2y, e2z); + + // End cap (tip of beam) + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e4x, e4y, e4z); + + tess.draw(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return null; + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java new file mode 100644 index 000000000..13c994adc --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java @@ -0,0 +1,138 @@ +package kamkeel.npcs.client.renderer.quadric; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.GLAllocation; +import org.lwjgl.opengl.GL11; + +/** + * Base class for rendering GLU quadric shapes (spheres, cylinders, etc.) + * Uses display lists for efficient rendering. + * + * Design inspired by LouisXIV's quadric rendering system. + */ +@SideOnly(Side.CLIENT) +public abstract class QuadricRenderer { + protected int displayList; + private boolean compiled; + + public final float radius; + public final int slices; + public final int stacks; + + // Current render state + protected float scaleX = 1.0f; + protected float scaleY = 1.0f; + protected float scaleZ = 1.0f; + + protected float rotationX = 0.0f; + protected float rotationY = 0.0f; + protected float rotationZ = 0.0f; + + protected int color = 0xFFFFFF; + protected float alpha = 1.0f; + + public QuadricRenderer(float radius, int slices, int stacks) { + this.radius = radius; + this.slices = slices; + this.stacks = stacks; + } + + public QuadricRenderer(float radius, int resolution) { + this(radius, resolution, resolution); + } + + public QuadricRenderer() { + this(0.5f, 16); + } + + /** + * Render the quadric shape with current transform and color settings. + */ + public void render(float partialTicks) { + if (!compiled) { + displayList = GLAllocation.generateDisplayLists(1); + GL11.glNewList(displayList, GL11.GL_COMPILE); + compile(); + GL11.glEndList(); + compiled = true; + } + + GL11.glPushMatrix(); + + // Apply scale + GL11.glScalef(scaleX, scaleY, scaleZ); + + // Apply rotation + GL11.glRotatef(rotationX, 1.0f, 0.0f, 0.0f); + GL11.glRotatef(rotationY, 0.0f, 1.0f, 0.0f); + GL11.glRotatef(rotationZ, 0.0f, 0.0f, 1.0f); + + // Apply color + float r = ((color >> 16) & 0xFF) / 255.0f; + float g = ((color >> 8) & 0xFF) / 255.0f; + float b = (color & 0xFF) / 255.0f; + GL11.glColor4f(r, g, b, alpha); + + GL11.glCallList(displayList); + + GL11.glPopMatrix(); + } + + /** + * Compile the quadric geometry into the display list. + * Called once, then cached. + */ + protected abstract void compile(); + + // Setters for render state + public void setScale(float scale) { + this.scaleX = this.scaleY = this.scaleZ = scale; + } + + public void setScale(float x, float y, float z) { + this.scaleX = x; + this.scaleY = y; + this.scaleZ = z; + } + + public void setRotation(float x, float y, float z) { + this.rotationX = x; + this.rotationY = y; + this.rotationZ = z; + } + + public void setColor(int color) { + this.color = color; + } + + public void setAlpha(float alpha) { + this.alpha = alpha; + } + + /** + * Linear interpolation helper. + */ + public static float lerp(float current, float target, float factor) { + return current + (target - current) * factor; + } + + /** + * Color interpolation helper. + */ + public static int lerpColor(int from, int to, float factor) { + int r1 = (from >> 16) & 0xFF; + int g1 = (from >> 8) & 0xFF; + int b1 = from & 0xFF; + + int r2 = (to >> 16) & 0xFF; + int g2 = (to >> 8) & 0xFF; + int b2 = to & 0xFF; + + int r = (int) (r1 + (r2 - r1) * factor); + int g = (int) (g1 + (g2 - g1) * factor); + int b = (int) (b1 + (b2 - b1) * factor); + + return (r << 16) | (g << 8) | b; + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java new file mode 100644 index 000000000..dc72779a8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java @@ -0,0 +1,37 @@ +package kamkeel.npcs.client.renderer.quadric; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import org.lwjgl.util.glu.GLU; +import org.lwjgl.util.glu.Sphere; + +/** + * Renders a sphere using GLU quadrics. + * + * Design inspired by LouisXIV's quadric rendering system. + */ +@SideOnly(Side.CLIENT) +public class SphereRenderer extends QuadricRenderer { + + public SphereRenderer(float radius, int slices, int stacks) { + super(radius, slices, stacks); + } + + public SphereRenderer(float radius, int resolution) { + super(radius, resolution); + } + + public SphereRenderer() { + super(); + } + + @Override + protected void compile() { + Sphere sphere = new Sphere(); + sphere.setTextureFlag(true); // Enable texture coordinates + sphere.setDrawStyle(GLU.GLU_FILL); + sphere.setNormals(GLU.GLU_NONE); // No normals for self-illuminated rendering + sphere.setOrientation(GLU.GLU_OUTSIDE); + sphere.draw(radius, slices, stacks); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 65a4e8ac5..18406c313 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -80,7 +80,6 @@ public abstract class Ability implements IAbility { protected transient AbilityPhase phase = AbilityPhase.IDLE; protected transient int currentTick = 0; - protected transient long cooldownEndTime = 0; protected transient EntityLivingBase currentTarget; protected transient long executionStartTime; protected transient TelegraphInstance telegraphInstance; @@ -138,7 +137,15 @@ public abstract class Ability implements IAbility { } /** - * Backward-compatible signature (vertical knockback is ignored). + * Apply damage to an entity with ability hit event support and vertical knockback. + * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. + * + * @param npc The NPC executing the ability + * @param hitEntity The entity being hit + * @param damage The damage amount + * @param knockback The horizontal knockback + * @param knockbackUp The vertical knockback + * @return true if damage was applied (not cancelled), false if cancelled */ protected boolean applyAbilityDamage(EntityNPCInterface npc, EntityLivingBase hitEntity, float damage, float knockback, float knockbackUp) { @@ -153,6 +160,7 @@ public abstract class Ability implements IAbility { // Apply damage with potentially modified values float finalDamage = event.getDamage(); float finalKnockback = event.getKnockback(); + float finalKnockbackUp = event.getKnockbackUp(); // Apply damage if (finalDamage > 0) { @@ -160,10 +168,10 @@ public abstract class Ability implements IAbility { } // Apply knockback if any - if (finalKnockback > 0) { + if (finalKnockback > 0 || finalKnockbackUp > 0) { double dx = hitEntity.posX - npc.posX; double dz = hitEntity.posZ - npc.posZ; - applyNpcKnockback(hitEntity, dx, dz, finalKnockback); + applyNpcKnockback(hitEntity, dx, dz, finalKnockback, finalKnockbackUp); } return true; @@ -195,28 +203,31 @@ public abstract class Ability implements IAbility { // Apply damage with potentially modified values float finalDamage = event.getDamage(); float finalKnockback = event.getKnockback(); + float finalKnockbackUp = event.getKnockbackUp(); - // Apply damage + // Apply damage - use NpcDamageSource for consistency if (finalDamage > 0) { - hitEntity.attackEntityFrom(DamageSource.causeMobDamage(npc), finalDamage); + hitEntity.attackEntityFrom(new NpcDamageSource("mob", npc), finalDamage); } // Apply knockback in specified direction - if (finalKnockback > 0) { - applyNpcKnockback(hitEntity, knockbackDirX, knockbackDirZ, finalKnockback); + if (finalKnockback > 0 || finalKnockbackUp > 0) { + applyNpcKnockback(hitEntity, knockbackDirX, knockbackDirZ, finalKnockback, finalKnockbackUp); } return true; } - private void applyNpcKnockback(EntityLivingBase hitEntity, double dirX, double dirZ, float knockback) { + private void applyNpcKnockback(EntityLivingBase hitEntity, double dirX, double dirZ, float knockback, float knockbackUp) { double len = Math.sqrt(dirX * dirX + dirZ * dirZ); - if (len <= 0) { - return; + double x = 0; + double z = 0; + if (len > 0) { + x = (dirX / len) * knockback * 0.5; + z = (dirZ / len) * knockback * 0.5; } - double x = (dirX / len) * knockback * 0.5; - double z = (dirZ / len) * knockback * 0.5; - hitEntity.addVelocity(x, 0.1D, z); + double y = knockbackUp > 0 ? knockbackUp : 0.1D; + hitEntity.addVelocity(x, y, z); hitEntity.velocityChanged = true; } @@ -390,7 +401,7 @@ public abstract class Ability implements IAbility { * @param z Z coordinate * @return The Y coordinate of the ground surface */ - protected double findGroundLevel(World world, double x, double startY, double z) { + public static double findGroundLevel(World world, double x, double startY, double z) { if (world == null) return startY; int blockX = (int) Math.floor(x); @@ -410,6 +421,43 @@ public abstract class Ability implements IAbility { return startY; } + /** + * Calculates offset position near the given coordinates. + * Used to place effects near a target rather than exactly on them. + * + * @param baseX Base X coordinate + * @param baseY Base Y coordinate + * @param baseZ Base Z coordinate + * @param minOffset Minimum offset distance + * @param maxOffset Maximum offset distance + * @param randomOffset Whether to use random offset within range, or fixed at max + * @param random Random instance to use + * @return Array of [x, y, z] with offset applied + */ + public static double[] calculateOffsetPosition(double baseX, double baseY, double baseZ, + float minOffset, float maxOffset, + boolean randomOffset, java.util.Random random) { + if (maxOffset <= 0) { + return new double[]{baseX, baseY, baseZ}; + } + + double offsetDist; + double offsetAngle; + + if (randomOffset) { + offsetDist = minOffset + random.nextDouble() * (maxOffset - minOffset); + offsetAngle = random.nextDouble() * Math.PI * 2; + } else { + offsetDist = maxOffset; + offsetAngle = random.nextDouble() * Math.PI * 2; + } + + double offsetX = Math.cos(offsetAngle) * offsetDist; + double offsetZ = Math.sin(offsetAngle) * offsetDist; + + return new double[]{baseX + offsetX, baseY, baseZ + offsetZ}; + } + /** * Get the current telegraph instance. */ @@ -440,12 +488,12 @@ public abstract class Ability implements IAbility { /** * Tick the ability. Returns true if phase changed. + * Note: Cooldown is managed by DataAbilities when the ability completes. */ public boolean tick() { if (phase == AbilityPhase.IDLE) return false; currentTick++; - AbilityPhase oldPhase = phase; switch (phase) { case WINDUP: @@ -465,7 +513,7 @@ public abstract class Ability implements IAbility { case RECOVERY: if (currentTick >= recoveryTicks) { phase = AbilityPhase.IDLE; - startCooldown(); + // Cooldown is managed by DataAbilities.onAbilityComplete() return true; } break; @@ -483,20 +531,6 @@ public abstract class Ability implements IAbility { telegraphInstance = null; } - /** - * Start cooldown timer - */ - public void startCooldown() { - cooldownEndTime = System.currentTimeMillis() + (cooldownTicks * 50L); - } - - /** - * Check if on cooldown - */ - public boolean isOnCooldown() { - return System.currentTimeMillis() < cooldownEndTime; - } - /** * Check if executing */ @@ -543,7 +577,6 @@ public abstract class Ability implements IAbility { phase = AbilityPhase.IDLE; currentTick = 0; currentTarget = null; - cooldownEndTime = 0; telegraphInstance = null; } @@ -558,19 +591,6 @@ public abstract class Ability implements IAbility { return true; } - /** - * Full eligibility check - */ - public boolean canUse(EntityNPCInterface npc, EntityLivingBase target) { - if (!enabled) return false; - if (isOnCooldown()) return false; - if (isExecuting()) return false; - - float distance = npc.getDistanceToEntity(target); - if (distance < minRange || distance > maxRange) return false; - - return checkConditions(npc, target); - } // ═══════════════════════════════════════════════════════════════════ // NBT (config only, execution state is transient) @@ -811,22 +831,6 @@ public abstract class Ability implements IAbility { this.activeColor = activeColor; } - /** - * @deprecated Use getWindUpColor() instead - */ - @Deprecated - public int getTelegraphColor() { - return windUpColor; - } - - /** - * @deprecated Use setWindUpColor() instead - */ - @Deprecated - public void setTelegraphColor(int telegraphColor) { - this.windUpColor = telegraphColor; - } - public String getWindUpSound() { return windUpSound; } @@ -859,38 +863,6 @@ public abstract class Ability implements IAbility { this.activeAnimationId = activeAnimationId; } - /** - * @deprecated Use getWindUpSound() instead - */ - @Deprecated - public String getCastSound() { - return windUpSound; - } - - /** - * @deprecated Use setWindUpSound() instead - */ - @Deprecated - public void setCastSound(String castSound) { - this.windUpSound = castSound; - } - - /** - * @deprecated Use getWindUpAnimationId() instead - */ - @Deprecated - public int getAnimationId() { - return windUpAnimationId; - } - - /** - * @deprecated Use setWindUpAnimationId() instead - */ - @Deprecated - public void setAnimationId(int animationId) { - this.windUpAnimationId = animationId; - } - public boolean isShowTelegraph() { return showTelegraph; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 1a9bbd522..41c20a085 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -1,6 +1,6 @@ package kamkeel.npcs.controllers.data.ability; -import kamkeel.npcs.controllers.data.ability.type.AbilityBeam; +import kamkeel.npcs.controllers.data.ability.type.AbilitySweeper; import kamkeel.npcs.controllers.data.ability.type.AbilityCharge; import kamkeel.npcs.controllers.data.ability.type.AbilityCutter; import kamkeel.npcs.controllers.data.ability.type.AbilityDash; @@ -9,6 +9,9 @@ import kamkeel.npcs.controllers.data.ability.type.AbilityHazard; import kamkeel.npcs.controllers.data.ability.type.AbilityHeal; import kamkeel.npcs.controllers.data.ability.type.AbilityHeavyHit; import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; +import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; +import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; +import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; import kamkeel.npcs.controllers.data.ability.type.AbilityProjectile; import kamkeel.npcs.controllers.data.ability.type.AbilityShockwave; import kamkeel.npcs.controllers.data.ability.type.AbilitySlam; @@ -296,9 +299,12 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:cutter", AbilityCutter::new); // Ranged/Projectile abilities - registerType("cnpc:beam", AbilityBeam::new); + registerType("cnpc:sweeper", AbilitySweeper::new); registerType("cnpc:projectile", AbilityProjectile::new); registerType("cnpc:orb", AbilityOrb::new); + registerType("cnpc:disc", AbilityDisc::new); + registerType("cnpc:laser_shot", AbilityLaserShot::new); + registerType("cnpc:beam", AbilityEnergyBeam::new); // Movement abilities registerType("cnpc:charge", AbilityCharge::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java b/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java index 7a2e43b64..bd1bb6a47 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java @@ -22,20 +22,5 @@ public enum TargetingMode { /** * AOE centered on target */ - AOE_TARGET, - - /** - * Random nearby enemy - */ - RANDOM_ENEMY, - - /** - * Lowest HP enemy in range - */ - LOWEST_HP, - - /** - * Highest threat enemy - */ - HIGHEST_THREAT + AOE_TARGET } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java deleted file mode 100644 index 3c448d0b6..000000000 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java +++ /dev/null @@ -1,335 +0,0 @@ -package kamkeel.npcs.controllers.data.ability.type; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.controllers.data.ability.Ability; -import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.telegraph.TelegraphType; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityBeam; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.entity.EntityNPCInterface; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Beam ability: Continuous line attack that damages all targets in a line. - * Can sweep across an arc or remain fixed. - */ -public class AbilityBeam extends Ability { - - // Type-specific parameters - private float beamLength = 10.0f; - private float beamWidth = 1.0f; - private float damage = 5.0f; - private int damageInterval = 5; - private boolean piercing = true; - private float sweepAngle = 0.0f; - private float sweepSpeed = 2.0f; - private boolean sweepBackAndForth = true; - private boolean lockOnTarget = false; - - // Runtime state (transient) - private transient float currentSweepAngle = 0; - private transient boolean sweepingRight = true; - private transient int ticksSinceDamage = 0; - private transient Set hitThisTick = new HashSet<>(); - - public AbilityBeam() { - this.typeId = "ability.cnpc.beam"; - this.name = "Beam"; - this.targetingMode = TargetingMode.AGGRO_TARGET; - this.maxRange = 15.0f; - this.minRange = 0.0f; - this.lockMovement = true; - this.cooldownTicks = 200; - this.windUpTicks = 60; - this.activeTicks = 80; - this.recoveryTicks = 20; - // No telegraph for beam - it's a continuous line attack - this.telegraphType = TelegraphType.NONE; - this.showTelegraph = false; - } - - @Override - public boolean hasTypeSettings() { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityBeam(this, callback); - } - - @Override - public boolean isTargetingModeLocked() { - return true; - } - - @Override - public TargetingMode[] getAllowedTargetingModes() { - return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; - } - - @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - // Initialize beam - currentSweepAngle = -sweepAngle / 2; - sweepingRight = true; - ticksSinceDamage = damageInterval; // Deal damage immediately - hitThisTick.clear(); - } - - @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - if (world.isRemote) return; - - hitThisTick.clear(); - ticksSinceDamage++; - - // Update sweep angle - if (sweepAngle > 0) { - if (sweepBackAndForth) { - if (sweepingRight) { - currentSweepAngle += sweepSpeed; - if (currentSweepAngle >= sweepAngle / 2) { - sweepingRight = false; - } - } else { - currentSweepAngle -= sweepSpeed; - if (currentSweepAngle <= -sweepAngle / 2) { - sweepingRight = true; - } - } - } else { - currentSweepAngle += sweepSpeed; - if (currentSweepAngle >= sweepAngle) { - currentSweepAngle = 0; - } - } - } - - // Calculate beam direction - float baseYaw = npc.rotationYaw; - - // If lock on target, point at target - if (lockOnTarget && target != null) { - double dx = target.posX - npc.posX; - double dz = target.posZ - npc.posZ; - baseYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); - } - - float beamYaw = baseYaw + currentSweepAngle; - float yawRad = (float) Math.toRadians(beamYaw); - - // Calculate beam start position - double startX = npc.posX; - double startY = npc.posY + npc.getEyeHeight() * 0.8; - double startZ = npc.posZ; - - double dirX = -Math.sin(yawRad); - double dirZ = Math.cos(yawRad); - - // Check for entities along the beam - if (ticksSinceDamage >= damageInterval) { - ticksSinceDamage = 0; - - // Sample points along the beam - int samples = (int) (beamLength / 0.5); - for (int i = 1; i <= samples; i++) { - double progress = (double) i / samples; - double checkX = startX + dirX * beamLength * progress; - double checkY = startY; - double checkZ = startZ + dirZ * beamLength * progress; - - // Find entities at this point - AxisAlignedBB checkBox = AxisAlignedBB.getBoundingBox( - checkX - beamWidth, checkY - 1, checkZ - beamWidth, - checkX + beamWidth, checkY + 2, checkZ + beamWidth - ); - - @SuppressWarnings("unchecked") - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, checkBox); - - for (Entity entity : entities) { - if (!(entity instanceof EntityLivingBase)) continue; - if (entity == npc) continue; - if (hitThisTick.contains(entity.getEntityId())) continue; - - EntityLivingBase livingEntity = (EntityLivingBase) entity; - - // Check if actually in beam path - if (isInBeamPath(livingEntity, startX, startY, startZ, dirX, dirZ)) { - hitThisTick.add(entity.getEntityId()); - // Apply damage with scripted event support (no knockback for beam) - applyAbilityDamage(npc, livingEntity, damage, 0); - - if (!piercing) { - return; // Stop at first hit - } - } - } - } - } - - // Spawn beam particles - spawnBeamParticles(world, startX, startY, startZ, dirX, dirZ); - } - - private boolean isInBeamPath(EntityLivingBase entity, double startX, double startY, double startZ, - double dirX, double dirZ) { - // Project entity position onto beam line - double entityX = entity.posX - startX; - double entityZ = entity.posZ - startZ; - - // Dot product to find projection distance - double projectionDist = entityX * dirX + entityZ * dirZ; - - // Check if within beam length - if (projectionDist < 0 || projectionDist > beamLength) { - return false; - } - - // Calculate perpendicular distance - double projX = dirX * projectionDist; - double projZ = dirZ * projectionDist; - double perpX = entityX - projX; - double perpZ = entityZ - projZ; - double perpDist = Math.sqrt(perpX * perpX + perpZ * perpZ); - - // Check if within beam width - return perpDist <= beamWidth + entity.width / 2; - } - - private void spawnBeamParticles(World world, double startX, double startY, double startZ, - double dirX, double dirZ) { - // Spawn particles along beam line - for (int i = 0; i < beamLength; i++) { - double px = startX + dirX * i; - double pz = startZ + dirZ * i; - world.spawnParticle("flame", px, startY, pz, 0, 0, 0); - } - } - - @Override - public void reset() { - super.reset(); - currentSweepAngle = 0; - sweepingRight = true; - ticksSinceDamage = 0; - hitThisTick.clear(); - } - - @Override - public float getTelegraphRadius() { - return beamLength; - } - - @Override - public void writeTypeNBT(NBTTagCompound nbt) { - nbt.setFloat("beamLength", beamLength); - nbt.setFloat("beamWidth", beamWidth); - nbt.setFloat("damage", damage); - nbt.setInteger("damageInterval", damageInterval); - nbt.setBoolean("piercing", piercing); - nbt.setFloat("sweepAngle", sweepAngle); - nbt.setFloat("sweepSpeed", sweepSpeed); - nbt.setBoolean("sweepBackAndForth", sweepBackAndForth); - nbt.setBoolean("lockOnTarget", lockOnTarget); - } - - @Override - public void readTypeNBT(NBTTagCompound nbt) { - this.beamLength = nbt.hasKey("beamLength") ? nbt.getFloat("beamLength") : 10.0f; - this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 1.0f; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 5.0f; - this.damageInterval = nbt.hasKey("damageInterval") ? nbt.getInteger("damageInterval") : 5; - this.piercing = !nbt.hasKey("piercing") || nbt.getBoolean("piercing"); - this.sweepAngle = nbt.hasKey("sweepAngle") ? nbt.getFloat("sweepAngle") : 0.0f; - this.sweepSpeed = nbt.hasKey("sweepSpeed") ? nbt.getFloat("sweepSpeed") : 2.0f; - this.sweepBackAndForth = !nbt.hasKey("sweepBackAndForth") || nbt.getBoolean("sweepBackAndForth"); - this.lockOnTarget = nbt.hasKey("lockOnTarget") && nbt.getBoolean("lockOnTarget"); - } - - // Getters & Setters - public float getBeamLength() { - return beamLength; - } - - public void setBeamLength(float beamLength) { - this.beamLength = beamLength; - } - - public float getBeamWidth() { - return beamWidth; - } - - public void setBeamWidth(float beamWidth) { - this.beamWidth = beamWidth; - } - - public float getDamage() { - return damage; - } - - public void setDamage(float damage) { - this.damage = damage; - } - - public int getDamageInterval() { - return damageInterval; - } - - public void setDamageInterval(int damageInterval) { - this.damageInterval = damageInterval; - } - - public boolean isPiercing() { - return piercing; - } - - public void setPiercing(boolean piercing) { - this.piercing = piercing; - } - - public float getSweepAngle() { - return sweepAngle; - } - - public void setSweepAngle(float sweepAngle) { - this.sweepAngle = sweepAngle; - } - - public float getSweepSpeed() { - return sweepSpeed; - } - - public void setSweepSpeed(float sweepSpeed) { - this.sweepSpeed = sweepSpeed; - } - - public boolean isSweepBackAndForth() { - return sweepBackAndForth; - } - - public void setSweepBackAndForth(boolean sweepBackAndForth) { - this.sweepBackAndForth = sweepBackAndForth; - } - - public boolean isLockOnTarget() { - return lockOnTarget; - } - - public void setLockOnTarget(boolean lockOnTarget) { - this.lockOnTarget = lockOnTarget; - } -} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 6c43ea1cb..696367ce8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -49,7 +49,7 @@ public class AbilityCharge extends Ability { this.cooldownTicks = 80; this.windUpTicks = 20; this.activeTicks = 40; - this.recoveryTicks = 20; + this.recoveryTicks = 10; // LINE telegraph showing charge path this.telegraphType = TelegraphType.LINE; this.showTelegraph = true; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java new file mode 100644 index 000000000..97d69e19c --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -0,0 +1,237 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityDisc; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDisc; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Disc ability: Spawns a flat spinning disc projectile. + * Has optional boomerang behavior to return to owner. + */ +public class AbilityDisc extends Ability { + + // Movement properties + private float speed = 0.6f; + private float discRadius = 1.0f; + private float discThickness = 0.2f; + private float maxDistance = 35.0f; + private int maxLifetime = 250; + + // Combat properties + private float damage = 8.0f; + private float knockback = 1.2f; + private float knockbackUp = 0.15f; + + // Homing properties + private boolean homing = true; + private float homingStrength = 0.12f; + private float homingRange = 18.0f; + + // Boomerang properties + private boolean boomerang = false; + private int boomerangDelay = 40; + + // Explosion properties + private boolean explosive = false; + private float explosionRadius = 3.0f; + private float explosionDamageFalloff = 0.5f; + + // Effect properties + private int stunDuration = 0; + private int slowDuration = 0; + private int slowLevel = 0; + + // Visual properties + private int innerColor = 0xFFFFFF; + private int outerColor = 0xFF8800; + private float outerColorWidth = 1.8f; + private boolean outerColorEnabled = true; + private float rotationSpeed = 5.0f; + + public AbilityDisc() { + this.typeId = "ability.cnpc.disc"; + this.name = "Disc"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 30.0f; + this.minRange = 5.0f; + this.cooldownTicks = 80; + this.windUpTicks = 20; + this.activeTicks = 1; + this.recoveryTicks = 10; + this.telegraphType = TelegraphType.POINT; + this.showTelegraph = false; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityDisc(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + if (world.isRemote) return; + + double spawnX = npc.posX; + double spawnY = npc.posY + npc.getEyeHeight() * 0.8; + double spawnZ = npc.posZ; + + EntityAbilityDisc disc = new EntityAbilityDisc( + world, npc, target, + spawnX, spawnY, spawnZ, + discRadius, discThickness, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + speed, homing, homingStrength, homingRange, + boomerang, boomerangDelay, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime + ); + + world.spawnEntityInWorld(disc); + } + + @Override + public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + } + + @Override + public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + } + + @Override + public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("speed", speed); + nbt.setFloat("discRadius", discRadius); + nbt.setFloat("discThickness", discThickness); + nbt.setFloat("maxDistance", maxDistance); + nbt.setInteger("maxLifetime", maxLifetime); + nbt.setFloat("damage", damage); + nbt.setFloat("knockback", knockback); + nbt.setFloat("knockbackUp", knockbackUp); + nbt.setBoolean("homing", homing); + nbt.setFloat("homingStrength", homingStrength); + nbt.setFloat("homingRange", homingRange); + nbt.setBoolean("boomerang", boomerang); + nbt.setInteger("boomerangDelay", boomerangDelay); + nbt.setBoolean("explosive", explosive); + nbt.setFloat("explosionRadius", explosionRadius); + nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); + nbt.setInteger("stunDuration", stunDuration); + nbt.setInteger("slowDuration", slowDuration); + nbt.setInteger("slowLevel", slowLevel); + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); + nbt.setFloat("rotationSpeed", rotationSpeed); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + this.speed = nbt.hasKey("speed") ? nbt.getFloat("speed") : 0.6f; + this.discRadius = nbt.hasKey("discRadius") ? nbt.getFloat("discRadius") : 1.0f; + this.discThickness = nbt.hasKey("discThickness") ? nbt.getFloat("discThickness") : 0.2f; + this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 35.0f; + this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 250; + this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 8.0f; + this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.2f; + this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.15f; + this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); + this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.12f; + this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 18.0f; + this.boomerang = nbt.hasKey("boomerang") && nbt.getBoolean("boomerang"); + this.boomerangDelay = nbt.hasKey("boomerangDelay") ? nbt.getInteger("boomerangDelay") : 40; + this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); + this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 3.0f; + this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; + this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; + this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; + this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; + this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; + this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF8800; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 8.0f; + } + + // Getters & Setters + public float getSpeed() { return speed; } + public void setSpeed(float speed) { this.speed = speed; } + public float getDiscRadius() { return discRadius; } + public void setDiscRadius(float discRadius) { this.discRadius = discRadius; } + public float getDiscThickness() { return discThickness; } + public void setDiscThickness(float discThickness) { this.discThickness = discThickness; } + public float getMaxDistance() { return maxDistance; } + public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } + public int getMaxLifetime() { return maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } + public float getDamage() { return damage; } + public void setDamage(float damage) { this.damage = damage; } + public float getKnockback() { return knockback; } + public void setKnockback(float knockback) { this.knockback = knockback; } + public float getKnockbackUp() { return knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } + public boolean isHoming() { return homing; } + public void setHoming(boolean homing) { this.homing = homing; } + public float getHomingStrength() { return homingStrength; } + public void setHomingStrength(float homingStrength) { this.homingStrength = homingStrength; } + public float getHomingRange() { return homingRange; } + public void setHomingRange(float homingRange) { this.homingRange = homingRange; } + public boolean isBoomerang() { return boomerang; } + public void setBoomerang(boolean boomerang) { this.boomerang = boomerang; } + public int getBoomerangDelay() { return boomerangDelay; } + public void setBoomerangDelay(int boomerangDelay) { this.boomerangDelay = boomerangDelay; } + public boolean isExplosive() { return explosive; } + public void setExplosive(boolean explosive) { this.explosive = explosive; } + public float getExplosionRadius() { return explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } + public int getStunDuration() { return stunDuration; } + public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } + public int getSlowDuration() { return slowDuration; } + public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } + public int getSlowLevel() { return slowLevel; } + public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } + public int getInnerColor() { return innerColor; } + public void setInnerColor(int innerColor) { this.innerColor = innerColor; } + public int getOuterColor() { return outerColor; } + public void setOuterColor(int outerColor) { this.outerColor = outerColor; } + public float getOuterColorWidth() { return outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public boolean isOuterColorEnabled() { return outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } + public float getRotationSpeed() { return rotationSpeed; } + public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java new file mode 100644 index 000000000..2790eafd8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -0,0 +1,227 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityBeam; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Energy Beam ability: A homing head with a trailing path. + * The beam stays attached to the origin and curves as it homes in on target. + * Cannot cross over itself (self-intersection prevention). + */ +public class AbilityEnergyBeam extends Ability { + + // Movement properties + private float speed = 0.4f; + private float maxDistance = 25.0f; + private int maxLifetime = 200; + + // Shape properties + private float beamWidth = 0.4f; + private float headSize = 0.6f; + + // Combat properties + private float damage = 10.0f; + private float knockback = 1.5f; + private float knockbackUp = 0.2f; + + // Homing properties + private boolean homing = true; + private float homingStrength = 0.1f; + private float homingRange = 15.0f; + + // Explosion properties + private boolean explosive = false; + private float explosionRadius = 4.0f; + private float explosionDamageFalloff = 0.5f; + + // Effect properties + private int stunDuration = 0; + private int slowDuration = 0; + private int slowLevel = 0; + + // Visual properties + private int innerColor = 0xFFFFFF; + private int outerColor = 0x00AAFF; + private float outerColorWidth = 1.8f; + private boolean outerColorEnabled = true; + private float rotationSpeed = 6.0f; + + public AbilityEnergyBeam() { + this.typeId = "ability.cnpc.beam"; + this.name = "Beam"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 20.0f; + this.minRange = 5.0f; + this.cooldownTicks = 150; + this.windUpTicks = 40; + this.activeTicks = 200; // Match maxLifetime to keep NPC locked while beam is active + this.recoveryTicks = 5; + this.telegraphType = TelegraphType.POINT; + this.showTelegraph = false; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityEnergyBeam(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + if (world.isRemote) return; + + double spawnX = npc.posX; + double spawnY = npc.posY + npc.getEyeHeight() * 0.7; + double spawnZ = npc.posZ; + + EntityAbilityBeam beam = new EntityAbilityBeam( + world, npc, target, + spawnX, spawnY, spawnZ, + beamWidth, headSize, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime + ); + + world.spawnEntityInWorld(beam); + } + + @Override + public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + } + + @Override + public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + } + + @Override + public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("speed", speed); + nbt.setFloat("maxDistance", maxDistance); + nbt.setInteger("maxLifetime", maxLifetime); + nbt.setFloat("beamWidth", beamWidth); + nbt.setFloat("headSize", headSize); + nbt.setFloat("damage", damage); + nbt.setFloat("knockback", knockback); + nbt.setFloat("knockbackUp", knockbackUp); + nbt.setBoolean("homing", homing); + nbt.setFloat("homingStrength", homingStrength); + nbt.setFloat("homingRange", homingRange); + nbt.setBoolean("explosive", explosive); + nbt.setFloat("explosionRadius", explosionRadius); + nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); + nbt.setInteger("stunDuration", stunDuration); + nbt.setInteger("slowDuration", slowDuration); + nbt.setInteger("slowLevel", slowLevel); + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); + nbt.setFloat("rotationSpeed", rotationSpeed); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + this.speed = nbt.hasKey("speed") ? nbt.getFloat("speed") : 0.4f; + this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 25.0f; + this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; + this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.4f; + this.headSize = nbt.hasKey("headSize") ? nbt.getFloat("headSize") : 0.6f; + this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 10.0f; + this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.5f; + this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.2f; + this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); + this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.1f; + this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 15.0f; + this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); + this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 4.0f; + this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; + this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; + this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; + this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; + this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; + this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x00AAFF; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 6.0f; + } + + // Getters & Setters + public float getSpeed() { return speed; } + public void setSpeed(float speed) { this.speed = speed; } + public float getMaxDistance() { return maxDistance; } + public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } + public int getMaxLifetime() { return maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } + public float getBeamWidth() { return beamWidth; } + public void setBeamWidth(float beamWidth) { this.beamWidth = beamWidth; } + public float getHeadSize() { return headSize; } + public void setHeadSize(float headSize) { this.headSize = headSize; } + public float getDamage() { return damage; } + public void setDamage(float damage) { this.damage = damage; } + public float getKnockback() { return knockback; } + public void setKnockback(float knockback) { this.knockback = knockback; } + public float getKnockbackUp() { return knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } + public boolean isHoming() { return homing; } + public void setHoming(boolean homing) { this.homing = homing; } + public float getHomingStrength() { return homingStrength; } + public void setHomingStrength(float homingStrength) { this.homingStrength = homingStrength; } + public float getHomingRange() { return homingRange; } + public void setHomingRange(float homingRange) { this.homingRange = homingRange; } + public boolean isExplosive() { return explosive; } + public void setExplosive(boolean explosive) { this.explosive = explosive; } + public float getExplosionRadius() { return explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } + public int getStunDuration() { return stunDuration; } + public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } + public int getSlowDuration() { return slowDuration; } + public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } + public int getSlowLevel() { return slowLevel; } + public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } + public int getInnerColor() { return innerColor; } + public void setInnerColor(int innerColor) { this.innerColor = innerColor; } + public int getOuterColor() { return outerColor; } + public void setOuterColor(int outerColor) { this.outerColor = outerColor; } + public float getOuterColorWidth() { return outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public boolean isOuterColorEnabled() { return outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } + public float getRotationSpeed() { return rotationSpeed; } + public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index fa46c2341..6a98b643a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -51,7 +51,7 @@ public class AbilityGuard extends Ability { this.cooldownTicks = 120; this.windUpTicks = 10; this.activeTicks = 60; - this.recoveryTicks = 20; + this.recoveryTicks = 10; this.interruptible = false; // Hard to interrupt while guarding // No telegraph for guard - it's a defensive stance this.telegraphType = TelegraphType.NONE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 028259826..3161c5dbe 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -146,34 +146,6 @@ public class AbilityHazard extends Ability { return instance; } - /** - * Calculates offset position near the given coordinates. - * Used to place hazard near target rather than exactly on them. - */ - private double[] calculateOffsetPosition(double baseX, double baseY, double baseZ) { - if (maxOffset <= 0) { - return new double[]{baseX, baseY, baseZ}; - } - - double offsetDist; - double offsetAngle; - - if (randomOffset) { - // Random offset within min-max range - offsetDist = minOffset + RANDOM.nextDouble() * (maxOffset - minOffset); - offsetAngle = RANDOM.nextDouble() * Math.PI * 2; - } else { - // Fixed offset (use max, random angle) - offsetDist = maxOffset; - offsetAngle = RANDOM.nextDouble() * Math.PI * 2; - } - - double offsetX = Math.cos(offsetAngle) * offsetDist; - double offsetZ = Math.sin(offsetAngle) * offsetDist; - - return new double[]{baseX + offsetX, baseY, baseZ + offsetZ}; - } - @Override public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { // AT_CASTER locks immediately, AT_TARGET follows during windup and locks on execute @@ -214,12 +186,18 @@ public class AbilityHazard extends Ability { case AT_TARGET: // Use telegraph position if available, apply offset if (telegraph != null) { - double[] pos = calculateOffsetPosition(telegraph.getX(), telegraph.getY(), telegraph.getZ()); + double[] pos = Ability.calculateOffsetPosition(telegraph.getX(), telegraph.getY(), telegraph.getZ(), + minOffset, maxOffset, randomOffset, RANDOM); zoneX = pos[0]; zoneY = pos[1]; zoneZ = pos[2]; + // Update telegraph to show actual hazard position + telegraph.setX(zoneX); + telegraph.setY(zoneY); + telegraph.setZ(zoneZ); } else if (target != null) { - double[] pos = calculateOffsetPosition(target.posX, target.posY, target.posZ); + double[] pos = Ability.calculateOffsetPosition(target.posX, target.posY, target.posZ, + minOffset, maxOffset, randomOffset, RANDOM); zoneX = pos[0]; zoneY = pos[1]; zoneZ = pos[2]; @@ -474,18 +452,6 @@ public class AbilityHazard extends Ability { this.damagePerSecond = damagePerSecond; } - /** @deprecated Use {@link #getDamagePerSecond()} instead */ - @Deprecated - public float getDamagePerTick() { - return damagePerSecond; - } - - /** @deprecated Use {@link #setDamagePerSecond(float)} instead */ - @Deprecated - public void setDamagePerTick(float damage) { - this.damagePerSecond = damage; - } - public int getDamageInterval() { return damageInterval; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 834b9c055..2e23a1e56 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -76,16 +76,24 @@ public class AbilityHeal extends Ability { healedAllies.clear(); + // Always find allies if we're healing them (needed for both instant and HoT) + if (healAllies && healRadius > 0) { + findAlliesInRadius(npc, world); + } + if (instantHeal) { + // Instant heal - apply all healing now if (healSelf) { healEntity(npc); spawnHealParticles(world, npc); } - if (healAllies && healRadius > 0) { - healAlliesInRadius(npc, world); + for (EntityLivingBase ally : healedAllies) { + healEntity(ally); + spawnHealParticles(world, ally); } } + // If not instant, HoT healing is applied in onActiveTick } @Override @@ -104,6 +112,9 @@ public class AbilityHeal extends Ability { selfTickHeal += (npc.getMaxHealth() * healPercent / (float) activeTicks) * 10; } npc.heal(selfTickHeal); + if (tick % 20 == 0) { + spawnHealParticles(world, npc); + } } if (healAllies && healRadius > 0) { @@ -115,21 +126,19 @@ public class AbilityHeal extends Ability { allyTickHeal += (ally.getMaxHealth() * healPercent / (float) activeTicks) * 10; } ally.heal(allyTickHeal); + if (tick % 20 == 0) { + spawnHealParticles(world, ally); + } } } } } } - private void healEntity(EntityLivingBase entity) { - float totalHeal = healAmount; - if (healPercent > 0) { - totalHeal += entity.getMaxHealth() * healPercent; - } - entity.heal(totalHeal); - } - - private void healAlliesInRadius(EntityNPCInterface npc, World world) { + /** + * Find all allies in radius and add them to healedAllies list. + */ + private void findAlliesInRadius(EntityNPCInterface npc, World world) { AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( npc.posX - healRadius, npc.posY - 2, npc.posZ - healRadius, npc.posX + healRadius, npc.posY + 3, npc.posZ + healRadius @@ -148,14 +157,20 @@ public class AbilityHeal extends Ability { if (living instanceof EntityNPCInterface) { float dist = npc.getDistanceToEntity(living); if (dist <= healRadius) { - healEntity(living); healedAllies.add(living); - spawnHealParticles(world, living); } } } } + private void healEntity(EntityLivingBase entity) { + float totalHeal = healAmount; + if (healPercent > 0) { + totalHeal += entity.getMaxHealth() * healPercent; + } + entity.heal(totalHeal); + } + private void spawnHealParticles(World world, EntityLivingBase entity) { for (int i = 0; i < 10; i++) { double offsetX = (world.rand.nextDouble() - 0.5) * entity.width; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 408120694..abdcc6f86 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -37,7 +37,7 @@ public class AbilityHeavyHit extends Ability { this.cooldownTicks = 80; this.windUpTicks = 30; this.activeTicks = 5; - this.recoveryTicks = 20; + this.recoveryTicks = 10; this.telegraphType = TelegraphType.POINT; this.showTelegraph = false; this.windUpSound = "random.anvil_use"; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java new file mode 100644 index 000000000..2b224e400 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -0,0 +1,202 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityLaser; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityLaserShot; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Laser Shot ability: Fast expanding thin line that pierces through targets. + * Travels in a straight line from origin, damaging all entities it passes through. + */ +public class AbilityLaserShot extends Ability { + + // Laser properties + private float laserWidth = 0.3f; + private float expansionSpeed = 3.0f; + private int lingerTicks = 8; + private float maxDistance = 40.0f; + private int maxLifetime = 100; + + // Combat properties + private float damage = 6.0f; + private float knockback = 0.5f; + private float knockbackUp = 0.05f; + + // Explosion properties + private boolean explosive = false; + private float explosionRadius = 2.0f; + private float explosionDamageFalloff = 0.5f; + + // Effect properties + private int stunDuration = 0; + private int slowDuration = 0; + private int slowLevel = 0; + + // Visual properties + private int innerColor = 0xFFFFFF; + private int outerColor = 0xFF0000; + + public AbilityLaserShot() { + this.typeId = "ability.cnpc.laser_shot"; + this.name = "Laser Shot"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 35.0f; + this.minRange = 3.0f; + this.cooldownTicks = 60; + this.windUpTicks = 15; + this.activeTicks = 1; + this.recoveryTicks = 5; + this.telegraphType = TelegraphType.LINE; + this.showTelegraph = true; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityLaserShot(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return false; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public float getTelegraphLength() { + return maxDistance; + } + + @Override + public float getTelegraphWidth() { + return laserWidth * 2.0f; // Make telegraph slightly wider for visibility + } + + @Override + public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + if (world.isRemote) return; + + double spawnX = npc.posX; + double spawnY = npc.posY + npc.getEyeHeight() * 0.8; + double spawnZ = npc.posZ; + + EntityAbilityLaser laser = new EntityAbilityLaser( + world, npc, target, + spawnX, spawnY, spawnZ, + laserWidth, innerColor, outerColor, + damage, knockback, knockbackUp, + expansionSpeed, lingerTicks, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime + ); + + world.spawnEntityInWorld(laser); + } + + @Override + public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + } + + @Override + public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + } + + @Override + public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("laserWidth", laserWidth); + nbt.setFloat("expansionSpeed", expansionSpeed); + nbt.setInteger("lingerTicks", lingerTicks); + nbt.setFloat("maxDistance", maxDistance); + nbt.setInteger("maxLifetime", maxLifetime); + nbt.setFloat("damage", damage); + nbt.setFloat("knockback", knockback); + nbt.setFloat("knockbackUp", knockbackUp); + nbt.setBoolean("explosive", explosive); + nbt.setFloat("explosionRadius", explosionRadius); + nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); + nbt.setInteger("stunDuration", stunDuration); + nbt.setInteger("slowDuration", slowDuration); + nbt.setInteger("slowLevel", slowLevel); + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + this.laserWidth = nbt.hasKey("laserWidth") ? nbt.getFloat("laserWidth") : 0.3f; + this.expansionSpeed = nbt.hasKey("expansionSpeed") ? nbt.getFloat("expansionSpeed") : 3.0f; + this.lingerTicks = nbt.hasKey("lingerTicks") ? nbt.getInteger("lingerTicks") : 8; + this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 40.0f; + this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 100; + this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 6.0f; + this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 0.5f; + this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.05f; + this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); + this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 2.0f; + this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; + this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; + this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; + this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; + this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; + this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; + } + + // Getters & Setters + public float getLaserWidth() { return laserWidth; } + public void setLaserWidth(float laserWidth) { this.laserWidth = laserWidth; } + public float getExpansionSpeed() { return expansionSpeed; } + public void setExpansionSpeed(float expansionSpeed) { this.expansionSpeed = expansionSpeed; } + public int getLingerTicks() { return lingerTicks; } + public void setLingerTicks(int lingerTicks) { this.lingerTicks = lingerTicks; } + public float getMaxDistance() { return maxDistance; } + public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } + public int getMaxLifetime() { return maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } + public float getDamage() { return damage; } + public void setDamage(float damage) { this.damage = damage; } + public float getKnockback() { return knockback; } + public void setKnockback(float knockback) { this.knockback = knockback; } + public float getKnockbackUp() { return knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } + public boolean isExplosive() { return explosive; } + public void setExplosive(boolean explosive) { this.explosive = explosive; } + public float getExplosionRadius() { return explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } + public int getStunDuration() { return stunDuration; } + public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } + public int getSlowDuration() { return slowDuration; } + public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } + public int getSlowLevel() { return slowLevel; } + public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } + public int getInnerColor() { return innerColor; } + public void setInnerColor(int innerColor) { this.innerColor = innerColor; } + public int getOuterColor() { return outerColor; } + public void setOuterColor(int outerColor) { this.outerColor = outerColor; } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 99583a5d0..ff03ac39f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -5,11 +5,9 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityOrb; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -17,39 +15,45 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; -import java.util.List; - /** - * Orb ability: Homing projectile sphere that tracks target. - * Can be explosive on impact and/or apply debuffs. + * Orb ability: Spawns a homing projectile sphere that tracks target. + * The EntityAbilityOrb handles all movement, collision, and damage logic. + * This ability just configures and spawns the orb entity. */ public class AbilityOrb extends Ability { + // Movement properties private float orbSpeed = 0.5f; private float orbSize = 1.0f; + private float maxDistance = 30.0f; // Max distance before orb dies + private int maxLifetime = 200; // Ticks the orb lives + + // Combat properties private float damage = 7.0f; private float knockback = 1.0f; - private float maxDistance = 30.0f; - private int maxLifetime = 200; + private float knockbackUp = 0.1f; + // Homing properties private boolean homing = true; private float homingStrength = 0.15f; private float homingRange = 20.0f; + // Explosion properties private boolean explosive = false; private float explosionRadius = 3.0f; private float explosionDamageFalloff = 0.5f; + // Effect properties private int stunDuration = 0; private int slowDuration = 0; private int slowLevel = 0; - // Runtime state - private transient double orbX, orbY, orbZ; - private transient double velocityX, velocityY, velocityZ; - private transient double startX, startY, startZ; - private transient boolean hasHit = false; - private transient int ticksAlive = 0; + // Visual properties + private int innerColor = 0xFFFFFF; // White core + private int outerColor = 0x8888FF; // Light blue glow + private float outerColorWidth = 1.8f; // Multiplier for outer glow size + private boolean outerColorEnabled = true; // Whether to render outer glow + private float rotationSpeed = 4.0f; // Degrees per tick public AbilityOrb() { this.typeId = "ability.cnpc.orb"; @@ -59,7 +63,7 @@ public class AbilityOrb extends Ability { this.minRange = 5.0f; this.cooldownTicks = 100; this.windUpTicks = 30; - this.activeTicks = 200; + this.activeTicks = 1; // Minimal - just spawn and done this.recoveryTicks = 10; this.telegraphType = TelegraphType.POINT; this.showTelegraph = false; @@ -72,8 +76,7 @@ public class AbilityOrb extends Ability { @Override @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { return new SubGuiAbilityOrb(this, callback); } @@ -89,203 +92,52 @@ public class AbilityOrb extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - startX = orbX = npc.posX; - startY = orbY = npc.posY + npc.getEyeHeight() * 0.8; - startZ = orbZ = npc.posZ; - hasHit = false; - ticksAlive = 0; + if (world.isRemote) return; - if (target != null) { - double dx = target.posX - orbX; - double dy = (target.posY + target.height * 0.5) - orbY; - double dz = target.posZ - orbZ; - double len = Math.sqrt(dx * dx + dy * dy + dz * dz); - if (len > 0) { - velocityX = (dx / len) * orbSpeed; - velocityY = (dy / len) * orbSpeed; - velocityZ = (dz / len) * orbSpeed; - } - } else { - float yaw = (float) Math.toRadians(npc.rotationYaw); - float pitch = (float) Math.toRadians(npc.rotationPitch); - velocityX = -Math.sin(yaw) * Math.cos(pitch) * orbSpeed; - velocityY = -Math.sin(pitch) * orbSpeed; - velocityZ = Math.cos(yaw) * Math.cos(pitch) * orbSpeed; - } + // Spawn position at NPC's eye level + double spawnX = npc.posX; + double spawnY = npc.posY + npc.getEyeHeight() * 0.8; + double spawnZ = npc.posZ; + + // Create and spawn the self-managing orb entity + EntityAbilityOrb orb = new EntityAbilityOrb( + world, npc, target, + spawnX, spawnY, spawnZ, + orbSize, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + orbSpeed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime + ); + + world.spawnEntityInWorld(orb); } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - if (hasHit) return; - - ticksAlive++; - - if (ticksAlive >= maxLifetime) { - hasHit = true; - return; - } - - double distTraveled = Math.sqrt( - Math.pow(orbX - startX, 2) + - Math.pow(orbY - startY, 2) + - Math.pow(orbZ - startZ, 2) - ); - if (distTraveled >= maxDistance) { - hasHit = true; - return; - } - - if (homing && target != null && target.isEntityAlive()) { - double targetX = target.posX; - double targetY = target.posY + target.height * 0.5; - double targetZ = target.posZ; - - double distToTarget = Math.sqrt( - Math.pow(targetX - orbX, 2) + - Math.pow(targetY - orbY, 2) + - Math.pow(targetZ - orbZ, 2) - ); - - if (distToTarget <= homingRange) { - double dx = targetX - orbX; - double dy = targetY - orbY; - double dz = targetZ - orbZ; - double len = Math.sqrt(dx * dx + dy * dy + dz * dz); - if (len > 0) { - double desiredVX = (dx / len) * orbSpeed; - double desiredVY = (dy / len) * orbSpeed; - double desiredVZ = (dz / len) * orbSpeed; - - velocityX += (desiredVX - velocityX) * homingStrength; - velocityY += (desiredVY - velocityY) * homingStrength; - velocityZ += (desiredVZ - velocityZ) * homingStrength; - - double vLen = Math.sqrt(velocityX * velocityX + velocityY * velocityY + velocityZ * velocityZ); - if (vLen > 0) { - velocityX = (velocityX / vLen) * orbSpeed; - velocityY = (velocityY / vLen) * orbSpeed; - velocityZ = (velocityZ / vLen) * orbSpeed; - } - } - } - } - - orbX += velocityX; - orbY += velocityY; - orbZ += velocityZ; - - if (!world.isRemote) { - checkCollision(npc, world); - } - } - - private void checkCollision(EntityNPCInterface npc, World world) { - AxisAlignedBB hitBox = AxisAlignedBB.getBoundingBox( - orbX - orbSize, orbY - orbSize, orbZ - orbSize, - orbX + orbSize, orbY + orbSize, orbZ + orbSize - ); - - @SuppressWarnings("unchecked") - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, hitBox); - - for (EntityLivingBase entity : entities) { - if (entity == npc) continue; - - hasHit = true; - - if (explosive) { - doExplosion(npc, world); - } else { - // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, entity, damage, knockback); - if (wasHit) { - applyEffects(entity); - } - } - break; - } - - if (!hasHit && world.getBlock((int) orbX, (int) orbY, (int) orbZ).getMaterial().isSolid()) { - hasHit = true; - if (explosive) { - doExplosion(npc, world); - } - } - } - - private void doExplosion(EntityNPCInterface npc, World world) { - AxisAlignedBB explosionBox = AxisAlignedBB.getBoundingBox( - orbX - explosionRadius, orbY - explosionRadius, orbZ - explosionRadius, - orbX + explosionRadius, orbY + explosionRadius, orbZ + explosionRadius - ); - - @SuppressWarnings("unchecked") - List blastTargets = world.getEntitiesWithinAABB(EntityLivingBase.class, explosionBox); - - for (EntityLivingBase blastTarget : blastTargets) { - if (blastTarget == npc) continue; - - double dist = Math.sqrt( - Math.pow(blastTarget.posX - orbX, 2) + - Math.pow(blastTarget.posY - orbY, 2) + - Math.pow(blastTarget.posZ - orbZ, 2) - ); - - if (dist <= explosionRadius) { - float falloff = 1.0f - (float) (dist / explosionRadius) * explosionDamageFalloff; - // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, blastTarget, damage * falloff, knockback * falloff); - if (wasHit) { - applyEffects(blastTarget); - } - } - } - - world.playSoundEffect(orbX, orbY, orbZ, "random.explode", 1.0f, 1.0f); - } - - private void applyKnockback(EntityLivingBase target, float strength, float upward) { - double dx = target.posX - orbX; - double dz = target.posZ - orbZ; - double dist = Math.sqrt(dx * dx + dz * dz); - if (dist > 0) { - target.motionX += (dx / dist) * strength; - target.motionZ += (dz / dist) * strength; - } - target.motionY += upward; - target.velocityChanged = true; - } - - private void applyEffects(EntityLivingBase target) { - if (stunDuration > 0) { - target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - target.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); - } - if (slowDuration > 0 && slowLevel > 0) { - target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, slowDuration, slowLevel)); - } + // Nothing to do - entity manages itself } @Override public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - hasHit = false; - ticksAlive = 0; + // Nothing to clean up - entity manages itself } @Override public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - hasHit = false; - ticksAlive = 0; + // Nothing to clean up - entity manages itself } @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("orbSpeed", orbSpeed); nbt.setFloat("orbSize", orbSize); - nbt.setFloat("damage", damage); - nbt.setFloat("knockback", knockback); nbt.setFloat("maxDistance", maxDistance); nbt.setInteger("maxLifetime", maxLifetime); + nbt.setFloat("damage", damage); + nbt.setFloat("knockback", knockback); + nbt.setFloat("knockbackUp", knockbackUp); nbt.setBoolean("homing", homing); nbt.setFloat("homingStrength", homingStrength); nbt.setFloat("homingRange", homingRange); @@ -295,16 +147,22 @@ public class AbilityOrb extends Ability { nbt.setInteger("stunDuration", stunDuration); nbt.setInteger("slowDuration", slowDuration); nbt.setInteger("slowLevel", slowLevel); + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); + nbt.setFloat("rotationSpeed", rotationSpeed); } @Override public void readTypeNBT(NBTTagCompound nbt) { this.orbSpeed = nbt.hasKey("orbSpeed") ? nbt.getFloat("orbSpeed") : 0.5f; this.orbSize = nbt.hasKey("orbSize") ? nbt.getFloat("orbSize") : 1.0f; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 7.0f; - this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.0f; this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 30.0f; this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; + this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 7.0f; + this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.0f; + this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.1f; this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.15f; this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 20.0f; @@ -314,6 +172,11 @@ public class AbilityOrb extends Ability { this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; + this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; + this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x8888FF; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 4.0f; } // Getters & Setters @@ -333,6 +196,22 @@ public class AbilityOrb extends Ability { this.orbSize = orbSize; } + public float getMaxDistance() { + return maxDistance; + } + + public void setMaxDistance(float maxDistance) { + this.maxDistance = maxDistance; + } + + public int getMaxLifetime() { + return maxLifetime; + } + + public void setMaxLifetime(int maxLifetime) { + this.maxLifetime = maxLifetime; + } + public float getDamage() { return damage; } @@ -349,20 +228,12 @@ public class AbilityOrb extends Ability { this.knockback = knockback; } - public float getMaxDistance() { - return maxDistance; + public float getKnockbackUp() { + return knockbackUp; } - public void setMaxDistance(float maxDistance) { - this.maxDistance = maxDistance; - } - - public int getMaxLifetime() { - return maxLifetime; - } - - public void setMaxLifetime(int maxLifetime) { - this.maxLifetime = maxLifetime; + public void setKnockbackUp(float knockbackUp) { + this.knockbackUp = knockbackUp; } public boolean isHoming() { @@ -437,20 +308,43 @@ public class AbilityOrb extends Ability { this.slowLevel = slowLevel; } - // Runtime getters for rendering - public double getOrbX() { - return orbX; + public int getInnerColor() { + return innerColor; } - public double getOrbY() { - return orbY; + public void setInnerColor(int innerColor) { + this.innerColor = innerColor; } - public double getOrbZ() { - return orbZ; + public int getOuterColor() { + return outerColor; } - public boolean hasHit() { - return hasHit; + public void setOuterColor(int outerColor) { + this.outerColor = outerColor; + } + + public float getOuterColorWidth() { + return outerColorWidth; + } + + public void setOuterColorWidth(float outerColorWidth) { + this.outerColorWidth = outerColorWidth; + } + + public boolean isOuterColorEnabled() { + return outerColorEnabled; + } + + public void setOuterColorEnabled(boolean outerColorEnabled) { + this.outerColorEnabled = outerColorEnabled; + } + + public float getRotationSpeed() { + return rotationSpeed; + } + + public void setRotationSpeed(float rotationSpeed) { + this.rotationSpeed = rotationSpeed; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index af3489214..1708b49bd 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -43,7 +43,7 @@ public class AbilityShockwave extends Ability { this.cooldownTicks = 100; this.windUpTicks = 25; this.activeTicks = 5; - this.recoveryTicks = 20; + this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "random.explode"; this.activeSound = "random.explode"; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index 00da63e7f..6068b269f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -50,7 +50,7 @@ public class AbilitySlam extends Ability { this.targetingMode = TargetingMode.AOE_SELF; // Can also be AOE_TARGET to leap to target this.windUpTicks = 30; this.activeTicks = 60; // Max time in air + landing - this.recoveryTicks = 20; + this.recoveryTicks = 10; this.cooldownTicks = 100; this.lockMovement = true; this.minRange = 2.0f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java new file mode 100644 index 000000000..d1a67eb3a --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -0,0 +1,217 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilitySweeper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import noppes.npcs.LogWriter; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySweeper; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Sweeper ability: A low sweeping beam that rotates around the NPC. + * Players can jump over it. The beam completes a set number of rotations before ending. + * Telegraph shows a large circle on the ground indicating range. + * + * All damage logic is handled by the EntityAbilitySweeper entity to ensure + * visual and damage hitbox alignment. + */ +public class AbilitySweeper extends Ability { + + // Type-specific parameters + private float beamLength = 10.0f; + private float beamWidth = 0.3f; // Thin like beam trail + private float beamHeight = 0.8f; // Height above ground (low enough to jump over) + private float damage = 5.0f; + private int damageInterval = 5; + private boolean piercing = true; + private float sweepSpeed = 3.0f; + private int numberOfRotations = 2; // How many full rotations before ability ends + private boolean lockOnTarget = false; + + // Visual properties + private int innerColor = 0xFF6600; + private int outerColor = 0xFF0000; + private float outerColorWidth = 1.8f; + private boolean outerColorEnabled = true; + + // Runtime state (transient) + private transient EntityAbilitySweeper activeEntity = null; + + public AbilitySweeper() { + this.typeId = "ability.cnpc.sweeper"; + this.name = "Sweeper"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 15.0f; + this.minRange = 0.0f; + this.lockMovement = true; + this.cooldownTicks = 200; + this.windUpTicks = 60; + this.activeTicks = 400; // Long duration - entity controls actual end + this.recoveryTicks = 5; // Short recovery + // Circle telegraph to show range + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilitySweeper(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + if (!world.isRemote) { + LogWriter.info("[Sweeper] onExecute called at NPC pos " + npc.posX + ", " + npc.posY + ", " + npc.posZ); + + // Spawn the entity that handles BOTH visuals AND damage + activeEntity = new EntityAbilitySweeper(world, npc, target, + beamLength, beamWidth, beamHeight, + innerColor, outerColor, + sweepSpeed, numberOfRotations, + damage, damageInterval, piercing, + lockOnTarget); + world.spawnEntityInWorld(activeEntity); + + LogWriter.info("[Sweeper] Spawned sweeper entity"); + } + } + + @Override + public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // Entity handles everything - nothing to do here + // Check if entity died early (entity manages its own death based on rotations) + if (activeEntity != null && activeEntity.isDead) { + // Entity finished, ability can end early + // The ability system will handle the recovery phase + } + } + + @Override + public void reset() { + super.reset(); + + // Clean up entity if still alive + if (activeEntity != null && !activeEntity.isDead) { + activeEntity.setDead(); + } + activeEntity = null; + } + + @Override + public float getTelegraphRadius() { + return beamLength; + } + + /** + * Override to position telegraph at NPC (not target) since the sweep is centered on NPC. + */ + @Override + public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE) { + return null; + } + + // Create circle telegraph centered on NPC + Telegraph telegraph = Telegraph.circle(beamLength); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at NPC, not target + TelegraphInstance instance = new TelegraphInstance(telegraph, npc.posX, npc.posY, npc.posZ, npc.rotationYaw); + instance.setCasterEntityId(npc.getEntityId()); + instance.setEntityIdToFollow(npc.getEntityId()); // Follow NPC + + return instance; + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("beamLength", beamLength); + nbt.setFloat("beamWidth", beamWidth); + nbt.setFloat("beamHeight", beamHeight); + nbt.setFloat("damage", damage); + nbt.setInteger("damageInterval", damageInterval); + nbt.setBoolean("piercing", piercing); + nbt.setFloat("sweepSpeed", sweepSpeed); + nbt.setInteger("numberOfRotations", numberOfRotations); + nbt.setBoolean("lockOnTarget", lockOnTarget); + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + this.beamLength = nbt.hasKey("beamLength") ? nbt.getFloat("beamLength") : 10.0f; + this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.3f; + this.beamHeight = nbt.hasKey("beamHeight") ? nbt.getFloat("beamHeight") : 0.8f; + this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 5.0f; + this.damageInterval = nbt.hasKey("damageInterval") ? nbt.getInteger("damageInterval") : 5; + this.piercing = !nbt.hasKey("piercing") || nbt.getBoolean("piercing"); + this.sweepSpeed = nbt.hasKey("sweepSpeed") ? nbt.getFloat("sweepSpeed") : 3.0f; + this.numberOfRotations = nbt.hasKey("numberOfRotations") ? nbt.getInteger("numberOfRotations") : 2; + this.lockOnTarget = nbt.hasKey("lockOnTarget") && nbt.getBoolean("lockOnTarget"); + this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFF6600; + this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + } + + // Getters & Setters + public float getBeamLength() { return beamLength; } + public void setBeamLength(float beamLength) { this.beamLength = beamLength; } + public float getBeamWidth() { return beamWidth; } + public void setBeamWidth(float beamWidth) { this.beamWidth = beamWidth; } + public float getBeamHeight() { return beamHeight; } + public void setBeamHeight(float beamHeight) { this.beamHeight = beamHeight; } + public float getDamage() { return damage; } + public void setDamage(float damage) { this.damage = damage; } + public int getDamageInterval() { return damageInterval; } + public void setDamageInterval(int damageInterval) { this.damageInterval = damageInterval; } + public boolean isPiercing() { return piercing; } + public void setPiercing(boolean piercing) { this.piercing = piercing; } + public float getSweepSpeed() { return sweepSpeed; } + public void setSweepSpeed(float sweepSpeed) { this.sweepSpeed = sweepSpeed; } + public int getNumberOfRotations() { return numberOfRotations; } + public void setNumberOfRotations(int numberOfRotations) { this.numberOfRotations = numberOfRotations; } + public boolean isLockOnTarget() { return lockOnTarget; } + public void setLockOnTarget(boolean lockOnTarget) { this.lockOnTarget = lockOnTarget; } + public int getInnerColor() { return innerColor; } + public void setInnerColor(int innerColor) { this.innerColor = innerColor; } + public int getOuterColor() { return outerColor; } + public void setOuterColor(int outerColor) { this.outerColor = outerColor; } + public float getOuterColorWidth() { return outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public boolean isOuterColorEnabled() { return outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index 05eb43798..fa2fefb4c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -137,31 +137,6 @@ public class AbilityTrap extends Ability { return instance; } - /** - * Calculates offset position near the given coordinates. - */ - private double[] calculateOffsetPosition(double baseX, double baseY, double baseZ) { - if (maxOffset <= 0) { - return new double[]{baseX, baseY, baseZ}; - } - - double offsetDist; - double offsetAngle; - - if (randomOffset) { - offsetDist = minOffset + RANDOM.nextDouble() * (maxOffset - minOffset); - offsetAngle = RANDOM.nextDouble() * Math.PI * 2; - } else { - offsetDist = maxOffset; - offsetAngle = RANDOM.nextDouble() * Math.PI * 2; - } - - double offsetX = Math.cos(offsetAngle) * offsetDist; - double offsetZ = Math.sin(offsetAngle) * offsetDist; - - return new double[]{baseX + offsetX, baseY, baseZ + offsetZ}; - } - @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { armed = false; @@ -181,12 +156,18 @@ public class AbilityTrap extends Ability { case AT_TARGET: // Use telegraph position with offset if (telegraph != null) { - double[] pos = calculateOffsetPosition(telegraph.getX(), telegraph.getY(), telegraph.getZ()); + double[] pos = Ability.calculateOffsetPosition(telegraph.getX(), telegraph.getY(), telegraph.getZ(), + minOffset, maxOffset, randomOffset, RANDOM); trapX = pos[0]; trapY = pos[1]; trapZ = pos[2]; + // Update telegraph to show actual trap position + telegraph.setX(trapX); + telegraph.setY(trapY); + telegraph.setZ(trapZ); } else if (target != null) { - double[] pos = calculateOffsetPosition(target.posX, target.posY, target.posZ); + double[] pos = Ability.calculateOffsetPosition(target.posX, target.posY, target.posZ, + minOffset, maxOffset, randomOffset, RANDOM); trapX = pos[0]; trapY = pos[1]; trapZ = pos[2]; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index dee010da0..f0e08dd56 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -53,7 +53,7 @@ public class AbilityVortex extends Ability { this.cooldownTicks = 120; this.windUpTicks = 30; this.activeTicks = 40; - this.recoveryTicks = 20; + this.recoveryTicks = 5; this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "mob.ghast.charge"; this.activeSound = "mob.ghast.fireball"; diff --git a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java index 9f90bc29b..47fdf8cbb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java +++ b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java @@ -1,6 +1,6 @@ package kamkeel.npcs.controllers.data.telegraph; -import net.minecraft.block.Block; +import kamkeel.npcs.controllers.data.ability.Ability; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -77,7 +77,7 @@ public class TelegraphInstance { this.x = entity.posX; this.z = entity.posZ; // Find ground level below the entity for proper telegraph placement - this.y = findGroundLevel(world, entity.posX, entity.posY, entity.posZ); + this.y = Ability.findGroundLevel(world, entity.posX, entity.posY, entity.posZ); } } @@ -91,34 +91,6 @@ public class TelegraphInstance { return true; } - /** - * Find the ground level at a given position. - * Searches downward from the given Y to find a solid block. - * - * @param world The world - * @param x X coordinate - * @param startY Starting Y coordinate (entity feet position) - * @param z Z coordinate - * @return The Y coordinate of the ground surface - */ - private double findGroundLevel(World world, double x, double startY, double z) { - int blockX = (int) Math.floor(x); - int blockZ = (int) Math.floor(z); - int startBlockY = (int) Math.floor(startY); - - // Search downward for solid ground (max 10 blocks down) - for (int checkY = startBlockY; checkY >= startBlockY - 10 && checkY >= 0; checkY--) { - Block block = world.getBlock(blockX, checkY, blockZ); - if (block != null && block.getMaterial().isSolid()) { - // Found solid block, telegraph goes on top of it - return checkY + 1; - } - } - - // No ground found, use original position - return startY; - } - /** * Get progress from 0.0 (just started) to 1.0 (finished). */ diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java new file mode 100644 index 000000000..586e57ae9 --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -0,0 +1,428 @@ +package kamkeel.npcs.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.LogWriter; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.ArrayList; +import java.util.List; + +/** + * Beam projectile - head with trailing path that curves with homing. + * Stays attached to origin point, trail shows path of head. + * + * IMPORTANT: Trail points are stored RELATIVE to startX/Y/Z (origin). + * This ensures rendering is stable regardless of entity position interpolation. + * + * Design inspired by LouisXIV's energy attack system. + */ +public class EntityAbilityBeam extends EntityAbilityProjectile { + + // Beam-specific movement properties + private float speed = 0.5f; + private boolean homing = true; + private float homingStrength = 0.35f; // Increased from 0.15 for better tracking + private float homingRange = 20.0f; + + // Beam shape properties + private float beamWidth = 0.3f; + private float headSize = 0.5f; + + // Trail - list of points showing beam path (RELATIVE to origin!) + private List trailPoints = new ArrayList<>(); + private static final int MAX_TRAIL_POINTS = 200; + private static final double MIN_POINT_DISTANCE = 0.2; + + // Head position relative to origin + private double headOffsetX, headOffsetY, headOffsetZ; + private double prevHeadOffsetX, prevHeadOffsetY, prevHeadOffsetZ; + + // Origin stays fixed (or follows owner) + private boolean attachedToOwner = true; + + // Debug logging + private static final boolean DEBUG_LOGGING = true; + + public EntityAbilityBeam(World world) { + super(world); + } + + /** + * Full constructor with all parameters. + */ + public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float beamWidth, float headSize, int innerColor, int outerColor, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime) { + super(world); + + // Initialize base properties + initProjectile(owner, target, x, y, z, + headSize, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime); + + // Beam-specific properties + this.speed = speed; + this.homing = homing; + this.homingStrength = homingStrength; + this.homingRange = homingRange; + this.beamWidth = beamWidth; + this.headSize = headSize; + + // Initialize head offset at origin (0,0,0 relative) + this.headOffsetX = 0; + this.headOffsetY = 0; + this.headOffsetZ = 0; + this.prevHeadOffsetX = 0; + this.prevHeadOffsetY = 0; + this.prevHeadOffsetZ = 0; + + // Add initial trail point at origin (relative 0,0,0) + trailPoints.add(Vec3.createVectorHelper(0, 0, 0)); + + if (DEBUG_LOGGING && !world.isRemote) { + LogWriter.info("[Beam] Created at origin " + x + ", " + y + ", " + z + " maxDist=" + maxDistance); + } + + // Calculate initial velocity toward target + if (target != null) { + double dx = target.posX - x; + double dy = (target.posY + target.height * 0.5) - y; + double dz = target.posZ - z; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + this.motionX = (dx / len) * speed; + this.motionY = (dy / len) * speed; + this.motionZ = (dz / len) * speed; + } + } else { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + this.motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + this.motionY = -Math.sin(pitch) * speed; + this.motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + } + + @Override + protected boolean checkMaxDistance() { + // Check distance using head offset (distance from origin) + double distFromOrigin = Math.sqrt( + headOffsetX * headOffsetX + + headOffsetY * headOffsetY + + headOffsetZ * headOffsetZ + ); + boolean exceeded = distFromOrigin >= maxDistance; + if (exceeded && !worldObj.isRemote && DEBUG_LOGGING) { + LogWriter.info("[Beam] DEAD: Max distance exceeded. dist=" + distFromOrigin + " max=" + maxDistance); + } + return exceeded; + } + + @Override + protected void updateProjectile() { + // Store previous head offset for interpolation + prevHeadOffsetX = headOffsetX; + prevHeadOffsetY = headOffsetY; + prevHeadOffsetZ = headOffsetZ; + + if (worldObj.isRemote) { + // Client: interpolate entity position, derive head from offset + handleClientInterpolation(); + + // Client also updates head offset to match motion for smooth movement + headOffsetX += motionX; + headOffsetY += motionY; + headOffsetZ += motionZ; + + // Add trail point on client + addTrailPoint(); + } else { + // Server-side logic + updateHoming(); + + // Move head offset + headOffsetX += motionX; + headOffsetY += motionY; + headOffsetZ += motionZ; + + // Update origin if attached to owner + if (attachedToOwner) { + Entity owner = getOwner(); + if (owner != null) { + startX = owner.posX; + startY = owner.posY + owner.height * 0.7; + startZ = owner.posZ; + } + } + + // Calculate world position of head for collision detection + double headWorldX = startX + headOffsetX; + double headWorldY = startY + headOffsetY; + double headWorldZ = startZ + headOffsetZ; + + // Update entity position to head (for network sync) + this.setPosition(headWorldX, headWorldY, headWorldZ); + + // Add trail point + addTrailPoint(); + + // Debug log periodically + if (DEBUG_LOGGING && ticksExisted % 20 == 0) { + LogWriter.info("[Beam] Server tick=" + ticksExisted + " headOffset=(" + + String.format("%.2f", headOffsetX) + "," + + String.format("%.2f", headOffsetY) + "," + + String.format("%.2f", headOffsetZ) + ") origin=(" + + String.format("%.2f", startX) + "," + + String.format("%.2f", startY) + "," + + String.format("%.2f", startZ) + ") trail=" + trailPoints.size()); + } + + // Skip collision checks on first few ticks + if (ticksExisted > 2) { + checkBlockCollision(headWorldX, headWorldY, headWorldZ); + checkEntityCollision(headWorldX, headWorldY, headWorldZ); + } + } + } + + private void addTrailPoint() { + // Trail points are RELATIVE to origin + if (trailPoints.isEmpty()) { + trailPoints.add(Vec3.createVectorHelper(headOffsetX, headOffsetY, headOffsetZ)); + return; + } + + Vec3 lastPoint = trailPoints.get(trailPoints.size() - 1); + double dist = Math.sqrt( + (headOffsetX - lastPoint.xCoord) * (headOffsetX - lastPoint.xCoord) + + (headOffsetY - lastPoint.yCoord) * (headOffsetY - lastPoint.yCoord) + + (headOffsetZ - lastPoint.zCoord) * (headOffsetZ - lastPoint.zCoord) + ); + + if (dist >= MIN_POINT_DISTANCE) { + trailPoints.add(Vec3.createVectorHelper(headOffsetX, headOffsetY, headOffsetZ)); + + // Limit trail length + while (trailPoints.size() > MAX_TRAIL_POINTS) { + trailPoints.remove(0); + } + } + } + + private void updateHoming() { + if (!homing) return; + + Entity target = getTarget(); + if (target == null || !target.isEntityAlive()) return; + + // Calculate world position of head + double headWorldX = startX + headOffsetX; + double headWorldY = startY + headOffsetY; + double headWorldZ = startZ + headOffsetZ; + + double dx = target.posX - headWorldX; + double dy = (target.posY + target.height * 0.5) - headWorldY; + double dz = target.posZ - headWorldZ; + double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (dist <= homingRange && dist > 0) { + // Calculate effective homing strength - increases when closer to commit to target + float effectiveStrength = homingStrength; + if (dist < homingRange * 0.3) { + effectiveStrength = Math.min(1.0f, homingStrength * 2.5f); + } else if (dist < homingRange * 0.6) { + effectiveStrength = Math.min(0.8f, homingStrength * 1.5f); + } + + double desiredVX = (dx / dist) * speed; + double desiredVY = (dy / dist) * speed; + double desiredVZ = (dz / dist) * speed; + + motionX += (desiredVX - motionX) * effectiveStrength; + motionY += (desiredVY - motionY) * effectiveStrength; + motionZ += (desiredVZ - motionZ) * effectiveStrength; + + double vLen = Math.sqrt(motionX * motionX + motionY * motionY + motionZ * motionZ); + if (vLen > 0) { + motionX = (motionX / vLen) * speed; + motionY = (motionY / vLen) * speed; + motionZ = (motionZ / vLen) * speed; + } + } + } + + private void checkBlockCollision(double headX, double headY, double headZ) { + // Previous head world position + double prevHeadWorldX = startX + prevHeadOffsetX; + double prevHeadWorldY = startY + prevHeadOffsetY; + double prevHeadWorldZ = startZ + prevHeadOffsetZ; + + Vec3 currentPos = Vec3.createVectorHelper(prevHeadWorldX, prevHeadWorldY, prevHeadWorldZ); + Vec3 nextPos = Vec3.createVectorHelper(headX, headY, headZ); + MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + + if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + if (DEBUG_LOGGING) { + LogWriter.info("[Beam] DEAD: Block collision at tick " + ticksExisted); + } + hasHit = true; + if (explosive) { + posX = blockHit.hitVec.xCoord; + posY = blockHit.hitVec.yCoord; + posZ = blockHit.hitVec.zCoord; + doExplosion(); + } + this.setDead(); + } + } + + private void checkEntityCollision(double headX, double headY, double headZ) { + double hitSize = headSize * 0.5; + AxisAlignedBB hitBox = AxisAlignedBB.getBoundingBox( + headX - hitSize, headY - hitSize, headZ - hitSize, + headX + hitSize, headY + hitSize, headZ + hitSize + ); + + @SuppressWarnings("unchecked") + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, hitBox); + + for (EntityLivingBase entity : entities) { + if (shouldIgnoreEntity(entity)) continue; + + if (DEBUG_LOGGING) { + LogWriter.info("[Beam] DEAD: Entity collision with " + entity.getClass().getSimpleName() + " at tick " + ticksExisted); + } + hasHit = true; + + if (explosive) { + posX = headX; + posY = headY; + posZ = headZ; + doExplosion(); + } else { + applyDamage(entity); + } + + this.setDead(); + return; + } + } + + // ==================== GETTERS FOR RENDERER ==================== + + public float getBeamWidth() { + return beamWidth; + } + + public float getHeadSize() { + return headSize; + } + + /** + * Get interpolated head offset for smooth rendering. + * Returns offset RELATIVE to origin. + */ + public double getInterpolatedHeadOffsetX(float partialTicks) { + return prevHeadOffsetX + (headOffsetX - prevHeadOffsetX) * partialTicks; + } + + public double getInterpolatedHeadOffsetY(float partialTicks) { + return prevHeadOffsetY + (headOffsetY - prevHeadOffsetY) * partialTicks; + } + + public double getInterpolatedHeadOffsetZ(float partialTicks) { + return prevHeadOffsetZ + (headOffsetZ - prevHeadOffsetZ) * partialTicks; + } + + /** + * Get trail points. These are RELATIVE to origin (startX/Y/Z). + */ + public List getTrailPoints() { + return trailPoints; + } + + public double getOriginX() { + return startX; + } + + public double getOriginY() { + return startY; + } + + public double getOriginZ() { + return startZ; + } + + // ==================== NBT ==================== + + @Override + protected void readProjectileNBT(NBTTagCompound nbt) { + this.speed = nbt.hasKey("Speed") ? nbt.getFloat("Speed") : 0.5f; + this.homing = !nbt.hasKey("Homing") || nbt.getBoolean("Homing"); + this.homingStrength = nbt.hasKey("HomingStrength") ? nbt.getFloat("HomingStrength") : 0.15f; + this.homingRange = nbt.hasKey("HomingRange") ? nbt.getFloat("HomingRange") : 20.0f; + this.beamWidth = nbt.hasKey("BeamWidth") ? nbt.getFloat("BeamWidth") : 0.3f; + this.headSize = nbt.hasKey("HeadSize") ? nbt.getFloat("HeadSize") : 0.5f; + this.headOffsetX = nbt.hasKey("HeadOffsetX") ? nbt.getDouble("HeadOffsetX") : 0; + this.headOffsetY = nbt.hasKey("HeadOffsetY") ? nbt.getDouble("HeadOffsetY") : 0; + this.headOffsetZ = nbt.hasKey("HeadOffsetZ") ? nbt.getDouble("HeadOffsetZ") : 0; + this.prevHeadOffsetX = this.headOffsetX; + this.prevHeadOffsetY = this.headOffsetY; + this.prevHeadOffsetZ = this.headOffsetZ; + this.attachedToOwner = !nbt.hasKey("AttachedToOwner") || nbt.getBoolean("AttachedToOwner"); + + // Read trail points (relative to origin) + trailPoints.clear(); + if (nbt.hasKey("Trail")) { + NBTTagList trailList = nbt.getTagList("Trail", 10); + for (int i = 0; i < trailList.tagCount(); i++) { + NBTTagCompound point = trailList.getCompoundTagAt(i); + trailPoints.add(Vec3.createVectorHelper( + point.getDouble("X"), + point.getDouble("Y"), + point.getDouble("Z") + )); + } + } + } + + @Override + protected void writeProjectileNBT(NBTTagCompound nbt) { + nbt.setFloat("Speed", speed); + nbt.setBoolean("Homing", homing); + nbt.setFloat("HomingStrength", homingStrength); + nbt.setFloat("HomingRange", homingRange); + nbt.setFloat("BeamWidth", beamWidth); + nbt.setFloat("HeadSize", headSize); + nbt.setDouble("HeadOffsetX", headOffsetX); + nbt.setDouble("HeadOffsetY", headOffsetY); + nbt.setDouble("HeadOffsetZ", headOffsetZ); + nbt.setBoolean("AttachedToOwner", attachedToOwner); + + // Write trail points + NBTTagList trailList = new NBTTagList(); + for (Vec3 point : trailPoints) { + NBTTagCompound pointNbt = new NBTTagCompound(); + pointNbt.setDouble("X", point.xCoord); + pointNbt.setDouble("Y", point.yCoord); + pointNbt.setDouble("Z", point.zCoord); + trailList.appendTag(pointNbt); + } + nbt.setTag("Trail", trailList); + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java new file mode 100644 index 000000000..e46542d8c --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -0,0 +1,329 @@ +package kamkeel.npcs.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.List; + +/** + * Disc projectile - flat spinning disc with optional boomerang behavior. + * Has a wider, thinner hitbox compared to Orb. + * + * Design inspired by LouisXIV's energy attack system. + */ +public class EntityAbilityDisc extends EntityAbilityProjectile { + + // Disc-specific movement properties + private float speed = 0.5f; + private boolean homing = true; + private float homingStrength = 0.35f; // Increased from 0.15 for better tracking + private float homingRange = 20.0f; + + // Boomerang properties + private boolean boomerang = false; + private int boomerangDelay = 40; // Ticks before returning + private boolean returning = false; + private int ticksSinceMiss = 0; + + // Disc shape properties + private float discRadius = 1.0f; // Width of disc + private float discThickness = 0.2f; // Height of disc + + public EntityAbilityDisc(World world) { + super(world); + } + + /** + * Full constructor with all parameters. + */ + public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float discRadius, float discThickness, int innerColor, int outerColor, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean boomerang, int boomerangDelay, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime) { + super(world); + + // Initialize base properties (use discRadius as size for base) + initProjectile(owner, target, x, y, z, + discRadius, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime); + + // Disc-specific properties + this.speed = speed; + this.homing = homing; + this.homingStrength = homingStrength; + this.homingRange = homingRange; + + this.boomerang = boomerang; + this.boomerangDelay = boomerangDelay; + + this.discRadius = discRadius; + this.discThickness = discThickness; + + // Calculate initial velocity toward target + if (target != null) { + double dx = target.posX - x; + double dy = (target.posY + target.height * 0.5) - y; + double dz = target.posZ - z; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + this.motionX = (dx / len) * speed; + this.motionY = (dy / len) * speed; + this.motionZ = (dz / len) * speed; + } + } else { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + this.motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + this.motionY = -Math.sin(pitch) * speed; + this.motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + } + + @Override + protected void updateRotation() { + // Disc spins ONLY on Y axis (flat spin like a saw blade) + this.rotationValY += rotationSpeed; + // No wobble - keep X and Z at 0 for stable flight + if (this.rotationValY > 360.0f) this.rotationValY -= 360.0f; + } + + @Override + protected void updateProjectile() { + if (worldObj.isRemote) { + handleClientInterpolation(); + } else { + // Server-side logic + if (returning) { + updateReturnToOwner(); + } else { + updateHoming(); + } + + checkBlockCollision(); + checkEntityCollision(); + this.moveEntity(motionX, motionY, motionZ); + + // Boomerang: if we've traveled far without hitting, start returning + if (boomerang && !returning && !hasHit) { + double distTraveled = Math.sqrt( + (posX - startX) * (posX - startX) + + (posY - startY) * (posY - startY) + + (posZ - startZ) * (posZ - startZ) + ); + // Start returning at 80% of max distance or after delay + if (distTraveled >= maxDistance * 0.8 || ticksSinceMiss >= boomerangDelay) { + returning = true; + } + ticksSinceMiss++; + } + } + + // Check wall collision + if (this.isCollidedHorizontally || this.isCollidedVertically) { + if (!worldObj.isRemote) { + hasHit = true; + if (explosive) { + doExplosion(); + } + } + this.setDead(); + } + } + + @Override + protected boolean checkMaxDistance() { + // If boomerang and returning, don't die from max distance + if (boomerang && returning) { + // Die if we get close to owner + Entity owner = getOwner(); + if (owner != null) { + double distToOwner = Math.sqrt( + (posX - owner.posX) * (posX - owner.posX) + + (posY - owner.posY) * (posY - owner.posY) + + (posZ - owner.posZ) * (posZ - owner.posZ) + ); + return distToOwner < 1.0; + } + } + return super.checkMaxDistance(); + } + + private void updateHoming() { + if (!homing) return; + + Entity target = getTarget(); + if (target == null || !target.isEntityAlive()) return; + + double dx = target.posX - posX; + double dy = (target.posY + target.height * 0.5) - posY; + double dz = target.posZ - posZ; + double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (dist <= homingRange && dist > 0) { + // Calculate effective homing strength - increases when closer to commit to target + float effectiveStrength = homingStrength; + if (dist < homingRange * 0.3) { + effectiveStrength = Math.min(1.0f, homingStrength * 2.5f); + } else if (dist < homingRange * 0.6) { + effectiveStrength = Math.min(0.8f, homingStrength * 1.5f); + } + + double desiredVX = (dx / dist) * speed; + double desiredVY = (dy / dist) * speed; + double desiredVZ = (dz / dist) * speed; + + motionX += (desiredVX - motionX) * effectiveStrength; + motionY += (desiredVY - motionY) * effectiveStrength; + motionZ += (desiredVZ - motionZ) * effectiveStrength; + + double vLen = Math.sqrt(motionX * motionX + motionY * motionY + motionZ * motionZ); + if (vLen > 0) { + motionX = (motionX / vLen) * speed; + motionY = (motionY / vLen) * speed; + motionZ = (motionZ / vLen) * speed; + } + } + } + + private void updateReturnToOwner() { + Entity owner = getOwner(); + if (owner == null) { + this.setDead(); + return; + } + + double dx = owner.posX - posX; + double dy = (owner.posY + owner.height * 0.5) - posY; + double dz = owner.posZ - posZ; + double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (dist > 0) { + // Stronger homing when returning + double returnStrength = homingStrength * 2.0; + double desiredVX = (dx / dist) * speed; + double desiredVY = (dy / dist) * speed; + double desiredVZ = (dz / dist) * speed; + + motionX += (desiredVX - motionX) * returnStrength; + motionY += (desiredVY - motionY) * returnStrength; + motionZ += (desiredVZ - motionZ) * returnStrength; + + double vLen = Math.sqrt(motionX * motionX + motionY * motionY + motionZ * motionZ); + if (vLen > 0) { + motionX = (motionX / vLen) * speed; + motionY = (motionY / vLen) * speed; + motionZ = (motionZ / vLen) * speed; + } + } + } + + private void checkBlockCollision() { + Vec3 currentPos = Vec3.createVectorHelper(posX, posY, posZ); + Vec3 nextPos = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ); + MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + + if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + hasHit = true; + if (explosive) { + doExplosion(); + } + this.setDead(); + } + } + + private void checkEntityCollision() { + // Disc hitbox: wider but thinner + double halfWidth = discRadius * 0.5; + double halfHeight = discThickness * 0.5; + AxisAlignedBB hitBox = AxisAlignedBB.getBoundingBox( + posX - halfWidth, posY - halfHeight, posZ - halfWidth, + posX + halfWidth, posY + halfHeight, posZ + halfWidth + ); + + @SuppressWarnings("unchecked") + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, hitBox); + + for (EntityLivingBase entity : entities) { + if (shouldIgnoreEntity(entity)) continue; + + hasHit = true; + + if (explosive) { + doExplosion(); + } else { + applyDamage(entity); + } + + this.setDead(); + return; + } + } + + // ==================== GETTERS ==================== + + public float getSpeed() { + return speed; + } + + public boolean isHoming() { + return homing; + } + + public float getDiscRadius() { + return discRadius; + } + + public float getDiscThickness() { + return discThickness; + } + + public boolean isBoomerang() { + return boomerang; + } + + public boolean isReturning() { + return returning; + } + + // ==================== NBT ==================== + + @Override + protected void readProjectileNBT(NBTTagCompound nbt) { + this.speed = nbt.hasKey("Speed") ? nbt.getFloat("Speed") : 0.5f; + this.homing = !nbt.hasKey("Homing") || nbt.getBoolean("Homing"); + this.homingStrength = nbt.hasKey("HomingStrength") ? nbt.getFloat("HomingStrength") : 0.15f; + this.homingRange = nbt.hasKey("HomingRange") ? nbt.getFloat("HomingRange") : 20.0f; + this.boomerang = nbt.hasKey("Boomerang") && nbt.getBoolean("Boomerang"); + this.boomerangDelay = nbt.hasKey("BoomerangDelay") ? nbt.getInteger("BoomerangDelay") : 40; + this.discRadius = nbt.hasKey("DiscRadius") ? nbt.getFloat("DiscRadius") : 1.0f; + this.discThickness = nbt.hasKey("DiscThickness") ? nbt.getFloat("DiscThickness") : 0.2f; + this.returning = nbt.hasKey("Returning") && nbt.getBoolean("Returning"); + } + + @Override + protected void writeProjectileNBT(NBTTagCompound nbt) { + nbt.setFloat("Speed", speed); + nbt.setBoolean("Homing", homing); + nbt.setFloat("HomingStrength", homingStrength); + nbt.setFloat("HomingRange", homingRange); + nbt.setBoolean("Boomerang", boomerang); + nbt.setInteger("BoomerangDelay", boomerangDelay); + nbt.setFloat("DiscRadius", discRadius); + nbt.setFloat("DiscThickness", discThickness); + nbt.setBoolean("Returning", returning); + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java new file mode 100644 index 000000000..02b797524 --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -0,0 +1,326 @@ +package kamkeel.npcs.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Laser projectile - fast expanding thin line that pierces through multiple targets. + * No homing, travels in a straight line from origin to max distance. + * + * Design inspired by LouisXIV's energy attack system. + */ +public class EntityAbilityLaser extends EntityAbilityProjectile { + + // Laser-specific properties + private float laserWidth = 0.2f; + private float expansionSpeed = 2.0f; // Blocks per tick + private int lingerTicks = 10; // How long laser stays visible after reaching max + + // State + private float currentLength = 0.0f; + private boolean fullyExtended = false; + private int ticksSinceFullExtension = 0; + + // Direction (normalized) + private double dirX, dirY, dirZ; + + // Track hit entities to avoid double-damage + private Set hitEntities = new HashSet<>(); + + // End point for rendering + private double endX, endY, endZ; + + public EntityAbilityLaser(World world) { + super(world); + } + + /** + * Full constructor with all parameters. + */ + public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float laserWidth, int innerColor, int outerColor, + float damage, float knockback, float knockbackUp, + float expansionSpeed, int lingerTicks, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime) { + super(world); + + // Initialize base properties + initProjectile(owner, target, x, y, z, + laserWidth, innerColor, outerColor, 0.0f, // No rotation for laser + damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime); + + // Laser-specific properties + this.laserWidth = laserWidth; + this.expansionSpeed = expansionSpeed; + this.lingerTicks = lingerTicks; + + // Calculate direction toward target or forward + if (target != null) { + double dx = target.posX - x; + double dy = (target.posY + target.height * 0.5) - y; + double dz = target.posZ - z; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + this.dirX = dx / len; + this.dirY = dy / len; + this.dirZ = dz / len; + } + } else { + // Fire in NPC's facing direction + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + this.dirX = -Math.sin(yaw) * Math.cos(pitch); + this.dirY = -Math.sin(pitch); + this.dirZ = Math.cos(yaw) * Math.cos(pitch); + } + + // Initialize end point + this.endX = x; + this.endY = y; + this.endZ = z; + } + + @Override + protected void updateRotation() { + // Laser doesn't rotate + } + + @Override + protected boolean checkMaxDistance() { + // Laser handles distance differently - it expands to max then lingers + return false; + } + + @Override + protected void updateProjectile() { + if (!fullyExtended) { + // Expand the laser + currentLength += expansionSpeed; + + if (currentLength >= maxDistance) { + currentLength = maxDistance; + fullyExtended = true; + } + + // Update end point + endX = startX + dirX * currentLength; + endY = startY + dirY * currentLength; + endZ = startZ + dirZ * currentLength; + + // Check for block collision along the new segment + if (!worldObj.isRemote) { + checkBlockCollision(); + checkEntityCollisionAlongLine(); + } + } else { + // Laser is fully extended, count down linger time + ticksSinceFullExtension++; + if (ticksSinceFullExtension >= lingerTicks) { + this.setDead(); + } + } + } + + private void checkBlockCollision() { + Vec3 start = Vec3.createVectorHelper(startX, startY, startZ); + Vec3 end = Vec3.createVectorHelper(endX, endY, endZ); + MovingObjectPosition blockHit = worldObj.rayTraceBlocks(start, end); + + if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + // Laser stops at block + currentLength = (float) Math.sqrt( + (blockHit.hitVec.xCoord - startX) * (blockHit.hitVec.xCoord - startX) + + (blockHit.hitVec.yCoord - startY) * (blockHit.hitVec.yCoord - startY) + + (blockHit.hitVec.zCoord - startZ) * (blockHit.hitVec.zCoord - startZ) + ); + endX = blockHit.hitVec.xCoord; + endY = blockHit.hitVec.yCoord; + endZ = blockHit.hitVec.zCoord; + fullyExtended = true; + + if (explosive) { + // Explode at hit point + double oldPosX = posX; + double oldPosY = posY; + double oldPosZ = posZ; + posX = endX; + posY = endY; + posZ = endZ; + doExplosion(); + posX = oldPosX; + posY = oldPosY; + posZ = oldPosZ; + } + } + } + + private void checkEntityCollisionAlongLine() { + // Check collision along the entire laser line + // Use a slightly expanded AABB for the full line + double minX = Math.min(startX, endX) - laserWidth; + double minY = Math.min(startY, endY) - laserWidth; + double minZ = Math.min(startZ, endZ) - laserWidth; + double maxX = Math.max(startX, endX) + laserWidth; + double maxY = Math.max(startY, endY) + laserWidth; + double maxZ = Math.max(startZ, endZ) + laserWidth; + + AxisAlignedBB searchBox = AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ); + + @SuppressWarnings("unchecked") + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, searchBox); + + for (EntityLivingBase entity : entities) { + if (shouldIgnoreEntity(entity)) continue; + if (hitEntities.contains(entity.getEntityId())) continue; + + // Check if entity is close to the laser line + if (isEntityOnLine(entity)) { + hitEntities.add(entity.getEntityId()); + applyDamage(entity); + + // Piercing - don't stop, continue to next entity + } + } + } + + /** + * Check if an entity intersects with the laser line. + */ + private boolean isEntityOnLine(EntityLivingBase entity) { + // Get entity center + double ex = entity.posX; + double ey = entity.posY + entity.height * 0.5; + double ez = entity.posZ; + + // Vector from start to entity + double vx = ex - startX; + double vy = ey - startY; + double vz = ez - startZ; + + // Project onto line direction + double dot = vx * dirX + vy * dirY + vz * dirZ; + + // Clamp to line segment + dot = Math.max(0, Math.min(dot, currentLength)); + + // Closest point on line + double closestX = startX + dirX * dot; + double closestY = startY + dirY * dot; + double closestZ = startZ + dirZ * dot; + + // Distance from entity to closest point + double distSq = (ex - closestX) * (ex - closestX) + + (ey - closestY) * (ey - closestY) + + (ez - closestZ) * (ez - closestZ); + + // Hit if within laser width + entity radius + double hitRadius = laserWidth * 0.5 + entity.width * 0.5; + return distSq <= hitRadius * hitRadius; + } + + // ==================== GETTERS FOR RENDERER ==================== + + public float getLaserWidth() { + return laserWidth; + } + + public float getCurrentLength() { + return currentLength; + } + + public boolean isFullyExtended() { + return fullyExtended; + } + + public double getStartX() { + return startX; + } + + public double getStartY() { + return startY; + } + + public double getStartZ() { + return startZ; + } + + public double getEndX() { + return endX; + } + + public double getEndY() { + return endY; + } + + public double getEndZ() { + return endZ; + } + + public double getDirX() { + return dirX; + } + + public double getDirY() { + return dirY; + } + + public double getDirZ() { + return dirZ; + } + + /** + * Get the alpha for fade-out effect during linger. + */ + public float getLingerAlpha() { + if (!fullyExtended) return 1.0f; + return 1.0f - ((float) ticksSinceFullExtension / lingerTicks); + } + + // ==================== NBT ==================== + + @Override + protected void readProjectileNBT(NBTTagCompound nbt) { + this.laserWidth = nbt.hasKey("LaserWidth") ? nbt.getFloat("LaserWidth") : 0.2f; + this.expansionSpeed = nbt.hasKey("ExpansionSpeed") ? nbt.getFloat("ExpansionSpeed") : 2.0f; + this.lingerTicks = nbt.hasKey("LingerTicks") ? nbt.getInteger("LingerTicks") : 10; + this.dirX = nbt.getDouble("DirX"); + this.dirY = nbt.getDouble("DirY"); + this.dirZ = nbt.getDouble("DirZ"); + this.currentLength = nbt.getFloat("CurrentLength"); + this.fullyExtended = nbt.getBoolean("FullyExtended"); + this.endX = nbt.getDouble("EndX"); + this.endY = nbt.getDouble("EndY"); + this.endZ = nbt.getDouble("EndZ"); + } + + @Override + protected void writeProjectileNBT(NBTTagCompound nbt) { + nbt.setFloat("LaserWidth", laserWidth); + nbt.setFloat("ExpansionSpeed", expansionSpeed); + nbt.setInteger("LingerTicks", lingerTicks); + nbt.setDouble("DirX", dirX); + nbt.setDouble("DirY", dirY); + nbt.setDouble("DirZ", dirZ); + nbt.setFloat("CurrentLength", currentLength); + nbt.setBoolean("FullyExtended", fullyExtended); + nbt.setDouble("EndX", endX); + nbt.setDouble("EndY", endY); + nbt.setDouble("EndZ", endZ); + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java new file mode 100644 index 000000000..c218007a0 --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -0,0 +1,225 @@ +package kamkeel.npcs.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.List; + +/** + * Orb projectile - spherical homing energy ball. + * Extends EntityAbilityProjectile for shared functionality. + * + * Design inspired by LouisXIV's energy attack system. + */ +public class EntityAbilityOrb extends EntityAbilityProjectile { + + // Orb-specific movement properties + private float speed = 0.5f; + private boolean homing = true; + private float homingStrength = 0.35f; // Increased from 0.15 for better tracking + private float homingRange = 20.0f; + + public EntityAbilityOrb(World world) { + super(world); + } + + /** + * Full constructor with all parameters. + */ + public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float orbSize, int innerColor, int outerColor, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime) { + super(world); + + // Initialize base properties + initProjectile(owner, target, x, y, z, + orbSize, innerColor, outerColor, rotationSpeed, + damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime); + + // Orb-specific properties + this.speed = speed; + this.homing = homing; + this.homingStrength = homingStrength; + this.homingRange = homingRange; + + // Calculate initial velocity toward target + if (target != null) { + double dx = target.posX - x; + double dy = (target.posY + target.height * 0.5) - y; + double dz = target.posZ - z; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + this.motionX = (dx / len) * speed; + this.motionY = (dy / len) * speed; + this.motionZ = (dz / len) * speed; + } + } else { + // Fire in NPC's facing direction + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + this.motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + this.motionY = -Math.sin(pitch) * speed; + this.motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + } + + @Override + protected void updateProjectile() { + if (worldObj.isRemote) { + handleClientInterpolation(); + } else { + // Server-side logic + updateHoming(); + checkBlockCollision(); + checkEntityCollision(); + this.moveEntity(motionX, motionY, motionZ); + } + + // Check wall collision + if (this.isCollidedHorizontally || this.isCollidedVertically) { + if (!worldObj.isRemote) { + hasHit = true; + if (explosive) { + doExplosion(); + } + } + this.setDead(); + } + } + + private void updateHoming() { + if (!homing) return; + + Entity target = getTarget(); + if (target == null || !target.isEntityAlive()) return; + + double dx = target.posX - posX; + double dy = (target.posY + target.height * 0.5) - posY; + double dz = target.posZ - posZ; + double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (dist <= homingRange && dist > 0) { + // Calculate effective homing strength - increases when closer to commit to target + // This prevents orbiting behavior at close range + float effectiveStrength = homingStrength; + if (dist < homingRange * 0.3) { + // Within 30% of homing range, dramatically increase strength to commit + effectiveStrength = Math.min(1.0f, homingStrength * 2.5f); + } else if (dist < homingRange * 0.6) { + // Within 60% of homing range, moderately increase strength + effectiveStrength = Math.min(0.8f, homingStrength * 1.5f); + } + + double desiredVX = (dx / dist) * speed; + double desiredVY = (dy / dist) * speed; + double desiredVZ = (dz / dist) * speed; + + motionX += (desiredVX - motionX) * effectiveStrength; + motionY += (desiredVY - motionY) * effectiveStrength; + motionZ += (desiredVZ - motionZ) * effectiveStrength; + + // Normalize to maintain speed + double vLen = Math.sqrt(motionX * motionX + motionY * motionY + motionZ * motionZ); + if (vLen > 0) { + motionX = (motionX / vLen) * speed; + motionY = (motionY / vLen) * speed; + motionZ = (motionZ / vLen) * speed; + } + } + } + + private void checkBlockCollision() { + Vec3 currentPos = Vec3.createVectorHelper(posX, posY, posZ); + Vec3 nextPos = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ); + MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + + if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + hasHit = true; + if (explosive) { + doExplosion(); + } + this.setDead(); + } + } + + private void checkEntityCollision() { + double hitSize = size * 0.5; + AxisAlignedBB hitBox = AxisAlignedBB.getBoundingBox( + posX - hitSize, posY - hitSize, posZ - hitSize, + posX + hitSize, posY + hitSize, posZ + hitSize + ); + + @SuppressWarnings("unchecked") + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, hitBox); + + for (EntityLivingBase entity : entities) { + if (shouldIgnoreEntity(entity)) continue; + + hasHit = true; + + if (explosive) { + doExplosion(); + } else { + applyDamage(entity); + } + + this.setDead(); + return; + } + } + + // ==================== GETTERS ==================== + + public float getSpeed() { + return speed; + } + + public boolean isHoming() { + return homing; + } + + public float getHomingStrength() { + return homingStrength; + } + + public float getHomingRange() { + return homingRange; + } + + // Legacy getter for renderer compatibility + public float getOrbSize() { + return size; + } + + // ==================== NBT ==================== + + @Override + protected void readProjectileNBT(NBTTagCompound nbt) { + this.speed = nbt.hasKey("OrbSpeed") ? nbt.getFloat("OrbSpeed") : 0.5f; + this.homing = !nbt.hasKey("Homing") || nbt.getBoolean("Homing"); + this.homingStrength = nbt.hasKey("HomingStrength") ? nbt.getFloat("HomingStrength") : 0.15f; + this.homingRange = nbt.hasKey("HomingRange") ? nbt.getFloat("HomingRange") : 20.0f; + } + + @Override + protected void writeProjectileNBT(NBTTagCompound nbt) { + nbt.setFloat("OrbSpeed", speed); + nbt.setBoolean("Homing", homing); + nbt.setFloat("HomingStrength", homingStrength); + nbt.setFloat("HomingRange", homingRange); + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java new file mode 100644 index 000000000..fa84d933f --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -0,0 +1,570 @@ +package kamkeel.npcs.entity; + +import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.NpcDamageSource; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.List; + +/** + * Base class for all ability projectiles (Orb, Disc, Beam, Laser). + * Provides common functionality for visuals, combat, effects, and interpolation. + * + * Design inspired by LouisXIV's energy attack system. + */ +public abstract class EntityAbilityProjectile extends Entity implements IEntityAdditionalSpawnData { + + // ==================== VISUAL PROPERTIES ==================== + protected float size = 1.0f; + protected int innerColor = 0xFFFFFF; + protected int outerColor = 0x8888FF; + protected float rotationSpeed = 4.0f; + + // ==================== COMBAT PROPERTIES ==================== + protected float damage = 7.0f; + protected float knockback = 1.0f; + protected float knockbackUp = 0.1f; + + // ==================== EFFECT PROPERTIES ==================== + protected int stunDuration = 0; + protected int slowDuration = 0; + protected int slowLevel = 0; + + // ==================== EXPLOSION PROPERTIES ==================== + protected boolean explosive = false; + protected float explosionRadius = 3.0f; + protected float explosionDamageFalloff = 0.5f; + + // ==================== LIFESPAN ==================== + protected float maxDistance = 30.0f; + protected int maxLifetime = 200; + protected long deathWorldTime = -1; // World time when entity should die (-1 = not set) + + // ==================== TRACKING ==================== + protected double startX, startY, startZ; + protected int ownerEntityId = -1; + protected int targetEntityId = -1; + + // ==================== STATE ==================== + protected boolean hasHit = false; + + // ==================== ROTATION INTERPOLATION ==================== + public float prevRotationValX, prevRotationValY, prevRotationValZ; + public float rotationValX, rotationValY, rotationValZ; + + // ==================== SIZE INTERPOLATION ==================== + protected float renderCurrentSize; + protected float prevRenderSize; + + // ==================== POSITION INTERPOLATION ==================== + protected double interpTargetX, interpTargetY, interpTargetZ; + protected double interpTargetMotionX, interpTargetMotionY, interpTargetMotionZ; + protected int interpSteps; + + public EntityAbilityProjectile(World world) { + super(world); + this.setSize(0.5f, 0.5f); + this.noClip = false; + this.isImmuneToFire = true; + this.ignoreFrustumCheck = true; + } + + /** + * Initialize common properties. Call from subclass constructors. + */ + protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float size, int innerColor, int outerColor, float rotationSpeed, + float damage, float knockback, float knockbackUp, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime) { + this.setPosition(x, y, z); + this.startX = x; + this.startY = y; + this.startZ = z; + + this.ownerEntityId = owner.getEntityId(); + this.targetEntityId = target != null ? target.getEntityId() : -1; + + // Visual + this.size = size; + this.innerColor = innerColor; + this.outerColor = outerColor; + this.rotationSpeed = rotationSpeed; + + // Combat + this.damage = damage; + this.knockback = knockback; + this.knockbackUp = knockbackUp; + + // Explosion + this.explosive = explosive; + this.explosionRadius = explosionRadius; + this.explosionDamageFalloff = explosionDamageFalloff; + + // Effects + this.stunDuration = stunDuration; + this.slowDuration = slowDuration; + this.slowLevel = slowLevel; + + // Lifespan + this.maxDistance = maxDistance; + this.maxLifetime = maxLifetime; + // deathWorldTime will be set on first tick when world is available + + // Initialize render size + this.renderCurrentSize = size; + this.prevRenderSize = size; + } + + @Override + protected void entityInit() { + // No DataWatcher needed - using IEntityAdditionalSpawnData with NBT + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) { + double d1 = this.boundingBox.getAverageEdgeLength() * 4.0D; + d1 *= 128.0D; + return distance < d1 * d1; + } + + @Override + public boolean shouldRenderInPass(int pass) { + return pass == 1; // Translucent pass + } + + @Override + public void onUpdate() { + // Store previous values for interpolation + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationValX = this.rotationValX; + this.prevRotationValY = this.rotationValY; + this.prevRotationValZ = this.rotationValZ; + this.prevRenderSize = this.renderCurrentSize; + + super.onUpdate(); + + // Update rotation + updateRotation(); + + // Lerp render size toward actual size + this.renderCurrentSize = this.renderCurrentSize + (this.size - this.renderCurrentSize) * 0.15f; + + // Set death time on first tick if not already set (handles chunk load/unload) + if (deathWorldTime < 0 && worldObj != null) { + deathWorldTime = worldObj.getTotalWorldTime() + maxLifetime; + } + + // Check lifespan using world time (survives chunk unload/reload) + if (deathWorldTime > 0 && worldObj.getTotalWorldTime() >= deathWorldTime) { + if (!worldObj.isRemote) { + noppes.npcs.LogWriter.info("[Projectile:" + this.getClass().getSimpleName() + "] DEAD: Lifetime exceeded. worldTime=" + worldObj.getTotalWorldTime() + " deathTime=" + deathWorldTime); + } + this.setDead(); + return; + } + + // Check max distance (subclass can override if needed) + if (checkMaxDistance()) { + this.setDead(); + return; + } + + if (hasHit) { + if (!worldObj.isRemote) { + noppes.npcs.LogWriter.info("[Projectile:" + this.getClass().getSimpleName() + "] DEAD: hasHit=true at tick " + ticksExisted); + } + this.setDead(); + return; + } + + // Subclass-specific update + updateProjectile(); + } + + /** + * Update rotation values. Override for custom rotation behavior. + */ + protected void updateRotation() { + this.rotationValX += rotationSpeed * 0.7f; + this.rotationValY += rotationSpeed; + this.rotationValZ += rotationSpeed * 0.5f; + + if (this.rotationValX > 360.0f) this.rotationValX -= 360.0f; + if (this.rotationValY > 360.0f) this.rotationValY -= 360.0f; + if (this.rotationValZ > 360.0f) this.rotationValZ -= 360.0f; + } + + /** + * Check if projectile has exceeded max distance. + * @return true if should die + */ + protected boolean checkMaxDistance() { + double distTraveled = Math.sqrt( + (posX - startX) * (posX - startX) + + (posY - startY) * (posY - startY) + + (posZ - startZ) * (posZ - startZ) + ); + return distTraveled >= maxDistance; + } + + /** + * Subclass-specific update logic. Called every tick. + */ + protected abstract void updateProjectile(); + + // ==================== POSITION INTERPOLATION ==================== + + @Override + public void setPositionAndRotation2(double x, double y, double z, float yaw, float pitch, int posRotationIncrements) { + this.interpTargetX = x; + this.interpTargetY = y; + this.interpTargetZ = z; + this.interpSteps = posRotationIncrements; + } + + @Override + public void setVelocity(double motionX, double motionY, double motionZ) { + this.interpTargetMotionX = motionX; + this.interpTargetMotionY = motionY; + this.interpTargetMotionZ = motionZ; + this.motionX = motionX; + this.motionY = motionY; + this.motionZ = motionZ; + } + + /** + * Handle client-side position interpolation. + */ + protected void handleClientInterpolation() { + if (this.interpSteps > 0) { + double newX = this.posX + (this.interpTargetX - this.posX) / this.interpSteps; + double newY = this.posY + (this.interpTargetY - this.posY) / this.interpSteps; + double newZ = this.posZ + (this.interpTargetZ - this.posZ) / this.interpSteps; + + this.motionX = this.motionX + (this.interpTargetMotionX - this.motionX) / this.interpSteps; + this.motionY = this.motionY + (this.interpTargetMotionY - this.motionY) / this.interpSteps; + this.motionZ = this.motionZ + (this.interpTargetMotionZ - this.motionZ) / this.interpSteps; + + this.setPosition(newX, newY, newZ); + this.interpSteps--; + } else { + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + // ==================== DAMAGE & EFFECTS ==================== + + protected void applyDamage(EntityLivingBase target) { + applyDamage(target, this.damage, this.knockback); + } + + protected void applyDamage(EntityLivingBase target, float dmg, float kb) { + Entity owner = getOwner(); + EntityNPCInterface npc = (owner instanceof EntityNPCInterface) ? (EntityNPCInterface) owner : null; + + if (npc != null) { + target.attackEntityFrom(new NpcDamageSource("npc_ability", npc), dmg); + } else { + target.attackEntityFrom(new NpcDamageSource("npc_ability", null), dmg); + } + + if (kb > 0) { + double dx = target.posX - posX; + double dz = target.posZ - posZ; + double len = Math.sqrt(dx * dx + dz * dz); + if (len > 0) { + double kbX = (dx / len) * kb * 0.5; + double kbZ = (dz / len) * kb * 0.5; + double kbY = knockbackUp > 0 ? knockbackUp : 0.1; + target.addVelocity(kbX, kbY, kbZ); + target.velocityChanged = true; + } + } + + applyEffects(target); + } + + protected void applyEffects(EntityLivingBase target) { + if (stunDuration > 0) { + target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); + target.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); + } + if (slowDuration > 0 && slowLevel > 0) { + target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, slowDuration, slowLevel)); + } + } + + protected void doExplosion() { + worldObj.playSoundEffect(posX, posY, posZ, "random.explode", 1.0f, 1.0f); + + Entity owner = getOwner(); + + AxisAlignedBB explosionBox = AxisAlignedBB.getBoundingBox( + posX - explosionRadius, posY - explosionRadius, posZ - explosionRadius, + posX + explosionRadius, posY + explosionRadius, posZ + explosionRadius + ); + + @SuppressWarnings("unchecked") + List targets = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, explosionBox); + + for (EntityLivingBase target : targets) { + if (target == owner) continue; + + double dist = Math.sqrt( + Math.pow(target.posX - posX, 2) + + Math.pow(target.posY - posY, 2) + + Math.pow(target.posZ - posZ, 2) + ); + + if (dist <= explosionRadius) { + float falloff = 1.0f - (float) (dist / explosionRadius) * explosionDamageFalloff; + applyDamage(target, damage * falloff, knockback * falloff); + } + } + } + + // ==================== ENTITY HELPERS ==================== + + protected Entity getOwner() { + if (ownerEntityId == -1) return null; + return worldObj.getEntityByID(ownerEntityId); + } + + protected Entity getTarget() { + if (targetEntityId == -1) return null; + return worldObj.getEntityByID(targetEntityId); + } + + /** + * Check if an entity should be ignored for collision. + */ + protected boolean shouldIgnoreEntity(Entity entity) { + Entity owner = getOwner(); + if (entity == owner) return true; + + if (owner instanceof EntityNPCInterface && entity instanceof EntityNPCInterface) { + EntityNPCInterface ownerNpc = (EntityNPCInterface) owner; + EntityNPCInterface targetNpc = (EntityNPCInterface) entity; + if (ownerNpc.faction.id == targetNpc.faction.id) return true; + } + return false; + } + + // ==================== VISUAL GETTERS ==================== + + public float getSize() { + return size; + } + + public int getInnerColor() { + return innerColor; + } + + public int getOuterColor() { + return outerColor; + } + + public float getRotationSpeed() { + return rotationSpeed; + } + + public float getInterpolatedRotationX(float partialTicks) { + return this.prevRotationValX + (this.rotationValX - this.prevRotationValX) * partialTicks; + } + + public float getInterpolatedRotationY(float partialTicks) { + return this.prevRotationValY + (this.rotationValY - this.prevRotationValY) * partialTicks; + } + + public float getInterpolatedRotationZ(float partialTicks) { + return this.prevRotationValZ + (this.rotationValZ - this.prevRotationValZ) * partialTicks; + } + + public float getInterpolatedSize(float partialTicks) { + return this.prevRenderSize + (this.renderCurrentSize - this.prevRenderSize) * partialTicks; + } + + // ==================== BRIGHTNESS ==================== + + @Override + public float getBrightness(float partialTicks) { + return 1.0f; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender(float partialTicks) { + return 0xF000F0; + } + + // ==================== NBT ==================== + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { + readBaseNBT(nbt); + readProjectileNBT(nbt); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { + writeBaseNBT(nbt); + writeProjectileNBT(nbt); + } + + /** + * Read base projectile properties from NBT. + */ + protected void readBaseNBT(NBTTagCompound nbt) { + this.size = nbt.getFloat("Size"); + this.innerColor = nbt.getInteger("InnerColor"); + this.outerColor = nbt.getInteger("OuterColor"); + this.rotationSpeed = nbt.hasKey("RotationSpeed") ? nbt.getFloat("RotationSpeed") : 4.0f; + + this.damage = nbt.getFloat("Damage"); + this.knockback = nbt.getFloat("Knockback"); + this.knockbackUp = nbt.getFloat("KnockbackUp"); + + this.explosive = nbt.getBoolean("Explosive"); + this.explosionRadius = nbt.getFloat("ExplosionRadius"); + this.explosionDamageFalloff = nbt.getFloat("ExplosionDamageFalloff"); + + this.stunDuration = nbt.getInteger("StunDuration"); + this.slowDuration = nbt.getInteger("SlowDuration"); + this.slowLevel = nbt.getInteger("SlowLevel"); + + this.maxDistance = nbt.getFloat("MaxDistance"); + this.maxLifetime = nbt.getInteger("MaxLifetime"); + this.deathWorldTime = nbt.hasKey("DeathWorldTime") ? nbt.getLong("DeathWorldTime") : -1; + + this.startX = nbt.getDouble("StartX"); + this.startY = nbt.getDouble("StartY"); + this.startZ = nbt.getDouble("StartZ"); + + this.ownerEntityId = nbt.getInteger("OwnerId"); + this.targetEntityId = nbt.getInteger("TargetId"); + + this.motionX = nbt.getDouble("MotionX"); + this.motionY = nbt.getDouble("MotionY"); + this.motionZ = nbt.getDouble("MotionZ"); + + if (this.worldObj != null && this.worldObj.isRemote) { + this.renderCurrentSize = this.size; + this.prevRenderSize = this.size; + } + } + + /** + * Write base projectile properties to NBT. + */ + protected void writeBaseNBT(NBTTagCompound nbt) { + nbt.setFloat("Size", size); + nbt.setInteger("InnerColor", innerColor); + nbt.setInteger("OuterColor", outerColor); + nbt.setFloat("RotationSpeed", rotationSpeed); + + nbt.setFloat("Damage", damage); + nbt.setFloat("Knockback", knockback); + nbt.setFloat("KnockbackUp", knockbackUp); + + nbt.setBoolean("Explosive", explosive); + nbt.setFloat("ExplosionRadius", explosionRadius); + nbt.setFloat("ExplosionDamageFalloff", explosionDamageFalloff); + + nbt.setInteger("StunDuration", stunDuration); + nbt.setInteger("SlowDuration", slowDuration); + nbt.setInteger("SlowLevel", slowLevel); + + nbt.setFloat("MaxDistance", maxDistance); + nbt.setLong("DeathWorldTime", deathWorldTime); + nbt.setInteger("MaxLifetime", maxLifetime); + + nbt.setDouble("StartX", startX); + nbt.setDouble("StartY", startY); + nbt.setDouble("StartZ", startZ); + + nbt.setInteger("OwnerId", ownerEntityId); + nbt.setInteger("TargetId", targetEntityId); + + nbt.setDouble("MotionX", motionX); + nbt.setDouble("MotionY", motionY); + nbt.setDouble("MotionZ", motionZ); + } + + /** + * Subclass-specific NBT reading. + */ + protected abstract void readProjectileNBT(NBTTagCompound nbt); + + /** + * Subclass-specific NBT writing. + */ + protected abstract void writeProjectileNBT(NBTTagCompound nbt); + + // ==================== SPAWN DATA ==================== + + @Override + public void writeSpawnData(ByteBuf buffer) { + try { + NBTTagCompound compound = new NBTTagCompound(); + this.writeEntityToNBT(compound); + cpw.mods.fml.common.network.ByteBufUtils.writeTag(buffer, compound); + } catch (Exception ignored) {} + } + + @Override + public void readSpawnData(ByteBuf buffer) { + try { + NBTTagCompound compound = cpw.mods.fml.common.network.ByteBufUtils.readTag(buffer); + if (compound != null) { + this.readEntityFromNBT(compound); + } + } catch (Exception ignored) {} + } + + // ==================== COLLISION SETTINGS ==================== + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean canBePushed() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + public boolean isBurning() { + return false; + } + + @SideOnly(Side.CLIENT) + public float getShadowSize() { + return 0.0f; + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java new file mode 100644 index 000000000..a5758a2ed --- /dev/null +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java @@ -0,0 +1,437 @@ +package kamkeel.npcs.entity; + +import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import noppes.npcs.LogWriter; +import noppes.npcs.NpcDamageSource; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Sweeper ability entity - a rotating beam attached to the NPC. + * Unlike other projectiles, this handles its own damage logic since it's + * attached to and rotates around the caster. + * + * Design: Similar to Beam trail visuals but rotating around origin. + */ +public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpawnData { + + // Beam properties + private float beamLength = 10.0f; + private float beamWidth = 0.3f; // Thin like beam trail + private float beamHeight = 0.8f; + private int innerColor = 0xFF6600; + private int outerColor = 0xFF0000; + + // Combat properties + private float damage = 5.0f; + private int damageInterval = 5; + private boolean piercing = true; + + // Rotation + private float currentAngle = 0; + private float prevAngle = 0; + private float sweepSpeed = 3.0f; + private int numberOfRotations = 2; + private int completedRotations = 0; + private float baseYaw = 0; // Starting yaw direction + private boolean lockOnTarget = false; + + // Owner tracking + private int ownerEntityId = -1; + private int targetEntityId = -1; + + // Lifetime + private int maxTicks = 400; + private long deathWorldTime = -1; + + // Damage state + private transient int ticksSinceDamage = 0; + private transient Set hitThisTick = new HashSet<>(); + + public EntityAbilitySweeper(World world) { + super(world); + this.setSize(0.1f, 0.1f); + this.noClip = true; + this.isImmuneToFire = true; + this.ignoreFrustumCheck = true; + } + + public EntityAbilitySweeper(World world, EntityNPCInterface owner, EntityLivingBase target, + float beamLength, float beamWidth, float beamHeight, + int innerColor, int outerColor, + float sweepSpeed, int numberOfRotations, + float damage, int damageInterval, boolean piercing, + boolean lockOnTarget) { + this(world); + + this.ownerEntityId = owner.getEntityId(); + this.targetEntityId = target != null ? target.getEntityId() : -1; + this.beamLength = beamLength; + this.beamWidth = beamWidth; + this.beamHeight = beamHeight; + this.innerColor = innerColor; + this.outerColor = outerColor; + this.sweepSpeed = sweepSpeed; + this.numberOfRotations = numberOfRotations; + this.damage = damage; + this.damageInterval = damageInterval; + this.piercing = piercing; + this.lockOnTarget = lockOnTarget; + + // Calculate max ticks based on rotations + this.maxTicks = (int) ((360.0f * numberOfRotations) / sweepSpeed) + 10; + + // Calculate base yaw + if (lockOnTarget && target != null) { + double dx = target.posX - owner.posX; + double dz = target.posZ - owner.posZ; + this.baseYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); + } else { + this.baseYaw = owner.rotationYaw; + } + + // Position at owner + this.setPosition(owner.posX, owner.posY + beamHeight, owner.posZ); + + // Ready to deal damage immediately + this.ticksSinceDamage = damageInterval; + } + + @Override + protected void entityInit() { + // No DataWatcher needed + } + + @Override + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevAngle = this.currentAngle; + + super.onUpdate(); + + // Set death time on first tick + if (deathWorldTime < 0 && worldObj != null) { + deathWorldTime = worldObj.getTotalWorldTime() + maxTicks; + } + + // Check lifetime + if (deathWorldTime > 0 && worldObj.getTotalWorldTime() >= deathWorldTime) { + this.setDead(); + return; + } + + // Follow owner + Entity owner = getOwner(); + if (owner == null) { + this.setDead(); + return; + } + + // Update position to follow owner + this.setPosition(owner.posX, owner.posY + beamHeight, owner.posZ); + + // Check if sweep is done + if (completedRotations >= numberOfRotations) { + this.setDead(); + return; + } + + // Update rotation + currentAngle += sweepSpeed; + if (currentAngle >= 360) { + currentAngle -= 360; + completedRotations++; + if (!worldObj.isRemote) { + LogWriter.info("[Sweeper] Completed rotation " + completedRotations + "/" + numberOfRotations); + } + } + + // Server handles damage + if (!worldObj.isRemote) { + handleDamage(owner); + } + } + + /** + * Handle damage detection and application. + * This runs on server only. + */ + private void handleDamage(Entity owner) { + hitThisTick.clear(); + ticksSinceDamage++; + + if (ticksSinceDamage < damageInterval) { + return; + } + ticksSinceDamage = 0; + + // Calculate beam direction using the ACTUAL render angle + float beamYaw = baseYaw + currentAngle; + float yawRad = (float) Math.toRadians(beamYaw); + + double startX = posX; + double startY = posY; + double startZ = posZ; + + double dirX = -Math.sin(yawRad); + double dirZ = Math.cos(yawRad); + + // Sample points along the beam for collision + int samples = (int) (beamLength / 0.5); + for (int i = 1; i <= samples; i++) { + double progress = (double) i / samples; + double checkX = startX + dirX * beamLength * progress; + double checkY = startY; + double checkZ = startZ + dirZ * beamLength * progress; + + // Narrow hitbox for thin beam + AxisAlignedBB checkBox = AxisAlignedBB.getBoundingBox( + checkX - beamWidth * 2, checkY - 0.5, checkZ - beamWidth * 2, + checkX + beamWidth * 2, checkY + 1.0, checkZ + beamWidth * 2 + ); + + @SuppressWarnings("unchecked") + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, checkBox); + + for (Entity entity : entities) { + if (!(entity instanceof EntityLivingBase)) continue; + if (entity == owner) continue; + if (hitThisTick.contains(entity.getEntityId())) continue; + + EntityLivingBase livingEntity = (EntityLivingBase) entity; + + // Check if actually in beam path + if (isInBeamPath(livingEntity, startX, startY, startZ, dirX, dirZ)) { + hitThisTick.add(entity.getEntityId()); + applyDamage(livingEntity, owner); + + if (!piercing) { + return; + } + } + } + } + } + + private boolean isInBeamPath(EntityLivingBase entity, double startX, double startY, double startZ, + double dirX, double dirZ) { + double entityX = entity.posX - startX; + double entityZ = entity.posZ - startZ; + + // Dot product to find projection distance + double projectionDist = entityX * dirX + entityZ * dirZ; + + // Check if within beam length + if (projectionDist < 0 || projectionDist > beamLength) { + return false; + } + + // Calculate perpendicular distance + double projX = dirX * projectionDist; + double projZ = dirZ * projectionDist; + double perpX = entityX - projX; + double perpZ = entityZ - projZ; + double perpDist = Math.sqrt(perpX * perpX + perpZ * perpZ); + + // Check if within beam width (use wider hitbox than visual) + if (perpDist > beamWidth * 3 + entity.width / 2) { + return false; + } + + // Height check - entity's feet must be below beam top (allows jumping over) + double entityFeetY = entity.posY; + double beamTopY = startY + 0.5; + + return entityFeetY < beamTopY; + } + + private void applyDamage(EntityLivingBase target, Entity owner) { + EntityNPCInterface npc = (owner instanceof EntityNPCInterface) ? (EntityNPCInterface) owner : null; + + if (npc != null) { + target.attackEntityFrom(new NpcDamageSource("npc_ability", npc), damage); + } else { + target.attackEntityFrom(new NpcDamageSource("npc_ability", null), damage); + } + + // Small upward knockback to help escape + target.addVelocity(0, 0.2, 0); + target.velocityChanged = true; + } + + private Entity getOwner() { + if (ownerEntityId == -1) return null; + return worldObj.getEntityByID(ownerEntityId); + } + + // ==================== RENDERING ==================== + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) { + return distance < 16384.0D; // 128 blocks squared + } + + @Override + public boolean shouldRenderInPass(int pass) { + return pass == 1; // Translucent pass + } + + @Override + public float getBrightness(float partialTicks) { + return 1.0f; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender(float partialTicks) { + return 0xF000F0; + } + + // ==================== GETTERS FOR RENDERER ==================== + + public float getBeamLength() { + return beamLength; + } + + public float getBeamWidth() { + return beamWidth; + } + + public float getBeamHeight() { + return beamHeight; + } + + public int getInnerColor() { + return innerColor; + } + + public int getOuterColor() { + return outerColor; + } + + /** + * Get the full interpolated angle INCLUDING base yaw for rendering. + */ + public float getInterpolatedAngle(float partialTicks) { + // Handle wrap-around for the rotating part + float diff = currentAngle - prevAngle; + if (diff > 180) diff -= 360; + if (diff < -180) diff += 360; + float interpAngle = prevAngle + diff * partialTicks; + // Add base yaw for correct world orientation + return baseYaw + interpAngle; + } + + public float getCurrentAngle() { + return currentAngle; + } + + public float getBaseYaw() { + return baseYaw; + } + + // ==================== NBT ==================== + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { + this.beamLength = nbt.getFloat("BeamLength"); + this.beamWidth = nbt.getFloat("BeamWidth"); + this.beamHeight = nbt.getFloat("BeamHeight"); + this.innerColor = nbt.getInteger("InnerColor"); + this.outerColor = nbt.getInteger("OuterColor"); + this.sweepSpeed = nbt.getFloat("SweepSpeed"); + this.numberOfRotations = nbt.getInteger("NumRotations"); + this.completedRotations = nbt.getInteger("CompletedRotations"); + this.maxTicks = nbt.getInteger("MaxTicks"); + this.ownerEntityId = nbt.getInteger("OwnerId"); + this.targetEntityId = nbt.getInteger("TargetId"); + this.currentAngle = nbt.getFloat("CurrentAngle"); + this.baseYaw = nbt.getFloat("BaseYaw"); + this.deathWorldTime = nbt.getLong("DeathWorldTime"); + this.damage = nbt.getFloat("Damage"); + this.damageInterval = nbt.getInteger("DamageInterval"); + this.piercing = nbt.getBoolean("Piercing"); + this.lockOnTarget = nbt.getBoolean("LockOnTarget"); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { + nbt.setFloat("BeamLength", beamLength); + nbt.setFloat("BeamWidth", beamWidth); + nbt.setFloat("BeamHeight", beamHeight); + nbt.setInteger("InnerColor", innerColor); + nbt.setInteger("OuterColor", outerColor); + nbt.setFloat("SweepSpeed", sweepSpeed); + nbt.setInteger("NumRotations", numberOfRotations); + nbt.setInteger("CompletedRotations", completedRotations); + nbt.setInteger("MaxTicks", maxTicks); + nbt.setInteger("OwnerId", ownerEntityId); + nbt.setInteger("TargetId", targetEntityId); + nbt.setFloat("CurrentAngle", currentAngle); + nbt.setFloat("BaseYaw", baseYaw); + nbt.setLong("DeathWorldTime", deathWorldTime); + nbt.setFloat("Damage", damage); + nbt.setInteger("DamageInterval", damageInterval); + nbt.setBoolean("Piercing", piercing); + nbt.setBoolean("LockOnTarget", lockOnTarget); + } + + // ==================== SPAWN DATA ==================== + + @Override + public void writeSpawnData(ByteBuf buffer) { + buffer.writeFloat(beamLength); + buffer.writeFloat(beamWidth); + buffer.writeFloat(beamHeight); + buffer.writeInt(innerColor); + buffer.writeInt(outerColor); + buffer.writeFloat(sweepSpeed); + buffer.writeInt(numberOfRotations); + buffer.writeInt(completedRotations); + buffer.writeInt(maxTicks); + buffer.writeInt(ownerEntityId); + buffer.writeInt(targetEntityId); + buffer.writeFloat(currentAngle); + buffer.writeFloat(baseYaw); + buffer.writeFloat(damage); + buffer.writeInt(damageInterval); + buffer.writeBoolean(piercing); + buffer.writeBoolean(lockOnTarget); + } + + @Override + public void readSpawnData(ByteBuf buffer) { + this.beamLength = buffer.readFloat(); + this.beamWidth = buffer.readFloat(); + this.beamHeight = buffer.readFloat(); + this.innerColor = buffer.readInt(); + this.outerColor = buffer.readInt(); + this.sweepSpeed = buffer.readFloat(); + this.numberOfRotations = buffer.readInt(); + this.completedRotations = buffer.readInt(); + this.maxTicks = buffer.readInt(); + this.ownerEntityId = buffer.readInt(); + this.targetEntityId = buffer.readInt(); + this.currentAngle = buffer.readFloat(); + this.baseYaw = buffer.readFloat(); + this.damage = buffer.readFloat(); + this.damageInterval = buffer.readInt(); + this.piercing = buffer.readBoolean(); + this.lockOnTarget = buffer.readBoolean(); + this.prevAngle = this.currentAngle; + } +} diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index ed084c578..0005341f8 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -86,6 +86,11 @@ import noppes.npcs.entity.EntityNpcDragon; import noppes.npcs.entity.EntityNpcPony; import noppes.npcs.entity.EntityNpcSlime; import noppes.npcs.entity.EntityProjectile; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilitySweeper; import noppes.npcs.entity.old.EntityNPCDwarfFemale; import noppes.npcs.entity.old.EntityNPCDwarfMale; import noppes.npcs.entity.old.EntityNPCElfFemale; @@ -276,6 +281,11 @@ public class CustomNpcs { registerNewEntity(EntityChairMount.class, "CustomNpcChairMount", 64, 10, false); registerNewEntity(EntityProjectile.class, "throwableitem", 64, 3, true); registerNewEntity(EntityMagicProjectile.class, "magicprojectile", 64, 3, true); + registerNewEntity(EntityAbilityOrb.class, "abilityorb", 64, 3, true); + registerNewEntity(EntityAbilityDisc.class, "abilitydisc", 64, 3, true); + registerNewEntity(EntityAbilityLaser.class, "abilitylaser", 64, 3, true); + registerNewEntity(EntityAbilityBeam.class, "abilitybeam", 64, 3, true); + registerNewEntity(EntityAbilitySweeper.class, "abilitysweeper", 64, 3, true); new RecipeController(); diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 8d390f5cc..51d2831ac 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -3,6 +3,7 @@ package noppes.npcs; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import kamkeel.npcs.controllers.data.ability.AbilityPhase; +import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.network.packets.data.telegraph.TelegraphRemovePacket; import kamkeel.npcs.network.packets.data.telegraph.TelegraphSpawnPacket; @@ -444,7 +445,7 @@ public class DataAbilities { // ═══════════════════════════════════════════════════════════════════ /** - * Handle damage taken - may interrupt current ability. + * Handle damage taken - may interrupt current ability or trigger guard counter. * * @param source The damage source * @param amount The damage amount @@ -454,6 +455,14 @@ public class DataAbilities { // Track hit for hit count condition recordHit(); + // Check if currently executing a Guard ability and notify it of damage taken + if (currentAbility instanceof AbilityGuard) { + AbilityGuard guard = (AbilityGuard) currentAbility; + if (guard.isGuarding() && source.getEntity() instanceof EntityLivingBase) { + guard.onDamageTaken(npc, (EntityLivingBase) source.getEntity(), source, amount); + } + } + if (currentAbility == null || !currentAbility.isExecuting()) { return false; } @@ -466,6 +475,18 @@ public class DataAbilities { return false; } + /** + * Get the damage reduction factor if a Guard ability is currently active. + * + * @return The damage reduction factor (0.0 = no reduction, 1.0 = full immunity), or 0 if not guarding + */ + public float getGuardDamageReduction() { + if (currentAbility instanceof AbilityGuard) { + return ((AbilityGuard) currentAbility).getDamageReductionFactor(); + } + return 0.0f; + } + /** * Record a hit for the hit count condition. */ @@ -553,7 +574,7 @@ public class DataAbilities { * @param hitEntity The entity being hit * @param damage The damage amount * @param knockback The horizontal knockback - * @param knockbackUp The vertical knockback (deprecated, ignored) + * @param knockbackUp The vertical knockback * @return The event (with possibly modified values), or null if cancelled */ public AbilityEvent.HitEvent fireHitEvent(Ability ability, EntityLivingBase target, @@ -686,16 +707,6 @@ public class DataAbilities { } } - /** - * Check if NPC movement should be blocked due to ability execution. - * - * @deprecated Use isAbilityControllingMovement() instead - */ - @Deprecated - public boolean isMovementBlocked() { - return isAbilityControllingMovement(); - } - /** * Check if NPC should skip normal attacks during ability execution. */ diff --git a/src/main/java/noppes/npcs/ai/CombatHandler.java b/src/main/java/noppes/npcs/ai/CombatHandler.java index e3eb85fbe..750725551 100644 --- a/src/main/java/noppes/npcs/ai/CombatHandler.java +++ b/src/main/java/noppes/npcs/ai/CombatHandler.java @@ -179,10 +179,10 @@ public class CombatHandler { } /** - * Check if NPC movement should be blocked due to ability execution. + * Check if ability is controlling NPC movement (AI pathfinding should be blocked). */ - public boolean isMovementBlocked() { - return npc.abilities.isMovementBlocked(); + public boolean isAbilityControllingMovement() { + return npc.abilities.isAbilityControllingMovement(); } /** diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 95dceaec2..534963e38 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -144,6 +144,16 @@ import noppes.npcs.client.renderer.RenderNpcCrystal; import noppes.npcs.client.renderer.RenderNpcDragon; import noppes.npcs.client.renderer.RenderNpcSlime; import noppes.npcs.client.renderer.RenderProjectile; +import kamkeel.npcs.client.renderer.RenderAbilityOrbCube; +import kamkeel.npcs.client.renderer.RenderAbilityDisc; +import kamkeel.npcs.client.renderer.RenderAbilityLaser; +import kamkeel.npcs.client.renderer.RenderAbilityBeam; +import kamkeel.npcs.client.renderer.RenderAbilitySweeper; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilitySweeper; import noppes.npcs.client.renderer.blocks.BlockBannerRenderer; import noppes.npcs.client.renderer.blocks.BlockBarrelRenderer; import noppes.npcs.client.renderer.blocks.BlockBeamRenderer; @@ -251,6 +261,12 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerEntityRenderingHandler(EntityNpcDragon.class, new RenderNpcDragon(new ModelNpcDragon(0.0F), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityNpcSlime.class, new RenderNpcSlime(new ModelNpcSlime(16), new ModelNpcSlime(0), 0.25F)); RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, new RenderProjectile()); + // RenderingRegistry.registerEntityRenderingHandler(EntityAbilityOrb.class, new RenderAbilityOrb()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityOrb.class, new RenderAbilityOrbCube()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityDisc.class, new RenderAbilityDisc()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityLaser.class, new RenderAbilityLaser()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityBeam.class, new RenderAbilityBeam()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilitySweeper.class, new RenderAbilitySweeper()); RenderingRegistry.registerEntityRenderingHandler(EntityCustomNpc.class, new RenderCustomNpc()); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 58e133bc8..5f03cbd9f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -42,6 +42,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi protected static final int TAB_TYPE = 1; protected static final int TAB_TARGET = 2; protected static final int TAB_EFFECTS = 3; + protected static final int TAB_VISUAL = 4; // Core references protected final Ability ability; @@ -98,6 +99,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi protected final boolean supportsTelegraph; protected final boolean targetingModeLocked; protected final boolean hasTypeSettings; + protected final boolean hasVisualSettings; public SubGuiAbilityConfig(Ability ability, IAbilityConfigCallback callback) { this.ability = ability; @@ -138,6 +140,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.supportsTelegraph = defaultType != null && defaultType != TelegraphType.NONE; this.targetingModeLocked = ability.isTargetingModeLocked(); this.hasTypeSettings = ability.hasTypeSettings(); + this.hasVisualSettings = hasVisualSettings(); setBackground("menubg.png"); xSize = 356; @@ -172,6 +175,13 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi GuiMenuTopButton effectsTab = new GuiMenuTopButton(93, lastTab, "ability.tab.effects"); effectsTab.active = (activeTab == TAB_EFFECTS); addTopButton(effectsTab); + lastTab = effectsTab; + + if (hasVisualSettings) { + GuiMenuTopButton visualTab = new GuiMenuTopButton(94, lastTab, "ability.tab.visual"); + visualTab.active = (activeTab == TAB_VISUAL); + addTopButton(visualTab); + } // Close button (X) in top menu bar - use -1000 to avoid any ID conflicts GuiMenuTopButton closeBtn = new GuiMenuTopButton(-1000, guiLeft + xSize - 22, guiTop - 17, "X"); @@ -195,15 +205,20 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi case TAB_EFFECTS: initEffectsTab(contentY); break; + case TAB_VISUAL: + initVisualTab(contentY); + break; } // ═══════════════════════════════════════════════════════════════════════ - // BOTTOM ROW - Enabled toggle + // BOTTOM ROW - Enabled toggle (only on General tab) // ═══════════════════════════════════════════════════════════════════════ - addLabel(new GuiNpcLabel(99, "gui.enabled", guiLeft + 8, guiTop + ySize - 18)); - GuiNpcButton enabledBtn = new GuiNpcButton(2, guiLeft + 55, guiTop + ySize - 24, 40, 20, new String[]{"gui.no", "gui.yes"}, enabled ? 1 : 0); - enabledBtn.setTextColor(enabled ? 0x00FF00 : 0xFF0000); - addButton(enabledBtn); + if (activeTab == TAB_GENERAL) { + addLabel(new GuiNpcLabel(99, "gui.enabled", guiLeft + 8, guiTop + ySize - 18)); + GuiNpcButton enabledBtn = new GuiNpcButton(2, guiLeft + 55, guiTop + ySize - 24, 40, 20, new String[]{"gui.no", "gui.yes"}, enabled ? 1 : 0); + enabledBtn.setTextColor(enabled ? 0x00FF00 : 0xFF0000); + addButton(enabledBtn); + } } // ═══════════════════════════════════════════════════════════════════════════ @@ -310,6 +325,45 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Default: no-op } + // ═══════════════════════════════════════════════════════════════════════════ + // VISUAL TAB - Override in subclasses for visual settings (colors, etc.) + // ═══════════════════════════════════════════════════════════════════════════ + + /** + * Override to return true if this ability has visual settings (colors, glow, etc.). + * When true, a Visual tab will be shown in the GUI. + */ + protected boolean hasVisualSettings() { + return false; + } + + /** + * Override this method to render visual settings in the Visual tab. + * Use button/text field IDs starting at 200 for visual settings. + * + * @param startY The Y position to start rendering from + */ + protected void initVisualTab(int startY) { + // Default: show message that no visual settings are available + addLabel(new GuiNpcLabel(200, "ability.noVisualSettings", guiLeft + 8, startY + 5)); + } + + /** + * Override this method to handle button clicks for visual-specific buttons. + * Button IDs 200+ are reserved for visual-specific use. + */ + protected void handleVisualButton(int id, GuiNpcButton button) { + // Default: no-op + } + + /** + * Override this method to handle text field changes for visual-specific fields. + * Field IDs 200+ are reserved for visual-specific use. + */ + protected void handleVisualTextField(int id, GuiNpcTextField field) { + // Default: no-op + } + // ═══════════════════════════════════════════════════════════════════════════ // TARGET TAB // ═══════════════════════════════════════════════════════════════════════════ @@ -563,6 +617,11 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi initGui(); return; } + if (id == 94 && hasVisualSettings) { + activeTab = TAB_VISUAL; + initGui(); + return; + } // Enabled button (bottom left) if (id == 2) { @@ -668,7 +727,11 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi initGui(); } - // Type-specific buttons (100+) - delegate to subclass + // Visual-specific buttons (200+) - delegate to subclass + else if (id >= 200) { + handleVisualButton(id, (GuiNpcButton) guibutton); + } + // Type-specific buttons (100-199) - delegate to subclass else if (id >= 100) { handleTypeButton(id, (GuiNpcButton) guibutton); } @@ -707,7 +770,11 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi recoveryTicks = textField.getInteger(); } - // Type-specific fields (100+) - delegate to subclass + // Visual-specific fields (200+) - delegate to subclass + else if (id >= 200) { + handleVisualTextField(id, textField); + } + // Type-specific fields (100-199) - delegate to subclass else if (id >= 100) { handleTypeTextField(id, textField); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeam.java deleted file mode 100644 index ce56f809e..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeam.java +++ /dev/null @@ -1,110 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.type.AbilityBeam; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; - -/** - * GUI for configuring Beam ability type-specific settings. - */ -public class SubGuiAbilityBeam extends SubGuiAbilityConfig { - - private final AbilityBeam beam; - - public SubGuiAbilityBeam(AbilityBeam ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.beam = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Damage Interval - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, beam.getDamage())); - - addLabel(new GuiNpcLabel(101, "ability.dmgInterval", col2LabelX, y + 5)); - addTextField(createIntField(101, col2FieldX, y, 50, beam.getDamageInterval())); - - y += 24; - - // Row 2: Beam Length + Beam Width - addLabel(new GuiNpcLabel(102, "ability.beamLength", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, beam.getBeamLength())); - - addLabel(new GuiNpcLabel(103, "ability.beamWidth", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, beam.getBeamWidth())); - - y += 24; - - // Row 3: Sweep Angle + Sweep Speed - addLabel(new GuiNpcLabel(104, "ability.sweepAngle", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, beam.getSweepAngle())); - - addLabel(new GuiNpcLabel(105, "ability.sweepSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, beam.getSweepSpeed())); - - y += 24; - - // Row 4: Piercing + Lock On Target - addLabel(new GuiNpcLabel(106, "ability.piercing", labelX, y + 5)); - addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isPiercing() ? 1 : 0)); - - addLabel(new GuiNpcLabel(107, "ability.lockTarget", col2LabelX, y + 5)); - addButton(new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isLockOnTarget() ? 1 : 0)); - - y += 24; - - // Row 5: Sweep Back & Forth - addLabel(new GuiNpcLabel(108, "ability.sweepBackForth", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isSweepBackAndForth() ? 1 : 0)); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 106: - beam.setPiercing(value == 1); - break; - case 107: - beam.setLockOnTarget(value == 1); - break; - case 108: - beam.setSweepBackAndForth(value == 1); - break; - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - beam.setDamage(parseFloat(field, beam.getDamage())); - break; - case 101: - beam.setDamageInterval(field.getInteger()); - break; - case 102: - beam.setBeamLength(parseFloat(field, beam.getBeamLength())); - break; - case 103: - beam.setBeamWidth(parseFloat(field, beam.getBeamWidth())); - break; - case 104: - beam.setSweepAngle(parseFloat(field, beam.getSweepAngle())); - break; - case 105: - beam.setSweepSpeed(parseFloat(field, beam.getSweepSpeed())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java new file mode 100644 index 000000000..ec80ed5d6 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -0,0 +1,227 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * GUI for configuring Disc ability type-specific settings. + */ +public class SubGuiAbilityDisc extends SubGuiAbilityConfig { + + private final AbilityDisc disc; + private int editingVisualColorId = 0; + + public SubGuiAbilityDisc(AbilityDisc ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.disc = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Speed + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, disc.getDamage())); + + addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, disc.getSpeed())); + + y += 24; + + // Row 2: Disc Radius + Disc Thickness + addLabel(new GuiNpcLabel(102, "ability.discRadius", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, disc.getDiscRadius())); + + addLabel(new GuiNpcLabel(103, "ability.discThickness", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, disc.getDiscThickness())); + + y += 24; + + // Row 3: Homing + Homing Strength + addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); + addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isHoming() ? 1 : 0)); + + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, disc.getHomingStrength())); + + y += 24; + + // Row 4: Boomerang + Boomerang Delay + addLabel(new GuiNpcLabel(106, "ability.boomerang", labelX, y + 5)); + addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isBoomerang() ? 1 : 0)); + + addLabel(new GuiNpcLabel(107, "ability.boomerangDelay", col2LabelX, y + 5)); + addTextField(createIntField(107, col2FieldX, y, 50, disc.getBoomerangDelay())); + + y += 24; + + // Row 5: Explosive + Explosion Radius + addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); + addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isExplosive() ? 1 : 0)); + + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, disc.getExplosionRadius())); + + y += 24; + + // Row 6: Knockback + Max Distance + addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(110, fieldX, y, 50, disc.getKnockback())); + + addLabel(new GuiNpcLabel(111, "ability.maxDist", col2LabelX, y + 5)); + addTextField(createFloatField(111, col2FieldX, y, 50, disc.getMaxDistance())); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", disc.getInnerColor() & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(disc.getInnerColor() & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", disc.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(disc.getOuterColor() & 0xFFFFFF); + outerColorBtn.setEnabled(disc.isOuterColorEnabled()); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isOuterColorEnabled() ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, disc.getOuterColorWidth()); + widthField.setEnabled(disc.isOuterColorEnabled()); + addTextField(widthField); + + y += 24; + + // Row 3: Rotation Speed + addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); + addTextField(createFloatField(204, fieldX, y, 50, disc.getRotationSpeed())); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 104: + disc.setHoming(value == 1); + break; + case 106: + disc.setBoomerang(value == 1); + break; + case 108: + disc.setExplosive(value == 1); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(disc.getInnerColor())); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(disc.getOuterColor())); + break; + case 202: + disc.setOuterColorEnabled(value == 1); + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + disc.setInnerColor(rgb); + } else if (editingVisualColorId == 201) { + disc.setOuterColor(rgb); + } + editingVisualColorId = 0; + initGui(); + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + disc.setDamage(parseFloat(field, disc.getDamage())); + break; + case 101: + disc.setSpeed(parseFloat(field, disc.getSpeed())); + break; + case 102: + disc.setDiscRadius(parseFloat(field, disc.getDiscRadius())); + break; + case 103: + disc.setDiscThickness(parseFloat(field, disc.getDiscThickness())); + break; + case 105: + disc.setHomingStrength(parseFloat(field, disc.getHomingStrength())); + break; + case 107: + disc.setBoomerangDelay(field.getInteger()); + break; + case 109: + disc.setExplosionRadius(parseFloat(field, disc.getExplosionRadius())); + break; + case 110: + disc.setKnockback(parseFloat(field, disc.getKnockback())); + break; + case 111: + disc.setMaxDistance(parseFloat(field, disc.getMaxDistance())); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + disc.setOuterColorWidth(parseFloat(field, disc.getOuterColorWidth())); + break; + case 204: + disc.setRotationSpeed(parseFloat(field, disc.getRotationSpeed())); + break; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java new file mode 100644 index 000000000..afb89ffed --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -0,0 +1,228 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * GUI for configuring Energy Beam ability type-specific settings. + * Energy Beam is a homing head with trailing path (DBZ-style). + */ +public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { + + private final AbilityEnergyBeam beam; + private int editingVisualColorId = 0; + + public SubGuiAbilityEnergyBeam(AbilityEnergyBeam ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.beam = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Speed + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, beam.getDamage())); + + addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, beam.getSpeed())); + + y += 24; + + // Row 2: Beam Width + Head Size + addLabel(new GuiNpcLabel(102, "ability.beamWidth", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, beam.getBeamWidth())); + + addLabel(new GuiNpcLabel(103, "ability.headSize", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, beam.getHeadSize())); + + y += 24; + + // Row 3: Homing + Homing Strength + addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); + addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isHoming() ? 1 : 0)); + + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, beam.getHomingStrength())); + + y += 24; + + // Row 4: Homing Range + Max Distance + addLabel(new GuiNpcLabel(106, "ability.homingRange", labelX, y + 5)); + addTextField(createFloatField(106, fieldX, y, 50, beam.getHomingRange())); + + addLabel(new GuiNpcLabel(107, "ability.maxDist", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, beam.getMaxDistance())); + + y += 24; + + // Row 5: Explosive + Explosion Radius + addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); + addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isExplosive() ? 1 : 0)); + + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, beam.getExplosionRadius())); + + y += 24; + + // Row 6: Knockback + Max Lifetime + addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(110, fieldX, y, 50, beam.getKnockback())); + + addLabel(new GuiNpcLabel(111, "ability.lifetime", col2LabelX, y + 5)); + addTextField(createIntField(111, col2FieldX, y, 50, beam.getMaxLifetime())); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", beam.getInnerColor() & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(beam.getInnerColor() & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", beam.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(beam.getOuterColor() & 0xFFFFFF); + outerColorBtn.setEnabled(beam.isOuterColorEnabled()); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isOuterColorEnabled() ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, beam.getOuterColorWidth()); + widthField.setEnabled(beam.isOuterColorEnabled()); + addTextField(widthField); + + y += 24; + + // Row 3: Rotation Speed + addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); + addTextField(createFloatField(204, fieldX, y, 50, beam.getRotationSpeed())); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 104: + beam.setHoming(value == 1); + break; + case 108: + beam.setExplosive(value == 1); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(beam.getInnerColor())); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(beam.getOuterColor())); + break; + case 202: + beam.setOuterColorEnabled(value == 1); + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + beam.setInnerColor(rgb); + } else if (editingVisualColorId == 201) { + beam.setOuterColor(rgb); + } + editingVisualColorId = 0; + initGui(); + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + beam.setDamage(parseFloat(field, beam.getDamage())); + break; + case 101: + beam.setSpeed(parseFloat(field, beam.getSpeed())); + break; + case 102: + beam.setBeamWidth(parseFloat(field, beam.getBeamWidth())); + break; + case 103: + beam.setHeadSize(parseFloat(field, beam.getHeadSize())); + break; + case 105: + beam.setHomingStrength(parseFloat(field, beam.getHomingStrength())); + break; + case 106: + beam.setHomingRange(parseFloat(field, beam.getHomingRange())); + break; + case 107: + beam.setMaxDistance(parseFloat(field, beam.getMaxDistance())); + break; + case 109: + beam.setExplosionRadius(parseFloat(field, beam.getExplosionRadius())); + break; + case 110: + beam.setKnockback(parseFloat(field, beam.getKnockback())); + break; + case 111: + beam.setMaxLifetime(field.getInteger()); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + beam.setOuterColorWidth(parseFloat(field, beam.getOuterColorWidth())); + break; + case 204: + beam.setRotationSpeed(parseFloat(field, beam.getRotationSpeed())); + break; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java new file mode 100644 index 000000000..6f5c8ea57 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -0,0 +1,159 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * GUI for configuring Laser Shot ability type-specific settings. + */ +public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { + + private final AbilityLaserShot laser; + private int editingTypeColorId = 0; + + public SubGuiAbilityLaserShot(AbilityLaserShot ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.laser = ability; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Laser Width + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, laser.getDamage())); + + addLabel(new GuiNpcLabel(101, "ability.laserWidth", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, laser.getLaserWidth())); + + y += 24; + + // Row 2: Expansion Speed + Linger Ticks + addLabel(new GuiNpcLabel(102, "ability.expansionSpeed", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, laser.getExpansionSpeed())); + + addLabel(new GuiNpcLabel(103, "ability.lingerTicks", col2LabelX, y + 5)); + addTextField(createIntField(103, col2FieldX, y, 50, laser.getLingerTicks())); + + y += 24; + + // Row 3: Max Distance + Max Lifetime + addLabel(new GuiNpcLabel(104, "ability.maxDist", labelX, y + 5)); + addTextField(createFloatField(104, fieldX, y, 50, laser.getMaxDistance())); + + addLabel(new GuiNpcLabel(105, "ability.lifetime", col2LabelX, y + 5)); + addTextField(createIntField(105, col2FieldX, y, 50, laser.getMaxLifetime())); + + y += 24; + + // Row 4: Explosive + Explosion Radius + addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); + addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isExplosive() ? 1 : 0)); + + addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, laser.getExplosionRadius())); + + y += 24; + + // Row 5: Knockback + Knockback Up + addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(108, fieldX, y, 50, laser.getKnockback())); + + addLabel(new GuiNpcLabel(109, "ability.knockbackUp", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, laser.getKnockbackUp())); + + y += 24; + + // Row 6: Inner Color + Outer Color + addLabel(new GuiNpcLabel(120, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", laser.getInnerColor() & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(120, fieldX, y, 50, 20, innerHex); + innerColorBtn.setTextColor(laser.getInnerColor() & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(121, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", laser.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(121, col2FieldX, y, 50, 20, outerHex); + outerColorBtn.setTextColor(laser.getOuterColor() & 0xFFFFFF); + addButton(outerColorBtn); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 106: + laser.setExplosive(value == 1); + break; + case 120: + editingTypeColorId = 120; + setSubGui(new SubGuiColorSelector(laser.getInnerColor())); + break; + case 121: + editingTypeColorId = 121; + setSubGui(new SubGuiColorSelector(laser.getOuterColor())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingTypeColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingTypeColorId == 120) { + laser.setInnerColor(rgb); + } else if (editingTypeColorId == 121) { + laser.setOuterColor(rgb); + } + editingTypeColorId = 0; + initGui(); + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + laser.setDamage(parseFloat(field, laser.getDamage())); + break; + case 101: + laser.setLaserWidth(parseFloat(field, laser.getLaserWidth())); + break; + case 102: + laser.setExpansionSpeed(parseFloat(field, laser.getExpansionSpeed())); + break; + case 103: + laser.setLingerTicks(field.getInteger()); + break; + case 104: + laser.setMaxDistance(parseFloat(field, laser.getMaxDistance())); + break; + case 105: + laser.setMaxLifetime(field.getInteger()); + break; + case 107: + laser.setExplosionRadius(parseFloat(field, laser.getExplosionRadius())); + break; + case 108: + laser.setKnockback(parseFloat(field, laser.getKnockback())); + break; + case 109: + laser.setKnockbackUp(parseFloat(field, laser.getKnockbackUp())); + break; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index f94e8d0cf..9f5ac4caf 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -1,11 +1,13 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; +import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; /** * GUI for configuring Orb ability type-specific settings. @@ -13,12 +15,18 @@ import noppes.npcs.client.gui.util.IAbilityConfigCallback; public class SubGuiAbilityOrb extends SubGuiAbilityConfig { private final AbilityOrb orb; + private int editingVisualColorId = 0; public SubGuiAbilityOrb(AbilityOrb ability, IAbilityConfigCallback callback) { super(ability, callback); this.orb = ability; } + @Override + protected boolean hasVisualSettings() { + return true; + } + @Override protected void initTypeTab(int startY) { int y = startY; @@ -71,6 +79,46 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { addTextField(createIntField(109, col2FieldX, y, 50, orb.getMaxLifetime())); } + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", orb.getInnerColor() & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(orb.getInnerColor() & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", orb.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(orb.getOuterColor() & 0xFFFFFF); + outerColorBtn.setEnabled(orb.isOuterColorEnabled()); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isOuterColorEnabled() ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, orb.getOuterColorWidth()); + widthField.setEnabled(orb.isOuterColorEnabled()); + addTextField(widthField); + + y += 24; + + // Row 3: Rotation Speed + addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); + addTextField(createFloatField(204, fieldX, y, 50, orb.getRotationSpeed())); + } + @Override protected void handleTypeButton(int id, GuiNpcButton button) { int value = button.getValue(); @@ -84,6 +132,42 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { } } + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(orb.getInnerColor())); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(orb.getOuterColor())); + break; + case 202: + orb.setOuterColorEnabled(value == 1); + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + orb.setInnerColor(rgb); + } else if (editingVisualColorId == 201) { + orb.setOuterColor(rgb); + } + editingVisualColorId = 0; + initGui(); + } else { + super.subGuiClosed(subgui); + } + } + @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { @@ -113,4 +197,16 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { break; } } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + orb.setOuterColorWidth(parseFloat(field, orb.getOuterColorWidth())); + break; + case 204: + orb.setRotationSpeed(parseFloat(field, orb.getRotationSpeed())); + break; + } + } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java new file mode 100644 index 000000000..95f54619b --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java @@ -0,0 +1,198 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.type.AbilitySweeper; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * GUI for configuring Sweeper ability type-specific settings. + * Sweeper is a low rotating beam that players can jump over. + */ +public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { + + private final AbilitySweeper sweeper; + private int editingVisualColorId = 0; + + public SubGuiAbilitySweeper(AbilitySweeper ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.sweeper = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Damage Interval + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, sweeper.getDamage())); + + addLabel(new GuiNpcLabel(101, "ability.dmgInterval", col2LabelX, y + 5)); + addTextField(createIntField(101, col2FieldX, y, 50, sweeper.getDamageInterval())); + + y += 24; + + // Row 2: Beam Length + Beam Width + addLabel(new GuiNpcLabel(102, "ability.beamLength", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, sweeper.getBeamLength())); + + addLabel(new GuiNpcLabel(103, "ability.beamWidth", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, sweeper.getBeamWidth())); + + y += 24; + + // Row 3: Beam Height + Sweep Speed + addLabel(new GuiNpcLabel(104, "ability.beamHeight", labelX, y + 5)); + addTextField(createFloatField(104, fieldX, y, 50, sweeper.getBeamHeight())); + + addLabel(new GuiNpcLabel(105, "ability.sweepSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, sweeper.getSweepSpeed())); + + y += 24; + + // Row 4: Number of Rotations + Piercing + addLabel(new GuiNpcLabel(106, "ability.rotations", labelX, y + 5)); + addTextField(createIntField(106, fieldX, y, 50, sweeper.getNumberOfRotations())); + + addLabel(new GuiNpcLabel(107, "ability.piercing", col2LabelX, y + 5)); + addButton(new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isPiercing() ? 1 : 0)); + + y += 24; + + // Row 5: Lock On Target + addLabel(new GuiNpcLabel(108, "ability.lockTarget", labelX, y + 5)); + addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isLockOnTarget() ? 1 : 0)); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", sweeper.getInnerColor() & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(sweeper.getInnerColor() & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", sweeper.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(sweeper.getOuterColor() & 0xFFFFFF); + outerColorBtn.setEnabled(sweeper.isOuterColorEnabled()); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isOuterColorEnabled() ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, sweeper.getOuterColorWidth()); + widthField.setEnabled(sweeper.isOuterColorEnabled()); + addTextField(widthField); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 107: + sweeper.setPiercing(value == 1); + break; + case 108: + sweeper.setLockOnTarget(value == 1); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(sweeper.getInnerColor())); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(sweeper.getOuterColor())); + break; + case 202: + sweeper.setOuterColorEnabled(value == 1); + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + sweeper.setInnerColor(rgb); + } else if (editingVisualColorId == 201) { + sweeper.setOuterColor(rgb); + } + editingVisualColorId = 0; + initGui(); + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + sweeper.setDamage(parseFloat(field, sweeper.getDamage())); + break; + case 101: + sweeper.setDamageInterval(field.getInteger()); + break; + case 102: + sweeper.setBeamLength(parseFloat(field, sweeper.getBeamLength())); + break; + case 103: + sweeper.setBeamWidth(parseFloat(field, sweeper.getBeamWidth())); + break; + case 104: + sweeper.setBeamHeight(parseFloat(field, sweeper.getBeamHeight())); + break; + case 105: + sweeper.setSweepSpeed(parseFloat(field, sweeper.getSweepSpeed())); + break; + case 106: + sweeper.setNumberOfRotations(field.getInteger()); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + sweeper.setOuterColorWidth(parseFloat(field, sweeper.getOuterColorWidth())); + break; + } + } +} diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 7f0618786..f3bba0c1d 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1534,6 +1534,7 @@ telegraph.point=Point ability.tab.timing=Timing ability.tab.effects=Effects ability.tab.telegraph=Telegraph +ability.tab.visual=Visual ability.showTelegraph=Show Telegraph ability.telegraphColor=Color ability.telegraphSizeNote=Size is based on ability parameters @@ -1559,6 +1560,9 @@ ability.cnpc.guard=Guard ability.cnpc.heal=Heal ability.cnpc.hazard=Hazard ability.cnpc.trap=Trap +ability.cnpc.disc=Disc +ability.cnpc.laser_shot=Laser Shot +ability.cnpc.sweeper=Sweeper # Ability GUI - Type Tab @@ -1627,10 +1631,12 @@ ability.explRadius=Expl Rad # Beam Settings ability.beamLength=Length ability.beamWidth=Width +ability.beamHeight=Height ability.dmgInterval=Interval ability.sweepAngle=Sweep Ang ability.sweepSpeed=Sweep Spd ability.lockTarget=Lock Tgt +ability.rotations=Rotations # Guard Settings ability.dmgReduce=Dmg Reduce @@ -1667,6 +1673,30 @@ ability.triggerRadius=Trig Rad ability.armTime=Arm Time ability.maxTriggers=Max Trig +# Disc Settings +ability.discRadius=Disc Rad +ability.discThickness=Thickness +ability.boomerang=Boomerang +ability.boomerangDelay=Return Delay +ability.homingStr=Homing Str +ability.homingRange=Homing Rng +ability.explosionRad=Expl Rad +ability.rotationSpeed=Rot Speed +ability.innerColor=Inner Color +ability.outerColor=Outer Color +ability.outerEnabled=Outer Glow +ability.outerWidth=Outer Width +ability.noVisualSettings=No visual settings for this ability type + +# Laser Shot Settings +ability.laserWidth=Laser Width +ability.expansionSpeed=Expansion Spd +ability.lingerTicks=Linger Ticks + +# Energy Beam Settings +ability.headSize=Head Size +ability.attachedToOwner=Attached + # Ability Save/Load ability.save.confirm=Save ability preset ability.save.overwrite=Overwrite existing preset diff --git a/src/main/resources/assets/customnpcs/textures/entity/white.png b/src/main/resources/assets/customnpcs/textures/entity/white.png new file mode 100644 index 0000000000000000000000000000000000000000..32a20fb7c718f900475b55d010cbb94045caba98 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58CaNs)Vi3hp&(vykh>GZx^prwfgF}}M_)$< zhK>E)e-c@NeC7b35ZC|z|1UoxeFDhkEbxddW? Date: Mon, 26 Jan 2026 04:42:23 -0500 Subject: [PATCH 04/85] More Abilities --- .../client/renderer/RenderAbilityBeam.java | 45 +++--- .../client/renderer/RenderAbilityDisc.java | 11 +- .../client/renderer/RenderAbilityLaser.java | 27 ++-- .../client/renderer/RenderAbilityOrb.java | 16 +- .../client/renderer/RenderAbilitySweeper.java | 21 ++- .../controllers/data/ability/Ability.java | 147 +++++++++++------ .../data/ability/type/AbilityDisc.java | 37 ++++- .../data/ability/type/AbilityEnergyBeam.java | 35 ++++- .../data/ability/type/AbilityGuard.java | 13 +- .../data/ability/type/AbilityHeal.java | 5 + .../data/ability/type/AbilityLaserShot.java | 12 +- .../data/ability/type/AbilityOrb.java | 35 ++++- .../data/ability/type/AbilitySlam.java | 8 +- .../data/ability/type/AbilitySweeper.java | 2 +- .../data/telegraph/TelegraphInstance.java | 33 +++- .../npcs/entity/EntityAbilityBeam.java | 5 +- .../npcs/entity/EntityAbilityDisc.java | 5 +- .../npcs/entity/EntityAbilityLaser.java | 3 +- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 5 +- .../npcs/entity/EntityAbilityProjectile.java | 19 ++- .../npcs/entity/EntityAbilitySweeper.java | 21 +++ src/main/java/noppes/npcs/DataAbilities.java | 148 +++++++++++------- .../client/gui/advanced/GuiNPCAbilities.java | 53 +++++-- .../ability/SubGuiAbilityLaserShot.java | 74 +++++++-- 24 files changed, 560 insertions(+), 220 deletions(-) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java index 49cb4fb6c..204be9d7e 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -61,10 +61,10 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glTranslated(renderOriginX, renderOriginY, renderOriginZ); // Render tail orb at origin (0,0,0) - static, no rotation - renderTailOrb(headSize * 0.8f, innerColor, outerColor); + renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled()); // Render trail segments with smooth connections - renderSmoothTrail(trail, beamWidth, innerColor, outerColor); + renderSmoothTrail(trail, beamWidth, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); // Render head at interpolated offset position renderHead(beam, headOffsetX, headOffsetY, headOffsetZ, headSize, innerColor, outerColor, partialTicks); @@ -78,17 +78,19 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { * Render the tail orb at the origin (where the beam emanates from). * This orb does not rotate - it's a stable anchor point. */ - private void renderTailOrb(float size, int innerColor, int outerColor) { + private void renderTailOrb(float size, int innerColor, int outerColor, boolean outerColorEnabled) { GL11.glPushMatrix(); // Already at origin (0,0,0) - // Render outer glow - GL11.glDepthMask(false); - GL11.glPushMatrix(); - GL11.glScalef(size, size, size); - renderCube(outerColor, 0.4f, 0.5f); - GL11.glPopMatrix(); - GL11.glDepthMask(true); + // Render outer glow only if enabled + if (outerColorEnabled) { + GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glScalef(size, size, size); + renderCube(outerColor, 0.4f, 0.5f); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + } // Render inner core (smaller, solid) GL11.glPushMatrix(); @@ -103,7 +105,8 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { * Render the beam trail with smooth connections between segments. * Uses averaged perpendicular vectors at connection points to prevent gaps. */ - private void renderSmoothTrail(List trail, float width, int innerColor, int outerColor) { + private void renderSmoothTrail(List trail, float width, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth) { if (trail.size() < 2) return; int trailSize = trail.size(); @@ -112,10 +115,12 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { // At connection points, average the perpendiculars for smooth transitions List perpFrames = computePerpendiculars(trail); - // Render outer glow trail (wider, translucent) - GL11.glDepthMask(false); - renderTrailTube(trail, perpFrames, width * 1.8f, outerColor, 0.3f, true); - GL11.glDepthMask(true); + // Render outer glow trail (wider, translucent) - only if enabled + if (outerColorEnabled) { + GL11.glDepthMask(false); + renderTrailTube(trail, perpFrames, width * outerColorWidth, outerColor, 0.3f, true); + GL11.glDepthMask(true); + } // Render inner core trail renderTrailTube(trail, perpFrames, width * 0.6f, innerColor, 0.9f, false); @@ -331,10 +336,12 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glPushMatrix(); GL11.glScalef(scale, scale, scale); - // Render outer glow - GL11.glDepthMask(false); - renderCube(outerColor, 0.5f, 0.5f); - GL11.glDepthMask(true); + // Render outer glow only if enabled + if (beam.isOuterColorEnabled()) { + GL11.glDepthMask(false); + renderCube(outerColor, 0.5f, 0.5f); + GL11.glDepthMask(true); + } // Render inner core float innerScale = 0.6f; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java index 93049fad5..13de38b50 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java @@ -39,10 +39,13 @@ public class RenderAbilityDisc extends RenderAbilityProjectile { // Apply ONLY Y-axis rotation for flat spin GL11.glRotatef(disc.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); - // Render outer square (translucent) - GL11.glDepthMask(false); - renderFlatSquare(disc.getOuterColor(), 0.5f, radius, thickness); - GL11.glDepthMask(true); + // Render outer square (translucent) - only if enabled + if (disc.isOuterColorEnabled()) { + float outerScale = disc.getOuterColorWidth() / 1.8f; // Normalize to default width + GL11.glDepthMask(false); + renderFlatSquare(disc.getOuterColor(), 0.5f, radius * outerScale, thickness); + GL11.glDepthMask(true); + } // Render inner square (solid, smaller) float innerScale = 0.6f; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java index 0c1d4a1e8..fce85d2db 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java @@ -84,19 +84,22 @@ public class RenderAbilityLaser extends RenderAbilityProjectile { double vertY = dz * horzX - dx * horzZ; double vertZ = dx * horzY - dy * horzX; - // Render outer rectangle (larger, outer color, translucent) - GL11.glDepthMask(false); - renderBeamRectangle(renderStartX, renderStartY, renderStartZ, - renderEndX, renderEndY, renderEndZ, - horzX, horzY, horzZ, vertX, vertY, vertZ, - width * 1.8f, laser.getOuterColor(), alpha * 0.4f); + // Render outer rectangle (larger, outer color, translucent) - only if enabled + if (laser.isOuterColorEnabled()) { + float outerScale = laser.getOuterColorWidth(); + GL11.glDepthMask(false); + renderBeamRectangle(renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + width * outerScale, laser.getOuterColor(), alpha * 0.4f); - // Render middle layer - renderBeamRectangle(renderStartX, renderStartY, renderStartZ, - renderEndX, renderEndY, renderEndZ, - horzX, horzY, horzZ, vertX, vertY, vertZ, - width * 1.3f, laser.getOuterColor(), alpha * 0.7f); - GL11.glDepthMask(true); + // Render middle layer + renderBeamRectangle(renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + width * 1.3f, laser.getOuterColor(), alpha * 0.7f); + GL11.glDepthMask(true); + } // Render inner core (smaller, inner color, solid) renderBeamRectangle(renderStartX, renderStartY, renderStartZ, diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java index 3a09e7b6a..39048648d 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java @@ -69,11 +69,17 @@ public class RenderAbilityOrb extends Render { GL11.glRotatef(orb.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); GL11.glRotatef(orb.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); - // Render outer sphere (translucent) - GL11.glDepthMask(false); - this.bindTexture(WHITE_TEXTURE); - renderSphere(orb.getOuterColor(), 0.6f); - GL11.glDepthMask(true); + // Render outer sphere (translucent) - only if enabled + if (orb.isOuterColorEnabled()) { + GL11.glDepthMask(false); + this.bindTexture(WHITE_TEXTURE); + float outerScale = orb.getOuterColorWidth() / 1.8f; // Normalize to default width + GL11.glPushMatrix(); + GL11.glScalef(outerScale, outerScale, outerScale); + renderSphere(orb.getOuterColor(), 0.6f); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + } // Render inner sphere (more opaque) float innerScale = 0.75f; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java index 735c1e183..0a24f1773 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java @@ -26,6 +26,8 @@ public class RenderAbilitySweeper extends Render { float beamWidth = sweeper.getBeamWidth(); int innerColor = sweeper.getInnerColor(); int outerColor = sweeper.getOuterColor(); + boolean outerColorEnabled = sweeper.isOuterColorEnabled(); + float outerColorWidth = sweeper.getOuterColorWidth(); float angle = sweeper.getInterpolatedAngle(partialTicks); GL11.glPushMatrix(); @@ -35,7 +37,7 @@ public class RenderAbilitySweeper extends Render { GL11.glRotatef(-angle, 0, 1, 0); // Negative for correct direction // Render the beam extending in the +Z direction (like beam trail segments) - renderBeam(beamLength, beamWidth, innerColor, outerColor); + renderBeam(beamLength, beamWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth); GL11.glPopMatrix(); @@ -65,7 +67,8 @@ public class RenderAbilitySweeper extends Render { * Render beam using the same style as the Beam entity trail. * Three layers: outer glow, middle, inner core. */ - private void renderBeam(float length, float width, int innerColor, int outerColor) { + private void renderBeam(float length, float width, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth) { // Extract colors float outerR = ((outerColor >> 16) & 0xFF) / 255.0f; float outerG = ((outerColor >> 8) & 0xFF) / 255.0f; @@ -78,13 +81,15 @@ public class RenderAbilitySweeper extends Render { // Render from origin (0,0,0) to (0,0,length) in local coords // After rotation this extends in the correct world direction - // Outer glow (wider, translucent) - like beam trail - GL11.glDepthMask(false); - renderBeamSegment(0, 0, 0, 0, 0, length, width * 1.8f, outerR, outerG, outerB, 0.3f); - GL11.glDepthMask(true); + // Outer glow (wider, translucent) - like beam trail - only if enabled + if (outerColorEnabled) { + GL11.glDepthMask(false); + renderBeamSegment(0, 0, 0, 0, 0, length, width * outerColorWidth, outerR, outerG, outerB, 0.3f); + GL11.glDepthMask(true); - // Middle layer - renderBeamSegment(0, 0, 0, 0, 0, length, width * 1.3f, outerR, outerG, outerB, 0.6f); + // Middle layer + renderBeamSegment(0, 0, 0, 0, 0, length, width * 1.3f, outerR, outerG, outerB, 0.6f); + } // Inner core (solid) - like beam trail inner renderBeamSegment(0, 0, 0, 0, 0, length, width * 0.6f, innerR, innerG, innerB, 1.0f); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 18406c313..3f2165718 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -53,6 +53,10 @@ public abstract class Ability implements IAbility { // Interruption protected boolean interruptible = true; + // Wait for completion - if true, ability controls when active phase ends (ignores activeTicks) + // Used for abilities like Slam that need to wait for landing, or Beam that runs until entity dies + protected boolean waitForCompletion = false; + // Feedback protected boolean lockMovement = true; protected int windUpColor = 0x80FF4400; // Telegraph color during wind up @@ -133,7 +137,9 @@ public abstract class Ability implements IAbility { */ protected boolean applyAbilityDamage(EntityNPCInterface npc, EntityLivingBase hitEntity, float damage, float knockback) { - return applyAbilityDamage(npc, hitEntity, damage, knockback, 0.0f); + double dx = hitEntity.posX - npc.posX; + double dz = hitEntity.posZ - npc.posZ; + return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, 0.0f, dx, dz); } /** @@ -149,6 +155,36 @@ public abstract class Ability implements IAbility { */ protected boolean applyAbilityDamage(EntityNPCInterface npc, EntityLivingBase hitEntity, float damage, float knockback, float knockbackUp) { + double dx = hitEntity.posX - npc.posX; + double dz = hitEntity.posZ - npc.posZ; + return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, knockbackUp, dx, dz); + } + + /** + * Apply damage to an entity with ability hit event support and custom knockback direction. + * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. + * + * @param npc The NPC executing the ability + * @param hitEntity The entity being hit + * @param damage The damage amount + * @param knockback The horizontal knockback + * @param knockbackDirX The X component of knockback direction + * @param knockbackDirZ The Z component of knockback direction + * @return true if damage was applied (not cancelled), false if cancelled + */ + protected boolean applyAbilityDamageWithDirection(EntityNPCInterface npc, EntityLivingBase hitEntity, + float damage, float knockback, + double knockbackDirX, double knockbackDirZ) { + return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, 0.0f, knockbackDirX, knockbackDirZ); + } + + /** + * Internal unified damage application method. + * All public damage methods delegate to this. + */ + private boolean applyAbilityDamageInternal(EntityNPCInterface npc, EntityLivingBase hitEntity, + float damage, float knockback, float knockbackUp, + double knockbackDirX, double knockbackDirZ) { DataAbilities dataAbilities = npc.abilities; AbilityEvent.HitEvent event = dataAbilities.fireHitEvent( this, currentTarget, hitEntity, damage, knockback, knockbackUp); @@ -168,49 +204,6 @@ public abstract class Ability implements IAbility { } // Apply knockback if any - if (finalKnockback > 0 || finalKnockbackUp > 0) { - double dx = hitEntity.posX - npc.posX; - double dz = hitEntity.posZ - npc.posZ; - applyNpcKnockback(hitEntity, dx, dz, finalKnockback, finalKnockbackUp); - } - - return true; - } - - /** - * Apply damage to an entity with ability hit event support and custom knockback direction. - * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. - * - * @param npc The NPC executing the ability - * @param hitEntity The entity being hit - * @param damage The damage amount - * @param knockback The horizontal knockback - * @param knockbackDirX The X component of knockback direction (normalized) - * @param knockbackDirZ The Z component of knockback direction (normalized) - * @return true if damage was applied (not cancelled), false if cancelled - */ - protected boolean applyAbilityDamageWithDirection(EntityNPCInterface npc, EntityLivingBase hitEntity, - float damage, float knockback, - double knockbackDirX, double knockbackDirZ) { - DataAbilities dataAbilities = npc.abilities; - AbilityEvent.HitEvent event = dataAbilities.fireHitEvent( - this, currentTarget, hitEntity, damage, knockback, 0.0f); - - if (event == null) { - return false; // Cancelled - } - - // Apply damage with potentially modified values - float finalDamage = event.getDamage(); - float finalKnockback = event.getKnockback(); - float finalKnockbackUp = event.getKnockbackUp(); - - // Apply damage - use NpcDamageSource for consistency - if (finalDamage > 0) { - hitEntity.attackEntityFrom(new NpcDamageSource("mob", npc), finalDamage); - } - - // Apply knockback in specified direction if (finalKnockback > 0 || finalKnockbackUp > 0) { applyNpcKnockback(hitEntity, knockbackDirX, knockbackDirZ, finalKnockback, finalKnockbackUp); } @@ -383,6 +376,11 @@ public abstract class Ability implements IAbility { if (positionAtNpc) { // AOE_SELF abilities: telegraph follows NPC during windup instance.setEntityIdToFollow(npc.getEntityId()); + + // For LINE/CONE telegraphs: track target direction during windup + if ((telegraphType == TelegraphType.LINE || telegraphType == TelegraphType.CONE) && target != null) { + instance.setTargetEntityId(target.getEntityId()); + } } else if (target != null) { // AOE_TARGET abilities: telegraph follows target during windup instance.setEntityIdToFollow(target.getEntityId()); @@ -487,8 +485,15 @@ public abstract class Ability implements IAbility { } /** - * Tick the ability. Returns true if phase changed. - * Note: Cooldown is managed by DataAbilities when the ability completes. + * Tick the ability forward. Called every game tick while executing. + *

+ * Normal flow: WINDUP -> ACTIVE -> IDLE (no recovery in normal completion) + * Interrupted flow: WINDUP -> RECOVERY -> IDLE (recovery only on interrupt) + *

+ * If waitForCompletion is true, the ability controls when active ends + * by calling signalCompletion() instead of using activeTicks. + * + * @return true if phase changed this tick */ public boolean tick() { if (phase == AbilityPhase.IDLE) return false; @@ -504,16 +509,20 @@ public abstract class Ability implements IAbility { } break; case ACTIVE: - if (currentTick >= activeTicks) { - phase = AbilityPhase.RECOVERY; + // If waitForCompletion is true, ability must call signalCompletion() + // Otherwise, auto-complete when activeTicks is reached + if (!waitForCompletion && currentTick >= activeTicks) { + phase = AbilityPhase.IDLE; currentTick = 0; return true; } break; case RECOVERY: + // Recovery phase is only entered on interrupt + // Count down recoveryTicks then go to IDLE if (currentTick >= recoveryTicks) { phase = AbilityPhase.IDLE; - // Cooldown is managed by DataAbilities.onAbilityComplete() + currentTick = 0; return true; } break; @@ -522,11 +531,35 @@ public abstract class Ability implements IAbility { } /** - * Interrupt this ability + * Signal that the ability has completed its active phase. + * Called by abilities with waitForCompletion=true when they are done. + * For example, AbilitySlam calls this when the NPC lands. + * + * @return true if phase changed to IDLE + */ + public boolean signalCompletion() { + if (phase == AbilityPhase.ACTIVE) { + phase = AbilityPhase.IDLE; + currentTick = 0; + return true; + } + return false; + } + + /** + * Interrupt this ability. Transitions to RECOVERY phase if interruptible. + * Called when NPC takes direct damage during WINDUP. */ public void interrupt() { - phase = AbilityPhase.IDLE; - currentTick = 0; + if (interruptible && phase == AbilityPhase.WINDUP) { + // Interrupted during windup - go to recovery (dazed state) + phase = AbilityPhase.RECOVERY; + currentTick = 0; + } else { + // Force stop - go directly to IDLE + phase = AbilityPhase.IDLE; + currentTick = 0; + } currentTarget = null; telegraphInstance = null; } @@ -611,6 +644,7 @@ public abstract class Ability implements IAbility { nbt.setInteger("active", activeTicks); nbt.setInteger("recovery", recoveryTicks); nbt.setBoolean("interruptible", interruptible); + nbt.setBoolean("waitForCompletion", waitForCompletion); nbt.setBoolean("lockMovement", lockMovement); nbt.setInteger("windUpColor", windUpColor); nbt.setInteger("activeColor", activeColor); @@ -650,6 +684,7 @@ public abstract class Ability implements IAbility { activeTicks = nbt.getInteger("active"); recoveryTicks = nbt.getInteger("recovery"); interruptible = nbt.getBoolean("interruptible"); + waitForCompletion = nbt.getBoolean("waitForCompletion"); lockMovement = nbt.getBoolean("lockMovement"); // Support old telegraphColor key for backwards compatibility if (nbt.hasKey("windUpColor")) { @@ -807,6 +842,14 @@ public abstract class Ability implements IAbility { this.interruptible = interruptible; } + public boolean isWaitForCompletion() { + return waitForCompletion; + } + + public void setWaitForCompletion(boolean waitForCompletion) { + this.waitForCompletion = waitForCompletion; + } + public boolean isLockMovement() { return lockMovement; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 97d69e19c..0db44ea8a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -4,6 +4,8 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityDisc; import net.minecraft.entity.EntityLivingBase; @@ -69,8 +71,8 @@ public class AbilityDisc extends Ability { this.windUpTicks = 20; this.activeTicks = 1; this.recoveryTicks = 10; - this.telegraphType = TelegraphType.POINT; - this.showTelegraph = false; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; } @Override @@ -105,7 +107,7 @@ public class AbilityDisc extends Ability { EntityAbilityDisc disc = new EntityAbilityDisc( world, npc, target, spawnX, spawnY, spawnZ, - discRadius, discThickness, innerColor, outerColor, rotationSpeed, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, boomerang, boomerangDelay, @@ -129,6 +131,33 @@ public class AbilityDisc extends Ability { public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { } + @Override + public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create circle telegraph at target position + Telegraph telegraph = Telegraph.circle(discRadius * 1.5f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); + instance.setCasterEntityId(npc.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return discRadius * 1.5f; + } + @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("speed", speed); @@ -182,7 +211,7 @@ public class AbilityDisc extends Ability { this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF8800; this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); - this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 8.0f; + this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 5.0f; } // Getters & Setters diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 2790eafd8..58a224c64 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -4,6 +4,8 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; import net.minecraft.entity.EntityLivingBase; @@ -68,8 +70,8 @@ public class AbilityEnergyBeam extends Ability { this.windUpTicks = 40; this.activeTicks = 200; // Match maxLifetime to keep NPC locked while beam is active this.recoveryTicks = 5; - this.telegraphType = TelegraphType.POINT; - this.showTelegraph = false; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; } @Override @@ -104,7 +106,7 @@ public class AbilityEnergyBeam extends Ability { EntityAbilityBeam beam = new EntityAbilityBeam( world, npc, target, spawnX, spawnY, spawnZ, - beamWidth, headSize, innerColor, outerColor, rotationSpeed, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, @@ -127,6 +129,33 @@ public class AbilityEnergyBeam extends Ability { public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { } + @Override + public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create circle telegraph at target position + Telegraph telegraph = Telegraph.circle(headSize * 2.0f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); + instance.setCasterEntityId(npc.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return headSize * 2.0f; + } + @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("speed", speed); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 6a98b643a..404589c6e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -128,17 +128,8 @@ public class AbilityGuard extends Ability { if (wasHit && counterSound != null && !counterSound.isEmpty()) { world.playSoundAtEntity(npc, counterSound, 1.0f, 1.2f); } - if (counterAnimationId >= 0) { - if (noppes.npcs.controllers.AnimationController.Instance != null) { - noppes.npcs.controllers.data.Animation animation = - noppes.npcs.controllers.AnimationController.Instance.animations.get(counterAnimationId); - if (animation != null) { - npc.display.animationData.setEnabled(true); - npc.display.animationData.setAnimation(animation); - npc.display.animationData.updateClient(); - } - } - } + // Use shared animation utility + npc.abilities.playAbilityAnimation(counterAnimationId); counterTriggered = false; lastAttacker = null; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 2e23a1e56..3cf04db2c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -184,6 +184,11 @@ public class AbilityHeal extends Ability { } } + @Override + public void onInterrupt(EntityNPCInterface npc, net.minecraft.util.DamageSource source, float damage) { + healedAllies.clear(); + } + @Override public void reset() { super.reset(); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 2b224e400..64a3da8ad 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -46,6 +46,8 @@ public class AbilityLaserShot extends Ability { // Visual properties private int innerColor = 0xFFFFFF; private int outerColor = 0xFF0000; + private float outerColorWidth = 1.8f; + private boolean outerColorEnabled = true; public AbilityLaserShot() { this.typeId = "ability.cnpc.laser_shot"; @@ -103,7 +105,7 @@ public class AbilityLaserShot extends Ability { EntityAbilityLaser laser = new EntityAbilityLaser( world, npc, target, spawnX, spawnY, spawnZ, - laserWidth, innerColor, outerColor, + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, damage, knockback, knockbackUp, expansionSpeed, lingerTicks, explosive, explosionRadius, explosionDamageFalloff, @@ -144,6 +146,8 @@ public class AbilityLaserShot extends Ability { nbt.setInteger("slowLevel", slowLevel); nbt.setInteger("innerColor", innerColor); nbt.setInteger("outerColor", outerColor); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); } @Override @@ -164,6 +168,8 @@ public class AbilityLaserShot extends Ability { this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); } // Getters & Setters @@ -199,4 +205,8 @@ public class AbilityLaserShot extends Ability { public void setInnerColor(int innerColor) { this.innerColor = innerColor; } public int getOuterColor() { return outerColor; } public void setOuterColor(int outerColor) { this.outerColor = outerColor; } + public float getOuterColorWidth() { return outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public boolean isOuterColorEnabled() { return outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index ff03ac39f..7b6f34b68 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -4,6 +4,8 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityOrb; import net.minecraft.entity.EntityLivingBase; @@ -65,8 +67,8 @@ public class AbilityOrb extends Ability { this.windUpTicks = 30; this.activeTicks = 1; // Minimal - just spawn and done this.recoveryTicks = 10; - this.telegraphType = TelegraphType.POINT; - this.showTelegraph = false; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; } @Override @@ -103,7 +105,7 @@ public class AbilityOrb extends Ability { EntityAbilityOrb orb = new EntityAbilityOrb( world, npc, target, spawnX, spawnY, spawnZ, - orbSize, innerColor, outerColor, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, orbSpeed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, @@ -129,6 +131,33 @@ public class AbilityOrb extends Ability { // Nothing to clean up - entity manages itself } + @Override + public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create small circle telegraph at target position + Telegraph telegraph = Telegraph.circle(orbSize * 1.5f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); + instance.setCasterEntityId(npc.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return orbSize * 1.5f; + } + @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("orbSpeed", orbSpeed); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index 6068b269f..d2c17a3e8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -49,10 +49,11 @@ public class AbilitySlam extends Ability { this.name = "Slam"; this.targetingMode = TargetingMode.AOE_SELF; // Can also be AOE_TARGET to leap to target this.windUpTicks = 30; - this.activeTicks = 60; // Max time in air + landing + this.activeTicks = 60; // Max time in air (used as timeout if waitForCompletion fails) this.recoveryTicks = 10; this.cooldownTicks = 100; this.lockMovement = true; + this.waitForCompletion = true; // Ability completes when NPC lands, not by activeTicks this.minRange = 2.0f; this.maxRange = 15.0f; this.telegraphType = TelegraphType.CIRCLE; @@ -258,12 +259,15 @@ public class AbilitySlam extends Ability { } /** - * Called when NPC lands - deal AOE damage. + * Called when NPC lands - deal AOE damage and signal completion. */ private void onLanding(EntityNPCInterface npc, World world) { hasLanded = true; npc.setNpcJumpingState(false); + // Signal that the ability has completed its active phase + signalCompletion(); + // Reset fall distance to prevent fall damage on landing npc.fallDistance = 0; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index d1a67eb3a..b7ca2aa22 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -92,7 +92,7 @@ public class AbilitySweeper extends Ability { // Spawn the entity that handles BOTH visuals AND damage activeEntity = new EntityAbilitySweeper(world, npc, target, beamLength, beamWidth, beamHeight, - innerColor, outerColor, + innerColor, outerColor, outerColorEnabled, outerColorWidth, sweepSpeed, numberOfRotations, damage, damageInterval, piercing, lockOnTarget); diff --git a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java index 47fdf8cbb..71d63f9c6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java +++ b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java @@ -26,6 +26,7 @@ public class TelegraphInstance { // Entity tracking private int entityIdToFollow = -1; private int casterEntityId = -1; + private int targetEntityId = -1; // For LINE telegraphs: entity to face (yaw tracking) // Timing private int remainingTicks; @@ -81,6 +82,16 @@ public class TelegraphInstance { } } + // Update yaw to face target entity (for LINE telegraphs) + if (targetEntityId >= 0 && world != null) { + Entity target = world.getEntityByID(targetEntityId); + if (target != null) { + double dx = target.posX - this.x; + double dz = target.posZ - this.z; + this.yaw = (float) (Math.atan2(-dx, dz) * 180.0 / Math.PI); + } + } + // Check for warning phase transition if (!isWarning && telegraph != null) { if (remainingTicks <= telegraph.getWarningStartTick()) { @@ -108,7 +119,7 @@ public class TelegraphInstance { } /** - * Get alpha-modulated color for pulsing animation. + * Get alpha-modulated color for breathing animation. */ public int getAnimatedColor(float partialTicks) { int baseColor = getCurrentColor(); @@ -116,9 +127,12 @@ public class TelegraphInstance { return baseColor; } - // Pulsing animation: modulate alpha based on time + // Breathing animation: slow, smooth modulation of alpha float time = (totalTicks - remainingTicks) + partialTicks; - float pulse = (float) (Math.sin(time * 0.3) * 0.3 + 0.7); // 0.4 to 1.0 range + // Slower breathing: 0.08 for ~4 second cycle, smoother sine curve + float breathPhase = (float) Math.sin(time * 0.08); + // Smooth easing: square the sine for more organic feel, range 0.5 to 1.0 + float pulse = 0.5f + (breathPhase * breathPhase * 0.5f * Math.signum(breathPhase)); int alpha = (baseColor >> 24) & 0xFF; int r = (baseColor >> 16) & 0xFF; @@ -149,6 +163,7 @@ public class TelegraphInstance { nbt.setInteger("entityIdToFollow", entityIdToFollow); nbt.setInteger("casterEntityId", casterEntityId); + nbt.setInteger("targetEntityId", targetEntityId); nbt.setInteger("remainingTicks", remainingTicks); nbt.setInteger("totalTicks", totalTicks); @@ -173,6 +188,7 @@ public class TelegraphInstance { this.entityIdToFollow = nbt.getInteger("entityIdToFollow"); this.casterEntityId = nbt.getInteger("casterEntityId"); + this.targetEntityId = nbt.getInteger("targetEntityId"); this.remainingTicks = nbt.getInteger("remainingTicks"); this.totalTicks = nbt.getInteger("totalTicks"); @@ -241,11 +257,12 @@ public class TelegraphInstance { } /** - * Locks the telegraph at its current position. + * Locks the telegraph at its current position and direction. * Stops following any entity - used when ability commits to action. */ public void lockPosition() { this.entityIdToFollow = -1; + this.targetEntityId = -1; } public int getCasterEntityId() { @@ -256,6 +273,14 @@ public class TelegraphInstance { this.casterEntityId = casterEntityId; } + public int getTargetEntityId() { + return targetEntityId; + } + + public void setTargetEntityId(int targetEntityId) { + this.targetEntityId = targetEntityId; + } + public int getRemainingTicks() { return remainingTicks; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 586e57ae9..b0c3579e7 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -59,7 +59,8 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { */ public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float beamWidth, float headSize, int innerColor, int outerColor, float rotationSpeed, + float beamWidth, float headSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -69,7 +70,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { // Initialize base properties initProjectile(owner, target, x, y, z, - headSize, innerColor, outerColor, rotationSpeed, + headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index e46542d8c..ef513f80d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -44,7 +44,8 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { */ public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float discRadius, float discThickness, int innerColor, int outerColor, float rotationSpeed, + float discRadius, float discThickness, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean boomerang, int boomerangDelay, @@ -55,7 +56,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Initialize base properties (use discRadius as size for base) initProjectile(owner, target, x, y, z, - discRadius, innerColor, outerColor, rotationSpeed, + discRadius, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 02b797524..78668377a 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -50,6 +50,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float laserWidth, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float damage, float knockback, float knockbackUp, float expansionSpeed, int lingerTicks, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -59,7 +60,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Initialize base properties initProjectile(owner, target, x, y, z, - laserWidth, innerColor, outerColor, 0.0f, // No rotation for laser + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, 0.0f, // No rotation for laser damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index c218007a0..de447333b 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -34,7 +34,8 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { */ public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float orbSize, int innerColor, int outerColor, float rotationSpeed, + float orbSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -44,7 +45,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { // Initialize base properties initProjectile(owner, target, x, y, z, - orbSize, innerColor, outerColor, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index fa84d933f..eed12d10b 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -29,6 +29,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected float size = 1.0f; protected int innerColor = 0xFFFFFF; protected int outerColor = 0x8888FF; + protected boolean outerColorEnabled = true; + protected float outerColorWidth = 1.8f; protected float rotationSpeed = 4.0f; // ==================== COMBAT PROPERTIES ==================== @@ -85,7 +87,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA */ protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float size, int innerColor, int outerColor, float rotationSpeed, + float size, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, float damage, float knockback, float knockbackUp, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, @@ -102,6 +105,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.size = size; this.innerColor = innerColor; this.outerColor = outerColor; + this.outerColorEnabled = outerColorEnabled; + this.outerColorWidth = outerColorWidth; this.rotationSpeed = rotationSpeed; // Combat @@ -384,6 +389,14 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA return outerColor; } + public boolean isOuterColorEnabled() { + return outerColorEnabled; + } + + public float getOuterColorWidth() { + return outerColorWidth; + } + public float getRotationSpeed() { return rotationSpeed; } @@ -438,6 +451,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.size = nbt.getFloat("Size"); this.innerColor = nbt.getInteger("InnerColor"); this.outerColor = nbt.getInteger("OuterColor"); + this.outerColorEnabled = !nbt.hasKey("OuterColorEnabled") || nbt.getBoolean("OuterColorEnabled"); + this.outerColorWidth = nbt.hasKey("OuterColorWidth") ? nbt.getFloat("OuterColorWidth") : 1.8f; this.rotationSpeed = nbt.hasKey("RotationSpeed") ? nbt.getFloat("RotationSpeed") : 4.0f; this.damage = nbt.getFloat("Damage"); @@ -480,6 +495,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA nbt.setFloat("Size", size); nbt.setInteger("InnerColor", innerColor); nbt.setInteger("OuterColor", outerColor); + nbt.setBoolean("OuterColorEnabled", outerColorEnabled); + nbt.setFloat("OuterColorWidth", outerColorWidth); nbt.setFloat("RotationSpeed", rotationSpeed); nbt.setFloat("Damage", damage); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java index a5758a2ed..6ec4f8b38 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java @@ -32,6 +32,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa private float beamHeight = 0.8f; private int innerColor = 0xFF6600; private int outerColor = 0xFF0000; + private boolean outerColorEnabled = true; + private float outerColorWidth = 1.8f; // Combat properties private float damage = 5.0f; @@ -70,6 +72,7 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa public EntityAbilitySweeper(World world, EntityNPCInterface owner, EntityLivingBase target, float beamLength, float beamWidth, float beamHeight, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float sweepSpeed, int numberOfRotations, float damage, int damageInterval, boolean piercing, boolean lockOnTarget) { @@ -82,6 +85,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa this.beamHeight = beamHeight; this.innerColor = innerColor; this.outerColor = outerColor; + this.outerColorEnabled = outerColorEnabled; + this.outerColorWidth = outerColorWidth; this.sweepSpeed = sweepSpeed; this.numberOfRotations = numberOfRotations; this.damage = damage; @@ -323,6 +328,14 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa return outerColor; } + public boolean isOuterColorEnabled() { + return outerColorEnabled; + } + + public float getOuterColorWidth() { + return outerColorWidth; + } + /** * Get the full interpolated angle INCLUDING base yaw for rendering. */ @@ -353,6 +366,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa this.beamHeight = nbt.getFloat("BeamHeight"); this.innerColor = nbt.getInteger("InnerColor"); this.outerColor = nbt.getInteger("OuterColor"); + this.outerColorEnabled = !nbt.hasKey("OuterColorEnabled") || nbt.getBoolean("OuterColorEnabled"); + this.outerColorWidth = nbt.hasKey("OuterColorWidth") ? nbt.getFloat("OuterColorWidth") : 1.8f; this.sweepSpeed = nbt.getFloat("SweepSpeed"); this.numberOfRotations = nbt.getInteger("NumRotations"); this.completedRotations = nbt.getInteger("CompletedRotations"); @@ -375,6 +390,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa nbt.setFloat("BeamHeight", beamHeight); nbt.setInteger("InnerColor", innerColor); nbt.setInteger("OuterColor", outerColor); + nbt.setBoolean("OuterColorEnabled", outerColorEnabled); + nbt.setFloat("OuterColorWidth", outerColorWidth); nbt.setFloat("SweepSpeed", sweepSpeed); nbt.setInteger("NumRotations", numberOfRotations); nbt.setInteger("CompletedRotations", completedRotations); @@ -399,6 +416,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa buffer.writeFloat(beamHeight); buffer.writeInt(innerColor); buffer.writeInt(outerColor); + buffer.writeBoolean(outerColorEnabled); + buffer.writeFloat(outerColorWidth); buffer.writeFloat(sweepSpeed); buffer.writeInt(numberOfRotations); buffer.writeInt(completedRotations); @@ -420,6 +439,8 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa this.beamHeight = buffer.readFloat(); this.innerColor = buffer.readInt(); this.outerColor = buffer.readInt(); + this.outerColorEnabled = buffer.readBoolean(); + this.outerColorWidth = buffer.readFloat(); this.sweepSpeed = buffer.readFloat(); this.numberOfRotations = buffer.readInt(); this.completedRotations = buffer.readInt(); diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 51d2831ac..8875508b1 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -18,9 +18,7 @@ import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Random; /** @@ -47,9 +45,14 @@ public class DataAbilities { public boolean enabled = false; /** - * Minimum ticks between ability selections (global cooldown) + * Minimum cooldown ticks between abilities (global minimum) */ - public int globalCooldown = 20; + public int minCooldown = 80; + + /** + * Maximum cooldown ticks between abilities (global maximum) + */ + public int maxCooldown = 200; // ═══════════════════════════════════════════════════════════════════ // RUNTIME STATE (not saved) @@ -61,14 +64,9 @@ public class DataAbilities { private transient Ability currentAbility; /** - * Per-ability cooldown timers (ability ID -> world time when cooldown ends) + * World time when NPC cooldown ends (can select next ability) */ - private transient Map cooldowns = new HashMap<>(); - - /** - * Ticks until next ability can be selected (global cooldown timer) - */ - private transient int globalCooldownTimer = 0; + private transient long cooldownEndTime = 0; /** * Last target used for ability execution @@ -101,11 +99,6 @@ public class DataAbilities { return; } - // Tick global cooldown - if (globalCooldownTimer > 0) { - globalCooldownTimer--; - } - // Tick current ability if executing if (currentAbility != null && currentAbility.isExecuting()) { tickCurrentAbility(); @@ -192,24 +185,33 @@ public class DataAbilities { npc.motionZ = 0; } } + + // Lock look direction at target during ACTIVE phase only + if (shouldLockLookDirection() && target != null && target.isEntityAlive()) { + npc.getLookHelper().setLookPositionWithEntity(target, 30.0F, 30.0F); + } } } /** * Called when an ability completes. + * Calculates cooldown as: random(minCooldown, maxCooldown) + ability's cooldown offset */ private void onAbilityComplete() { if (currentAbility != null) { // Stop any ability animation stopAbilityAnimation(); - // Start per-ability cooldown - startCooldown(currentAbility); + // Calculate cooldown: random(min, max) + ability offset + int baseCooldown = minCooldown; + if (maxCooldown > minCooldown) { + baseCooldown = minCooldown + random.nextInt(maxCooldown - minCooldown + 1); + } + int totalCooldown = baseCooldown + currentAbility.getCooldownTicks(); + cooldownEndTime = npc.worldObj.getTotalWorldTime() + totalCooldown; + currentAbility = null; lastTarget = null; - - // Start global cooldown - globalCooldownTimer = globalCooldown; } } @@ -247,7 +249,8 @@ public class DataAbilities { if (currentAbility != null && currentAbility.isExecuting()) { return false; } - if (globalCooldownTimer > 0) { + // Check if still on cooldown + if (npc.worldObj.getTotalWorldTime() < cooldownEndTime) { return false; } return true; @@ -293,11 +296,6 @@ public class DataAbilities { return false; } - // Check cooldown - if (isOnCooldown(ability)) { - return false; - } - // Check if already executing if (ability.isExecuting()) { return false; @@ -358,8 +356,11 @@ public class DataAbilities { /** * Play an animation on the NPC by ID. + * Public so abilities can trigger animations directly if needed. + * + * @param animationId The global animation ID to play, or -1 for none */ - private void playAbilityAnimation(int animationId) { + public void playAbilityAnimation(int animationId) { if (animationId < 0) return; if (AnimationController.Instance == null) return; @@ -407,37 +408,25 @@ public class DataAbilities { // ═══════════════════════════════════════════════════════════════════ /** - * Check if an ability is on cooldown. + * Check if NPC is on cooldown (cannot use any ability). */ - public boolean isOnCooldown(Ability ability) { - Long endTime = cooldowns.get(ability.getId()); - if (endTime == null) { - return false; - } - return npc.worldObj.getTotalWorldTime() < endTime; + public boolean isOnCooldown() { + return npc.worldObj.getTotalWorldTime() < cooldownEndTime; } /** - * Start cooldown for an ability. + * Get remaining cooldown ticks. */ - private void startCooldown(Ability ability) { - long endTime = npc.worldObj.getTotalWorldTime() + ability.getCooldownTicks(); - cooldowns.put(ability.getId(), endTime); + public long getRemainingCooldown() { + long remaining = cooldownEndTime - npc.worldObj.getTotalWorldTime(); + return remaining > 0 ? remaining : 0; } /** - * Reset cooldown for a specific ability. + * Reset cooldown (allow immediate ability use). */ - public void resetCooldown(String abilityId) { - cooldowns.remove(abilityId); - } - - /** - * Reset all cooldowns. - */ - public void resetAllCooldowns() { - cooldowns.clear(); - globalCooldownTimer = 0; + public void resetCooldown() { + cooldownEndTime = 0; } // ═══════════════════════════════════════════════════════════════════ @@ -489,9 +478,18 @@ public class DataAbilities { /** * Record a hit for the hit count condition. + * Includes periodic cleanup to prevent memory leak. */ private void recordHit() { - recentHitTimes.add(npc.worldObj.getTotalWorldTime()); + long currentTime = npc.worldObj.getTotalWorldTime(); + recentHitTimes.add(currentTime); + + // Cleanup old entries periodically to prevent unbounded growth + // Keep only hits from last 5 minutes (6000 ticks) max + if (recentHitTimes.size() > 50) { + long cutoff = currentTime - 6000; + recentHitTimes.removeIf(time -> time < cutoff); + } } /** @@ -517,6 +515,8 @@ public class DataAbilities { /** * Interrupt the currently executing ability. + * The ability will transition to RECOVERY phase (dazed state) and continue ticking. + * When RECOVERY completes, the ability will move to IDLE and onAbilityComplete() is called. */ public void interruptCurrentAbility(DamageSource source, float damage) { if (currentAbility != null) { @@ -532,9 +532,10 @@ public class DataAbilities { NpcAPI.EVENT_BUS.post(interruptEvent); currentAbility.onInterrupt(npc, source, damage); - currentAbility.interrupt(); - currentAbility = null; - lastTarget = null; + currentAbility.interrupt(); // This now transitions to RECOVERY, not IDLE + + // Don't clear currentAbility - let it tick through RECOVERY phase + // When RECOVERY ends and phase becomes IDLE, onAbilityComplete() will be called } } @@ -605,7 +606,7 @@ public class DataAbilities { */ public void reset() { stopCurrentAbility(); - resetAllCooldowns(); + resetCooldown(); // Reset execution state on all abilities for (Ability ability : abilities) { @@ -707,6 +708,24 @@ public class DataAbilities { } } + /** + * Check if NPC's look direction should be locked to target. + * Only locks during ACTIVE phase when lockMovement is true. + * This allows the NPC to freely track target during WINDUP and RECOVERY. + */ + public boolean shouldLockLookDirection() { + if (currentAbility == null || !currentAbility.isExecuting()) { + return false; + } + + // Only lock look direction during ACTIVE phase + if (currentAbility.getPhase() != AbilityPhase.ACTIVE) { + return false; + } + + return currentAbility.isLockMovement(); + } + /** * Check if NPC should skip normal attacks during ability execution. */ @@ -724,7 +743,8 @@ public class DataAbilities { public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setBoolean("AbilitiesEnabled", enabled); - compound.setInteger("AbilityGlobalCooldown", globalCooldown); + compound.setInteger("AbilityMinCooldown", minCooldown); + compound.setInteger("AbilityMaxCooldown", maxCooldown); NBTTagList abilityList = new NBTTagList(); for (Ability ability : abilities) { @@ -737,8 +757,20 @@ public class DataAbilities { public void readFromNBT(NBTTagCompound compound) { enabled = compound.getBoolean("AbilitiesEnabled"); - globalCooldown = compound.hasKey("AbilityGlobalCooldown") ? - compound.getInteger("AbilityGlobalCooldown") : 20; + + // Support old globalCooldown for backwards compatibility + if (compound.hasKey("AbilityMinCooldown")) { + minCooldown = compound.getInteger("AbilityMinCooldown"); + maxCooldown = compound.getInteger("AbilityMaxCooldown"); + } else if (compound.hasKey("AbilityGlobalCooldown")) { + // Migrate old single cooldown to min/max range + int oldCooldown = compound.getInteger("AbilityGlobalCooldown"); + minCooldown = oldCooldown; + maxCooldown = oldCooldown * 2; // Give some range + } else { + minCooldown = 20; + maxCooldown = 60; + } abilities.clear(); NBTTagList abilityList = compound.getTagList("Abilities", 10); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java index 0f41347d4..c0fb15596 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java @@ -51,7 +51,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Settings private boolean abilitiesEnabled = false; - private int globalCooldown = 20; + private int minCooldown = 20; + private int maxCooldown = 60; private String search = ""; private int selectedAbilityIndex = -1; @@ -72,12 +73,18 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC addLabel(new GuiNpcLabel(100, "gui.enabled", guiLeft + 5, y + 5)); addButton(new GuiNpcButton(100, guiLeft + 55, y, 50, 20, new String[]{"gui.no", "gui.yes"}, abilitiesEnabled ? 1 : 0)); - // Global cooldown (spaced out since combat only is removed) - addLabel(new GuiNpcLabel(101, "ability.globalCooldown", guiLeft + 140, y + 5)); - GuiNpcTextField cooldownField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 230, y, 50, 20, String.valueOf(globalCooldown)); - cooldownField.setIntegersOnly(); - cooldownField.setMinMaxDefault(0, 10000, 20); - addTextField(cooldownField); + // Cooldown range: Min Cooldown and Max Cooldown + addLabel(new GuiNpcLabel(101, "ability.minCooldown", guiLeft + 115, y + 5)); + GuiNpcTextField minField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 185, y, 40, 20, String.valueOf(minCooldown)); + minField.setIntegersOnly(); + minField.setMinMaxDefault(0, 10000, 20); + addTextField(minField); + + addLabel(new GuiNpcLabel(102, "ability.maxCooldown", guiLeft + 235, y + 5)); + GuiNpcTextField maxField = new GuiNpcTextField(102, this, fontRendererObj, guiLeft + 305, y, 40, 20, String.valueOf(maxCooldown)); + maxField.setIntegersOnly(); + maxField.setMinMaxDefault(0, 10000, 60); + addTextField(maxField); y += 28; @@ -254,7 +261,19 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void setGuiData(NBTTagCompound compound) { abilitiesEnabled = compound.getBoolean("AbilitiesEnabled"); - globalCooldown = compound.hasKey("AbilityGlobalCooldown") ? compound.getInteger("AbilityGlobalCooldown") : 20; + + // Support old globalCooldown for backwards compatibility + if (compound.hasKey("AbilityMinCooldown")) { + minCooldown = compound.getInteger("AbilityMinCooldown"); + maxCooldown = compound.getInteger("AbilityMaxCooldown"); + } else if (compound.hasKey("AbilityGlobalCooldown")) { + int oldCooldown = compound.getInteger("AbilityGlobalCooldown"); + minCooldown = oldCooldown; + maxCooldown = oldCooldown * 2; + } else { + minCooldown = 20; + maxCooldown = 60; + } npcAbilities.clear(); NBTTagList abilityList = compound.getTagList("Abilities", 10); @@ -352,7 +371,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC public void save() { NBTTagCompound compound = new NBTTagCompound(); compound.setBoolean("AbilitiesEnabled", abilitiesEnabled); - compound.setInteger("AbilityGlobalCooldown", globalCooldown); + compound.setInteger("AbilityMinCooldown", minCooldown); + compound.setInteger("AbilityMaxCooldown", maxCooldown); NBTTagList abilityList = new NBTTagList(); for (Ability ability : npcAbilities) { @@ -421,7 +441,20 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void unFocused(GuiNpcTextField textField) { if (textField.id == 101) { - globalCooldown = textField.getInteger(); + minCooldown = textField.getInteger(); + // Ensure min <= max + if (minCooldown > maxCooldown) { + maxCooldown = minCooldown; + initGui(); + } + save(); + } else if (textField.id == 102) { + maxCooldown = textField.getInteger(); + // Ensure min <= max + if (maxCooldown < minCooldown) { + minCooldown = maxCooldown; + initGui(); + } save(); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index 6f5c8ea57..47385f7cb 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -15,13 +15,18 @@ import noppes.npcs.client.gui.util.SubGuiInterface; public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { private final AbilityLaserShot laser; - private int editingTypeColorId = 0; + private int editingVisualColorId = 0; public SubGuiAbilityLaserShot(AbilityLaserShot ability, IAbilityConfigCallback callback) { super(ability, callback); this.laser = ability; } + @Override + protected boolean hasVisualSettings() { + return true; + } + @Override protected void initTypeTab(int startY) { int y = startY; @@ -72,21 +77,40 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(109, "ability.knockbackUp", col2LabelX, y + 5)); addTextField(createFloatField(109, col2FieldX, y, 50, laser.getKnockbackUp())); + } - y += 24; + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; - // Row 6: Inner Color + Outer Color - addLabel(new GuiNpcLabel(120, "ability.innerColor", labelX, y + 5)); + // Row 1: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", laser.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(120, fieldX, y, 50, 20, innerHex); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); innerColorBtn.setTextColor(laser.getInnerColor() & 0xFFFFFF); addButton(innerColorBtn); - addLabel(new GuiNpcLabel(121, "ability.outerColor", col2LabelX, y + 5)); + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); String outerHex = String.format("%06X", laser.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(121, col2FieldX, y, 50, 20, outerHex); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); outerColorBtn.setTextColor(laser.getOuterColor() & 0xFFFFFF); + outerColorBtn.setEnabled(laser.isOuterColorEnabled()); addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isOuterColorEnabled() ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, laser.getOuterColorWidth()); + widthField.setEnabled(laser.isOuterColorEnabled()); + addTextField(widthField); } @Override @@ -96,34 +120,54 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { case 106: laser.setExplosive(value == 1); break; - case 120: - editingTypeColorId = 120; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; setSubGui(new SubGuiColorSelector(laser.getInnerColor())); break; - case 121: - editingTypeColorId = 121; + case 201: + editingVisualColorId = 201; setSubGui(new SubGuiColorSelector(laser.getOuterColor())); break; + case 202: + laser.setOuterColorEnabled(value == 1); + initGui(); + break; } } @Override public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingTypeColorId != 0) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; int rgb = colorSelector.color & 0x00FFFFFF; - if (editingTypeColorId == 120) { + if (editingVisualColorId == 200) { laser.setInnerColor(rgb); - } else if (editingTypeColorId == 121) { + } else if (editingVisualColorId == 201) { laser.setOuterColor(rgb); } - editingTypeColorId = 0; + editingVisualColorId = 0; initGui(); } else { super.subGuiClosed(subgui); } } + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + laser.setOuterColorWidth(parseFloat(field, laser.getOuterColorWidth())); + break; + } + } + @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { From 6c7c72b0f987059c6eeeeb661134864201b2e100 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 26 Jan 2026 18:38:43 -0500 Subject: [PATCH 05/85] Lightning, Orb and Beam Improvements. Outer Glow Configurations for Abilities --- .gitignore | 1 + .../client/renderer/RenderAbilityBeam.java | 271 ++++++++++++- .../client/renderer/RenderAbilityDisc.java | 45 ++- .../client/renderer/RenderAbilityLaser.java | 84 +++- .../client/renderer/RenderAbilityOrb.java | 113 +++--- .../client/renderer/RenderAbilityOrbCube.java | 56 --- .../client/renderer/TelegraphRenderer.java | 12 +- .../lightning/AttachedLightningRenderer.java | 281 +++++++++++++ .../renderer/lightning/LightningBolt.java | 295 ++++++++++++++ .../renderer/lightning/LightningHandler.java | 202 ++++++++++ .../client/renderer/lightning/Quaternion.java | 85 ++++ .../npcs/client/renderer/lightning/Vec3d.java | 184 +++++++++ .../data/ability/type/AbilityDisc.java | 24 +- .../data/ability/type/AbilityEnergyBeam.java | 82 +++- .../data/ability/type/AbilityLaserShot.java | 24 +- .../data/ability/type/AbilityOrb.java | 53 ++- .../data/telegraph/TelegraphInstance.java | 56 ++- .../npcs/entity/EntityAbilityBeam.java | 381 +++++++++++++++++- .../npcs/entity/EntityAbilityDisc.java | 29 +- .../npcs/entity/EntityAbilityLaser.java | 28 +- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 28 +- .../npcs/entity/EntityAbilityProjectile.java | 71 +++- .../java/noppes/npcs/client/ClientProxy.java | 9 +- .../noppes/npcs/client/ClientTickHandler.java | 4 + .../advanced/ability/SubGuiAbilityDisc.java | 32 ++ .../ability/SubGuiAbilityEnergyBeam.java | 32 ++ .../ability/SubGuiAbilityLaserShot.java | 32 ++ .../advanced/ability/SubGuiAbilityOrb.java | 62 ++- .../assets/customnpcs/lang/en_US.lang | 3 + 29 files changed, 2372 insertions(+), 207 deletions(-) delete mode 100644 src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/lightning/Quaternion.java create mode 100644 src/main/java/kamkeel/npcs/client/renderer/lightning/Vec3d.java diff --git a/.gitignore b/.gitignore index d24cc7cf7..908eae39d 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ out run src/main/resources/assets/customnpcs/api df/ +tmp/ diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java index 204be9d7e..554b07e31 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -2,6 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.client.renderer.lightning.AttachedLightningRenderer; import kamkeel.npcs.entity.EntityAbilityBeam; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; @@ -31,6 +32,13 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { setupRenderState(); + // Handle charging state (windup phase) - render only growing orb + if (beam.isCharging()) { + renderChargingOrb(beam, x, y, z, partialTicks); + restoreRenderState(); + return; + } + // Get trail points (these are RELATIVE to origin) List trail = beam.getTrailPoints(); if (trail.isEmpty()) { @@ -60,11 +68,17 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glPushMatrix(); GL11.glTranslated(renderOriginX, renderOriginY, renderOriginZ); - // Render tail orb at origin (0,0,0) - static, no rotation - renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled()); + // Render tail orb at origin (0,0,0) - only in anchored mode + if (beam.shouldRenderTailOrb()) { + renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); + } - // Render trail segments with smooth connections - renderSmoothTrail(trail, beamWidth, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); + // Render trail segments with smooth connections (with fading for non-anchored) + if (beam.hasFadingTrail()) { + renderFadingTrail(beam, trail, beamWidth, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); + } else { + renderSmoothTrail(trail, beamWidth, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); + } // Render head at interpolated offset position renderHead(beam, headOffsetX, headOffsetY, headOffsetZ, headSize, innerColor, outerColor, partialTicks); @@ -74,27 +88,84 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { restoreRenderState(); } + /** + * Render the charging orb during windup phase. + * Grows from 0 to headSize based on charge progress. + */ + private void renderChargingOrb(EntityAbilityBeam beam, double x, double y, double z, float partialTicks) { + float headSize = beam.getHeadSize(); + float chargeProgress = beam.getInterpolatedChargeProgress(partialTicks); + float size = headSize * chargeProgress; + + if (size <= 0.01f) return; + + int innerColor = beam.getInnerColor(); + int outerColor = beam.getOuterColor(); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + // Pulsing effect + float pulseTime = beam.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.2f) * 0.08f; + float scale = size * (1.0f + scaleModifier); + + // Render lightning during charging if enabled + if (beam.hasLightningEffect()) { + renderAttachedLightning(beam, scale); + } + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Inner scale defines the core size + float innerScale = 0.6f; + + // Render outer glow only if enabled + if (beam.isOuterColorEnabled()) { + float outerScale = innerScale + beam.getOuterColorWidth(); + GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glScalef(outerScale, outerScale, outerScale); + renderCube(outerColor, 0.5f, 0.5f); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + } + + // Render inner core + GL11.glScalef(innerScale, innerScale, innerScale); + renderCube(innerColor, 1.0f, 0.5f); + + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } + /** * Render the tail orb at the origin (where the beam emanates from). * This orb does not rotate - it's a stable anchor point. */ - private void renderTailOrb(float size, int innerColor, int outerColor, boolean outerColorEnabled) { + private void renderTailOrb(float size, int innerColor, int outerColor, boolean outerColorEnabled, float outerColorWidth) { GL11.glPushMatrix(); // Already at origin (0,0,0) + // Inner scale defines the core size + float innerScale = 0.6f; + // Render outer glow only if enabled + // outerColorWidth is an additive offset from inner size if (outerColorEnabled) { + float outerScale = innerScale + outerColorWidth; GL11.glDepthMask(false); GL11.glPushMatrix(); - GL11.glScalef(size, size, size); + GL11.glScalef(size * outerScale, size * outerScale, size * outerScale); renderCube(outerColor, 0.4f, 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } - // Render inner core (smaller, solid) + // Render inner core (solid) GL11.glPushMatrix(); - GL11.glScalef(size * 0.6f, size * 0.6f, size * 0.6f); + GL11.glScalef(size * innerScale, size * innerScale, size * innerScale); renderCube(innerColor, 1.0f, 0.5f); GL11.glPopMatrix(); @@ -115,15 +186,153 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { // At connection points, average the perpendiculars for smooth transitions List perpFrames = computePerpendiculars(trail); + // Inner scale defines the core width + float innerScale = 0.6f; + float innerWidth = width * innerScale; + // Render outer glow trail (wider, translucent) - only if enabled + // outerColorWidth is an additive offset from inner width if (outerColorEnabled) { + float outerWidth = innerWidth + outerColorWidth * width; GL11.glDepthMask(false); - renderTrailTube(trail, perpFrames, width * outerColorWidth, outerColor, 0.3f, true); + renderTrailTube(trail, perpFrames, outerWidth, outerColor, 0.3f, true); GL11.glDepthMask(true); } // Render inner core trail - renderTrailTube(trail, perpFrames, width * 0.6f, innerColor, 0.9f, false); + renderTrailTube(trail, perpFrames, innerWidth, innerColor, 0.9f, false); + } + + /** + * Render trail with fading effect (comet style) for non-anchored beams. + * Older trail points fade out based on their age. + */ + private void renderFadingTrail(EntityAbilityBeam beam, List trail, float width, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth) { + if (trail.size() < 2) return; + + List ages = beam.getTrailPointAges(); + int fadeTime = beam.getTrailFadeTime(); + + // Pre-compute perpendicular frames + List perpFrames = computePerpendiculars(trail); + + // Inner scale defines the core width + float innerScale = 0.6f; + float innerWidth = width * innerScale; + + // Render outer glow trail with fading + if (outerColorEnabled) { + float outerWidth = innerWidth + outerColorWidth * width; + GL11.glDepthMask(false); + renderFadingTrailTube(trail, perpFrames, ages, fadeTime, outerWidth, outerColor, 0.3f); + GL11.glDepthMask(true); + } + + // Render inner core trail with fading + renderFadingTrailTube(trail, perpFrames, ages, fadeTime, innerWidth, innerColor, 0.9f); + } + + /** + * Render trail tube with age-based fading. + */ + private void renderFadingTrailTube(List trail, List perpFrames, List ages, + int fadeTime, float width, int color, float baseAlpha) { + float[] rgb = extractRGB(color); + float r = rgb[0], g = rgb[1], b = rgb[2]; + float halfWidth = width * 0.5f; + int size = trail.size(); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + for (int i = 0; i < size - 1; i++) { + Vec3 p1 = trail.get(i); + Vec3 p2 = trail.get(i + 1); + double[] frame1 = perpFrames.get(i); + double[] frame2 = perpFrames.get(i + 1); + + // Calculate alpha based on age (older = more faded) + float age1 = i < ages.size() ? ages.get(i) : 0; + float age2 = (i + 1) < ages.size() ? ages.get(i + 1) : 0; + float fade1 = 1.0f - Math.min(1.0f, age1 / fadeTime); + float fade2 = 1.0f - Math.min(1.0f, age2 / fadeTime); + float alpha1 = baseAlpha * fade1; + float alpha2 = baseAlpha * fade2; + + // Skip fully faded segments + if (alpha1 <= 0.01f && alpha2 <= 0.01f) continue; + + // Calculate 4 corners at start + double s1x = p1.xCoord - frame1[0] * halfWidth - frame1[3] * halfWidth; + double s1y = p1.yCoord - frame1[1] * halfWidth - frame1[4] * halfWidth; + double s1z = p1.zCoord - frame1[2] * halfWidth - frame1[5] * halfWidth; + + double s2x = p1.xCoord + frame1[0] * halfWidth - frame1[3] * halfWidth; + double s2y = p1.yCoord + frame1[1] * halfWidth - frame1[4] * halfWidth; + double s2z = p1.zCoord + frame1[2] * halfWidth - frame1[5] * halfWidth; + + double s3x = p1.xCoord + frame1[0] * halfWidth + frame1[3] * halfWidth; + double s3y = p1.yCoord + frame1[1] * halfWidth + frame1[4] * halfWidth; + double s3z = p1.zCoord + frame1[2] * halfWidth + frame1[5] * halfWidth; + + double s4x = p1.xCoord - frame1[0] * halfWidth + frame1[3] * halfWidth; + double s4y = p1.yCoord - frame1[1] * halfWidth + frame1[4] * halfWidth; + double s4z = p1.zCoord - frame1[2] * halfWidth + frame1[5] * halfWidth; + + // Calculate 4 corners at end + double e1x = p2.xCoord - frame2[0] * halfWidth - frame2[3] * halfWidth; + double e1y = p2.yCoord - frame2[1] * halfWidth - frame2[4] * halfWidth; + double e1z = p2.zCoord - frame2[2] * halfWidth - frame2[5] * halfWidth; + + double e2x = p2.xCoord + frame2[0] * halfWidth - frame2[3] * halfWidth; + double e2y = p2.yCoord + frame2[1] * halfWidth - frame2[4] * halfWidth; + double e2z = p2.zCoord + frame2[2] * halfWidth - frame2[5] * halfWidth; + + double e3x = p2.xCoord + frame2[0] * halfWidth + frame2[3] * halfWidth; + double e3y = p2.yCoord + frame2[1] * halfWidth + frame2[4] * halfWidth; + double e3z = p2.zCoord + frame2[2] * halfWidth + frame2[5] * halfWidth; + + double e4x = p2.xCoord - frame2[0] * halfWidth + frame2[3] * halfWidth; + double e4y = p2.yCoord - frame2[1] * halfWidth + frame2[4] * halfWidth; + double e4z = p2.zCoord - frame2[2] * halfWidth + frame2[5] * halfWidth; + + // Bottom face + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s1x, s1y, s1z); + tess.addVertex(s2x, s2y, s2z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e2x, e2y, e2z); + tess.addVertex(e1x, e1y, e1z); + + // Top face + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s4x, s4y, s4z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e4x, e4y, e4z); + tess.addVertex(e3x, e3y, e3z); + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s3x, s3y, s3z); + + // Left face + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s1x, s1y, s1z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e1x, e1y, e1z); + tess.addVertex(e4x, e4y, e4z); + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s4x, s4y, s4z); + + // Right face + tess.setColorRGBA_F(r, g, b, alpha1); + tess.addVertex(s2x, s2y, s2z); + tess.addVertex(s3x, s3y, s3z); + tess.setColorRGBA_F(r, g, b, alpha2); + tess.addVertex(e3x, e3y, e3z); + tess.addVertex(e2x, e2y, e2z); + } + + tess.draw(); } /** @@ -328,6 +537,11 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { float scaleModifier = (float) Math.sin(pulseTime * 0.2f) * 0.1f; float scale = size * (1.0f + scaleModifier); + // Render lightning BEFORE rotation so it crackles in all directions (only on head) + if (beam.hasLightningEffect()) { + renderAttachedLightning(beam, scale); + } + // Rotation GL11.glRotatef(beam.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); GL11.glRotatef(beam.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); @@ -336,19 +550,54 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glPushMatrix(); GL11.glScalef(scale, scale, scale); + // Inner scale defines the core size + float innerScale = 0.6f; + // Render outer glow only if enabled + // outerColorWidth is an additive offset from inner size if (beam.isOuterColorEnabled()) { + float outerScale = innerScale + beam.getOuterColorWidth(); GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glScalef(outerScale, outerScale, outerScale); renderCube(outerColor, 0.5f, 0.5f); + GL11.glPopMatrix(); GL11.glDepthMask(true); } // Render inner core - float innerScale = 0.6f; GL11.glScalef(innerScale, innerScale, innerScale); renderCube(innerColor, 1.0f, 0.5f); GL11.glPopMatrix(); GL11.glPopMatrix(); } + + /** + * Render fading lightning arcs attached to the beam head (in local space). + */ + private void renderAttachedLightning(EntityAbilityBeam beam, float headScale) { + AttachedLightningRenderer.LightningState state = getLightningState(beam); + + float density = beam.getLightningDensity(); + // Lightning radius extends outward from inner surface (innerScale = 0.6) + float innerRadius = 0.6f * headScale * 0.5f; + float radius = innerRadius + beam.getLightningRadius() * headScale; + int outerColor = beam.getOuterColor(); + int innerColor = beam.getInnerColor(); + int fadeTime = beam.getLightningFadeTime(); + + state.update(density, radius, outerColor, innerColor, fadeTime); + state.render(); + } + + /** + * Get or create the lightning state for an entity. + */ + private AttachedLightningRenderer.LightningState getLightningState(EntityAbilityBeam beam) { + if (beam.lightningState == null) { + beam.lightningState = new AttachedLightningRenderer.LightningState(); + } + return (AttachedLightningRenderer.LightningState) beam.lightningState; + } } diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java index 13de38b50..fdd80689a 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java @@ -2,6 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.client.renderer.lightning.AttachedLightningRenderer; import kamkeel.npcs.entity.EntityAbilityDisc; import net.minecraft.entity.Entity; import org.lwjgl.opengl.GL11; @@ -21,6 +22,7 @@ public class RenderAbilityDisc extends RenderAbilityProjectile { setupRenderState(); + GL11.glPushMatrix(); GL11.glTranslated(x, y, z); // Get interpolated values @@ -33,29 +35,66 @@ public class RenderAbilityDisc extends RenderAbilityProjectile { float scaleModifier = (float) Math.sin(pulseTime * 0.1f) * 0.03f; float scale = 1.0f + scaleModifier; + // Render lightning BEFORE rotation so it crackles in all directions + if (disc.hasLightningEffect()) { + renderAttachedLightning(disc, radius * scale); + } + GL11.glPushMatrix(); GL11.glScalef(scale, scale, scale); // Apply ONLY Y-axis rotation for flat spin GL11.glRotatef(disc.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); + // Inner scale defines the core size + float innerScale = 0.6f; + // Render outer square (translucent) - only if enabled + // outerColorWidth is an additive offset from inner size if (disc.isOuterColorEnabled()) { - float outerScale = disc.getOuterColorWidth() / 1.8f; // Normalize to default width + float outerScale = innerScale + disc.getOuterColorWidth(); GL11.glDepthMask(false); renderFlatSquare(disc.getOuterColor(), 0.5f, radius * outerScale, thickness); GL11.glDepthMask(true); } - // Render inner square (solid, smaller) - float innerScale = 0.6f; + // Render inner square (solid) renderFlatSquare(disc.getInnerColor(), 1.0f, radius * innerScale, thickness * 1.2f); + GL11.glPopMatrix(); GL11.glPopMatrix(); restoreRenderState(); } + /** + * Render fading lightning arcs attached to the disc (in local space). + */ + private void renderAttachedLightning(EntityAbilityDisc disc, float discSize) { + AttachedLightningRenderer.LightningState state = getLightningState(disc); + + float density = disc.getLightningDensity(); + // Lightning radius extends outward from inner surface (innerScale = 0.6) + float innerRadius = 0.6f * discSize * 0.5f; + float radius = innerRadius + disc.getLightningRadius() * discSize; + int outerColor = disc.getOuterColor(); + int innerColor = disc.getInnerColor(); + int fadeTime = disc.getLightningFadeTime(); + + state.update(density, radius, outerColor, innerColor, fadeTime); + state.render(); + } + + /** + * Get or create the lightning state for an entity. + */ + private AttachedLightningRenderer.LightningState getLightningState(EntityAbilityDisc disc) { + if (disc.lightningState == null) { + disc.lightningState = new AttachedLightningRenderer.LightningState(); + } + return (AttachedLightningRenderer.LightningState) disc.lightningState; + } + /** * Render a flat square (thin cube) centered at origin. * The square lies flat on the XZ plane with thin Y height. diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java index fce85d2db..bf4df79eb 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java @@ -2,6 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.client.renderer.lightning.AttachedLightningRenderer; import kamkeel.npcs.entity.EntityAbilityLaser; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; @@ -84,32 +85,103 @@ public class RenderAbilityLaser extends RenderAbilityProjectile { double vertY = dz * horzX - dx * horzZ; double vertZ = dx * horzY - dy * horzX; + // Inner scale defines the core width + float innerScale = 0.6f; + float innerWidth = width * innerScale; + // Render outer rectangle (larger, outer color, translucent) - only if enabled + // outerColorWidth is an additive offset from inner width if (laser.isOuterColorEnabled()) { - float outerScale = laser.getOuterColorWidth(); + float outerWidth = innerWidth + laser.getOuterColorWidth() * width; GL11.glDepthMask(false); renderBeamRectangle(renderStartX, renderStartY, renderStartZ, renderEndX, renderEndY, renderEndZ, horzX, horzY, horzZ, vertX, vertY, vertZ, - width * outerScale, laser.getOuterColor(), alpha * 0.4f); + outerWidth, laser.getOuterColor(), alpha * 0.4f); - // Render middle layer + // Render middle layer (halfway between inner and outer) + float midWidth = innerWidth + (outerWidth - innerWidth) * 0.5f; renderBeamRectangle(renderStartX, renderStartY, renderStartZ, renderEndX, renderEndY, renderEndZ, horzX, horzY, horzZ, vertX, vertY, vertZ, - width * 1.3f, laser.getOuterColor(), alpha * 0.7f); + midWidth, laser.getOuterColor(), alpha * 0.7f); GL11.glDepthMask(true); } - // Render inner core (smaller, inner color, solid) + // Render inner core (solid) renderBeamRectangle(renderStartX, renderStartY, renderStartZ, renderEndX, renderEndY, renderEndZ, horzX, horzY, horzZ, vertX, vertY, vertZ, - width * 0.6f, laser.getInnerColor(), alpha); + innerWidth, laser.getInnerColor(), alpha); + + // Render lightning along the laser beam + if (laser.hasLightningEffect() && laser.getCurrentLength() > 0.1f) { + renderLaserLightning(laser, renderStartX, renderStartY, renderStartZ, + renderEndX, renderEndY, renderEndZ, width); + } restoreRenderState(); } + /** + * Render lightning effects along the laser beam at multiple points. + */ + private void renderLaserLightning(EntityAbilityLaser laser, + double startX, double startY, double startZ, + double endX, double endY, double endZ, float width) { + AttachedLightningRenderer.LightningState state = getLightningState(laser); + + float density = laser.getLightningDensity(); + // Lightning radius extends outward from inner width + float innerRadius = width * 0.6f * 0.5f; + float radius = innerRadius + laser.getLightningRadius() * width; + int outerColor = laser.getOuterColor(); + int innerColor = laser.getInnerColor(); + int fadeTime = laser.getLightningFadeTime(); + + // Render lightning at multiple points along the laser + // Start, middle, and end points + double midX = (startX + endX) * 0.5; + double midY = (startY + endY) * 0.5; + double midZ = (startZ + endZ) * 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(midX, midY, midZ); + state.update(density, radius, outerColor, innerColor, fadeTime); + state.render(); + GL11.glPopMatrix(); + + // Also render at the tip + GL11.glPushMatrix(); + GL11.glTranslated(endX, endY, endZ); + // Use a secondary state for the tip + AttachedLightningRenderer.LightningState tipState = getTipLightningState(laser); + tipState.update(density * 0.7f, radius * 0.8f, outerColor, innerColor, fadeTime); + tipState.render(); + GL11.glPopMatrix(); + } + + /** + * Get or create the main lightning state for the laser. + */ + private AttachedLightningRenderer.LightningState getLightningState(EntityAbilityLaser laser) { + if (laser.lightningState == null) { + laser.lightningState = new AttachedLightningRenderer.LightningState(); + } + return (AttachedLightningRenderer.LightningState) laser.lightningState; + } + + /** + * Get or create the tip lightning state for the laser. + * Stored as a secondary object in lightningState2. + */ + private AttachedLightningRenderer.LightningState getTipLightningState(EntityAbilityLaser laser) { + // Use a simple approach - store in a transient field + // Since lightningState is already used, we'll create a new state each time + // This works because we're updating and rendering immediately + return new AttachedLightningRenderer.LightningState(); + } + /** * Render a beam as a 3D rectangular prism (box along a line). */ diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java index 39048648d..e2e6f8234 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java @@ -2,57 +2,29 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.client.renderer.quadric.SphereRenderer; +import kamkeel.npcs.client.renderer.lightning.AttachedLightningRenderer; import kamkeel.npcs.entity.EntityAbilityOrb; -import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; /** - * Renders the AbilityOrb entity as a glowing sphere with inner and outer layers. - * - * Design inspired by LouisXIV's energy rendering system. + * Renders the AbilityOrb entity as a cube with inner and outer layers. + * Minecraft-style blocky appearance using Tessellator. */ @SideOnly(Side.CLIENT) -public class RenderAbilityOrb extends Render { +public class RenderAbilityOrb extends RenderAbilityProjectile { - // White texture for solid color rendering - private static final ResourceLocation WHITE_TEXTURE = new ResourceLocation("customnpcs", "textures/entity/white.png"); - - // Static sphere renderer - shared across all orb renders - private static final SphereRenderer sphere = new SphereRenderer(0.5f, 16); - - public RenderAbilityOrb() { - this.shadowSize = 0.0f; - } + private static final int LIGHTNING_FADE_TICKS = 6; @Override public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { EntityAbilityOrb orb = (EntityAbilityOrb) entity; + setupRenderState(); + GL11.glPushMatrix(); - - // Disable culling, enable rescale normal - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glEnable(GL11.GL_ALPHA_TEST); - - // Enable blending for transparency - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); - - // Disable lighting for self-illumination - GL11.glDisable(GL11.GL_LIGHTING); - - // Translate to render position GL11.glTranslated(x, y, z); - // Bind texture - this.bindTexture(WHITE_TEXTURE); - // Get interpolated size for smooth rendering float size = orb.getInterpolatedSize(partialTicks); @@ -61,51 +33,74 @@ public class RenderAbilityOrb extends Render { float scaleModifier = (float) Math.sin(pulseTime * 0.15f) * 0.05f; float scale = size * (1.0f + scaleModifier); - GL11.glPushMatrix(); - GL11.glScalef(scale, scale, scale); + // Render lightning BEFORE rotation so it crackles in all directions + if (orb.hasLightningEffect()) { + renderAttachedLightning(orb, scale); + } // Use entity's interpolated rotation for smooth spinning GL11.glRotatef(orb.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); GL11.glRotatef(orb.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); GL11.glRotatef(orb.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); - // Render outer sphere (translucent) - only if enabled + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Inner scale defines the core size + float innerScale = 0.6f; + + // Render outer cube (translucent) - only if enabled + // outerColorWidth is an additive offset from inner size if (orb.isOuterColorEnabled()) { + float outerScale = innerScale + orb.getOuterColorWidth(); GL11.glDepthMask(false); - this.bindTexture(WHITE_TEXTURE); - float outerScale = orb.getOuterColorWidth() / 1.8f; // Normalize to default width GL11.glPushMatrix(); GL11.glScalef(outerScale, outerScale, outerScale); - renderSphere(orb.getOuterColor(), 0.6f); + renderCube(orb.getOuterColor(), 0.5f, 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } - // Render inner sphere (more opaque) - float innerScale = 0.75f; - GL11.glPushMatrix(); + // Render inner cube (solid) GL11.glScalef(innerScale, innerScale, innerScale); - this.bindTexture(WHITE_TEXTURE); - renderSphere(orb.getInnerColor(), 1.0f); - GL11.glPopMatrix(); + renderCube(orb.getInnerColor(), 1.0f, 0.5f); GL11.glPopMatrix(); - - // Restore GL state - GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); + + restoreRenderState(); } - private void renderSphere(int color, float alpha) { - // Set sphere properties and render (rotation already applied to matrix) - sphere.setScale(1.0f); - sphere.setAlpha(alpha); - sphere.setColor(color); - sphere.render(0); + /** + * Render fading lightning arcs attached to the orb (in local space). + * Arcs persist for a few ticks and fade out, while staying attached to the orb. + */ + private void renderAttachedLightning(EntityAbilityOrb orb, float orbScale) { + // Get or create the lightning state for this entity + AttachedLightningRenderer.LightningState state = getLightningState(orb); + + float density = orb.getLightningDensity(); + // Lightning radius extends outward from inner surface (innerScale = 0.6) + float innerRadius = 0.6f * orbScale * 0.5f; // Half size of inner cube + float radius = innerRadius + orb.getLightningRadius() * orbScale; + int outerColor = orb.getOuterColor(); + int innerColor = orb.getInnerColor(); + int fadeTime = orb.getLightningFadeTime(); + + // Update: age existing arcs, spawn new ones based on density + state.update(density, radius, outerColor, innerColor, fadeTime); + + // Render all active arcs in local space (they move with the orb) + state.render(); } - @Override - protected ResourceLocation getEntityTexture(Entity entity) { - return WHITE_TEXTURE; + /** + * Get or create the lightning state for an entity. + */ + private AttachedLightningRenderer.LightningState getLightningState(EntityAbilityOrb orb) { + if (orb.lightningState == null) { + orb.lightningState = new AttachedLightningRenderer.LightningState(); + } + return (AttachedLightningRenderer.LightningState) orb.lightningState; } } diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java deleted file mode 100644 index 29656e597..000000000 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrbCube.java +++ /dev/null @@ -1,56 +0,0 @@ -package kamkeel.npcs.client.renderer; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.entity.EntityAbilityOrb; -import net.minecraft.entity.Entity; -import org.lwjgl.opengl.GL11; - -/** - * Renders the AbilityOrb entity as a cube with inner and outer layers. - * Minecraft-style blocky appearance using Tessellator. - * - * Design inspired by LouisXIV's energy rendering system. - */ -@SideOnly(Side.CLIENT) -public class RenderAbilityOrbCube extends RenderAbilityProjectile { - - @Override - public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { - EntityAbilityOrb orb = (EntityAbilityOrb) entity; - - setupRenderState(); - - GL11.glTranslated(x, y, z); - - // Get interpolated size for smooth rendering - float size = orb.getInterpolatedSize(partialTicks); - - // Pulsing scale effect - float pulseTime = entity.ticksExisted + partialTicks; - float scaleModifier = (float) Math.sin(pulseTime * 0.15f) * 0.05f; - float scale = size * (1.0f + scaleModifier); - - // Use entity's interpolated rotation for smooth spinning - GL11.glRotatef(orb.getInterpolatedRotationX(partialTicks), 1.0f, 0.0f, 0.0f); - GL11.glRotatef(orb.getInterpolatedRotationY(partialTicks), 0.0f, 1.0f, 0.0f); - GL11.glRotatef(orb.getInterpolatedRotationZ(partialTicks), 0.0f, 0.0f, 1.0f); - - GL11.glPushMatrix(); - GL11.glScalef(scale, scale, scale); - - // Render outer cube (translucent) - GL11.glDepthMask(false); - renderCube(orb.getOuterColor(), 0.5f, 0.5f); - GL11.glDepthMask(true); - - // Render inner cube (solid, smaller) - float innerScale = 0.6f; - GL11.glScalef(innerScale, innerScale, innerScale); - renderCube(orb.getInnerColor(), 1.0f, 0.5f); - - GL11.glPopMatrix(); - - restoreRenderState(); - } -} diff --git a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java index 0cac8805e..5f4e815b7 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java +++ b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java @@ -76,10 +76,10 @@ public class TelegraphRenderer { return; } - // Calculate render position relative to camera - double renderX = instance.getX() - playerX; - double renderY = instance.getY() - playerY + telegraph.getHeightOffset(); - double renderZ = instance.getZ() - playerZ; + // Calculate render position relative to camera using interpolated positions for smooth movement + double renderX = instance.getInterpolatedX(partialTicks) - playerX; + double renderY = instance.getInterpolatedY(partialTicks) - playerY + telegraph.getHeightOffset(); + double renderZ = instance.getInterpolatedZ(partialTicks) - playerZ; // Get animated color int color = instance.getAnimatedColor(partialTicks); @@ -91,8 +91,8 @@ public class TelegraphRenderer { GL11.glPushMatrix(); GL11.glTranslated(renderX, renderY, renderZ); - // Rotate for directional shapes - GL11.glRotatef(-instance.getYaw(), 0, 1, 0); + // Rotate for directional shapes using interpolated yaw for smooth rotation + GL11.glRotatef(-instance.getInterpolatedYaw(partialTicks), 0, 1, 0); switch (telegraph.getType()) { case CIRCLE: diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java new file mode 100644 index 000000000..4fa28cda8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java @@ -0,0 +1,281 @@ +package kamkeel.npcs.client.renderer.lightning; + +import net.minecraft.client.renderer.Tessellator; +import org.lwjgl.opengl.GL11; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +/** + * Renders lightning arcs attached to an entity (in local space). + * Supports both instant arcs and fading persistent bolts that move with the entity. + */ +public class AttachedLightningRenderer { + + private static final Random rand = new Random(); + + /** + * Data for a single lightning bolt with fading support. + */ + public static class LightningArc { + public List points; + public int age; + public int maxAge; + public int outerColor; + public int innerColor; + + public LightningArc(List points, int maxAge, int outerColor, int innerColor) { + this.points = points; + this.age = 0; + this.maxAge = maxAge; + this.outerColor = outerColor; + this.innerColor = innerColor; + } + + public float getAlphaMultiplier() { + // Fade out over lifetime + return 1.0f - ((float) age / (float) maxAge); + } + + public boolean isDead() { + return age >= maxAge; + } + + public void tick() { + age++; + } + } + + /** + * Storage for persistent lightning arcs per entity. + * Call updateAndRender() each frame from the entity's renderer. + */ + public static class LightningState { + private final List arcs = new ArrayList<>(); + private float spawnAccumulator = 0; + + /** + * Update arc ages, remove dead arcs, spawn new ones based on density. + * + * @param density Arcs per tick (can be fractional) + * @param radius Max arc distance from center + * @param outerColor Outer glow color + * @param innerColor Inner core color + * @param maxAge How many ticks arcs live (for fading) + */ + public void update(float density, float radius, int outerColor, int innerColor, int maxAge) { + // Age existing arcs and remove dead ones + Iterator iter = arcs.iterator(); + while (iter.hasNext()) { + LightningArc arc = iter.next(); + arc.tick(); + if (arc.isDead()) { + iter.remove(); + } + } + + // Spawn new arcs based on density + spawnAccumulator += density; + while (spawnAccumulator >= 1.0f) { + spawnAccumulator -= 1.0f; + arcs.add(createArc(radius, outerColor, innerColor, maxAge)); + } + } + + /** + * Render all active arcs in local space. + * Call this after glTranslated to entity position. + */ + public void render() { + if (arcs.isEmpty()) return; + + // Setup GL state + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthMask(false); + + Tessellator tess = Tessellator.instance; + + for (LightningArc arc : arcs) { + float alphaMult = arc.getAlphaMultiplier(); + + // Render outer glow + renderBoltPath(tess, arc.points, arc.outerColor, 0.025f, 0.35f * alphaMult); + + // Render inner core + renderBoltPath(tess, arc.points, arc.innerColor, 0.012f, 0.7f * alphaMult); + } + + GL11.glDepthMask(true); + GL11.glPopAttrib(); + } + + public int getArcCount() { + return arcs.size(); + } + } + + /** + * Create a new lightning arc from center to a random point. + */ + private static LightningArc createArc(float radius, int outerColor, int innerColor, int maxAge) { + // Random end point on sphere + double theta = rand.nextDouble() * Math.PI * 2; + double phi = Math.acos(2 * rand.nextDouble() - 1); + double r = radius * (0.5 + rand.nextDouble() * 0.5); + + double endX = r * Math.sin(phi) * Math.cos(theta); + double endY = r * Math.sin(phi) * Math.sin(theta); + double endZ = r * Math.cos(phi); + + int segments = 4 + rand.nextInt(3); + float displacement = radius * 0.25f; + + List points = generateLightningPath(0, 0, 0, endX, endY, endZ, segments, displacement); + + return new LightningArc(points, maxAge, outerColor, innerColor); + } + + /** + * Generate a jagged lightning path between two points. + */ + private static List generateLightningPath(double x1, double y1, double z1, + double x2, double y2, double z2, + int segments, float displacement) { + List points = new ArrayList<>(); + points.add(new double[]{x1, y1, z1}); + + double dx = x2 - x1; + double dy = y2 - y1; + double dz = z2 - z1; + + // Create perpendicular vectors for displacement + Vec3d dir = new Vec3d(dx, dy, dz); + Vec3d perp1 = dir.copy().perpendicular().normalize(); + Vec3d perp2 = dir.copy().crossProduct(perp1).normalize(); + + for (int i = 1; i < segments; i++) { + double t = (double) i / segments; + + double px = x1 + dx * t; + double py = y1 + dy * t; + double pz = z1 + dz * t; + + // Displacement strongest in middle + float strength = (float) (1.0 - Math.abs(t - 0.5) * 2.0) * displacement; + double offset1 = (rand.nextDouble() - 0.5) * 2 * strength; + double offset2 = (rand.nextDouble() - 0.5) * 2 * strength; + + px += perp1.x * offset1 + perp2.x * offset2; + py += perp1.y * offset1 + perp2.y * offset2; + pz += perp1.z * offset1 + perp2.z * offset2; + + points.add(new double[]{px, py, pz}); + } + + points.add(new double[]{x2, y2, z2}); + return points; + } + + /** + * Render the lightning path as quads. + */ + private static void renderBoltPath(Tessellator tess, List points, int color, float width, float alpha) { + if (alpha <= 0.01f) return; + + Color c = new Color(color); + int r = c.getRed(); + int g = c.getGreen(); + int b = c.getBlue(); + int a = Math.min(255, Math.max(0, (int) (alpha * 255))); + + for (int i = 0; i < points.size() - 1; i++) { + double[] p1 = points.get(i); + double[] p2 = points.get(i + 1); + + double segDx = p2[0] - p1[0]; + double segDy = p2[1] - p1[1]; + double segDz = p2[2] - p1[2]; + + Vec3d segDir = new Vec3d(segDx, segDy, segDz); + Vec3d perp = segDir.copy().perpendicular().normalize().multiply(width); + + // First quad + tess.startDrawingQuads(); + tess.setBrightness(0xF000F0); + tess.setColorRGBA(r, g, b, a); + + tess.addVertex(p1[0] - perp.x, p1[1] - perp.y, p1[2] - perp.z); + tess.addVertex(p1[0] + perp.x, p1[1] + perp.y, p1[2] + perp.z); + tess.addVertex(p2[0] + perp.x, p2[1] + perp.y, p2[2] + perp.z); + tess.addVertex(p2[0] - perp.x, p2[1] - perp.y, p2[2] - perp.z); + + tess.draw(); + + // Second quad (perpendicular for 3D look) + Vec3d perp2 = segDir.copy().crossProduct(perp).normalize().multiply(width); + + tess.startDrawingQuads(); + tess.setBrightness(0xF000F0); + tess.setColorRGBA(r, g, b, a); + + tess.addVertex(p1[0] - perp2.x, p1[1] - perp2.y, p1[2] - perp2.z); + tess.addVertex(p1[0] + perp2.x, p1[1] + perp2.y, p1[2] + perp2.z); + tess.addVertex(p2[0] + perp2.x, p2[1] + perp2.y, p2[2] + perp2.z); + tess.addVertex(p2[0] - perp2.x, p2[1] - perp2.y, p2[2] - perp2.z); + + tess.draw(); + } + } + + // ==================== INSTANT RENDERING (no persistence) ==================== + + /** + * Render a single instant lightning arc (no fading, drawn this frame only). + */ + public static void renderInstantArc(float radius, int outerColor, int innerColor) { + double theta = rand.nextDouble() * Math.PI * 2; + double phi = Math.acos(2 * rand.nextDouble() - 1); + double r = radius * (0.5 + rand.nextDouble() * 0.5); + + double endX = r * Math.sin(phi) * Math.cos(theta); + double endY = r * Math.sin(phi) * Math.sin(theta); + double endZ = r * Math.cos(phi); + + int segments = 4 + rand.nextInt(3); + float displacement = radius * 0.25f; + + List points = generateLightningPath(0, 0, 0, endX, endY, endZ, segments, displacement); + + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthMask(false); + + Tessellator tess = Tessellator.instance; + renderBoltPath(tess, points, outerColor, 0.025f, 0.35f); + renderBoltPath(tess, points, innerColor, 0.012f, 0.7f); + + GL11.glDepthMask(true); + GL11.glPopAttrib(); + } + + /** + * Render multiple instant arcs. + */ + public static void renderCracklingLightning(int count, float radius, int outerColor, int innerColor) { + for (int i = 0; i < count; i++) { + renderInstantArc(radius, outerColor, innerColor); + } + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java new file mode 100644 index 000000000..6cf6e7d3a --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java @@ -0,0 +1,295 @@ +package kamkeel.npcs.client.renderer.lightning; + +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Random; +import java.util.concurrent.ConcurrentLinkedQueue; + +/** + * Lightning bolt data model with fractal segment generation. + * Adapted from Botania's LightningBolt by Vazkii/ChickenBones. + */ +public class LightningBolt { + + public static ConcurrentLinkedQueue boltList = new ConcurrentLinkedQueue<>(); + + public ArrayList segments = new ArrayList<>(); + public Vec3d start; + public Vec3d end; + + public double length; + public int numSegments0; + private int numSplits; + private boolean finalized; + private Random rand; + public long seed; + + public int particleAge; + public int particleMaxAge; + public boolean isDead; + + private World world; + private HashMap splitParents = new HashMap<>(); + + public float speed = 1.5F; + public static final int FADE_TIME = 4; // Short lifespan for projectile-attached lightning + + public int colorOuter; + public int colorInner; + + public LightningBolt(World world, Vec3d start, Vec3d end, float ticksPerMeter, long seed, int colorOuter, int colorInner) { + this.world = world; + this.seed = seed; + this.rand = new Random(seed); + + this.start = start; + this.end = end; + this.speed = ticksPerMeter; + + this.colorOuter = colorOuter; + this.colorInner = colorInner; + + this.numSegments0 = 1; + this.length = end.copy().subtract(start).mag(); + this.particleMaxAge = FADE_TIME + rand.nextInt(FADE_TIME) - FADE_TIME / 2; + this.particleAge = -(int) (length * speed); + + segments.add(new Segment(start, end)); + } + + /** + * Apply default fractal splitting for natural-looking lightning. + */ + public void defaultFractal() { + fractal(2, length / 1.5, 0.7F, 0.7F, 45); + fractal(2, length / 4, 0.5F, 0.8F, 50); + fractal(2, length / 15, 0.5F, 0.9F, 55); + fractal(2, length / 30, 0.5F, 1.0F, 60); + fractal(2, length / 60, 0, 0, 0); + fractal(2, length / 100, 0, 0, 0); + fractal(2, length / 400, 0, 0, 0); + } + + /** + * Simplified fractal for short-lived projectile lightning. + * Less detail but faster and more appropriate for fast-moving objects. + */ + public void simpleFractal() { + fractal(2, length / 2.0, 0.4F, 0.6F, 35); + fractal(2, length / 6, 0.3F, 0.7F, 40); + fractal(2, length / 20, 0, 0, 0); + } + + /** + * Apply fractal splitting to create branching lightning. + * + * @param splits Number of splits per segment + * @param amount Displacement amount + * @param splitChance Probability of branching (0-1) + * @param splitLength Length multiplier for branches + * @param splitAngle Angle for branch splits in degrees + */ + public void fractal(int splits, double amount, double splitChance, double splitLength, double splitAngle) { + if (finalized) return; + + ArrayList oldSegments = segments; + segments = new ArrayList<>(); + + Segment prev = null; + + for (Segment segment : oldSegments) { + prev = segment.prev; + + Vec3d subSegment = segment.diff.copy().multiply(1.0 / splits); + + BoltPoint[] newPoints = new BoltPoint[splits + 1]; + + Vec3d startPoint = segment.startPoint.point; + newPoints[0] = segment.startPoint; + newPoints[splits] = segment.endPoint; + + for (int i = 1; i < splits; i++) { + Vec3d randOff = segment.diff.copy().perpendicular().normalize() + .rotate(rand.nextFloat() * 360, segment.diff); + randOff.multiply((rand.nextFloat() - 0.5F) * amount * 2); + + Vec3d basePoint = startPoint.copy().add(subSegment.copy().multiply(i)); + + newPoints[i] = new BoltPoint(basePoint, randOff); + } + + for (int i = 0; i < splits; i++) { + Segment next = new Segment(newPoints[i], newPoints[i + 1], segment.light, + segment.segmentNo * splits + i, segment.splitNo); + next.prev = prev; + if (prev != null) { + prev.next = next; + } + + if (i != 0 && rand.nextFloat() < splitChance) { + Vec3d splitRot = next.diff.copy().xCrossProduct() + .rotate(rand.nextFloat() * 360, next.diff); + Vec3d diff = next.diff.copy() + .rotate((rand.nextFloat() * 0.66F + 0.33F) * splitAngle, splitRot) + .multiply(splitLength); + + numSplits++; + splitParents.put(numSplits, next.splitNo); + + Segment split = new Segment(newPoints[i], + new BoltPoint(newPoints[i + 1].basePoint, newPoints[i + 1].offsetVec.copy().add(diff)), + segment.light / 2F, next.segmentNo, numSplits); + split.prev = prev; + + segments.add(split); + } + + prev = next; + segments.add(next); + } + + if (segment.next != null) { + segment.next.prev = prev; + } + } + + numSegments0 *= splits; + } + + /** + * Finalize the bolt after all fractal passes. + */ + public void finalizeBolt() { + if (finalized) return; + finalized = true; + + calculateEndDiffs(); + Collections.sort(segments, new SegmentLightSorter()); + } + + private void calculateEndDiffs() { + Collections.sort(segments, new SegmentSorter()); + + for (Segment segment : segments) { + segment.calcEndDiffs(); + } + } + + public void onUpdate() { + particleAge++; + if (particleAge >= particleMaxAge) { + isDead = true; + } + } + + /** + * Update all active lightning bolts. Called from client tick handler. + */ + public static void updateAll() { + for (Iterator iterator = boltList.iterator(); iterator.hasNext(); ) { + LightningBolt bolt = iterator.next(); + bolt.onUpdate(); + if (bolt.isDead) { + iterator.remove(); + } + } + } + + // ==================== INNER CLASSES ==================== + + public class BoltPoint { + public Vec3d point; + public Vec3d basePoint; + public Vec3d offsetVec; + + public BoltPoint(Vec3d basePoint, Vec3d offsetVec) { + this.point = basePoint.copy().add(offsetVec); + this.basePoint = basePoint; + this.offsetVec = offsetVec; + } + } + + public class Segment { + public BoltPoint startPoint; + public BoltPoint endPoint; + + public Vec3d diff; + public Segment prev; + public Segment next; + + public Vec3d nextDiff; + public Vec3d prevDiff; + + public float sinPrev; + public float sinNext; + public float light; + + public int segmentNo; + public int splitNo; + + public Segment(BoltPoint start, BoltPoint end, float light, int segmentNo, int splitNo) { + this.startPoint = start; + this.endPoint = end; + this.light = light; + this.segmentNo = segmentNo; + this.splitNo = splitNo; + calcDiff(); + } + + public Segment(Vec3d start, Vec3d end) { + this(new BoltPoint(start, new Vec3d(0, 0, 0)), + new BoltPoint(end, new Vec3d(0, 0, 0)), 1, 0, 0); + } + + public void calcDiff() { + diff = endPoint.point.copy().subtract(startPoint.point); + } + + public void calcEndDiffs() { + if (prev != null) { + Vec3d prevDiffNorm = prev.diff.copy().normalize(); + Vec3d thisDiffNorm = diff.copy().normalize(); + + prevDiff = thisDiffNorm.copy().add(prevDiffNorm).normalize(); + sinPrev = (float) Math.sin(thisDiffNorm.angle(prevDiffNorm.multiply(-1)) / 2); + } else { + prevDiff = diff.copy().normalize(); + sinPrev = 1; + } + + if (next != null) { + Vec3d nextDiffNorm = next.diff.copy().normalize(); + Vec3d thisDiffNorm = diff.copy().normalize(); + + nextDiff = thisDiffNorm.add(nextDiffNorm).normalize(); + sinNext = (float) Math.sin(thisDiffNorm.angle(nextDiffNorm.multiply(-1)) / 2); + } else { + nextDiff = diff.copy().normalize(); + sinNext = 1; + } + } + } + + public class SegmentSorter implements Comparator { + @Override + public int compare(Segment o1, Segment o2) { + int comp = Integer.compare(o1.splitNo, o2.splitNo); + if (comp == 0) { + return Integer.compare(o1.segmentNo, o2.segmentNo); + } + return comp; + } + } + + public class SegmentLightSorter implements Comparator { + @Override + public int compare(Segment o1, Segment o2) { + return Float.compare(o2.light, o1.light); + } + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java new file mode 100644 index 000000000..1951666e4 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java @@ -0,0 +1,202 @@ +package kamkeel.npcs.client.renderer.lightning; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.client.renderer.lightning.LightningBolt.Segment; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderWorldLastEvent; +import org.lwjgl.opengl.GL11; + +import java.awt.Color; + +/** + * Handles rendering of lightning bolts in the world. + * Adapted from Botania's LightningHandler by Vazkii/ChickenBones. + * + * Register this handler with: MinecraftForge.EVENT_BUS.register(new LightningHandler()); + */ +@SideOnly(Side.CLIENT) +public class LightningHandler { + + private static final ResourceLocation TEXTURE_OUTER = new ResourceLocation("customnpcs", "textures/effects/lightning_outer.png"); + private static final ResourceLocation TEXTURE_INNER = new ResourceLocation("customnpcs", "textures/effects/lightning_inner.png"); + + public static int lightningCount = 0; + + private static Vec3d getRelativeViewVector(Vec3d pos) { + Entity renderEntity = Minecraft.getMinecraft().renderViewEntity; + return new Vec3d( + (float) renderEntity.posX - pos.x, + (float) renderEntity.posY + renderEntity.getEyeHeight() - pos.y, + (float) renderEntity.posZ - pos.z + ); + } + + @SubscribeEvent + public void onRenderWorldLast(RenderWorldLastEvent event) { + float partialTicks = event.partialTicks; + Entity entity = Minecraft.getMinecraft().thePlayer; + TextureManager textureManager = Minecraft.getMinecraft().renderEngine; + + double interpPosX = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * partialTicks; + double interpPosY = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * partialTicks; + double interpPosZ = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * partialTicks; + + if (LightningBolt.boltList.isEmpty()) { + return; + } + + GL11.glPushMatrix(); + GL11.glTranslated(-interpPosX, -interpPosY, -interpPosZ); + + Tessellator tessellator = Tessellator.instance; + + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + lightningCount = 0; + + // Render outer layer (translucent glow) + for (LightningBolt bolt : LightningBolt.boltList) { + renderBolt(bolt, tessellator, partialTicks, false); + } + + // Render inner layer (bright core) + for (LightningBolt bolt : LightningBolt.boltList) { + renderBolt(bolt, tessellator, partialTicks, true); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + + GL11.glPopMatrix(); + } + + private void renderBolt(LightningBolt bolt, Tessellator tessellator, float partialTicks, boolean inner) { + lightningCount++; + + float boltAge = bolt.particleAge < 0 ? 0 : (float) bolt.particleAge / (float) bolt.particleMaxAge; + float mainAlpha; + if (!inner) { + mainAlpha = (1 - boltAge) * 0.4F; + } else { + mainAlpha = 1 - boltAge * 0.5F; + } + + int expandTime = (int) (bolt.length * bolt.speed); + + int renderStart = (int) ((expandTime / 2 - bolt.particleMaxAge + bolt.particleAge) / (float) (expandTime / 2) * bolt.numSegments0); + int renderEnd = (int) ((bolt.particleAge + expandTime) / (float) expandTime * bolt.numSegments0); + + for (Segment segment : bolt.segments) { + if (segment.segmentNo < renderStart || segment.segmentNo > renderEnd) { + continue; + } + + Vec3d playerVec = getRelativeViewVector(segment.startPoint.point).multiply(-1); + + double width = 0.008F * (playerVec.mag() / 8 + 1) * (1 + segment.light) * 0.4F; + + Vec3d diff1 = playerVec.copy().crossProduct(segment.prevDiff).normalize().multiply(width / segment.sinPrev); + Vec3d diff2 = playerVec.copy().crossProduct(segment.nextDiff).normalize().multiply(width / segment.sinNext); + + Vec3d startVec = segment.startPoint.point; + Vec3d endVec = segment.endPoint.point; + + int color = inner ? bolt.colorInner : bolt.colorOuter; + Color c = new Color(color); + int alpha = (int) (mainAlpha * segment.light * c.getAlpha()); + + tessellator.startDrawingQuads(); + tessellator.setBrightness(0xF000F0); + tessellator.setColorRGBA(c.getRed(), c.getGreen(), c.getBlue(), alpha); + + tessellator.addVertex(endVec.x - diff2.x, endVec.y - diff2.y, endVec.z - diff2.z); + tessellator.addVertex(startVec.x - diff1.x, startVec.y - diff1.y, startVec.z - diff1.z); + tessellator.addVertex(startVec.x + diff1.x, startVec.y + diff1.y, startVec.z + diff1.z); + tessellator.addVertex(endVec.x + diff2.x, endVec.y + diff2.y, endVec.z + diff2.z); + + tessellator.draw(); + + // Rounded end caps + if (segment.next == null) { + Vec3d roundEnd = segment.endPoint.point.copy().add(segment.diff.copy().normalize().multiply(width)); + + tessellator.startDrawingQuads(); + tessellator.setBrightness(0xF000F0); + tessellator.setColorRGBA(c.getRed(), c.getGreen(), c.getBlue(), alpha); + + tessellator.addVertex(roundEnd.x - diff2.x, roundEnd.y - diff2.y, roundEnd.z - diff2.z); + tessellator.addVertex(endVec.x - diff2.x, endVec.y - diff2.y, endVec.z - diff2.z); + tessellator.addVertex(endVec.x + diff2.x, endVec.y + diff2.y, endVec.z + diff2.z); + tessellator.addVertex(roundEnd.x + diff2.x, roundEnd.y + diff2.y, roundEnd.z + diff2.z); + + tessellator.draw(); + } + + if (segment.prev == null) { + Vec3d roundEnd = segment.startPoint.point.copy().subtract(segment.diff.copy().normalize().multiply(width)); + + tessellator.startDrawingQuads(); + tessellator.setBrightness(0xF000F0); + tessellator.setColorRGBA(c.getRed(), c.getGreen(), c.getBlue(), alpha); + + tessellator.addVertex(startVec.x - diff1.x, startVec.y - diff1.y, startVec.z - diff1.z); + tessellator.addVertex(roundEnd.x - diff1.x, roundEnd.y - diff1.y, roundEnd.z - diff1.z); + tessellator.addVertex(roundEnd.x + diff1.x, roundEnd.y + diff1.y, roundEnd.z + diff1.z); + tessellator.addVertex(startVec.x + diff1.x, startVec.y + diff1.y, startVec.z + diff1.z); + + tessellator.draw(); + } + } + } + + /** + * Spawn a lightning bolt between two points. + * + * @param world The world + * @param start Start position + * @param end End position + * @param ticksPerMeter Speed of bolt expansion + * @param seed Random seed for consistent appearance + * @param colorOuter Outer glow color (ARGB) + * @param colorInner Inner core color (ARGB) + */ + public static void spawnLightningBolt(World world, Vec3d start, Vec3d end, float ticksPerMeter, long seed, int colorOuter, int colorInner) { + LightningBolt bolt = new LightningBolt(world, start, end, ticksPerMeter, seed, colorOuter, colorInner); + bolt.defaultFractal(); + bolt.finalizeBolt(); + LightningBolt.boltList.add(bolt); + } + + /** + * Spawn a lightning bolt with automatic seed. + */ + public static void spawnLightningBolt(World world, Vec3d start, Vec3d end, float ticksPerMeter, int colorOuter, int colorInner) { + spawnLightningBolt(world, start, end, ticksPerMeter, System.nanoTime(), colorOuter, colorInner); + } + + /** + * Spawn a simple lightning bolt for projectiles - less detail, faster. + */ + public static void spawnSimpleLightningBolt(World world, Vec3d start, Vec3d end, float ticksPerMeter, int colorOuter, int colorInner) { + LightningBolt bolt = new LightningBolt(world, start, end, ticksPerMeter, System.nanoTime(), colorOuter, colorInner); + bolt.simpleFractal(); + bolt.finalizeBolt(); + LightningBolt.boltList.add(bolt); + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/Quaternion.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/Quaternion.java new file mode 100644 index 000000000..cda0307b7 --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/Quaternion.java @@ -0,0 +1,85 @@ +package kamkeel.npcs.client.renderer.lightning; + +/** + * Quaternion class for axis-angle rotations in lightning calculations. + * Adapted from Botania's Quat by ChickenBones. + */ +public class Quaternion { + public double x; + public double y; + public double z; + public double s; + + public Quaternion() { + s = 1.0; + x = 0.0; + y = 0.0; + z = 0.0; + } + + public Quaternion(Quaternion quat) { + x = quat.x; + y = quat.y; + z = quat.z; + s = quat.s; + } + + public Quaternion(double s, double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + this.s = s; + } + + public static Quaternion aroundAxis(double ax, double ay, double az, double angle) { + angle *= 0.5; + double sinAngle = Math.sin(angle); + return new Quaternion(Math.cos(angle), ax * sinAngle, ay * sinAngle, az * sinAngle); + } + + public static Quaternion aroundAxis(Vec3d axis, double angle) { + return aroundAxis(axis.x, axis.y, axis.z, angle); + } + + public void multiply(Quaternion quat) { + double d = s * quat.s - x * quat.x - y * quat.y - z * quat.z; + double d1 = s * quat.x + x * quat.s - y * quat.z + z * quat.y; + double d2 = s * quat.y + x * quat.z + y * quat.s - z * quat.x; + double d3 = s * quat.z - x * quat.y + y * quat.x + z * quat.s; + s = d; + x = d1; + y = d2; + z = d3; + } + + public double mag() { + return Math.sqrt(x * x + y * y + z * z + s * s); + } + + public void normalize() { + double d = mag(); + if (d == 0.0) { + return; + } + d = 1.0 / d; + x *= d; + y *= d; + z *= d; + s *= d; + } + + public void rotate(Vec3d vec) { + double d = -x * vec.x - y * vec.y - z * vec.z; + double d1 = s * vec.x + y * vec.z - z * vec.y; + double d2 = s * vec.y - x * vec.z + z * vec.x; + double d3 = s * vec.z + x * vec.y - y * vec.x; + vec.x = d1 * s - d * x - d2 * z + d3 * y; + vec.y = d2 * s - d * y + d1 * z - d3 * x; + vec.z = d3 * s - d * z - d1 * y + d2 * x; + } + + @Override + public String toString() { + return "Quaternion(" + s + ", " + x + ", " + y + ", " + z + ")"; + } +} diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/Vec3d.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/Vec3d.java new file mode 100644 index 000000000..018e55bdb --- /dev/null +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/Vec3d.java @@ -0,0 +1,184 @@ +package kamkeel.npcs.client.renderer.lightning; + +import net.minecraft.entity.Entity; +import net.minecraft.util.Vec3; +import org.lwjgl.opengl.GL11; + +/** + * 3D Vector helper class for lightning calculations. + * Adapted from Botania's Vector3 by ChickenBones. + */ +public class Vec3d { + public double x; + public double y; + public double z; + + public Vec3d() { + } + + public Vec3d(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Vec3d(Vec3d vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + + public Vec3d(Vec3 vec) { + this.x = vec.xCoord; + this.y = vec.yCoord; + this.z = vec.zCoord; + } + + public Vec3d copy() { + return new Vec3d(this); + } + + public static Vec3d fromEntity(Entity e) { + return new Vec3d(e.posX, e.posY, e.posZ); + } + + public static Vec3d fromEntityCenter(Entity e) { + return new Vec3d(e.posX, e.posY - e.yOffset + e.height / 2, e.posZ); + } + + public Vec3d set(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + return this; + } + + public Vec3d set(Vec3d vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + return this; + } + + public double dotProduct(Vec3d vec) { + double d = vec.x * x + vec.y * y + vec.z * z; + if (d > 1 && d < 1.00001) d = 1; + else if (d < -1 && d > -1.00001) d = -1; + return d; + } + + public Vec3d crossProduct(Vec3d vec) { + double d = y * vec.z - z * vec.y; + double d1 = z * vec.x - x * vec.z; + double d2 = x * vec.y - y * vec.x; + x = d; + y = d1; + z = d2; + return this; + } + + public Vec3d add(double x, double y, double z) { + this.x += x; + this.y += y; + this.z += z; + return this; + } + + public Vec3d add(Vec3d vec) { + this.x += vec.x; + this.y += vec.y; + this.z += vec.z; + return this; + } + + public Vec3d subtract(Vec3d vec) { + this.x -= vec.x; + this.y -= vec.y; + this.z -= vec.z; + return this; + } + + public Vec3d multiply(double d) { + this.x *= d; + this.y *= d; + this.z *= d; + return this; + } + + public double mag() { + return Math.sqrt(x * x + y * y + z * z); + } + + public double magSquared() { + return x * x + y * y + z * z; + } + + public Vec3d normalize() { + double d = mag(); + if (d != 0) { + multiply(1 / d); + } + return this; + } + + public Vec3d perpendicular() { + if (z == 0) { + return zCrossProduct(); + } + return xCrossProduct(); + } + + public Vec3d xCrossProduct() { + double d = z; + double d1 = -y; + x = 0; + y = d; + z = d1; + return this; + } + + public Vec3d zCrossProduct() { + double d = y; + double d1 = -x; + x = d; + y = d1; + z = 0; + return this; + } + + public Vec3 toVec3() { + return Vec3.createVectorHelper(x, y, z); + } + + public double angle(Vec3d vec) { + return Math.acos(copy().normalize().dotProduct(vec.copy().normalize())); + } + + public Vec3d negate() { + x = -x; + y = -y; + z = -z; + return this; + } + + public Vec3d rotate(double angle, Vec3d axis) { + Quaternion.aroundAxis(axis.copy().normalize(), angle).rotate(this); + return this; + } + + public void glVertex() { + GL11.glVertex3d(x, y, z); + } + + @Override + public String toString() { + return "Vec3d(" + x + ", " + y + ", " + z + ")"; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Vec3d)) return false; + Vec3d v = (Vec3d) o; + return x == v.x && y == v.y && z == v.z; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 0db44ea8a..5aa34a969 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -57,10 +57,15 @@ public class AbilityDisc extends Ability { // Visual properties private int innerColor = 0xFFFFFF; private int outerColor = 0xFF8800; - private float outerColorWidth = 1.8f; + private float outerColorWidth = 0.4f; // Additive offset from inner size private boolean outerColorEnabled = true; private float rotationSpeed = 5.0f; + // Lightning effect properties + private boolean lightningEffect = false; + private float lightningDensity = 0.15f; + private float lightningRadius = 0.5f; + public AbilityDisc() { this.typeId = "ability.cnpc.disc"; this.name = "Disc"; @@ -113,7 +118,8 @@ public class AbilityDisc extends Ability { boomerang, boomerangDelay, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius ); world.spawnEntityInWorld(disc); @@ -184,6 +190,9 @@ public class AbilityDisc extends Ability { nbt.setFloat("outerColorWidth", outerColorWidth); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); + nbt.setBoolean("lightningEffect", lightningEffect); + nbt.setFloat("lightningDensity", lightningDensity); + nbt.setFloat("lightningRadius", lightningRadius); } @Override @@ -209,9 +218,12 @@ public class AbilityDisc extends Ability { this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF8800; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 5.0f; + this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); + this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; + this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; } // Getters & Setters @@ -263,4 +275,10 @@ public class AbilityDisc extends Ability { public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } public float getRotationSpeed() { return rotationSpeed; } public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } + public boolean hasLightningEffect() { return lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningDensity; } + public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningRadius; } + public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 58a224c64..9a5345435 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -8,6 +8,7 @@ import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -56,10 +57,18 @@ public class AbilityEnergyBeam extends Ability { // Visual properties private int innerColor = 0xFFFFFF; private int outerColor = 0x00AAFF; - private float outerColorWidth = 1.8f; + private float outerColorWidth = 0.4f; // Additive offset from inner size private boolean outerColorEnabled = true; private float rotationSpeed = 6.0f; + // Lightning effect properties (only on head) + private boolean lightningEffect = false; + private float lightningDensity = 0.15f; + private float lightningRadius = 0.5f; + + // Transient state for beam entity (used during windup charging) + private transient int beamEntityId = -1; + public AbilityEnergyBeam() { this.typeId = "ability.cnpc.beam"; this.name = "Beam"; @@ -99,22 +108,43 @@ public class AbilityEnergyBeam extends Ability { public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { if (world.isRemote) return; - double spawnX = npc.posX; - double spawnY = npc.posY + npc.getEyeHeight() * 0.7; - double spawnZ = npc.posZ; + // Find and start firing the beam that was spawned during windup + if (beamEntityId != -1) { + Entity entity = world.getEntityByID(beamEntityId); + if (entity instanceof EntityAbilityBeam) { + EntityAbilityBeam beam = (EntityAbilityBeam) entity; + beam.startFiring(target); + } + beamEntityId = -1; + } + } - EntityAbilityBeam beam = new EntityAbilityBeam( - world, npc, target, - spawnX, spawnY, spawnZ, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, - damage, knockback, knockbackUp, - speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime - ); + @Override + public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; - world.spawnEntityInWorld(beam); + // Spawn beam in charging mode on first tick of windup + if (tick == 1) { + float offsetDist = 1.0f; + + // Create beam in charging mode - follows NPC's look direction during windup + EntityAbilityBeam beam = EntityAbilityBeam.createCharging( + world, npc, target, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, + speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, + lockMovement, // Anchored mode + windUpTicks, // Charge duration = windup duration + offsetDist // Offset distance in front of NPC + ); + + world.spawnEntityInWorld(beam); + beamEntityId = beam.getEntityId(); + } } @Override @@ -127,6 +157,14 @@ public class AbilityEnergyBeam extends Ability { @Override public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + // Despawn charging beam if interrupted during windup + if (beamEntityId != -1) { + Entity entity = npc.worldObj.getEntityByID(beamEntityId); + if (entity != null) { + entity.setDead(); + } + beamEntityId = -1; + } } @Override @@ -180,6 +218,9 @@ public class AbilityEnergyBeam extends Ability { nbt.setFloat("outerColorWidth", outerColorWidth); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); + nbt.setBoolean("lightningEffect", lightningEffect); + nbt.setFloat("lightningDensity", lightningDensity); + nbt.setFloat("lightningRadius", lightningRadius); } @Override @@ -203,9 +244,12 @@ public class AbilityEnergyBeam extends Ability { this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x00AAFF; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 6.0f; + this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); + this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; + this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; } // Getters & Setters @@ -253,4 +297,10 @@ public class AbilityEnergyBeam extends Ability { public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } public float getRotationSpeed() { return rotationSpeed; } public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } + public boolean hasLightningEffect() { return lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningDensity; } + public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningRadius; } + public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 64a3da8ad..77df6ff35 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -46,9 +46,14 @@ public class AbilityLaserShot extends Ability { // Visual properties private int innerColor = 0xFFFFFF; private int outerColor = 0xFF0000; - private float outerColorWidth = 1.8f; + private float outerColorWidth = 0.4f; // Additive offset from inner width private boolean outerColorEnabled = true; + // Lightning effect properties + private boolean lightningEffect = false; + private float lightningDensity = 0.15f; + private float lightningRadius = 0.5f; + public AbilityLaserShot() { this.typeId = "ability.cnpc.laser_shot"; this.name = "Laser Shot"; @@ -110,7 +115,8 @@ public class AbilityLaserShot extends Ability { expansionSpeed, lingerTicks, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius ); world.spawnEntityInWorld(laser); @@ -148,6 +154,9 @@ public class AbilityLaserShot extends Ability { nbt.setInteger("outerColor", outerColor); nbt.setFloat("outerColorWidth", outerColorWidth); nbt.setBoolean("outerColorEnabled", outerColorEnabled); + nbt.setBoolean("lightningEffect", lightningEffect); + nbt.setFloat("lightningDensity", lightningDensity); + nbt.setFloat("lightningRadius", lightningRadius); } @Override @@ -168,8 +177,11 @@ public class AbilityLaserShot extends Ability { this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); + this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; + this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; } // Getters & Setters @@ -209,4 +221,10 @@ public class AbilityLaserShot extends Ability { public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } public boolean isOuterColorEnabled() { return outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } + public boolean hasLightningEffect() { return lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningDensity; } + public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningRadius; } + public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 7b6f34b68..358b82896 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -53,10 +53,16 @@ public class AbilityOrb extends Ability { // Visual properties private int innerColor = 0xFFFFFF; // White core private int outerColor = 0x8888FF; // Light blue glow - private float outerColorWidth = 1.8f; // Multiplier for outer glow size + private float outerColorWidth = 0.4f; // Additive offset from inner size private boolean outerColorEnabled = true; // Whether to render outer glow private float rotationSpeed = 4.0f; // Degrees per tick + // Lightning effect properties + private boolean lightningEffect = false; + private float lightningDensity = 0.15f; // Bolts spawned per tick (0.15 = ~15% chance per frame) + private float lightningRadius = 0.5f; // Max distance lightning arcs - scales with orbSize + private int lightningFadeTime = 6; // Ticks before lightning fades out + public AbilityOrb() { this.typeId = "ability.cnpc.orb"; this.name = "Orb"; @@ -110,7 +116,8 @@ public class AbilityOrb extends Ability { orbSpeed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, lightningFadeTime ); world.spawnEntityInWorld(orb); @@ -181,6 +188,10 @@ public class AbilityOrb extends Ability { nbt.setFloat("outerColorWidth", outerColorWidth); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); + nbt.setBoolean("lightningEffect", lightningEffect); + nbt.setFloat("lightningDensity", lightningDensity); + nbt.setFloat("lightningRadius", lightningRadius); + nbt.setInteger("lightningFadeTime", lightningFadeTime); } @Override @@ -203,9 +214,13 @@ public class AbilityOrb extends Ability { this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x8888FF; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; + this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 4.0f; + this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); + this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; + this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; + this.lightningFadeTime = nbt.hasKey("lightningFadeTime") ? nbt.getInteger("lightningFadeTime") : 6; } // Getters & Setters @@ -376,4 +391,36 @@ public class AbilityOrb extends Ability { public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } + + public boolean hasLightningEffect() { + return lightningEffect; + } + + public void setLightningEffect(boolean lightningEffect) { + this.lightningEffect = lightningEffect; + } + + public float getLightningDensity() { + return lightningDensity; + } + + public void setLightningDensity(float lightningDensity) { + this.lightningDensity = lightningDensity; + } + + public float getLightningRadius() { + return lightningRadius; + } + + public void setLightningRadius(float lightningRadius) { + this.lightningRadius = lightningRadius; + } + + public int getLightningFadeTime() { + return lightningFadeTime; + } + + public void setLightningFadeTime(int lightningFadeTime) { + this.lightningFadeTime = lightningFadeTime; + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java index 71d63f9c6..a5d2f0d95 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java +++ b/src/main/java/kamkeel/npcs/controllers/data/telegraph/TelegraphInstance.java @@ -17,12 +17,18 @@ public class TelegraphInstance { private String instanceId; private Telegraph telegraph; - // Position + // Position (current) private double x; private double y; private double z; private float yaw; + // Position (previous tick - for interpolation) + private double prevX; + private double prevY; + private double prevZ; + private float prevYaw; + // Entity tracking private int entityIdToFollow = -1; private int casterEntityId = -1; @@ -50,6 +56,11 @@ public class TelegraphInstance { this.y = y; this.z = z; this.yaw = yaw; + // Initialize prev positions to current for first frame + this.prevX = x; + this.prevY = y; + this.prevZ = z; + this.prevYaw = yaw; this.remainingTicks = telegraph.getDurationTicks(); this.totalTicks = telegraph.getDurationTicks(); } @@ -69,6 +80,12 @@ public class TelegraphInstance { return false; } + // Save previous position for interpolation + this.prevX = this.x; + this.prevY = this.y; + this.prevZ = this.z; + this.prevYaw = this.yaw; + remainingTicks--; // Update position if following an entity @@ -144,6 +161,43 @@ public class TelegraphInstance { return (alpha << 24) | (r << 16) | (g << 8) | b; } + // ═══════════════════════════════════════════════════════════════════ + // INTERPOLATED POSITION (for smooth rendering) + // ═══════════════════════════════════════════════════════════════════ + + /** + * Get interpolated X position for smooth rendering. + */ + public double getInterpolatedX(float partialTicks) { + return prevX + (x - prevX) * partialTicks; + } + + /** + * Get interpolated Y position for smooth rendering. + */ + public double getInterpolatedY(float partialTicks) { + return prevY + (y - prevY) * partialTicks; + } + + /** + * Get interpolated Z position for smooth rendering. + */ + public double getInterpolatedZ(float partialTicks) { + return prevZ + (z - prevZ) * partialTicks; + } + + /** + * Get interpolated yaw for smooth rendering. + * Handles angle wrapping for smooth rotation. + */ + public float getInterpolatedYaw(float partialTicks) { + // Handle angle wrapping to prevent spinning the wrong way + float diff = yaw - prevYaw; + while (diff > 180.0f) diff -= 360.0f; + while (diff < -180.0f) diff += 360.0f; + return prevYaw + diff * partialTicks; + } + // ═══════════════════════════════════════════════════════════════════ // NBT SERIALIZATION // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index b0c3579e7..ab62c4ca9 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -47,6 +47,23 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { // Origin stays fixed (or follows owner) private boolean attachedToOwner = true; + // Whether to render tail orb (only when anchored) + private boolean renderTailOrb = true; + + // Charging state (during windup) + private boolean charging = false; + private int chargeDuration = 40; + private int chargeTick = 0; + private float chargeOffsetDistance = 1.0f; + + // Trail fading for non-anchored beams (comet effect) + private boolean fadeTrail = false; + private int trailFadeTime = 20; // Ticks for trail to fully fade + private List trailPointAges = new ArrayList<>(); + + // Data watcher index for charging state (synced to clients) + private static final int DW_CHARGING = 20; + // Debug logging private static final boolean DEBUG_LOGGING = true; @@ -54,8 +71,32 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { super(world); } + @Override + protected void entityInit() { + super.entityInit(); + // Register data watcher for charging state + this.dataWatcher.addObject(DW_CHARGING, (byte) 0); + } + /** - * Full constructor with all parameters. + * Check if beam is in charging state (synced via data watcher). + */ + public boolean isCharging() { + return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; + } + + /** + * Set charging state (server only, synced to clients via data watcher). + */ + private void setCharging(boolean value) { + this.charging = value; + if (!worldObj.isRemote) { + this.dataWatcher.updateObject(DW_CHARGING, (byte) (value ? 1 : 0)); + } + } + + /** + * Full constructor with all parameters (no lightning). */ public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, @@ -66,15 +107,62 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { + this(world, owner, target, x, y, z, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + false, 0.15f, 0.5f); + } + + /** + * Full constructor with all parameters including lightning. + */ + public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float beamWidth, float headSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius) { + this(world, owner, target, x, y, z, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, + true); // Default to anchored mode + } + + /** + * Full constructor with all parameters including lightning and anchored mode. + * @param anchoredMode If true, origin follows owner and tail orb is rendered. + * If false, beam is free-moving with trailing length (no tail orb). + */ + public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float beamWidth, float headSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, + boolean anchoredMode) { super(world); - // Initialize base properties + // Initialize base properties with lightning initProjectile(owner, target, x, y, z, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime); + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, 6); // Beam-specific properties this.speed = speed; @@ -84,6 +172,10 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.beamWidth = beamWidth; this.headSize = headSize; + // Anchored mode controls whether origin follows owner and tail orb is rendered + this.attachedToOwner = anchoredMode; + this.renderTailOrb = anchoredMode; + // Initialize head offset at origin (0,0,0 relative) this.headOffsetX = 0; this.headOffsetY = 0; @@ -119,6 +211,118 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } + /** + * Create a beam in charging mode (for windup phase). + * The beam will grow from 0 to headSize over chargeDuration ticks. + * Position follows the owner's look direction. + */ + public static EntityAbilityBeam createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, + float beamWidth, float headSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, + boolean anchoredMode, int chargeDuration, float chargeOffsetDistance) { + // Calculate initial position in front of owner's look direction + float yaw = (float) Math.toRadians(owner.rotationYawHead); + double spawnX = owner.posX - Math.sin(yaw) * chargeOffsetDistance; + double spawnY = owner.posY + owner.getEyeHeight() * 0.7; + double spawnZ = owner.posZ + Math.cos(yaw) * chargeOffsetDistance; + + EntityAbilityBeam beam = new EntityAbilityBeam( + world, owner, target, + spawnX, spawnY, spawnZ, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, + anchoredMode); + + // Set charging state (uses data watcher for client sync) + beam.setCharging(true); + beam.chargeDuration = chargeDuration; + beam.chargeTick = 0; + beam.chargeOffsetDistance = chargeOffsetDistance; + + // Non-anchored beams have fading trail (comet effect) + beam.fadeTrail = !anchoredMode; + + // Clear motion while charging + beam.motionX = 0; + beam.motionY = 0; + beam.motionZ = 0; + + return beam; + } + + /** + * Start the beam firing (exit charging mode). + * Called by ability when windup ends. + * + * For anchored beams: origin follows owner, head starts at charged position + * For non-anchored beams: origin fixed at charged position, head starts there + */ + public void startFiring(EntityLivingBase target) { + if (!isCharging()) return; + + setCharging(false); + + // Origin (tail) stays at the charged position - where the orb was + // This is the same for both anchored and non-anchored modes + startX = posX; + startY = posY; + startZ = posZ; + + // Head starts at the origin (tail position) + headOffsetX = 0; + headOffsetY = 0; + headOffsetZ = 0; + prevHeadOffsetX = 0; + prevHeadOffsetY = 0; + prevHeadOffsetZ = 0; + + // Origin no longer follows owner after firing starts + // (for anchored mode, tail is fixed in space; for non-anchored, there's no tail) + attachedToOwner = false; + + // Initialize trail with just the origin point + trailPoints.clear(); + trailPointAges.clear(); + trailPoints.add(Vec3.createVectorHelper(0, 0, 0)); + if (fadeTrail) trailPointAges.add(0); + + // Calculate velocity toward target (head starts at origin = startX/Y/Z) + Entity owner = getOwner(); + + if (target != null) { + double dx = target.posX - startX; + double dy = (target.posY + target.height * 0.5) - startY; + double dz = target.posZ - startZ; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + motionX = (dx / len) * speed; + motionY = (dy / len) * speed; + motionZ = (dz / len) * speed; + } + } else if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + + if (DEBUG_LOGGING && !worldObj.isRemote) { + LogWriter.info("[Beam] startFiring: origin=(" + startX + "," + startY + "," + startZ + + ") headOffset=(" + headOffsetX + "," + headOffsetY + "," + headOffsetZ + + ") motion=(" + motionX + "," + motionY + "," + motionZ + ")"); + } + } + @Override protected boolean checkMaxDistance() { // Check distance using head offset (distance from origin) @@ -136,19 +340,41 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { @Override protected void updateProjectile() { + // Handle charging state (windup phase) - use isCharging() for synced value + if (isCharging()) { + updateCharging(); + return; + } + // Store previous head offset for interpolation prevHeadOffsetX = headOffsetX; prevHeadOffsetY = headOffsetY; prevHeadOffsetZ = headOffsetZ; + // Age trail points for fading effect + if (fadeTrail) { + ageTrailPoints(); + } + if (worldObj.isRemote) { - // Client: interpolate entity position, derive head from offset + // Client: interpolate entity position handleClientInterpolation(); - // Client also updates head offset to match motion for smooth movement - headOffsetX += motionX; - headOffsetY += motionY; - headOffsetZ += motionZ; + // Client: update origin if attached to owner (mirrors server logic) + if (attachedToOwner) { + Entity owner = getOwner(); + if (owner != null) { + startX = owner.posX; + startY = owner.posY + owner.getEyeHeight() * 0.7; + startZ = owner.posZ; + } + } + + // Client: derive head offset from entity position and origin + // Entity position = head world position, so headOffset = pos - origin + headOffsetX = posX - startX; + headOffsetY = posY - startY; + headOffsetZ = posZ - startZ; // Add trail point on client addTrailPoint(); @@ -166,7 +392,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { Entity owner = getOwner(); if (owner != null) { startX = owner.posX; - startY = owner.posY + owner.height * 0.7; + startY = owner.posY + owner.getEyeHeight() * 0.7; startZ = owner.posZ; } } @@ -201,10 +427,66 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } + /** + * Update during charging state - follow owner's look direction. + */ + private void updateCharging() { + chargeTick++; + + Entity owner = getOwner(); + if (owner == null || owner.isDead) { + setDead(); + return; + } + + // Follow owner's head/look direction (rotationYawHead for NPCs/players) + float yaw; + if (owner instanceof EntityLivingBase) { + yaw = (float) Math.toRadians(((EntityLivingBase) owner).rotationYawHead); + } else { + yaw = (float) Math.toRadians(owner.rotationYaw); + } + + double offsetX = -Math.sin(yaw) * chargeOffsetDistance; + double offsetZ = Math.cos(yaw) * chargeOffsetDistance; + + double newX = owner.posX + offsetX; + double newY = owner.posY + owner.getEyeHeight() * 0.7; + double newZ = owner.posZ + offsetZ; + + setPosition(newX, newY, newZ); + + // Also update origin for when firing starts + startX = newX; + startY = newY; + startZ = newZ; + } + + /** + * Age trail points and remove old ones (for comet effect). + */ + private void ageTrailPoints() { + // Age all trail points + for (int i = 0; i < trailPointAges.size(); i++) { + trailPointAges.set(i, trailPointAges.get(i) + 1); + } + + // Remove trail points that have fully faded + while (!trailPointAges.isEmpty() && trailPointAges.get(0) >= trailFadeTime) { + trailPointAges.remove(0); + if (!trailPoints.isEmpty()) { + trailPoints.remove(0); + } + } + } + private void addTrailPoint() { // Trail points are RELATIVE to origin if (trailPoints.isEmpty()) { trailPoints.add(Vec3.createVectorHelper(headOffsetX, headOffsetY, headOffsetZ)); + if (fadeTrail) { + trailPointAges.add(0); + } return; } @@ -217,10 +499,15 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { if (dist >= MIN_POINT_DISTANCE) { trailPoints.add(Vec3.createVectorHelper(headOffsetX, headOffsetY, headOffsetZ)); + if (fadeTrail) { + trailPointAges.add(0); + } - // Limit trail length - while (trailPoints.size() > MAX_TRAIL_POINTS) { - trailPoints.remove(0); + // Limit trail length (only if not using fading - fading handles its own cleanup) + if (!fadeTrail) { + while (trailPoints.size() > MAX_TRAIL_POINTS) { + trailPoints.remove(0); + } } } } @@ -369,6 +656,59 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { return startZ; } + /** + * Whether the tail orb should be rendered (only true in anchored mode). + */ + public boolean shouldRenderTailOrb() { + return renderTailOrb; + } + + /** + * Whether the beam is attached to its owner (anchored mode). + */ + public boolean isAttachedToOwner() { + return attachedToOwner; + } + + /** + * Get the charge progress (0-1). + */ + public float getChargeProgress() { + if (chargeDuration <= 0) return 1.0f; + return Math.min(1.0f, (float) chargeTick / chargeDuration); + } + + /** + * Get interpolated charge progress for smooth rendering. + */ + public float getInterpolatedChargeProgress(float partialTicks) { + if (chargeDuration <= 0) return 1.0f; + float prevProgress = Math.max(0, (float) (chargeTick - 1) / chargeDuration); + float currProgress = Math.min(1.0f, (float) chargeTick / chargeDuration); + return prevProgress + (currProgress - prevProgress) * partialTicks; + } + + /** + * Whether trail should fade (comet effect for non-anchored beams). + */ + public boolean hasFadingTrail() { + return fadeTrail; + } + + /** + * Get trail point ages for fading calculation. + */ + public List getTrailPointAges() { + return trailPointAges; + } + + /** + * Get trail fade time in ticks. + */ + public int getTrailFadeTime() { + return trailFadeTime; + } + // ==================== NBT ==================== @Override @@ -386,6 +726,16 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.prevHeadOffsetY = this.headOffsetY; this.prevHeadOffsetZ = this.headOffsetZ; this.attachedToOwner = !nbt.hasKey("AttachedToOwner") || nbt.getBoolean("AttachedToOwner"); + this.renderTailOrb = !nbt.hasKey("RenderTailOrb") || nbt.getBoolean("RenderTailOrb"); + // Read charging state and sync to data watcher + boolean isCharging = nbt.hasKey("Charging") && nbt.getBoolean("Charging"); + this.charging = isCharging; + this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); + this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; + this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; + this.chargeOffsetDistance = nbt.hasKey("ChargeOffsetDistance") ? nbt.getFloat("ChargeOffsetDistance") : 1.0f; + this.fadeTrail = nbt.hasKey("FadeTrail") && nbt.getBoolean("FadeTrail"); + this.trailFadeTime = nbt.hasKey("TrailFadeTime") ? nbt.getInteger("TrailFadeTime") : 20; // Read trail points (relative to origin) trailPoints.clear(); @@ -414,6 +764,13 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { nbt.setDouble("HeadOffsetY", headOffsetY); nbt.setDouble("HeadOffsetZ", headOffsetZ); nbt.setBoolean("AttachedToOwner", attachedToOwner); + nbt.setBoolean("RenderTailOrb", renderTailOrb); + nbt.setBoolean("Charging", isCharging()); + nbt.setInteger("ChargeDuration", chargeDuration); + nbt.setInteger("ChargeTick", chargeTick); + nbt.setFloat("ChargeOffsetDistance", chargeOffsetDistance); + nbt.setBoolean("FadeTrail", fadeTrail); + nbt.setInteger("TrailFadeTime", trailFadeTime); // Write trail points NBTTagList trailList = new NBTTagList(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index ef513f80d..c0127286f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -40,7 +40,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { } /** - * Full constructor with all parameters. + * Full constructor with all parameters (no lightning). */ public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, @@ -52,15 +52,38 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { + this(world, owner, target, x, y, z, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + boomerang, boomerangDelay, explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + false, 0.15f, 0.5f); + } + + /** + * Full constructor with all parameters including lightning. + */ + public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float discRadius, float discThickness, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean boomerang, int boomerangDelay, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius) { super(world); - // Initialize base properties (use discRadius as size for base) + // Initialize base properties with lightning (use discRadius as size for base) initProjectile(owner, target, x, y, z, discRadius, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime); + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, 6); // Disc-specific properties this.speed = speed; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 78668377a..7ad1f0d45 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -45,7 +45,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { } /** - * Full constructor with all parameters. + * Full constructor with all parameters (no lightning). */ public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, @@ -56,15 +56,37 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { + this(world, owner, target, x, y, z, + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, + damage, knockback, knockbackUp, expansionSpeed, lingerTicks, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + false, 0.15f, 0.5f); + } + + /** + * Full constructor with all parameters including lightning. + */ + public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float laserWidth, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, + float damage, float knockback, float knockbackUp, + float expansionSpeed, int lingerTicks, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius) { super(world); - // Initialize base properties + // Initialize base properties with lightning initProjectile(owner, target, x, y, z, laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, 0.0f, // No rotation for laser damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime); + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, 6); // Laser-specific properties this.laserWidth = laserWidth; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index de447333b..38e3741f9 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -41,15 +41,39 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { + this(world, owner, target, x, y, z, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, + speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime, + false, 0.15f, 0.5f, 6); // Default: no lightning, low density, small radius, 6 tick fade + } + + /** + * Full constructor with lightning effect support. + */ + public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float orbSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime) { super(world); - // Initialize base properties + // Initialize base properties with lightning initProjectile(owner, target, x, y, z, orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime); + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, lightningFadeTime); // Orb-specific properties this.speed = speed; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index eed12d10b..32c5796bd 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -30,7 +30,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected int innerColor = 0xFFFFFF; protected int outerColor = 0x8888FF; protected boolean outerColorEnabled = true; - protected float outerColorWidth = 1.8f; + protected float outerColorWidth = 0.4f; // Additive offset from inner size protected float rotationSpeed = 4.0f; // ==================== COMBAT PROPERTIES ==================== @@ -48,6 +48,16 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected float explosionRadius = 3.0f; protected float explosionDamageFalloff = 0.5f; + // ==================== LIGHTNING EFFECT PROPERTIES ==================== + protected boolean lightningEffect = false; + protected float lightningDensity = 0.15f; // Bolts spawned per tick (0.15 = ~15% chance per frame) + protected float lightningRadius = 0.5f; // Max distance lightning can arc from center + protected int lightningFadeTime = 6; // Ticks before lightning fades out + + // Client-side lightning state (not saved to NBT) + @cpw.mods.fml.relauncher.SideOnly(cpw.mods.fml.relauncher.Side.CLIENT) + public transient Object lightningState; // Actually AttachedLightningRenderer.LightningState + // ==================== LIFESPAN ==================== protected float maxDistance = 30.0f; protected int maxLifetime = 200; @@ -93,6 +103,27 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { + initProjectile(owner, target, x, y, z, + size, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime, + false, 0.15f, 0.5f, 6); // Default: no lightning, low density, small radius, 6 tick fade + } + + /** + * Initialize common properties with lightning effect support. + */ + protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, + double x, double y, double z, + float size, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime) { this.setPosition(x, y, z); this.startX = x; this.startY = y; @@ -129,6 +160,12 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.maxLifetime = maxLifetime; // deathWorldTime will be set on first tick when world is available + // Lightning + this.lightningEffect = lightningEffect; + this.lightningDensity = lightningDensity; + this.lightningRadius = lightningRadius; + this.lightningFadeTime = lightningFadeTime; + // Initialize render size this.renderCurrentSize = size; this.prevRenderSize = size; @@ -417,6 +454,24 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA return this.prevRenderSize + (this.renderCurrentSize - this.prevRenderSize) * partialTicks; } + // ==================== LIGHTNING GETTERS ==================== + + public boolean hasLightningEffect() { + return lightningEffect; + } + + public float getLightningDensity() { + return lightningDensity; + } + + public float getLightningRadius() { + return lightningRadius; + } + + public int getLightningFadeTime() { + return lightningFadeTime; + } + // ==================== BRIGHTNESS ==================== @Override @@ -452,7 +507,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.innerColor = nbt.getInteger("InnerColor"); this.outerColor = nbt.getInteger("OuterColor"); this.outerColorEnabled = !nbt.hasKey("OuterColorEnabled") || nbt.getBoolean("OuterColorEnabled"); - this.outerColorWidth = nbt.hasKey("OuterColorWidth") ? nbt.getFloat("OuterColorWidth") : 1.8f; + this.outerColorWidth = nbt.hasKey("OuterColorWidth") ? nbt.getFloat("OuterColorWidth") : 0.4f; this.rotationSpeed = nbt.hasKey("RotationSpeed") ? nbt.getFloat("RotationSpeed") : 4.0f; this.damage = nbt.getFloat("Damage"); @@ -482,6 +537,12 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.motionY = nbt.getDouble("MotionY"); this.motionZ = nbt.getDouble("MotionZ"); + // Lightning + this.lightningEffect = nbt.getBoolean("LightningEffect"); + this.lightningDensity = nbt.hasKey("LightningDensity") ? nbt.getFloat("LightningDensity") : 0.15f; + this.lightningRadius = nbt.hasKey("LightningRadius") ? nbt.getFloat("LightningRadius") : 0.5f; + this.lightningFadeTime = nbt.hasKey("LightningFadeTime") ? nbt.getInteger("LightningFadeTime") : 6; + if (this.worldObj != null && this.worldObj.isRemote) { this.renderCurrentSize = this.size; this.prevRenderSize = this.size; @@ -525,6 +586,12 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA nbt.setDouble("MotionX", motionX); nbt.setDouble("MotionY", motionY); nbt.setDouble("MotionZ", motionZ); + + // Lightning + nbt.setBoolean("LightningEffect", lightningEffect); + nbt.setFloat("LightningDensity", lightningDensity); + nbt.setFloat("LightningRadius", lightningRadius); + nbt.setInteger("LightningFadeTime", lightningFadeTime); } /** diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 534963e38..9a0044191 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -144,11 +144,12 @@ import noppes.npcs.client.renderer.RenderNpcCrystal; import noppes.npcs.client.renderer.RenderNpcDragon; import noppes.npcs.client.renderer.RenderNpcSlime; import noppes.npcs.client.renderer.RenderProjectile; -import kamkeel.npcs.client.renderer.RenderAbilityOrbCube; +import kamkeel.npcs.client.renderer.RenderAbilityOrb; import kamkeel.npcs.client.renderer.RenderAbilityDisc; import kamkeel.npcs.client.renderer.RenderAbilityLaser; import kamkeel.npcs.client.renderer.RenderAbilityBeam; import kamkeel.npcs.client.renderer.RenderAbilitySweeper; +import kamkeel.npcs.client.renderer.lightning.LightningHandler; import kamkeel.npcs.entity.EntityAbilityOrb; import kamkeel.npcs.entity.EntityAbilityDisc; import kamkeel.npcs.entity.EntityAbilityLaser; @@ -261,8 +262,7 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerEntityRenderingHandler(EntityNpcDragon.class, new RenderNpcDragon(new ModelNpcDragon(0.0F), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityNpcSlime.class, new RenderNpcSlime(new ModelNpcSlime(16), new ModelNpcSlime(0), 0.25F)); RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, new RenderProjectile()); - // RenderingRegistry.registerEntityRenderingHandler(EntityAbilityOrb.class, new RenderAbilityOrb()); - RenderingRegistry.registerEntityRenderingHandler(EntityAbilityOrb.class, new RenderAbilityOrbCube()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityOrb.class, new RenderAbilityOrb()); RenderingRegistry.registerEntityRenderingHandler(EntityAbilityDisc.class, new RenderAbilityDisc()); RenderingRegistry.registerEntityRenderingHandler(EntityAbilityLaser.class, new RenderAbilityLaser()); RenderingRegistry.registerEntityRenderingHandler(EntityAbilityBeam.class, new RenderAbilityBeam()); @@ -340,6 +340,9 @@ public class ClientProxy extends CommonProxy { TelegraphManager.initClient(); MinecraftForge.EVENT_BUS.register(new TelegraphRenderer()); + // Lightning effect rendering system + MinecraftForge.EVENT_BUS.register(new LightningHandler()); + if (ConfigClient.InventoryGuiEnabled) { MinecraftForge.EVENT_BUS.register(new TabRegistry()); if (TabRegistry.getTabList().isEmpty()) { diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index 6142de16c..203cef3e2 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -5,6 +5,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; +import kamkeel.npcs.client.renderer.lightning.LightningBolt; import kamkeel.npcs.controllers.data.telegraph.TelegraphManager; import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.player.CheckPlayerValue; @@ -115,6 +116,9 @@ public class ClientTickHandler { if (TelegraphManager.ClientInstance != null) { TelegraphManager.ClientInstance.tick(mc.theWorld); } + + // Update lightning bolts for ability effects + LightningBolt.updateAll(); if (Minecraft.getMinecraft().thePlayer != null && (prevWidth != mc.displayWidth || prevHeight != mc.displayHeight)) { prevWidth = mc.displayWidth; prevHeight = mc.displayHeight; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index ec80ed5d6..373752fa6 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -126,6 +126,28 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 3: Rotation Speed addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); addTextField(createFloatField(204, fieldX, y, 50, disc.getRotationSpeed())); + + y += 24; + + // Row 4: Lightning Effect Enabled + addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); + addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0)); + + // Only show Lightning settings if Lightning is enabled + if (disc.hasLightningEffect()) { + y += 24; + + // Row 5: Density + Radius + addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(disc.getLightningDensity())); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(disc.getLightningRadius())); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } } @Override @@ -160,6 +182,10 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { disc.setOuterColorEnabled(value == 1); initGui(); break; + case 205: + disc.setLightningEffect(value == 1); + initGui(); + break; } } @@ -222,6 +248,12 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { case 204: disc.setRotationSpeed(parseFloat(field, disc.getRotationSpeed())); break; + case 206: + disc.setLightningDensity(parseFloat(field, disc.getLightningDensity())); + break; + case 207: + disc.setLightningRadius(parseFloat(field, disc.getLightningRadius())); + break; } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index afb89ffed..ad15bb576 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -127,6 +127,28 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 3: Rotation Speed addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); addTextField(createFloatField(204, fieldX, y, 50, beam.getRotationSpeed())); + + y += 24; + + // Row 4: Lightning Effect Enabled (only affects head) + addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); + addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0)); + + // Only show Lightning settings if Lightning is enabled + if (beam.hasLightningEffect()) { + y += 24; + + // Row 5: Density + Radius + addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(beam.getLightningDensity())); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(beam.getLightningRadius())); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } } @Override @@ -158,6 +180,10 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { beam.setOuterColorEnabled(value == 1); initGui(); break; + case 205: + beam.setLightningEffect(value == 1); + initGui(); + break; } } @@ -223,6 +249,12 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { case 204: beam.setRotationSpeed(parseFloat(field, beam.getRotationSpeed())); break; + case 206: + beam.setLightningDensity(parseFloat(field, beam.getLightningDensity())); + break; + case 207: + beam.setLightningRadius(parseFloat(field, beam.getLightningRadius())); + break; } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index 47385f7cb..f83e93baf 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -111,6 +111,28 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, laser.getOuterColorWidth()); widthField.setEnabled(laser.isOuterColorEnabled()); addTextField(widthField); + + y += 24; + + // Row 3: Lightning Effect Enabled + addLabel(new GuiNpcLabel(204, "ability.lightning", labelX, y + 5)); + addButton(new GuiNpcButton(204, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0)); + + // Only show Lightning settings if Lightning is enabled + if (laser.hasLightningEffect()) { + y += 24; + + // Row 4: Density + Radius + addLabel(new GuiNpcLabel(205, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(205, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(laser.getLightningDensity())); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(206, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(206, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(laser.getLightningRadius())); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } } @Override @@ -139,6 +161,10 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { laser.setOuterColorEnabled(value == 1); initGui(); break; + case 204: + laser.setLightningEffect(value == 1); + initGui(); + break; } } @@ -165,6 +191,12 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { case 203: laser.setOuterColorWidth(parseFloat(field, laser.getOuterColorWidth())); break; + case 205: + laser.setLightningDensity(parseFloat(field, laser.getLightningDensity())); + break; + case 206: + laser.setLightningRadius(parseFloat(field, laser.getLightningRadius())); + break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 9f5ac4caf..42dd6a773 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -87,36 +87,58 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 180; int col2FieldX = guiLeft + 260; - // Row 1: Inner Color + Outer Color + // Row 1: Inner Color + Rotation Speed addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", orb.getInnerColor() & 0xFFFFFF); GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); innerColorBtn.setTextColor(orb.getInnerColor() & 0xFFFFFF); addButton(innerColorBtn); - addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); - String outerHex = String.format("%06X", orb.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(orb.getOuterColor() & 0xFFFFFF); - outerColorBtn.setEnabled(orb.isOuterColorEnabled()); - addButton(outerColorBtn); + addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(204, col2FieldX, y, 55, orb.getRotationSpeed())); y += 24; - // Row 2: Outer Color Enabled + Outer Color Width + // Row 2: Outer Glow Enabled addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isOuterColorEnabled() ? 1 : 0)); - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, orb.getOuterColorWidth()); - widthField.setEnabled(orb.isOuterColorEnabled()); - addTextField(widthField); + // Only show Outer Color and Width if Outer Glow is enabled + if (orb.isOuterColorEnabled()) { + y += 24; + + // Row 3: Outer Color + Outer Width + addLabel(new GuiNpcLabel(201, "ability.outerColor", labelX, y + 5)); + String outerHex = String.format("%06X", orb.getOuterColor() & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, fieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(orb.getOuterColor() & 0xFFFFFF); + addButton(outerColorBtn); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + addTextField(createFloatField(203, col2FieldX, y, 55, orb.getOuterColorWidth())); + } y += 24; - // Row 3: Rotation Speed - addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); - addTextField(createFloatField(204, fieldX, y, 50, orb.getRotationSpeed())); + // Row 4: Lightning Effect Enabled + addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); + addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0)); + + // Only show Lightning settings if Lightning is enabled + if (orb.hasLightningEffect()) { + y += 24; + + // Row 5: Density + Radius + addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(orb.getLightningDensity())); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(orb.getLightningRadius())); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } } @Override @@ -148,6 +170,10 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { orb.setOuterColorEnabled(value == 1); initGui(); break; + case 205: + orb.setLightningEffect(value == 1); + initGui(); + break; } } @@ -207,6 +233,12 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { case 204: orb.setRotationSpeed(parseFloat(field, orb.getRotationSpeed())); break; + case 206: + orb.setLightningDensity(parseFloat(field, orb.getLightningDensity())); + break; + case 207: + orb.setLightningRadius(parseFloat(field, orb.getLightningRadius())); + break; } } } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index f3bba0c1d..b7e33a029 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1686,6 +1686,9 @@ ability.innerColor=Inner Color ability.outerColor=Outer Color ability.outerEnabled=Outer Glow ability.outerWidth=Outer Width +ability.lightning=Enable Lightning +ability.lightningDensity=Density +ability.lightningRadius=Radius ability.noVisualSettings=No visual settings for this ability type # Laser Shot Settings From d6d29613e8c1d2f6381b8833e3db042ecee6ad21 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 26 Jan 2026 19:03:48 -0500 Subject: [PATCH 06/85] Lock View Rotation --- .../client/renderer/RenderAbilityBeam.java | 6 +- .../renderer/quadric/QuadricRenderer.java | 138 ------------------ .../renderer/quadric/SphereRenderer.java | 37 ----- .../npcs/entity/EntityAbilityBeam.java | 12 +- src/main/java/noppes/npcs/DataAbilities.java | 83 ++++++++++- .../npcs/entity/EntityNPCInterface.java | 3 + 6 files changed, 90 insertions(+), 189 deletions(-) delete mode 100644 src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java delete mode 100644 src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java index 554b07e31..2fcb58d54 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -68,8 +68,12 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glPushMatrix(); GL11.glTranslated(renderOriginX, renderOriginY, renderOriginZ); + // Calculate head distance from origin (for overlap check) + double headDistFromOrigin = Math.sqrt(headOffsetX * headOffsetX + headOffsetY * headOffsetY + headOffsetZ * headOffsetZ); + // Render tail orb at origin (0,0,0) - only in anchored mode - if (beam.shouldRenderTailOrb()) { + // Don't render if head is too close to origin (would cause overlap/extra orb appearance) + if (beam.shouldRenderTailOrb() && headDistFromOrigin > headSize * 0.5) { renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); } diff --git a/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java deleted file mode 100644 index 13c994adc..000000000 --- a/src/main/java/kamkeel/npcs/client/renderer/quadric/QuadricRenderer.java +++ /dev/null @@ -1,138 +0,0 @@ -package kamkeel.npcs.client.renderer.quadric; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.renderer.GLAllocation; -import org.lwjgl.opengl.GL11; - -/** - * Base class for rendering GLU quadric shapes (spheres, cylinders, etc.) - * Uses display lists for efficient rendering. - * - * Design inspired by LouisXIV's quadric rendering system. - */ -@SideOnly(Side.CLIENT) -public abstract class QuadricRenderer { - protected int displayList; - private boolean compiled; - - public final float radius; - public final int slices; - public final int stacks; - - // Current render state - protected float scaleX = 1.0f; - protected float scaleY = 1.0f; - protected float scaleZ = 1.0f; - - protected float rotationX = 0.0f; - protected float rotationY = 0.0f; - protected float rotationZ = 0.0f; - - protected int color = 0xFFFFFF; - protected float alpha = 1.0f; - - public QuadricRenderer(float radius, int slices, int stacks) { - this.radius = radius; - this.slices = slices; - this.stacks = stacks; - } - - public QuadricRenderer(float radius, int resolution) { - this(radius, resolution, resolution); - } - - public QuadricRenderer() { - this(0.5f, 16); - } - - /** - * Render the quadric shape with current transform and color settings. - */ - public void render(float partialTicks) { - if (!compiled) { - displayList = GLAllocation.generateDisplayLists(1); - GL11.glNewList(displayList, GL11.GL_COMPILE); - compile(); - GL11.glEndList(); - compiled = true; - } - - GL11.glPushMatrix(); - - // Apply scale - GL11.glScalef(scaleX, scaleY, scaleZ); - - // Apply rotation - GL11.glRotatef(rotationX, 1.0f, 0.0f, 0.0f); - GL11.glRotatef(rotationY, 0.0f, 1.0f, 0.0f); - GL11.glRotatef(rotationZ, 0.0f, 0.0f, 1.0f); - - // Apply color - float r = ((color >> 16) & 0xFF) / 255.0f; - float g = ((color >> 8) & 0xFF) / 255.0f; - float b = (color & 0xFF) / 255.0f; - GL11.glColor4f(r, g, b, alpha); - - GL11.glCallList(displayList); - - GL11.glPopMatrix(); - } - - /** - * Compile the quadric geometry into the display list. - * Called once, then cached. - */ - protected abstract void compile(); - - // Setters for render state - public void setScale(float scale) { - this.scaleX = this.scaleY = this.scaleZ = scale; - } - - public void setScale(float x, float y, float z) { - this.scaleX = x; - this.scaleY = y; - this.scaleZ = z; - } - - public void setRotation(float x, float y, float z) { - this.rotationX = x; - this.rotationY = y; - this.rotationZ = z; - } - - public void setColor(int color) { - this.color = color; - } - - public void setAlpha(float alpha) { - this.alpha = alpha; - } - - /** - * Linear interpolation helper. - */ - public static float lerp(float current, float target, float factor) { - return current + (target - current) * factor; - } - - /** - * Color interpolation helper. - */ - public static int lerpColor(int from, int to, float factor) { - int r1 = (from >> 16) & 0xFF; - int g1 = (from >> 8) & 0xFF; - int b1 = from & 0xFF; - - int r2 = (to >> 16) & 0xFF; - int g2 = (to >> 8) & 0xFF; - int b2 = to & 0xFF; - - int r = (int) (r1 + (r2 - r1) * factor); - int g = (int) (g1 + (g2 - g1) * factor); - int b = (int) (b1 + (b2 - b1) * factor); - - return (r << 16) | (g << 8) | b; - } -} diff --git a/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java deleted file mode 100644 index dc72779a8..000000000 --- a/src/main/java/kamkeel/npcs/client/renderer/quadric/SphereRenderer.java +++ /dev/null @@ -1,37 +0,0 @@ -package kamkeel.npcs.client.renderer.quadric; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import org.lwjgl.util.glu.GLU; -import org.lwjgl.util.glu.Sphere; - -/** - * Renders a sphere using GLU quadrics. - * - * Design inspired by LouisXIV's quadric rendering system. - */ -@SideOnly(Side.CLIENT) -public class SphereRenderer extends QuadricRenderer { - - public SphereRenderer(float radius, int slices, int stacks) { - super(radius, slices, stacks); - } - - public SphereRenderer(float radius, int resolution) { - super(radius, resolution); - } - - public SphereRenderer() { - super(); - } - - @Override - protected void compile() { - Sphere sphere = new Sphere(); - sphere.setTextureFlag(true); // Enable texture coordinates - sphere.setDrawStyle(GLU.GLU_FILL); - sphere.setNormals(GLU.GLU_NONE); // No normals for self-illuminated rendering - sphere.setOrientation(GLU.GLU_OUTSIDE); - sphere.draw(radius, slices, stacks); - } -} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index ab62c4ca9..34030ab3f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -360,18 +360,10 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { // Client: interpolate entity position handleClientInterpolation(); - // Client: update origin if attached to owner (mirrors server logic) - if (attachedToOwner) { - Entity owner = getOwner(); - if (owner != null) { - startX = owner.posX; - startY = owner.posY + owner.getEyeHeight() * 0.7; - startZ = owner.posZ; - } - } - // Client: derive head offset from entity position and origin // Entity position = head world position, so headOffset = pos - origin + // Note: During charging, updateCharging() handles origin positioning + // After firing, origin is fixed at the charged position headOffsetX = posX - startX; headOffsetY = posY - startY; headOffsetZ = posZ - startZ; diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 8875508b1..246ebed46 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -78,6 +78,16 @@ public class DataAbilities { */ private transient List recentHitTimes = new ArrayList<>(); + /** + * Locked rotation values for ACTIVE phase with lockMovement. + * Stored when entering ACTIVE phase, applied every tick to prevent rotation changes. + */ + private transient boolean rotationLocked = false; + private transient float lockedYaw = 0; + private transient float lockedYawHead = 0; + private transient float lockedRenderYawOffset = 0; + private transient float lockedPitch = 0; + // ═══════════════════════════════════════════════════════════════════ // CONSTRUCTOR // ═══════════════════════════════════════════════════════════════════ @@ -136,6 +146,12 @@ public class DataAbilities { // Remove telegraph - it has served its purpose removeTelegraph(currentAbility); + // Lock rotation if lockMovement is true + // Capture current rotation values to force them every tick + if (currentAbility.isLockMovement()) { + captureLockedRotation(); + } + // Play active sound and animation playAbilitySound(currentAbility.getActiveSound()); playAbilityAnimation(currentAbility.getActiveAnimationId()); @@ -186,9 +202,9 @@ public class DataAbilities { } } - // Lock look direction at target during ACTIVE phase only - if (shouldLockLookDirection() && target != null && target.isEntityAlive()) { - npc.getLookHelper().setLookPositionWithEntity(target, 30.0F, 30.0F); + // Unlock rotation when leaving ACTIVE phase + if (rotationLocked && currentAbility.getPhase() != AbilityPhase.ACTIVE) { + releaseLockedRotation(); } } } @@ -202,6 +218,9 @@ public class DataAbilities { // Stop any ability animation stopAbilityAnimation(); + // Release rotation lock + releaseLockedRotation(); + // Calculate cooldown: random(min, max) + ability offset int baseCooldown = minCooldown; if (maxCooldown > minCooldown) { @@ -526,6 +545,9 @@ public class DataAbilities { // Stop any ability animation stopAbilityAnimation(); + // Release rotation lock + releaseLockedRotation(); + // Fire interrupt event AbilityEvent.InterruptEvent interruptEvent = new AbilityEvent.InterruptEvent( npc.wrappedNPC, currentAbility, lastTarget, source, damage); @@ -546,6 +568,7 @@ public class DataAbilities { if (currentAbility != null) { removeTelegraph(currentAbility); stopAbilityAnimation(); + releaseLockedRotation(); currentAbility.interrupt(); currentAbility = null; lastTarget = null; @@ -737,6 +760,60 @@ public class DataAbilities { return phase == AbilityPhase.WINDUP || phase == AbilityPhase.ACTIVE; } + // ═══════════════════════════════════════════════════════════════════ + // ROTATION LOCKING + // ═══════════════════════════════════════════════════════════════════ + + /** + * Capture current rotation values to lock NPC's look direction. + * Called when entering ACTIVE phase with lockMovement enabled. + */ + private void captureLockedRotation() { + lockedYaw = npc.rotationYaw; + lockedYawHead = npc.rotationYawHead; + lockedRenderYawOffset = npc.renderYawOffset; + lockedPitch = npc.rotationPitch; + rotationLocked = true; + } + + /** + * Release the rotation lock. + * Called when leaving ACTIVE phase or ability completes. + */ + private void releaseLockedRotation() { + rotationLocked = false; + } + + /** + * Apply locked rotation values to the NPC. + * Called AFTER super.onLivingUpdate() in EntityNPCInterface to override + * any rotation changes made by the look helper or AI tasks. + */ + public void applyLockedRotation() { + if (!rotationLocked) { + return; + } + + // Force rotation back to locked values + npc.rotationYaw = lockedYaw; + npc.rotationYawHead = lockedYawHead; + npc.renderYawOffset = lockedRenderYawOffset; + npc.rotationPitch = lockedPitch; + + // Also set prev values to prevent interpolation jitter + npc.prevRotationYaw = lockedYaw; + npc.prevRotationYawHead = lockedYawHead; + npc.prevRenderYawOffset = lockedRenderYawOffset; + npc.prevRotationPitch = lockedPitch; + } + + /** + * Check if rotation is currently locked. + */ + public boolean isRotationLocked() { + return rotationLocked; + } + // ═══════════════════════════════════════════════════════════════════ // NBT SERIALIZATION // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index 20d2f6d5c..ae292d59d 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -481,6 +481,9 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti super.onLivingUpdate(); + // Apply locked rotation after super.onLivingUpdate() to override look helper changes + abilities.applyLockedRotation(); + handleMountRiderState(); if (worldObj.isRemote) { From 563b6f7a26ab73bf73b6af9ef2faf0883040c76c Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 26 Jan 2026 22:02:51 -0500 Subject: [PATCH 07/85] Ability Effects --- .../controllers/data/ability/Ability.java | 63 +++++- .../data/ability/AbilityEffect.java | 146 +++++++++++++ .../data/ability/type/AbilityCutter.java | 45 +--- .../data/ability/type/AbilityHeavyHit.java | 46 +--- .../data/ability/type/AbilityShockwave.java | 20 +- .../data/ability/type/AbilityTeleport.java | 17 +- .../data/ability/type/AbilityTrap.java | 87 +------- .../data/ability/type/AbilityVortex.java | 54 ++--- .../advanced/ability/SubGuiAbilityCharge.java | 27 ++- .../advanced/ability/SubGuiAbilityCutter.java | 42 ++-- .../advanced/ability/SubGuiAbilityDisc.java | 17 ++ .../ability/SubGuiAbilityEffects.java | 197 ++++++++++++++++++ .../ability/SubGuiAbilityEnergyBeam.java | 17 ++ .../advanced/ability/SubGuiAbilityGuard.java | 26 +++ .../advanced/ability/SubGuiAbilityHazard.java | 24 +++ .../ability/SubGuiAbilityHeavyHit.java | 50 +++-- .../ability/SubGuiAbilityLaserShot.java | 17 ++ .../advanced/ability/SubGuiAbilityOrb.java | 17 ++ .../ability/SubGuiAbilityProjectile.java | 24 +++ .../ability/SubGuiAbilityShockwave.java | 36 +++- .../advanced/ability/SubGuiAbilitySlam.java | 28 ++- .../ability/SubGuiAbilitySweeper.java | 17 ++ .../ability/SubGuiAbilityTeleport.java | 24 +++ .../advanced/ability/SubGuiAbilityTrap.java | 37 ++-- .../advanced/ability/SubGuiAbilityVortex.java | 33 +-- .../assets/customnpcs/lang/en_US.lang | 12 +- 26 files changed, 799 insertions(+), 324 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 3f2165718..d7a8b9eab 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -78,6 +78,9 @@ public abstract class Ability implements IAbility { // Custom data for external mods protected NBTTagCompound customData = new NBTTagCompound(); + // Configurable potion effects + protected List effects = new ArrayList<>(); + // ═══════════════════════════════════════════════════════════════════ // EXECUTION STATE (not saved, reset each combat) // ═══════════════════════════════════════════════════════════════════ @@ -224,6 +227,21 @@ public abstract class Ability implements IAbility { hitEntity.velocityChanged = true; } + /** + * Applies all configured effects to the given entity. + * Call this after damage is applied to the target. + * + * @param entity The entity to apply effects to + */ + protected void applyEffects(EntityLivingBase entity) { + if (entity == null || effects.isEmpty()) { + return; + } + for (AbilityEffect effect : effects) { + effect.apply(entity); + } + } + public float getTelegraphRadius() { return 5.0f; } @@ -662,6 +680,13 @@ public abstract class Ability implements IAbility { for (Condition c : conditions) condList.appendTag(c.writeNBT()); nbt.setTag("conditions", condList); + // Effects + NBTTagList effectList = new NBTTagList(); + for (AbilityEffect effect : effects) { + effectList.appendTag(effect.writeNBT()); + } + nbt.setTag("effects", effectList); + // Type-specific NBTTagCompound typeNBT = new NBTTagCompound(); writeTypeNBT(typeNBT); @@ -735,6 +760,18 @@ public abstract class Ability implements IAbility { if (c != null) conditions.add(c); } + // Effects + effects.clear(); + if (nbt.hasKey("effects")) { + NBTTagList effectList = nbt.getTagList("effects", 10); + for (int i = 0; i < effectList.tagCount(); i++) { + AbilityEffect effect = AbilityEffect.fromNBT(effectList.getCompoundTagAt(i)); + if (effect != null && effect.isValid()) { + effects.add(effect); + } + } + } + readTypeNBT(nbt.getCompoundTag("typeData")); } @@ -807,7 +844,7 @@ public abstract class Ability implements IAbility { } public void setCooldownTicks(int cooldownTicks) { - this.cooldownTicks = cooldownTicks; + this.cooldownTicks = Math.max(0, cooldownTicks); } public int getWindUpTicks() { @@ -815,7 +852,7 @@ public abstract class Ability implements IAbility { } public void setWindUpTicks(int windUpTicks) { - this.windUpTicks = windUpTicks; + this.windUpTicks = Math.max(0, windUpTicks); } public int getActiveTicks() { @@ -823,7 +860,7 @@ public abstract class Ability implements IAbility { } public void setActiveTicks(int activeTicks) { - this.activeTicks = activeTicks; + this.activeTicks = Math.max(1, activeTicks); } public int getRecoveryTicks() { @@ -831,7 +868,7 @@ public abstract class Ability implements IAbility { } public void setRecoveryTicks(int recoveryTicks) { - this.recoveryTicks = recoveryTicks; + this.recoveryTicks = Math.max(0, recoveryTicks); } public boolean isInterruptible() { @@ -963,6 +1000,24 @@ public abstract class Ability implements IAbility { conditions.add(c); } + public List getEffects() { + return effects; + } + + public void setEffects(List effects) { + this.effects = effects != null ? effects : new ArrayList<>(); + } + + public void addEffect(AbilityEffect effect) { + if (effect != null && effect.isValid()) { + effects.add(effect); + } + } + + public void clearEffects() { + effects.clear(); + } + // ═══════════════════════════════════════════════════════════════════ // IAbility API METHODS // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java new file mode 100644 index 000000000..47e03f10d --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java @@ -0,0 +1,146 @@ +package kamkeel.npcs.controllers.data.ability; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; + +/** + * Represents a configurable potion effect that can be applied by abilities. + * Provides a unified system for managing debuffs like slowness, weakness, poison, etc. + */ +public class AbilityEffect { + + public enum EffectType { + NONE("gui.none", -1), + SLOWNESS("potion.moveSlowdown", Potion.moveSlowdown.id), + WEAKNESS("potion.weakness", Potion.weakness.id), + POISON("potion.poison", Potion.poison.id), + WITHER("potion.wither", Potion.wither.id), + BLINDNESS("potion.blindness", Potion.blindness.id), + NAUSEA("potion.confusion", Potion.confusion.id), + HUNGER("potion.hunger", Potion.hunger.id), + MINING_FATIGUE("potion.digSlowDown", Potion.digSlowdown.id); + + private final String langKey; + private final int potionId; + + EffectType(String langKey, int potionId) { + this.langKey = langKey; + this.potionId = potionId; + } + + public String getLangKey() { + return langKey; + } + + public int getPotionId() { + return potionId; + } + + public static EffectType fromOrdinal(int ordinal) { + EffectType[] values = values(); + if (ordinal >= 0 && ordinal < values.length) { + return values[ordinal]; + } + return NONE; + } + } + + private EffectType type = EffectType.NONE; + private int durationTicks = 60; + private int amplifier = 0; // 0-10 + + public AbilityEffect() { + } + + public AbilityEffect(EffectType type, int durationTicks, int amplifier) { + this.type = type; + this.durationTicks = Math.max(1, durationTicks); + this.amplifier = Math.max(0, Math.min(10, amplifier)); + } + + /** + * Creates a copy of this effect. + */ + public AbilityEffect copy() { + return new AbilityEffect(type, durationTicks, amplifier); + } + + /** + * Applies this effect to the given entity. + * Does nothing if type is NONE. + */ + public void apply(EntityLivingBase entity) { + if (entity == null || type == EffectType.NONE) { + return; + } + + int potionId = type.getPotionId(); + if (potionId >= 0) { + entity.addPotionEffect(new PotionEffect(potionId, durationTicks, amplifier)); + } + } + + /** + * Writes this effect to NBT. + */ + public NBTTagCompound writeNBT() { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("type", type.ordinal()); + nbt.setInteger("duration", durationTicks); + nbt.setInteger("amplifier", amplifier); + return nbt; + } + + /** + * Reads this effect from NBT. + */ + public void readNBT(NBTTagCompound nbt) { + this.type = EffectType.fromOrdinal(nbt.getInteger("type")); + this.durationTicks = nbt.hasKey("duration") ? nbt.getInteger("duration") : 60; + this.amplifier = nbt.hasKey("amplifier") ? nbt.getInteger("amplifier") : 0; + } + + /** + * Creates an AbilityEffect from NBT. + */ + public static AbilityEffect fromNBT(NBTTagCompound nbt) { + AbilityEffect effect = new AbilityEffect(); + effect.readNBT(nbt); + return effect; + } + + // Getters & Setters + + public EffectType getType() { + return type; + } + + public void setType(EffectType type) { + this.type = type != null ? type : EffectType.NONE; + } + + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + + public int getAmplifier() { + return amplifier; + } + + public void setAmplifier(int amplifier) { + this.amplifier = Math.max(0, Math.min(10, amplifier)); + } + + /** + * Returns true if this effect is configured (not NONE). + */ + public boolean isValid() { + return type != EffectType.NONE; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 611d0a4a6..8274b4d79 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -7,8 +7,6 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -41,9 +39,6 @@ public class AbilityCutter extends Ability { private SweepMode sweepMode = SweepMode.SWIPE; private float sweepSpeed = 6.0f; - private int stunDuration = 0; - private int poisonDurationSeconds = 0; - private int poisonLevel = 0; private boolean piercing = true; private float innerRadius = 0.0f; @@ -161,15 +156,9 @@ public class AbilityCutter extends Ability { // Apply damage with scripted event support boolean wasHit = applyAbilityDamage(npc, entity, actualDamage, knockback); - // Only apply effects if hit wasn't cancelled + // Apply effects if hit wasn't cancelled if (wasHit) { - if (stunDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - entity.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); - } - if (poisonDurationSeconds > 0) { - entity.addPotionEffect(new PotionEffect(Potion.poison.id, poisonDurationSeconds * 20, poisonLevel)); - } + applyEffects(entity); } } } @@ -206,9 +195,6 @@ public class AbilityCutter extends Ability { nbt.setFloat("knockback", knockback); nbt.setString("sweepMode", sweepMode.name()); nbt.setFloat("sweepSpeed", sweepSpeed); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("poisonDurationSeconds", poisonDurationSeconds); - nbt.setInteger("poisonLevel", poisonLevel); nbt.setBoolean("piercing", piercing); nbt.setFloat("innerRadius", innerRadius); } @@ -225,9 +211,6 @@ public class AbilityCutter extends Ability { this.sweepMode = SweepMode.SWIPE; } this.sweepSpeed = nbt.hasKey("sweepSpeed") ? nbt.getFloat("sweepSpeed") : 6.0f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.poisonDurationSeconds = nbt.hasKey("poisonDurationSeconds") ? nbt.getInteger("poisonDurationSeconds") : 0; - this.poisonLevel = nbt.hasKey("poisonLevel") ? nbt.getInteger("poisonLevel") : 0; this.piercing = !nbt.hasKey("piercing") || nbt.getBoolean("piercing"); this.innerRadius = nbt.hasKey("innerRadius") ? nbt.getFloat("innerRadius") : 0.0f; } @@ -281,30 +264,6 @@ public class AbilityCutter extends Ability { this.sweepSpeed = sweepSpeed; } - public int getStunDuration() { - return stunDuration; - } - - public void setStunDuration(int stunDuration) { - this.stunDuration = stunDuration; - } - - public int getPoisonDurationSeconds() { - return poisonDurationSeconds; - } - - public void setPoisonDurationSeconds(int poisonDurationSeconds) { - this.poisonDurationSeconds = poisonDurationSeconds; - } - - public int getPoisonLevel() { - return poisonLevel; - } - - public void setPoisonLevel(int poisonLevel) { - this.poisonLevel = poisonLevel; - } - public boolean isPiercing() { return piercing; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index abdcc6f86..fc68200b7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -7,8 +7,6 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHeavyHit; @@ -23,9 +21,6 @@ public class AbilityHeavyHit extends Ability { private float damage = 8.0f; private float knockback = 2.0f; - private int slownessLevel = 1; - private int weaknessLevel = 0; - private int potionDurationSeconds = 2; public AbilityHeavyHit() { this.typeId = "ability.cnpc.heavy_hit"; @@ -73,14 +68,9 @@ public class AbilityHeavyHit extends Ability { // Apply damage with scripted event support boolean wasHit = applyAbilityDamage(npc, target, damage, knockback); - if (wasHit && potionDurationSeconds > 0) { - int durationTicks = potionDurationSeconds * 20; - if (slownessLevel >= 0) { - target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, durationTicks, slownessLevel)); - } - if (weaknessLevel >= 0) { - target.addPotionEffect(new PotionEffect(Potion.weakness.id, durationTicks, weaknessLevel)); - } + // Apply effects if hit wasn't cancelled + if (wasHit) { + applyEffects(target); } } @@ -93,18 +83,12 @@ public class AbilityHeavyHit extends Ability { public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("damage", damage); nbt.setFloat("knockback", knockback); - nbt.setInteger("slownessLevel", slownessLevel); - nbt.setInteger("weaknessLevel", weaknessLevel); - nbt.setInteger("potionDurationSeconds", potionDurationSeconds); } @Override public void readTypeNBT(NBTTagCompound nbt) { this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 8.0f; this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 2.0f; - this.slownessLevel = nbt.hasKey("slownessLevel") ? nbt.getInteger("slownessLevel") : 1; - this.weaknessLevel = nbt.hasKey("weaknessLevel") ? nbt.getInteger("weaknessLevel") : 0; - this.potionDurationSeconds = nbt.hasKey("potionDurationSeconds") ? nbt.getInteger("potionDurationSeconds") : 2; } // Getters & Setters @@ -123,28 +107,4 @@ public class AbilityHeavyHit extends Ability { public void setKnockback(float knockback) { this.knockback = knockback; } - - public int getSlownessLevel() { - return slownessLevel; - } - - public void setSlownessLevel(int slownessLevel) { - this.slownessLevel = slownessLevel; - } - - public int getWeaknessLevel() { - return weaknessLevel; - } - - public void setWeaknessLevel(int weaknessLevel) { - this.weaknessLevel = weaknessLevel; - } - - public int getPotionDurationSeconds() { - return potionDurationSeconds; - } - - public void setPotionDurationSeconds(int potionDurationSeconds) { - this.potionDurationSeconds = potionDurationSeconds; - } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index 1708b49bd..b5a35831f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -7,8 +7,6 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -28,7 +26,6 @@ public class AbilityShockwave extends Ability { private float pushRadius = 8.0f; private float pushStrength = 1.5f; private float damage = 8.0f; - private int stunDuration = 0; private int maxTargets = 10; // Runtime state @@ -122,10 +119,9 @@ public class AbilityShockwave extends Ability { // Apply damage with custom knockback direction boolean wasHit = applyAbilityDamageWithDirection(npc, entity, damage * distFactor, finalPush, dx, dz); - // Apply stun if hit connected - if (wasHit && stunDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - entity.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); + // Apply effects if hit connected + if (wasHit) { + applyEffects(entity); } } } @@ -145,7 +141,6 @@ public class AbilityShockwave extends Ability { nbt.setFloat("pushRadius", pushRadius); nbt.setFloat("pushStrength", pushStrength); nbt.setFloat("damage", damage); - nbt.setInteger("stunDuration", stunDuration); nbt.setInteger("maxTargets", maxTargets); } @@ -154,7 +149,6 @@ public class AbilityShockwave extends Ability { this.pushRadius = nbt.hasKey("pushRadius") ? nbt.getFloat("pushRadius") : 8.0f; this.pushStrength = nbt.hasKey("pushStrength") ? nbt.getFloat("pushStrength") : 1.5f; this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 8.0f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; this.maxTargets = nbt.hasKey("maxTargets") ? nbt.getInteger("maxTargets") : 10; } @@ -183,14 +177,6 @@ public class AbilityShockwave extends Ability { this.damage = damage; } - public int getStunDuration() { - return stunDuration; - } - - public void setStunDuration(int stunDuration) { - this.stunDuration = stunDuration; - } - public int getMaxTargets() { return maxTargets; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index ad5989f25..a79223d5d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -261,8 +261,13 @@ public class AbilityTeleport extends Ability { int blockY = MathHelper.floor_double(checkY); int blockZ = MathHelper.floor_double(checkZ); + // Skip out-of-world coordinates + if (blockY < 0 || blockY >= 256) { + continue; + } + Block block = world.getBlock(blockX, blockY, blockZ); - if (block.getMaterial().isSolid() && block.isOpaqueCube()) { + if (block != null && block.getMaterial().isSolid() && block.isOpaqueCube()) { return false; } } @@ -327,10 +332,20 @@ public class AbilityTeleport extends Ability { } private boolean isSafeLocation(World world, int x, int y, int z) { + // Bounds check - ensure we're within valid world coordinates + if (y < 1 || y >= 255) { + return false; + } + Block groundBlock = world.getBlock(x, y - 1, z); Block feetBlock = world.getBlock(x, y, z); Block headBlock = world.getBlock(x, y + 1, z); + // Defensive null checks (shouldn't happen in MC 1.7.10, but safe) + if (groundBlock == null || feetBlock == null || headBlock == null) { + return false; + } + return groundBlock.getMaterial().isSolid() && !feetBlock.getMaterial().isSolid() && !headBlock.getMaterial().isSolid(); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index fa2fefb4c..77ac4a5fe 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -8,8 +8,6 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -45,12 +43,6 @@ public class AbilityTrap extends Ability { private float damage = 6.0f; private float damageRadius = 0.0f; private float knockback = 0.5f; - private int stunDuration = 0; - private int rootDuration = 40; - private int slowDuration = 0; - private int slowLevel = 1; - private int poisonDuration = 0; - private int poisonLevel = 0; private boolean visible = true; // Offset parameters - trap spawns near target, not exactly on them @@ -262,24 +254,9 @@ public class AbilityTrap extends Ability { // Apply damage with scripted event support boolean wasHit = applyAbilityDamage(npc, entity, damage, knockback); - // Only apply effects if the hit wasn't cancelled + // Apply effects if the hit wasn't cancelled if (wasHit) { - if (stunDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - entity.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); - } - - if (rootDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, rootDuration, 127)); - } - - if (slowDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, slowDuration, slowLevel)); - } - - if (poisonDuration > 0 && poisonLevel >= 0) { - entity.addPotionEffect(new PotionEffect(Potion.poison.id, poisonDuration, poisonLevel)); - } + applyEffects(entity); } } } @@ -309,12 +286,6 @@ public class AbilityTrap extends Ability { nbt.setFloat("damage", damage); nbt.setFloat("damageRadius", damageRadius); nbt.setFloat("knockback", knockback); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("rootDuration", rootDuration); - nbt.setInteger("slowDuration", slowDuration); - nbt.setInteger("slowLevel", slowLevel); - nbt.setInteger("poisonDuration", poisonDuration); - nbt.setInteger("poisonLevel", poisonLevel); nbt.setBoolean("visible", visible); nbt.setFloat("minOffset", minOffset); nbt.setFloat("maxOffset", maxOffset); @@ -336,12 +307,6 @@ public class AbilityTrap extends Ability { this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 6.0f; this.damageRadius = nbt.hasKey("damageRadius") ? nbt.getFloat("damageRadius") : 0.0f; this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 0.5f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.rootDuration = nbt.hasKey("rootDuration") ? nbt.getInteger("rootDuration") : 40; - this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; - this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 1; - this.poisonDuration = nbt.hasKey("poisonDuration") ? nbt.getInteger("poisonDuration") : 0; - this.poisonLevel = nbt.hasKey("poisonLevel") ? nbt.getInteger("poisonLevel") : 0; this.visible = !nbt.hasKey("visible") || nbt.getBoolean("visible"); this.minOffset = nbt.hasKey("minOffset") ? nbt.getFloat("minOffset") : 0.0f; this.maxOffset = nbt.hasKey("maxOffset") ? nbt.getFloat("maxOffset") : 1.5f; @@ -421,54 +386,6 @@ public class AbilityTrap extends Ability { this.knockback = knockback; } - public int getStunDuration() { - return stunDuration; - } - - public void setStunDuration(int stunDuration) { - this.stunDuration = stunDuration; - } - - public int getRootDuration() { - return rootDuration; - } - - public void setRootDuration(int rootDuration) { - this.rootDuration = rootDuration; - } - - public int getSlowDuration() { - return slowDuration; - } - - public void setSlowDuration(int slowDuration) { - this.slowDuration = slowDuration; - } - - public int getSlowLevel() { - return slowLevel; - } - - public void setSlowLevel(int slowLevel) { - this.slowLevel = slowLevel; - } - - public int getPoisonDuration() { - return poisonDuration; - } - - public void setPoisonDuration(int poisonDuration) { - this.poisonDuration = poisonDuration; - } - - public int getPoisonLevel() { - return poisonLevel; - } - - public void setPoisonLevel(int poisonLevel) { - this.poisonLevel = poisonLevel; - } - public boolean isVisible() { return visible; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index f0e08dd56..666b19bbc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -7,8 +7,6 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -32,8 +30,6 @@ public class AbilityVortex extends Ability { private float pullStrength = 0.8f; private float damage = 0.0f; private float knockback = 0.0f; - private int stunDuration = 0; - private int rootDuration = 0; private boolean aoe = false; private int maxTargets = 5; private boolean damageOnPull = false; @@ -134,7 +130,7 @@ public class AbilityVortex extends Ability { ticksSincePullDamage++; for (UUID uuid : new HashSet<>(pulledEntities)) { - EntityLivingBase entity = findEntity(world, uuid); + EntityLivingBase entity = findEntity(npc, world, uuid); if (entity == null || entity.isDead) { pulledEntities.remove(uuid); continue; @@ -187,25 +183,23 @@ public class AbilityVortex extends Ability { // Only apply effects if hit wasn't cancelled if (wasHit) { - if (stunDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - entity.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); - } - - if (rootDuration > 0) { - entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, rootDuration, 127)); - } + applyEffects(entity); } } + /** + * Find an entity by UUID within the vortex pull area. + * Uses AABB search instead of iterating all loaded entities. + */ @SuppressWarnings("unchecked") - private EntityLivingBase findEntity(World world, UUID uuid) { - for (Object obj : world.loadedEntityList) { - if (obj instanceof EntityLivingBase) { - EntityLivingBase entity = (EntityLivingBase) obj; - if (entity.getUniqueID().equals(uuid)) { - return entity; - } + private EntityLivingBase findEntity(EntityNPCInterface npc, World world, UUID uuid) { + // Search within pull radius (entities being pulled should be within this area) + AxisAlignedBB searchBox = npc.boundingBox.expand(pullRadius, pullRadius / 2, pullRadius); + List nearbyEntities = world.getEntitiesWithinAABB(EntityLivingBase.class, searchBox); + + for (EntityLivingBase entity : nearbyEntities) { + if (entity.getUniqueID().equals(uuid)) { + return entity; } } return null; @@ -231,8 +225,6 @@ public class AbilityVortex extends Ability { nbt.setFloat("pullStrength", pullStrength); nbt.setFloat("damage", damage); nbt.setFloat("knockback", knockback); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("rootDuration", rootDuration); nbt.setBoolean("aoe", aoe); nbt.setInteger("maxTargets", maxTargets); nbt.setBoolean("damageOnPull", damageOnPull); @@ -245,8 +237,6 @@ public class AbilityVortex extends Ability { this.pullStrength = nbt.hasKey("pullStrength") ? nbt.getFloat("pullStrength") : 0.8f; this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 0.0f; this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 0.0f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.rootDuration = nbt.hasKey("rootDuration") ? nbt.getInteger("rootDuration") : 0; this.aoe = nbt.hasKey("aoe") && nbt.getBoolean("aoe"); this.maxTargets = nbt.hasKey("maxTargets") ? nbt.getInteger("maxTargets") : 5; this.damageOnPull = nbt.hasKey("damageOnPull") && nbt.getBoolean("damageOnPull"); @@ -286,22 +276,6 @@ public class AbilityVortex extends Ability { this.knockback = knockback; } - public int getStunDuration() { - return stunDuration; - } - - public void setStunDuration(int stunDuration) { - this.stunDuration = stunDuration; - } - - public int getRootDuration() { - return rootDuration; - } - - public void setRootDuration(int rootDuration) { - this.rootDuration = rootDuration; - } - public boolean isAoe() { return aoe; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java index 4d7486c5e..ea35797c4 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java @@ -1,10 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityCharge; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Charge ability type-specific settings. @@ -41,10 +46,30 @@ public class SubGuiAbilityCharge extends SubGuiAbilityConfig { y += 24; - // Row 3: Hit Width + // Row 3: Hit Width + Effects addLabel(new GuiNpcLabel(104, "ability.hitWidth", labelX, y + 5)); addTextField(createFloatField(104, fieldX, y, 50, charge.getHitWidth())); + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + if (id == 150) { + setSubGui(new SubGuiAbilityEffects(charge.getEffects())); + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + charge.setEffects(result); + } + } } @Override diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java index 514391f8a..10f5ab8c1 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityCutter; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Cutter ability type-specific settings. @@ -64,18 +68,8 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { y += 24; - // Row 5: Stun Duration + Poison Time - addLabel(new GuiNpcLabel(108, "ability.stunDuration", labelX, y + 5)); - addTextField(createIntField(108, fieldX, y, 50, cutter.getStunDuration())); - - addLabel(new GuiNpcLabel(109, "ability.poisonTime", col2LabelX, y + 5)); - addTextField(createIntField(109, col2FieldX, y, 50, cutter.getPoisonDurationSeconds())); - - y += 24; - - // Row 6: Poison Level - addLabel(new GuiNpcLabel(110, "ability.poisonLvl", labelX, y + 5)); - addTextField(createIntField(110, fieldX, y, 50, cutter.getPoisonLevel())); + // Row 5: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -88,6 +82,21 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { case 107: cutter.setPiercing(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(cutter.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + cutter.setEffects(result); + } } } @@ -112,15 +121,6 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { case 105: cutter.setSweepSpeed(parseFloat(field, cutter.getSweepSpeed())); break; - case 108: - cutter.setStunDuration(field.getInteger()); - break; - case 109: - cutter.setPoisonDurationSeconds(field.getInteger()); - break; - case 110: - cutter.setPoisonLevel(field.getInteger()); - break; } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 373752fa6..2a3439af1 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -9,6 +10,8 @@ import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; +import java.util.List; + /** * GUI for configuring Disc ability type-specific settings. */ @@ -86,6 +89,11 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(111, "ability.maxDist", col2LabelX, y + 5)); addTextField(createFloatField(111, col2FieldX, y, 50, disc.getMaxDistance())); + + y += 24; + + // Row 7: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -163,6 +171,9 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { case 108: disc.setExplosive(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(disc.getEffects())); + break; } } @@ -201,6 +212,12 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { } editingVisualColorId = 0; initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + disc.setEffects(result); + } } else { super.subGuiClosed(subgui); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java new file mode 100644 index 000000000..103d87224 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java @@ -0,0 +1,197 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import net.minecraft.client.gui.GuiButton; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.ITextfieldListener; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.ArrayList; +import java.util.List; + +/** + * SubGui for editing ability effects (potion effects that apply to targets). + * Allows adding/removing effects and configuring type, duration, and amplifier. + */ +public class SubGuiAbilityEffects extends SubGuiInterface implements ITextfieldListener { + + private static final int MAX_EFFECTS = 5; + + // Effect type names for display + private static final String[] EFFECT_TYPE_NAMES = { + "gui.none", + "potion.moveSlowdown", + "potion.weakness", + "potion.poison", + "potion.wither", + "potion.blindness", + "potion.confusion", + "potion.hunger", + "potion.digSlowDown" + }; + + // Working copy of effects + private List effects; + private boolean cancelled = false; + + public SubGuiAbilityEffects(List existingEffects) { + // Create working copies of effects + this.effects = new ArrayList<>(); + if (existingEffects != null) { + for (AbilityEffect effect : existingEffects) { + this.effects.add(effect.copy()); + } + } + + setBackground("menubg.png"); + xSize = 280; + ySize = 180; + } + + @Override + public void initGui() { + super.initGui(); + + int y = guiTop + 8; + int labelX = guiLeft + 8; + + // Title + addLabel(new GuiNpcLabel(0, "ability.effects", labelX, y)); + y += 16; + + // Column headers + addLabel(new GuiNpcLabel(1, "gui.type", guiLeft + 10, y)); + addLabel(new GuiNpcLabel(2, "gui.duration", guiLeft + 115, y)); + addLabel(new GuiNpcLabel(3, "gui.amp", guiLeft + 175, y)); + y += 14; + + // Effect rows + for (int i = 0; i < effects.size() && i < MAX_EFFECTS; i++) { + AbilityEffect effect = effects.get(i); + int baseId = 1 + i * 10; + + // Type selector button + int typeIndex = effect.getType().ordinal(); + addButton(new GuiNpcButton(baseId, guiLeft + 8, y, 100, 20, EFFECT_TYPE_NAMES, typeIndex)); + + // Duration text field + GuiNpcTextField durField = new GuiNpcTextField(baseId + 1, this, fontRendererObj, + guiLeft + 112, y, 50, 20, String.valueOf(effect.getDurationTicks())); + durField.setIntegersOnly(); + durField.setMinMaxDefault(1, 12000, 60); + addTextField(durField); + + // Amplifier selector (0-10) + String[] ampValues = new String[11]; + for (int a = 0; a <= 10; a++) { + ampValues[a] = String.valueOf(a); + } + addButton(new GuiNpcButton(baseId + 2, guiLeft + 168, y, 40, 20, ampValues, effect.getAmplifier())); + + // Delete button + addButton(new GuiNpcButton(baseId + 3, guiLeft + 215, y, 20, 20, "X")); + + y += 24; + } + + // Add button (if space available) + if (effects.size() < MAX_EFFECTS) { + addButton(new GuiNpcButton(100, guiLeft + 8, y, 50, 20, "gui.add")); + } + + // Bottom buttons + addButton(new GuiNpcButton(65, guiLeft + 8, guiTop + ySize - 28, 60, 20, "gui.cancel")); + addButton(new GuiNpcButton(66, guiLeft + xSize - 68, guiTop + ySize - 28, 60, 20, "gui.done")); + } + + @Override + public void buttonEvent(GuiButton guibutton) { + int id = guibutton.id; + + // Add button + if (id == 100) { + if (effects.size() < MAX_EFFECTS) { + // Add new effect with default values (Slowness, 60 ticks, amp 0) + effects.add(new AbilityEffect(AbilityEffect.EffectType.SLOWNESS, 60, 0)); + initGui(); + } + return; + } + + // Cancel button + if (id == 65) { + cancelled = true; + close(); + return; + } + + // Done button + if (id == 66) { + // Remove any NONE effects before saving + effects.removeIf(e -> !e.isValid()); + cancelled = false; + close(); + return; + } + + // Effect row buttons (id >= 1 and < 100) + if (id >= 1 && id < 100) { + int effectIndex = (id - 1) / 10; + int action = (id - 1) % 10; + + if (effectIndex >= 0 && effectIndex < effects.size()) { + AbilityEffect effect = effects.get(effectIndex); + + switch (action) { + case 0: // Type selector + int typeIndex = ((GuiNpcButton) guibutton).getValue(); + effect.setType(AbilityEffect.EffectType.fromOrdinal(typeIndex)); + break; + case 2: // Amplifier selector + int amp = ((GuiNpcButton) guibutton).getValue(); + effect.setAmplifier(amp); + break; + case 3: // Delete button + effects.remove(effectIndex); + initGui(); + break; + } + } + } + } + + @Override + public void unFocused(GuiNpcTextField textField) { + int id = textField.id; + + // Duration text fields (baseId + 1) + if (id >= 2 && id < 100) { + int effectIndex = (id - 1) / 10; + int action = (id - 1) % 10; + + if (action == 1 && effectIndex >= 0 && effectIndex < effects.size()) { + effects.get(effectIndex).setDurationTicks(textField.getInteger()); + } + } + } + + /** + * Returns the resulting effects list after the dialog closes. + * Returns null if cancelled. + */ + public List getResult() { + if (cancelled) { + return null; + } + return effects; + } + + /** + * Returns true if the dialog was cancelled. + */ + public boolean wasCancelled() { + return cancelled; + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index ad15bb576..1c7179deb 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -9,6 +10,8 @@ import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; +import java.util.List; + /** * GUI for configuring Energy Beam ability type-specific settings. * Energy Beam is a homing head with trailing path (DBZ-style). @@ -87,6 +90,11 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(111, "ability.lifetime", col2LabelX, y + 5)); addTextField(createIntField(111, col2FieldX, y, 50, beam.getMaxLifetime())); + + y += 24; + + // Row 7: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -161,6 +169,9 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { case 108: beam.setExplosive(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(beam.getEffects())); + break; } } @@ -199,6 +210,12 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { } editingVisualColorId = 0; initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + beam.setEffects(result); + } } else { super.subGuiClosed(subgui); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java index c5240d862..25383c926 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Guard ability type-specific settings. @@ -68,6 +72,13 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { GuiNpcTextField counterAnimField = createIntField(106, col2FieldX, y, 50, guard.getCounterAnimationId()); counterAnimField.setEnabled(guard.isCanCounter()); addTextField(counterAnimField); + + y += 24; + + // Row 5: Effects button (applies on counter) + GuiNpcButton effectsBtn = new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects"); + effectsBtn.setEnabled(guard.isCanCounter()); + addButton(effectsBtn); } @Override @@ -80,6 +91,21 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { case 102: guard.setCounterType(AbilityGuard.CounterType.values()[button.getValue()]); break; + case 150: + setSubGui(new SubGuiAbilityEffects(guard.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + guard.setEffects(result); + } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java index 1ec615d7a..8a91798d0 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityHazard; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Hazard ability type-specific settings. @@ -71,6 +75,11 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(109, "ability.affectsCaster", col2LabelX, y + 5)); addButton(new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, hazard.isAffectsCaster() ? 1 : 0)); + + y += 24; + + // Row 6: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -86,6 +95,21 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { case 109: hazard.setAffectsCaster(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(hazard.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + hazard.setEffects(result); + } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java index ea21127dc..897a4af1f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java @@ -1,10 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityHeavyHit; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Heavy Hit ability type-specific settings. @@ -24,29 +29,37 @@ public class SubGuiAbilityHeavyHit extends SubGuiAbilityConfig { int labelX = guiLeft + 8; int fieldX = guiLeft + 85; int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - // Row 1: Damage + Potion Time + // Row 1: Damage + Knockback addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); addTextField(createFloatField(100, fieldX, y, 50, heavyHit.getDamage())); - addLabel(new GuiNpcLabel(101, "ability.potionTime", col2LabelX, y + 5)); - addTextField(createIntField(101, col2FieldX, y, 50, heavyHit.getPotionDurationSeconds())); + addLabel(new GuiNpcLabel(102, "ability.knockback", col2LabelX, y + 5)); + addTextField(createFloatField(102, guiLeft + 205, y, 50, heavyHit.getKnockback())); y += 24; - // Row 2: Knockback + Slowness Level - addLabel(new GuiNpcLabel(102, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, heavyHit.getKnockback())); + // Row 2: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); + } - addLabel(new GuiNpcLabel(103, "ability.slownessLvl", col2LabelX, y + 5)); - addTextField(createIntField(103, col2FieldX, y, 50, heavyHit.getSlownessLevel())); + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + if (id == 150) { + setSubGui(new SubGuiAbilityEffects(heavyHit.getEffects())); + } + } - y += 24; - - // Row 3: Weakness Level - addLabel(new GuiNpcLabel(104, "ability.weaknessLvl", labelX, y + 5)); - addTextField(createIntField(104, fieldX, y, 50, heavyHit.getWeaknessLevel())); + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + heavyHit.setEffects(result); + } + } } @Override @@ -55,18 +68,9 @@ public class SubGuiAbilityHeavyHit extends SubGuiAbilityConfig { case 100: heavyHit.setDamage(parseFloat(field, heavyHit.getDamage())); break; - case 101: - heavyHit.setPotionDurationSeconds(field.getInteger()); - break; case 102: heavyHit.setKnockback(parseFloat(field, heavyHit.getKnockback())); break; - case 103: - heavyHit.setSlownessLevel(field.getInteger()); - break; - case 104: - heavyHit.setWeaknessLevel(field.getInteger()); - break; } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index f83e93baf..614a8bce0 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -9,6 +10,8 @@ import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; +import java.util.List; + /** * GUI for configuring Laser Shot ability type-specific settings. */ @@ -77,6 +80,11 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(109, "ability.knockbackUp", col2LabelX, y + 5)); addTextField(createFloatField(109, col2FieldX, y, 50, laser.getKnockbackUp())); + + y += 24; + + // Row 6: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -142,6 +150,9 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { case 106: laser.setExplosive(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(laser.getEffects())); + break; } } @@ -180,6 +191,12 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { } editingVisualColorId = 0; initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + laser.setEffects(result); + } } else { super.subGuiClosed(subgui); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 42dd6a773..6c5c598ba 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -9,6 +10,8 @@ import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; +import java.util.List; + /** * GUI for configuring Orb ability type-specific settings. */ @@ -77,6 +80,11 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(109, "ability.lifetime", col2LabelX, y + 5)); addTextField(createIntField(109, col2FieldX, y, 50, orb.getMaxLifetime())); + + y += 24; + + // Row 6: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -151,6 +159,9 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { case 106: orb.setExplosive(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(orb.getEffects())); + break; } } @@ -189,6 +200,12 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { } editingVisualColorId = 0; initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + orb.setEffects(result); + } } else { super.subGuiClosed(subgui); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java index c9be00e38..52bf7a092 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityProjectile; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Projectile ability type-specific settings. @@ -69,6 +73,11 @@ public class SubGuiAbilityProjectile extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(107, "ability.homingStr", col2LabelX, y + 5)); addTextField(createFloatField(107, col2FieldX, y, 50, projectile.getHomingStrength())); + + y += 24; + + // Row 5: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -85,6 +94,21 @@ public class SubGuiAbilityProjectile extends SubGuiAbilityConfig { case 106: projectile.setHoming(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(projectile.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + projectile.setEffects(result); + } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java index a03a85736..48c2c5295 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java @@ -1,10 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityShockwave; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Shockwave ability type-specific settings. @@ -41,17 +46,35 @@ public class SubGuiAbilityShockwave extends SubGuiAbilityConfig { y += 24; - // Row 3: Stun Duration + Max Targets - addLabel(new GuiNpcLabel(103, "ability.stunDuration", labelX, y + 5)); - addTextField(createIntField(103, fieldX, y, 50, shockwave.getStunDuration())); + // Row 3: Max Targets + Effects button + addLabel(new GuiNpcLabel(104, "ability.maxTargets", labelX, y + 5)); + addTextField(createIntField(104, fieldX, y, 50, shockwave.getMaxTargets())); - addLabel(new GuiNpcLabel(104, "ability.maxTargets", col2LabelX, y + 5)); - addTextField(createIntField(104, col2FieldX, y, 50, shockwave.getMaxTargets())); + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); y += 24; addLabel(new GuiNpcLabel(105, "ability.shockwaveFalloff", labelX, y + 5)); } + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + if (id == 150) { + setSubGui(new SubGuiAbilityEffects(shockwave.getEffects())); + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + shockwave.setEffects(result); + } + } + } + @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { @@ -64,9 +87,6 @@ public class SubGuiAbilityShockwave extends SubGuiAbilityConfig { case 102: shockwave.setPushStrength(parseFloat(field, shockwave.getPushStrength())); break; - case 103: - shockwave.setStunDuration(field.getInteger()); - break; case 104: shockwave.setMaxTargets(field.getInteger()); break; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java index 989202037..4e020829b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java @@ -1,10 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilitySlam; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Slam ability type-specific settings. @@ -44,9 +49,30 @@ public class SubGuiAbilitySlam extends SubGuiAbilityConfig { y += 24; - // Row 3: Leap Height + // Row 3: Leap Height + Effects addLabel(new GuiNpcLabel(104, "ability.leapHeight", labelX, y + 5)); addTextField(createFloatField(104, fieldX, y, 50, slam.getLeapHeight())); + + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + if (id == 150) { + setSubGui(new SubGuiAbilityEffects(slam.getEffects())); + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + slam.setEffects(result); + } + } } @Override diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java index 95f54619b..9a3dc2fe8 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilitySweeper; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -9,6 +10,8 @@ import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; +import java.util.List; + /** * GUI for configuring Sweeper ability type-specific settings. * Sweeper is a low rotating beam that players can jump over. @@ -75,6 +78,11 @@ public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { // Row 5: Lock On Target addLabel(new GuiNpcLabel(108, "ability.lockTarget", labelX, y + 5)); addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isLockOnTarget() ? 1 : 0)); + + y += 24; + + // Row 6: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -121,6 +129,9 @@ public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { case 108: sweeper.setLockOnTarget(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(sweeper.getEffects())); + break; } } @@ -155,6 +166,12 @@ public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { } editingVisualColorId = 0; initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + sweeper.setEffects(result); + } } else { super.subGuiClosed(subgui); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java index 6173f9ded..1dfb12d22 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityTeleport; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Teleport ability type-specific settings. @@ -85,6 +89,11 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(109, "ability.dmgAtEnd", col2LabelX, y + 5)); addButton(new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtEnd() ? 1 : 0)); + + y += 24; + + // Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); } @Override @@ -104,6 +113,21 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { case 109: teleport.setDamageAtEnd(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(teleport.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + teleport.setEffects(result); + } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java index 781d0665a..2c0fc3a68 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityTrap; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Trap ability type-specific settings. @@ -55,24 +59,31 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { y += 24; - // Row 4: Root Duration + Stun Duration - addLabel(new GuiNpcLabel(106, "ability.rootDuration", labelX, y + 5)); - addTextField(createIntField(106, fieldX, y, 50, trap.getRootDuration())); - - addLabel(new GuiNpcLabel(107, "ability.stunDuration", col2LabelX, y + 5)); - addTextField(createIntField(107, col2FieldX, y, 50, trap.getStunDuration())); - - y += 24; - - // Row 5: Knockback + // Row 4: Knockback + Effects button addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); addTextField(createFloatField(108, fieldX, y, 50, trap.getKnockback())); + + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); } @Override protected void handleTypeButton(int id, GuiNpcButton button) { if (id == 100) { trap.setPlacement(AbilityTrap.TrapPlacement.values()[button.getValue()]); + } else if (id == 150) { + setSubGui(new SubGuiAbilityEffects(trap.getEffects())); + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + trap.setEffects(result); + } } } @@ -94,12 +105,6 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { case 105: trap.setMaxTriggers(field.getInteger()); break; - case 106: - trap.setRootDuration(field.getInteger()); - break; - case 107: - trap.setStunDuration(field.getInteger()); - break; case 108: trap.setKnockback(parseFloat(field, trap.getKnockback())); break; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java index 003cef5c6..4cc7bc89a 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java @@ -1,11 +1,15 @@ package noppes.npcs.client.gui.advanced.ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.type.AbilityVortex; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; /** * GUI for configuring Vortex ability type-specific settings. @@ -54,12 +58,8 @@ public class SubGuiAbilityVortex extends SubGuiAbilityConfig { y += 24; - // Row 4: Stun Duration + Root Duration - addLabel(new GuiNpcLabel(106, "ability.stunDuration", labelX, y + 5)); - addTextField(createIntField(106, fieldX, y, 50, vortex.getStunDuration())); - - addLabel(new GuiNpcLabel(107, "ability.rootDuration", col2LabelX, y + 5)); - addTextField(createIntField(107, col2FieldX, y, 50, vortex.getRootDuration())); + // Row 4: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); y += 24; @@ -81,6 +81,21 @@ public class SubGuiAbilityVortex extends SubGuiAbilityConfig { case 108: vortex.setDamageOnPull(value == 1); break; + case 150: + setSubGui(new SubGuiAbilityEffects(vortex.getEffects())); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + super.subGuiClosed(subgui); + if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + vortex.setEffects(result); + } } } @@ -102,12 +117,6 @@ public class SubGuiAbilityVortex extends SubGuiAbilityConfig { case 105: vortex.setMaxTargets(field.getInteger()); break; - case 106: - vortex.setStunDuration(field.getInteger()); - break; - case 107: - vortex.setRootDuration(field.getInteger()); - break; case 109: vortex.setPullDamage(parseFloat(field, vortex.getPullDamage())); break; diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index b7e33a029..d5dc945ce 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1575,17 +1575,11 @@ ability.minDist=Min Dist ability.distance=Distance ability.lifetime=Lifetime ability.stunTicks=Stun -ability.stunDur=Stun Dur -ability.rootDur=Root Dur -ability.rootDuration=Root Duration -ability.stunDuration=Stun Duration ability.leapHeight=Leap Height ability.hitWidth=Hit Width -ability.potionTime=Potion Time (s) -ability.weaknessLvl=Weakness Lvl -ability.poisonTime=Poison Time (s) -ability.slownessLvl=Slowness Lvl -ability.poisonLvl=Poison Lvl +ability.effects=Effects +gui.duration=Duration +gui.amp=Amp # Slam Settings ability.leapSpeed=Leap Speed From c858f24e677f13e9a1ee155b6e28f98cf9b7932f Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 01:33:12 -0300 Subject: [PATCH 08/85] Implemented built in animations for abilities --- .../data/ability/AbilityAnimation.java | 79 +++++++++++++++++++ .../data/ability/AbilityController.java | 73 +++++++++++++++-- 2 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java new file mode 100644 index 000000000..1a6c907ea --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java @@ -0,0 +1,79 @@ +package kamkeel.npcs.controllers.data.ability; + +import noppes.npcs.CustomNpcs; +import noppes.npcs.LogWriter; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.InputStream; +import java.util.HashMap; + +import static kamkeel.npcs.controllers.data.ability.AbilityPhase.*; + +public enum AbilityAnimation {; + + private final HashMap animations = new HashMap<>(); + + AbilityAnimation(String idle, String windUp, String active, String recovery) { + animations.put(IDLE, idle); + animations.put(WINDUP, windUp); + animations.put(ACTIVE, active); + animations.put(RECOVERY, recovery); + } + + AbilityAnimation(String idle, String windUp, String active) { + animations.put(IDLE, idle); + animations.put(WINDUP, windUp); + animations.put(ACTIVE, active); + } + + AbilityAnimation(String windUp, String active) { + animations.put(WINDUP, windUp); + animations.put(ACTIVE, active); + } + + AbilityAnimation(String anim, AbilityPhase phase) { + animations.put(phase, anim); + } + + public String fileName(AbilityPhase phase) { + return animations.get(phase); + } + + public File get(AbilityPhase phase) { + if (animations.get(phase).isEmpty() || animations.get(phase).equals("N/A")) + return null; + + return getFile(animations.get(phase)); + } + + public File idle() { + return get(IDLE); + } + + public File windUp() { + return get(WINDUP); + } + + public File active() { + return get(ACTIVE); + } + + public File recovery() { + return get(RECOVERY); + } + + private File getFile(String fileName) { + try (InputStream stream = CustomNpcs.class.getResourceAsStream("/internal/data/animations/" + name() + "/" + fileName + ".json")) { + + File file = new File("temp"); + + FileUtils.copyInputStreamToFile(stream, file); + + return file; + } catch (Exception i) { + LogWriter.except(i); + } + return null; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 41c20a085..3eb8283f8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -22,14 +22,13 @@ import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.api.handler.IAbilityHandler; +import noppes.npcs.api.handler.data.IAnimation; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; import noppes.npcs.util.NBTJsonUtil; import java.io.File; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Supplier; /** @@ -49,6 +48,7 @@ public class AbilityController implements IAbilityHandler { public AbilityController() { Instance = this; registerBuiltins(); + new Animations(); } /** @@ -321,4 +321,67 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:hazard", AbilityHazard::new); registerType("cnpc:trap", AbilityTrap::new); } + + public static class Animations { + public HashMap> animations; + + public static Animations Instance; + + public Animations() { + Instance = this; + animations = new HashMap<>(); + load(); + } + + public void load() { + registerBuiltins(); + } + + private void registerBuiltins() { + animations.clear(); + + try { + for (AbilityPhase phase : AbilityPhase.values()) { + for (AbilityAnimation anim : AbilityAnimation.values()) { + File file = anim.get(phase); + + if (file == null) { +// LogWriter.info("AnimationController: Ability Animations for " + anim.name() + " not found."); + continue; + } + + Animation animation = new Animation(); + animation.readFromNBT(NBTJsonUtil.LoadFile(file)); + + animations + .computeIfAbsent(anim.ordinal(), k -> new EnumMap<>(AbilityPhase.class)) + .put(phase, animation); + } + } + } catch (Exception e) { + LogWriter.except(e); + } + } + + public IAnimation get(AbilityAnimation ability, AbilityPhase phase) { + return get(ability.ordinal(), phase); + } + + public IAnimation get(int id, AbilityPhase phase) { + return animations.get(id).get(phase); + } + + public boolean has(AbilityAnimation ability, AbilityPhase phase) { + return get(ability.ordinal(), phase) != null; + } + + public boolean has(int id, AbilityPhase phase) { + return get(id, phase) != null; + } + + public IAnimation[] getAnimations(AbilityAnimation ability) { + ArrayList animations = new ArrayList<>(this.animations.get(ability.ordinal()).values()); + return animations.toArray(new IAnimation[0]); + } + } } From 39b6304bedeb549a723bcdaa6b885b34da042002 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 01:34:34 -0300 Subject: [PATCH 09/85] Updated imports --- .../kamkeel/npcs/controllers/data/ability/AbilityController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 3eb8283f8..be9ce355d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -23,7 +23,6 @@ import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.api.handler.IAbilityHandler; import noppes.npcs.api.handler.data.IAnimation; -import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; import noppes.npcs.util.NBTJsonUtil; From 246baa9f55b424c6520705fb8f7648cbf3804078 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 01:49:08 -0300 Subject: [PATCH 10/85] Removed static class from AbilityController and made animations built into the enum --- src/api | 2 +- .../data/ability/AbilityAnimation.java | 45 +++++++++---- .../data/ability/AbilityController.java | 64 ------------------- 3 files changed, 34 insertions(+), 77 deletions(-) diff --git a/src/api b/src/api index b84763a8e..ae73e1b88 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit b84763a8eefdc0be7fb909888ac5ad6d22e3f987 +Subproject commit ae73e1b885415701c1ee20b64c1d0ae9c9089efc diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java index 1a6c907ea..cb27dcd3f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java @@ -2,6 +2,9 @@ package kamkeel.npcs.controllers.data.ability; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; +import noppes.npcs.api.handler.data.IAnimation; +import noppes.npcs.controllers.data.Animation; +import noppes.npcs.util.NBTJsonUtil; import org.apache.commons.io.FileUtils; import java.io.File; @@ -11,7 +14,6 @@ import java.util.HashMap; import static kamkeel.npcs.controllers.data.ability.AbilityPhase.*; public enum AbilityAnimation {; - private final HashMap animations = new HashMap<>(); AbilityAnimation(String idle, String windUp, String active, String recovery) { @@ -40,30 +42,49 @@ public enum AbilityAnimation {; return animations.get(phase); } - public File get(AbilityPhase phase) { + public File getFile(AbilityPhase phase) { if (animations.get(phase).isEmpty() || animations.get(phase).equals("N/A")) return null; - return getFile(animations.get(phase)); + return getFileFromName(animations.get(phase)); } - public File idle() { - return get(IDLE); + public IAnimation getAnimation(AbilityPhase phase) { + try { + File file = getFile(phase); + + if (file == null) { + return null; + } + + Animation animation = new Animation(); + animation.readFromNBT(NBTJsonUtil.LoadFile(file)); + + return animation; + } catch (Exception e) { + LogWriter.except(e); + } + + return null; } - public File windUp() { - return get(WINDUP); + public IAnimation idle() { + return getAnimation(IDLE); } - public File active() { - return get(ACTIVE); + public IAnimation windUp() { + return getAnimation(WINDUP); } - public File recovery() { - return get(RECOVERY); + public IAnimation active() { + return getAnimation(ACTIVE); } - private File getFile(String fileName) { + public IAnimation recovery() { + return getAnimation(RECOVERY); + } + + private File getFileFromName(String fileName) { try (InputStream stream = CustomNpcs.class.getResourceAsStream("/internal/data/animations/" + name() + "/" + fileName + ".json")) { File file = new File("temp"); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index be9ce355d..0b88f1a42 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -47,7 +47,6 @@ public class AbilityController implements IAbilityHandler { public AbilityController() { Instance = this; registerBuiltins(); - new Animations(); } /** @@ -320,67 +319,4 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:hazard", AbilityHazard::new); registerType("cnpc:trap", AbilityTrap::new); } - - public static class Animations { - public HashMap> animations; - - public static Animations Instance; - - public Animations() { - Instance = this; - animations = new HashMap<>(); - load(); - } - - public void load() { - registerBuiltins(); - } - - private void registerBuiltins() { - animations.clear(); - - try { - for (AbilityPhase phase : AbilityPhase.values()) { - for (AbilityAnimation anim : AbilityAnimation.values()) { - File file = anim.get(phase); - - if (file == null) { -// LogWriter.info("AnimationController: Ability Animations for " + anim.name() + " not found."); - continue; - } - - Animation animation = new Animation(); - animation.readFromNBT(NBTJsonUtil.LoadFile(file)); - - animations - .computeIfAbsent(anim.ordinal(), k -> new EnumMap<>(AbilityPhase.class)) - .put(phase, animation); - } - } - } catch (Exception e) { - LogWriter.except(e); - } - } - - public IAnimation get(AbilityAnimation ability, AbilityPhase phase) { - return get(ability.ordinal(), phase); - } - - public IAnimation get(int id, AbilityPhase phase) { - return animations.get(id).get(phase); - } - - public boolean has(AbilityAnimation ability, AbilityPhase phase) { - return get(ability.ordinal(), phase) != null; - } - - public boolean has(int id, AbilityPhase phase) { - return get(id, phase) != null; - } - - public IAnimation[] getAnimations(AbilityAnimation ability) { - ArrayList animations = new ArrayList<>(this.animations.get(ability.ordinal()).values()); - return animations.toArray(new IAnimation[0]); - } - } } From 0484596a91c7e5d6f01f7ede189b5e151de4e630 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 01:51:49 -0300 Subject: [PATCH 11/85] Updated imports and fields --- .../data/ability/AbilityAnimation.java | 28 +++++++++---------- .../data/ability/AbilityController.java | 2 -- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java index cb27dcd3f..4b7f2ba3e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java @@ -14,39 +14,39 @@ import java.util.HashMap; import static kamkeel.npcs.controllers.data.ability.AbilityPhase.*; public enum AbilityAnimation {; - private final HashMap animations = new HashMap<>(); + private final HashMap animationNames = new HashMap<>(); AbilityAnimation(String idle, String windUp, String active, String recovery) { - animations.put(IDLE, idle); - animations.put(WINDUP, windUp); - animations.put(ACTIVE, active); - animations.put(RECOVERY, recovery); + animationNames.put(IDLE, idle); + animationNames.put(WINDUP, windUp); + animationNames.put(ACTIVE, active); + animationNames.put(RECOVERY, recovery); } AbilityAnimation(String idle, String windUp, String active) { - animations.put(IDLE, idle); - animations.put(WINDUP, windUp); - animations.put(ACTIVE, active); + animationNames.put(IDLE, idle); + animationNames.put(WINDUP, windUp); + animationNames.put(ACTIVE, active); } AbilityAnimation(String windUp, String active) { - animations.put(WINDUP, windUp); - animations.put(ACTIVE, active); + animationNames.put(WINDUP, windUp); + animationNames.put(ACTIVE, active); } AbilityAnimation(String anim, AbilityPhase phase) { - animations.put(phase, anim); + animationNames.put(phase, anim); } public String fileName(AbilityPhase phase) { - return animations.get(phase); + return animationNames.get(phase); } public File getFile(AbilityPhase phase) { - if (animations.get(phase).isEmpty() || animations.get(phase).equals("N/A")) + if (animationNames.get(phase).isEmpty() || animationNames.get(phase).equals("N/A")) return null; - return getFileFromName(animations.get(phase)); + return getFileFromName(animationNames.get(phase)); } public IAnimation getAnimation(AbilityPhase phase) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 0b88f1a42..a61df06fa 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -22,8 +22,6 @@ import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.api.handler.IAbilityHandler; -import noppes.npcs.api.handler.data.IAnimation; -import noppes.npcs.controllers.data.Animation; import noppes.npcs.util.NBTJsonUtil; import java.io.File; From 0f44a3c6c64906608ec9945b9923d6df20fbf620 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 26 Jan 2026 23:55:07 -0500 Subject: [PATCH 12/85] Ability Anchor Points + Orb / Disc Summoning --- .../controllers/data/ability/AnchorPoint.java | 55 ++++ .../data/ability/type/AbilityDisc.java | 73 +++-- .../data/ability/type/AbilityEnergyBeam.java | 13 +- .../data/ability/type/AbilityOrb.java | 76 +++-- .../npcs/entity/EntityAbilityBeam.java | 54 ++-- .../npcs/entity/EntityAbilityDisc.java | 275 ++++++++++++++-- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 183 +++++++++++ .../kamkeel/npcs/util/AnchorPointHelper.java | 303 ++++++++++++++++++ .../advanced/ability/SubGuiAbilityDisc.java | 22 +- .../ability/SubGuiAbilityEnergyBeam.java | 12 +- .../advanced/ability/SubGuiAbilityOrb.java | 12 +- .../assets/customnpcs/lang/en_US.lang | 1 + 12 files changed, 984 insertions(+), 95 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java create mode 100644 src/main/java/kamkeel/npcs/util/AnchorPointHelper.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java new file mode 100644 index 000000000..9bf408c27 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java @@ -0,0 +1,55 @@ +package kamkeel.npcs.controllers.data.ability; + +/** + * Defines anchor points for ability charging effects. + * Determines where the charging visual (orb, disc, etc.) appears relative to the entity. + */ +public enum AnchorPoint { + FRONT(0, "Front"), // In front of entity face (default) + CENTER(1, "Center"), // Entity center + RIGHT_HAND(2, "Right Hand"), // Right arm/hand position + LEFT_HAND(3, "Left Hand"), // Left arm/hand position + ABOVE_HEAD(4, "Above Head"), // Above the entity + CHEST(5, "Chest"); // Chest level, centered + + private final int id; + private final String displayName; + + AnchorPoint(int id, String displayName) { + this.id = id; + this.displayName = displayName; + } + + public int getId() { + return id; + } + + public String getDisplayName() { + return displayName; + } + + /** + * Get AnchorPoint from NBT id value. + * Returns FRONT if id is invalid. + */ + public static AnchorPoint fromId(int id) { + for (AnchorPoint anchor : values()) { + if (anchor.id == id) { + return anchor; + } + } + return FRONT; + } + + /** + * Get all display names for GUI dropdowns. + */ + public static String[] getDisplayNames() { + AnchorPoint[] values = values(); + String[] names = new String[values.length]; + for (int i = 0; i < values.length; i++) { + names[i] = values[i].displayName; + } + return names; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 5aa34a969..95dcd4afb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -3,11 +3,13 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityDisc; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -28,7 +30,7 @@ public class AbilityDisc extends Ability { private float discRadius = 1.0f; private float discThickness = 0.2f; private float maxDistance = 35.0f; - private int maxLifetime = 250; + private int maxLifetime = 200; // Combat properties private float damage = 8.0f; @@ -66,6 +68,12 @@ public class AbilityDisc extends Ability { private float lightningDensity = 0.15f; private float lightningRadius = 0.5f; + // Anchor point for charging position + private AnchorPoint anchorPoint = AnchorPoint.FRONT; + + // Transient state for disc entity (used during windup charging) + private transient int discEntityId = -1; + public AbilityDisc() { this.typeId = "ability.cnpc.disc"; this.name = "Disc"; @@ -105,24 +113,41 @@ public class AbilityDisc extends Ability { public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { if (world.isRemote) return; - double spawnX = npc.posX; - double spawnY = npc.posY + npc.getEyeHeight() * 0.8; - double spawnZ = npc.posZ; + // Find and start moving the disc that was spawned during windup + if (discEntityId != -1) { + Entity entity = world.getEntityByID(discEntityId); + if (entity instanceof EntityAbilityDisc) { + EntityAbilityDisc disc = (EntityAbilityDisc) entity; + disc.startMoving(target); + } + discEntityId = -1; + } + } - EntityAbilityDisc disc = new EntityAbilityDisc( - world, npc, target, - spawnX, spawnY, spawnZ, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, - damage, knockback, knockbackUp, - speed, homing, homingStrength, homingRange, - boomerang, boomerangDelay, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius - ); + @Override + public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; - world.spawnEntityInWorld(disc); + // Spawn disc in charging mode on first tick of windup + if (tick == 1) { + // Create disc in charging mode - follows NPC based on anchor point during windup + EntityAbilityDisc disc = EntityAbilityDisc.createCharging( + world, npc, target, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, + speed, homing, homingStrength, homingRange, + boomerang, boomerangDelay, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, + anchorPoint, // Anchor point for charging position + windUpTicks // Charge duration = windup duration + ); + + world.spawnEntityInWorld(disc); + discEntityId = disc.getEntityId(); + } } @Override @@ -135,6 +160,14 @@ public class AbilityDisc extends Ability { @Override public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + // Despawn charging disc if interrupted during windup + if (discEntityId != -1) { + Entity entity = npc.worldObj.getEntityByID(discEntityId); + if (entity != null) { + entity.setDead(); + } + discEntityId = -1; + } } @Override @@ -193,6 +226,7 @@ public class AbilityDisc extends Ability { nbt.setBoolean("lightningEffect", lightningEffect); nbt.setFloat("lightningDensity", lightningDensity); nbt.setFloat("lightningRadius", lightningRadius); + nbt.setInteger("anchorPoint", anchorPoint.getId()); } @Override @@ -201,7 +235,7 @@ public class AbilityDisc extends Ability { this.discRadius = nbt.hasKey("discRadius") ? nbt.getFloat("discRadius") : 1.0f; this.discThickness = nbt.hasKey("discThickness") ? nbt.getFloat("discThickness") : 0.2f; this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 35.0f; - this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 250; + this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 8.0f; this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.2f; this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.15f; @@ -224,6 +258,7 @@ public class AbilityDisc extends Ability { this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; + this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; } // Getters & Setters @@ -281,4 +316,6 @@ public class AbilityDisc extends Ability { public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + public AnchorPoint getAnchorPoint() { return anchorPoint; } + public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 9a5345435..18969b43c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -66,6 +67,9 @@ public class AbilityEnergyBeam extends Ability { private float lightningDensity = 0.15f; private float lightningRadius = 0.5f; + // Anchor point for charging position + private AnchorPoint anchorPoint = AnchorPoint.FRONT; + // Transient state for beam entity (used during windup charging) private transient int beamEntityId = -1; @@ -127,7 +131,7 @@ public class AbilityEnergyBeam extends Ability { if (tick == 1) { float offsetDist = 1.0f; - // Create beam in charging mode - follows NPC's look direction during windup + // Create beam in charging mode - follows NPC based on anchor point during windup EntityAbilityBeam beam = EntityAbilityBeam.createCharging( world, npc, target, beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, @@ -139,7 +143,8 @@ public class AbilityEnergyBeam extends Ability { lightningEffect, lightningDensity, lightningRadius, lockMovement, // Anchored mode windUpTicks, // Charge duration = windup duration - offsetDist // Offset distance in front of NPC + offsetDist, // Offset distance (used by FRONT anchor) + anchorPoint // Anchor point for charging position ); world.spawnEntityInWorld(beam); @@ -221,6 +226,7 @@ public class AbilityEnergyBeam extends Ability { nbt.setBoolean("lightningEffect", lightningEffect); nbt.setFloat("lightningDensity", lightningDensity); nbt.setFloat("lightningRadius", lightningRadius); + nbt.setInteger("anchorPoint", anchorPoint.getId()); } @Override @@ -250,6 +256,7 @@ public class AbilityEnergyBeam extends Ability { this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; + this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; } // Getters & Setters @@ -303,4 +310,6 @@ public class AbilityEnergyBeam extends Ability { public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + public AnchorPoint getAnchorPoint() { return anchorPoint; } + public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 358b82896..38ffd8db4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -3,11 +3,13 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityOrb; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -63,6 +65,12 @@ public class AbilityOrb extends Ability { private float lightningRadius = 0.5f; // Max distance lightning arcs - scales with orbSize private int lightningFadeTime = 6; // Ticks before lightning fades out + // Anchor point for charging position + private AnchorPoint anchorPoint = AnchorPoint.FRONT; + + // Transient state for orb entity (used during windup charging) + private transient int orbEntityId = -1; + public AbilityOrb() { this.typeId = "ability.cnpc.orb"; this.name = "Orb"; @@ -102,25 +110,40 @@ public class AbilityOrb extends Ability { public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { if (world.isRemote) return; - // Spawn position at NPC's eye level - double spawnX = npc.posX; - double spawnY = npc.posY + npc.getEyeHeight() * 0.8; - double spawnZ = npc.posZ; + // Find and start moving the orb that was spawned during windup + if (orbEntityId != -1) { + Entity entity = world.getEntityByID(orbEntityId); + if (entity instanceof EntityAbilityOrb) { + EntityAbilityOrb orb = (EntityAbilityOrb) entity; + orb.startMoving(target); + } + orbEntityId = -1; + } + } - // Create and spawn the self-managing orb entity - EntityAbilityOrb orb = new EntityAbilityOrb( - world, npc, target, - spawnX, spawnY, spawnZ, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, - damage, knockback, knockbackUp, - orbSpeed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, lightningFadeTime - ); + @Override + public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; - world.spawnEntityInWorld(orb); + // Spawn orb in charging mode on first tick of windup + if (tick == 1) { + // Create orb in charging mode - follows NPC based on anchor point during windup + EntityAbilityOrb orb = EntityAbilityOrb.createCharging( + world, npc, target, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, + orbSpeed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, + maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, lightningFadeTime, + anchorPoint, // Anchor point for charging position + windUpTicks // Charge duration = windup duration + ); + + world.spawnEntityInWorld(orb); + orbEntityId = orb.getEntityId(); + } } @Override @@ -135,7 +158,14 @@ public class AbilityOrb extends Ability { @Override public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - // Nothing to clean up - entity manages itself + // Despawn charging orb if interrupted during windup + if (orbEntityId != -1) { + Entity entity = npc.worldObj.getEntityByID(orbEntityId); + if (entity != null) { + entity.setDead(); + } + orbEntityId = -1; + } } @Override @@ -192,6 +222,7 @@ public class AbilityOrb extends Ability { nbt.setFloat("lightningDensity", lightningDensity); nbt.setFloat("lightningRadius", lightningRadius); nbt.setInteger("lightningFadeTime", lightningFadeTime); + nbt.setInteger("anchorPoint", anchorPoint.getId()); } @Override @@ -221,6 +252,7 @@ public class AbilityOrb extends Ability { this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; this.lightningFadeTime = nbt.hasKey("lightningFadeTime") ? nbt.getInteger("lightningFadeTime") : 6; + this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; } // Getters & Setters @@ -423,4 +455,12 @@ public class AbilityOrb extends Ability { public void setLightningFadeTime(int lightningFadeTime) { this.lightningFadeTime = lightningFadeTime; } + + public AnchorPoint getAnchorPoint() { + return anchorPoint; + } + + public void setAnchorPoint(AnchorPoint anchorPoint) { + this.anchorPoint = anchorPoint; + } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 34030ab3f..70aaf5254 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -1,5 +1,7 @@ package kamkeel.npcs.entity; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -55,6 +57,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { private int chargeDuration = 40; private int chargeTick = 0; private float chargeOffsetDistance = 1.0f; + private AnchorPoint anchorPoint = AnchorPoint.FRONT; // Trail fading for non-anchored beams (comet effect) private boolean fadeTrail = false; @@ -214,7 +217,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { /** * Create a beam in charging mode (for windup phase). * The beam will grow from 0 to headSize over chargeDuration ticks. - * Position follows the owner's look direction. + * Position follows the owner based on anchor point. */ public static EntityAbilityBeam createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, float beamWidth, float headSize, int innerColor, int outerColor, @@ -225,12 +228,13 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime, boolean lightningEffect, float lightningDensity, float lightningRadius, - boolean anchoredMode, int chargeDuration, float chargeOffsetDistance) { - // Calculate initial position in front of owner's look direction - float yaw = (float) Math.toRadians(owner.rotationYawHead); - double spawnX = owner.posX - Math.sin(yaw) * chargeOffsetDistance; - double spawnY = owner.posY + owner.getEyeHeight() * 0.7; - double spawnZ = owner.posZ + Math.cos(yaw) * chargeOffsetDistance; + boolean anchoredMode, int chargeDuration, float chargeOffsetDistance, + AnchorPoint anchorPoint) { + // Calculate initial position based on anchor point + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint, chargeOffsetDistance); + double spawnX = spawnPos.xCoord; + double spawnY = spawnPos.yCoord; + double spawnZ = spawnPos.zCoord; EntityAbilityBeam beam = new EntityAbilityBeam( world, owner, target, @@ -247,6 +251,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { beam.chargeDuration = chargeDuration; beam.chargeTick = 0; beam.chargeOffsetDistance = chargeOffsetDistance; + beam.anchorPoint = anchorPoint; // Non-anchored beams have fading trail (comet effect) beam.fadeTrail = !anchoredMode; @@ -420,7 +425,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } /** - * Update during charging state - follow owner's look direction. + * Update during charging state - follow owner based on anchor point. */ private void updateCharging() { chargeTick++; @@ -431,27 +436,28 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { return; } - // Follow owner's head/look direction (rotationYawHead for NPCs/players) - float yaw; + // Calculate position based on anchor point + Vec3 pos; if (owner instanceof EntityLivingBase) { - yaw = (float) Math.toRadians(((EntityLivingBase) owner).rotationYawHead); + pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint, chargeOffsetDistance); } else { - yaw = (float) Math.toRadians(owner.rotationYaw); + // Fallback for non-living entities (shouldn't happen normally) + float yaw = (float) Math.toRadians(owner.rotationYaw); + double offsetX = -Math.sin(yaw) * chargeOffsetDistance; + double offsetZ = Math.cos(yaw) * chargeOffsetDistance; + pos = Vec3.createVectorHelper( + owner.posX + offsetX, + owner.posY + owner.getEyeHeight() * 0.7, + owner.posZ + offsetZ + ); } - double offsetX = -Math.sin(yaw) * chargeOffsetDistance; - double offsetZ = Math.cos(yaw) * chargeOffsetDistance; - - double newX = owner.posX + offsetX; - double newY = owner.posY + owner.getEyeHeight() * 0.7; - double newZ = owner.posZ + offsetZ; - - setPosition(newX, newY, newZ); + setPosition(pos.xCoord, pos.yCoord, pos.zCoord); // Also update origin for when firing starts - startX = newX; - startY = newY; - startZ = newZ; + startX = pos.xCoord; + startY = pos.yCoord; + startZ = pos.zCoord; } /** @@ -726,6 +732,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; this.chargeOffsetDistance = nbt.hasKey("ChargeOffsetDistance") ? nbt.getFloat("ChargeOffsetDistance") : 1.0f; + this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; this.fadeTrail = nbt.hasKey("FadeTrail") && nbt.getBoolean("FadeTrail"); this.trailFadeTime = nbt.hasKey("TrailFadeTime") ? nbt.getInteger("TrailFadeTime") : 20; @@ -761,6 +768,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { nbt.setInteger("ChargeDuration", chargeDuration); nbt.setInteger("ChargeTick", chargeTick); nbt.setFloat("ChargeOffsetDistance", chargeOffsetDistance); + nbt.setInteger("AnchorPoint", anchorPoint.getId()); nbt.setBoolean("FadeTrail", fadeTrail); nbt.setInteger("TrailFadeTime", trailFadeTime); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index c0127286f..b1f57f9c9 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -1,5 +1,7 @@ package kamkeel.npcs.entity; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -35,10 +37,45 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { private float discRadius = 1.0f; // Width of disc private float discThickness = 0.2f; // Height of disc + // Charging state (during windup) + private boolean charging = false; + private int chargeDuration = 40; + private int chargeTick = 0; + private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private float targetDiscRadius = 1.0f; // Full radius to grow to during charging + private float targetDiscThickness = 0.2f; // Full thickness to grow to during charging + + // Data watcher index for charging state (synced to clients) + private static final int DW_CHARGING = 20; + public EntityAbilityDisc(World world) { super(world); } + @Override + protected void entityInit() { + super.entityInit(); + // Register data watcher for charging state + this.dataWatcher.addObject(DW_CHARGING, (byte) 0); + } + + /** + * Check if disc is in charging state (synced via data watcher). + */ + public boolean isCharging() { + return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; + } + + /** + * Set charging state (server only, synced to clients via data watcher). + */ + private void setCharging(boolean value) { + this.charging = value; + if (!worldObj.isRemote) { + this.dataWatcher.updateObject(DW_CHARGING, (byte) (value ? 1 : 0)); + } + } + /** * Full constructor with all parameters (no lightning). */ @@ -117,6 +154,97 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { } } + /** + * Create a disc in charging mode (for windup phase). + * The disc will grow from 0 to discRadius over chargeDuration ticks. + * Position follows the owner based on anchor point. + */ + public static EntityAbilityDisc createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, + float discRadius, float discThickness, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean boomerang, int boomerangDelay, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, + AnchorPoint anchorPoint, int chargeDuration) { + // Calculate initial position based on anchor point + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + double spawnX = spawnPos.xCoord; + double spawnY = spawnPos.yCoord; + double spawnZ = spawnPos.zCoord; + + EntityAbilityDisc disc = new EntityAbilityDisc( + world, owner, target, + spawnX, spawnY, spawnZ, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + boomerang, boomerangDelay, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius); + + // Set charging state (uses data watcher for client sync) + disc.setCharging(true); + disc.chargeDuration = chargeDuration; + disc.chargeTick = 0; + disc.anchorPoint = anchorPoint; + + // Store target size and start at 0 for grow effect + disc.targetDiscRadius = disc.discRadius; + disc.targetDiscThickness = disc.discThickness; + disc.discRadius = 0.01f; // Start very small + disc.discThickness = 0.01f; + disc.size = 0.01f; // Base size used for rendering + disc.renderCurrentSize = 0.01f; + disc.prevRenderSize = 0.01f; + + // Clear motion while charging + disc.motionX = 0; + disc.motionY = 0; + disc.motionZ = 0; + + return disc; + } + + /** + * Start the disc moving (exit charging mode). + * Called by ability when windup ends. + */ + public void startMoving(EntityLivingBase target) { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Calculate velocity toward target + Entity owner = getOwner(); + + if (target != null) { + double dx = target.posX - posX; + double dy = (target.posY + target.height * 0.5) - posY; + double dz = target.posZ - posZ; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + motionX = (dx / len) * speed; + motionY = (dy / len) * speed; + motionZ = (dz / len) * speed; + } + } else if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + } + @Override protected void updateRotation() { // Disc spins ONLY on Y axis (flat spin like a saw blade) @@ -127,6 +255,12 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { @Override protected void updateProjectile() { + // Handle charging state (windup phase) + if (isCharging()) { + updateCharging(); + return; + } + if (worldObj.isRemote) { handleClientInterpolation(); } else { @@ -141,17 +275,8 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { checkEntityCollision(); this.moveEntity(motionX, motionY, motionZ); - // Boomerang: if we've traveled far without hitting, start returning + // Track ticks for boomerang delay (checkMaxDistance handles the actual return trigger) if (boomerang && !returning && !hasHit) { - double distTraveled = Math.sqrt( - (posX - startX) * (posX - startX) + - (posY - startY) * (posY - startY) + - (posZ - startZ) * (posZ - startZ) - ); - // Start returning at 80% of max distance or after delay - if (distTraveled >= maxDistance * 0.8 || ticksSinceMiss >= boomerangDelay) { - returning = true; - } ticksSinceMiss++; } } @@ -170,20 +295,41 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { @Override protected boolean checkMaxDistance() { - // If boomerang and returning, don't die from max distance - if (boomerang && returning) { - // Die if we get close to owner - Entity owner = getOwner(); - if (owner != null) { - double distToOwner = Math.sqrt( - (posX - owner.posX) * (posX - owner.posX) + - (posY - owner.posY) * (posY - owner.posY) + - (posZ - owner.posZ) * (posZ - owner.posZ) - ); - return distToOwner < 1.0; + double distTraveled = Math.sqrt( + (posX - startX) * (posX - startX) + + (posY - startY) * (posY - startY) + + (posZ - startZ) * (posZ - startZ) + ); + + if (boomerang) { + // If not returning yet, check if we should start returning + if (!returning && !hasHit) { + if (distTraveled >= maxDistance * 0.8 || ticksSinceMiss >= boomerangDelay) { + returning = true; + } } + + // If returning, only die when close to owner + if (returning) { + Entity owner = getOwner(); + if (owner != null) { + double distToOwner = Math.sqrt( + (posX - owner.posX) * (posX - owner.posX) + + (posY - owner.posY) * (posY - owner.posY) + + (posZ - owner.posZ) * (posZ - owner.posZ) + ); + return distToOwner < 1.5; + } + // Owner gone but returning - keep going toward last known position + return false; + } + + // Not returning yet - don't die from distance (we'll trigger return above) + return false; } - return super.checkMaxDistance(); + + // Non-boomerang: standard max distance check + return distTraveled >= maxDistance; } private void updateHoming() { @@ -225,19 +371,28 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { private void updateReturnToOwner() { Entity owner = getOwner(); - if (owner == null) { - this.setDead(); - return; + + // If owner is gone (unloaded/dead), head back toward start position + double targetX, targetY, targetZ; + if (owner != null) { + targetX = owner.posX; + targetY = owner.posY + owner.height * 0.5; + targetZ = owner.posZ; + } else { + // Return to start position if owner not available + targetX = startX; + targetY = startY; + targetZ = startZ; } - double dx = owner.posX - posX; - double dy = (owner.posY + owner.height * 0.5) - posY; - double dz = owner.posZ - posZ; + double dx = targetX - posX; + double dy = targetY - posY; + double dz = targetZ - posZ; double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); if (dist > 0) { // Stronger homing when returning - double returnStrength = homingStrength * 2.0; + double returnStrength = Math.min(1.0, homingStrength * 2.5); double desiredVX = (dx / dist) * speed; double desiredVY = (dy / dist) * speed; double desiredVZ = (dz / dist) * speed; @@ -297,6 +452,52 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { } } + /** + * Update during charging state - follow owner based on anchor point. + */ + private void updateCharging() { + chargeTick++; + + Entity owner = getOwner(); + if (owner == null || owner.isDead) { + setDead(); + return; + } + + // Grow size based on charge progress + float progress = getChargeProgress(); + this.discRadius = targetDiscRadius * progress; + this.discThickness = targetDiscThickness * progress; + this.size = this.discRadius; // Base size for interpolation + + // Calculate position based on anchor point + if (owner instanceof EntityLivingBase) { + Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint); + setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + } + + // Update rotation during charging (disc still spins) + updateRotation(); + } + + /** + * Get the charge progress (0-1). + */ + public float getChargeProgress() { + if (chargeDuration <= 0) return 1.0f; + return Math.min(1.0f, (float) chargeTick / chargeDuration); + } + + /** + * Get interpolated charge progress for smooth rendering. + */ + public float getInterpolatedChargeProgress(float partialTicks) { + if (chargeDuration <= 0) return 1.0f; + float prevProgress = Math.max(0, (float) (chargeTick - 1) / chargeDuration); + float currProgress = Math.min(1.0f, (float) chargeTick / chargeDuration); + return prevProgress + (currProgress - prevProgress) * partialTicks; + } + // ==================== GETTERS ==================== public float getSpeed() { @@ -336,6 +537,15 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.discRadius = nbt.hasKey("DiscRadius") ? nbt.getFloat("DiscRadius") : 1.0f; this.discThickness = nbt.hasKey("DiscThickness") ? nbt.getFloat("DiscThickness") : 0.2f; this.returning = nbt.hasKey("Returning") && nbt.getBoolean("Returning"); + // Charging state + boolean isCharging = nbt.hasKey("Charging") && nbt.getBoolean("Charging"); + this.charging = isCharging; + this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); + this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; + this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; + this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; + this.targetDiscRadius = nbt.hasKey("TargetDiscRadius") ? nbt.getFloat("TargetDiscRadius") : this.discRadius; + this.targetDiscThickness = nbt.hasKey("TargetDiscThickness") ? nbt.getFloat("TargetDiscThickness") : this.discThickness; } @Override @@ -349,5 +559,12 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { nbt.setFloat("DiscRadius", discRadius); nbt.setFloat("DiscThickness", discThickness); nbt.setBoolean("Returning", returning); + // Charging state + nbt.setBoolean("Charging", isCharging()); + nbt.setInteger("ChargeDuration", chargeDuration); + nbt.setInteger("ChargeTick", chargeTick); + nbt.setInteger("AnchorPoint", anchorPoint.getId()); + nbt.setFloat("TargetDiscRadius", targetDiscRadius); + nbt.setFloat("TargetDiscThickness", targetDiscThickness); } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 38e3741f9..18a0c8503 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -1,5 +1,7 @@ package kamkeel.npcs.entity; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -25,10 +27,44 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { private float homingStrength = 0.35f; // Increased from 0.15 for better tracking private float homingRange = 20.0f; + // Charging state (during windup) + private boolean charging = false; + private int chargeDuration = 40; + private int chargeTick = 0; + private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private float targetSize = 1.0f; // Full size to grow to during charging + + // Data watcher index for charging state (synced to clients) + private static final int DW_CHARGING = 20; + public EntityAbilityOrb(World world) { super(world); } + @Override + protected void entityInit() { + super.entityInit(); + // Register data watcher for charging state + this.dataWatcher.addObject(DW_CHARGING, (byte) 0); + } + + /** + * Check if orb is in charging state (synced via data watcher). + */ + public boolean isCharging() { + return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; + } + + /** + * Set charging state (server only, synced to clients via data watcher). + */ + private void setCharging(boolean value) { + this.charging = value; + if (!worldObj.isRemote) { + this.dataWatcher.updateObject(DW_CHARGING, (byte) (value ? 1 : 0)); + } + } + /** * Full constructor with all parameters. */ @@ -102,8 +138,100 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { } } + /** + * Create an orb in charging mode (for windup phase). + * The orb will grow from 0 to orbSize over chargeDuration ticks. + * Position follows the owner based on anchor point. + */ + public static EntityAbilityOrb createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, + float orbSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + float damage, float knockback, float knockbackUp, + float speed, boolean homing, float homingStrength, float homingRange, + boolean explosive, float explosionRadius, float explosionDamageFalloff, + int stunDuration, int slowDuration, int slowLevel, + float maxDistance, int maxLifetime, + boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime, + AnchorPoint anchorPoint, int chargeDuration) { + // Calculate initial position based on anchor point + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + double spawnX = spawnPos.xCoord; + double spawnY = spawnPos.yCoord; + double spawnZ = spawnPos.zCoord; + + EntityAbilityOrb orb = new EntityAbilityOrb( + world, owner, target, + spawnX, spawnY, spawnZ, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, + explosive, explosionRadius, explosionDamageFalloff, + stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, + lightningEffect, lightningDensity, lightningRadius, lightningFadeTime); + + // Set charging state (uses data watcher for client sync) + orb.setCharging(true); + orb.chargeDuration = chargeDuration; + orb.chargeTick = 0; + orb.anchorPoint = anchorPoint; + + // Store target size and start at 0 for grow effect + orb.targetSize = orb.size; + orb.size = 0.01f; // Start very small + orb.renderCurrentSize = 0.01f; + orb.prevRenderSize = 0.01f; + + // Clear motion while charging + orb.motionX = 0; + orb.motionY = 0; + orb.motionZ = 0; + + return orb; + } + + /** + * Start the orb moving (exit charging mode). + * Called by ability when windup ends. + */ + public void startMoving(EntityLivingBase target) { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Calculate velocity toward target + Entity owner = getOwner(); + + if (target != null) { + double dx = target.posX - posX; + double dy = (target.posY + target.height * 0.5) - posY; + double dz = target.posZ - posZ; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + motionX = (dx / len) * speed; + motionY = (dy / len) * speed; + motionZ = (dz / len) * speed; + } + } else if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } + } + @Override protected void updateProjectile() { + // Handle charging state (windup phase) + if (isCharging()) { + updateCharging(); + return; + } + if (worldObj.isRemote) { handleClientInterpolation(); } else { @@ -207,6 +335,47 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { } } + /** + * Update during charging state - follow owner based on anchor point. + */ + private void updateCharging() { + chargeTick++; + + Entity owner = getOwner(); + if (owner == null || owner.isDead) { + setDead(); + return; + } + + // Grow size based on charge progress + float progress = getChargeProgress(); + this.size = targetSize * progress; + + // Calculate position based on anchor point + if (owner instanceof EntityLivingBase) { + Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint); + setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + } + } + + /** + * Get the charge progress (0-1). + */ + public float getChargeProgress() { + if (chargeDuration <= 0) return 1.0f; + return Math.min(1.0f, (float) chargeTick / chargeDuration); + } + + /** + * Get interpolated charge progress for smooth rendering. + */ + public float getInterpolatedChargeProgress(float partialTicks) { + if (chargeDuration <= 0) return 1.0f; + float prevProgress = Math.max(0, (float) (chargeTick - 1) / chargeDuration); + float currProgress = Math.min(1.0f, (float) chargeTick / chargeDuration); + return prevProgress + (currProgress - prevProgress) * partialTicks; + } + // ==================== GETTERS ==================== public float getSpeed() { @@ -238,6 +407,14 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { this.homing = !nbt.hasKey("Homing") || nbt.getBoolean("Homing"); this.homingStrength = nbt.hasKey("HomingStrength") ? nbt.getFloat("HomingStrength") : 0.15f; this.homingRange = nbt.hasKey("HomingRange") ? nbt.getFloat("HomingRange") : 20.0f; + // Charging state + boolean isCharging = nbt.hasKey("Charging") && nbt.getBoolean("Charging"); + this.charging = isCharging; + this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); + this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; + this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; + this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; + this.targetSize = nbt.hasKey("TargetSize") ? nbt.getFloat("TargetSize") : this.size; } @Override @@ -246,5 +423,11 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { nbt.setBoolean("Homing", homing); nbt.setFloat("HomingStrength", homingStrength); nbt.setFloat("HomingRange", homingRange); + // Charging state + nbt.setBoolean("Charging", isCharging()); + nbt.setInteger("ChargeDuration", chargeDuration); + nbt.setInteger("ChargeTick", chargeTick); + nbt.setInteger("AnchorPoint", anchorPoint.getId()); + nbt.setFloat("TargetSize", targetSize); } } diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java new file mode 100644 index 000000000..7ad4dc581 --- /dev/null +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -0,0 +1,303 @@ +package kamkeel.npcs.util; + +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.Vec3; +import noppes.npcs.constants.EnumAnimationPart; +import noppes.npcs.controllers.data.AnimationData; +import noppes.npcs.controllers.data.Frame; +import noppes.npcs.controllers.data.FramePart; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Utility class for calculating world positions based on anchor points. + * Used for positioning charging effects on different body parts. + * Animation-aware: reads arm positions from NPC animation data when available. + */ +public class AnchorPointHelper { + + // Model coordinate scale factor (model coords to blocks) + private static final float MODEL_SCALE = 0.0625f; // 1/16 + + // Default offsets (in blocks) + private static final float ARM_LATERAL_OFFSET = 0.35f; // ~5.5 pixels lateral from center + private static final float ARM_FORWARD_OFFSET = 0.25f; // Arm extended slightly forward + private static final float FRONT_OFFSET = 1.0f; // Distance in front for FRONT anchor + + // Height multipliers relative to eye height + private static final float FRONT_HEIGHT_MULT = 0.7f; + private static final float CENTER_HEIGHT_MULT = 0.5f; + private static final float ARM_HEIGHT_MULT = 0.75f; + private static final float ABOVE_HEAD_HEIGHT_MULT = 1.3f; + private static final float CHEST_HEIGHT_MULT = 0.5f; + + /** + * Calculate the world position for a given anchor point on an entity. + * + * @param entity The entity to calculate the anchor position for + * @param anchor The anchor point type + * @return Vec3 containing the world coordinates for the anchor point + */ + public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor) { + return calculateAnchorPosition(entity, anchor, FRONT_OFFSET); + } + + /** + * Calculate the world position for a given anchor point on an entity. + * For NPCs with active animations, this will read the actual arm positions. + * + * @param entity The entity to calculate the anchor position for + * @param anchor The anchor point type + * @param frontOffset Custom offset distance for FRONT anchor point + * @return Vec3 containing the world coordinates for the anchor point + */ + public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor, float frontOffset) { + double x = entity.posX; + double y = entity.posY; + double z = entity.posZ; + float eyeHeight = entity.getEyeHeight(); + + // Get yaw in radians (use body yaw for arm positioning, head yaw for facing) + float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); + float headYaw = (float) Math.toRadians(entity.rotationYawHead); + + switch (anchor) { + case FRONT: + // In front of entity face (use head yaw) + x -= Math.sin(headYaw) * frontOffset; + y += eyeHeight * FRONT_HEIGHT_MULT; + z += Math.cos(headYaw) * frontOffset; + break; + + case CENTER: + // Entity center + y += eyeHeight * CENTER_HEIGHT_MULT; + break; + + case RIGHT_HAND: + // Try to get animated arm position + Vec3 rightArmPos = getAnimatedArmPosition(entity, true); + if (rightArmPos != null) { + return rightArmPos; + } + // Fallback: calculated position using body yaw + x += calculateHandOffsetX(bodyYaw, true); + y += eyeHeight * ARM_HEIGHT_MULT; + z += calculateHandOffsetZ(bodyYaw, true); + break; + + case LEFT_HAND: + // Try to get animated arm position + Vec3 leftArmPos = getAnimatedArmPosition(entity, false); + if (leftArmPos != null) { + return leftArmPos; + } + // Fallback: calculated position using body yaw + x += calculateHandOffsetX(bodyYaw, false); + y += eyeHeight * ARM_HEIGHT_MULT; + z += calculateHandOffsetZ(bodyYaw, false); + break; + + case ABOVE_HEAD: + // Above the entity + y += eyeHeight * ABOVE_HEAD_HEIGHT_MULT; + break; + + case CHEST: + // Chest level, centered + y += eyeHeight * CHEST_HEIGHT_MULT; + break; + } + + return Vec3.createVectorHelper(x, y, z); + } + + /** + * Get the animated arm position from NPC animation data. + * Uses Minecraft's hand positioning logic from RenderNPCHumanMale. + * Hand offset values: (-0.0625, 0.4375, 0.0625) for right hand after arm postRender. + * + * @param entity The entity (must be EntityNPCInterface for animation support) + * @param rightArm True for right arm, false for left arm + * @return Vec3 world position if animation data available, null otherwise + */ + private static Vec3 getAnimatedArmPosition(EntityLivingBase entity, boolean rightArm) { + if (!(entity instanceof EntityNPCInterface)) { + return null; + } + + EntityNPCInterface npc = (EntityNPCInterface) entity; + AnimationData animData = npc.display.animationData; + + if (animData == null || !animData.isActive() || animData.animation == null) { + return null; + } + + Frame frame = (Frame) animData.animation.currentFrame(); + if (frame == null) { + return null; + } + + EnumAnimationPart armPart = rightArm ? EnumAnimationPart.RIGHT_ARM : EnumAnimationPart.LEFT_ARM; + if (!frame.frameParts.containsKey(armPart)) { + return null; + } + + FramePart part = frame.frameParts.get(armPart); + if (part == null) { + return null; + } + + // Ensure interpolation is up to date + part.interpolateOffset(); + part.interpolateAngles(); + + // Get body yaw for world rotation + float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); + + // === SHOULDER POSITION (model coordinates, in model units) === + // Right arm pivot: X = -5 (right side), Y = -2 (below head), Z = 0 + // Left arm pivot: X = 5 (left side), Y = -2, Z = 0 + // Note: In Minecraft model coords, Y=0 is at head level, shoulder is at Y=-2 + float shoulderModelX = rightArm ? -5.0f : 5.0f; + float shoulderModelY = -2.0f; + float shoulderModelZ = 0.0f; + + // Add animation pivot offsets (if any) + if (part.prevPivots != null) { + shoulderModelX += part.prevPivots[0]; + shoulderModelY += part.prevPivots[1]; + shoulderModelZ += part.prevPivots[2]; + } + + // === HAND OFFSET IN ARM'S LOCAL SPACE (from RenderNPCHumanMale) === + // These values are in blocks, applied AFTER postRender transforms + // Right: (-0.0625, 0.4375, 0.0625), Left: (0.0625, 0.4375, 0.0625) + float handLocalX = rightArm ? -0.0625f : 0.0625f; + float handLocalY = 0.4375f; // 7 model units down the arm + float handLocalZ = 0.0625f; // Slightly forward + + // === ARM ROTATION ANGLES === + float rotX = part.prevRotations != null ? part.prevRotations[0] : 0; + float rotY = part.prevRotations != null ? part.prevRotations[1] : 0; + float rotZ = part.prevRotations != null ? part.prevRotations[2] : 0; + + // === APPLY ARM ROTATIONS TO HAND OFFSET === + // Rotation order matches ModelRenderer.postRender: Z, Y, X + double hx = handLocalX; + double hy = handLocalY; + double hz = handLocalZ; + + // Rotate around Z axis + double cosZ = Math.cos(rotZ); + double sinZ = Math.sin(rotZ); + double tempX = hx * cosZ - hy * sinZ; + double tempY = hx * sinZ + hy * cosZ; + hx = tempX; + hy = tempY; + + // Rotate around Y axis + double cosY = Math.cos(rotY); + double sinY = Math.sin(rotY); + tempX = hx * cosY + hz * sinY; + double tempZ = -hx * sinY + hz * cosY; + hx = tempX; + hz = tempZ; + + // Rotate around X axis + double cosX = Math.cos(rotX); + double sinX = Math.sin(rotX); + tempY = hy * cosX - hz * sinX; + tempZ = hy * sinX + hz * cosX; + hy = tempY; + hz = tempZ; + + // === COMBINE SHOULDER + ROTATED HAND OFFSET === + // Convert shoulder from model units to blocks + double worldOffsetX = shoulderModelX * MODEL_SCALE + hx; + double worldOffsetY = shoulderModelY * MODEL_SCALE + hy; + double worldOffsetZ = shoulderModelZ * MODEL_SCALE + hz; + + // === ROTATE BY BODY YAW === + double cosYaw = Math.cos(bodyYaw); + double sinYaw = Math.sin(bodyYaw); + double rotatedX = worldOffsetX * cosYaw + worldOffsetZ * sinYaw; + double rotatedZ = -worldOffsetX * sinYaw + worldOffsetZ * cosYaw; + + // === FINAL WORLD POSITION === + // Entity posY is at feet, shoulder height is approximately eyeHeight * 0.9 + double shoulderWorldY = entity.posY + entity.getEyeHeight() * 0.9; + + double worldX = entity.posX + rotatedX; + double worldY = shoulderWorldY + worldOffsetY; + double worldZ = entity.posZ + rotatedZ; + + return Vec3.createVectorHelper(worldX, worldY, worldZ); + } + + /** + * Calculate the X offset for hand positions (fallback when no animation). + * + * @param yaw Entity's body yaw in radians + * @param rightHand True for right hand, false for left hand + * @return X offset in world coordinates + */ + private static double calculateHandOffsetX(float yaw, boolean rightHand) { + // Perpendicular direction (90 degrees from look direction) + // Right hand: +90 degrees, Left hand: -90 degrees + float perpYaw = yaw + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); + + // Lateral offset (perpendicular to look direction) + double lateralX = Math.sin(perpYaw) * ARM_LATERAL_OFFSET; + + // Forward offset (in look direction) + double forwardX = -Math.sin(yaw) * ARM_FORWARD_OFFSET; + + return lateralX + forwardX; + } + + /** + * Calculate the Z offset for hand positions (fallback when no animation). + * + * @param yaw Entity's body yaw in radians + * @param rightHand True for right hand, false for left hand + * @return Z offset in world coordinates + */ + private static double calculateHandOffsetZ(float yaw, boolean rightHand) { + // Perpendicular direction (90 degrees from look direction) + float perpYaw = yaw + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); + + // Lateral offset (perpendicular to look direction) + double lateralZ = -Math.cos(perpYaw) * ARM_LATERAL_OFFSET; + + // Forward offset (in look direction) + double forwardZ = Math.cos(yaw) * ARM_FORWARD_OFFSET; + + return lateralZ + forwardZ; + } + + /** + * Get the height multiplier for a given anchor point. + * Useful for external code that needs to know the Y position offset. + * + * @param anchor The anchor point type + * @return Height multiplier relative to eye height + */ + public static float getHeightMultiplier(AnchorPoint anchor) { + switch (anchor) { + case FRONT: + return FRONT_HEIGHT_MULT; + case CENTER: + return CENTER_HEIGHT_MULT; + case RIGHT_HAND: + case LEFT_HAND: + return ARM_HEIGHT_MULT; + case ABOVE_HEAD: + return ABOVE_HEAD_HEIGHT_MULT; + case CHEST: + return CHEST_HEIGHT_MULT; + default: + return FRONT_HEIGHT_MULT; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 2a3439af1..33c5372fd 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -1,6 +1,7 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -92,8 +93,11 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { y += 24; - // Row 7: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); + // Row 7: Max Lifetime + Effects button + addLabel(new GuiNpcLabel(112, "ability.lifetime", labelX, y + 5)); + addTextField(createIntField(112, fieldX, y, 50, disc.getMaxLifetime())); + + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); } @Override @@ -104,7 +108,13 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 180; int col2FieldX = guiLeft + 260; - // Row 1: Inner Color + Outer Color + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPoint().getId())); + + y += 24; + + // Row 2: Inner Color + Outer Color addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", disc.getInnerColor() & 0xFFFFFF); GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); @@ -197,6 +207,9 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { disc.setLightningEffect(value == 1); initGui(); break; + case 210: + disc.setAnchorPoint(AnchorPoint.fromId(value)); + break; } } @@ -253,6 +266,9 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { case 111: disc.setMaxDistance(parseFloat(field, disc.getMaxDistance())); break; + case 112: + disc.setMaxLifetime(field.getInteger()); + break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index 1c7179deb..626fac6b9 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -1,6 +1,7 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -105,7 +106,13 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 180; int col2FieldX = guiLeft + 260; - // Row 1: Inner Color + Outer Color + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPoint().getId())); + + y += 24; + + // Row 2: Inner Color + Outer Color addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", beam.getInnerColor() & 0xFFFFFF); GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); @@ -195,6 +202,9 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { beam.setLightningEffect(value == 1); initGui(); break; + case 210: + beam.setAnchorPoint(AnchorPoint.fromId(value)); + break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 6c5c598ba..c43569c46 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -1,6 +1,7 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -95,7 +96,13 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 180; int col2FieldX = guiLeft + 260; - // Row 1: Inner Color + Rotation Speed + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPoint().getId())); + + y += 24; + + // Row 2: Inner Color + Rotation Speed addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", orb.getInnerColor() & 0xFFFFFF); GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); @@ -185,6 +192,9 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { orb.setLightningEffect(value == 1); initGui(); break; + case 210: + orb.setAnchorPoint(AnchorPoint.fromId(value)); + break; } } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index d5dc945ce..01e3ae541 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1683,6 +1683,7 @@ ability.outerWidth=Outer Width ability.lightning=Enable Lightning ability.lightningDensity=Density ability.lightningRadius=Radius +ability.anchorPoint=Anchor Point ability.noVisualSettings=No visual settings for this ability type # Laser Shot Settings From 39b53b0be7424507bbc99c775aefa0450c160285 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 02:03:54 -0500 Subject: [PATCH 13/85] Anchor Points --- .../kamkeel/npcs/util/AnchorPointHelper.java | 256 ++++++++---------- 1 file changed, 115 insertions(+), 141 deletions(-) diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 7ad4dc581..5a7e32d28 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -16,13 +16,32 @@ import noppes.npcs.entity.EntityNPCInterface; */ public class AnchorPointHelper { - // Model coordinate scale factor (model coords to blocks) - private static final float MODEL_SCALE = 0.0625f; // 1/16 + // ==================== TUNABLE CONSTANTS ==================== + // These can be adjusted to fine-tune positioning - // Default offsets (in blocks) - private static final float ARM_LATERAL_OFFSET = 0.35f; // ~5.5 pixels lateral from center - private static final float ARM_FORWARD_OFFSET = 0.25f; // Arm extended slightly forward - private static final float FRONT_OFFSET = 1.0f; // Distance in front for FRONT anchor + // Shoulder position in model units (default biped arm rotation points) + private static final float SHOULDER_X_RIGHT = -5.0f; // Right arm is on the right side (-X in model space) + private static final float SHOULDER_X_LEFT = 5.0f; // Left arm is on the left side (+X in model space) + private static final float SHOULDER_Y = 2.0f; // Shoulder height from model origin + private static final float SHOULDER_Z = 0.0f; // Shoulder depth + + // Hand offset in model units (where items are held, relative to shoulder after rotation) + // In arm's local space: X = toward/away from body, Y = down the arm, Z = forward/back + private static float HAND_OFFSET_X_RIGHT = -2.0f; // Slightly toward body for right + private static float HAND_OFFSET_X_LEFT = 2.0f; // Slightly toward body for left + private static float HAND_OFFSET_Y = 14.0f; // Down the arm (arm is ~12 units long) + private static float HAND_OFFSET_Z = 0.0f; // Forward from arm + + // Height of shoulder relative to entity position (feet) + private static final float SHOULDER_HEIGHT_BLOCKS = 1.35f; + + // Model scale factor (1/16 - converts model units to blocks) + private static final float MODEL_SCALE = 0.0625f; + + // Fallback offsets (in blocks) when no animation + private static final float ARM_LATERAL_OFFSET = 0.35f; + private static final float ARM_FORWARD_OFFSET = 0.3f; + private static final float FRONT_OFFSET = 1.0f; // Height multipliers relative to eye height private static final float FRONT_HEIGHT_MULT = 0.7f; @@ -33,10 +52,6 @@ public class AnchorPointHelper { /** * Calculate the world position for a given anchor point on an entity. - * - * @param entity The entity to calculate the anchor position for - * @param anchor The anchor point type - * @return Vec3 containing the world coordinates for the anchor point */ public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor) { return calculateAnchorPosition(entity, anchor, FRONT_OFFSET); @@ -44,12 +59,6 @@ public class AnchorPointHelper { /** * Calculate the world position for a given anchor point on an entity. - * For NPCs with active animations, this will read the actual arm positions. - * - * @param entity The entity to calculate the anchor position for - * @param anchor The anchor point type - * @param frontOffset Custom offset distance for FRONT anchor point - * @return Vec3 containing the world coordinates for the anchor point */ public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor, float frontOffset) { double x = entity.posX; @@ -57,54 +66,44 @@ public class AnchorPointHelper { double z = entity.posZ; float eyeHeight = entity.getEyeHeight(); - // Get yaw in radians (use body yaw for arm positioning, head yaw for facing) - float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); - float headYaw = (float) Math.toRadians(entity.rotationYawHead); + // Body yaw in radians (used for arm positioning) + // Minecraft: yaw 0 = south (+Z), 90 = west (-X), 180 = north (-Z), 270 = east (+X) + float bodyYawRad = (float) Math.toRadians(entity.renderYawOffset); + float headYawRad = (float) Math.toRadians(entity.rotationYawHead); switch (anchor) { case FRONT: // In front of entity face (use head yaw) - x -= Math.sin(headYaw) * frontOffset; + x -= Math.sin(headYawRad) * frontOffset; y += eyeHeight * FRONT_HEIGHT_MULT; - z += Math.cos(headYaw) * frontOffset; + z += Math.cos(headYawRad) * frontOffset; break; case CENTER: - // Entity center y += eyeHeight * CENTER_HEIGHT_MULT; break; case RIGHT_HAND: - // Try to get animated arm position - Vec3 rightArmPos = getAnimatedArmPosition(entity, true); - if (rightArmPos != null) { - return rightArmPos; + Vec3 rightPos = getAnimatedHandPosition(entity, true); + if (rightPos != null) { + return rightPos; } - // Fallback: calculated position using body yaw - x += calculateHandOffsetX(bodyYaw, true); - y += eyeHeight * ARM_HEIGHT_MULT; - z += calculateHandOffsetZ(bodyYaw, true); - break; + // Fallback + return calculateFallbackHandPosition(entity, bodyYawRad, true); case LEFT_HAND: - // Try to get animated arm position - Vec3 leftArmPos = getAnimatedArmPosition(entity, false); - if (leftArmPos != null) { - return leftArmPos; + Vec3 leftPos = getAnimatedHandPosition(entity, false); + if (leftPos != null) { + return leftPos; } - // Fallback: calculated position using body yaw - x += calculateHandOffsetX(bodyYaw, false); - y += eyeHeight * ARM_HEIGHT_MULT; - z += calculateHandOffsetZ(bodyYaw, false); - break; + // Fallback + return calculateFallbackHandPosition(entity, bodyYawRad, false); case ABOVE_HEAD: - // Above the entity y += eyeHeight * ABOVE_HEAD_HEIGHT_MULT; break; case CHEST: - // Chest level, centered y += eyeHeight * CHEST_HEIGHT_MULT; break; } @@ -113,15 +112,10 @@ public class AnchorPointHelper { } /** - * Get the animated arm position from NPC animation data. - * Uses Minecraft's hand positioning logic from RenderNPCHumanMale. - * Hand offset values: (-0.0625, 0.4375, 0.0625) for right hand after arm postRender. - * - * @param entity The entity (must be EntityNPCInterface for animation support) - * @param rightArm True for right arm, false for left arm - * @return Vec3 world position if animation data available, null otherwise + * Calculate hand position using NPC animation data. + * Uses the same transformation logic as the renderer. */ - private static Vec3 getAnimatedArmPosition(EntityLivingBase entity, boolean rightArm) { + private static Vec3 getAnimatedHandPosition(EntityLivingBase entity, boolean rightArm) { if (!(entity instanceof EntityNPCInterface)) { return null; } @@ -152,136 +146,116 @@ public class AnchorPointHelper { part.interpolateOffset(); part.interpolateAngles(); - // Get body yaw for world rotation - float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); + // === STEP 1: Get shoulder position in model space === + float shoulderX = rightArm ? SHOULDER_X_RIGHT : SHOULDER_X_LEFT; + float shoulderY = SHOULDER_Y; + float shoulderZ = SHOULDER_Z; - // === SHOULDER POSITION (model coordinates, in model units) === - // Right arm pivot: X = -5 (right side), Y = -2 (below head), Z = 0 - // Left arm pivot: X = 5 (left side), Y = -2, Z = 0 - // Note: In Minecraft model coords, Y=0 is at head level, shoulder is at Y=-2 - float shoulderModelX = rightArm ? -5.0f : 5.0f; - float shoulderModelY = -2.0f; - float shoulderModelZ = 0.0f; - - // Add animation pivot offsets (if any) + // Add animation pivot offsets if (part.prevPivots != null) { - shoulderModelX += part.prevPivots[0]; - shoulderModelY += part.prevPivots[1]; - shoulderModelZ += part.prevPivots[2]; + shoulderX += part.prevPivots[0]; + shoulderY += part.prevPivots[1]; + shoulderZ += part.prevPivots[2]; } - // === HAND OFFSET IN ARM'S LOCAL SPACE (from RenderNPCHumanMale) === - // These values are in blocks, applied AFTER postRender transforms - // Right: (-0.0625, 0.4375, 0.0625), Left: (0.0625, 0.4375, 0.0625) - float handLocalX = rightArm ? -0.0625f : 0.0625f; - float handLocalY = 0.4375f; // 7 model units down the arm - float handLocalZ = 0.0625f; // Slightly forward + // === STEP 2: Get hand offset in arm's local space === + float handX = rightArm ? HAND_OFFSET_X_RIGHT : HAND_OFFSET_X_LEFT; + float handY = HAND_OFFSET_Y; + float handZ = HAND_OFFSET_Z; - // === ARM ROTATION ANGLES === + // === STEP 3: Apply arm rotations to hand offset (Z → Y → X order) === + // Rotations are in radians (already converted by interpolateAngles) float rotX = part.prevRotations != null ? part.prevRotations[0] : 0; float rotY = part.prevRotations != null ? part.prevRotations[1] : 0; float rotZ = part.prevRotations != null ? part.prevRotations[2] : 0; - // === APPLY ARM ROTATIONS TO HAND OFFSET === - // Rotation order matches ModelRenderer.postRender: Z, Y, X - double hx = handLocalX; - double hy = handLocalY; - double hz = handLocalZ; + // Start with hand offset + double hx = handX; + double hy = handY; + double hz = handZ; - // Rotate around Z axis + // Apply Z rotation first double cosZ = Math.cos(rotZ); double sinZ = Math.sin(rotZ); - double tempX = hx * cosZ - hy * sinZ; - double tempY = hx * sinZ + hy * cosZ; - hx = tempX; - hy = tempY; + double newX = hx * cosZ - hy * sinZ; + double newY = hx * sinZ + hy * cosZ; + hx = newX; + hy = newY; - // Rotate around Y axis + // Apply Y rotation double cosY = Math.cos(rotY); double sinY = Math.sin(rotY); - tempX = hx * cosY + hz * sinY; - double tempZ = -hx * sinY + hz * cosY; - hx = tempX; - hz = tempZ; + newX = hx * cosY + hz * sinY; + double newZ = -hx * sinY + hz * cosY; + hx = newX; + hz = newZ; - // Rotate around X axis + // Apply X rotation double cosX = Math.cos(rotX); double sinX = Math.sin(rotX); - tempY = hy * cosX - hz * sinX; - tempZ = hy * sinX + hz * cosX; - hy = tempY; - hz = tempZ; + newY = hy * cosX - hz * sinX; + newZ = hy * sinX + hz * cosX; + hy = newY; + hz = newZ; - // === COMBINE SHOULDER + ROTATED HAND OFFSET === - // Convert shoulder from model units to blocks - double worldOffsetX = shoulderModelX * MODEL_SCALE + hx; - double worldOffsetY = shoulderModelY * MODEL_SCALE + hy; - double worldOffsetZ = shoulderModelZ * MODEL_SCALE + hz; + // === STEP 4: Combine shoulder + rotated hand offset (in model units) === + double modelX = shoulderX + hx; + double modelY = shoulderY + hy; + double modelZ = shoulderZ + hz; - // === ROTATE BY BODY YAW === + // === STEP 5: Convert to blocks === + double blockX = modelX * MODEL_SCALE; + double blockY = modelY * MODEL_SCALE; + double blockZ = modelZ * MODEL_SCALE; + + // === STEP 6: Apply body yaw rotation === + // In model space: +X = left, -X = right, +Z = back, -Z = front + // Need to rotate to align with entity's facing direction + float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); double cosYaw = Math.cos(bodyYaw); double sinYaw = Math.sin(bodyYaw); - double rotatedX = worldOffsetX * cosYaw + worldOffsetZ * sinYaw; - double rotatedZ = -worldOffsetX * sinYaw + worldOffsetZ * cosYaw; - // === FINAL WORLD POSITION === - // Entity posY is at feet, shoulder height is approximately eyeHeight * 0.9 - double shoulderWorldY = entity.posY + entity.getEyeHeight() * 0.9; + // Rotate around Y axis (body rotation) + double worldOffsetX = blockX * cosYaw + blockZ * sinYaw; + double worldOffsetZ = -blockX * sinYaw + blockZ * cosYaw; - double worldX = entity.posX + rotatedX; - double worldY = shoulderWorldY + worldOffsetY; - double worldZ = entity.posZ + rotatedZ; + // === STEP 7: Final world position === + double worldX = entity.posX + worldOffsetX; + double worldY = entity.posY + SHOULDER_HEIGHT_BLOCKS - blockY; // Subtract because +Y in model is down + double worldZ = entity.posZ + worldOffsetZ; return Vec3.createVectorHelper(worldX, worldY, worldZ); } /** - * Calculate the X offset for hand positions (fallback when no animation). - * - * @param yaw Entity's body yaw in radians - * @param rightHand True for right hand, false for left hand - * @return X offset in world coordinates + * Calculate fallback hand position when no animation is active. */ - private static double calculateHandOffsetX(float yaw, boolean rightHand) { - // Perpendicular direction (90 degrees from look direction) - // Right hand: +90 degrees, Left hand: -90 degrees - float perpYaw = yaw + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); + private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, float bodyYawRad, boolean rightHand) { + double x = entity.posX; + double y = entity.posY; + double z = entity.posZ; + float eyeHeight = entity.getEyeHeight(); - // Lateral offset (perpendicular to look direction) - double lateralX = Math.sin(perpYaw) * ARM_LATERAL_OFFSET; + // Perpendicular direction for lateral offset + float perpYaw = bodyYawRad + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); - // Forward offset (in look direction) - double forwardX = -Math.sin(yaw) * ARM_FORWARD_OFFSET; + // Lateral offset (perpendicular to body facing) + double lateralX = -Math.sin(perpYaw) * ARM_LATERAL_OFFSET; + double lateralZ = Math.cos(perpYaw) * ARM_LATERAL_OFFSET; - return lateralX + forwardX; - } + // Forward offset (in facing direction) + double forwardX = -Math.sin(bodyYawRad) * ARM_FORWARD_OFFSET; + double forwardZ = Math.cos(bodyYawRad) * ARM_FORWARD_OFFSET; - /** - * Calculate the Z offset for hand positions (fallback when no animation). - * - * @param yaw Entity's body yaw in radians - * @param rightHand True for right hand, false for left hand - * @return Z offset in world coordinates - */ - private static double calculateHandOffsetZ(float yaw, boolean rightHand) { - // Perpendicular direction (90 degrees from look direction) - float perpYaw = yaw + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); + x += lateralX + forwardX; + y += eyeHeight * ARM_HEIGHT_MULT; + z += lateralZ + forwardZ; - // Lateral offset (perpendicular to look direction) - double lateralZ = -Math.cos(perpYaw) * ARM_LATERAL_OFFSET; - - // Forward offset (in look direction) - double forwardZ = Math.cos(yaw) * ARM_FORWARD_OFFSET; - - return lateralZ + forwardZ; + return Vec3.createVectorHelper(x, y, z); } /** * Get the height multiplier for a given anchor point. - * Useful for external code that needs to know the Y position offset. - * - * @param anchor The anchor point type - * @return Height multiplier relative to eye height */ public static float getHeightMultiplier(AnchorPoint anchor) { switch (anchor) { From 93486d306b86795d9f66a363a5234e40be6be2d0 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 04:36:12 -0300 Subject: [PATCH 14/85] Made animation fetching methods return Animation instead of IDs --- .../controllers/data/ability/Ability.java | 14 +++++++--- src/main/java/noppes/npcs/DataAbilities.java | 27 +++++++++++-------- .../gui/advanced/SubGuiAbilityConfig.java | 4 +-- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index d7a8b9eab..02d2227ad 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -17,6 +17,8 @@ import noppes.npcs.api.INbt; import noppes.npcs.api.ability.IAbility; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; @@ -927,16 +929,20 @@ public abstract class Ability implements IAbility { this.activeSound = activeSound; } - public int getWindUpAnimationId() { - return windUpAnimationId; + public Animation getWindUpAnimation() { + if (AnimationController.Instance == null) return null; + + return (Animation) AnimationController.Instance.get(windUpAnimationId); } public void setWindUpAnimationId(int windUpAnimationId) { this.windUpAnimationId = windUpAnimationId; } - public int getActiveAnimationId() { - return activeAnimationId; + public Animation getActiveAnimation() { + if (AnimationController.Instance == null) return null; + + return (Animation) AnimationController.Instance.get(activeAnimationId); } public void setActiveAnimationId(int activeAnimationId) { diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 246ebed46..a9c670647 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -154,7 +154,7 @@ public class DataAbilities { // Play active sound and animation playAbilitySound(currentAbility.getActiveSound()); - playAbilityAnimation(currentAbility.getActiveAnimationId()); + playAbilityAnimation(currentAbility.getActiveAnimation()); // Fire execute event (cancelable) AbilityEvent.ExecuteEvent executeEvent = new AbilityEvent.ExecuteEvent( @@ -359,7 +359,7 @@ public class DataAbilities { playAbilitySound(ability.getWindUpSound()); // Play wind up animation if configured - playAbilityAnimation(ability.getWindUpAnimationId()); + playAbilityAnimation(ability.getWindUpAnimation()); return true; } @@ -377,18 +377,23 @@ public class DataAbilities { * Play an animation on the NPC by ID. * Public so abilities can trigger animations directly if needed. * - * @param animationId The global animation ID to play, or -1 for none + * @param animation The animation to play, or null if none */ - public void playAbilityAnimation(int animationId) { - if (animationId < 0) return; + public void playAbilityAnimation(Animation animation) { + if (animation == null || animation.id < 0) return; if (AnimationController.Instance == null) return; - Animation animation = AnimationController.Instance.animations.get(animationId); - if (animation != null) { - npc.display.animationData.setEnabled(true); - npc.display.animationData.setAnimation(animation); - npc.display.animationData.updateClient(); - } + npc.display.animationData.setEnabled(true); + npc.display.animationData.setAnimation(animation); + npc.display.animationData.updateClient(); + } + + public void playAbilityAnimation(int animation) { + if (animation < 0) return; + if (AnimationController.Instance == null) return; + if (AnimationController.Instance.get(animation) == null) return; + + playAbilityAnimation((Animation) AnimationController.Instance.get(animation)); } /** diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 5f03cbd9f..6c5323707 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -127,8 +127,8 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Effects this.windUpSound = ability.getWindUpSound(); this.activeSound = ability.getActiveSound(); - this.windUpAnimationId = ability.getWindUpAnimationId(); - this.activeAnimationId = ability.getActiveAnimationId(); + this.windUpAnimationId = ability.getWindUpAnimation() != null ? ability.getWindUpAnimation().getID() : -1; + this.activeAnimationId = ability.getActiveAnimation() != null ? ability.getActiveAnimation().getID() : -1; // Telegraph this.showTelegraph = ability.isShowTelegraph(); From 747aae833749e346bd4bb8fa6151eb9272047f89 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 04:07:02 -0500 Subject: [PATCH 15/85] Recovery -> Dazed. Better cooldown logic handling --- .../kamkeel/npcs/command/AbilityCommand.java | 5 +- .../controllers/data/ability/Ability.java | 89 ++--- .../data/ability/AbilityAnimation.java | 6 +- .../data/ability/AbilityPhase.java | 2 +- .../data/ability/type/AbilityCharge.java | 6 +- .../data/ability/type/AbilityCutter.java | 20 +- .../data/ability/type/AbilityDash.java | 6 +- .../data/ability/type/AbilityDisc.java | 46 ++- .../data/ability/type/AbilityEnergyBeam.java | 46 ++- .../data/ability/type/AbilityGuard.java | 20 +- .../data/ability/type/AbilityHazard.java | 21 +- .../data/ability/type/AbilityHeal.java | 31 +- .../data/ability/type/AbilityHeavyHit.java | 12 +- .../data/ability/type/AbilityLaserShot.java | 13 +- .../data/ability/type/AbilityOrb.java | 46 ++- .../data/ability/type/AbilityProjectile.java | 7 +- .../data/ability/type/AbilityShockwave.java | 27 +- .../data/ability/type/AbilitySlam.java | 5 +- .../data/ability/type/AbilitySweeper.java | 46 ++- .../data/ability/type/AbilityTeleport.java | 14 +- .../data/ability/type/AbilityTrap.java | 22 +- .../data/ability/type/AbilityVortex.java | 6 +- .../kamkeel/npcs/util/AnchorPointHelper.java | 317 ++++++++++-------- src/main/java/noppes/npcs/DataAbilities.java | 51 +-- .../gui/advanced/SubGuiAbilityConfig.java | 47 +-- .../advanced/ability/SubGuiAbilityCutter.java | 15 +- .../advanced/ability/SubGuiAbilityGuard.java | 14 +- .../advanced/ability/SubGuiAbilityHazard.java | 23 +- .../advanced/ability/SubGuiAbilityHeal.java | 26 +- .../advanced/ability/SubGuiAbilityTrap.java | 23 +- 30 files changed, 577 insertions(+), 435 deletions(-) diff --git a/src/main/java/kamkeel/npcs/command/AbilityCommand.java b/src/main/java/kamkeel/npcs/command/AbilityCommand.java index 4a783f551..cf5e1ca58 100644 --- a/src/main/java/kamkeel/npcs/command/AbilityCommand.java +++ b/src/main/java/kamkeel/npcs/command/AbilityCommand.java @@ -119,8 +119,9 @@ public class AbilityCommand extends CommandKamkeelBase { sendResult(sender, " Type: \u00A7d" + ability.getTypeId()); sendResult(sender, " Cooldown: \u00A7e" + ability.getCooldownTicks() + " ticks"); sendResult(sender, " Wind Up: \u00A7e" + ability.getWindUpTicks() + " ticks"); - sendResult(sender, " Active: \u00A7e" + ability.getActiveTicks() + " ticks"); - sendResult(sender, " Recovery: \u00A7e" + ability.getRecoveryTicks() + " ticks"); + if (ability.isInterruptible()) { + sendResult(sender, " Dazed: \u00A7e" + ability.getDazedTicks() + " ticks"); + } sendResult(sender, " Range: \u00A7e" + ability.getMinRange() + " - " + ability.getMaxRange()); sendResult(sender, " Telegraph: \u00A7e" + (ability.isShowTelegraph() ? "Yes" : "No")); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 02d2227ad..e5dc7e493 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -47,18 +47,13 @@ public abstract class Ability implements IAbility { protected float maxRange = 20; // Timing (ticks) - protected int cooldownTicks = 100; + protected int cooldownTicks = 0; // Added to global cooldown after ability completes protected int windUpTicks = 20; - protected int activeTicks = 10; - protected int recoveryTicks = 20; + protected int dazedTicks = 80; // Only used when interrupted during WINDUP (if interruptible) // Interruption protected boolean interruptible = true; - // Wait for completion - if true, ability controls when active phase ends (ignores activeTicks) - // Used for abilities like Slam that need to wait for landing, or Beam that runs until entity dies - protected boolean waitForCompletion = false; - // Feedback protected boolean lockMovement = true; protected int windUpColor = 0x80FF4400; // Telegraph color during wind up @@ -507,11 +502,8 @@ public abstract class Ability implements IAbility { /** * Tick the ability forward. Called every game tick while executing. *

- * Normal flow: WINDUP -> ACTIVE -> IDLE (no recovery in normal completion) - * Interrupted flow: WINDUP -> RECOVERY -> IDLE (recovery only on interrupt) - *

- * If waitForCompletion is true, the ability controls when active ends - * by calling signalCompletion() instead of using activeTicks. + * Normal flow: WINDUP -> ACTIVE -> IDLE + * Interrupted flow: WINDUP -> DAZED -> IDLE (dazed only on interrupt during WINDUP) * * @return true if phase changed this tick */ @@ -529,18 +521,13 @@ public abstract class Ability implements IAbility { } break; case ACTIVE: - // If waitForCompletion is true, ability must call signalCompletion() - // Otherwise, auto-complete when activeTicks is reached - if (!waitForCompletion && currentTick >= activeTicks) { - phase = AbilityPhase.IDLE; - currentTick = 0; - return true; - } + // Abilities control their own completion by calling signalCompletion() + // No auto-complete - each ability determines when it's done break; - case RECOVERY: - // Recovery phase is only entered on interrupt - // Count down recoveryTicks then go to IDLE - if (currentTick >= recoveryTicks) { + case DAZED: + // Dazed phase is only entered on interrupt during WINDUP + // NPC cannot attack during this time + if (currentTick >= dazedTicks) { phase = AbilityPhase.IDLE; currentTick = 0; return true; @@ -552,13 +539,14 @@ public abstract class Ability implements IAbility { /** * Signal that the ability has completed its active phase. - * Called by abilities with waitForCompletion=true when they are done. + * Called by abilities when they are done. * For example, AbilitySlam calls this when the NPC lands. * * @return true if phase changed to IDLE */ public boolean signalCompletion() { if (phase == AbilityPhase.ACTIVE) { + cleanup(); phase = AbilityPhase.IDLE; currentTick = 0; return true; @@ -567,13 +555,14 @@ public abstract class Ability implements IAbility { } /** - * Interrupt this ability. Transitions to RECOVERY phase if interruptible. + * Interrupt this ability. Transitions to DAZED phase if interruptible during WINDUP. * Called when NPC takes direct damage during WINDUP. */ public void interrupt() { + cleanup(); if (interruptible && phase == AbilityPhase.WINDUP) { - // Interrupted during windup - go to recovery (dazed state) - phase = AbilityPhase.RECOVERY; + // Interrupted during windup - go to dazed state + phase = AbilityPhase.DAZED; currentTick = 0; } else { // Force stop - go directly to IDLE @@ -624,15 +613,25 @@ public abstract class Ability implements IAbility { } /** - * Reset all execution state (called on combat end) + * Reset all execution state (called on combat end, NPC death, target lost, etc.) */ public void reset() { + cleanup(); phase = AbilityPhase.IDLE; currentTick = 0; currentTarget = null; telegraphInstance = null; } + /** + * Cleanup any resources created by this ability. + * Override this to kill spawned entities, cancel telegraphs, etc. + * Called when ability ends for any reason (completion, interrupt, reset, NPC death). + */ + public void cleanup() { + // Override in subclasses to clean up spawned entities, etc. + } + // ═══════════════════════════════════════════════════════════════════ // CONDITION CHECKING // ═══════════════════════════════════════════════════════════════════ @@ -661,10 +660,8 @@ public abstract class Ability implements IAbility { nbt.setFloat("maxRange", maxRange); nbt.setInteger("cooldown", cooldownTicks); nbt.setInteger("windUp", windUpTicks); - nbt.setInteger("active", activeTicks); - nbt.setInteger("recovery", recoveryTicks); + nbt.setInteger("recovery", dazedTicks); nbt.setBoolean("interruptible", interruptible); - nbt.setBoolean("waitForCompletion", waitForCompletion); nbt.setBoolean("lockMovement", lockMovement); nbt.setInteger("windUpColor", windUpColor); nbt.setInteger("activeColor", activeColor); @@ -708,10 +705,8 @@ public abstract class Ability implements IAbility { maxRange = nbt.getFloat("maxRange"); cooldownTicks = nbt.getInteger("cooldown"); windUpTicks = nbt.getInteger("windUp"); - activeTicks = nbt.getInteger("active"); - recoveryTicks = nbt.getInteger("recovery"); + dazedTicks = nbt.getInteger("recovery"); interruptible = nbt.getBoolean("interruptible"); - waitForCompletion = nbt.getBoolean("waitForCompletion"); lockMovement = nbt.getBoolean("lockMovement"); // Support old telegraphColor key for backwards compatibility if (nbt.hasKey("windUpColor")) { @@ -857,20 +852,12 @@ public abstract class Ability implements IAbility { this.windUpTicks = Math.max(0, windUpTicks); } - public int getActiveTicks() { - return activeTicks; + public int getDazedTicks() { + return dazedTicks; } - public void setActiveTicks(int activeTicks) { - this.activeTicks = Math.max(1, activeTicks); - } - - public int getRecoveryTicks() { - return recoveryTicks; - } - - public void setRecoveryTicks(int recoveryTicks) { - this.recoveryTicks = Math.max(0, recoveryTicks); + public void setDazedTicks(int dazedTicks) { + this.dazedTicks = Math.max(0, dazedTicks); } public boolean isInterruptible() { @@ -881,14 +868,6 @@ public abstract class Ability implements IAbility { this.interruptible = interruptible; } - public boolean isWaitForCompletion() { - return waitForCompletion; - } - - public void setWaitForCompletion(boolean waitForCompletion) { - this.waitForCompletion = waitForCompletion; - } - public boolean isLockMovement() { return lockMovement; } @@ -978,7 +957,7 @@ public abstract class Ability implements IAbility { } /** - * Get the current execution phase as int (0=IDLE, 1=WINDUP, 2=ACTIVE, 3=RECOVERY). + * Get the current execution phase as int (0=IDLE, 1=WINDUP, 2=ACTIVE, 3=DAZED). * Required for IAbility interface. */ @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java index 4b7f2ba3e..3aea051f3 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java @@ -20,7 +20,7 @@ public enum AbilityAnimation {; animationNames.put(IDLE, idle); animationNames.put(WINDUP, windUp); animationNames.put(ACTIVE, active); - animationNames.put(RECOVERY, recovery); + animationNames.put(DAZED, recovery); } AbilityAnimation(String idle, String windUp, String active) { @@ -80,8 +80,8 @@ public enum AbilityAnimation {; return getAnimation(ACTIVE); } - public IAnimation recovery() { - return getAnimation(RECOVERY); + public IAnimation dazed() { + return getAnimation(DAZED); } private File getFileFromName(String fileName) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityPhase.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityPhase.java index 6338279ba..0611a0274 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityPhase.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityPhase.java @@ -4,5 +4,5 @@ public enum AbilityPhase { IDLE, // Not executing WINDUP, // Charging up (telegraph visible) ACTIVE, // Executing (damage happens) - RECOVERY // Finishing animation + DAZED // Stunned after interrupt during WINDUP (cannot attack) } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 696367ce8..7a1d9babf 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -46,10 +46,8 @@ public class AbilityCharge extends Ability { this.maxRange = 20.0f; this.minRange = 4.0f; this.lockMovement = false; // Movement IS the ability - this.cooldownTicks = 80; + this.cooldownTicks = 0; this.windUpTicks = 20; - this.activeTicks = 40; - this.recoveryTicks = 10; // LINE telegraph showing charge path this.telegraphType = TelegraphType.LINE; this.showTelegraph = true; @@ -161,11 +159,13 @@ public class AbilityCharge extends Ability { npc.motionX = 0; npc.motionZ = 0; npc.velocityChanged = true; + signalCompletion(); return; } if (isChargeBlocked(npc)) { stopMomentum(npc); + signalCompletion(); return; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 8274b4d79..b3052eeac 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -38,6 +38,7 @@ public class AbilityCutter extends Ability { private SweepMode sweepMode = SweepMode.SWIPE; private float sweepSpeed = 6.0f; + private int spinDurationTicks = 60; // Duration for SPIN mode private boolean piercing = true; private float innerRadius = 0.0f; @@ -52,10 +53,8 @@ public class AbilityCutter extends Ability { this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 8.0f; this.lockMovement = true; - this.cooldownTicks = 80; + this.cooldownTicks = 0; this.windUpTicks = 20; - this.activeTicks = 15; - this.recoveryTicks = 15; this.telegraphType = TelegraphType.CONE; this.windUpSound = "random.bow"; this.activeSound = "random.break"; @@ -110,6 +109,7 @@ public class AbilityCutter extends Ability { switch (sweepMode) { case SWIPE: if (currentRotation > arcAngle / 2.0f) { + signalCompletion(); // Swipe arc complete return; } performSweepDamage(npc, world, innerRadius, range, currentRotation); @@ -117,6 +117,10 @@ public class AbilityCutter extends Ability { break; case SPIN: + if (tick >= spinDurationTicks) { + signalCompletion(); // Spin duration complete + return; + } currentRotation = (currentRotation + sweepSpeed) % 360.0f; hitEntities.clear(); performSweepDamage(npc, world, innerRadius, range, currentRotation); @@ -195,6 +199,7 @@ public class AbilityCutter extends Ability { nbt.setFloat("knockback", knockback); nbt.setString("sweepMode", sweepMode.name()); nbt.setFloat("sweepSpeed", sweepSpeed); + nbt.setInteger("spinDurationTicks", spinDurationTicks); nbt.setBoolean("piercing", piercing); nbt.setFloat("innerRadius", innerRadius); } @@ -211,6 +216,7 @@ public class AbilityCutter extends Ability { this.sweepMode = SweepMode.SWIPE; } this.sweepSpeed = nbt.hasKey("sweepSpeed") ? nbt.getFloat("sweepSpeed") : 6.0f; + this.spinDurationTicks = nbt.hasKey("spinDurationTicks") ? nbt.getInteger("spinDurationTicks") : 60; this.piercing = !nbt.hasKey("piercing") || nbt.getBoolean("piercing"); this.innerRadius = nbt.hasKey("innerRadius") ? nbt.getFloat("innerRadius") : 0.0f; } @@ -264,6 +270,14 @@ public class AbilityCutter extends Ability { this.sweepSpeed = sweepSpeed; } + public int getSpinDurationTicks() { + return spinDurationTicks; + } + + public void setSpinDurationTicks(int spinDurationTicks) { + this.spinDurationTicks = Math.max(1, spinDurationTicks); + } + public boolean isPiercing() { return piercing; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 4edc18f82..586e402a8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -87,10 +87,8 @@ public class AbilityDash extends Ability { this.maxRange = 20.0f; this.minRange = 0.0f; this.lockMovement = false; - this.cooldownTicks = 40; + this.cooldownTicks = 0; this.windUpTicks = 5; - this.activeTicks = 8; - this.recoveryTicks = 10; // No telegraph for dash - it's a quick evasive move this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; @@ -174,6 +172,7 @@ public class AbilityDash extends Ability { npc.motionX = 0; npc.motionZ = 0; npc.velocityChanged = true; + signalCompletion(); return; } @@ -181,6 +180,7 @@ public class AbilityDash extends Ability { npc.motionX = 0; npc.motionZ = 0; npc.velocityChanged = true; + signalCompletion(); return; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 95dcd4afb..67fa23cdf 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -72,7 +72,7 @@ public class AbilityDisc extends Ability { private AnchorPoint anchorPoint = AnchorPoint.FRONT; // Transient state for disc entity (used during windup charging) - private transient int discEntityId = -1; + private transient EntityAbilityDisc discEntity = null; public AbilityDisc() { this.typeId = "ability.cnpc.disc"; @@ -80,10 +80,8 @@ public class AbilityDisc extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 30.0f; this.minRange = 5.0f; - this.cooldownTicks = 80; + this.cooldownTicks = 0; this.windUpTicks = 20; - this.activeTicks = 1; - this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } @@ -111,17 +109,19 @@ public class AbilityDisc extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (world.isRemote) return; - - // Find and start moving the disc that was spawned during windup - if (discEntityId != -1) { - Entity entity = world.getEntityByID(discEntityId); - if (entity instanceof EntityAbilityDisc) { - EntityAbilityDisc disc = (EntityAbilityDisc) entity; - disc.startMoving(target); - } - discEntityId = -1; + if (world.isRemote) { + signalCompletion(); + return; } + + // Start moving the disc that was spawned during windup + if (discEntity != null && !discEntity.isDead) { + discEntity.startMoving(target); + } + discEntity = null; + + // Disc entity manages itself - ability is done + signalCompletion(); } @Override @@ -131,7 +131,7 @@ public class AbilityDisc extends Ability { // Spawn disc in charging mode on first tick of windup if (tick == 1) { // Create disc in charging mode - follows NPC based on anchor point during windup - EntityAbilityDisc disc = EntityAbilityDisc.createCharging( + discEntity = EntityAbilityDisc.createCharging( world, npc, target, discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, @@ -145,8 +145,7 @@ public class AbilityDisc extends Ability { windUpTicks // Charge duration = windup duration ); - world.spawnEntityInWorld(disc); - discEntityId = disc.getEntityId(); + world.spawnEntityInWorld(discEntity); } } @@ -159,15 +158,12 @@ public class AbilityDisc extends Ability { } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - // Despawn charging disc if interrupted during windup - if (discEntityId != -1) { - Entity entity = npc.worldObj.getEntityByID(discEntityId); - if (entity != null) { - entity.setDead(); - } - discEntityId = -1; + public void cleanup() { + // Despawn disc entity if still alive + if (discEntity != null && !discEntity.isDead) { + discEntity.setDead(); } + discEntity = null; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 18969b43c..3bcc5072c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -71,7 +71,7 @@ public class AbilityEnergyBeam extends Ability { private AnchorPoint anchorPoint = AnchorPoint.FRONT; // Transient state for beam entity (used during windup charging) - private transient int beamEntityId = -1; + private transient EntityAbilityBeam beamEntity = null; public AbilityEnergyBeam() { this.typeId = "ability.cnpc.beam"; @@ -79,10 +79,8 @@ public class AbilityEnergyBeam extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 20.0f; this.minRange = 5.0f; - this.cooldownTicks = 150; + this.cooldownTicks = 0; this.windUpTicks = 40; - this.activeTicks = 200; // Match maxLifetime to keep NPC locked while beam is active - this.recoveryTicks = 5; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } @@ -110,17 +108,19 @@ public class AbilityEnergyBeam extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (world.isRemote) return; - - // Find and start firing the beam that was spawned during windup - if (beamEntityId != -1) { - Entity entity = world.getEntityByID(beamEntityId); - if (entity instanceof EntityAbilityBeam) { - EntityAbilityBeam beam = (EntityAbilityBeam) entity; - beam.startFiring(target); - } - beamEntityId = -1; + if (world.isRemote) { + signalCompletion(); + return; } + + // Start firing the beam that was spawned during windup + if (beamEntity != null && !beamEntity.isDead) { + beamEntity.startFiring(target); + } + beamEntity = null; + + // Beam entity manages itself - ability is done + signalCompletion(); } @Override @@ -132,7 +132,7 @@ public class AbilityEnergyBeam extends Ability { float offsetDist = 1.0f; // Create beam in charging mode - follows NPC based on anchor point during windup - EntityAbilityBeam beam = EntityAbilityBeam.createCharging( + beamEntity = EntityAbilityBeam.createCharging( world, npc, target, beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, @@ -147,8 +147,7 @@ public class AbilityEnergyBeam extends Ability { anchorPoint // Anchor point for charging position ); - world.spawnEntityInWorld(beam); - beamEntityId = beam.getEntityId(); + world.spawnEntityInWorld(beamEntity); } } @@ -161,15 +160,12 @@ public class AbilityEnergyBeam extends Ability { } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - // Despawn charging beam if interrupted during windup - if (beamEntityId != -1) { - Entity entity = npc.worldObj.getEntityByID(beamEntityId); - if (entity != null) { - entity.setDead(); - } - beamEntityId = -1; + public void cleanup() { + // Despawn beam entity if still alive + if (beamEntity != null && !beamEntity.isDead) { + beamEntity.setDead(); } + beamEntity = null; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 404589c6e..831ef97fd 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -25,6 +25,7 @@ public class AbilityGuard extends Ability { private static final Random RANDOM = new Random(); // Type-specific parameters + private int durationTicks = 60; private float damageReduction = 0.5f; private boolean canCounter = false; private CounterType counterType = CounterType.FLAT; @@ -48,10 +49,8 @@ public class AbilityGuard extends Ability { this.name = "Guard"; this.targetingMode = TargetingMode.SELF; this.lockMovement = true; - this.cooldownTicks = 120; + this.cooldownTicks = 0; this.windUpTicks = 10; - this.activeTicks = 60; - this.recoveryTicks = 10; this.interruptible = false; // Hard to interrupt while guarding // No telegraph for guard - it's a defensive stance this.telegraphType = TelegraphType.NONE; @@ -95,6 +94,11 @@ public class AbilityGuard extends Ability { if (canCounter && counterTriggered && lastAttacker != null && !world.isRemote) { performCounter(npc, world); } + + // Check if guard duration has ended + if (tick >= durationTicks) { + signalCompletion(); + } } /** @@ -175,6 +179,7 @@ public class AbilityGuard extends Ability { @Override public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setInteger("durationTicks", durationTicks); nbt.setFloat("damageReduction", damageReduction); nbt.setBoolean("canCounter", canCounter); nbt.setString("counterType", counterType.name()); @@ -186,6 +191,7 @@ public class AbilityGuard extends Ability { @Override public void readTypeNBT(NBTTagCompound nbt) { + this.durationTicks = nbt.hasKey("durationTicks") ? nbt.getInteger("durationTicks") : 60; this.damageReduction = nbt.hasKey("damageReduction") ? nbt.getFloat("damageReduction") : 0.5f; this.canCounter = nbt.hasKey("canCounter") && nbt.getBoolean("canCounter"); try { @@ -206,6 +212,14 @@ public class AbilityGuard extends Ability { } // Getters & Setters + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + public float getDamageReduction() { return damageReduction; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 3161c5dbe..3e9998f6f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -42,6 +42,7 @@ public class AbilityHazard extends Ability { FOLLOW_TARGET } + private int durationTicks = 100; private float radius = 4.0f; private float innerRadius = 0.0f; private float coneAngle = 45.0f; @@ -81,10 +82,8 @@ public class AbilityHazard extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 15.0f; this.lockMovement = true; - this.cooldownTicks = 200; + this.cooldownTicks = 0; this.windUpTicks = 30; - this.activeTicks = 100; - this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; } @@ -232,6 +231,12 @@ public class AbilityHazard extends Ability { public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; + // Check if hazard duration has ended + if (tick >= durationTicks) { + signalCompletion(); + return; + } + damagedThisTick.clear(); ticksSinceDamage++; @@ -342,6 +347,7 @@ public class AbilityHazard extends Ability { @Override public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setInteger("durationTicks", durationTicks); nbt.setFloat("radius", radius); nbt.setFloat("innerRadius", innerRadius); nbt.setFloat("coneAngle", coneAngle); @@ -366,6 +372,7 @@ public class AbilityHazard extends Ability { @Override public void readTypeNBT(NBTTagCompound nbt) { + this.durationTicks = nbt.hasKey("durationTicks") ? nbt.getInteger("durationTicks") : 100; this.radius = nbt.hasKey("radius") ? nbt.getFloat("radius") : 4.0f; this.innerRadius = nbt.hasKey("innerRadius") ? nbt.getFloat("innerRadius") : 0.0f; this.coneAngle = nbt.hasKey("coneAngle") ? nbt.getFloat("coneAngle") : 45.0f; @@ -404,6 +411,14 @@ public class AbilityHazard extends Ability { } // Getters & Setters + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + public float getRadius() { return radius; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 3cf04db2c..59ef4751a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -25,6 +25,7 @@ import java.util.List; public class AbilityHeal extends Ability { // Type-specific parameters + private int durationTicks = 60; private float healAmount = 10.0f; private float healPercent = 0.0f; private boolean healSelf = true; @@ -40,10 +41,8 @@ public class AbilityHeal extends Ability { this.name = "Heal"; this.targetingMode = TargetingMode.SELF; this.lockMovement = true; - this.cooldownTicks = 200; + this.cooldownTicks = 0; this.windUpTicks = 30; - this.activeTicks = 10; - this.recoveryTicks = 10; // No telegraph for heal - it's a self/ally buff this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; @@ -92,6 +91,9 @@ public class AbilityHeal extends Ability { healEntity(ally); spawnHealParticles(world, ally); } + + // Instant heal completes immediately + signalCompletion(); } // If not instant, HoT healing is applied in onActiveTick } @@ -100,16 +102,16 @@ public class AbilityHeal extends Ability { public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { if (world.isRemote || instantHeal) return; - // Heal over time - distribute heal across active ticks + // Heal over time - distribute heal across duration ticks if (tick % 10 == 0) { // Calculate tick-based heal for fixed amount - float tickHeal = (healAmount / (float) activeTicks) * 10; + float tickHeal = (healAmount / (float) durationTicks) * 10; if (healSelf) { float selfTickHeal = tickHeal; // Add percentage-based heal portion if (healPercent > 0) { - selfTickHeal += (npc.getMaxHealth() * healPercent / (float) activeTicks) * 10; + selfTickHeal += (npc.getMaxHealth() * healPercent / (float) durationTicks) * 10; } npc.heal(selfTickHeal); if (tick % 20 == 0) { @@ -123,7 +125,7 @@ public class AbilityHeal extends Ability { float allyTickHeal = tickHeal; // Add percentage-based heal portion for each ally if (healPercent > 0) { - allyTickHeal += (ally.getMaxHealth() * healPercent / (float) activeTicks) * 10; + allyTickHeal += (ally.getMaxHealth() * healPercent / (float) durationTicks) * 10; } ally.heal(allyTickHeal); if (tick % 20 == 0) { @@ -133,6 +135,11 @@ public class AbilityHeal extends Ability { } } } + + // Check if heal duration has ended + if (tick >= durationTicks) { + signalCompletion(); + } } /** @@ -202,6 +209,7 @@ public class AbilityHeal extends Ability { @Override public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setInteger("durationTicks", durationTicks); nbt.setFloat("healAmount", healAmount); nbt.setFloat("healPercent", healPercent); nbt.setBoolean("healSelf", healSelf); @@ -212,6 +220,7 @@ public class AbilityHeal extends Ability { @Override public void readTypeNBT(NBTTagCompound nbt) { + this.durationTicks = nbt.hasKey("durationTicks") ? nbt.getInteger("durationTicks") : 60; this.healAmount = nbt.hasKey("healAmount") ? nbt.getFloat("healAmount") : 10.0f; this.healPercent = nbt.hasKey("healPercent") ? nbt.getFloat("healPercent") : 0.0f; this.healSelf = !nbt.hasKey("healSelf") || nbt.getBoolean("healSelf"); @@ -221,6 +230,14 @@ public class AbilityHeal extends Ability { } // Getters & Setters + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + public float getHealAmount() { return healAmount; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index fc68200b7..32335daeb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -29,10 +29,8 @@ public class AbilityHeavyHit extends Ability { this.maxRange = 3.0f; this.minRange = 0.0f; this.lockMovement = true; - this.cooldownTicks = 80; + this.cooldownTicks = 0; this.windUpTicks = 30; - this.activeTicks = 5; - this.recoveryTicks = 10; this.telegraphType = TelegraphType.POINT; this.showTelegraph = false; this.windUpSound = "random.anvil_use"; @@ -63,7 +61,10 @@ public class AbilityHeavyHit extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (world.isRemote || target == null) return; + if (world.isRemote || target == null) { + signalCompletion(); + return; + } // Apply damage with scripted event support boolean wasHit = applyAbilityDamage(npc, target, damage, knockback); @@ -72,6 +73,9 @@ public class AbilityHeavyHit extends Ability { if (wasHit) { applyEffects(target); } + + // Heavy Hit is instant + signalCompletion(); } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 77df6ff35..8084aaad4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -60,10 +60,8 @@ public class AbilityLaserShot extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 35.0f; this.minRange = 3.0f; - this.cooldownTicks = 60; + this.cooldownTicks = 0; this.windUpTicks = 15; - this.activeTicks = 1; - this.recoveryTicks = 5; this.telegraphType = TelegraphType.LINE; this.showTelegraph = true; } @@ -101,7 +99,10 @@ public class AbilityLaserShot extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (world.isRemote) return; + if (world.isRemote) { + signalCompletion(); + return; + } double spawnX = npc.posX; double spawnY = npc.posY + npc.getEyeHeight() * 0.8; @@ -120,10 +121,14 @@ public class AbilityLaserShot extends Ability { ); world.spawnEntityInWorld(laser); + + // Laser entity manages itself - ability is done + signalCompletion(); } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // Laser entity manages itself } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 38ffd8db4..6bc6da964 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -69,7 +69,7 @@ public class AbilityOrb extends Ability { private AnchorPoint anchorPoint = AnchorPoint.FRONT; // Transient state for orb entity (used during windup charging) - private transient int orbEntityId = -1; + private transient EntityAbilityOrb orbEntity = null; public AbilityOrb() { this.typeId = "ability.cnpc.orb"; @@ -77,10 +77,8 @@ public class AbilityOrb extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 25.0f; this.minRange = 5.0f; - this.cooldownTicks = 100; + this.cooldownTicks = 0; this.windUpTicks = 30; - this.activeTicks = 1; // Minimal - just spawn and done - this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } @@ -108,17 +106,19 @@ public class AbilityOrb extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (world.isRemote) return; - - // Find and start moving the orb that was spawned during windup - if (orbEntityId != -1) { - Entity entity = world.getEntityByID(orbEntityId); - if (entity instanceof EntityAbilityOrb) { - EntityAbilityOrb orb = (EntityAbilityOrb) entity; - orb.startMoving(target); - } - orbEntityId = -1; + if (world.isRemote) { + signalCompletion(); + return; } + + // Start moving the orb that was spawned during windup + if (orbEntity != null && !orbEntity.isDead) { + orbEntity.startMoving(target); + } + orbEntity = null; + + // Orb entity manages itself - ability is done + signalCompletion(); } @Override @@ -128,7 +128,7 @@ public class AbilityOrb extends Ability { // Spawn orb in charging mode on first tick of windup if (tick == 1) { // Create orb in charging mode - follows NPC based on anchor point during windup - EntityAbilityOrb orb = EntityAbilityOrb.createCharging( + orbEntity = EntityAbilityOrb.createCharging( world, npc, target, orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, @@ -141,8 +141,7 @@ public class AbilityOrb extends Ability { windUpTicks // Charge duration = windup duration ); - world.spawnEntityInWorld(orb); - orbEntityId = orb.getEntityId(); + world.spawnEntityInWorld(orbEntity); } } @@ -157,15 +156,12 @@ public class AbilityOrb extends Ability { } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - // Despawn charging orb if interrupted during windup - if (orbEntityId != -1) { - Entity entity = npc.worldObj.getEntityByID(orbEntityId); - if (entity != null) { - entity.setDead(); - } - orbEntityId = -1; + public void cleanup() { + // Despawn orb entity if still alive + if (orbEntity != null && !orbEntity.isDead) { + orbEntity.setDead(); } + orbEntity = null; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 8ff9f5410..4a12ae4eb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -38,10 +38,8 @@ public class AbilityProjectile extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.minRange = 5.0f; this.maxRange = 20.0f; - this.cooldownTicks = 60; + this.cooldownTicks = 0; this.windUpTicks = 15; - this.activeTicks = 5; - this.recoveryTicks = 10; // No telegraph for projectile - it's a ranged attack this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; @@ -122,6 +120,9 @@ public class AbilityProjectile extends Ability { // Spawn projectile particles (visual trail) spawnProjectileParticles(world, npc, target); + + // Projectile is instant + signalCompletion(); } private void spawnProjectileParticles(World world, EntityNPCInterface npc, EntityLivingBase target) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index b5a35831f..71d888978 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -28,19 +28,14 @@ public class AbilityShockwave extends Ability { private float damage = 8.0f; private int maxTargets = 10; - // Runtime state - private transient boolean executed = false; - public AbilityShockwave() { this.typeId = "ability.cnpc.shockwave"; this.name = "Shockwave"; this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 15.0f; this.lockMovement = true; - this.cooldownTicks = 100; + this.cooldownTicks = 0; this.windUpTicks = 25; - this.activeTicks = 5; - this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "random.explode"; this.activeSound = "random.explode"; @@ -74,13 +69,7 @@ public class AbilityShockwave extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - executed = false; - } - - @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - if (executed) return; - executed = true; + // Shockwave is instant - apply effect immediately after windup // Get all entities in radius AxisAlignedBB box = npc.boundingBox.expand(pushRadius, pushRadius / 2, pushRadius); @@ -124,16 +113,14 @@ public class AbilityShockwave extends Ability { applyEffects(entity); } } + + // Shockwave completes instantly + signalCompletion(); } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - executed = false; - } - - @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - executed = false; + public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // Shockwave is instant - nothing to do per-tick } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index d2c17a3e8..dcb914a96 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -49,11 +49,8 @@ public class AbilitySlam extends Ability { this.name = "Slam"; this.targetingMode = TargetingMode.AOE_SELF; // Can also be AOE_TARGET to leap to target this.windUpTicks = 30; - this.activeTicks = 60; // Max time in air (used as timeout if waitForCompletion fails) - this.recoveryTicks = 10; - this.cooldownTicks = 100; + this.cooldownTicks = 0; this.lockMovement = true; - this.waitForCompletion = true; // Ability completes when NPC lands, not by activeTicks this.minRange = 2.0f; this.maxRange = 15.0f; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index b7ca2aa22..ca41ed6e3 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -54,10 +54,8 @@ public class AbilitySweeper extends Ability { this.maxRange = 15.0f; this.minRange = 0.0f; this.lockMovement = true; - this.cooldownTicks = 200; + this.cooldownTicks = 0; this.windUpTicks = 60; - this.activeTicks = 400; // Long duration - entity controls actual end - this.recoveryTicks = 5; // Short recovery // Circle telegraph to show range this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; @@ -86,36 +84,36 @@ public class AbilitySweeper extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (!world.isRemote) { - LogWriter.info("[Sweeper] onExecute called at NPC pos " + npc.posX + ", " + npc.posY + ", " + npc.posZ); - - // Spawn the entity that handles BOTH visuals AND damage - activeEntity = new EntityAbilitySweeper(world, npc, target, - beamLength, beamWidth, beamHeight, - innerColor, outerColor, outerColorEnabled, outerColorWidth, - sweepSpeed, numberOfRotations, - damage, damageInterval, piercing, - lockOnTarget); - world.spawnEntityInWorld(activeEntity); - - LogWriter.info("[Sweeper] Spawned sweeper entity"); + if (world.isRemote) { + signalCompletion(); + return; } + + LogWriter.info("[Sweeper] onExecute called at NPC pos " + npc.posX + ", " + npc.posY + ", " + npc.posZ); + + // Spawn the entity that handles BOTH visuals AND damage + activeEntity = new EntityAbilitySweeper(world, npc, target, + beamLength, beamWidth, beamHeight, + innerColor, outerColor, outerColorEnabled, outerColorWidth, + sweepSpeed, numberOfRotations, + damage, damageInterval, piercing, + lockOnTarget); + world.spawnEntityInWorld(activeEntity); + + LogWriter.info("[Sweeper] Spawned sweeper entity"); + // Entity manages itself - completion signaled from onActiveTick when entity dies } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // Entity handles everything - nothing to do here - // Check if entity died early (entity manages its own death based on rotations) - if (activeEntity != null && activeEntity.isDead) { - // Entity finished, ability can end early - // The ability system will handle the recovery phase + // Entity handles everything - check if entity finished its rotations + if (activeEntity == null || activeEntity.isDead) { + signalCompletion(); } } @Override - public void reset() { - super.reset(); - + public void cleanup() { // Clean up entity if still alive if (activeEntity != null && !activeEntity.isDead) { activeEntity.setDead(); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index a79223d5d..668b2f04d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -59,10 +59,8 @@ public class AbilityTeleport extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 30.0f; this.minRange = 5.0f; - this.cooldownTicks = 100; + this.cooldownTicks = 0; this.windUpTicks = 10; - this.activeTicks = 40; - this.recoveryTicks = 10; // No telegraph for teleport - it's instant repositioning this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; @@ -101,7 +99,10 @@ public class AbilityTeleport extends Ability { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { int blinkLimit = mode == TeleportMode.BLINK ? blinkCount : 1; - if (currentBlink >= blinkLimit) return; + if (currentBlink >= blinkLimit) { + signalCompletion(); + return; + } ticksSinceLastBlink++; @@ -109,6 +110,11 @@ public class AbilityTeleport extends Ability { performBlink(npc, target, world); currentBlink++; ticksSinceLastBlink = 0; + + // Check if this was the last blink + if (currentBlink >= blinkLimit) { + signalCompletion(); + } } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index 77ac4a5fe..dbb7273cd 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -34,6 +34,7 @@ public class AbilityTrap extends Ability { AHEAD_OF_CASTER } + private int durationTicks = 200; private TrapPlacement placement = TrapPlacement.AT_TARGET; private float placementDistance = 5.0f; private float triggerRadius = 2.0f; @@ -64,10 +65,8 @@ public class AbilityTrap extends Ability { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 15.0f; this.lockMovement = true; - this.cooldownTicks = 150; + this.cooldownTicks = 0; this.windUpTicks = 20; - this.activeTicks = 200; - this.recoveryTicks = 10; this.telegraphType = TelegraphType.CIRCLE; } @@ -180,6 +179,12 @@ public class AbilityTrap extends Ability { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // Check if trap duration has ended + if (tick >= durationTicks) { + signalCompletion(); + return; + } + if (!armed) { if (tick >= armTime) { armed = true; @@ -190,6 +195,7 @@ public class AbilityTrap extends Ability { ticksSinceLastTrigger++; if (maxTriggers > 0 && triggerCount >= maxTriggers) { + signalCompletion(); // All triggers used, trap is done return; } @@ -277,6 +283,7 @@ public class AbilityTrap extends Ability { @Override public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setInteger("durationTicks", durationTicks); nbt.setString("placement", placement.name()); nbt.setFloat("placementDistance", placementDistance); nbt.setFloat("triggerRadius", triggerRadius); @@ -294,6 +301,7 @@ public class AbilityTrap extends Ability { @Override public void readTypeNBT(NBTTagCompound nbt) { + this.durationTicks = nbt.hasKey("durationTicks") ? nbt.getInteger("durationTicks") : 200; try { this.placement = TrapPlacement.valueOf(nbt.getString("placement")); } catch (Exception e) { @@ -314,6 +322,14 @@ public class AbilityTrap extends Ability { } // Getters & Setters + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + public TrapPlacement getPlacement() { return placement; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index 666b19bbc..70c1c96b7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -46,10 +46,8 @@ public class AbilityVortex extends Ability { this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 15.0f; this.lockMovement = true; - this.cooldownTicks = 120; + this.cooldownTicks = 0; this.windUpTicks = 30; - this.activeTicks = 40; - this.recoveryTicks = 5; this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "mob.ghast.charge"; this.activeSound = "mob.ghast.fireball"; @@ -119,6 +117,7 @@ public class AbilityVortex extends Ability { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { if (pullComplete || pulledEntities.isEmpty()) { + signalCompletion(); return; } @@ -174,6 +173,7 @@ public class AbilityVortex extends Ability { if (!anyStillPulling && pulledEntities.isEmpty()) { pullComplete = true; + signalCompletion(); } } diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 5a7e32d28..593c8aa19 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -7,104 +7,87 @@ import noppes.npcs.constants.EnumAnimationPart; import noppes.npcs.controllers.data.AnimationData; import noppes.npcs.controllers.data.Frame; import noppes.npcs.controllers.data.FramePart; +import noppes.npcs.entity.EntityCustomNpc; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.entity.data.ModelScalePart; /** * Utility class for calculating world positions based on anchor points. - * Used for positioning charging effects on different body parts. - * Animation-aware: reads arm positions from NPC animation data when available. + * Supports both EntityNPCInterface and EntityPlayer with animation and model size awareness. */ public class AnchorPointHelper { - // ==================== TUNABLE CONSTANTS ==================== - // These can be adjusted to fine-tune positioning + // Default biped model constants (in model units, 1 unit = 1/16 block) + private static final float MODEL_SCALE = 1f / 16f; - // Shoulder position in model units (default biped arm rotation points) - private static final float SHOULDER_X_RIGHT = -5.0f; // Right arm is on the right side (-X in model space) - private static final float SHOULDER_X_LEFT = 5.0f; // Left arm is on the left side (+X in model space) - private static final float SHOULDER_Y = 2.0f; // Shoulder height from model origin - private static final float SHOULDER_Z = 0.0f; // Shoulder depth + // Shoulder position relative to model origin + private static final float SHOULDER_Y = 2f; + private static final float SHOULDER_X_OFFSET = 5f; // Distance from center to shoulder - // Hand offset in model units (where items are held, relative to shoulder after rotation) - // In arm's local space: X = toward/away from body, Y = down the arm, Z = forward/back - private static float HAND_OFFSET_X_RIGHT = -2.0f; // Slightly toward body for right - private static float HAND_OFFSET_X_LEFT = 2.0f; // Slightly toward body for left - private static float HAND_OFFSET_Y = 14.0f; // Down the arm (arm is ~12 units long) - private static float HAND_OFFSET_Z = 0.0f; // Forward from arm + // Palm position (in arm's local space, relative to shoulder) + // Arm is 12 units long; palm is near the end + private static final float PALM_DOWN = 11f; // Distance down the arm to palm center + private static final float PALM_FORWARD = 2f; // Forward offset to palm surface (not center of hand) + private static final float PALM_INWARD = 0f; // Lateral offset (0 = centered on arm) - // Height of shoulder relative to entity position (feet) - private static final float SHOULDER_HEIGHT_BLOCKS = 1.35f; + // Default height offsets as fraction of entity height + private static final float FRONT_HEIGHT = 0.7f; + private static final float CENTER_HEIGHT = 0.5f; + private static final float ARM_HEIGHT = 0.75f; + private static final float ABOVE_HEAD_HEIGHT = 1.2f; + private static final float CHEST_HEIGHT = 0.65f; - // Model scale factor (1/16 - converts model units to blocks) - private static final float MODEL_SCALE = 0.0625f; + // Distance in front for FRONT anchor + private static final float DEFAULT_FRONT_DISTANCE = 1.0f; - // Fallback offsets (in blocks) when no animation - private static final float ARM_LATERAL_OFFSET = 0.35f; - private static final float ARM_FORWARD_OFFSET = 0.3f; - private static final float FRONT_OFFSET = 1.0f; - - // Height multipliers relative to eye height - private static final float FRONT_HEIGHT_MULT = 0.7f; - private static final float CENTER_HEIGHT_MULT = 0.5f; - private static final float ARM_HEIGHT_MULT = 0.75f; - private static final float ABOVE_HEAD_HEIGHT_MULT = 1.3f; - private static final float CHEST_HEIGHT_MULT = 0.5f; + // Fallback arm positioning (when no animation) + private static final float FALLBACK_LATERAL = 0.35f; + private static final float FALLBACK_FORWARD = 0.3f; /** - * Calculate the world position for a given anchor point on an entity. + * Calculate world position for an anchor point on an entity. */ public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor) { - return calculateAnchorPosition(entity, anchor, FRONT_OFFSET); + return calculateAnchorPosition(entity, anchor, DEFAULT_FRONT_DISTANCE); } /** - * Calculate the world position for a given anchor point on an entity. + * Calculate world position for an anchor point with custom front offset. */ public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor, float frontOffset) { + float scale = getModelScale(entity); + float height = entity.height; + double x = entity.posX; double y = entity.posY; double z = entity.posZ; - float eyeHeight = entity.getEyeHeight(); - // Body yaw in radians (used for arm positioning) - // Minecraft: yaw 0 = south (+Z), 90 = west (-X), 180 = north (-Z), 270 = east (+X) - float bodyYawRad = (float) Math.toRadians(entity.renderYawOffset); - float headYawRad = (float) Math.toRadians(entity.rotationYawHead); + float headYaw = (float) Math.toRadians(entity.rotationYawHead); + float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); switch (anchor) { case FRONT: - // In front of entity face (use head yaw) - x -= Math.sin(headYawRad) * frontOffset; - y += eyeHeight * FRONT_HEIGHT_MULT; - z += Math.cos(headYawRad) * frontOffset; + x -= Math.sin(headYaw) * frontOffset * scale; + y += height * FRONT_HEIGHT; + z += Math.cos(headYaw) * frontOffset * scale; break; case CENTER: - y += eyeHeight * CENTER_HEIGHT_MULT; + y += height * CENTER_HEIGHT; break; case RIGHT_HAND: - Vec3 rightPos = getAnimatedHandPosition(entity, true); - if (rightPos != null) { - return rightPos; - } - // Fallback - return calculateFallbackHandPosition(entity, bodyYawRad, true); + return calculateHandPosition(entity, true, scale); case LEFT_HAND: - Vec3 leftPos = getAnimatedHandPosition(entity, false); - if (leftPos != null) { - return leftPos; - } - // Fallback - return calculateFallbackHandPosition(entity, bodyYawRad, false); + return calculateHandPosition(entity, false, scale); case ABOVE_HEAD: - y += eyeHeight * ABOVE_HEAD_HEIGHT_MULT; + y += height * ABOVE_HEAD_HEIGHT; break; case CHEST: - y += eyeHeight * CHEST_HEIGHT_MULT; + y += height * CHEST_HEIGHT; break; } @@ -112,17 +95,51 @@ public class AnchorPointHelper { } /** - * Calculate hand position using NPC animation data. - * Uses the same transformation logic as the renderer. + * Get model scale factor for an entity. + * NPCs have configurable model size, players use default scale. */ - private static Vec3 getAnimatedHandPosition(EntityLivingBase entity, boolean rightArm) { - if (!(entity instanceof EntityNPCInterface)) { - return null; + private static float getModelScale(EntityLivingBase entity) { + if (entity instanceof EntityNPCInterface) { + int modelSize = ((EntityNPCInterface) entity).display.modelSize; + return modelSize / 5f; // modelSize 5 = 100% scale + } + return 1f; + } + + // Default arm scale (no scaling) + private static final ModelScalePart DEFAULT_ARM_SCALE = new ModelScalePart(); + + /** + * Get arm scale for an entity. + * EntityCustomNpc has per-part scaling, others use default (1,1,1). + */ + private static ModelScalePart getArmScale(EntityLivingBase entity) { + if (entity instanceof EntityCustomNpc) { + return ((EntityCustomNpc) entity).modelData.modelScale.arms; + } + return DEFAULT_ARM_SCALE; + } + + /** + * Calculate hand position using animation data if available. + */ + private static Vec3 calculateHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + // Try to get animated position first + Vec3 animatedPos = getAnimatedHandPosition(entity, rightHand, scale); + if (animatedPos != null) { + return animatedPos; } - EntityNPCInterface npc = (EntityNPCInterface) entity; - AnimationData animData = npc.display.animationData; + // Fallback to static position + return calculateFallbackHandPosition(entity, rightHand, scale); + } + /** + * Calculate hand position from animation data. + * Works for both NPCs and Players. + */ + private static Vec3 getAnimatedHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + AnimationData animData = AnimationData.getData(entity); if (animData == null || !animData.isActive() || animData.animation == null) { return null; } @@ -132,146 +149,172 @@ public class AnchorPointHelper { return null; } - EnumAnimationPart armPart = rightArm ? EnumAnimationPart.RIGHT_ARM : EnumAnimationPart.LEFT_ARM; - if (!frame.frameParts.containsKey(armPart)) { - return null; - } - + EnumAnimationPart armPart = rightHand ? EnumAnimationPart.RIGHT_ARM : EnumAnimationPart.LEFT_ARM; FramePart part = frame.frameParts.get(armPart); if (part == null) { return null; } - // Ensure interpolation is up to date - part.interpolateOffset(); - part.interpolateAngles(); + // Get arm scale for EntityCustomNpc + ModelScalePart armScale = getArmScale(entity); - // === STEP 1: Get shoulder position in model space === - float shoulderX = rightArm ? SHOULDER_X_RIGHT : SHOULDER_X_LEFT; + // Get rotation and pivot values + float[] rotations = getRotations(part, entity); + float[] pivots = getPivots(part, entity); + + // Shoulder position in model space + float shoulderX = rightHand ? -SHOULDER_X_OFFSET : SHOULDER_X_OFFSET; float shoulderY = SHOULDER_Y; - float shoulderZ = SHOULDER_Z; + float shoulderZ = 0f; - // Add animation pivot offsets - if (part.prevPivots != null) { - shoulderX += part.prevPivots[0]; - shoulderY += part.prevPivots[1]; - shoulderZ += part.prevPivots[2]; - } + // Add pivot offsets + shoulderX += pivots[0]; + shoulderY += pivots[1]; + shoulderZ += pivots[2]; - // === STEP 2: Get hand offset in arm's local space === - float handX = rightArm ? HAND_OFFSET_X_RIGHT : HAND_OFFSET_X_LEFT; - float handY = HAND_OFFSET_Y; - float handZ = HAND_OFFSET_Z; + // Palm offset in arm's local space (before rotation) + // Apply arm scaling to the palm position + float palmX = (rightHand ? -PALM_INWARD : PALM_INWARD) * armScale.scaleX; + float palmY = PALM_DOWN * armScale.scaleY; + float palmZ = PALM_FORWARD * armScale.scaleZ; - // === STEP 3: Apply arm rotations to hand offset (Z → Y → X order) === - // Rotations are in radians (already converted by interpolateAngles) - float rotX = part.prevRotations != null ? part.prevRotations[0] : 0; - float rotY = part.prevRotations != null ? part.prevRotations[1] : 0; - float rotZ = part.prevRotations != null ? part.prevRotations[2] : 0; + // Apply arm rotations (order: Z -> Y -> X) + double hx = palmX, hy = palmY, hz = palmZ; - // Start with hand offset - double hx = handX; - double hy = handY; - double hz = handZ; - - // Apply Z rotation first - double cosZ = Math.cos(rotZ); - double sinZ = Math.sin(rotZ); + // Z rotation + double cosZ = Math.cos(rotations[2]); + double sinZ = Math.sin(rotations[2]); double newX = hx * cosZ - hy * sinZ; double newY = hx * sinZ + hy * cosZ; hx = newX; hy = newY; - // Apply Y rotation - double cosY = Math.cos(rotY); - double sinY = Math.sin(rotY); + // Y rotation + double cosY = Math.cos(rotations[1]); + double sinY = Math.sin(rotations[1]); newX = hx * cosY + hz * sinY; double newZ = -hx * sinY + hz * cosY; hx = newX; hz = newZ; - // Apply X rotation - double cosX = Math.cos(rotX); - double sinX = Math.sin(rotX); + // X rotation + double cosX = Math.cos(rotations[0]); + double sinX = Math.sin(rotations[0]); newY = hy * cosX - hz * sinX; newZ = hy * sinX + hz * cosX; hy = newY; hz = newZ; - // === STEP 4: Combine shoulder + rotated hand offset (in model units) === + // Combine shoulder + rotated hand offset double modelX = shoulderX + hx; double modelY = shoulderY + hy; double modelZ = shoulderZ + hz; - // === STEP 5: Convert to blocks === - double blockX = modelX * MODEL_SCALE; - double blockY = modelY * MODEL_SCALE; - double blockZ = modelZ * MODEL_SCALE; + // Convert to blocks and apply model scale + double blockX = modelX * MODEL_SCALE * scale; + double blockY = modelY * MODEL_SCALE * scale; + double blockZ = modelZ * MODEL_SCALE * scale; - // === STEP 6: Apply body yaw rotation === - // In model space: +X = left, -X = right, +Z = back, -Z = front - // Need to rotate to align with entity's facing direction + // Apply body yaw rotation float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); double cosYaw = Math.cos(bodyYaw); double sinYaw = Math.sin(bodyYaw); - // Rotate around Y axis (body rotation) double worldOffsetX = blockX * cosYaw + blockZ * sinYaw; double worldOffsetZ = -blockX * sinYaw + blockZ * cosYaw; - // === STEP 7: Final world position === + // Calculate shoulder height based on entity and scale + float shoulderHeight = entity.height * ARM_HEIGHT; + + // Final world position double worldX = entity.posX + worldOffsetX; - double worldY = entity.posY + SHOULDER_HEIGHT_BLOCKS - blockY; // Subtract because +Y in model is down + double worldY = entity.posY + shoulderHeight - blockY; double worldZ = entity.posZ + worldOffsetZ; return Vec3.createVectorHelper(worldX, worldY, worldZ); } + /** + * Get rotation values from FramePart. + * Uses interpolated values on client, raw values on server. + */ + private static float[] getRotations(FramePart part, EntityLivingBase entity) { + if (entity.worldObj.isRemote) { + // Client side - use interpolated values (already in radians) + part.interpolateAngles(); + return part.prevRotations; + } else { + // Server side - convert raw degrees to radians + float pi = (float) Math.PI / 180f; + return new float[]{ + part.rotation[0] * pi, + part.rotation[1] * pi, + part.rotation[2] * pi + }; + } + } + + /** + * Get pivot values from FramePart. + * Uses interpolated values on client, raw values on server. + */ + private static float[] getPivots(FramePart part, EntityLivingBase entity) { + if (entity.worldObj.isRemote) { + // Client side - use interpolated values + part.interpolateOffset(); + return part.prevPivots; + } else { + // Server side - use raw values + return part.pivot; + } + } + /** * Calculate fallback hand position when no animation is active. */ - private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, float bodyYawRad, boolean rightHand) { - double x = entity.posX; - double y = entity.posY; - double z = entity.posZ; - float eyeHeight = entity.getEyeHeight(); + private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); + + // Get arm scale for EntityCustomNpc + ModelScalePart armScale = getArmScale(entity); // Perpendicular direction for lateral offset - float perpYaw = bodyYawRad + (float) (rightHand ? Math.PI / 2 : -Math.PI / 2); + float perpYaw = bodyYaw + (rightHand ? (float) (Math.PI / 2) : (float) (-Math.PI / 2)); - // Lateral offset (perpendicular to body facing) - double lateralX = -Math.sin(perpYaw) * ARM_LATERAL_OFFSET; - double lateralZ = Math.cos(perpYaw) * ARM_LATERAL_OFFSET; + // Calculate offsets scaled by model size and arm scale + double lateralX = -Math.sin(perpYaw) * FALLBACK_LATERAL * scale * armScale.scaleX; + double lateralZ = Math.cos(perpYaw) * FALLBACK_LATERAL * scale * armScale.scaleX; + double forwardX = -Math.sin(bodyYaw) * FALLBACK_FORWARD * scale * armScale.scaleZ; + double forwardZ = Math.cos(bodyYaw) * FALLBACK_FORWARD * scale * armScale.scaleZ; - // Forward offset (in facing direction) - double forwardX = -Math.sin(bodyYawRad) * ARM_FORWARD_OFFSET; - double forwardZ = Math.cos(bodyYawRad) * ARM_FORWARD_OFFSET; + // Arm length affects vertical position + double armLengthOffset = (1 - armScale.scaleY) * 0.3; - x += lateralX + forwardX; - y += eyeHeight * ARM_HEIGHT_MULT; - z += lateralZ + forwardZ; + double x = entity.posX + lateralX + forwardX; + double y = entity.posY + entity.height * ARM_HEIGHT - armLengthOffset; + double z = entity.posZ + lateralZ + forwardZ; return Vec3.createVectorHelper(x, y, z); } /** - * Get the height multiplier for a given anchor point. + * Get default height multiplier for an anchor point. */ public static float getHeightMultiplier(AnchorPoint anchor) { switch (anchor) { case FRONT: - return FRONT_HEIGHT_MULT; + return FRONT_HEIGHT; case CENTER: - return CENTER_HEIGHT_MULT; + return CENTER_HEIGHT; case RIGHT_HAND: case LEFT_HAND: - return ARM_HEIGHT_MULT; + return ARM_HEIGHT; case ABOVE_HEAD: - return ABOVE_HEAD_HEIGHT_MULT; + return ABOVE_HEAD_HEIGHT; case CHEST: - return CHEST_HEIGHT_MULT; + return CHEST_HEIGHT; default: - return FRONT_HEIGHT_MULT; + return FRONT_HEIGHT; } } } diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index a9c670647..92bb1241c 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -170,8 +170,8 @@ public class DataAbilities { currentAbility.onActiveTick(npc, target, npc.worldObj, currentAbility.getCurrentTick()); break; - case RECOVERY: - // Recovery phase - just wait + case DAZED: + // Dazed phase - NPC cannot attack, just wait for daze to end break; case IDLE: @@ -222,12 +222,10 @@ public class DataAbilities { releaseLockedRotation(); // Calculate cooldown: random(min, max) + ability offset - int baseCooldown = minCooldown; - if (maxCooldown > minCooldown) { - baseCooldown = minCooldown + random.nextInt(maxCooldown - minCooldown + 1); - } - int totalCooldown = baseCooldown + currentAbility.getCooldownTicks(); - cooldownEndTime = npc.worldObj.getTotalWorldTime() + totalCooldown; + int abilityCooldownOffset = currentAbility.getCooldownTicks(); + rollCooldown(); + // Add ability-specific cooldown offset + cooldownEndTime += abilityCooldownOffset; currentAbility = null; lastTarget = null; @@ -539,8 +537,8 @@ public class DataAbilities { /** * Interrupt the currently executing ability. - * The ability will transition to RECOVERY phase (dazed state) and continue ticking. - * When RECOVERY completes, the ability will move to IDLE and onAbilityComplete() is called. + * If interrupted during WINDUP, the ability will transition to DAZED phase. + * When DAZED completes, the ability will move to IDLE and onAbilityComplete() is called. */ public void interruptCurrentAbility(DamageSource source, float damage) { if (currentAbility != null) { @@ -559,10 +557,10 @@ public class DataAbilities { NpcAPI.EVENT_BUS.post(interruptEvent); currentAbility.onInterrupt(npc, source, damage); - currentAbility.interrupt(); // This now transitions to RECOVERY, not IDLE + currentAbility.interrupt(); // Transitions to DAZED if interrupted during WINDUP - // Don't clear currentAbility - let it tick through RECOVERY phase - // When RECOVERY ends and phase becomes IDLE, onAbilityComplete() will be called + // Don't clear currentAbility - let it tick through DAZED phase + // When DAZED ends and phase becomes IDLE, onAbilityComplete() will be called } } @@ -631,10 +629,13 @@ public class DataAbilities { /** * Reset all runtime state (cooldowns, current ability). * Called when NPC respawns or combat ends. + * Rolls cooldown so NPC doesn't immediately use an ability. */ public void reset() { stopCurrentAbility(); - resetCooldown(); + + // Roll cooldown so NPC doesn't immediately attack after reset + rollCooldown(); // Reset execution state on all abilities for (Ability ability : abilities) { @@ -642,6 +643,18 @@ public class DataAbilities { } } + /** + * Roll a new cooldown using the min/max range. + * Called after ability completes and on reset. + */ + private void rollCooldown() { + int baseCooldown = minCooldown; + if (maxCooldown > minCooldown) { + baseCooldown = minCooldown + random.nextInt(maxCooldown - minCooldown + 1); + } + cooldownEndTime = npc.worldObj.getTotalWorldTime() + baseCooldown; + } + // ═══════════════════════════════════════════════════════════════════ // ABILITY LIST MANAGEMENT // ═══════════════════════════════════════════════════════════════════ @@ -706,7 +719,7 @@ public class DataAbilities { * Rules: * - WINDUP phase: Block AI if lockMovement is true * - ACTIVE phase: Block AI if lockMovement OR hasAbilityMovement is true - * - RECOVERY phase: Block AI if lockMovement is true + * - DAZED phase: Always block AI (NPC is stunned) */ public boolean isAbilityControllingMovement() { if (currentAbility == null || !currentAbility.isExecuting()) { @@ -727,9 +740,9 @@ public class DataAbilities { // - hasAbilityMovement is true (ability is moving the NPC itself) return currentAbility.isLockMovement() || currentAbility.hasAbilityMovement(); - case RECOVERY: - // During recovery, block if lockMovement is set - return currentAbility.isLockMovement(); + case DAZED: + // During dazed phase, always block - NPC is stunned from interrupt + return true; default: return false; @@ -739,7 +752,7 @@ public class DataAbilities { /** * Check if NPC's look direction should be locked to target. * Only locks during ACTIVE phase when lockMovement is true. - * This allows the NPC to freely track target during WINDUP and RECOVERY. + * This allows the NPC to freely track target during WINDUP and DAZED. */ public boolean shouldLockLookDirection() { if (currentAbility == null || !currentAbility.isExecuting()) { diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 6c5323707..040c999a4 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -61,8 +61,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Timing protected int cooldownTicks; protected int windUpTicks; - protected int activeTicks; - protected int recoveryTicks; + protected int dazedTicks; // ═══════════════════════════════════════════════════════════════════════════ // CACHED VALUES - Target Tab @@ -115,8 +114,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Timing this.cooldownTicks = ability.getCooldownTicks(); this.windUpTicks = ability.getWindUpTicks(); - this.activeTicks = ability.getActiveTicks(); - this.recoveryTicks = ability.getRecoveryTicks(); + this.dazedTicks = ability.getDazedTicks(); // Target this.minRange = ability.getMinRange(); @@ -254,42 +252,36 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi y += 24; - // Row 3: Interruptible + // Row 3: Interruptible + Dazed Ticks (only if interruptible) addLabel(new GuiNpcLabel(6, "ability.interruptible", col1LabelX, y + 5)); addButton(new GuiNpcButton(14, guiLeft + 85, y, 40, 20, new String[]{"gui.no", "gui.yes"}, interruptible ? 1 : 0)); + // Only show dazed ticks if interruptible is enabled + if (interruptible) { + addLabel(new GuiNpcLabel(12, "ability.dazed", col2LabelX, y + 5)); + GuiNpcTextField dazedField = new GuiNpcTextField(13, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(dazedTicks)); + dazedField.setIntegersOnly(); + dazedField.setMinMaxDefault(0, 1000, 80); + addTextField(dazedField); + } + y += 28; // Separator - Timing section header addLabel(new GuiNpcLabel(7, "ability.timing", col1LabelX, y)); y += 14; - // Row 4: Windup Ticks + Active Ticks + // Row 4: Windup Ticks + Cooldown Ticks addLabel(new GuiNpcLabel(10, "ability.windup", col1LabelX, y + 5)); GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(windUpTicks)); windupField.setIntegersOnly(); windupField.setMinMaxDefault(0, 1000, 20); addTextField(windupField); - addLabel(new GuiNpcLabel(11, "ability.active", col2LabelX, y + 5)); - GuiNpcTextField activeField = new GuiNpcTextField(12, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(activeTicks)); - activeField.setIntegersOnly(); - activeField.setMinMaxDefault(1, 1000, 10); - addTextField(activeField); - - y += 24; - - // Row 5: Recovery Ticks + Cooldown Ticks - addLabel(new GuiNpcLabel(12, "ability.recovery", col1LabelX, y + 5)); - GuiNpcTextField recoveryField = new GuiNpcTextField(13, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(recoveryTicks)); - recoveryField.setIntegersOnly(); - recoveryField.setMinMaxDefault(0, 1000, 20); - addTextField(recoveryField); - addLabel(new GuiNpcLabel(13, "ability.cooldown", col2LabelX, y + 5)); GuiNpcTextField cooldownField = new GuiNpcTextField(10, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(cooldownTicks)); cooldownField.setIntegersOnly(); - cooldownField.setMinMaxDefault(0, 10000, 100); + cooldownField.setMinMaxDefault(0, 10000, 0); addTextField(cooldownField); } @@ -632,6 +624,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // General tab buttons else if (id == 14) { interruptible = ((GuiNpcButton) guibutton).getValue() == 1; + initGui(); // Refresh to show/hide dazed ticks field } else if (id == 16) { lockMovement = ((GuiNpcButton) guibutton).getValue() == 1; } @@ -764,10 +757,8 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi cooldownTicks = textField.getInteger(); } else if (id == 11) { windUpTicks = textField.getInteger(); - } else if (id == 12) { - activeTicks = textField.getInteger(); } else if (id == 13) { - recoveryTicks = textField.getInteger(); + dazedTicks = textField.getInteger(); } // Visual-specific fields (200+) - delegate to subclass @@ -865,8 +856,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Timing ability.setCooldownTicks(cooldownTicks); ability.setWindUpTicks(windUpTicks); - ability.setActiveTicks(activeTicks); - ability.setRecoveryTicks(recoveryTicks); + ability.setDazedTicks(dazedTicks); // Target ability.setMinRange(minRange); @@ -914,8 +904,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.cooldownTicks = ability.getCooldownTicks(); this.windUpTicks = ability.getWindUpTicks(); - this.activeTicks = ability.getActiveTicks(); - this.recoveryTicks = ability.getRecoveryTicks(); + this.dazedTicks = ability.getDazedTicks(); this.minRange = ability.getMinRange(); this.maxRange = ability.getMaxRange(); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java index 10f5ab8c1..f3dbc64c7 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java @@ -68,8 +68,15 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { y += 24; - // Row 5: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); + // Row 5: Spin Duration (only for SPIN mode) + Effects button + if (cutter.getSweepMode() == AbilityCutter.SweepMode.SPIN) { + addLabel(new GuiNpcLabel(108, "ability.duration", labelX, y + 5)); + GuiNpcTextField durationField = createIntField(108, fieldX, y, 50, cutter.getSpinDurationTicks()); + durationField.setMinMaxDefault(1, 1000, 60); + addTextField(durationField); + } + + addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); } @Override @@ -78,6 +85,7 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { switch (id) { case 106: cutter.setSweepMode(AbilityCutter.SweepMode.values()[value]); + initGui(); // Refresh to show/hide duration field break; case 107: cutter.setPiercing(value == 1); @@ -121,6 +129,9 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { case 105: cutter.setSweepSpeed(parseFloat(field, cutter.getSweepSpeed())); break; + case 108: + cutter.setSpinDurationTicks(field.getInteger()); + break; } } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java index 25383c926..183d66814 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java @@ -31,9 +31,14 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 165; int col2FieldX = guiLeft + 225; - // Row 1: Damage Reduction - addLabel(new GuiNpcLabel(100, "ability.dmgReduce", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, guard.getDamageReduction())); + // Row 1: Duration + Damage Reduction + addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); + GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, guard.getDurationTicks()); + durationField.setMinMaxDefault(1, 1000, 60); + addTextField(durationField); + + addLabel(new GuiNpcLabel(100, "ability.dmgReduce", col2LabelX, y + 5)); + addTextField(createFloatField(100, col2FieldX, y, 50, guard.getDamageReduction())); y += 24; @@ -112,6 +117,9 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { + case 99: + guard.setDurationTicks(field.getInteger()); + break; case 100: guard.setDamageReduction(parseFloat(field, guard.getDamageReduction())); break; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java index 8a91798d0..c9633c0f9 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java @@ -31,14 +31,22 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 145; int col2FieldX = guiLeft + 205; - // Row 1: Shape + Placement - addLabel(new GuiNpcLabel(100, "ability.shape", labelX, y + 5)); - String[] shapes = {"Circle", "Ring", "Cone"}; - addButton(new GuiNpcButton(100, fieldX, y, 55, 20, shapes, hazard.getShape().ordinal())); + // Row 1: Duration + Shape + addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); + GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, hazard.getDurationTicks()); + durationField.setMinMaxDefault(1, 2000, 100); + addTextField(durationField); - addLabel(new GuiNpcLabel(101, "ability.placement", col2LabelX, y + 5)); + addLabel(new GuiNpcLabel(100, "ability.shape", col2LabelX, y + 5)); + String[] shapes = {"Circle", "Ring", "Cone"}; + addButton(new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShape().ordinal())); + + y += 24; + + // Row 2: Placement + addLabel(new GuiNpcLabel(101, "ability.placement", labelX, y + 5)); String[] placements = {"Caster", "Target", "FollowCast", "FollowTgt"}; - addButton(new GuiNpcButton(101, col2FieldX, y, 60, 20, placements, hazard.getPlacement().ordinal())); + addButton(new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacement().ordinal())); y += 24; @@ -116,6 +124,9 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { + case 99: + hazard.setDurationTicks(field.getInteger()); + break; case 102: hazard.setRadius(parseFloat(field, hazard.getRadius())); break; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java index 8b679fb25..010da51cf 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java @@ -27,7 +27,20 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 145; int col2FieldX = guiLeft + 205; - // Row 1: Heal Amount + Heal Percent + // Row 1: Instant Heal + Duration (only shown if not instant) + addLabel(new GuiNpcLabel(103, "dialog.instant", labelX, y + 5)); + addButton(new GuiNpcButton(103, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isInstantHeal() ? 1 : 0)); + + if (!heal.isInstantHeal()) { + addLabel(new GuiNpcLabel(99, "ability.duration", col2LabelX, y + 5)); + GuiNpcTextField durationField = createIntField(99, col2FieldX, y, 50, heal.getDurationTicks()); + durationField.setMinMaxDefault(1, 1000, 60); + addTextField(durationField); + } + + y += 24; + + // Row 2: Heal Amount + Heal Percent addLabel(new GuiNpcLabel(100, "ability.healAmount", labelX, y + 5)); addTextField(createFloatField(100, fieldX, y, 50, heal.getHealAmount())); @@ -36,16 +49,13 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { y += 24; - // Row 2: Heal Radius + Instant Heal + // Row 3: Heal Radius addLabel(new GuiNpcLabel(102, "ability.healRadius", labelX, y + 5)); addTextField(createFloatField(102, fieldX, y, 50, heal.getHealRadius())); - addLabel(new GuiNpcLabel(103, "dialog.instant", col2LabelX, y + 5)); - addButton(new GuiNpcButton(103, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isInstantHeal() ? 1 : 0)); - y += 24; - // Row 3: Heal Self + Heal Allies + // Row 4: Heal Self + Heal Allies addLabel(new GuiNpcLabel(104, "ability.healSelf", labelX, y + 5)); addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealSelf() ? 1 : 0)); @@ -59,6 +69,7 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { switch (id) { case 103: heal.setInstantHeal(value == 1); + initGui(); // Refresh to show/hide duration field break; case 104: heal.setHealSelf(value == 1); @@ -72,6 +83,9 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { + case 99: + heal.setDurationTicks(field.getInteger()); + break; case 100: heal.setHealAmount(parseFloat(field, heal.getHealAmount())); break; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java index 2c0fc3a68..c846565c4 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java @@ -31,13 +31,21 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 145; int col2FieldX = guiLeft + 205; - // Row 1: Placement + Trigger Radius - addLabel(new GuiNpcLabel(100, "ability.placement", labelX, y + 5)); - String[] placements = {"Caster", "Target", "Ahead"}; - addButton(new GuiNpcButton(100, fieldX, y, 55, 20, placements, trap.getPlacement().ordinal())); + // Row 1: Duration + Placement + addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); + GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, trap.getDurationTicks()); + durationField.setMinMaxDefault(1, 2000, 200); + addTextField(durationField); - addLabel(new GuiNpcLabel(101, "ability.triggerRad", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, trap.getTriggerRadius())); + addLabel(new GuiNpcLabel(100, "ability.placement", col2LabelX, y + 5)); + String[] placements = {"Caster", "Target", "Ahead"}; + addButton(new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacement().ordinal())); + + y += 24; + + // Row 2: Trigger Radius + addLabel(new GuiNpcLabel(101, "ability.triggerRad", labelX, y + 5)); + addTextField(createFloatField(101, fieldX, y, 50, trap.getTriggerRadius())); y += 24; @@ -90,6 +98,9 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { @Override protected void handleTypeTextField(int id, GuiNpcTextField field) { switch (id) { + case 99: + trap.setDurationTicks(field.getInteger()); + break; case 101: trap.setTriggerRadius(parseFloat(field, trap.getTriggerRadius())); break; From 4330405f961283fab1058973f6c22f0a3721dbb7 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 04:12:39 -0500 Subject: [PATCH 16/85] Fix Cooldown Logic --- src/api | 2 +- src/main/java/noppes/npcs/DataAbilities.java | 44 ++++++++++++++++---- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/api b/src/api index ae73e1b88..2054012fa 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit ae73e1b885415701c1ee20b64c1d0ae9c9089efc +Subproject commit 2054012fae799fa233b99824b4f649d311eff86f diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 92bb1241c..0ff0aa8a1 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -166,8 +166,20 @@ public class DataAbilities { // Call onExecute currentAbility.onExecute(npc, target, npc.worldObj); + + // Check if ability completed during onExecute (signalCompletion was called) + if (currentAbility.getPhase() == AbilityPhase.IDLE) { + handleAbilityCompletion(target); + return; + } } currentAbility.onActiveTick(npc, target, npc.worldObj, currentAbility.getCurrentTick()); + + // Check if ability completed during onActiveTick (signalCompletion was called) + if (currentAbility.getPhase() == AbilityPhase.IDLE) { + handleAbilityCompletion(target); + return; + } break; case DAZED: @@ -175,17 +187,31 @@ public class DataAbilities { break; case IDLE: - // Ability completed - currentAbility.onComplete(npc, target); - - // Fire complete event - AbilityEvent.CompleteEvent completeEvent = new AbilityEvent.CompleteEvent( - npc.wrappedNPC, currentAbility, target); - NpcAPI.EVENT_BUS.post(completeEvent); - - onAbilityComplete(); + // Ability completed (reached via tick() phase transition from DAZED) + handleAbilityCompletion(target); break; } + } + + /** + * Handle ability completion - called when ability phase becomes IDLE. + * This can happen from: + * - signalCompletion() called in onExecute() or onActiveTick() + * - tick() transitioning from DAZED to IDLE + */ + private void handleAbilityCompletion(EntityLivingBase target) { + if (currentAbility == null) return; + + // Call onComplete callback + currentAbility.onComplete(npc, target); + + // Fire complete event + AbilityEvent.CompleteEvent completeEvent = new AbilityEvent.CompleteEvent( + npc.wrappedNPC, currentAbility, target); + NpcAPI.EVENT_BUS.post(completeEvent); + + // Clean up and roll cooldown + onAbilityComplete(); // Clear AI pathfinding if ability is controlling movement // But DON'T zero motion - let the ability set it if needed From 76fb9ee52fdf194d2102967ab246ac1f83eb5f53 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 14:46:17 -0500 Subject: [PATCH 17/85] Fix Dazed Ticks and other smaller issues --- .../data/ability/type/AbilityDash.java | 14 +++---- .../data/ability/type/AbilityGuard.java | 6 +-- .../data/ability/type/AbilityHeal.java | 27 ++++++------- .../data/ability/type/AbilityTeleport.java | 5 ++- .../data/ability/type/AbilityVortex.java | 39 +++++++++---------- .../assets/customnpcs/lang/en_US.lang | 3 +- 6 files changed, 44 insertions(+), 50 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 586e402a8..cd4d42ac7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -199,8 +199,6 @@ public class AbilityDash extends Ability { npc.motionX = 0; npc.motionZ = 0; npc.velocityChanged = true; - dashDirection = null; - chosenDirection = null; } @Override @@ -208,23 +206,21 @@ public class AbilityDash extends Ability { npc.motionX = 0; npc.motionZ = 0; npc.velocityChanged = true; + } + + @Override + public void cleanup() { dashDirection = null; chosenDirection = null; } private boolean isDashBlocked(EntityNPCInterface npc) { + if (dashDirection == null) return true; double nextX = dashDirection.xCoord * dashSpeed; double nextZ = dashDirection.zCoord * dashSpeed; return !npc.worldObj.getCollidingBoundingBoxes(npc, npc.boundingBox.copy().offset(nextX, 0, nextZ)).isEmpty(); } - @Override - public void reset() { - super.reset(); - dashDirection = null; - chosenDirection = null; - } - @Override public float getTelegraphRadius() { return 0; // No telegraph for dash diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 831ef97fd..fd9f25a24 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -116,11 +116,7 @@ public class AbilityGuard extends Ability { lastAttacker = attacker; lastDamageTaken = damage; counterTriggered = true; - - if (interruptible) { - performCounter(npc, npc.worldObj); - npc.abilities.interruptCurrentAbility(source, damage); - } + // Counter will be performed in onActiveTick - don't self-interrupt } private void performCounter(EntityNPCInterface npc, World world) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 59ef4751a..f19a7cb02 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -34,7 +34,14 @@ public class AbilityHeal extends Ability { private boolean instantHeal = true; // Runtime state - private transient List healedAllies = new ArrayList<>(); + private transient List healedAllies; + + private List getHealedAllies() { + if (healedAllies == null) { + healedAllies = new ArrayList<>(); + } + return healedAllies; + } public AbilityHeal() { this.typeId = "ability.cnpc.heal"; @@ -73,7 +80,7 @@ public class AbilityHeal extends Ability { public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { if (world.isRemote) return; - healedAllies.clear(); + getHealedAllies().clear(); // Always find allies if we're healing them (needed for both instant and HoT) if (healAllies && healRadius > 0) { @@ -87,7 +94,7 @@ public class AbilityHeal extends Ability { spawnHealParticles(world, npc); } - for (EntityLivingBase ally : healedAllies) { + for (EntityLivingBase ally : getHealedAllies()) { healEntity(ally); spawnHealParticles(world, ally); } @@ -120,7 +127,7 @@ public class AbilityHeal extends Ability { } if (healAllies && healRadius > 0) { - for (EntityLivingBase ally : healedAllies) { + for (EntityLivingBase ally : getHealedAllies()) { if (!ally.isDead) { float allyTickHeal = tickHeal; // Add percentage-based heal portion for each ally @@ -164,7 +171,7 @@ public class AbilityHeal extends Ability { if (living instanceof EntityNPCInterface) { float dist = npc.getDistanceToEntity(living); if (dist <= healRadius) { - healedAllies.add(living); + getHealedAllies().add(living); } } } @@ -192,14 +199,8 @@ public class AbilityHeal extends Ability { } @Override - public void onInterrupt(EntityNPCInterface npc, net.minecraft.util.DamageSource source, float damage) { - healedAllies.clear(); - } - - @Override - public void reset() { - super.reset(); - healedAllies.clear(); + public void cleanup() { + getHealedAllies().clear(); } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 668b2f04d..218432fc9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -374,7 +374,10 @@ public class AbilityTeleport extends Ability { double dist = Math.sqrt(Math.pow(living.posX - x, 2) + Math.pow(living.posZ - z, 2)); if (dist <= damageRadius) { // Apply damage with scripted event support (no knockback for teleport damage) - applyAbilityDamage(npc, living, damage, 0); + boolean wasHit = applyAbilityDamage(npc, living, damage, 0); + if (wasHit) { + applyEffects(living); + } } } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index 70c1c96b7..fef61779e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -8,7 +8,6 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.DamageSource; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityVortex; @@ -36,10 +35,17 @@ public class AbilityVortex extends Ability { private float pullDamage = 0.0f; // Runtime state - private transient Set pulledEntities = new HashSet<>(); + private transient Set pulledEntities; private transient boolean pullComplete = false; private transient int ticksSincePullDamage = 0; + private Set getPulledEntities() { + if (pulledEntities == null) { + pulledEntities = new HashSet<>(); + } + return pulledEntities; + } + public AbilityVortex() { this.typeId = "ability.cnpc.vortex"; this.name = "Vortex"; @@ -82,7 +88,7 @@ public class AbilityVortex extends Ability { @Override public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - pulledEntities.clear(); + getPulledEntities().clear(); pullComplete = false; ticksSincePullDamage = 0; @@ -98,7 +104,7 @@ public class AbilityVortex extends Ability { double dist = npc.getDistanceToEntity(entity); if (dist <= pullRadius) { - pulledEntities.add(entity.getUniqueID()); + getPulledEntities().add(entity.getUniqueID()); count++; if (count >= maxTargets) break; } @@ -108,7 +114,7 @@ public class AbilityVortex extends Ability { if (target != null && !target.isDead) { double dist = npc.getDistanceToEntity(target); if (dist <= pullRadius) { - pulledEntities.add(target.getUniqueID()); + getPulledEntities().add(target.getUniqueID()); } } } @@ -116,7 +122,7 @@ public class AbilityVortex extends Ability { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - if (pullComplete || pulledEntities.isEmpty()) { + if (pullComplete || getPulledEntities().isEmpty()) { signalCompletion(); return; } @@ -128,10 +134,10 @@ public class AbilityVortex extends Ability { boolean anyStillPulling = false; ticksSincePullDamage++; - for (UUID uuid : new HashSet<>(pulledEntities)) { + for (UUID uuid : new HashSet<>(getPulledEntities())) { EntityLivingBase entity = findEntity(npc, world, uuid); if (entity == null || entity.isDead) { - pulledEntities.remove(uuid); + getPulledEntities().remove(uuid); continue; } @@ -141,7 +147,7 @@ public class AbilityVortex extends Ability { double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); if (dist <= 1.0f) { - pulledEntities.remove(uuid); + getPulledEntities().remove(uuid); onTargetArrived(npc, entity, world); continue; } @@ -155,7 +161,7 @@ public class AbilityVortex extends Ability { AxisAlignedBB nextBox = entity.boundingBox.copy().offset(nextX, nextY, nextZ); if (!world.getCollidingBoundingBoxes(entity, nextBox).isEmpty()) { - pulledEntities.remove(uuid); + getPulledEntities().remove(uuid); continue; } @@ -171,7 +177,7 @@ public class AbilityVortex extends Ability { } } - if (!anyStillPulling && pulledEntities.isEmpty()) { + if (!anyStillPulling && getPulledEntities().isEmpty()) { pullComplete = true; signalCompletion(); } @@ -206,15 +212,8 @@ public class AbilityVortex extends Ability { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - pulledEntities.clear(); - pullComplete = false; - ticksSincePullDamage = 0; - } - - @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - pulledEntities.clear(); + public void cleanup() { + getPulledEntities().clear(); pullComplete = false; ticksSincePullDamage = 0; } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 01e3ae541..8ac2d99c0 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1512,8 +1512,7 @@ ability.maxRange=Max Range ability.timing=Timing (ticks) ability.cooldown=Cooldown ability.windup=Wind Up -ability.active=Active -ability.recovery=Recovery +ability.dazed=Dazed Ticks ability.interruptible=Interruptible ability.threshold=Threshold ability.lockMove=Lock Move From 6d39b3c0267cb78a0b6488e548061a61b503fcc5 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 15:21:59 -0500 Subject: [PATCH 18/85] Fix Anchor Points for Animations --- .../kamkeel/npcs/util/AnchorPointHelper.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 593c8aa19..79ad2cea4 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -178,33 +178,33 @@ public class AnchorPointHelper { float palmY = PALM_DOWN * armScale.scaleY; float palmZ = PALM_FORWARD * armScale.scaleZ; - // Apply arm rotations (order: Z -> Y -> X) + // Apply arm rotations (order: X -> Y -> Z, matching GL's reverse application) double hx = palmX, hy = palmY, hz = palmZ; - // Z rotation - double cosZ = Math.cos(rotations[2]); - double sinZ = Math.sin(rotations[2]); - double newX = hx * cosZ - hy * sinZ; - double newY = hx * sinZ + hy * cosZ; - hx = newX; - hy = newY; - - // Y rotation - double cosY = Math.cos(rotations[1]); - double sinY = Math.sin(rotations[1]); - newX = hx * cosY + hz * sinY; - double newZ = -hx * sinY + hz * cosY; - hx = newX; - hz = newZ; - - // X rotation + // X rotation first double cosX = Math.cos(rotations[0]); double sinX = Math.sin(rotations[0]); - newY = hy * cosX - hz * sinX; - newZ = hy * sinX + hz * cosX; + double newY = hy * cosX - hz * sinX; + double newZ = hy * sinX + hz * cosX; hy = newY; hz = newZ; + // Y rotation second + double cosY = Math.cos(rotations[1]); + double sinY = Math.sin(rotations[1]); + double newX = hx * cosY + hz * sinY; + newZ = -hx * sinY + hz * cosY; + hx = newX; + hz = newZ; + + // Z rotation last + double cosZ = Math.cos(rotations[2]); + double sinZ = Math.sin(rotations[2]); + newX = hx * cosZ - hy * sinZ; + newY = hx * sinZ + hy * cosZ; + hx = newX; + hy = newY; + // Combine shoulder + rotated hand offset double modelX = shoulderX + hx; double modelY = shoulderY + hy; @@ -216,12 +216,15 @@ public class AnchorPointHelper { double blockZ = modelZ * MODEL_SCALE * scale; // Apply body yaw rotation + // Renderer uses glRotate(180 - yaw), so: cos(180-yaw) = -cos(yaw), sin(180-yaw) = sin(yaw) + // Y-axis rotation: x' = x*cos + z*sin, z' = -x*sin + z*cos + // Substituting: x' = -x*cos(yaw) + z*sin(yaw), z' = -x*sin(yaw) - z*cos(yaw) float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); double cosYaw = Math.cos(bodyYaw); double sinYaw = Math.sin(bodyYaw); double worldOffsetX = blockX * cosYaw + blockZ * sinYaw; - double worldOffsetZ = -blockX * sinYaw + blockZ * cosYaw; + double worldOffsetZ = blockX * sinYaw - blockZ * cosYaw; // Calculate shoulder height based on entity and scale float shoulderHeight = entity.height * ARM_HEIGHT; From c6810c05eae419986345ff31853c108913f5be4e Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 16:43:47 -0500 Subject: [PATCH 19/85] More Ability Fixes. --- .../data/ability/type/AbilitySweeper.java | 4 +- .../kamkeel/npcs/util/AnchorPointHelper.java | 29 ++++--- .../npcs/client/gui/SubGuiColorSelector.java | 6 +- .../client/gui/advanced/GuiNPCAbilities.java | 29 ++++++- .../gui/advanced/SubGuiAbilityConfig.java | 85 +++++++++++++++---- .../advanced/ability/SubGuiAbilityCutter.java | 8 +- .../advanced/ability/SubGuiAbilityDash.java | 4 +- .../advanced/ability/SubGuiAbilityDisc.java | 47 +++++++--- .../ability/SubGuiAbilityEnergyBeam.java | 46 ++++++---- .../advanced/ability/SubGuiAbilityGuard.java | 5 +- .../advanced/ability/SubGuiAbilityHazard.java | 12 ++- .../advanced/ability/SubGuiAbilityHeal.java | 12 ++- .../ability/SubGuiAbilityLaserShot.java | 17 ++-- .../advanced/ability/SubGuiAbilityOrb.java | 34 +++++--- .../ability/SubGuiAbilityProjectile.java | 26 ++++-- .../ability/SubGuiAbilitySweeper.java | 8 +- .../ability/SubGuiAbilityTeleport.java | 16 +++- .../advanced/ability/SubGuiAbilityTrap.java | 4 +- .../advanced/ability/SubGuiAbilityVortex.java | 8 +- .../gui/select/GuiAnimationSelection.java | 5 +- .../npcs/client/gui/util/GuiNPCInterface.java | 47 +++++++--- .../assets/customnpcs/lang/en_US.lang | 49 ++++++++++- 22 files changed, 378 insertions(+), 123 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index ca41ed6e3..5a61c5dce 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -30,7 +30,7 @@ public class AbilitySweeper extends Ability { // Type-specific parameters private float beamLength = 10.0f; private float beamWidth = 0.3f; // Thin like beam trail - private float beamHeight = 0.8f; // Height above ground (low enough to jump over) + private float beamHeight = 0.5f; // Height above ground (low enough to jump over) private float damage = 5.0f; private int damageInterval = 5; private boolean piercing = true; @@ -172,7 +172,7 @@ public class AbilitySweeper extends Ability { public void readTypeNBT(NBTTagCompound nbt) { this.beamLength = nbt.hasKey("beamLength") ? nbt.getFloat("beamLength") : 10.0f; this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.3f; - this.beamHeight = nbt.hasKey("beamHeight") ? nbt.getFloat("beamHeight") : 0.8f; + this.beamHeight = nbt.hasKey("beamHeight") ? nbt.getFloat("beamHeight") : 0.5f; this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 5.0f; this.damageInterval = nbt.hasKey("damageInterval") ? nbt.getInteger("damageInterval") : 5; this.piercing = !nbt.hasKey("piercing") || nbt.getBoolean("piercing"); diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 79ad2cea4..45e4f3eab 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -40,9 +40,10 @@ public class AnchorPointHelper { // Distance in front for FRONT anchor private static final float DEFAULT_FRONT_DISTANCE = 1.0f; - // Fallback arm positioning (when no animation) - private static final float FALLBACK_LATERAL = 0.35f; - private static final float FALLBACK_FORWARD = 0.3f; + // Fallback arm positioning (when no animation, arms hang at sides) + private static final float FALLBACK_LATERAL = 0.35f; // Distance from body center to arm + private static final float FALLBACK_FORWARD = 0.1f; // Slight forward offset + private static final float FALLBACK_ARM_HEIGHT = 0.45f; // Hand height when arms hang down (near hip) /** * Calculate world position for an anchor point on an entity. @@ -274,6 +275,7 @@ public class AnchorPointHelper { /** * Calculate fallback hand position when no animation is active. + * Represents arms hanging at sides in default idle pose. */ private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); @@ -281,20 +283,23 @@ public class AnchorPointHelper { // Get arm scale for EntityCustomNpc ModelScalePart armScale = getArmScale(entity); - // Perpendicular direction for lateral offset + // Perpendicular direction for lateral offset (right = +90°, left = -90° from body facing) float perpYaw = bodyYaw + (rightHand ? (float) (Math.PI / 2) : (float) (-Math.PI / 2)); - // Calculate offsets scaled by model size and arm scale - double lateralX = -Math.sin(perpYaw) * FALLBACK_LATERAL * scale * armScale.scaleX; - double lateralZ = Math.cos(perpYaw) * FALLBACK_LATERAL * scale * armScale.scaleX; - double forwardX = -Math.sin(bodyYaw) * FALLBACK_FORWARD * scale * armScale.scaleZ; - double forwardZ = Math.cos(bodyYaw) * FALLBACK_FORWARD * scale * armScale.scaleZ; + // Calculate lateral offset - arms hang at sides + // Scale by model size, but not by arm scale (lateral distance is fixed by skeleton) + double lateralX = -Math.sin(perpYaw) * FALLBACK_LATERAL * scale; + double lateralZ = Math.cos(perpYaw) * FALLBACK_LATERAL * scale; - // Arm length affects vertical position - double armLengthOffset = (1 - armScale.scaleY) * 0.3; + // Small forward offset + double forwardX = -Math.sin(bodyYaw) * FALLBACK_FORWARD * scale; + double forwardZ = Math.cos(bodyYaw) * FALLBACK_FORWARD * scale; + + // Arm length affects vertical position - longer arms = lower hands + double armLengthOffset = armScale.scaleY * 0.3 * scale; double x = entity.posX + lateralX + forwardX; - double y = entity.posY + entity.height * ARM_HEIGHT - armLengthOffset; + double y = entity.posY + entity.height * FALLBACK_ARM_HEIGHT + armLengthOffset; double z = entity.posZ + lateralZ + forwardZ; return Vec3.createVectorHelper(x, y, z); diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiColorSelector.java b/src/main/java/noppes/npcs/client/gui/SubGuiColorSelector.java index 947825f5a..be8c07f8a 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiColorSelector.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiColorSelector.java @@ -25,10 +25,10 @@ public class SubGuiColorSelector extends SubGuiInterface implements ITextfieldLi public int color; public SubGuiColorSelector(int color) { - xSize = 176; + xSize = 182; ySize = 222; this.color = color; - setBackground("smallbg.png"); + setBackground("menubg.png"); } @Override @@ -40,7 +40,7 @@ public class SubGuiColorSelector extends SubGuiInterface implements ITextfieldLi this.addTextField(textfield = new GuiNpcTextField(0, this, guiLeft + 53, guiTop + 20, 70, 20, getColor())); textfield.setTextColor(color); - addButton(new GuiNpcButton(66, guiLeft + 112, guiTop + 198, 60, 20, "gui.done")); + addButton(new GuiNpcButton(66, guiLeft + 112, guiTop + 175, 60, 20, "gui.done")); } public String getColor() { diff --git a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java index c0fb15596..9abcebbe7 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java @@ -73,15 +73,15 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC addLabel(new GuiNpcLabel(100, "gui.enabled", guiLeft + 5, y + 5)); addButton(new GuiNpcButton(100, guiLeft + 55, y, 50, 20, new String[]{"gui.no", "gui.yes"}, abilitiesEnabled ? 1 : 0)); - // Cooldown range: Min Cooldown and Max Cooldown + // Cooldown range: Min Cooldown and Max Cooldown (spaced apart more) addLabel(new GuiNpcLabel(101, "ability.minCooldown", guiLeft + 115, y + 5)); - GuiNpcTextField minField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 185, y, 40, 20, String.valueOf(minCooldown)); + GuiNpcTextField minField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 165, y, 40, 20, String.valueOf(minCooldown)); minField.setIntegersOnly(); minField.setMinMaxDefault(0, 10000, 20); addTextField(minField); - addLabel(new GuiNpcLabel(102, "ability.maxCooldown", guiLeft + 235, y + 5)); - GuiNpcTextField maxField = new GuiNpcTextField(102, this, fontRendererObj, guiLeft + 305, y, 40, 20, String.valueOf(maxCooldown)); + addLabel(new GuiNpcLabel(102, "ability.maxCooldown", guiLeft + 260, y + 5)); + GuiNpcTextField maxField = new GuiNpcTextField(102, this, fontRendererObj, guiLeft + 310, y, 40, 20, String.valueOf(maxCooldown)); maxField.setIntegersOnly(); maxField.setMinMaxDefault(0, 10000, 60); addTextField(maxField); @@ -123,6 +123,14 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Load button (under the add/remove arrows) addButton(new GuiNpcButton(75, centerX, y + 90, 40, 20, "gui.load")); + // On/Off toggle for selected ability (under Load button) + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { + Ability selectedAbility = npcAbilities.get(selectedAbilityIndex); + GuiNpcButton toggleBtn = new GuiNpcButton(77, centerX, y + 112, 40, 20, + new String[]{"gui.off", "gui.on"}, selectedAbility.isEnabled() ? 1 : 0); + addButton(toggleBtn); + } + // Right side buttons: Edit and Up/Down carrots with Save button addButton(new GuiNpcButton(72, guiLeft + 210, y + 145, 55, 20, "gui.edit")); getButton(72).setEnabled(selectedAbilityIndex >= 0); @@ -243,6 +251,19 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC return; } + // Toggle selected ability on/off + if (id == 77) { + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { + Ability ability = npcAbilities.get(selectedAbilityIndex); + ability.setEnabled(((GuiNpcButton) guibutton).getValue() == 1); + updateNpcAbilitiesList(); + selectAbilityByIndex(selectedAbilityIndex); + initGui(); + save(); + } + return; + } + initGui(); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 040c999a4..831420473 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -4,6 +4,9 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.Condition; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.Frame; +import noppes.npcs.controllers.AnimationController; import net.minecraft.client.gui.GuiButton; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; @@ -140,7 +143,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.hasTypeSettings = ability.hasTypeSettings(); this.hasVisualSettings = hasVisualSettings(); - setBackground("menubg.png"); + setBackground("menubg.png", 217); xSize = 356; ySize = 200; } @@ -248,13 +251,17 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi addTextField(weightField); addLabel(new GuiNpcLabel(5, "ability.lockMove", col2LabelX, y + 5)); - addButton(new GuiNpcButton(16, col2FieldX, y, 40, 20, new String[]{"gui.no", "gui.yes"}, lockMovement ? 1 : 0)); + GuiNpcButton lockMoveBtn = new GuiNpcButton(16, col2FieldX, y, 40, 20, new String[]{"gui.no", "gui.yes"}, lockMovement ? 1 : 0); + lockMoveBtn.setHoverText("ability.hover.lockMove"); + addButton(lockMoveBtn); y += 24; // Row 3: Interruptible + Dazed Ticks (only if interruptible) addLabel(new GuiNpcLabel(6, "ability.interruptible", col1LabelX, y + 5)); - addButton(new GuiNpcButton(14, guiLeft + 85, y, 40, 20, new String[]{"gui.no", "gui.yes"}, interruptible ? 1 : 0)); + GuiNpcButton interruptBtn = new GuiNpcButton(14, guiLeft + 85, y, 40, 20, new String[]{"gui.no", "gui.yes"}, interruptible ? 1 : 0); + interruptBtn.setHoverText("ability.hover.interruptible"); + addButton(interruptBtn); // Only show dazed ticks if interruptible is enabled if (interruptible) { @@ -278,6 +285,13 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi windupField.setMinMaxDefault(0, 1000, 20); addTextField(windupField); + // Sync button - only show if windup animation is selected + if (windUpAnimationId >= 0) { + GuiNpcButton syncBtn = new GuiNpcButton(17, guiLeft + 115, y, 40, 20, "gui.sync"); + syncBtn.setHoverText("ability.hover.sync"); + addButton(syncBtn); + } + addLabel(new GuiNpcLabel(13, "ability.cooldown", col2LabelX, y + 5)); GuiNpcTextField cooldownField = new GuiNpcTextField(10, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(cooldownTicks)); cooldownField.setIntegersOnly(); @@ -387,7 +401,9 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi if (!targetingModeLocked) { String[] targetingModes = getAvailableTargetingModes(); int selectedIndex = getTargetingModeIndex(targetingMode); - addButton(new GuiNpcButton(4, col1FieldX, y, 90, 20, targetingModes, selectedIndex)); + GuiNpcButton targetBtn = new GuiNpcButton(4, col1FieldX, y, 90, 20, targetingModes, selectedIndex); + targetBtn.setHoverText("ability.hover.targeting"); + addButton(targetBtn); } else { String modeName = "ability.target." + targetingMode.name().toLowerCase(); addLabel(new GuiNpcLabel(23, modeName, col1FieldX, y + 5)); @@ -534,7 +550,9 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Show Telegraph addLabel(new GuiNpcLabel(41, "ability.showTelegraph", col1LabelX, y + 5)); - addButton(new GuiNpcButton(20, guiLeft + 95, y, 40, 20, new String[]{"gui.no", "gui.yes"}, showTelegraph ? 1 : 0)); + GuiNpcButton telegraphBtn = new GuiNpcButton(20, guiLeft + 95, y, 40, 20, new String[]{"gui.no", "gui.yes"}, showTelegraph ? 1 : 0); + telegraphBtn.setHoverText("ability.hover.showTelegraph"); + addButton(telegraphBtn); // Telegraph Type (separate column) String typeKey = ability.getTelegraphType().name().toLowerCase(); @@ -544,20 +562,20 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi y += 24; - // Colors - addLabel(new GuiNpcLabel(44, "ability.windUpColor", col1LabelX, y + 5)); - String windUpHex = String.format("%06X", windUpColor & 0xFFFFFF); - GuiNpcButton windUpColorBtn = new GuiNpcButton(22, guiLeft + 95, y, 55, 20, windUpHex); - windUpColorBtn.setEnabled(showTelegraph); - windUpColorBtn.setTextColor(windUpColor & 0xFFFFFF); - addButton(windUpColorBtn); + // Colors - only show when telegraph is enabled + if (showTelegraph) { + addLabel(new GuiNpcLabel(44, "ability.windUpColor", col1LabelX, y + 5)); + String windUpHex = String.format("%06X", windUpColor & 0xFFFFFF); + GuiNpcButton windUpColorBtn = new GuiNpcButton(22, guiLeft + 95, y, 55, 20, windUpHex); + windUpColorBtn.setTextColor(windUpColor & 0xFFFFFF); + addButton(windUpColorBtn); - addLabel(new GuiNpcLabel(45, "ability.activeColor", guiLeft + 200, y + 5)); - String activeHex = String.format("%06X", activeColor & 0xFFFFFF); - GuiNpcButton activeColorBtn = new GuiNpcButton(24, guiLeft + 280, y, 55, 20, activeHex); - activeColorBtn.setEnabled(showTelegraph); - activeColorBtn.setTextColor(activeColor & 0xFFFFFF); - addButton(activeColorBtn); + addLabel(new GuiNpcLabel(45, "ability.activeColor", guiLeft + 200, y + 5)); + String activeHex = String.format("%06X", activeColor & 0xFFFFFF); + GuiNpcButton activeColorBtn = new GuiNpcButton(24, guiLeft + 280, y, 55, 20, activeHex); + activeColorBtn.setTextColor(activeColor & 0xFFFFFF); + addButton(activeColorBtn); + } } } @@ -627,6 +645,9 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi initGui(); // Refresh to show/hide dazed ticks field } else if (id == 16) { lockMovement = ((GuiNpcButton) guibutton).getValue() == 1; + } else if (id == 17) { + // Sync windup ticks with animation duration + syncWindupWithAnimation(); } // Target tab - Targeting mode @@ -918,6 +939,34 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi initGui(); } + // ═══════════════════════════════════════════════════════════════════════════ + // SYNC ANIMATION + // ═══════════════════════════════════════════════════════════════════════════ + + /** + * Syncs windup ticks with the selected windup animation's total duration. + */ + private void syncWindupWithAnimation() { + if (windUpAnimationId < 0 || AnimationController.Instance == null) { + return; + } + + Animation animation = (Animation) AnimationController.Instance.get(windUpAnimationId); + if (animation == null || animation.frames.isEmpty()) { + return; + } + + // Calculate total duration by summing all frame durations + int totalDuration = 0; + for (Frame frame : animation.frames) { + totalDuration += frame.getDuration(); + } + + // Update the cached value and refresh GUI + windUpTicks = totalDuration; + initGui(); + } + // ═══════════════════════════════════════════════════════════════════════════ // HELPER METHODS FOR SUBCLASSES // ═══════════════════════════════════════════════════════════════════════════ diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java index f3dbc64c7..f10c63eef 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java @@ -61,10 +61,14 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { // Row 4: Sweep Mode + Piercing addLabel(new GuiNpcLabel(106, "ability.sweepMode", labelX, y + 5)); String[] sweepModes = {"Swipe", "Spin"}; - addButton(new GuiNpcButton(106, fieldX, y, 70, 20, sweepModes, cutter.getSweepMode().ordinal())); + GuiNpcButton sweepModeBtn = new GuiNpcButton(106, fieldX, y, 70, 20, sweepModes, cutter.getSweepMode().ordinal()); + sweepModeBtn.setHoverText("ability.hover.sweepMode"); + addButton(sweepModeBtn); addLabel(new GuiNpcLabel(107, "ability.piercing", col2LabelX, y + 5)); - addButton(new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, cutter.isPiercing() ? 1 : 0)); + GuiNpcButton piercingBtn = new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, cutter.isPiercing() ? 1 : 0); + piercingBtn.setHoverText("ability.hover.piercing"); + addButton(piercingBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java index 26bfd6610..f113b3c1c 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java @@ -30,7 +30,9 @@ public class SubGuiAbilityDash extends SubGuiAbilityConfig { // Row 1: Dash Mode addLabel(new GuiNpcLabel(100, "ability.mode", labelX, y + 5)); String[] dashModes = {"Aggressive", "Defensive"}; - addButton(new GuiNpcButton(100, fieldX, y, 80, 20, dashModes, dash.getDashMode().ordinal())); + GuiNpcButton modeBtn = new GuiNpcButton(100, fieldX, y, 80, 20, dashModes, dash.getDashMode().ordinal()); + modeBtn.setHoverText("ability.hover.dashMode"); + addButton(modeBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 33c5372fd..2b804d99b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -57,30 +57,42 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { y += 24; - // Row 3: Homing + Homing Strength + // Row 3: Homing + Homing Strength (only show strength if homing) addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isHoming() ? 1 : 0)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, disc.getHomingStrength())); + if (disc.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, disc.getHomingStrength())); + } y += 24; - // Row 4: Boomerang + Boomerang Delay + // Row 4: Boomerang + Boomerang Delay (only show delay if boomerang) addLabel(new GuiNpcLabel(106, "ability.boomerang", labelX, y + 5)); - addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isBoomerang() ? 1 : 0)); + GuiNpcButton boomerangBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isBoomerang() ? 1 : 0); + boomerangBtn.setHoverText("ability.hover.boomerang"); + addButton(boomerangBtn); - addLabel(new GuiNpcLabel(107, "ability.boomerangDelay", col2LabelX, y + 5)); - addTextField(createIntField(107, col2FieldX, y, 50, disc.getBoomerangDelay())); + if (disc.isBoomerang()) { + addLabel(new GuiNpcLabel(107, "ability.boomerangDelay", col2LabelX, y + 5)); + addTextField(createIntField(107, col2FieldX, y, 50, disc.getBoomerangDelay())); + } y += 24; - // Row 5: Explosive + Explosion Radius + // Row 5: Explosive + Explosion Radius (only show radius if explosive) addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isExplosive() ? 1 : 0)); + GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); - addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, disc.getExplosionRadius())); + if (disc.isExplosive()) { + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, disc.getExplosionRadius())); + } y += 24; @@ -110,7 +122,9 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPoint().getId())); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPoint().getId()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); y += 24; @@ -149,7 +163,9 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 4: Lightning Effect Enabled addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0)); + GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); // Only show Lightning settings if Lightning is enabled if (disc.hasLightningEffect()) { @@ -174,12 +190,15 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { switch (id) { case 104: disc.setHoming(value == 1); + initGui(); break; case 106: disc.setBoomerang(value == 1); + initGui(); break; case 108: disc.setExplosive(value == 1); + initGui(); break; case 150: setSubGui(new SubGuiAbilityEffects(disc.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index 626fac6b9..6e90428ce 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -58,30 +58,40 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { y += 24; - // Row 3: Homing + Homing Strength + // Row 3: Homing + Homing Strength (only show strength if homing) addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isHoming() ? 1 : 0)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, beam.getHomingStrength())); + if (beam.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, beam.getHomingStrength())); + } y += 24; - // Row 4: Homing Range + Max Distance - addLabel(new GuiNpcLabel(106, "ability.homingRange", labelX, y + 5)); - addTextField(createFloatField(106, fieldX, y, 50, beam.getHomingRange())); + // Row 4: Max Distance (+ Homing Range only if homing) + if (beam.isHoming()) { + addLabel(new GuiNpcLabel(106, "ability.homingRange", labelX, y + 5)); + addTextField(createFloatField(106, fieldX, y, 50, beam.getHomingRange())); + } - addLabel(new GuiNpcLabel(107, "ability.maxDist", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, beam.getMaxDistance())); + addLabel(new GuiNpcLabel(107, "ability.maxDist", beam.isHoming() ? col2LabelX : labelX, y + 5)); + addTextField(createFloatField(107, beam.isHoming() ? col2FieldX : fieldX, y, 50, beam.getMaxDistance())); y += 24; - // Row 5: Explosive + Explosion Radius + // Row 5: Explosive + Explosion Radius (only show radius if explosive) addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isExplosive() ? 1 : 0)); + GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); - addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, beam.getExplosionRadius())); + if (beam.isExplosive()) { + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, beam.getExplosionRadius())); + } y += 24; @@ -108,7 +118,9 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPoint().getId())); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPoint().getId()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); y += 24; @@ -147,7 +159,9 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 4: Lightning Effect Enabled (only affects head) addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0)); + GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); // Only show Lightning settings if Lightning is enabled if (beam.hasLightningEffect()) { @@ -172,9 +186,11 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { switch (id) { case 104: beam.setHoming(value == 1); + initGui(); break; case 108: beam.setExplosive(value == 1); + initGui(); break; case 150: setSubGui(new SubGuiAbilityEffects(beam.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java index 183d66814..a975a97fc 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java @@ -44,11 +44,14 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { // Row 2: Can Counter + Counter Type addLabel(new GuiNpcLabel(101, "ability.canCounter", labelX, y + 5)); - addButton(new GuiNpcButton(101, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, guard.isCanCounter() ? 1 : 0)); + GuiNpcButton canCounterBtn = new GuiNpcButton(101, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, guard.isCanCounter() ? 1 : 0); + canCounterBtn.setHoverText("ability.hover.canCounter"); + addButton(canCounterBtn); addLabel(new GuiNpcLabel(102, "ability.counterType", col2LabelX, y + 5)); String[] types = {"Flat", "Percent"}; GuiNpcButton counterTypeButton = new GuiNpcButton(102, col2FieldX, y, 60, 20, types, guard.getCounterType().ordinal()); + counterTypeButton.setHoverText("ability.hover.counterType"); counterTypeButton.setEnabled(guard.isCanCounter()); addButton(counterTypeButton); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java index c9633c0f9..9822d9f90 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java @@ -39,14 +39,18 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(100, "ability.shape", col2LabelX, y + 5)); String[] shapes = {"Circle", "Ring", "Cone"}; - addButton(new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShape().ordinal())); + GuiNpcButton shapeBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShape().ordinal()); + shapeBtn.setHoverText("ability.hover.shape"); + addButton(shapeBtn); y += 24; // Row 2: Placement addLabel(new GuiNpcLabel(101, "ability.placement", labelX, y + 5)); String[] placements = {"Caster", "Target", "FollowCast", "FollowTgt"}; - addButton(new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacement().ordinal())); + GuiNpcButton placementBtn = new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacement().ordinal()); + placementBtn.setHoverText("ability.hover.placement"); + addButton(placementBtn); y += 24; @@ -82,7 +86,9 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { addTextField(createIntField(108, fieldX, y, 50, hazard.getPoisonLevel())); addLabel(new GuiNpcLabel(109, "ability.affectsCaster", col2LabelX, y + 5)); - addButton(new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, hazard.isAffectsCaster() ? 1 : 0)); + GuiNpcButton affectsCasterBtn = new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, hazard.isAffectsCaster() ? 1 : 0); + affectsCasterBtn.setHoverText("ability.hover.affectsCaster"); + addButton(affectsCasterBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java index 010da51cf..490b4773a 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java @@ -29,7 +29,9 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { // Row 1: Instant Heal + Duration (only shown if not instant) addLabel(new GuiNpcLabel(103, "dialog.instant", labelX, y + 5)); - addButton(new GuiNpcButton(103, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isInstantHeal() ? 1 : 0)); + GuiNpcButton instantBtn = new GuiNpcButton(103, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isInstantHeal() ? 1 : 0); + instantBtn.setHoverText("ability.hover.instant"); + addButton(instantBtn); if (!heal.isInstantHeal()) { addLabel(new GuiNpcLabel(99, "ability.duration", col2LabelX, y + 5)); @@ -57,10 +59,14 @@ public class SubGuiAbilityHeal extends SubGuiAbilityConfig { // Row 4: Heal Self + Heal Allies addLabel(new GuiNpcLabel(104, "ability.healSelf", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealSelf() ? 1 : 0)); + GuiNpcButton healSelfBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealSelf() ? 1 : 0); + healSelfBtn.setHoverText("ability.hover.healSelf"); + addButton(healSelfBtn); addLabel(new GuiNpcLabel(105, "ability.healAllies", col2LabelX, y + 5)); - addButton(new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealAllies() ? 1 : 0)); + GuiNpcButton healAlliesBtn = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealAllies() ? 1 : 0); + healAlliesBtn.setHoverText("ability.hover.healAllies"); + addButton(healAlliesBtn); } @Override diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index 614a8bce0..50e8fa92c 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -65,12 +65,16 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { y += 24; - // Row 4: Explosive + Explosion Radius + // Row 4: Explosive + Explosion Radius (only show radius if explosive) addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); - addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isExplosive() ? 1 : 0)); + GuiNpcButton explosiveBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); - addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, laser.getExplosionRadius())); + if (laser.isExplosive()) { + addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, laser.getExplosionRadius())); + } y += 24; @@ -124,7 +128,9 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { // Row 3: Lightning Effect Enabled addLabel(new GuiNpcLabel(204, "ability.lightning", labelX, y + 5)); - addButton(new GuiNpcButton(204, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0)); + GuiNpcButton lightningBtn = new GuiNpcButton(204, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); // Only show Lightning settings if Lightning is enabled if (laser.hasLightningEffect()) { @@ -149,6 +155,7 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { switch (id) { case 106: laser.setExplosive(value == 1); + initGui(); break; case 150: setSubGui(new SubGuiAbilityEffects(laser.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index c43569c46..858eeefa7 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -57,21 +57,29 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { y += 24; - // Row 3: Homing + Homing Strength + // Row 3: Homing + Homing Strength (only show strength if homing) addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isHoming() ? 1 : 0)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, orb.getHomingStrength())); + if (orb.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, orb.getHomingStrength())); + } y += 24; - // Row 4: Explosive + Explosion Radius + // Row 4: Explosive + Explosion Radius (only show radius if explosive) addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); - addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isExplosive() ? 1 : 0)); + GuiNpcButton explosiveBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); - addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, orb.getExplosionRadius())); + if (orb.isExplosive()) { + addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, orb.getExplosionRadius())); + } y += 24; @@ -98,7 +106,9 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - addButton(new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPoint().getId())); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPoint().getId()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); y += 24; @@ -137,7 +147,9 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { // Row 4: Lightning Effect Enabled addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - addButton(new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0)); + GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); // Only show Lightning settings if Lightning is enabled if (orb.hasLightningEffect()) { @@ -162,9 +174,11 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { switch (id) { case 104: orb.setHoming(value == 1); + initGui(); break; case 106: orb.setExplosive(value == 1); + initGui(); break; case 150: setSubGui(new SubGuiAbilityEffects(orb.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java index 52bf7a092..fe66fa242 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java @@ -58,21 +58,29 @@ public class SubGuiAbilityProjectile extends SubGuiAbilityConfig { y += 24; - // Row 3: Explosive + Explosion Radius + // Row 3: Explosive + Explosion Radius (only show radius if explosive) addLabel(new GuiNpcLabel(104, "ability.explosive", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isExplosive() ? 1 : 0)); + GuiNpcButton explosiveBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); - addLabel(new GuiNpcLabel(105, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, projectile.getExplosionRadius())); + if (projectile.isExplosive()) { + addLabel(new GuiNpcLabel(105, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, projectile.getExplosionRadius())); + } y += 24; - // Row 4: Homing + Homing Strength + // Row 4: Homing + Homing Strength (only show strength if homing) addLabel(new GuiNpcLabel(106, "ability.homing", labelX, y + 5)); - addButton(new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isHoming() ? 1 : 0)); + GuiNpcButton homingBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); - addLabel(new GuiNpcLabel(107, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, projectile.getHomingStrength())); + if (projectile.isHoming()) { + addLabel(new GuiNpcLabel(107, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, projectile.getHomingStrength())); + } y += 24; @@ -90,9 +98,11 @@ public class SubGuiAbilityProjectile extends SubGuiAbilityConfig { break; case 104: projectile.setExplosive(value == 1); + initGui(); break; case 106: projectile.setHoming(value == 1); + initGui(); break; case 150: setSubGui(new SubGuiAbilityEffects(projectile.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java index 9a3dc2fe8..1561b408a 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java @@ -71,13 +71,17 @@ public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { addTextField(createIntField(106, fieldX, y, 50, sweeper.getNumberOfRotations())); addLabel(new GuiNpcLabel(107, "ability.piercing", col2LabelX, y + 5)); - addButton(new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isPiercing() ? 1 : 0)); + GuiNpcButton piercingBtn = new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isPiercing() ? 1 : 0); + piercingBtn.setHoverText("ability.hover.piercing"); + addButton(piercingBtn); y += 24; // Row 5: Lock On Target addLabel(new GuiNpcLabel(108, "ability.lockTarget", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isLockOnTarget() ? 1 : 0)); + GuiNpcButton lockTargetBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isLockOnTarget() ? 1 : 0); + lockTargetBtn.setHoverText("ability.hover.lockTarget"); + addButton(lockTargetBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java index 1dfb12d22..e39918d2d 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java @@ -54,7 +54,9 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { addTextField(createIntField(103, fieldX, y, 50, teleport.getBlinkDelayTicks())); addLabel(new GuiNpcLabel(105, "ability.lineOfSight", col2LabelX, y + 5)); - addButton(new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0)); + GuiNpcButton losBtn1 = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0); + losBtn1.setHoverText("ability.hover.lineOfSight"); + addButton(losBtn1); y += 24; break; case SINGLE: @@ -63,7 +65,9 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { addTextField(createFloatField(101, fieldX, y, 50, teleport.getBlinkRadius())); addLabel(new GuiNpcLabel(105, "ability.lineOfSight", col2LabelX, y + 5)); - addButton(new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0)); + GuiNpcButton losBtn2 = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0); + losBtn2.setHoverText("ability.hover.lineOfSight"); + addButton(losBtn2); y += 24; break; case BEHIND: @@ -85,10 +89,14 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { // Damage at Start/End addLabel(new GuiNpcLabel(108, "ability.dmgAtStart", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtStart() ? 1 : 0)); + GuiNpcButton dmgStartBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtStart() ? 1 : 0); + dmgStartBtn.setHoverText("ability.hover.dmgAtStart"); + addButton(dmgStartBtn); addLabel(new GuiNpcLabel(109, "ability.dmgAtEnd", col2LabelX, y + 5)); - addButton(new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtEnd() ? 1 : 0)); + GuiNpcButton dmgEndBtn = new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtEnd() ? 1 : 0); + dmgEndBtn.setHoverText("ability.hover.dmgAtEnd"); + addButton(dmgEndBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java index c846565c4..edeb59635 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java @@ -39,7 +39,9 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(100, "ability.placement", col2LabelX, y + 5)); String[] placements = {"Caster", "Target", "Ahead"}; - addButton(new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacement().ordinal())); + GuiNpcButton placementBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacement().ordinal()); + placementBtn.setHoverText("ability.hover.placement"); + addButton(placementBtn); y += 24; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java index 4cc7bc89a..b56828470 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java @@ -51,7 +51,9 @@ public class SubGuiAbilityVortex extends SubGuiAbilityConfig { // Row 3: AOE + Max Targets addLabel(new GuiNpcLabel(104, "ability.aoe", labelX, y + 5)); - addButton(new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isAoe() ? 1 : 0)); + GuiNpcButton aoeBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isAoe() ? 1 : 0); + aoeBtn.setHoverText("ability.hover.aoe"); + addButton(aoeBtn); addLabel(new GuiNpcLabel(105, "ability.maxTargets", col2LabelX, y + 5)); addTextField(createIntField(105, col2FieldX, y, 50, vortex.getMaxTargets())); @@ -65,7 +67,9 @@ public class SubGuiAbilityVortex extends SubGuiAbilityConfig { // Row 5: Damage on Pull + Pull Damage addLabel(new GuiNpcLabel(108, "ability.dmgOnPull", labelX, y + 5)); - addButton(new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isDamageOnPull() ? 1 : 0)); + GuiNpcButton dmgOnPullBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isDamageOnPull() ? 1 : 0); + dmgOnPullBtn.setHoverText("ability.hover.dmgOnPull"); + addButton(dmgOnPullBtn); addLabel(new GuiNpcLabel(109, "ability.pullDamage", col2LabelX, y + 5)); addTextField(createFloatField(109, col2FieldX, y, 50, vortex.getPullDamage())); diff --git a/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java b/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java index 882f5817b..cc3e06cca 100644 --- a/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java +++ b/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java @@ -58,7 +58,7 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr if (scrollAnimations == null) { scrollAnimations = new GuiCustomScroll(this, 0, 0); - scrollAnimations.setSize(212, 163); + scrollAnimations.setSize(212, 150); } scrollAnimations.setList(getSearchList()); if (selectedName != null) { @@ -68,7 +68,8 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr scrollAnimations.guiTop = guiTop + 14; this.addScroll(scrollAnimations); - addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 4, guiTop + 179, 212, 20, search)); + // Search textbox - moved up to avoid overlapping with buttons + addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 4, guiTop + 166, 212, 20, search)); } @Override diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java index 8444c5c1d..11bbaf451 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java @@ -57,6 +57,7 @@ public abstract class GuiNPCInterface extends GuiScreen { public float bgScaleX = 1; public float bgScaleY = 1; public float bgScaleZ = 1; + public int bgTextureHeight = 256; // Actual content height in texture (for bottom border stitching) public GuiNPCInterface(EntityNPCInterface npc) { this.player = Minecraft.getMinecraft().thePlayer; @@ -74,6 +75,11 @@ public abstract class GuiNPCInterface extends GuiScreen { background = new ResourceLocation("customnpcs", "textures/gui/" + texture); } + public void setBackground(String texture, int textureHeight) { + background = new ResourceLocation("customnpcs", "textures/gui/" + texture); + bgTextureHeight = textureHeight; + } + public ResourceLocation getResource(String texture) { return new ResourceLocation("customnpcs", "textures/gui/" + texture); } @@ -421,23 +427,44 @@ public abstract class GuiNPCInterface extends GuiScreen { GL11.glTranslatef(guiLeft, guiTop, 0); GL11.glScalef(bgScale * bgScaleX, bgScale * bgScaleY, bgScale * bgScaleZ); mc.renderEngine.bindTexture(background); + + // Handle Y dimension: if ySize < texture content height, stitch bottom border + int topHeight = ySize; + int bottomHeight = 0; + int bottomTextureV = 0; + if (ySize < bgTextureHeight) { + // Keep bottom border from texture bottom (last 6 pixels of actual content) + bottomHeight = 6; + topHeight = ySize - bottomHeight; + bottomTextureV = bgTextureHeight - bottomHeight; + } + if (xSize > 256) { // GUI wider than texture: draw left portion, then right portion from texture edge - drawTexturedModalRect(0, 0, 0, 0, 250, ySize); - drawTexturedModalRect(250, 0, 256 - (xSize - 250), 0, xSize - 250, ySize); + drawTexturedModalRect(0, 0, 0, 0, 250, topHeight); + drawTexturedModalRect(250, 0, 256 - (xSize - 250), 0, xSize - 250, topHeight); + if (bottomHeight > 0) { + drawTexturedModalRect(0, topHeight, 0, bottomTextureV, 250, bottomHeight); + drawTexturedModalRect(250, topHeight, 256 - (xSize - 250), bottomTextureV, xSize - 250, bottomHeight); + } } else if (xSize < 256) { // GUI narrower than texture: stitch left and right edges together - // Left portion (first half of GUI) int leftWidth = xSize / 2; - // Right portion width (remaining) int rightWidth = xSize - leftWidth; - // Draw left side from texture start - drawTexturedModalRect(0, 0, 0, 0, leftWidth, ySize); - // Draw right side from texture end (256 - rightWidth) - drawTexturedModalRect(leftWidth, 0, 256 - rightWidth, 0, rightWidth, ySize); + // Draw top portion + drawTexturedModalRect(0, 0, 0, 0, leftWidth, topHeight); + drawTexturedModalRect(leftWidth, 0, 256 - rightWidth, 0, rightWidth, topHeight); + // Draw bottom border strip + if (bottomHeight > 0) { + drawTexturedModalRect(0, topHeight, 0, bottomTextureV, leftWidth, bottomHeight); + drawTexturedModalRect(leftWidth, topHeight, 256 - rightWidth, bottomTextureV, rightWidth, bottomHeight); + } } else { - // GUI exactly 256px: draw full texture - drawTexturedModalRect(0, 0, 0, 0, xSize, ySize); + // GUI exactly 256px wide + drawTexturedModalRect(0, 0, 0, 0, xSize, topHeight); + if (bottomHeight > 0) { + drawTexturedModalRect(0, topHeight, 0, bottomTextureV, xSize, bottomHeight); + } } GL11.glPopMatrix(); } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 8ac2d99c0..750a75f54 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -115,6 +115,7 @@ gui.play=Play gui.selectSound=Select Sound gui.selectnpc=Select NPC gui.select=Select +gui.sync=Sync gui.range=Range gui.partly=Partially gui.copy=Copy @@ -1504,6 +1505,8 @@ menu.abilities=Abilities ability.availableTypes=Available Types ability.npcAbilities=NPC Abilities ability.globalCooldown=Global Cooldown +ability.minCooldown=Min CD +ability.maxCooldown=Max CD ability.edit=Edit Ability ability.weight=Weight ability.targeting=Targeting @@ -1679,7 +1682,7 @@ ability.innerColor=Inner Color ability.outerColor=Outer Color ability.outerEnabled=Outer Glow ability.outerWidth=Outer Width -ability.lightning=Enable Lightning +ability.lightning=Lightning ability.lightningDensity=Density ability.lightningRadius=Radius ability.anchorPoint=Anchor Point @@ -1725,6 +1728,50 @@ ability.typeId=Type ID ability.conditions=Conditions ability.noTypeSettings=No type-specific settings +ability.hover.weight=Higher weight = more likely to be chosen when multiple abilities available +ability.hover.lockMove=Prevents NPC from moving while ability is charging or active +ability.hover.interruptible=If enabled, ability can be interrupted by taking damage +ability.hover.dazed=Stun duration in ticks if ability is interrupted (20 ticks = 1 second) +ability.hover.windup=Charge-up time before ability activates (20 ticks = 1 second) +ability.hover.cooldown=Time before ability can be used again (20 ticks = 1 second) +ability.hover.sync=Set windup ticks to match animation duration +ability.hover.minRange=Target must be at least this far away +ability.hover.maxRange=Target must be within this distance +ability.hover.targeting=How the ability selects its target +ability.hover.conditions=Requirements that must be met for ability to activate +ability.hover.showTelegraph=Show visual warning indicator during windup +ability.hover.windUpColor=Color of telegraph during charge-up phase +ability.hover.activeColor=Color of telegraph when ability is active +ability.hover.homing=Projectile tracks toward target +ability.hover.homingStr=How aggressively the projectile tracks (higher = tighter turns) +ability.hover.explosive=Creates explosion on impact +ability.hover.explosionRad=Size of explosion radius +ability.hover.piercing=Hits multiple targets instead of stopping on first hit +ability.hover.lightning=Add electrical effect to visuals +ability.hover.outerGlow=Enable outer glow layer around projectile +ability.hover.anchorPoint=Where on the NPC the ability spawns from +ability.hover.damage=Base damage dealt to targets +ability.hover.speed=Movement speed of projectile +ability.hover.lifetime=Maximum ticks before despawning +ability.hover.knockback=Push force applied to targets +ability.hover.boomerang=Projectile returns to caster after reaching max distance +ability.hover.dashMode=Aggressive dashes toward target, Defensive dashes away +ability.hover.aoe=Affects all valid targets in range instead of just one +ability.hover.dmgOnPull=Deal damage continuously while pulling targets +ability.hover.lineOfSight=Requires clear line of sight to the target +ability.hover.dmgAtStart=Deal damage at the teleport origin location +ability.hover.dmgAtEnd=Deal damage at the teleport destination +ability.hover.instant=Heals instantly instead of over time +ability.hover.healSelf=Ability can heal the casting NPC +ability.hover.healAllies=Ability can heal nearby allied NPCs +ability.hover.placement=Where the ability effect is placed (Caster, Target, etc.) +ability.hover.lockTarget=Sweeper beam tracks the target's position +ability.hover.canCounter=Enable counterattack when blocking damage +ability.hover.counterType=Flat = fixed damage, Percent = % of blocked damage +ability.hover.shape=Shape of the hazard zone (Circle, Ring, Cone) +ability.hover.affectsCaster=Hazard can damage the NPC that created it +ability.hover.sweepMode=Swipe = single arc attack, Spin = continuous rotation + # Conditions condition.edit=Edit Condition condition.hp_above=NPC HP Above From aeb0093b4d9ded959e0327c2d70214d3c1f40712 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 27 Jan 2026 18:04:46 -0500 Subject: [PATCH 20/85] Add Tooltips --- .../gui/advanced/SubGuiConditionEdit.java | 7 +- .../ability/SubGuiAbilityEffects.java | 9 +- .../npcs/client/gui/util/GuiNPCInterface.java | 5 + .../npcs/client/gui/util/GuiNpcButton.java | 27 ++- .../npcs/client/gui/util/GuiNpcTextField.java | 157 ++++++++++++++++++ .../assets/customnpcs/lang/en_US.lang | 16 ++ 6 files changed, 210 insertions(+), 11 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java index 3d2874dbc..f45858a99 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java @@ -88,7 +88,9 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi // Condition Type selector addLabel(new GuiNpcLabel(1, "gui.type", labelX, y + 5)); - addButton(new GuiNpcButton(1, fieldX, y, 115, 20, CONDITION_TYPES, selectedTypeIndex)); + GuiNpcButton typeBtn = new GuiNpcButton(1, fieldX, y, 115, 20, CONDITION_TYPES, selectedTypeIndex); + typeBtn.setHoverText("condition.hover.type"); + addButton(typeBtn); y += 26; // Type-specific fields @@ -99,6 +101,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi GuiNpcTextField hitsField = new GuiNpcTextField(2, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(requiredHits)); hitsField.setIntegersOnly(); hitsField.setMinMaxDefault(1, 100, 3); + hitsField.setHoverText("condition.hover.hits"); addTextField(hitsField); y += 24; @@ -106,6 +109,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi GuiNpcTextField ticksField = new GuiNpcTextField(3, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(withinTicks)); ticksField.setIntegersOnly(); ticksField.setMinMaxDefault(1, 1200, 60); + ticksField.setHoverText("condition.hover.within"); addTextField(ticksField); } else { // HP threshold field (as percentage) @@ -114,6 +118,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi GuiNpcTextField thresholdField = new GuiNpcTextField(4, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(percent)); thresholdField.setIntegersOnly(); thresholdField.setMinMaxDefault(1, 99, 50); + thresholdField.setHoverText("condition.hover.threshold"); addTextField(thresholdField); addLabel(new GuiNpcLabel(4, "%", fieldX + 45, y + 5)); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java index 103d87224..b4eced168 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java @@ -74,13 +74,16 @@ public class SubGuiAbilityEffects extends SubGuiInterface implements ITextfieldL // Type selector button int typeIndex = effect.getType().ordinal(); - addButton(new GuiNpcButton(baseId, guiLeft + 8, y, 100, 20, EFFECT_TYPE_NAMES, typeIndex)); + GuiNpcButton typeBtn = new GuiNpcButton(baseId, guiLeft + 8, y, 100, 20, EFFECT_TYPE_NAMES, typeIndex); + typeBtn.setHoverText("effect.hover.type"); + addButton(typeBtn); // Duration text field GuiNpcTextField durField = new GuiNpcTextField(baseId + 1, this, fontRendererObj, guiLeft + 112, y, 50, 20, String.valueOf(effect.getDurationTicks())); durField.setIntegersOnly(); durField.setMinMaxDefault(1, 12000, 60); + durField.setHoverText("effect.hover.duration"); addTextField(durField); // Amplifier selector (0-10) @@ -88,7 +91,9 @@ public class SubGuiAbilityEffects extends SubGuiInterface implements ITextfieldL for (int a = 0; a <= 10; a++) { ampValues[a] = String.valueOf(a); } - addButton(new GuiNpcButton(baseId + 2, guiLeft + 168, y, 40, 20, ampValues, effect.getAmplifier())); + GuiNpcButton ampBtn = new GuiNpcButton(baseId + 2, guiLeft + 168, y, 40, 20, ampValues, effect.getAmplifier()); + ampBtn.setHoverText("effect.hover.amplifier"); + addButton(ampBtn); // Delete button addButton(new GuiNpcButton(baseId + 3, guiLeft + 215, y, 20, 20, "X")); diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java index 11bbaf451..4ddd820c0 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java @@ -409,6 +409,11 @@ public abstract class GuiNPCInterface extends GuiScreen { button.drawHover(i, j, subGui); } } + for (GuiNpcTextField textField : textfields.values()) { + if (textField.hasHoverText()) { + textField.drawHover(i, j, subGui); + } + } for (GuiScreen gui : extra.values()) gui.drawScreen(i, j, f); diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java b/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java index c14d0da83..d09bddecf 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java @@ -3,6 +3,7 @@ package noppes.npcs.client.gui.util; import kamkeel.npcs.util.TextSplitter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; @@ -217,17 +218,27 @@ public class GuiNpcButton extends GuiButton { maxHeight += 2 + (textLines.size() - 1) * 10; } - int gameWidth = mc.displayWidth; - int maxTooltipX = gameWidth - maxWidth - 4; + // Get scaled screen dimensions + ScaledResolution scaledRes = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + int screenWidth = scaledRes.getScaledWidth(); + int screenHeight = scaledRes.getScaledHeight(); - if (j2 > maxTooltipX) { - int diff = j2 - maxTooltipX; - j2 -= diff; - GL11.glTranslatef(-300, 0, 0); + // If tooltip would go off right edge, draw on left side of mouse + if (j2 + maxWidth + 6 > screenWidth) { + j2 = x - maxWidth - 16; } - if (k2 + maxHeight + 6 > mc.displayHeight) { - k2 = mc.displayHeight - maxHeight - 6; + // Keep tooltip on screen horizontally + if (j2 < 4) { + j2 = 4; + } + + // Keep tooltip on screen vertically + if (k2 + maxHeight + 6 > screenHeight) { + k2 = screenHeight - maxHeight - 6; + } + if (k2 < 4) { + k2 = 4; } this.zLevel = 300.0F; diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java b/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java index 91f3ca142..436b47bb5 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java @@ -4,6 +4,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; +import net.minecraft.util.StatCollector; +import net.minecraft.client.gui.ScaledResolution; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import net.minecraft.client.renderer.RenderHelper; +import kamkeel.npcs.util.TextSplitter; +import java.util.List; +import java.util.Iterator; public class GuiNpcTextField extends GuiTextField { public boolean enabled = true; @@ -18,6 +26,9 @@ public class GuiNpcTextField extends GuiTextField { public float minFloat = 0, maxFloat = Float.MAX_VALUE, defFloat = 0; protected static GuiNpcTextField activeTextfield = null; public boolean canEdit = true; + public String hoverableText = ""; + private boolean wasHovered = false; + private int hoverCount = 0; private final int[] allowedSpecialChars = {14, 211, 203, 205}; @@ -203,5 +214,151 @@ public class GuiNpcTextField extends GuiTextField { return this; } + public void setHoverText(String text) { + this.hoverableText = StatCollector.translateToLocal(text); + } + public boolean hasHoverText() { + return hoverableText != null && !hoverableText.isEmpty(); + } + + public boolean isMouseOver(int mouseX, int mouseY) { + return mouseX >= xPosition && mouseX < xPosition + width && + mouseY >= yPosition && mouseY < yPosition + height; + } + + public void drawHover(int mouseX, int mouseY, boolean hasSubGui) { + if (hasSubGui || !enabled || hoverableText.isEmpty()) + return; + + boolean isHovered = isMouseOver(mouseX, mouseY); + if (!isHovered) { + wasHovered = false; + hoverCount = 0; + return; + } + + if (!wasHovered) { + wasHovered = true; + hoverCount = 0; + } else if (hoverCount < 65) { + hoverCount++; + } + + if (hoverCount > 60) { + GL11.glPushMatrix(); + Minecraft mc = Minecraft.getMinecraft(); + GL11.glColor4f(1, 1, 1, 1); + List lines = TextSplitter.splitText(hoverableText, 30); + drawHoveringText(lines, mouseX, mouseY, mc); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + } + + protected void drawHoveringText(List textLines, int x, int y, Minecraft mc) { + if (mc.fontRenderer == null || textLines.isEmpty()) + return; + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + int maxWidth = 0; + for (String s : textLines) { + int lineWidth = mc.fontRenderer.getStringWidth(s); + if (lineWidth > maxWidth) { + maxWidth = lineWidth; + } + } + + int j2 = x + 12; + int k2 = y - 12; + int maxHeight = 8; + + if (textLines.size() > 1) { + maxHeight += 2 + (textLines.size() - 1) * 10; + } + + // Get scaled screen dimensions + ScaledResolution scaledRes = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + int screenWidth = scaledRes.getScaledWidth(); + int screenHeight = scaledRes.getScaledHeight(); + + // If tooltip would go off right edge, draw on left side of mouse + if (j2 + maxWidth + 6 > screenWidth) { + j2 = x - maxWidth - 16; + } + + // Keep tooltip on screen horizontally + if (j2 < 4) { + j2 = 4; + } + + // Keep tooltip on screen vertically + if (k2 + maxHeight + 6 > screenHeight) { + k2 = screenHeight - maxHeight - 6; + } + if (k2 < 4) { + k2 = 4; + } + + int zLevel = 300; + int bgColor = 0xF0100010; + int borderColor1 = 0x505000FF; + int borderColor2 = (borderColor1 & 0xFEFEFE) >> 1 | borderColor1 & 0xFF000000; + + drawGradientRect(j2 - 3, k2 - 4, j2 + maxWidth + 3, k2 - 3, bgColor, bgColor, zLevel); + drawGradientRect(j2 - 3, k2 + maxHeight + 3, j2 + maxWidth + 3, k2 + maxHeight + 4, bgColor, bgColor, zLevel); + drawGradientRect(j2 - 3, k2 - 3, j2 + maxWidth + 3, k2 + maxHeight + 3, bgColor, bgColor, zLevel); + drawGradientRect(j2 - 4, k2 - 3, j2 - 3, k2 + maxHeight + 3, bgColor, bgColor, zLevel); + drawGradientRect(j2 + maxWidth + 3, k2 - 3, j2 + maxWidth + 4, k2 + maxHeight + 3, bgColor, bgColor, zLevel); + drawGradientRect(j2 - 3, k2 - 3 + 1, j2 - 3 + 1, k2 + maxHeight + 3 - 1, borderColor1, borderColor2, zLevel); + drawGradientRect(j2 + maxWidth + 2, k2 - 3 + 1, j2 + maxWidth + 3, k2 + maxHeight + 3 - 1, borderColor1, borderColor2, zLevel); + drawGradientRect(j2 - 3, k2 - 3, j2 + maxWidth + 3, k2 - 3 + 1, borderColor1, borderColor1, zLevel); + drawGradientRect(j2 - 3, k2 + maxHeight + 2, j2 + maxWidth + 3, k2 + maxHeight + 3, borderColor2, borderColor2, zLevel); + + for (int l = 0; l < textLines.size(); ++l) { + String s1 = textLines.get(l); + mc.fontRenderer.drawStringWithShadow(s1, j2, k2, -1); + if (l == 0) { + k2 += 2; + } + k2 += 10; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } + + protected void drawGradientRect(int left, int top, int right, int bottom, int startColor, int endColor, int zLevel) { + float f = (float)(startColor >> 24 & 255) / 255.0F; + float f1 = (float)(startColor >> 16 & 255) / 255.0F; + float f2 = (float)(startColor >> 8 & 255) / 255.0F; + float f3 = (float)(startColor & 255) / 255.0F; + float f4 = (float)(endColor >> 24 & 255) / 255.0F; + float f5 = (float)(endColor >> 16 & 255) / 255.0F; + float f6 = (float)(endColor >> 8 & 255) / 255.0F; + float f7 = (float)(endColor & 255) / 255.0F; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glShadeModel(GL11.GL_SMOOTH); + net.minecraft.client.renderer.Tessellator tessellator = net.minecraft.client.renderer.Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(f1, f2, f3, f); + tessellator.addVertex((double)right, (double)top, (double)zLevel); + tessellator.addVertex((double)left, (double)top, (double)zLevel); + tessellator.setColorRGBA_F(f5, f6, f7, f4); + tessellator.addVertex((double)left, (double)bottom, (double)zLevel); + tessellator.addVertex((double)right, (double)bottom, (double)zLevel); + tessellator.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 750a75f54..d4f75d883 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1783,6 +1783,22 @@ condition.percent=Threshold condition.hits=Required Hits condition.within=Within (ticks) +# Condition Hover Tooltips +condition.hover.type=Condition type that must be met for ability to activate +condition.hover.hpAbove=Activates when NPC health is above this percentage +condition.hover.hpBelow=Activates when NPC health is below this percentage +condition.hover.targetHpAbove=Activates when target's health is above this percentage +condition.hover.targetHpBelow=Activates when target's health is below this percentage +condition.hover.hitCount=Activates after receiving X hits within the time window +condition.hover.hits=Number of hits required to trigger condition +condition.hover.within=Time window in ticks (20 ticks = 1 second) +condition.hover.threshold=Health percentage threshold (1-99%) + +# Effect Hover Tooltips +effect.hover.type=Potion effect type to apply to targets +effect.hover.duration=Effect duration in ticks (20 ticks = 1 second) +effect.hover.amplifier=Effect strength level (higher = stronger) + # ========================================= # Auction House # ========================================= From e599ed67f5a9186b47db3be7168af592b67499e3 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 27 Jan 2026 22:19:26 -0300 Subject: [PATCH 21/85] Added animations to these abilities --- .../data/ability/AbilityAnimation.java | 17 +- .../data/ability/type/AbilityEnergyBeam.java | 20 ++ .../data/ability/type/AbilityOrb.java | 12 + .../ABILITYBEAM/Ability_Beam_Active.json | 230 ++++++++++++++++++ .../ABILITYBEAM/Ability_Beam_Windup.json | 158 ++++++++++++ .../ABILITYORB/Ability_Orb_Windup.json | 192 +++++++++++++++ 6 files changed, 621 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json create mode 100644 src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json create mode 100644 src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java index 3aea051f3..190be70d3 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java @@ -2,7 +2,6 @@ package kamkeel.npcs.controllers.data.ability; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; -import noppes.npcs.api.handler.data.IAnimation; import noppes.npcs.controllers.data.Animation; import noppes.npcs.util.NBTJsonUtil; import org.apache.commons.io.FileUtils; @@ -13,7 +12,9 @@ import java.util.HashMap; import static kamkeel.npcs.controllers.data.ability.AbilityPhase.*; -public enum AbilityAnimation {; +public enum AbilityAnimation { + ABILITYORB("Ability_Orb_Windup", WINDUP), + ABILITYBEAM("Ability_Beam_Windup", "Ability_Beam_Active"); private final HashMap animationNames = new HashMap<>(); AbilityAnimation(String idle, String windUp, String active, String recovery) { @@ -49,7 +50,7 @@ public enum AbilityAnimation {; return getFileFromName(animationNames.get(phase)); } - public IAnimation getAnimation(AbilityPhase phase) { + public Animation getAnimation(AbilityPhase phase) { try { File file = getFile(phase); @@ -68,24 +69,24 @@ public enum AbilityAnimation {; return null; } - public IAnimation idle() { + public Animation idle() { return getAnimation(IDLE); } - public IAnimation windUp() { + public Animation windUp() { return getAnimation(WINDUP); } - public IAnimation active() { + public Animation active() { return getAnimation(ACTIVE); } - public IAnimation dazed() { + public Animation dazed() { return getAnimation(DAZED); } private File getFileFromName(String fileName) { - try (InputStream stream = CustomNpcs.class.getResourceAsStream("/internal/data/animations/" + name() + "/" + fileName + ".json")) { + try (InputStream stream = CustomNpcs.class.getResourceAsStream("/internal/animations/" + name() + "/" + fileName + ".json")) { File file = new File("temp"); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 3bcc5072c..2dea02f5a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; @@ -17,6 +18,7 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.controllers.data.Animation; import noppes.npcs.entity.EntityNPCInterface; /** @@ -70,6 +72,8 @@ public class AbilityEnergyBeam extends Ability { // Anchor point for charging position private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private final AbilityAnimation animation = AbilityAnimation.ABILITYBEAM; + // Transient state for beam entity (used during windup charging) private transient EntityAbilityBeam beamEntity = null; @@ -308,4 +312,20 @@ public class AbilityEnergyBeam extends Ability { public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } public AnchorPoint getAnchorPoint() { return anchorPoint; } public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + + @Override + public Animation getWindUpAnimation() { + if (windUpAnimationId == -1) + return animation.windUp(); + + return super.getWindUpAnimation(); + } + + @Override + public Animation getActiveAnimation() { + if (activeAnimationId == -1) + return animation.active(); + + return super.getActiveAnimation(); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 6bc6da964..4832c2281 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; @@ -17,6 +18,7 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.controllers.data.Animation; import noppes.npcs.entity.EntityNPCInterface; /** @@ -71,6 +73,8 @@ public class AbilityOrb extends Ability { // Transient state for orb entity (used during windup charging) private transient EntityAbilityOrb orbEntity = null; + private final AbilityAnimation animation = AbilityAnimation.ABILITYORB; + public AbilityOrb() { this.typeId = "ability.cnpc.orb"; this.name = "Orb"; @@ -459,4 +463,12 @@ public class AbilityOrb extends Ability { public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + + @Override + public Animation getWindUpAnimation() { + if (windUpAnimationId != -1) + return super.getWindUpAnimation(); + + return animation.windUp(); + } } diff --git a/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json b/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json new file mode 100644 index 000000000..eb9516f38 --- /dev/null +++ b/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json @@ -0,0 +1,230 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 107.0f, + "Rotation0": -94.0f, + "Pivot0": -5.0f, + "Pivot1": 3.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 88.0f, + "Rotation0": -56.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 12.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 25.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 12.0f, + "Rotation0": -75.0f, + "Pivot0": -2.0f, + "Pivot1": 3.0f, + "Rotation2": 50.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": -18.0f, + "Rotation0": -107.0f, + "Pivot0": -1.0f, + "Pivot1": 2.0f, + "Rotation2": 50.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -4.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 18.0f, + "Pivot0": -4.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.75f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 12.0f, + "Rotation0": -75.0f, + "Pivot0": -2.0f, + "Pivot1": 3.0f, + "Rotation2": 50.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": -18.0f, + "Rotation0": -107.0f, + "Pivot0": -1.0f, + "Pivot1": 2.0f, + "Rotation2": 50.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -4.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 18.0f, + "Pivot0": -4.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 20 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 2, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Beam_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json b/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json new file mode 100644 index 000000000..6c53e1eab --- /dev/null +++ b/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json @@ -0,0 +1,158 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 94.0f, + "Rotation0": -94.0f, + "Pivot0": -4.0f, + "Pivot1": 3.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 75.0f, + "Rotation0": -56.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 50.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 107.0f, + "Rotation0": -94.0f, + "Pivot0": -5.0f, + "Pivot1": 3.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 88.0f, + "Rotation0": -56.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 12.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 25.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 35 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 1, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Beam_Windup", + "WhileStanding": 1b +} diff --git a/src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json b/src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json new file mode 100644 index 000000000..77f21f941 --- /dev/null +++ b/src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json @@ -0,0 +1,192 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 31.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 3.0f, + "Part": "RIGHT_LEG", + "Rotation1": 69.0f, + "Rotation0": 12.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 37.0f, + "Rotation0": -101.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": -88.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -90.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Duration": 20 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": -44.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": -37.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -50.0f, + "Rotation0": 50.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": -56.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_LEG", + "Rotation1": -75.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": -44.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": -37.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -50.0f, + "Rotation0": 50.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": -56.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_LEG", + "Rotation1": -75.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 3, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Orb_Windup", + "WhileStanding": 1b +} From 83ccd25b33949c4a597651cc401dfa8734188e8c Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 14:44:19 -0500 Subject: [PATCH 22/85] Merge Conflicts + Scripting for Abilities --- src/api | 2 +- .../data/ability/type/AbilityCharge.java | 4 +- .../data/ability/type/AbilityCutter.java | 19 +- .../data/ability/type/AbilityDash.java | 19 +- .../data/ability/type/AbilityDisc.java | 13 +- .../data/ability/type/AbilityEnergyBeam.java | 18 +- .../data/ability/type/AbilityGuard.java | 24 ++- .../data/ability/type/AbilityHazard.java | 34 +++- .../data/ability/type/AbilityHeal.java | 4 +- .../data/ability/type/AbilityHeavyHit.java | 3 +- .../data/ability/type/AbilityLaserShot.java | 3 +- .../data/ability/type/AbilityOrb.java | 16 +- .../data/ability/type/AbilityProjectile.java | 4 +- .../data/ability/type/AbilityShockwave.java | 4 +- .../data/ability/type/AbilitySlam.java | 4 +- .../data/ability/type/AbilitySweeper.java | 3 +- .../data/ability/type/AbilityTeleport.java | 19 +- .../data/ability/type/AbilityTrap.java | 19 +- .../data/ability/type/AbilityVortex.java | 4 +- src/main/java/noppes/npcs/DataAbilities.java | 44 +++++ .../advanced/ability/SubGuiAbilityCutter.java | 6 +- .../advanced/ability/SubGuiAbilityDash.java | 4 +- .../advanced/ability/SubGuiAbilityDisc.java | 4 +- .../ability/SubGuiAbilityEnergyBeam.java | 4 +- .../advanced/ability/SubGuiAbilityGuard.java | 4 +- .../advanced/ability/SubGuiAbilityHazard.java | 8 +- .../advanced/ability/SubGuiAbilityOrb.java | 4 +- .../ability/SubGuiAbilityTeleport.java | 6 +- .../advanced/ability/SubGuiAbilityTrap.java | 4 +- .../npcs/scripted/entity/ScriptNpc.java | 4 + .../scripted/wrapper/ScriptDataAbilities.java | 163 ++++++++++++++++++ 31 files changed, 408 insertions(+), 63 deletions(-) create mode 100644 src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java diff --git a/src/api b/src/api index 2054012fa..3050910ef 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 2054012fae799fa233b99824b4f649d311eff86f +Subproject commit 3050910efbc6e301e4ef18fefc20529c507a7bae diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 7a1d9babf..d87ed05ee 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -18,6 +18,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityCharge; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityCharge; + import java.util.HashSet; import java.util.List; import java.util.Set; @@ -25,7 +27,7 @@ import java.util.Set; /** * Charge ability: Rush attack where NPC charges in a line, damaging all targets hit. */ -public class AbilityCharge extends Ability { +public class AbilityCharge extends Ability implements IAbilityCharge { // Type-specific parameters private float chargeSpeed = 0.8f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index b3052eeac..1d77e9219 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -15,6 +15,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityCutter; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityCutter; + import java.util.HashSet; import java.util.List; import java.util.Set; @@ -24,7 +26,7 @@ import java.util.Set; * Deals damage to all entities in a cone/arc in front of the caster. * Can sweep outward over time or hit instantly. */ -public class AbilityCutter extends Ability { +public class AbilityCutter extends Ability implements IAbilityCutter { public enum SweepMode { SWIPE, @@ -254,14 +256,25 @@ public class AbilityCutter extends Ability { this.knockback = knockback; } - public SweepMode getSweepMode() { + public SweepMode getSweepModeEnum() { return sweepMode; } - public void setSweepMode(SweepMode sweepMode) { + public void setSweepModeEnum(SweepMode sweepMode) { this.sweepMode = sweepMode; } + @Override + public int getSweepMode() { + return sweepMode.ordinal(); + } + + @Override + public void setSweepMode(int mode) { + SweepMode[] values = SweepMode.values(); + this.sweepMode = mode >= 0 && mode < values.length ? values[mode] : SweepMode.SWIPE; + } + public float getSweepSpeed() { return sweepSpeed; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index cd4d42ac7..677578745 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -14,13 +14,15 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDash; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityDash; + import java.util.Random; /** * Dash ability: Quick evasive sidestep with NO telegraph. * Defensive repositioning move to evade attacks. */ -public class AbilityDash extends Ability { +public class AbilityDash extends Ability implements IAbilityDash { /** * Dash behavior mode. @@ -245,14 +247,25 @@ public class AbilityDash extends Ability { } // Getters & Setters - public DashMode getDashMode() { + public DashMode getDashModeEnum() { return dashMode; } - public void setDashMode(DashMode dashMode) { + public void setDashModeEnum(DashMode dashMode) { this.dashMode = dashMode; } + @Override + public int getDashMode() { + return dashMode.ordinal(); + } + + @Override + public void setDashMode(int mode) { + DashMode[] values = DashMode.values(); + this.dashMode = mode >= 0 && mode < values.length ? values[mode] : DashMode.AGGRESSIVE; + } + public float getDashDistance() { return dashDistance; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 67fa23cdf..2c7b8e43c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -17,13 +17,14 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDisc; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.api.ability.type.IAbilityDisc; import noppes.npcs.entity.EntityNPCInterface; /** * Disc ability: Spawns a flat spinning disc projectile. * Has optional boomerang behavior to return to owner. */ -public class AbilityDisc extends Ability { +public class AbilityDisc extends Ability implements IAbilityDisc { // Movement properties private float speed = 0.6f; @@ -312,6 +313,12 @@ public class AbilityDisc extends Ability { public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } - public AnchorPoint getAnchorPoint() { return anchorPoint; } - public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + public AnchorPoint getAnchorPointEnum() { return anchorPoint; } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + + @Override + public int getAnchorPoint() { return anchorPoint.getId(); } + + @Override + public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 2dea02f5a..790489b2c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -12,12 +12,12 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; +import net.minecraft.nbt.NBTTagCompound;; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.api.ability.type.IAbilityEnergyBeam; import noppes.npcs.controllers.data.Animation; import noppes.npcs.entity.EntityNPCInterface; @@ -26,7 +26,7 @@ import noppes.npcs.entity.EntityNPCInterface; * The beam stays attached to the origin and curves as it homes in on target. * Cannot cross over itself (self-intersection prevention). */ -public class AbilityEnergyBeam extends Ability { +public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { // Movement properties private float speed = 0.4f; @@ -310,9 +310,8 @@ public class AbilityEnergyBeam extends Ability { public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } - public AnchorPoint getAnchorPoint() { return anchorPoint; } - public void setAnchorPoint(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + @Override public Animation getWindUpAnimation() { if (windUpAnimationId == -1) @@ -328,4 +327,13 @@ public class AbilityEnergyBeam extends Ability { return super.getActiveAnimation(); } + + public AnchorPoint getAnchorPointEnum() { return anchorPoint; } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + + @Override + public int getAnchorPoint() { return anchorPoint.getId(); } + + @Override + public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index fd9f25a24..84701b79e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -14,13 +14,15 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityGuard; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityGuard; + import java.util.Random; /** * Guard ability: Defensive stance that reduces incoming damage. * Can optionally counter-attack when hit. */ -public class AbilityGuard extends Ability { +public class AbilityGuard extends Ability implements IAbilityGuard { private static final Random RANDOM = new Random(); @@ -228,18 +230,34 @@ public class AbilityGuard extends Ability { return canCounter; } + @Override + public boolean canCounter() { + return canCounter; + } + public void setCanCounter(boolean canCounter) { this.canCounter = canCounter; } - public CounterType getCounterType() { + public CounterType getCounterTypeEnum() { return counterType; } - public void setCounterType(CounterType counterType) { + public void setCounterTypeEnum(CounterType counterType) { this.counterType = counterType; } + @Override + public int getCounterType() { + return counterType.ordinal(); + } + + @Override + public void setCounterType(int type) { + CounterType[] values = CounterType.values(); + this.counterType = type >= 0 && type < values.length ? values[type] : CounterType.FLAT; + } + public float getCounterValue() { return counterValue; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 3e9998f6f..79e43e2cc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -18,6 +18,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHazard; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityHazard; + import java.util.HashSet; import java.util.List; import java.util.Random; @@ -27,7 +29,7 @@ import java.util.Set; * Hazard ability: Creates persistent ground effect zones. * Deals damage and/or applies debuffs to entities in the zone over time. */ -public class AbilityHazard extends Ability { +public class AbilityHazard extends Ability implements IAbilityHazard { public enum HazardShape { CIRCLE, @@ -443,22 +445,44 @@ public class AbilityHazard extends Ability { this.coneAngle = coneAngle; } - public HazardShape getShape() { + public HazardShape getShapeEnum() { return shape; } - public void setShape(HazardShape shape) { + public void setShapeEnum(HazardShape shape) { this.shape = shape; } - public PlacementMode getPlacement() { + @Override + public int getShape() { + return shape.ordinal(); + } + + @Override + public void setShape(int shape) { + HazardShape[] values = HazardShape.values(); + this.shape = shape >= 0 && shape < values.length ? values[shape] : HazardShape.CIRCLE; + } + + public PlacementMode getPlacementEnum() { return placement; } - public void setPlacement(PlacementMode placement) { + public void setPlacementEnum(PlacementMode placement) { this.placement = placement; } + @Override + public int getPlacement() { + return placement.ordinal(); + } + + @Override + public void setPlacement(int placement) { + PlacementMode[] values = PlacementMode.values(); + this.placement = placement >= 0 && placement < values.length ? values[placement] : PlacementMode.AT_CASTER; + } + public float getDamagePerSecond() { return damagePerSecond; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index f19a7cb02..11aed6c47 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -15,6 +15,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHeal; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityHeal; + import java.util.ArrayList; import java.util.List; @@ -22,7 +24,7 @@ import java.util.List; * Heal ability: Restore health to self or allies. * Can heal a fixed amount or percentage of max health. */ -public class AbilityHeal extends Ability { +public class AbilityHeal extends Ability implements IAbilityHeal { // Type-specific parameters private int durationTicks = 60; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 32335daeb..82091c041 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -11,13 +11,14 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHeavyHit; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.api.ability.type.IAbilityHeavyHit; import noppes.npcs.entity.EntityNPCInterface; /** * Heavy Hit ability: Single-target melee attack with optional stun. * Deals high damage to one target and can stun them. */ -public class AbilityHeavyHit extends Ability { +public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { private float damage = 8.0f; private float knockback = 2.0f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 8084aaad4..44b6bc0b5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -13,13 +13,14 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityLaserShot; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.api.ability.type.IAbilityLaserShot; import noppes.npcs.entity.EntityNPCInterface; /** * Laser Shot ability: Fast expanding thin line that pierces through targets. * Travels in a straight line from origin, damaging all entities it passes through. */ -public class AbilityLaserShot extends Ability { +public class AbilityLaserShot extends Ability implements IAbilityLaserShot { // Laser properties private float laserWidth = 0.3f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 4832c2281..fabdf6ab0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -19,6 +19,7 @@ import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.controllers.data.Animation; +import noppes.npcs.api.ability.type.IAbilityOrb; import noppes.npcs.entity.EntityNPCInterface; /** @@ -26,7 +27,7 @@ import noppes.npcs.entity.EntityNPCInterface; * The EntityAbilityOrb handles all movement, collision, and damage logic. * This ability just configures and spawns the orb entity. */ -public class AbilityOrb extends Ability { +public class AbilityOrb extends Ability implements IAbilityOrb { // Movement properties private float orbSpeed = 0.5f; @@ -456,11 +457,11 @@ public class AbilityOrb extends Ability { this.lightningFadeTime = lightningFadeTime; } - public AnchorPoint getAnchorPoint() { + public AnchorPoint getAnchorPointEnum() { return anchorPoint; } - public void setAnchorPoint(AnchorPoint anchorPoint) { + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } @@ -471,4 +472,13 @@ public class AbilityOrb extends Ability { return animation.windUp(); } + + public int getAnchorPoint() { + return anchorPoint.getId(); + } + + @Override + public void setAnchorPoint(int point) { + this.anchorPoint = AnchorPoint.fromId(point); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 4a12ae4eb..56b12028e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -14,13 +14,15 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityProjectile; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityProjectile; + import java.util.List; /** * Projectile ability: Ranged attack that deals damage to target. * Currently instant damage - can be enhanced with custom projectile entities. */ -public class AbilityProjectile extends Ability { +public class AbilityProjectile extends Ability implements IAbilityProjectile { // Type-specific parameters private float damage = 6.0f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index 71d888978..c6b93134a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -15,13 +15,15 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityShockwave; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityShockwave; + import java.util.List; /** * Shockwave ability: Pushes targets away from the caster with damage. * Opposite of Vortex - instant knockback rather than gradual pull. */ -public class AbilityShockwave extends Ability { +public class AbilityShockwave extends Ability implements IAbilityShockwave { private float pushRadius = 8.0f; private float pushStrength = 1.5f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index dcb914a96..ba49ffb2c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -17,6 +17,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySlam; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilitySlam; + import java.util.List; /** @@ -28,7 +30,7 @@ import java.util.List; * - Landing: When NPC hits ground, deal AOE damage * - RECOVERY: Landing recovery animation */ -public class AbilitySlam extends Ability { +public class AbilitySlam extends Ability implements IAbilitySlam { // Type-specific config private float damage = 10.0f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 5a61c5dce..66f589a00 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -15,6 +15,7 @@ import noppes.npcs.LogWriter; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySweeper; import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.api.ability.type.IAbilitySweeper; import noppes.npcs.entity.EntityNPCInterface; /** @@ -25,7 +26,7 @@ import noppes.npcs.entity.EntityNPCInterface; * All damage logic is handled by the EntityAbilitySweeper entity to ensure * visual and damage hitbox alignment. */ -public class AbilitySweeper extends Ability { +public class AbilitySweeper extends Ability implements IAbilitySweeper { // Type-specific parameters private float beamLength = 10.0f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 218432fc9..05293a467 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -18,13 +18,15 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityTeleport; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityTeleport; + import java.util.List; import java.util.Random; /** * Teleport ability: Instant reposition with wall/line-of-sight checks. */ -public class AbilityTeleport extends Ability { +public class AbilityTeleport extends Ability implements IAbilityTeleport { /** * Teleport behavior mode. @@ -440,14 +442,25 @@ public class AbilityTeleport extends Ability { } // Getters & Setters - public TeleportMode getMode() { + public TeleportMode getModeEnum() { return mode; } - public void setMode(TeleportMode mode) { + public void setModeEnum(TeleportMode mode) { this.mode = mode; } + @Override + public int getMode() { + return mode.ordinal(); + } + + @Override + public void setMode(int mode) { + TeleportMode[] values = TeleportMode.values(); + this.mode = mode >= 0 && mode < values.length ? values[mode] : TeleportMode.BLINK; + } + public int getBlinkCount() { return blinkCount; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index dbb7273cd..b14a9ad67 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -16,6 +16,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityTrap; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityTrap; + import java.util.HashSet; import java.util.List; import java.util.Random; @@ -26,7 +28,7 @@ import java.util.UUID; * Trap ability: Places a proximity-triggered trap. * Features arm time, trigger radius, and various effects on trigger. */ -public class AbilityTrap extends Ability { +public class AbilityTrap extends Ability implements IAbilityTrap { public enum TrapPlacement { AT_CASTER, @@ -330,14 +332,25 @@ public class AbilityTrap extends Ability { this.durationTicks = Math.max(1, durationTicks); } - public TrapPlacement getPlacement() { + public TrapPlacement getPlacementEnum() { return placement; } - public void setPlacement(TrapPlacement placement) { + public void setPlacementEnum(TrapPlacement placement) { this.placement = placement; } + @Override + public int getPlacement() { + return placement.ordinal(); + } + + @Override + public void setPlacement(int placement) { + TrapPlacement[] values = TrapPlacement.values(); + this.placement = placement >= 0 && placement < values.length ? values[placement] : TrapPlacement.AT_TARGET; + } + public float getPlacementDistance() { return placementDistance; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index fef61779e..a85bbc442 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -14,6 +14,8 @@ import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityVortex; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.ability.type.IAbilityVortex; + import java.util.HashSet; import java.util.List; import java.util.Set; @@ -23,7 +25,7 @@ import java.util.UUID; * Vortex ability: Pulls targets toward the caster. * Can pull single target or AOE, with optional damage and stun on arrival. */ -public class AbilityVortex extends Ability { +public class AbilityVortex extends Ability implements IAbilityVortex { private float pullRadius = 8.0f; private float pullStrength = 0.8f; diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 0ff0aa8a1..2ddabc588 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -604,6 +604,50 @@ public class DataAbilities { } } + /** + * Force start a specific ability, bypassing normal selection and cooldown. + * If an ability is currently executing, it will be cancelled. + * + * @param ability The ability to start + * @param target The target entity (can be null for self-targeted abilities) + * @return true if the ability was started successfully + */ + public boolean forceStartAbility(Ability ability, EntityLivingBase target) { + if (ability == null || npc.worldObj.isRemote) { + return false; + } + + // Stop any currently executing ability + stopCurrentAbility(); + + // Reset the ability state + ability.reset(); + + // Start the ability directly + return startAbility(ability, target); + } + + /** + * Execute a preset ability on this NPC. + * The NPC does NOT need to have this ability assigned. + * + * @param presetName The name of the saved ability preset + * @param target The target entity (can be null for self-targeted abilities) + * @return true if the ability was started successfully + */ + public boolean executePresetAbility(String presetName, EntityLivingBase target) { + if (presetName == null || presetName.isEmpty() || npc.worldObj.isRemote) { + return false; + } + + Ability preset = AbilityController.Instance.getSavedAbility(presetName); + if (preset == null) { + return false; + } + + return forceStartAbility(preset, target); + } + // ═══════════════════════════════════════════════════════════════════ // SCRIPT EVENTS // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java index f10c63eef..a1539536d 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java @@ -61,7 +61,7 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { // Row 4: Sweep Mode + Piercing addLabel(new GuiNpcLabel(106, "ability.sweepMode", labelX, y + 5)); String[] sweepModes = {"Swipe", "Spin"}; - GuiNpcButton sweepModeBtn = new GuiNpcButton(106, fieldX, y, 70, 20, sweepModes, cutter.getSweepMode().ordinal()); + GuiNpcButton sweepModeBtn = new GuiNpcButton(106, fieldX, y, 70, 20, sweepModes, cutter.getSweepModeEnum().ordinal()); sweepModeBtn.setHoverText("ability.hover.sweepMode"); addButton(sweepModeBtn); @@ -73,7 +73,7 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { y += 24; // Row 5: Spin Duration (only for SPIN mode) + Effects button - if (cutter.getSweepMode() == AbilityCutter.SweepMode.SPIN) { + if (cutter.getSweepModeEnum() == AbilityCutter.SweepMode.SPIN) { addLabel(new GuiNpcLabel(108, "ability.duration", labelX, y + 5)); GuiNpcTextField durationField = createIntField(108, fieldX, y, 50, cutter.getSpinDurationTicks()); durationField.setMinMaxDefault(1, 1000, 60); @@ -88,7 +88,7 @@ public class SubGuiAbilityCutter extends SubGuiAbilityConfig { int value = button.getValue(); switch (id) { case 106: - cutter.setSweepMode(AbilityCutter.SweepMode.values()[value]); + cutter.setSweepModeEnum(AbilityCutter.SweepMode.values()[value]); initGui(); // Refresh to show/hide duration field break; case 107: diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java index f113b3c1c..9d7bd63b6 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java @@ -30,7 +30,7 @@ public class SubGuiAbilityDash extends SubGuiAbilityConfig { // Row 1: Dash Mode addLabel(new GuiNpcLabel(100, "ability.mode", labelX, y + 5)); String[] dashModes = {"Aggressive", "Defensive"}; - GuiNpcButton modeBtn = new GuiNpcButton(100, fieldX, y, 80, 20, dashModes, dash.getDashMode().ordinal()); + GuiNpcButton modeBtn = new GuiNpcButton(100, fieldX, y, 80, 20, dashModes, dash.getDashModeEnum().ordinal()); modeBtn.setHoverText("ability.hover.dashMode"); addButton(modeBtn); @@ -47,7 +47,7 @@ public class SubGuiAbilityDash extends SubGuiAbilityConfig { @Override protected void handleTypeButton(int id, GuiNpcButton button) { if (id == 100) { - dash.setDashMode(AbilityDash.DashMode.values()[button.getValue()]); + dash.setDashModeEnum(AbilityDash.DashMode.values()[button.getValue()]); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 2b804d99b..00383853f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -122,7 +122,7 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPoint().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPointEnum().getId()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -227,7 +227,7 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { initGui(); break; case 210: - disc.setAnchorPoint(AnchorPoint.fromId(value)); + disc.setAnchorPointEnum(AnchorPoint.fromId(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index 6e90428ce..d878c9381 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -118,7 +118,7 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPoint().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPointEnum().getId()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -219,7 +219,7 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { initGui(); break; case 210: - beam.setAnchorPoint(AnchorPoint.fromId(value)); + beam.setAnchorPointEnum(AnchorPoint.fromId(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java index a975a97fc..0d2ec667b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java @@ -50,7 +50,7 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(102, "ability.counterType", col2LabelX, y + 5)); String[] types = {"Flat", "Percent"}; - GuiNpcButton counterTypeButton = new GuiNpcButton(102, col2FieldX, y, 60, 20, types, guard.getCounterType().ordinal()); + GuiNpcButton counterTypeButton = new GuiNpcButton(102, col2FieldX, y, 60, 20, types, guard.getCounterTypeEnum().ordinal()); counterTypeButton.setHoverText("ability.hover.counterType"); counterTypeButton.setEnabled(guard.isCanCounter()); addButton(counterTypeButton); @@ -97,7 +97,7 @@ public class SubGuiAbilityGuard extends SubGuiAbilityConfig { initGui(); break; case 102: - guard.setCounterType(AbilityGuard.CounterType.values()[button.getValue()]); + guard.setCounterTypeEnum(AbilityGuard.CounterType.values()[button.getValue()]); break; case 150: setSubGui(new SubGuiAbilityEffects(guard.getEffects())); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java index 9822d9f90..5b8be7976 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java @@ -39,7 +39,7 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(100, "ability.shape", col2LabelX, y + 5)); String[] shapes = {"Circle", "Ring", "Cone"}; - GuiNpcButton shapeBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShape().ordinal()); + GuiNpcButton shapeBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShapeEnum().ordinal()); shapeBtn.setHoverText("ability.hover.shape"); addButton(shapeBtn); @@ -48,7 +48,7 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { // Row 2: Placement addLabel(new GuiNpcLabel(101, "ability.placement", labelX, y + 5)); String[] placements = {"Caster", "Target", "FollowCast", "FollowTgt"}; - GuiNpcButton placementBtn = new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacement().ordinal()); + GuiNpcButton placementBtn = new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacementEnum().ordinal()); placementBtn.setHoverText("ability.hover.placement"); addButton(placementBtn); @@ -101,10 +101,10 @@ public class SubGuiAbilityHazard extends SubGuiAbilityConfig { int value = button.getValue(); switch (id) { case 100: - hazard.setShape(AbilityHazard.HazardShape.values()[value]); + hazard.setShapeEnum(AbilityHazard.HazardShape.values()[value]); break; case 101: - hazard.setPlacement(AbilityHazard.PlacementMode.values()[value]); + hazard.setPlacementEnum(AbilityHazard.PlacementMode.values()[value]); break; case 109: hazard.setAffectsCaster(value == 1); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 858eeefa7..40cff112f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -106,7 +106,7 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPoint().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPointEnum().getId()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -207,7 +207,7 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { initGui(); break; case 210: - orb.setAnchorPoint(AnchorPoint.fromId(value)); + orb.setAnchorPointEnum(AnchorPoint.fromId(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java index e39918d2d..4b23b0ca0 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java @@ -34,11 +34,11 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { // Row 1: Mode addLabel(new GuiNpcLabel(100, "ability.mode", labelX, y + 5)); String[] modes = {"Blink", "Behind", "Single"}; - addButton(new GuiNpcButton(100, fieldX, y, 80, 20, modes, teleport.getMode().ordinal())); + addButton(new GuiNpcButton(100, fieldX, y, 80, 20, modes, teleport.getModeEnum().ordinal())); y += 24; - switch (teleport.getMode()) { + switch (teleport.getModeEnum()) { case BLINK: // Row 2: Blink Radius + Blink Count addLabel(new GuiNpcLabel(101, "ability.blinkRadius", labelX, y + 5)); @@ -109,7 +109,7 @@ public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { int value = button.getValue(); switch (id) { case 100: - teleport.setMode(AbilityTeleport.TeleportMode.values()[value]); + teleport.setModeEnum(AbilityTeleport.TeleportMode.values()[value]); initGui(); break; case 105: diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java index edeb59635..5c9c52558 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java @@ -39,7 +39,7 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { addLabel(new GuiNpcLabel(100, "ability.placement", col2LabelX, y + 5)); String[] placements = {"Caster", "Target", "Ahead"}; - GuiNpcButton placementBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacement().ordinal()); + GuiNpcButton placementBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacementEnum().ordinal()); placementBtn.setHoverText("ability.hover.placement"); addButton(placementBtn); @@ -79,7 +79,7 @@ public class SubGuiAbilityTrap extends SubGuiAbilityConfig { @Override protected void handleTypeButton(int id, GuiNpcButton button) { if (id == 100) { - trap.setPlacement(AbilityTrap.TrapPlacement.values()[button.getValue()]); + trap.setPlacementEnum(AbilityTrap.TrapPlacement.values()[button.getValue()]); } else if (id == 150) { setSubGui(new SubGuiAbilityEffects(trap.getEffects())); } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java index 8b632f7ce..26f7a1ba7 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java @@ -1457,4 +1457,8 @@ public class ScriptNpc extends ScriptLiving imp public IMagicData getMagicData() { return npc.stats.magicData; } + + public noppes.npcs.api.ability.IDataAbilities getAbilityData() { + return new noppes.npcs.scripted.wrapper.ScriptDataAbilities(npc); + } } diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java new file mode 100644 index 000000000..d097a892c --- /dev/null +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java @@ -0,0 +1,163 @@ +package noppes.npcs.scripted.wrapper; + +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; +import net.minecraft.entity.EntityLivingBase; +import noppes.npcs.DataAbilities; +import noppes.npcs.api.ability.IAbility; +import noppes.npcs.api.ability.IDataAbilities; +import noppes.npcs.entity.EntityNPCInterface; + +/** + * Script wrapper for DataAbilities providing API access to NPC abilities. + */ +public class ScriptDataAbilities implements IDataAbilities { + + private final DataAbilities data; + private final EntityNPCInterface npc; + + public ScriptDataAbilities(EntityNPCInterface npc) { + this.npc = npc; + this.data = npc.abilities; + } + + @Override + public boolean isEnabled() { + return data.enabled; + } + + @Override + public void setEnabled(boolean enabled) { + data.enabled = enabled; + } + + @Override + public IAbility[] getAbilities() { + return data.getAbilities().toArray(new IAbility[0]); + } + + @Override + public void addAbility(IAbility ability) { + if (ability instanceof Ability) { + data.addAbility((Ability) ability); + } + } + + @Override + public void removeAbility(String abilityId) { + data.removeAbility(abilityId); + } + + @Override + public IAbility getAbility(String abilityId) { + return data.getAbility(abilityId); + } + + @Override + public boolean hasAbility(String abilityId) { + return data.getAbility(abilityId) != null; + } + + @Override + public void clearAbilities() { + data.clearAbilities(); + } + + @Override + public IAbility getCurrentAbility() { + return data.getCurrentAbility(); + } + + @Override + public boolean isExecutingAbility() { + return data.isExecutingAbility(); + } + + @Override + public void interruptCurrentAbility() { + data.interruptCurrentAbility(null, 0); + } + + @Override + public int getGlobalCooldown() { + return (int) data.getRemainingCooldown(); + } + + @Override + public void setGlobalCooldown(int ticks) { + // Set the cooldown by manipulating the internal cooldown end time + // Not directly exposed, but we can reset and let it tick down + data.resetCooldown(); + // This is a best-effort implementation + } + + @Override + public void resetCooldowns() { + data.resetCooldown(); + } + + @Override + public boolean forceStartAbility(String abilityId) { + return forceStartAbility(abilityId, null); + } + + @Override + public boolean forceStartAbility(String abilityId, Object target) { + // Find the ability + Ability ability = data.getAbility(abilityId); + if (ability == null) { + return false; + } + + // Resolve target + EntityLivingBase targetEntity = resolveTarget(target); + + // Use the direct force start method + return data.forceStartAbility(ability, targetEntity); + } + + @Override + public boolean executePresetAbility(String presetName) { + return executePresetAbility(presetName, null); + } + + @Override + public boolean executePresetAbility(String presetName, Object target) { + // Resolve target + EntityLivingBase targetEntity = resolveTarget(target); + + // Use the direct preset execution method + return data.executePresetAbility(presetName, targetEntity); + } + + @Override + public IAbility createAbility(String typeId) { + if (AbilityController.Instance == null) { + return null; + } + return AbilityController.Instance.create(typeId); + } + + /** + * Resolve a target object to an EntityLivingBase. + */ + private EntityLivingBase resolveTarget(Object target) { + if (target == null) { + // Try to use the NPC's current attack target + return npc.getAttackTarget(); + } + + if (target instanceof EntityLivingBase) { + return (EntityLivingBase) target; + } + + if (target instanceof noppes.npcs.api.entity.IEntityLivingBase) { + Object mcEntity = ((noppes.npcs.api.entity.IEntityLivingBase) target).getMCEntity(); + if (mcEntity instanceof EntityLivingBase) { + return (EntityLivingBase) mcEntity; + } + } + + return null; + } +} From 7d2bba7b95e9cda41dcb6c20033c0f428377cab5 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 15:16:28 -0500 Subject: [PATCH 23/85] Better Lock Movement handling --- src/api | 2 +- .../controllers/data/ability/Ability.java | 58 +++++++++++-- .../data/ability/LockMovementType.java | 83 +++++++++++++++++++ .../data/ability/type/AbilityCharge.java | 3 +- .../data/ability/type/AbilityCutter.java | 3 +- .../data/ability/type/AbilityDash.java | 3 +- .../data/ability/type/AbilityDisc.java | 2 + .../data/ability/type/AbilityEnergyBeam.java | 6 +- .../data/ability/type/AbilityGuard.java | 3 +- .../data/ability/type/AbilityHazard.java | 3 +- .../data/ability/type/AbilityHeal.java | 3 +- .../data/ability/type/AbilityHeavyHit.java | 3 +- .../data/ability/type/AbilityLaserShot.java | 2 + .../data/ability/type/AbilityOrb.java | 2 + .../data/ability/type/AbilityProjectile.java | 2 + .../data/ability/type/AbilityShockwave.java | 3 +- .../data/ability/type/AbilitySlam.java | 3 +- .../data/ability/type/AbilitySweeper.java | 3 +- .../data/ability/type/AbilityTeleport.java | 2 + .../data/ability/type/AbilityTrap.java | 3 +- .../data/ability/type/AbilityVortex.java | 3 +- src/main/java/noppes/npcs/DataAbilities.java | 78 +++++++++-------- .../gui/advanced/SubGuiAbilityConfig.java | 11 +-- .../assets/customnpcs/lang/en_US.lang | 3 + 24 files changed, 227 insertions(+), 60 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/LockMovementType.java diff --git a/src/api b/src/api index 3050910ef..2b21264ad 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 3050910efbc6e301e4ef18fefc20529c507a7bae +Subproject commit 2b21264ada69ec5e800977a000e892bc82d7c61f diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index e5dc7e493..a82a8fc6e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -55,7 +55,7 @@ public abstract class Ability implements IAbility { protected boolean interruptible = true; // Feedback - protected boolean lockMovement = true; + protected LockMovementType lockMovement = LockMovementType.WINDUP; protected int windUpColor = 0x80FF4400; // Telegraph color during wind up protected int activeColor = 0xC0FF0000; // Telegraph warning/active color @@ -662,7 +662,7 @@ public abstract class Ability implements IAbility { nbt.setInteger("windUp", windUpTicks); nbt.setInteger("recovery", dazedTicks); nbt.setBoolean("interruptible", interruptible); - nbt.setBoolean("lockMovement", lockMovement); + nbt.setInteger("lockMovement", lockMovement.ordinal()); nbt.setInteger("windUpColor", windUpColor); nbt.setInteger("activeColor", activeColor); nbt.setString("windUpSound", windUpSound); @@ -707,7 +707,7 @@ public abstract class Ability implements IAbility { windUpTicks = nbt.getInteger("windUp"); dazedTicks = nbt.getInteger("recovery"); interruptible = nbt.getBoolean("interruptible"); - lockMovement = nbt.getBoolean("lockMovement"); + lockMovement = LockMovementType.fromOrdinal(nbt.getInteger("lockMovement")); // Support old telegraphColor key for backwards compatibility if (nbt.hasKey("windUpColor")) { windUpColor = nbt.getInteger("windUpColor"); @@ -868,14 +868,62 @@ public abstract class Ability implements IAbility { this.interruptible = interruptible; } - public boolean isLockMovement() { + public LockMovementType getLockMovement() { return lockMovement; } - public void setLockMovement(boolean lockMovement) { + public void setLockMovement(LockMovementType lockMovement) { this.lockMovement = lockMovement; } + /** + * API method: Get lock movement type as integer. + * @return 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE + */ + @Override + public int getLockMovementType() { + return lockMovement.ordinal(); + } + + /** + * API method: Set lock movement type from integer. + * @param type 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE + */ + @Override + public void setLockMovementType(int type) { + this.lockMovement = LockMovementType.fromOrdinal(type); + } + + /** + * Check if movement should be locked during WINDUP phase. + */ + @Override + public boolean isMovementLockedDuringWindup() { + return lockMovement.locksWindup(); + } + + /** + * Check if movement should be locked during ACTIVE phase. + */ + @Override + public boolean isMovementLockedDuringActive() { + return lockMovement.locksActive(); + } + + /** + * Check if movement should be locked during the current phase. + */ + public boolean isMovementLockedForCurrentPhase() { + switch (phase) { + case WINDUP: + return lockMovement.locksWindup(); + case ACTIVE: + return lockMovement.locksActive(); + default: + return false; + } + } + public int getWindUpColor() { return windUpColor; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/LockMovementType.java b/src/main/java/kamkeel/npcs/controllers/data/ability/LockMovementType.java new file mode 100644 index 000000000..1b81a3bb3 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/LockMovementType.java @@ -0,0 +1,83 @@ +package kamkeel.npcs.controllers.data.ability; + +/** + * Defines when an ability locks NPC movement and rotation. + */ +public enum LockMovementType { + /** + * No movement lock - NPC can move freely during both phases. + */ + NO, + + /** + * Lock movement during WINDUP phase only. + * NPC can move during ACTIVE phase. + */ + WINDUP, + + /** + * Lock movement during ACTIVE phase only. + * NPC can move during WINDUP phase. + */ + ACTIVE, + + /** + * Lock movement during both WINDUP and ACTIVE phases. + */ + WINDUP_AND_ACTIVE; + + /** + * Check if movement should be locked during WINDUP phase. + */ + public boolean locksWindup() { + return this == WINDUP || this == WINDUP_AND_ACTIVE; + } + + /** + * Check if movement should be locked during ACTIVE phase. + */ + public boolean locksActive() { + return this == ACTIVE || this == WINDUP_AND_ACTIVE; + } + + /** + * Get display name for GUI. + */ + public String getDisplayKey() { + switch (this) { + case NO: + return "gui.no"; + case WINDUP: + return "ability.lockMove.windup"; + case ACTIVE: + return "ability.lockMove.active"; + case WINDUP_AND_ACTIVE: + return "ability.lockMove.both"; + default: + return "gui.no"; + } + } + + /** + * Get all display keys for GUI dropdown. + */ + public static String[] getDisplayKeys() { + return new String[]{ + "gui.no", + "ability.lockMove.windup", + "ability.lockMove.active", + "ability.lockMove.both" + }; + } + + /** + * Get LockMovementType from ordinal, with fallback to WINDUP. + */ + public static LockMovementType fromOrdinal(int ordinal) { + LockMovementType[] values = values(); + if (ordinal >= 0 && ordinal < values.length) { + return values[ordinal]; + } + return WINDUP; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index d87ed05ee..1f6f31250 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -47,7 +48,7 @@ public class AbilityCharge extends Ability implements IAbilityCharge { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 20.0f; this.minRange = 4.0f; - this.lockMovement = false; // Movement IS the ability + this.lockMovement = LockMovementType.WINDUP; this.cooldownTicks = 0; this.windUpTicks = 20; // LINE telegraph showing charge path diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 1d77e9219..9db9d7700 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -54,7 +55,7 @@ public class AbilityCutter extends Ability implements IAbilityCutter { this.name = "Cutter"; this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 8.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.NO; this.cooldownTicks = 0; this.windUpTicks = 20; this.telegraphType = TelegraphType.CONE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 677578745..2c03de4c2 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -88,7 +89,7 @@ public class AbilityDash extends Ability implements IAbilityDash { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 20.0f; this.minRange = 0.0f; - this.lockMovement = false; + this.lockMovement = LockMovementType.NO; this.cooldownTicks = 0; this.windUpTicks = 5; // No telegraph for dash - it's a quick evasive move diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 2c7b8e43c..a68e38cd6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -4,6 +4,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -83,6 +84,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { this.minRange = 5.0f; this.cooldownTicks = 0; this.windUpTicks = 20; + this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 790489b2c..b8946306a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -85,6 +86,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { this.minRange = 5.0f; this.cooldownTicks = 0; this.windUpTicks = 40; + this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } @@ -145,7 +147,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, lightningEffect, lightningDensity, lightningRadius, - lockMovement, // Anchored mode + lockMovement.locksActive(), // Anchored mode during firing windUpTicks, // Charge duration = windup duration offsetDist, // Offset distance (used by FRONT anchor) anchorPoint // Anchor point for charging position @@ -311,7 +313,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } - + @Override public Animation getWindUpAnimation() { if (windUpAnimationId == -1) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 84701b79e..92c7ca58e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -50,7 +51,7 @@ public class AbilityGuard extends Ability implements IAbilityGuard { this.typeId = "ability.cnpc.guard"; this.name = "Guard"; this.targetingMode = TargetingMode.SELF; - this.lockMovement = true; + this.lockMovement = LockMovementType.ACTIVE; this.cooldownTicks = 0; this.windUpTicks = 10; this.interruptible = false; // Hard to interrupt while guarding diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 79e43e2cc..61841ded4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -83,7 +84,7 @@ public class AbilityHazard extends Ability implements IAbilityHazard { this.name = "Hazard"; this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 15.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP; this.cooldownTicks = 0; this.windUpTicks = 30; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 11aed6c47..406be2f3a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.Entity; @@ -49,7 +50,7 @@ public class AbilityHeal extends Ability implements IAbilityHeal { this.typeId = "ability.cnpc.heal"; this.name = "Heal"; this.targetingMode = TargetingMode.SELF; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP; this.cooldownTicks = 0; this.windUpTicks = 30; // No telegraph for heal - it's a self/ally buff diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 82091c041..4ed4a0e78 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -29,7 +30,7 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 3.0f; this.minRange = 0.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.NO; this.cooldownTicks = 0; this.windUpTicks = 30; this.telegraphType = TelegraphType.POINT; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 44b6bc0b5..da9f07780 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityLaser; @@ -63,6 +64,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { this.minRange = 3.0f; this.cooldownTicks = 0; this.windUpTicks = 15; + this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.LINE; this.showTelegraph = true; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index fabdf6ab0..336f54e7c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -84,6 +85,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.minRange = 5.0f; this.cooldownTicks = 0; this.windUpTicks = 30; + this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 56b12028e..6b81fabe7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.Entity; @@ -42,6 +43,7 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { this.maxRange = 20.0f; this.cooldownTicks = 0; this.windUpTicks = 15; + this.lockMovement = LockMovementType.NO; // No telegraph for projectile - it's a ranged attack this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index c6b93134a..006084f5e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -35,7 +36,7 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { this.name = "Shockwave"; this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 15.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; this.cooldownTicks = 0; this.windUpTicks = 25; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index ba49ffb2c..b9da81dc5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -52,7 +53,7 @@ public class AbilitySlam extends Ability implements IAbilitySlam { this.targetingMode = TargetingMode.AOE_SELF; // Can also be AOE_TARGET to leap to target this.windUpTicks = 30; this.cooldownTicks = 0; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP; this.minRange = 2.0f; this.maxRange = 15.0f; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 66f589a00..2abbbbb48 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -54,7 +55,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 15.0f; this.minRange = 0.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; this.cooldownTicks = 0; this.windUpTicks = 60; // Circle telegraph to show range diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 05293a467..1fef00a55 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.block.Block; @@ -63,6 +64,7 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { this.minRange = 5.0f; this.cooldownTicks = 0; this.windUpTicks = 10; + this.lockMovement = LockMovementType.NO; // No telegraph for teleport - it's instant repositioning this.telegraphType = TelegraphType.NONE; this.showTelegraph = false; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index b14a9ad67..6bf69a60b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -66,7 +67,7 @@ public class AbilityTrap extends Ability implements IAbilityTrap { this.name = "Trap"; this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 15.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP; this.cooldownTicks = 0; this.windUpTicks = 20; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index a85bbc442..1bcfb7cbc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -3,6 +3,7 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; @@ -53,7 +54,7 @@ public class AbilityVortex extends Ability implements IAbilityVortex { this.name = "Vortex"; this.targetingMode = TargetingMode.AOE_SELF; this.maxRange = 15.0f; - this.lockMovement = true; + this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; this.cooldownTicks = 0; this.windUpTicks = 30; this.telegraphType = TelegraphType.CIRCLE; diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 2ddabc588..538829cef 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -79,7 +79,7 @@ public class DataAbilities { private transient List recentHitTimes = new ArrayList<>(); /** - * Locked rotation values for ACTIVE phase with lockMovement. + * Locked rotation values for ACTIVE phase when movement is locked. * Stored when entering ACTIVE phase, applied every tick to prevent rotation changes. */ private transient boolean rotationLocked = false; @@ -146,9 +146,9 @@ public class DataAbilities { // Remove telegraph - it has served its purpose removeTelegraph(currentAbility); - // Lock rotation if lockMovement is true + // Lock rotation if movement is locked during ACTIVE phase // Capture current rotation values to force them every tick - if (currentAbility.isLockMovement()) { + if (currentAbility.isMovementLockedDuringActive()) { captureLockedRotation(); } @@ -191,6 +191,32 @@ public class DataAbilities { handleAbilityCompletion(target); break; } + + // Apply movement control if ability is still executing + if (currentAbility != null && currentAbility.isExecuting()) { + applyMovementControl(); + } + } + + /** + * Apply movement control based on lock movement settings. + * Called every tick during ability execution. + */ + private void applyMovementControl() { + if (currentAbility == null) return; + + // Check if movement should be locked for the current phase + if (currentAbility.isMovementLockedForCurrentPhase()) { + // Clear navigator to prevent AI pathfinding + npc.getNavigator().clearPathEntity(); + + // Zero motion if ability doesn't have its own movement + // This allows abilities like Charge/Slam to control their own motion + if (!currentAbility.hasAbilityMovement()) { + npc.motionX = 0; + npc.motionZ = 0; + } + } } /** @@ -210,29 +236,11 @@ public class DataAbilities { npc.wrappedNPC, currentAbility, target); NpcAPI.EVENT_BUS.post(completeEvent); - // Clean up and roll cooldown + // Release rotation lock before cleanup + releaseLockedRotation(); + + // Clean up and roll cooldown (this sets currentAbility to null) onAbilityComplete(); - - // Clear AI pathfinding if ability is controlling movement - // But DON'T zero motion - let the ability set it if needed - if (currentAbility != null && currentAbility.isExecuting()) { - if (isAbilityControllingMovement()) { - // Clear navigator so AI doesn't fight with ability movement - npc.getNavigator().clearPathEntity(); - - // Only zero motion if lockMovement is true AND ability doesn't have its own movement - // This allows stationary abilities to freeze the NPC, while movement abilities can set their own motion - if (currentAbility.isLockMovement() && !currentAbility.hasAbilityMovement()) { - npc.motionX = 0; - npc.motionZ = 0; - } - } - - // Unlock rotation when leaving ACTIVE phase - if (rotationLocked && currentAbility.getPhase() != AbilityPhase.ACTIVE) { - releaseLockedRotation(); - } - } } /** @@ -787,8 +795,8 @@ public class DataAbilities { * Called by AI tasks to determine if they should try to path. *

* Rules: - * - WINDUP phase: Block AI if lockMovement is true - * - ACTIVE phase: Block AI if lockMovement OR hasAbilityMovement is true + * - WINDUP phase: Block AI if movement is locked during windup + * - ACTIVE phase: Block AI if movement is locked during active OR hasAbilityMovement is true * - DAZED phase: Always block AI (NPC is stunned) */ public boolean isAbilityControllingMovement() { @@ -800,15 +808,15 @@ public class DataAbilities { switch (phase) { case WINDUP: - // During windup, only block if lockMovement is set - // This allows NPC to keep chasing while winding up if lockMovement=false - return currentAbility.isLockMovement(); + // During windup, only block if movement is locked during windup + // This allows NPC to keep chasing while winding up if not locked + return currentAbility.isMovementLockedDuringWindup(); case ACTIVE: // During active phase, block if either: - // - lockMovement is true (stationary ability) + // - movement is locked during active (stationary ability) // - hasAbilityMovement is true (ability is moving the NPC itself) - return currentAbility.isLockMovement() || currentAbility.hasAbilityMovement(); + return currentAbility.isMovementLockedDuringActive() || currentAbility.hasAbilityMovement(); case DAZED: // During dazed phase, always block - NPC is stunned from interrupt @@ -821,7 +829,7 @@ public class DataAbilities { /** * Check if NPC's look direction should be locked to target. - * Only locks during ACTIVE phase when lockMovement is true. + * Only locks during ACTIVE phase when movement is locked during active. * This allows the NPC to freely track target during WINDUP and DAZED. */ public boolean shouldLockLookDirection() { @@ -834,7 +842,7 @@ public class DataAbilities { return false; } - return currentAbility.isLockMovement(); + return currentAbility.isMovementLockedDuringActive(); } /** @@ -854,7 +862,7 @@ public class DataAbilities { /** * Capture current rotation values to lock NPC's look direction. - * Called when entering ACTIVE phase with lockMovement enabled. + * Called when entering ACTIVE phase with movement locked during active. */ private void captureLockedRotation() { lockedYaw = npc.rotationYaw; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 831420473..11dbcbc85 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -2,6 +2,7 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.Condition; +import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import noppes.npcs.controllers.data.Animation; @@ -58,7 +59,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi protected String name; protected boolean enabled; protected int weight; - protected boolean lockMovement; + protected LockMovementType lockMovement; protected boolean interruptible; // Timing @@ -111,7 +112,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.name = ability.getName() != null ? ability.getName() : ""; this.enabled = ability.isEnabled(); this.weight = ability.getWeight(); - this.lockMovement = ability.isLockMovement(); + this.lockMovement = ability.getLockMovement(); this.interruptible = ability.isInterruptible(); // Timing @@ -251,7 +252,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi addTextField(weightField); addLabel(new GuiNpcLabel(5, "ability.lockMove", col2LabelX, y + 5)); - GuiNpcButton lockMoveBtn = new GuiNpcButton(16, col2FieldX, y, 40, 20, new String[]{"gui.no", "gui.yes"}, lockMovement ? 1 : 0); + GuiNpcButton lockMoveBtn = new GuiNpcButton(16, col2FieldX, y, 60, 20, LockMovementType.getDisplayKeys(), lockMovement.ordinal()); lockMoveBtn.setHoverText("ability.hover.lockMove"); addButton(lockMoveBtn); @@ -644,7 +645,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi interruptible = ((GuiNpcButton) guibutton).getValue() == 1; initGui(); // Refresh to show/hide dazed ticks field } else if (id == 16) { - lockMovement = ((GuiNpcButton) guibutton).getValue() == 1; + lockMovement = LockMovementType.fromOrdinal(((GuiNpcButton) guibutton).getValue()); } else if (id == 17) { // Sync windup ticks with animation duration syncWindupWithAnimation(); @@ -920,7 +921,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.name = ability.getName() != null ? ability.getName() : ""; this.enabled = ability.isEnabled(); this.weight = ability.getWeight(); - this.lockMovement = ability.isLockMovement(); + this.lockMovement = ability.getLockMovement(); this.interruptible = ability.isInterruptible(); this.cooldownTicks = ability.getCooldownTicks(); diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index d4f75d883..fd148ea08 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1519,6 +1519,9 @@ ability.dazed=Dazed Ticks ability.interruptible=Interruptible ability.threshold=Threshold ability.lockMove=Lock Move +ability.lockMove.windup=Windup +ability.lockMove.active=Active +ability.lockMove.both=Both ability.telegraph=Telegraph ability.telegraphType=Telegraph Type From e73054a529e7d50f3d2fc75089651bb477b48795 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 16:31:26 -0500 Subject: [PATCH 24/85] Built In Animation System + Fixes to Defaults for Energy Projectile Abilities --- src/api | 2 +- .../controllers/data/ability/Ability.java | 56 ++++- .../data/ability/AbilityAnimation.java | 101 --------- .../data/ability/type/AbilityDisc.java | 14 +- .../data/ability/type/AbilityEnergyBeam.java | 42 ++-- .../data/ability/type/AbilityLaserShot.java | 30 ++- .../data/ability/type/AbilityOrb.java | 31 ++- .../data/ability/type/AbilitySweeper.java | 15 +- .../animation/AnimationsGetPacket.java | 1 + src/main/java/noppes/npcs/DataAbilities.java | 2 +- .../java/noppes/npcs/NoppesUtilServer.java | 11 +- .../gui/advanced/SubGuiAbilityConfig.java | 70 +++++-- .../gui/select/GuiAnimationSelection.java | 196 +++++++++++++----- .../noppes/npcs/constants/EnumScrollData.java | 4 +- .../npcs/controllers/AnimationController.java | 189 ++++++++++++++++- .../controllers/data/BuiltInAnimation.java | 94 +++++++++ .../animations}/Ability_Beam_Active.json | 0 .../animations}/Ability_Beam_Windup.json | 0 .../animations}/Ability_Orb_Windup.json | 0 .../assets/customnpcs/lang/en_US.lang | 2 + 20 files changed, 622 insertions(+), 238 deletions(-) delete mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java create mode 100644 src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java rename src/main/resources/{internal/animations/ABILITYBEAM => assets/customnpcs/animations}/Ability_Beam_Active.json (100%) rename src/main/resources/{internal/animations/ABILITYBEAM => assets/customnpcs/animations}/Ability_Beam_Windup.json (100%) rename src/main/resources/{internal/animations/ABILITYORB => assets/customnpcs/animations}/Ability_Orb_Windup.json (100%) diff --git a/src/api b/src/api index 2b21264ad..b8ba682e9 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 2b21264ada69ec5e800977a000e892bc82d7c61f +Subproject commit b8ba682e9dd4e542a5ccf0de231ab5e5ebdad448 diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index a82a8fc6e..08eed148b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -64,8 +64,12 @@ public abstract class Ability implements IAbility { protected String activeSound = ""; // Sound to play when active phase starts // Animations (global animation IDs, -1 = none) - protected int windUpAnimationId = -1; // Animation to play during wind up - protected int activeAnimationId = -1; // Animation to play during active phase + protected int windUpAnimationId = -1; // Animation to play during wind up (user animations) + protected int activeAnimationId = -1; // Animation to play during active phase (user animations) + + // Built-in animation names (empty = none, takes priority over IDs if set) + protected String windUpAnimationName = ""; // Built-in animation name for wind up + protected String activeAnimationName = ""; // Built-in animation name for active phase // Telegraph configuration protected boolean showTelegraph = true; @@ -669,6 +673,8 @@ public abstract class Ability implements IAbility { nbt.setString("activeSound", activeSound); nbt.setInteger("windUpAnimationId", windUpAnimationId); nbt.setInteger("activeAnimationId", activeAnimationId); + nbt.setString("windUpAnimationName", windUpAnimationName); + nbt.setString("activeAnimationName", activeAnimationName); nbt.setBoolean("showTelegraph", showTelegraph); nbt.setString("telegraphType", telegraphType.name()); nbt.setFloat("telegraphHeightOffset", telegraphHeightOffset); @@ -738,6 +744,8 @@ public abstract class Ability implements IAbility { windUpAnimationId = -1; } activeAnimationId = nbt.hasKey("activeAnimationId") ? nbt.getInteger("activeAnimationId") : -1; + windUpAnimationName = nbt.hasKey("windUpAnimationName") ? nbt.getString("windUpAnimationName") : ""; + activeAnimationName = nbt.hasKey("activeAnimationName") ? nbt.getString("activeAnimationName") : ""; showTelegraph = !nbt.hasKey("showTelegraph") || nbt.getBoolean("showTelegraph"); if (nbt.hasKey("telegraphType")) { try { @@ -959,23 +967,63 @@ public abstract class Ability implements IAbility { public Animation getWindUpAnimation() { if (AnimationController.Instance == null) return null; - return (Animation) AnimationController.Instance.get(windUpAnimationId); + // Built-in animation by name takes priority + if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { + return (Animation) AnimationController.Instance.get(windUpAnimationName); + } + // Fall back to user animation by ID + if (windUpAnimationId >= 0) { + return (Animation) AnimationController.Instance.get(windUpAnimationId); + } + return null; + } + + public int getWindUpAnimationId() { + return windUpAnimationId; } public void setWindUpAnimationId(int windUpAnimationId) { this.windUpAnimationId = windUpAnimationId; } + public String getWindUpAnimationName() { + return windUpAnimationName; + } + + public void setWindUpAnimationName(String windUpAnimationName) { + this.windUpAnimationName = windUpAnimationName != null ? windUpAnimationName : ""; + } + public Animation getActiveAnimation() { if (AnimationController.Instance == null) return null; - return (Animation) AnimationController.Instance.get(activeAnimationId); + // Built-in animation by name takes priority + if (activeAnimationName != null && !activeAnimationName.isEmpty()) { + return (Animation) AnimationController.Instance.get(activeAnimationName); + } + // Fall back to user animation by ID + if (activeAnimationId >= 0) { + return (Animation) AnimationController.Instance.get(activeAnimationId); + } + return null; + } + + public int getActiveAnimationId() { + return activeAnimationId; } public void setActiveAnimationId(int activeAnimationId) { this.activeAnimationId = activeAnimationId; } + public String getActiveAnimationName() { + return activeAnimationName; + } + + public void setActiveAnimationName(String activeAnimationName) { + this.activeAnimationName = activeAnimationName != null ? activeAnimationName : ""; + } + public boolean isShowTelegraph() { return showTelegraph; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java deleted file mode 100644 index 190be70d3..000000000 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAnimation.java +++ /dev/null @@ -1,101 +0,0 @@ -package kamkeel.npcs.controllers.data.ability; - -import noppes.npcs.CustomNpcs; -import noppes.npcs.LogWriter; -import noppes.npcs.controllers.data.Animation; -import noppes.npcs.util.NBTJsonUtil; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.InputStream; -import java.util.HashMap; - -import static kamkeel.npcs.controllers.data.ability.AbilityPhase.*; - -public enum AbilityAnimation { - ABILITYORB("Ability_Orb_Windup", WINDUP), - ABILITYBEAM("Ability_Beam_Windup", "Ability_Beam_Active"); - private final HashMap animationNames = new HashMap<>(); - - AbilityAnimation(String idle, String windUp, String active, String recovery) { - animationNames.put(IDLE, idle); - animationNames.put(WINDUP, windUp); - animationNames.put(ACTIVE, active); - animationNames.put(DAZED, recovery); - } - - AbilityAnimation(String idle, String windUp, String active) { - animationNames.put(IDLE, idle); - animationNames.put(WINDUP, windUp); - animationNames.put(ACTIVE, active); - } - - AbilityAnimation(String windUp, String active) { - animationNames.put(WINDUP, windUp); - animationNames.put(ACTIVE, active); - } - - AbilityAnimation(String anim, AbilityPhase phase) { - animationNames.put(phase, anim); - } - - public String fileName(AbilityPhase phase) { - return animationNames.get(phase); - } - - public File getFile(AbilityPhase phase) { - if (animationNames.get(phase).isEmpty() || animationNames.get(phase).equals("N/A")) - return null; - - return getFileFromName(animationNames.get(phase)); - } - - public Animation getAnimation(AbilityPhase phase) { - try { - File file = getFile(phase); - - if (file == null) { - return null; - } - - Animation animation = new Animation(); - animation.readFromNBT(NBTJsonUtil.LoadFile(file)); - - return animation; - } catch (Exception e) { - LogWriter.except(e); - } - - return null; - } - - public Animation idle() { - return getAnimation(IDLE); - } - - public Animation windUp() { - return getAnimation(WINDUP); - } - - public Animation active() { - return getAnimation(ACTIVE); - } - - public Animation dazed() { - return getAnimation(DAZED); - } - - private File getFileFromName(String fileName) { - try (InputStream stream = CustomNpcs.class.getResourceAsStream("/internal/animations/" + name() + "/" + fileName + ".json")) { - - File file = new File("temp"); - - FileUtils.copyInputStreamToFile(stream, file); - - return file; - } catch (Exception i) { - LogWriter.except(i); - } - return null; - } -} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index a68e38cd6..d85720b6e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -121,10 +121,13 @@ public class AbilityDisc extends Ability implements IAbilityDisc { if (discEntity != null && !discEntity.isDead) { discEntity.startMoving(target); } - discEntity = null; - // Disc entity manages itself - ability is done - signalCompletion(); + // If movement is locked during active phase, keep ability active until entity dies + // Otherwise signal completion immediately + if (!lockMovement.locksActive()) { + discEntity = null; + signalCompletion(); + } } @Override @@ -154,6 +157,11 @@ public class AbilityDisc extends Ability implements IAbilityDisc { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // If we're tracking the entity for movement lock, check if it's dead + if (discEntity != null && discEntity.isDead) { + discEntity = null; + signalCompletion(); + } } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index b8946306a..7ebd4bb7b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -3,7 +3,6 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; -import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -13,13 +12,12 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound;; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.api.ability.type.IAbilityEnergyBeam; -import noppes.npcs.controllers.data.Animation; import noppes.npcs.entity.EntityNPCInterface; /** @@ -71,9 +69,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { private float lightningRadius = 0.5f; // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.FRONT; - - private final AbilityAnimation animation = AbilityAnimation.ABILITYBEAM; + private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; // Transient state for beam entity (used during windup charging) private transient EntityAbilityBeam beamEntity = null; @@ -89,6 +85,9 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; + // Default built-in animations + this.windUpAnimationName = "Ability_Beam_Windup"; + this.activeAnimationName = "Ability_Beam_Active"; } @Override @@ -123,10 +122,13 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { if (beamEntity != null && !beamEntity.isDead) { beamEntity.startFiring(target); } - beamEntity = null; - // Beam entity manages itself - ability is done - signalCompletion(); + // If movement is locked during active phase, keep ability active until entity dies + // Otherwise signal completion immediately + if (!lockMovement.locksActive()) { + beamEntity = null; + signalCompletion(); + } } @Override @@ -159,6 +161,11 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + // If we're tracking the entity for movement lock, check if it's dead + if (beamEntity != null && beamEntity.isDead) { + beamEntity = null; + signalCompletion(); + } } @Override @@ -313,23 +320,6 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } - - @Override - public Animation getWindUpAnimation() { - if (windUpAnimationId == -1) - return animation.windUp(); - - return super.getWindUpAnimation(); - } - - @Override - public Animation getActiveAnimation() { - if (activeAnimationId == -1) - return animation.active(); - - return super.getActiveAnimation(); - } - public AnchorPoint getAnchorPointEnum() { return anchorPoint; } public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index da9f07780..a9cf74473 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -56,6 +56,9 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { private float lightningDensity = 0.15f; private float lightningRadius = 0.5f; + // Transient state for laser entity (used for movement locking) + private transient EntityAbilityLaser laserEntity = null; + public AbilityLaserShot() { this.typeId = "ability.cnpc.laser_shot"; this.name = "Laser Shot"; @@ -111,7 +114,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { double spawnY = npc.posY + npc.getEyeHeight() * 0.8; double spawnZ = npc.posZ; - EntityAbilityLaser laser = new EntityAbilityLaser( + laserEntity = new EntityAbilityLaser( world, npc, target, spawnX, spawnY, spawnZ, laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, @@ -123,15 +126,23 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { lightningEffect, lightningDensity, lightningRadius ); - world.spawnEntityInWorld(laser); + world.spawnEntityInWorld(laserEntity); - // Laser entity manages itself - ability is done - signalCompletion(); + // If movement is locked during active phase, keep ability active until entity dies + // Otherwise signal completion immediately + if (!lockMovement.locksActive()) { + laserEntity = null; + signalCompletion(); + } } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // Laser entity manages itself + // If we're tracking the entity for movement lock, check if it's dead + if (laserEntity != null && laserEntity.isDead) { + laserEntity = null; + signalCompletion(); + } } @Override @@ -142,6 +153,15 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { } + @Override + public void cleanup() { + // Despawn laser entity if still alive + if (laserEntity != null && !laserEntity.isDead) { + laserEntity.setDead(); + } + laserEntity = null; + } + @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("laserWidth", laserWidth); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 336f54e7c..d69a5c944 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -3,7 +3,6 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; -import kamkeel.npcs.controllers.data.ability.AbilityAnimation; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -19,7 +18,6 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.controllers.data.Animation; import noppes.npcs.api.ability.type.IAbilityOrb; import noppes.npcs.entity.EntityNPCInterface; @@ -70,13 +68,11 @@ public class AbilityOrb extends Ability implements IAbilityOrb { private int lightningFadeTime = 6; // Ticks before lightning fades out // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; // Transient state for orb entity (used during windup charging) private transient EntityAbilityOrb orbEntity = null; - private final AbilityAnimation animation = AbilityAnimation.ABILITYORB; - public AbilityOrb() { this.typeId = "ability.cnpc.orb"; this.name = "Orb"; @@ -88,6 +84,8 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; + // Default built-in animation + this.windUpAnimationName = "Ability_Orb_Windup"; } @Override @@ -122,10 +120,13 @@ public class AbilityOrb extends Ability implements IAbilityOrb { if (orbEntity != null && !orbEntity.isDead) { orbEntity.startMoving(target); } - orbEntity = null; - // Orb entity manages itself - ability is done - signalCompletion(); + // If movement is locked during active phase, keep ability active until entity dies + // Otherwise signal completion immediately + if (!lockMovement.locksActive()) { + orbEntity = null; + signalCompletion(); + } } @Override @@ -154,7 +155,11 @@ public class AbilityOrb extends Ability implements IAbilityOrb { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // Nothing to do - entity manages itself + // If we're tracking the entity for movement lock, check if it's dead + if (orbEntity != null && orbEntity.isDead) { + orbEntity = null; + signalCompletion(); + } } @Override @@ -467,14 +472,6 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.anchorPoint = anchorPoint; } - @Override - public Animation getWindUpAnimation() { - if (windUpAnimationId != -1) - return super.getWindUpAnimation(); - - return animation.windUp(); - } - public int getAnchorPoint() { return anchorPoint.getId(); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 2abbbbb48..78dae4fdc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -91,8 +91,6 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { return; } - LogWriter.info("[Sweeper] onExecute called at NPC pos " + npc.posX + ", " + npc.posY + ", " + npc.posZ); - // Spawn the entity that handles BOTH visuals AND damage activeEntity = new EntityAbilitySweeper(world, npc, target, beamLength, beamWidth, beamHeight, @@ -102,14 +100,19 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { lockOnTarget); world.spawnEntityInWorld(activeEntity); - LogWriter.info("[Sweeper] Spawned sweeper entity"); - // Entity manages itself - completion signaled from onActiveTick when entity dies + // If movement is locked during active phase, keep ability active until entity dies + // Otherwise signal completion immediately + if (!lockMovement.locksActive()) { + activeEntity = null; + signalCompletion(); + } } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // Entity handles everything - check if entity finished its rotations - if (activeEntity == null || activeEntity.isDead) { + // If we're tracking the entity for movement lock, check if it's dead + if (activeEntity != null && activeEntity.isDead) { + activeEntity = null; signalCompletion(); } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/animation/AnimationsGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/animation/AnimationsGetPacket.java index a2bc51d0a..39b60a40f 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/animation/AnimationsGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/animation/AnimationsGetPacket.java @@ -44,5 +44,6 @@ public final class AnimationsGetPacket extends AbstractPacket { return; NoppesUtilServer.sendAnimationDataAll((EntityPlayerMP) player); + NoppesUtilServer.sendBuiltInAnimationData((EntityPlayerMP) player); } } diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 538829cef..526a3bdd7 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -412,7 +412,7 @@ public class DataAbilities { * @param animation The animation to play, or null if none */ public void playAbilityAnimation(Animation animation) { - if (animation == null || animation.id < 0) return; + if (animation == null) return; if (AnimationController.Instance == null) return; npc.display.animationData.setEnabled(true); diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index ffc778eb0..6a33cb2c0 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -163,7 +163,16 @@ public class NoppesUtilServer { for (Animation animation : AnimationController.getInstance().animations.values()) { map.put(animation.name, animation.id); } - sendScrollData(player, map, EnumScrollData.OPTIONAL); + sendScrollData(player, map, EnumScrollData.ANIMATIONS); + } + + public static void sendBuiltInAnimationData(EntityPlayerMP player) { + Map map = new HashMap(); + for (String name : AnimationController.getInstance().builtInAnimations.keySet()) { + // Use -1 as a marker for built-in animations (they have no ID) + map.put(AnimationController.getInstance().builtInAnimations.get(name).getName(), -1); + } + sendScrollData(player, map, EnumScrollData.BUILTIN_ANIMATIONS); } public static void sendTagDataAll(EntityPlayerMP player) { diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 11dbcbc85..a4fef92ef 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -129,8 +129,11 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Effects this.windUpSound = ability.getWindUpSound(); this.activeSound = ability.getActiveSound(); - this.windUpAnimationId = ability.getWindUpAnimation() != null ? ability.getWindUpAnimation().getID() : -1; - this.activeAnimationId = ability.getActiveAnimation() != null ? ability.getActiveAnimation().getID() : -1; + // Animation: check name first (built-in), then ID (user) + this.windUpAnimationName = ability.getWindUpAnimationName(); + this.activeAnimationName = ability.getActiveAnimationName(); + this.windUpAnimationId = ability.getWindUpAnimationId(); + this.activeAnimationId = ability.getActiveAnimationId(); // Telegraph this.showTelegraph = ability.isShowTelegraph(); @@ -286,8 +289,8 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi windupField.setMinMaxDefault(0, 1000, 20); addTextField(windupField); - // Sync button - only show if windup animation is selected - if (windUpAnimationId >= 0) { + // Sync button - only show if windup animation is selected (either by name or ID) + if (windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty())) { GuiNpcButton syncBtn = new GuiNpcButton(17, guiLeft + 115, y, 40, 20, "gui.sync"); syncBtn.setHoverText("ability.hover.sync"); addButton(syncBtn); @@ -591,12 +594,16 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } private String getAnimationName(int animId, boolean isWindUp) { - if (animId < 0) return StatCollector.translateToLocal("gui.none"); - String cachedName = isWindUp ? windUpAnimationName : activeAnimationName; - if (cachedName != null && !cachedName.isEmpty()) { - return truncateString(cachedName, 8); + String animName = isWindUp ? windUpAnimationName : activeAnimationName; + // Check if we have a built-in animation (by name) + if (animName != null && !animName.isEmpty()) { + return truncateString(animName, 8); } - return "ID: " + animId; + // Check if we have a user animation (by ID) + if (animId >= 0) { + return "ID: " + animId; + } + return StatCollector.translateToLocal("gui.none"); } // ═══════════════════════════════════════════════════════════════════════════ @@ -726,19 +733,19 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Animation buttons else if (id == 32) { editingAnimationId = 32; - setSubGui(new GuiAnimationSelection(windUpAnimationId)); + setSubGui(new GuiAnimationSelection(windUpAnimationId, windUpAnimationName)); } else if (id == 33) { editingAnimationId = 33; - setSubGui(new GuiAnimationSelection(activeAnimationId)); + setSubGui(new GuiAnimationSelection(activeAnimationId, activeAnimationName)); } // Animation clear buttons else if (id == 37) { windUpAnimationId = -1; - windUpAnimationName = null; + windUpAnimationName = ""; initGui(); } else if (id == 38) { activeAnimationId = -1; - activeAnimationName = null; + activeAnimationName = ""; initGui(); } @@ -824,11 +831,25 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } else if (subgui instanceof GuiAnimationSelection) { GuiAnimationSelection animSelector = (GuiAnimationSelection) subgui; if (editingAnimationId == 32) { - windUpAnimationId = animSelector.selectedAnimationId; - windUpAnimationName = animSelector.getSelectedName(); + if (animSelector.isBuiltInSelected()) { + // Built-in animation selected - use name, clear ID + windUpAnimationName = animSelector.selectedBuiltInName; + windUpAnimationId = -1; + } else { + // User animation selected - use ID, clear name + windUpAnimationId = animSelector.selectedAnimationId; + windUpAnimationName = ""; + } } else if (editingAnimationId == 33) { - activeAnimationId = animSelector.selectedAnimationId; - activeAnimationName = animSelector.getSelectedName(); + if (animSelector.isBuiltInSelected()) { + // Built-in animation selected - use name, clear ID + activeAnimationName = animSelector.selectedBuiltInName; + activeAnimationId = -1; + } else { + // User animation selected - use ID, clear name + activeAnimationId = animSelector.selectedAnimationId; + activeAnimationName = ""; + } } editingAnimationId = 0; initGui(); @@ -896,6 +917,8 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi ability.setActiveSound(activeSound); ability.setWindUpAnimationId(windUpAnimationId); ability.setActiveAnimationId(activeAnimationId); + ability.setWindUpAnimationName(windUpAnimationName != null ? windUpAnimationName : ""); + ability.setActiveAnimationName(activeAnimationName != null ? activeAnimationName : ""); // Telegraph ability.setShowTelegraph(showTelegraph); @@ -948,11 +971,20 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi * Syncs windup ticks with the selected windup animation's total duration. */ private void syncWindupWithAnimation() { - if (windUpAnimationId < 0 || AnimationController.Instance == null) { + if (AnimationController.Instance == null) { return; } - Animation animation = (Animation) AnimationController.Instance.get(windUpAnimationId); + Animation animation = null; + // Check for built-in animation (by name) first + if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationName); + } + // Fall back to user animation (by ID) + else if (windUpAnimationId >= 0) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationId); + } + if (animation == null || animation.frames.isEmpty()) { return; } diff --git a/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java b/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java index cc3e06cca..2a1f04344 100644 --- a/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java +++ b/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java @@ -19,20 +19,42 @@ import java.util.Vector; /** * Animation selection dialog for choosing global animations. - * Requests animation data from the server via packets. + * Toggle between Built-in animations (by name) and Custom animations (by ID). */ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScrollListener, IScrollData { private GuiCustomScroll scrollAnimations; - private HashMap animationData = new HashMap(); + // Built-in animations (name only, no ID) + private HashMap builtInData = new HashMap<>(); + // Custom/user animations (name -> ID) + private HashMap customData = new HashMap<>(); + + // View mode: true = built-in, false = custom + private boolean showingBuiltIn = true; + + // Initial values passed in private int initialAnimationId; - public int selectedAnimationId = -1; - private String selectedName = null; + private String initialAnimationName; + // Selected values to return + public int selectedAnimationId = -1; + public String selectedBuiltInName = ""; + + private String selectedCustomName = null; private String search = ""; + /** + * Constructor for selecting by ID (user animations). + */ public GuiAnimationSelection(int animationId) { + this(animationId, ""); + } + + /** + * Constructor for selecting by name (built-in) or ID (user). + */ + public GuiAnimationSelection(int animationId, String animationName) { drawDefaultBackground = false; title = ""; setBackground("menubg.png"); @@ -40,7 +62,12 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr ySize = 226; this.initialAnimationId = animationId; + this.initialAnimationName = animationName != null ? animationName : ""; this.selectedAnimationId = animationId; + this.selectedBuiltInName = this.initialAnimationName; + + // Start showing built-in if we have a built-in name, otherwise custom + this.showingBuiltIn = !this.initialAnimationName.isEmpty(); // Request animation data from server PacketClient.sendClient(new AnimationsGetPacket()); @@ -50,56 +77,87 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr public void initGui() { super.initGui(); - this.addLabel(new GuiNpcLabel(0, "menu.animations", guiLeft + 8, guiTop + 4)); + int y = guiTop + 4; - this.addButton(new GuiNpcButton(1, guiLeft + 4, guiTop + ySize - 35, 50, 20, "gui.clear")); - this.addButton(new GuiNpcButton(2, guiLeft + xSize - 56, guiTop + ySize - 35, 50, 20, "gui.done")); - this.addButton(new GuiNpcButton(3, guiLeft + xSize - 108, guiTop + ySize - 35, 50, 20, "gui.cancel")); + // Toggle button for switching views + String viewLabel = showingBuiltIn ? "gui.builtinAnimations" : "gui.customAnimations"; + this.addButton(new GuiNpcButton(10, guiLeft + 4, y, 212, 20, viewLabel)); + y += 24; + // Animation scroll list if (scrollAnimations == null) { scrollAnimations = new GuiCustomScroll(this, 0, 0); - scrollAnimations.setSize(212, 150); + scrollAnimations.setSize(212, 130); } scrollAnimations.setList(getSearchList()); - if (selectedName != null) { - scrollAnimations.setSelected(selectedName); - } - scrollAnimations.guiLeft = guiLeft + 4; - scrollAnimations.guiTop = guiTop + 14; - this.addScroll(scrollAnimations); - // Search textbox - moved up to avoid overlapping with buttons - addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 4, guiTop + 166, 212, 20, search)); + // Set selection based on current mode + if (showingBuiltIn && !selectedBuiltInName.isEmpty()) { + scrollAnimations.setSelected(selectedBuiltInName); + } else if (!showingBuiltIn && selectedCustomName != null) { + scrollAnimations.setSelected(selectedCustomName); + } + + scrollAnimations.guiLeft = guiLeft + 4; + scrollAnimations.guiTop = y; + this.addScroll(scrollAnimations); + y += 134; + + // Search textbox + addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 4, y, 212, 20, search)); + y += 24; + + // Buttons + this.addButton(new GuiNpcButton(1, guiLeft + 4, y, 50, 20, "gui.clear")); + this.addButton(new GuiNpcButton(3, guiLeft + xSize - 108, y, 50, 20, "gui.cancel")); + this.addButton(new GuiNpcButton(2, guiLeft + xSize - 56, y, 50, 20, "gui.done")); } @Override public void setData(Vector list, HashMap data, EnumScrollData type) { - this.animationData = data; + if (type == EnumScrollData.BUILTIN_ANIMATIONS) { + this.builtInData = data; - // Find the name for our initial animation ID - if (initialAnimationId >= 0) { - for (String name : data.keySet()) { - if (data.get(name) == initialAnimationId) { - selectedName = name; - break; + // Check if initial name matches a built-in animation + if (!initialAnimationName.isEmpty()) { + for (String name : builtInData.keySet()) { + if (name.equalsIgnoreCase(initialAnimationName)) { + selectedBuiltInName = name; + selectedAnimationId = -1; + selectedCustomName = null; + showingBuiltIn = true; + break; + } + } + } + } else if (type == EnumScrollData.ANIMATIONS) { + this.customData = data; + + // Find the name for our initial animation ID (if not using built-in) + if (selectedBuiltInName.isEmpty() && initialAnimationId >= 0) { + for (String name : data.keySet()) { + if (data.get(name) == initialAnimationId) { + selectedCustomName = name; + showingBuiltIn = false; + break; + } } } } if (scrollAnimations != null) { scrollAnimations.setList(getSearchList()); - if (selectedName != null) { - scrollAnimations.setSelected(selectedName); + if (showingBuiltIn && !selectedBuiltInName.isEmpty()) { + scrollAnimations.setSelected(selectedBuiltInName); + } else if (!showingBuiltIn && selectedCustomName != null) { + scrollAnimations.setSelected(selectedCustomName); } } } @Override public void setSelected(String selected) { - this.selectedName = selected; - if (scrollAnimations != null) { - scrollAnimations.setSelected(selected); - } + // Not used in this implementation } @Override @@ -110,18 +168,22 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr if (search.equals(getTextField(55).getText())) return; search = getTextField(55).getText().toLowerCase(); - scrollAnimations.resetScroll(); - scrollAnimations.setList(getSearchList()); + if (scrollAnimations != null) { + scrollAnimations.resetScroll(); + scrollAnimations.setList(getSearchList()); + } } } } private List getSearchList() { + HashMap sourceData = showingBuiltIn ? builtInData : customData; + if (search.isEmpty()) { - return new ArrayList(animationData.keySet()); + return new ArrayList<>(sourceData.keySet()); } - List list = new ArrayList(); - for (String name : animationData.keySet()) { + List list = new ArrayList<>(); + for (String name : sourceData.keySet()) { if (name.toLowerCase().contains(search)) list.add(name); } @@ -130,11 +192,20 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr @Override public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { - if (guiCustomScroll.id == 0) { - String selected = scrollAnimations.getSelected(); - if (selected != null && animationData.containsKey(selected)) { - selectedName = selected; - selectedAnimationId = animationData.get(selected); + String selected = scrollAnimations.getSelected(); + if (selected == null) return; + + if (showingBuiltIn) { + if (builtInData.containsKey(selected)) { + selectedBuiltInName = selected; + selectedAnimationId = -1; + selectedCustomName = null; + } + } else { + if (customData.containsKey(selected)) { + selectedCustomName = selected; + selectedAnimationId = customData.get(selected); + selectedBuiltInName = ""; } } initGui(); @@ -142,27 +213,40 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr @Override public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) { - if (selectedAnimationId < 0) - return; - close(); + // Double-click to confirm selection + if (!selectedBuiltInName.isEmpty() || selectedAnimationId >= 0) { + close(); + } } @Override protected void actionPerformed(GuiButton guibutton) { int id = guibutton.id; - if (id == 1) { - // Clear selection - selectedName = null; + + // Toggle view button + if (id == 10) { + showingBuiltIn = !showingBuiltIn; + search = ""; + if (scrollAnimations != null) { + scrollAnimations.resetScroll(); + } + initGui(); + } + // Clear + else if (id == 1) { + selectedBuiltInName = ""; selectedAnimationId = -1; + selectedCustomName = null; close(); } - if (id == 2) { - // Done - keep selection + // Done + else if (id == 2) { close(); } - if (id == 3) { - // Cancel - restore initial value + // Cancel + else if (id == 3) { selectedAnimationId = initialAnimationId; + selectedBuiltInName = initialAnimationName; close(); } } @@ -171,6 +255,16 @@ public class GuiAnimationSelection extends SubGuiInterface implements ICustomScr * Get the name of the selected animation (for display purposes). */ public String getSelectedName() { - return selectedName; + if (!selectedBuiltInName.isEmpty()) { + return selectedBuiltInName; + } + return selectedCustomName; + } + + /** + * Check if a built-in animation was selected. + */ + public boolean isBuiltInSelected() { + return !selectedBuiltInName.isEmpty(); } } diff --git a/src/main/java/noppes/npcs/constants/EnumScrollData.java b/src/main/java/noppes/npcs/constants/EnumScrollData.java index abf55a84e..235f2719b 100644 --- a/src/main/java/noppes/npcs/constants/EnumScrollData.java +++ b/src/main/java/noppes/npcs/constants/EnumScrollData.java @@ -6,5 +6,7 @@ public enum EnumScrollData { MAGIC_CYCLES, DIALOG_GROUP, QUEST_GROUP, - ABILITY_TYPES + ABILITY_TYPES, + ANIMATIONS, + BUILTIN_ANIMATIONS } diff --git a/src/main/java/noppes/npcs/controllers/AnimationController.java b/src/main/java/noppes/npcs/controllers/AnimationController.java index e3caddce5..e5e11d666 100644 --- a/src/main/java/noppes/npcs/controllers/AnimationController.java +++ b/src/main/java/noppes/npcs/controllers/AnimationController.java @@ -8,23 +8,43 @@ import noppes.npcs.LogWriter; import noppes.npcs.api.handler.IAnimationHandler; import noppes.npcs.api.handler.data.IAnimation; import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.BuiltInAnimation; import noppes.npcs.util.NBTJsonUtil; import java.io.BufferedInputStream; +import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import java.util.stream.Stream; import java.util.zip.GZIPInputStream; public class AnimationController implements IAnimationHandler { public HashMap animations; private HashMap bootOrder; + // Built-in animations loaded from assets folder (read-only, keyed by name) + public HashMap builtInAnimations = new HashMap<>(); + private static final String BUILTIN_ANIMATIONS_PATH = "/assets/customnpcs/animations"; + private static final String BUILTIN_ANIMATIONS_RESOURCE = "assets/customnpcs/animations"; + public static AnimationController Instance; private int lastUsedID = 0; @@ -42,12 +62,94 @@ public class AnimationController implements IAnimationHandler { public void load() { bootOrder = new HashMap<>(); animations = new HashMap<>(); + builtInAnimations = new HashMap<>(); LogWriter.info("Loading animations..."); + loadBuiltInAnimations(); readAnimationMap(); loadAnimations(); LogWriter.info("Done loading animations."); } + /** + * Load built-in animations from assets/customnpcs/animations/ folder. + * These animations are read-only and accessed by name only (no IDs). + * Scans the folder directly instead of using a manifest. + */ + private void loadBuiltInAnimations() { + try { + URL resourceUrl = CustomNpcs.class.getResource(BUILTIN_ANIMATIONS_PATH); + if (resourceUrl == null) { + LogWriter.info("Built-in animations folder not found: " + BUILTIN_ANIMATIONS_PATH); + return; + } + + URI uri = resourceUrl.toURI(); + Path animationsPath; + + if (uri.getScheme().equals("jar")) { + // Running from JAR - need to create a FileSystem to access it + FileSystem fileSystem = null; + try { + fileSystem = FileSystems.getFileSystem(uri); + } catch (Exception e) { + fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + } + animationsPath = fileSystem.getPath(BUILTIN_ANIMATIONS_PATH); + } else { + // Running from file system (dev environment) + animationsPath = Paths.get(uri); + } + + // Scan the directory for .json files + try (Stream paths = Files.walk(animationsPath, 1)) { + paths.filter(path -> path.toString().endsWith(".json")) + .forEach(path -> { + String fileName = path.getFileName().toString(); + String animName = fileName.substring(0, fileName.length() - 5); // Remove .json + try { + loadBuiltInAnimation(animName); + } catch (Exception e) { + LogWriter.error("Error loading built-in animation: " + animName, e); + } + }); + } + + LogWriter.info("Loaded " + builtInAnimations.size() + " built-in animations."); + } catch (Exception e) { + LogWriter.error("Error scanning built-in animations folder", e); + } + } + + /** + * Load a single built-in animation by name from assets folder. + */ + private void loadBuiltInAnimation(String animName) throws Exception { + String resourcePath = BUILTIN_ANIMATIONS_PATH + "/" + animName + ".json"; + try (InputStream stream = CustomNpcs.class.getResourceAsStream(resourcePath)) { + if (stream == null) { + return; + } + + // Read JSON content + StringBuilder content = new StringBuilder(); + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + String line; + while ((line = reader.readLine()) != null) { + content.append(line); + } + reader.close(); + + // Parse NBT from JSON + NBTTagCompound nbt = NBTJsonUtil.Convert(content.toString()); + + BuiltInAnimation animation = new BuiltInAnimation(animName); + animation.readFromNBT(nbt); + + // Store with lowercase key for case-insensitive lookup + builtInAnimations.put(animName.toLowerCase(), animation); + } + } + private void loadAnimations() { animations.clear(); @@ -110,6 +212,12 @@ public class AnimationController implements IAnimationHandler { } public IAnimation saveAnimation(IAnimation animation) { + // Reject saving built-in animations + if (animation instanceof BuiltInAnimation) { + LogWriter.info("Cannot save built-in animation: " + animation.getName()); + return animation; + } + if (animation.getID() < 0) { animation.setID(getUnusedId()); while (hasName(animation.getName())) @@ -157,6 +265,12 @@ public class AnimationController implements IAnimationHandler { public void delete(String name) { Animation delete = getAnimationFromName(name); if (delete != null) { + // Reject deleting built-in animations + if (delete instanceof BuiltInAnimation) { + LogWriter.info("Cannot delete built-in animation: " + name); + return; + } + Animation foundAnimation = this.animations.remove(delete.getID()); if (foundAnimation != null && foundAnimation.name != null) { File dir = this.getDir(); @@ -175,7 +289,8 @@ public class AnimationController implements IAnimationHandler { } public void delete(int id) { - if (!this.animations.containsKey(id)) + // Only user animations have valid IDs (>= 0) + if (id < 0 || !this.animations.containsKey(id)) return; Animation foundAnimation = this.animations.remove(id); @@ -199,20 +314,83 @@ public class AnimationController implements IAnimationHandler { } public IAnimation get(String name) { + // Check built-in animations first (by name) + BuiltInAnimation builtIn = builtInAnimations.get(name.toLowerCase()); + if (builtIn != null) { + return builtIn; + } + // Then check user animations return getAnimationFromName(name); } + /** + * Get a user animation by ID. + * Built-in animations have no IDs and cannot be retrieved this way. + */ public IAnimation get(int id) { + // Only user animations have valid IDs + if (id < 0) { + return null; + } return this.animations.get(id); } + /** + * Get a built-in animation by name. + * @param name The animation name (case-insensitive) + * @return The built-in animation, or null if not found + */ + public BuiltInAnimation getBuiltInAnimation(String name) { + return builtInAnimations.get(name.toLowerCase()); + } + public IAnimation[] getAnimations() { ArrayList animations = new ArrayList<>(this.animations.values()); return animations.toArray(new IAnimation[0]); } + /** + * Get all built-in animations. + */ + public IAnimation[] getBuiltInAnimations() { + return builtInAnimations.values().toArray(new IAnimation[0]); + } + + /** + * Get all animations (both built-in and user-created). + */ + public IAnimation[] getAllAnimations() { + ArrayList all = new ArrayList<>(); + all.addAll(builtInAnimations.values()); + all.addAll(animations.values()); + return all.toArray(new IAnimation[0]); + } + + /** + * Check if an animation name is a built-in animation. + * @param name The animation name to check + * @return true if this is a built-in animation + */ + public boolean isBuiltIn(String name) { + return builtInAnimations.containsKey(name.toLowerCase()); + } + + /** + * @deprecated Built-in animations no longer use IDs. Use isBuiltIn(String name) instead. + */ + @Deprecated + public boolean isBuiltIn(int id) { + return false; // Built-in animations have no IDs + } + public Animation getAnimationFromName(String animation) { - for (Map.Entry entryAnimation : AnimationController.getInstance().animations.entrySet()) { + // Check built-in animations first (by name) + BuiltInAnimation builtIn = builtInAnimations.get(animation.toLowerCase()); + if (builtIn != null) { + return builtIn; + } + // Then check user animations + for (Map.Entry entryAnimation : animations.entrySet()) { if (entryAnimation.getValue().name.equalsIgnoreCase(animation)) { return entryAnimation.getValue(); } @@ -220,6 +398,13 @@ public class AnimationController implements IAnimationHandler { return null; } + /** + * Get names of all built-in animations. + */ + public String[] getBuiltInAnimationNames() { + return builtInAnimations.keySet().toArray(new String[0]); + } + public String[] getNames() { String[] names = new String[animations.size()]; int i = 0; diff --git a/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java b/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java new file mode 100644 index 000000000..a30923eac --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java @@ -0,0 +1,94 @@ +package noppes.npcs.controllers.data; + +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.api.handler.data.IAnimation; + +/** + * A read-only animation loaded from mod assets. + * Built-in animations are identified by name only, never by ID. + * They cannot be saved, deleted, or modified. + */ +public class BuiltInAnimation extends Animation { + + public BuiltInAnimation() { + super(); + this.id = -1; // No valid ID for built-in animations + } + + public BuiltInAnimation(String name) { + super(); + this.name = name; + this.id = -1; + } + + /** + * Built-in animations cannot be saved. + * @return this animation unchanged + */ + @Override + public IAnimation save() { + // Do nothing - built-in animations are read-only + return this; + } + + /** + * Built-in animations have no valid ID. + * @return always -1 + */ + @Override + public int getID() { + return -1; + } + + /** + * Built-in animations cannot have their ID changed. + */ + @Override + public void setID(int newID) { + // Ignore - built-in animations don't use IDs + } + + /** + * Check if this is a built-in animation. + * @return always true for BuiltInAnimation + */ + public boolean isBuiltIn() { + return true; + } + + /** + * Read animation data from NBT. + * Preserves the name set in constructor (from filename) rather than reading from NBT. + */ + @Override + public void readFromNBT(NBTTagCompound compound) { + // Preserve the name set in constructor - don't read from NBT + // (filename is the source of truth for built-in animations) + String preservedName = this.name; + + speed = compound.getFloat("Speed"); + smooth = compound.getByte("Smooth"); + loop = compound.getInteger("Loop"); + + frames.clear(); + net.minecraft.nbt.NBTTagList list = compound.getTagList("Frames", 10); + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound item = list.getCompoundTagAt(i); + Frame frame = new Frame(); + frame.parent = this; + frame.readFromNBT(item); + frames.add(frame); + } + + this.whileStanding = compound.getBoolean("WhileStanding"); + this.whileMoving = compound.getBoolean("WhileWalking"); + this.whileAttacking = compound.getBoolean("WhileAttacking"); + + this.currentFrame = compound.getInteger("CurrentFrame"); + this.currentFrameTime = compound.getInteger("CurrentFrameTime"); + + // Ensure name and ID are preserved + this.name = preservedName; + this.id = -1; + } +} diff --git a/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json similarity index 100% rename from src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Active.json rename to src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json diff --git a/src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json similarity index 100% rename from src/main/resources/internal/animations/ABILITYBEAM/Ability_Beam_Windup.json rename to src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json diff --git a/src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json similarity index 100% rename from src/main/resources/internal/animations/ABILITYORB/Ability_Orb_Windup.json rename to src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index fd148ea08..8e3f6a606 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -120,6 +120,8 @@ gui.range=Range gui.partly=Partially gui.copy=Copy gui.clear=Clear +gui.builtinAnimations=Built-in Animations +gui.customAnimations=Custom Animations gui.done=Done gui.paste=Paste gui.test=Test From c339e5edbcfe57c80a85704cc94b2bd62d10b3c8 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 16:57:49 -0500 Subject: [PATCH 25/85] Fix Built In Animation --- .../data/ability/type/AbilityDisc.java | 12 +- .../data/ability/type/AbilityEnergyBeam.java | 12 +- .../data/ability/type/AbilityLaserShot.java | 12 +- .../data/ability/type/AbilityOrb.java | 12 +- .../data/ability/type/AbilitySweeper.java | 12 +- .../kamkeel/npcs/network/PacketHandler.java | 2 + .../npcs/network/enums/EnumRequestPacket.java | 1 + .../animation/BuiltInAnimationGetPacket.java | 72 +++++++++++ .../gui/global/GuiNPCManageAnimations.java | 118 ++++++++++++++---- .../npcs/controllers/AnimationController.java | 23 ++-- .../assets/customnpcs/lang/en_US.lang | 2 + 11 files changed, 205 insertions(+), 73 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index d85720b6e..72b97839d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -122,12 +122,8 @@ public class AbilityDisc extends Ability implements IAbilityDisc { discEntity.startMoving(target); } - // If movement is locked during active phase, keep ability active until entity dies - // Otherwise signal completion immediately - if (!lockMovement.locksActive()) { - discEntity = null; - signalCompletion(); - } + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class } @Override @@ -157,8 +153,8 @@ public class AbilityDisc extends Ability implements IAbilityDisc { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // If we're tracking the entity for movement lock, check if it's dead - if (discEntity != null && discEntity.isDead) { + // Signal completion when entity dies + if (discEntity == null || discEntity.isDead) { discEntity = null; signalCompletion(); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 7ebd4bb7b..d4620c2bb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -123,12 +123,8 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { beamEntity.startFiring(target); } - // If movement is locked during active phase, keep ability active until entity dies - // Otherwise signal completion immediately - if (!lockMovement.locksActive()) { - beamEntity = null; - signalCompletion(); - } + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class } @Override @@ -161,8 +157,8 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // If we're tracking the entity for movement lock, check if it's dead - if (beamEntity != null && beamEntity.isDead) { + // Signal completion when entity dies + if (beamEntity == null || beamEntity.isDead) { beamEntity = null; signalCompletion(); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index a9cf74473..eeeebfa74 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -128,18 +128,14 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { world.spawnEntityInWorld(laserEntity); - // If movement is locked during active phase, keep ability active until entity dies - // Otherwise signal completion immediately - if (!lockMovement.locksActive()) { - laserEntity = null; - signalCompletion(); - } + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // If we're tracking the entity for movement lock, check if it's dead - if (laserEntity != null && laserEntity.isDead) { + // Signal completion when entity dies + if (laserEntity == null || laserEntity.isDead) { laserEntity = null; signalCompletion(); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index d69a5c944..badd4aec8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -121,12 +121,8 @@ public class AbilityOrb extends Ability implements IAbilityOrb { orbEntity.startMoving(target); } - // If movement is locked during active phase, keep ability active until entity dies - // Otherwise signal completion immediately - if (!lockMovement.locksActive()) { - orbEntity = null; - signalCompletion(); - } + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class } @Override @@ -155,8 +151,8 @@ public class AbilityOrb extends Ability implements IAbilityOrb { @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // If we're tracking the entity for movement lock, check if it's dead - if (orbEntity != null && orbEntity.isDead) { + // Signal completion when entity dies + if (orbEntity == null || orbEntity.isDead) { orbEntity = null; signalCompletion(); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 78dae4fdc..d2dced201 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -100,18 +100,14 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { lockOnTarget); world.spawnEntityInWorld(activeEntity); - // If movement is locked during active phase, keep ability active until entity dies - // Otherwise signal completion immediately - if (!lockMovement.locksActive()) { - activeEntity = null; - signalCompletion(); - } + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class } @Override public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { - // If we're tracking the entity for movement lock, check if it's dead - if (activeEntity != null && activeEntity.isDead) { + // Signal completion when entity dies + if (activeEntity == null || activeEntity.isDead) { activeEntity = null; signalCompletion(); } diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index d09882cfc..e659fef74 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -96,6 +96,7 @@ import kamkeel.npcs.network.packets.request.animation.AnimationGetPacket; import kamkeel.npcs.network.packets.request.animation.AnimationRemovePacket; import kamkeel.npcs.network.packets.request.animation.AnimationSavePacket; import kamkeel.npcs.network.packets.request.animation.AnimationsGetPacket; +import kamkeel.npcs.network.packets.request.animation.BuiltInAnimationGetPacket; import kamkeel.npcs.network.packets.request.bank.BankGetPacket; import kamkeel.npcs.network.packets.request.bank.BankRemovePacket; import kamkeel.npcs.network.packets.request.bank.BankSavePacket; @@ -469,6 +470,7 @@ public class PacketHandler { REQUEST_PACKET.registerPacket(new AnimationGetPacket()); REQUEST_PACKET.registerPacket(new AnimationRemovePacket()); REQUEST_PACKET.registerPacket(new AnimationSavePacket()); + REQUEST_PACKET.registerPacket(new BuiltInAnimationGetPacket()); // Moving Path REQUEST_PACKET.registerPacket(new MovingPathSavePacket()); diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java index 005da40a7..bdd566785 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java @@ -93,6 +93,7 @@ public enum EnumRequestPacket { AnimationGet, AnimationRemove, AnimationSave, + BuiltInAnimationGet, RemoteNpcsGet, RemoteTpToNpc, diff --git a/src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java new file mode 100644 index 000000000..e214689d8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java @@ -0,0 +1,72 @@ +package kamkeel.npcs.network.packets.request.animation; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import kamkeel.npcs.network.packets.data.large.GuiDataPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.BuiltInAnimation; + +import java.io.IOException; + +/** + * Packet to request a built-in animation by name. + * Built-in animations don't have IDs, so we fetch by name. + */ +public final class BuiltInAnimationGetPacket extends AbstractPacket { + public static String packetName = "Request|BuiltInAnimationGet"; + + private String animationName; + + public BuiltInAnimationGetPacket() { + } + + public BuiltInAnimationGetPacket(String animationName) { + this.animationName = animationName; + } + + @Override + public Enum getType() { + return EnumRequestPacket.BuiltInAnimationGet; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + ByteBufUtils.writeString(out, animationName); + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + + if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) + return; + + String name = ByteBufUtils.readString(in); + BuiltInAnimation animation = AnimationController.getInstance().getBuiltInAnimation(name); + if (animation != null) { + NBTTagCompound compound = animation.writeToNBT(); + // Mark as built-in so client knows + compound.setBoolean("BuiltIn", true); + GuiDataPacket.sendGuiData((EntityPlayerMP) player, compound); + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageAnimations.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageAnimations.java index 7d1fa84be..0141e931a 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageAnimations.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageAnimations.java @@ -5,6 +5,7 @@ import kamkeel.npcs.network.packets.request.animation.AnimationGetPacket; import kamkeel.npcs.network.packets.request.animation.AnimationRemovePacket; import kamkeel.npcs.network.packets.request.animation.AnimationSavePacket; import kamkeel.npcs.network.packets.request.animation.AnimationsGetPacket; +import kamkeel.npcs.network.packets.request.animation.BuiltInAnimationGetPacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.gui.GuiYesNoCallback; @@ -37,13 +38,19 @@ import java.util.Vector; public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrollData, ICustomScrollListener, ITextfieldListener, IGuiData, ISubGuiListener, GuiYesNoCallback { private GuiCustomScroll scrollAnimations; - private HashMap data = new HashMap(); + private HashMap customData = new HashMap(); + private HashMap builtInData = new HashMap(); private Animation animation = new Animation(); public boolean playingAnimation = false; private long prevTick; private String selected = null; private String search = ""; + // Toggle between Custom (false) and Built-in (true) animations + private boolean showingBuiltIn = false; + // Track if current animation is built-in + private boolean currentIsBuiltIn = false; + public GuiNPCManageAnimations(EntityNPCInterface npc, boolean save) { super(npc); this.setSave(save); @@ -58,8 +65,15 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol public void initGui() { super.initGui(); - this.addButton(new GuiNpcButton(0, guiLeft + 368, guiTop + 8, 45, 20, "gui.add")); - this.addButton(new GuiNpcButton(1, guiLeft + 368, guiTop + 32, 45, 20, "gui.remove")); + // Add/Remove buttons - only show for custom animations + if (!showingBuiltIn) { + this.addButton(new GuiNpcButton(0, guiLeft + 368, guiTop + 8, 45, 20, "gui.add")); + this.addButton(new GuiNpcButton(1, guiLeft + 368, guiTop + 32, 45, 20, "gui.remove")); + } + + // Toggle button for Custom/Built-in - under Remove button + String toggleLabel = showingBuiltIn ? "gui.builtin" : "gui.custom"; + this.addButton(new GuiNpcButton(10, guiLeft + 368, guiTop + 56, 45, 20, toggleLabel)); if (scrollAnimations == null) { scrollAnimations = new GuiCustomScroll(this, 0, 0); @@ -68,13 +82,23 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol scrollAnimations.guiLeft = guiLeft + 220; scrollAnimations.guiTop = guiTop + 4; addScroll(scrollAnimations); + + // Search field addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 220, guiTop + 192, 143, 20, search)); - if (animation.id == -1) + // Update scroll list based on current view + scrollAnimations.setList(getSearchList()); + + if (animation.id == -1 && !currentIsBuiltIn) return; - addLabel(new GuiNpcLabel(10, "ID", guiLeft + 368, guiTop + 192)); - addLabel(new GuiNpcLabel(11, animation.id + "", guiLeft + 368, guiTop + 192 + 10)); + // ID label - only for custom animations + if (!currentIsBuiltIn) { + addLabel(new GuiNpcLabel(10, "ID", guiLeft + 368, guiTop + 192)); + addLabel(new GuiNpcLabel(11, animation.id + "", guiLeft + 368, guiTop + 192 + 10)); + } else { + addLabel(new GuiNpcLabel(10, "gui.builtin", guiLeft + 368, guiTop + 192)); + } AnimationData data = npc.display.animationData; if (!playingAnimation) { @@ -90,12 +114,13 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol } } - if (animation != null) { + // Edit button - only for custom animations + if (animation != null && !currentIsBuiltIn) { this.addButton(new GuiNpcButton(100, guiLeft + 10, guiTop + 192, 45, 20, "gui.edit")); } String animTexture = "customnpcs:textures/gui/animation.png"; - int playButtonOffsetX = 140; + int playButtonOffsetX = currentIsBuiltIn ? 80 : 140; if (animation != null && !animation.frames.isEmpty()) { if (!this.playingAnimation || data.animation.paused) {//Play this.addLabel(new GuiNpcLabel(90, data.animation.paused ? "animation.paused" : "animation.stopped", guiLeft + playButtonOffsetX - 15, guiTop + 198)); @@ -151,12 +176,17 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol } } + private HashMap getCurrentData() { + return showingBuiltIn ? builtInData : customData; + } + private List getSearchList() { + HashMap data = getCurrentData(); if (search.isEmpty()) { - return new ArrayList(this.data.keySet()); + return new ArrayList(data.keySet()); } List list = new ArrayList(); - for (String name : this.data.keySet()) { + for (String name : data.keySet()) { if (name.toLowerCase().contains(search)) list.add(name); } @@ -167,16 +197,31 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol protected void actionPerformed(GuiButton guibutton) { GuiNpcButton button = (GuiNpcButton) guibutton; - if (button.id == 0) { + // Toggle button + if (button.id == 10) { + showingBuiltIn = !showingBuiltIn; + // Clear selection when switching views + selected = null; + animation = new Animation(); + currentIsBuiltIn = false; + scrollAnimations.clear(); + initGui(); + return; + } + + // Add button - only for custom + if (button.id == 0 && !showingBuiltIn) { save(); String name = "New"; - while (data.containsKey(name)) + while (customData.containsKey(name)) name += "_"; Animation animation = new Animation(-1, name); PacketClient.sendClient(new AnimationSavePacket(animation.writeToNBT())); } - if (button.id == 1) { - if (data.containsKey(scrollAnimations.getSelected())) { + + // Remove button - only for custom + if (button.id == 1 && !showingBuiltIn) { + if (customData.containsKey(scrollAnimations.getSelected())) { GuiYesNo guiyesno = new GuiYesNo(this, scrollAnimations.getSelected(), StatCollector.translateToLocal("gui.delete"), 1); displayGuiScreen(guiyesno); } @@ -204,7 +249,8 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol data.animation.paused = false; } - if (guibutton.id == 100) { + // Edit button - only for custom + if (guibutton.id == 100 && !currentIsBuiltIn) { NoppesUtil.openGUI(player, new GuiNPCEditAnimation(this, this.animation, npc)); } @@ -215,6 +261,10 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol public void setGuiData(NBTTagCompound compound) { this.animation = new Animation(); animation.readFromNBT(compound); + + // Check if this is a built-in animation + currentIsBuiltIn = compound.hasKey("BuiltIn") && compound.getBoolean("BuiltIn"); + setSelected(animation.name); npc.display.animationData.setAnimation(this.animation); this.playingAnimation = false; @@ -225,7 +275,13 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol @Override public void setData(Vector list, HashMap data, EnumScrollData type) { String name = scrollAnimations.getSelected(); - this.data = data; + + if (type == EnumScrollData.ANIMATIONS) { + this.customData = data; + } else if (type == EnumScrollData.BUILTIN_ANIMATIONS) { + this.builtInData = data; + } + scrollAnimations.setList(getSearchList()); if (name != null) @@ -242,28 +298,40 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { if (guiCustomScroll.id == 0) { selected = scrollAnimations.getSelected(); - PacketClient.sendClient(new AnimationGetPacket(data.get(selected))); + HashMap data = getCurrentData(); + + if (showingBuiltIn) { + // Fetch built-in animation by name + PacketClient.sendClient(new BuiltInAnimationGetPacket(selected)); + } else { + // Fetch custom animation by ID + if (data.containsKey(selected)) { + PacketClient.sendClient(new AnimationGetPacket(data.get(selected))); + } + } } } public void save() { - if (selected != null && data.containsKey(selected) && animation != null) { + // Only save custom animations + if (selected != null && customData.containsKey(selected) && animation != null && !currentIsBuiltIn) { PacketClient.sendClient(new AnimationSavePacket(animation.writeToNBT())); } } @Override public void unFocused(GuiNpcTextField guiNpcTextField) { - if (animation.id == -1) + // Don't allow renaming built-in animations + if (animation.id == -1 || currentIsBuiltIn) return; if (guiNpcTextField.id == 0) { String name = guiNpcTextField.getText(); - if (!name.isEmpty() && !data.containsKey(name)) { + if (!name.isEmpty() && !customData.containsKey(name)) { String old = animation.name; - data.remove(animation.name); + customData.remove(animation.name); animation.name = name; - data.put(animation.name, animation.id); + customData.put(animation.name, animation.id); selected = name; scrollAnimations.replace(old, animation.name); } @@ -280,10 +348,12 @@ public class GuiNPCManageAnimations extends GuiModelInterface2 implements IScrol if (!result) return; if (id == 1) { - if (data.containsKey(scrollAnimations.getSelected())) { - PacketClient.sendClient(new AnimationRemovePacket(data.get(selected))); + // Only delete custom animations + if (customData.containsKey(scrollAnimations.getSelected()) && !showingBuiltIn) { + PacketClient.sendClient(new AnimationRemovePacket(customData.get(selected))); scrollAnimations.clear(); animation = new Animation(); + currentIsBuiltIn = false; initGui(); } } diff --git a/src/main/java/noppes/npcs/controllers/AnimationController.java b/src/main/java/noppes/npcs/controllers/AnimationController.java index e5e11d666..c6837b6c7 100644 --- a/src/main/java/noppes/npcs/controllers/AnimationController.java +++ b/src/main/java/noppes/npcs/controllers/AnimationController.java @@ -314,13 +314,18 @@ public class AnimationController implements IAnimationHandler { } public IAnimation get(String name) { - // Check built-in animations first (by name) + // Check user/custom animations first (allows overriding built-in) + for (Map.Entry entry : animations.entrySet()) { + if (entry.getValue().name.equalsIgnoreCase(name)) { + return entry.getValue(); + } + } + // Then check built-in animations BuiltInAnimation builtIn = builtInAnimations.get(name.toLowerCase()); if (builtIn != null) { return builtIn; } - // Then check user animations - return getAnimationFromName(name); + return null; } /** @@ -384,17 +389,17 @@ public class AnimationController implements IAnimationHandler { } public Animation getAnimationFromName(String animation) { - // Check built-in animations first (by name) - BuiltInAnimation builtIn = builtInAnimations.get(animation.toLowerCase()); - if (builtIn != null) { - return builtIn; - } - // Then check user animations + // Check user/custom animations first (allows overriding built-in) for (Map.Entry entryAnimation : animations.entrySet()) { if (entryAnimation.getValue().name.equalsIgnoreCase(animation)) { return entryAnimation.getValue(); } } + // Then check built-in animations + BuiltInAnimation builtIn = builtInAnimations.get(animation.toLowerCase()); + if (builtIn != null) { + return builtIn; + } return null; } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 8e3f6a606..de60eda25 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -120,6 +120,8 @@ gui.range=Range gui.partly=Partially gui.copy=Copy gui.clear=Clear +gui.builtin=Built-in +gui.custom=Custom gui.builtinAnimations=Built-in Animations gui.customAnimations=Custom Animations gui.done=Done From 67237e794fc7b39ce4da4d75554fca7b5e446a7c Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 17:16:59 -0500 Subject: [PATCH 26/85] Fix Defaults / Syncing --- .../npcs/entity/EntityAbilityBeam.java | 8 +- .../npcs/entity/EntityAbilityDisc.java | 6 +- .../npcs/entity/EntityAbilityLaser.java | 3 +- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 6 +- .../npcs/entity/EntityAbilityProjectile.java | 6 - .../gui/advanced/SubGuiAbilityConfig.java | 45 +++- .../animations/Ability_Beam_Active.json | 202 +++-------------- .../animations/Ability_Beam_Windup.json | 206 ++++++++++++------ .../assets/customnpcs/lang/en_US.lang | 2 + 9 files changed, 219 insertions(+), 265 deletions(-) diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 70aaf5254..60f7fd656 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -68,7 +68,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { private static final int DW_CHARGING = 20; // Debug logging - private static final boolean DEBUG_LOGGING = true; + private static final boolean DEBUG_LOGGING = false; public EntityAbilityBeam(World world) { super(world); @@ -560,12 +560,10 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { Vec3 currentPos = Vec3.createVectorHelper(prevHeadWorldX, prevHeadWorldY, prevHeadWorldZ); Vec3 nextPos = Vec3.createVectorHelper(headX, headY, headZ); - MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + // Use full raytrace that doesn't stop at liquids and checks all blocks + MovingObjectPosition blockHit = worldObj.func_147447_a(currentPos, nextPos, false, true, false); if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { - if (DEBUG_LOGGING) { - LogWriter.info("[Beam] DEAD: Block collision at tick " + ticksExisted); - } hasHit = true; if (explosive) { posX = blockHit.hitVec.xCoord; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index b1f57f9c9..0c5b10ccb 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -413,11 +413,15 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { private void checkBlockCollision() { Vec3 currentPos = Vec3.createVectorHelper(posX, posY, posZ); Vec3 nextPos = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ); - MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + // Use full raytrace that doesn't stop at liquids and checks all blocks + MovingObjectPosition blockHit = worldObj.func_147447_a(currentPos, nextPos, false, true, false); if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { hasHit = true; if (explosive) { + posX = blockHit.hitVec.xCoord; + posY = blockHit.hitVec.yCoord; + posZ = blockHit.hitVec.zCoord; doExplosion(); } this.setDead(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 7ad1f0d45..256a4faf7 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -163,7 +163,8 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { private void checkBlockCollision() { Vec3 start = Vec3.createVectorHelper(startX, startY, startZ); Vec3 end = Vec3.createVectorHelper(endX, endY, endZ); - MovingObjectPosition blockHit = worldObj.rayTraceBlocks(start, end); + // Use full raytrace that doesn't stop at liquids and checks all blocks + MovingObjectPosition blockHit = worldObj.func_147447_a(start, end, false, true, false); if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { // Laser stops at block diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 18a0c8503..24ca69ef8 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -298,11 +298,15 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { private void checkBlockCollision() { Vec3 currentPos = Vec3.createVectorHelper(posX, posY, posZ); Vec3 nextPos = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ); - MovingObjectPosition blockHit = worldObj.rayTraceBlocks(currentPos, nextPos); + // Use full raytrace that doesn't stop at liquids and checks all blocks + MovingObjectPosition blockHit = worldObj.func_147447_a(currentPos, nextPos, false, true, false); if (blockHit != null && blockHit.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { hasHit = true; if (explosive) { + posX = blockHit.hitVec.xCoord; + posY = blockHit.hitVec.yCoord; + posZ = blockHit.hitVec.zCoord; doExplosion(); } this.setDead(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 32c5796bd..5c418d640 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -215,9 +215,6 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // Check lifespan using world time (survives chunk unload/reload) if (deathWorldTime > 0 && worldObj.getTotalWorldTime() >= deathWorldTime) { - if (!worldObj.isRemote) { - noppes.npcs.LogWriter.info("[Projectile:" + this.getClass().getSimpleName() + "] DEAD: Lifetime exceeded. worldTime=" + worldObj.getTotalWorldTime() + " deathTime=" + deathWorldTime); - } this.setDead(); return; } @@ -229,9 +226,6 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA } if (hasHit) { - if (!worldObj.isRemote) { - noppes.npcs.LogWriter.info("[Projectile:" + this.getClass().getSimpleName() + "] DEAD: hasHit=true at tick " + ticksExisted); - } this.setDead(); return; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index a4fef92ef..684138891 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -66,6 +66,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi protected int cooldownTicks; protected int windUpTicks; protected int dazedTicks; + protected boolean syncWindupWithAnimation = true; // Sync windup ticks with animation duration // ═══════════════════════════════════════════════════════════════════════════ // CACHED VALUES - Target Tab @@ -282,16 +283,27 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi addLabel(new GuiNpcLabel(7, "ability.timing", col1LabelX, y)); y += 14; + // Check if windup animation is selected (either by name or ID) + boolean hasWindupAnimation = windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty()); + // Row 4: Windup Ticks + Cooldown Ticks addLabel(new GuiNpcLabel(10, "ability.windup", col1LabelX, y + 5)); - GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(windUpTicks)); - windupField.setIntegersOnly(); - windupField.setMinMaxDefault(0, 1000, 20); - addTextField(windupField); - // Sync button - only show if windup animation is selected (either by name or ID) - if (windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty())) { - GuiNpcButton syncBtn = new GuiNpcButton(17, guiLeft + 115, y, 40, 20, "gui.sync"); + // Only show windup textbox if sync is off or no animation selected + if (!syncWindupWithAnimation || !hasWindupAnimation) { + GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(windUpTicks)); + windupField.setIntegersOnly(); + windupField.setMinMaxDefault(0, 1000, 20); + addTextField(windupField); + } else { + // Show calculated value as label when synced + addLabel(new GuiNpcLabel(11, String.valueOf(windUpTicks), col1FieldX + 5, y + 5)); + } + + // Sync toggle button - only show if windup animation is selected + if (hasWindupAnimation) { + String syncLabel = syncWindupWithAnimation ? "ability.syncOn" : "ability.syncOff"; + GuiNpcButton syncBtn = new GuiNpcButton(17, guiLeft + 115, y, 50, 20, syncLabel); syncBtn.setHoverText("ability.hover.sync"); addButton(syncBtn); } @@ -654,8 +666,13 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } else if (id == 16) { lockMovement = LockMovementType.fromOrdinal(((GuiNpcButton) guibutton).getValue()); } else if (id == 17) { - // Sync windup ticks with animation duration - syncWindupWithAnimation(); + // Toggle sync on/off + syncWindupWithAnimation = !syncWindupWithAnimation; + if (syncWindupWithAnimation) { + // Calculate windup ticks from animation when turning sync on + calculateWindupFromAnimation(); + } + initGui(); } // Target tab - Targeting mode @@ -896,6 +913,12 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi ability.setLockMovement(lockMovement); ability.setInterruptible(interruptible); + // If sync is enabled and we have a windup animation, recalculate before saving + boolean hasWindupAnimation = windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty()); + if (syncWindupWithAnimation && hasWindupAnimation) { + calculateWindupFromAnimation(); + } + // Timing ability.setCooldownTicks(cooldownTicks); ability.setWindUpTicks(windUpTicks); @@ -968,9 +991,9 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // ═══════════════════════════════════════════════════════════════════════════ /** - * Syncs windup ticks with the selected windup animation's total duration. + * Calculates windup ticks from the selected windup animation's total duration. */ - private void syncWindupWithAnimation() { + private void calculateWindupFromAnimation() { if (AnimationController.Instance == null) { return; } diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json index eb9516f38..466b9163c 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json @@ -1,5 +1,5 @@ { - "Loop": -1, + "Loop": 0, "Speed": 1.0f, "Frames": [ { @@ -7,87 +7,6 @@ "Comment": "", "Speed": 1.0f, "FrameParts": [ - { - "Pivot2": -5.0f, - "Part": "LEFT_ARM", - "Rotation1": 107.0f, - "Rotation0": -94.0f, - "Pivot0": -5.0f, - "Pivot1": 3.0f, - "Rotation2": -31.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_ARM", - "Rotation1": 88.0f, - "Rotation0": -56.0f, - "Pivot0": 1.0f, - "Pivot1": 0.0f, - "Rotation2": -18.0f - }, - { - "Pivot2": -3.0f, - "Part": "HEAD", - "Rotation1": 12.0f, - "Rotation0": 18.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": -6.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_LEG", - "Rotation1": 56.0f, - "Rotation0": 6.0f, - "Pivot0": -2.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -3.0f, - "Part": "BODY", - "Rotation1": 25.0f, - "Rotation0": 18.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -5.0f, - "Part": "LEFT_LEG", - "Rotation1": -25.0f, - "Rotation0": 12.0f, - "Pivot0": 2.0f, - "Pivot1": 0.0f, - "Rotation2": -6.0f - }, - { - "Pivot2": 0.0f, - "Part": "FULL_MODEL", - "Rotation1": 25.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - } - ], - "Smooth": 0b, - "Duration": 5 - }, - { - "ColorMarker": 16777215, - "Comment": "", - "Speed": 2.0f, - "FrameParts": [ - { - "Pivot2": -5.0f, - "Part": "LEFT_ARM", - "Rotation1": 12.0f, - "Rotation0": -75.0f, - "Pivot0": -2.0f, - "Pivot1": 3.0f, - "Rotation2": 50.0f - }, { "Pivot2": -5.0f, "Part": "RIGHT_ARM", @@ -97,6 +16,33 @@ "Pivot1": 2.0f, "Rotation2": 50.0f }, + { + "Pivot2": -6.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": -3.0f, "Part": "HEAD", @@ -115,42 +61,6 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, - { - "Pivot2": -3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -6.0f, - "Part": "LEFT_LEG", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": -6.0f - }, - { - "Pivot2": 0.0f, - "Part": "FULL_MODEL", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - } - ], - "Smooth": 0b, - "Duration": 5 - }, - { - "ColorMarker": 16777215, - "Comment": "", - "Speed": 0.75f, - "FrameParts": [ { "Pivot2": -5.0f, "Part": "LEFT_ARM", @@ -159,64 +69,10 @@ "Pivot0": -2.0f, "Pivot1": 3.0f, "Rotation2": 50.0f - }, - { - "Pivot2": -5.0f, - "Part": "RIGHT_ARM", - "Rotation1": -18.0f, - "Rotation0": -107.0f, - "Pivot0": -1.0f, - "Pivot1": 2.0f, - "Rotation2": 50.0f - }, - { - "Pivot2": -3.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -4.0f, - "Part": "RIGHT_LEG", - "Rotation1": 56.0f, - "Rotation0": 18.0f, - "Pivot0": -4.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -6.0f, - "Part": "LEFT_LEG", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": -6.0f - }, - { - "Pivot2": 0.0f, - "Part": "FULL_MODEL", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f } ], "Smooth": 0b, - "Duration": 20 + "Duration": 30 } ], "CurrentFrameTime": 0, diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json index 6c53e1eab..62e54167a 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Windup.json @@ -7,33 +7,6 @@ "Comment": "", "Speed": 0.5f, "FrameParts": [ - { - "Pivot2": -5.0f, - "Part": "LEFT_ARM", - "Rotation1": 94.0f, - "Rotation0": -94.0f, - "Pivot0": -4.0f, - "Pivot1": 3.0f, - "Rotation2": -31.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_ARM", - "Rotation1": 75.0f, - "Rotation0": -56.0f, - "Pivot0": 1.0f, - "Pivot1": 0.0f, - "Rotation2": -18.0f - }, - { - "Pivot2": -3.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 18.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": -6.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -54,11 +27,20 @@ }, { "Pivot2": -5.0f, - "Part": "LEFT_LEG", - "Rotation1": -25.0f, - "Rotation0": 12.0f, - "Pivot0": 2.0f, - "Pivot1": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 94.0f, + "Rotation0": -94.0f, + "Pivot0": -4.0f, + "Pivot1": 3.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, "Rotation2": -6.0f }, { @@ -69,6 +51,24 @@ "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 75.0f, + "Rotation0": -56.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f } ], "Smooth": 0b, @@ -77,35 +77,8 @@ { "ColorMarker": 16777215, "Comment": "", - "Speed": 0.5f, + "Speed": 0.25f, "FrameParts": [ - { - "Pivot2": -5.0f, - "Part": "LEFT_ARM", - "Rotation1": 107.0f, - "Rotation0": -94.0f, - "Pivot0": -5.0f, - "Pivot1": 3.0f, - "Rotation2": -31.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_ARM", - "Rotation1": 88.0f, - "Rotation0": -56.0f, - "Pivot0": 1.0f, - "Pivot1": 0.0f, - "Rotation2": -18.0f - }, - { - "Pivot2": -3.0f, - "Part": "HEAD", - "Rotation1": 12.0f, - "Rotation0": 18.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": -6.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -126,11 +99,20 @@ }, { "Pivot2": -5.0f, - "Part": "LEFT_LEG", - "Rotation1": -25.0f, - "Rotation0": 12.0f, - "Pivot0": 2.0f, - "Pivot1": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 107.0f, + "Rotation0": -94.0f, + "Pivot0": -5.0f, + "Pivot1": 3.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 12.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, "Rotation2": -6.0f }, { @@ -141,14 +123,104 @@ "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 88.0f, + "Rotation0": -56.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f } ], "Smooth": 0b, - "Duration": 35 + "Duration": 30 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -4.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 18.0f, + "Pivot0": -4.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": 12.0f, + "Rotation0": -75.0f, + "Pivot0": -2.0f, + "Pivot1": 3.0f, + "Rotation2": 50.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": -18.0f, + "Rotation0": -107.0f, + "Pivot0": -1.0f, + "Pivot1": 2.0f, + "Rotation2": 50.0f + } + ], + "Smooth": 0b, + "Duration": 5 } ], "CurrentFrameTime": 0, - "CurrentFrame": 0, + "CurrentFrame": 1, "Smooth": 0b, "ID": 1, "WhileAttacking": 1b, diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index de60eda25..50c150624 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1519,6 +1519,8 @@ ability.maxRange=Max Range ability.timing=Timing (ticks) ability.cooldown=Cooldown ability.windup=Wind Up +ability.syncOn=Sync: On +ability.syncOff=Sync: Off ability.dazed=Dazed Ticks ability.interruptible=Interruptible ability.threshold=Threshold From 216a3dbbf8f088f1075c33f42c2764b322c6b431 Mon Sep 17 00:00:00 2001 From: Vidal Date: Wed, 28 Jan 2026 20:49:16 -0300 Subject: [PATCH 27/85] Added alpha to all abilities except beam --- .../client/renderer/RenderAbilityDisc.java | 2 +- .../data/ability/type/AbilityDisc.java | 7 +++- .../data/ability/type/AbilityEnergyBeam.java | 7 +++- .../data/ability/type/AbilityLaserShot.java | 7 +++- .../data/ability/type/AbilityOrb.java | 13 +++++- .../npcs/entity/EntityAbilityBeam.java | 16 ++++---- .../npcs/entity/EntityAbilityDisc.java | 12 +++--- .../npcs/entity/EntityAbilityLaser.java | 8 ++-- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 12 +++--- .../npcs/entity/EntityAbilityProjectile.java | 14 +++++-- .../advanced/ability/SubGuiAbilityDisc.java | 40 ++++++++++++------- .../ability/SubGuiAbilityEnergyBeam.java | 31 +++++++++----- .../ability/SubGuiAbilityLaserShot.java | 27 ++++++++----- .../advanced/ability/SubGuiAbilityOrb.java | 39 +++++++++++------- 14 files changed, 154 insertions(+), 81 deletions(-) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java index fdd80689a..20486d70e 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java @@ -54,7 +54,7 @@ public class RenderAbilityDisc extends RenderAbilityProjectile { if (disc.isOuterColorEnabled()) { float outerScale = innerScale + disc.getOuterColorWidth(); GL11.glDepthMask(false); - renderFlatSquare(disc.getOuterColor(), 0.5f, radius * outerScale, thickness); + renderFlatSquare(disc.getOuterColor(), disc.getOuterColorAlpha(), radius * outerScale, thickness); GL11.glDepthMask(true); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 72b97839d..e783b3a42 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -62,6 +62,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { private int innerColor = 0xFFFFFF; private int outerColor = 0xFF8800; private float outerColorWidth = 0.4f; // Additive offset from inner size + private float outerColorAlpha = 0.5f; // Additive offset from inner size private boolean outerColorEnabled = true; private float rotationSpeed = 5.0f; @@ -135,7 +136,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { // Create disc in charging mode - follows NPC based on anchor point during windup discEntity = EntityAbilityDisc.createCharging( world, npc, target, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, boomerang, boomerangDelay, @@ -224,6 +225,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { nbt.setInteger("innerColor", innerColor); nbt.setInteger("outerColor", outerColor); nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setFloat("outerColorAlpha", outerColorAlpha); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); nbt.setBoolean("lightningEffect", lightningEffect); @@ -256,6 +258,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF8800; this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; + this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 5.0f; this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); @@ -309,6 +312,8 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public void setOuterColor(int outerColor) { this.outerColor = outerColor; } public float getOuterColorWidth() { return outerColorWidth; } public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } public boolean isOuterColorEnabled() { return outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } public float getRotationSpeed() { return rotationSpeed; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index d4620c2bb..7a81da548 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -60,6 +60,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { private int innerColor = 0xFFFFFF; private int outerColor = 0x00AAFF; private float outerColorWidth = 0.4f; // Additive offset from inner size + private float outerColorAlpha = 0.5f; private boolean outerColorEnabled = true; private float rotationSpeed = 6.0f; @@ -138,7 +139,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { // Create beam in charging mode - follows NPC based on anchor point during windup beamEntity = EntityAbilityBeam.createCharging( world, npc, target, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, @@ -226,6 +227,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { nbt.setInteger("innerColor", innerColor); nbt.setInteger("outerColor", outerColor); nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setFloat("outerColorAlpha", outerColorAlpha); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); nbt.setBoolean("lightningEffect", lightningEffect); @@ -256,6 +258,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x00AAFF; this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; + this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 6.0f; this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); @@ -305,6 +308,8 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public void setOuterColor(int outerColor) { this.outerColor = outerColor; } public float getOuterColorWidth() { return outerColorWidth; } public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } public boolean isOuterColorEnabled() { return outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } public float getRotationSpeed() { return rotationSpeed; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index eeeebfa74..7ead64c8e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -49,6 +49,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { private int innerColor = 0xFFFFFF; private int outerColor = 0xFF0000; private float outerColorWidth = 0.4f; // Additive offset from inner width + private float outerColorAlpha = 0.5f; private boolean outerColorEnabled = true; // Lightning effect properties @@ -117,7 +118,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { laserEntity = new EntityAbilityLaser( world, npc, target, spawnX, spawnY, spawnZ, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, damage, knockback, knockbackUp, expansionSpeed, lingerTicks, explosive, explosionRadius, explosionDamageFalloff, @@ -177,6 +178,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { nbt.setInteger("innerColor", innerColor); nbt.setInteger("outerColor", outerColor); nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setFloat("outerColorAlpha", outerColorAlpha); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setBoolean("lightningEffect", lightningEffect); nbt.setFloat("lightningDensity", lightningDensity); @@ -202,6 +204,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; + this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; @@ -243,6 +246,8 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { public void setOuterColor(int outerColor) { this.outerColor = outerColor; } public float getOuterColorWidth() { return outerColorWidth; } public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } public boolean isOuterColorEnabled() { return outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } public boolean hasLightningEffect() { return lightningEffect; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index badd4aec8..4ccbdcf12 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -58,6 +58,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { private int innerColor = 0xFFFFFF; // White core private int outerColor = 0x8888FF; // Light blue glow private float outerColorWidth = 0.4f; // Additive offset from inner size + private float outerColorAlpha = 0.5f; private boolean outerColorEnabled = true; // Whether to render outer glow private float rotationSpeed = 4.0f; // Degrees per tick @@ -134,7 +135,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { // Create orb in charging mode - follows NPC based on anchor point during windup orbEntity = EntityAbilityOrb.createCharging( world, npc, target, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, orbSpeed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, @@ -220,6 +221,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { nbt.setInteger("innerColor", innerColor); nbt.setInteger("outerColor", outerColor); nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setFloat("outerColorAlpha", outerColorAlpha); nbt.setBoolean("outerColorEnabled", outerColorEnabled); nbt.setFloat("rotationSpeed", rotationSpeed); nbt.setBoolean("lightningEffect", lightningEffect); @@ -250,6 +252,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x8888FF; this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; + this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 4.0f; this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); @@ -412,6 +415,14 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { + return outerColorAlpha; + } + + public void setOuterColorAlpha(float outerColorAlpha) { + this.outerColorAlpha = outerColorAlpha; + } + public boolean isOuterColorEnabled() { return outerColorEnabled; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 60f7fd656..2e5926e67 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -104,14 +104,14 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { this(world, owner, target, x, y, z, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, @@ -124,7 +124,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -132,7 +132,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { float maxDistance, int maxLifetime, boolean lightningEffect, float lightningDensity, float lightningRadius) { this(world, owner, target, x, y, z, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, @@ -148,7 +148,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -160,7 +160,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { // Initialize base properties with lightning initProjectile(owner, target, x, y, z, - headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, @@ -221,7 +221,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { */ public static EntityAbilityBeam createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -239,7 +239,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { EntityAbilityBeam beam = new EntityAbilityBeam( world, owner, target, spawnX, spawnY, spawnZ, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index 0c5b10ccb..f63014158 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -82,7 +82,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean boomerang, int boomerangDelay, @@ -90,7 +90,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { this(world, owner, target, x, y, z, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, boomerang, boomerangDelay, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, @@ -103,7 +103,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean boomerang, int boomerangDelay, @@ -115,7 +115,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Initialize base properties with lightning (use discRadius as size for base) initProjectile(owner, target, x, y, z, - discRadius, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + discRadius, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, @@ -161,7 +161,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { */ public static EntityAbilityDisc createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean boomerang, int boomerangDelay, @@ -179,7 +179,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { EntityAbilityDisc disc = new EntityAbilityDisc( world, owner, target, spawnX, spawnY, spawnZ, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, boomerang, boomerangDelay, explosive, explosionRadius, explosionDamageFalloff, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 256a4faf7..7a1f97d0f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -50,14 +50,14 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float laserWidth, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float damage, float knockback, float knockbackUp, float expansionSpeed, int lingerTicks, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { this(world, owner, target, x, y, z, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, damage, knockback, knockbackUp, expansionSpeed, lingerTicks, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, @@ -70,7 +70,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float laserWidth, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float damage, float knockback, float knockbackUp, float expansionSpeed, int lingerTicks, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -81,7 +81,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Initialize base properties with lightning initProjectile(owner, target, x, y, z, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, 0.0f, // No rotation for laser + laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, 0.0f, // No rotation for laser damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 24ca69ef8..04e59a240 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -71,14 +71,14 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { this(world, owner, target, x, y, z, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, @@ -93,7 +93,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -104,7 +104,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { // Initialize base properties with lightning initProjectile(owner, target, x, y, z, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorAlpha, outerColorWidth, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, @@ -145,7 +145,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { */ public static EntityAbilityOrb createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, float speed, boolean homing, float homingStrength, float homingRange, boolean explosive, float explosionRadius, float explosionDamageFalloff, @@ -162,7 +162,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { EntityAbilityOrb orb = new EntityAbilityOrb( world, owner, target, spawnX, spawnY, spawnZ, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 5c418d640..4b0f1e6a5 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -31,6 +31,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected int outerColor = 0x8888FF; protected boolean outerColorEnabled = true; protected float outerColorWidth = 0.4f; // Additive offset from inner size + protected float outerColorAlpha = 0.5f; protected float rotationSpeed = 4.0f; // ==================== COMBAT PROPERTIES ==================== @@ -98,13 +99,13 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float size, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, float maxDistance, int maxLifetime) { initProjectile(owner, target, x, y, z, - size, innerColor, outerColor, outerColorEnabled, outerColorWidth, rotationSpeed, + size, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, damage, knockback, knockbackUp, explosive, explosionRadius, explosionDamageFalloff, stunDuration, slowDuration, slowLevel, @@ -118,7 +119,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, float size, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, float damage, float knockback, float knockbackUp, boolean explosive, float explosionRadius, float explosionDamageFalloff, int stunDuration, int slowDuration, int slowLevel, @@ -138,6 +139,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.outerColor = outerColor; this.outerColorEnabled = outerColorEnabled; this.outerColorWidth = outerColorWidth; + this.outerColorAlpha = outerColorAlpha; this.rotationSpeed = rotationSpeed; // Combat @@ -428,6 +430,10 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA return outerColorWidth; } + public float getOuterColorAlpha() { + return outerColorAlpha; + } + public float getRotationSpeed() { return rotationSpeed; } @@ -501,6 +507,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.innerColor = nbt.getInteger("InnerColor"); this.outerColor = nbt.getInteger("OuterColor"); this.outerColorEnabled = !nbt.hasKey("OuterColorEnabled") || nbt.getBoolean("OuterColorEnabled"); + this.outerColorAlpha = nbt.hasKey("OuterColorAlpha") ? nbt.getFloat("OuterColorAlpha") : 0.5f; this.outerColorWidth = nbt.hasKey("OuterColorWidth") ? nbt.getFloat("OuterColorWidth") : 0.4f; this.rotationSpeed = nbt.hasKey("RotationSpeed") ? nbt.getFloat("RotationSpeed") : 4.0f; @@ -552,6 +559,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA nbt.setInteger("OuterColor", outerColor); nbt.setBoolean("OuterColorEnabled", outerColorEnabled); nbt.setFloat("OuterColorWidth", outerColorWidth); + nbt.setFloat("OuterColorAlpha", outerColorAlpha); nbt.setFloat("RotationSpeed", rotationSpeed); nbt.setFloat("Damage", damage); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 00383853f..5faf662b0 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -155,15 +155,24 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { y += 24; - // Row 3: Rotation Speed - addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); - addTextField(createFloatField(204, fieldX, y, 50, disc.getRotationSpeed())); + // Row 3: Outer Color Alpha + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, disc.getOuterColorAlpha()); + alphaField.setEnabled(disc.isOuterColorEnabled()); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); y += 24; - // Row 4: Lightning Effect Enabled - addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0); + // Row 4: Rotation Speed + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", labelX, y + 5)); + addTextField(createFloatField(205, fieldX, y, 50, disc.getRotationSpeed())); + + y += 24; + + // Row 5: Lightning Effect Enabled + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0); lightningBtn.setHoverText("ability.hover.lightning"); addButton(lightningBtn); @@ -171,14 +180,14 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { if (disc.hasLightningEffect()) { y += 24; - // Row 5: Density + Radius - addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(disc.getLightningDensity())); + // Row 6: Density + Radius + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(disc.getLightningDensity())); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); - addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(disc.getLightningRadius())); + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(disc.getLightningRadius())); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -222,7 +231,7 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { disc.setOuterColorEnabled(value == 1); initGui(); break; - case 205: + case 206: disc.setLightningEffect(value == 1); initGui(); break; @@ -298,12 +307,15 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { disc.setOuterColorWidth(parseFloat(field, disc.getOuterColorWidth())); break; case 204: + disc.setOuterColorAlpha(parseFloat(field, disc.getOuterColorAlpha())); + break; + case 205: disc.setRotationSpeed(parseFloat(field, disc.getRotationSpeed())); break; - case 206: + case 207: disc.setLightningDensity(parseFloat(field, disc.getLightningDensity())); break; - case 207: + case 208: disc.setLightningRadius(parseFloat(field, disc.getLightningRadius())); break; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index d878c9381..49ab42e5d 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -152,14 +152,20 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { y += 24; // Row 3: Rotation Speed - addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", labelX, y + 5)); - addTextField(createFloatField(204, fieldX, y, 50, beam.getRotationSpeed())); + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, beam.getOuterColorAlpha()); + alphaField.setEnabled(beam.isOuterColorEnabled()); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(205, col2FieldX, y, 50, beam.getRotationSpeed())); y += 24; // Row 4: Lightning Effect Enabled (only affects head) - addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0); + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0); lightningBtn.setHoverText("ability.hover.lightning"); addButton(lightningBtn); @@ -168,13 +174,13 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { y += 24; // Row 5: Density + Radius - addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(beam.getLightningDensity())); + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(beam.getLightningDensity())); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); - addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(beam.getLightningRadius())); + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(beam.getLightningRadius())); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -214,7 +220,7 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { beam.setOuterColorEnabled(value == 1); initGui(); break; - case 205: + case 206: beam.setLightningEffect(value == 1); initGui(); break; @@ -290,12 +296,15 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { beam.setOuterColorWidth(parseFloat(field, beam.getOuterColorWidth())); break; case 204: + beam.setOuterColorAlpha(parseFloat(field, beam.getOuterColorAlpha())); + break; + case 205: beam.setRotationSpeed(parseFloat(field, beam.getRotationSpeed())); break; - case 206: + case 207: beam.setLightningDensity(parseFloat(field, beam.getLightningDensity())); break; - case 207: + case 208: beam.setLightningRadius(parseFloat(field, beam.getLightningRadius())); break; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index 50e8fa92c..e5184a3bb 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -127,8 +127,14 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { y += 24; // Row 3: Lightning Effect Enabled - addLabel(new GuiNpcLabel(204, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(204, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0); + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, laser.getOuterColorAlpha()); + alphaField.setEnabled(laser.isOuterColorEnabled()); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + + addLabel(new GuiNpcLabel(205, "ability.lightning", col2LabelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(205, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0); lightningBtn.setHoverText("ability.hover.lightning"); addButton(lightningBtn); @@ -137,13 +143,13 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { y += 24; // Row 4: Density + Radius - addLabel(new GuiNpcLabel(205, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(205, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(laser.getLightningDensity())); + addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(laser.getLightningDensity())); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); - addLabel(new GuiNpcLabel(206, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(206, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(laser.getLightningRadius())); + addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(laser.getLightningRadius())); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -179,7 +185,7 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { laser.setOuterColorEnabled(value == 1); initGui(); break; - case 204: + case 205: laser.setLightningEffect(value == 1); initGui(); break; @@ -215,10 +221,13 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { case 203: laser.setOuterColorWidth(parseFloat(field, laser.getOuterColorWidth())); break; - case 205: - laser.setLightningDensity(parseFloat(field, laser.getLightningDensity())); + case 204: + laser.setOuterColorAlpha(parseFloat(field, laser.getOuterColorAlpha())); break; case 206: + laser.setLightningDensity(parseFloat(field, laser.getLightningDensity())); + break; + case 207: laser.setLightningRadius(parseFloat(field, laser.getLightningRadius())); break; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 40cff112f..7cc0f9f2f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -119,20 +119,26 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { innerColorBtn.setTextColor(orb.getInnerColor() & 0xFFFFFF); addButton(innerColorBtn); - addLabel(new GuiNpcLabel(204, "ability.rotationSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(204, col2FieldX, y, 55, orb.getRotationSpeed())); + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(205, col2FieldX, y, 55, orb.getRotationSpeed())); y += 24; - // Row 2: Outer Glow Enabled + // Row 3: Outer Glow Enabled addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isOuterColorEnabled() ? 1 : 0)); // Only show Outer Color and Width if Outer Glow is enabled if (orb.isOuterColorEnabled()) { + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", col2LabelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, col2FieldX, y, 55, orb.getOuterColorAlpha()); + alphaField.setEnabled(orb.isOuterColorEnabled()); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + y += 24; - // Row 3: Outer Color + Outer Width + // Row 4: Outer Color + Outer Width addLabel(new GuiNpcLabel(201, "ability.outerColor", labelX, y + 5)); String outerHex = String.format("%06X", orb.getOuterColor() & 0xFFFFFF); GuiNpcButton outerColorBtn = new GuiNpcButton(201, fieldX, y, 55, 20, outerHex); @@ -145,9 +151,9 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { y += 24; - // Row 4: Lightning Effect Enabled - addLabel(new GuiNpcLabel(205, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(205, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0); + // Row 5: Lightning Effect Enabled + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0); lightningBtn.setHoverText("ability.hover.lightning"); addButton(lightningBtn); @@ -155,14 +161,14 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { if (orb.hasLightningEffect()) { y += 24; - // Row 5: Density + Radius - addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(orb.getLightningDensity())); + // Row 61: Density + Radius + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(orb.getLightningDensity())); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); - addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(orb.getLightningRadius())); + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(orb.getLightningRadius())); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -202,7 +208,7 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { orb.setOuterColorEnabled(value == 1); initGui(); break; - case 205: + case 206: orb.setLightningEffect(value == 1); initGui(); break; @@ -272,12 +278,15 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { orb.setOuterColorWidth(parseFloat(field, orb.getOuterColorWidth())); break; case 204: + orb.setOuterColorAlpha(parseFloat(field, orb.getOuterColorAlpha())); + break; + case 205: orb.setRotationSpeed(parseFloat(field, orb.getRotationSpeed())); break; - case 206: + case 207: orb.setLightningDensity(parseFloat(field, orb.getLightningDensity())); break; - case 207: + case 208: orb.setLightningRadius(parseFloat(field, orb.getLightningRadius())); break; } From 55658a795651cc5e767c346e58f918e7b19ffa7a Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 28 Jan 2026 20:43:32 -0500 Subject: [PATCH 28/85] Ability Preview GUI --- .../renderer/RenderAbilityProjectile.java | 5 + .../client/renderer/RenderAbilitySweeper.java | 4 + .../client/renderer/TelegraphRenderer.java | 79 ++++ .../controllers/data/ability/Ability.java | 89 ++++ .../data/ability/type/AbilityCharge.java | 63 +++ .../data/ability/type/AbilityDash.java | 63 +++ .../data/ability/type/AbilityDisc.java | 19 + .../data/ability/type/AbilityEnergyBeam.java | 19 + .../data/ability/type/AbilityLaserShot.java | 25 ++ .../data/ability/type/AbilityOrb.java | 19 + .../data/ability/type/AbilitySlam.java | 94 +++++ .../npcs/entity/EntityAbilityBeam.java | 138 +++++++ .../npcs/entity/EntityAbilityDisc.java | 108 +++++ .../npcs/entity/EntityAbilityLaser.java | 52 +++ .../kamkeel/npcs/entity/EntityAbilityOrb.java | 109 +++++ .../npcs/entity/EntityAbilityProjectile.java | 76 +++- .../kamkeel/npcs/network/PacketHandler.java | 8 + .../npcs/network/enums/EnumRequestPacket.java | 4 + .../ability/SavedAbilitiesGetPacket.java | 51 +++ .../ability/SavedAbilityGetPacket.java | 68 +++ .../ability/SavedAbilityRemovePacket.java | 69 ++++ .../ability/SavedAbilitySavePacket.java | 76 ++++ .../noppes/npcs/CustomNpcsPermissions.java | 1 + .../java/noppes/npcs/NoppesUtilServer.java | 12 + .../java/noppes/npcs/client/ClientProxy.java | 15 + .../client/gui/advanced/GuiNPCAbilities.java | 7 + .../advanced/SubGuiAbilityDeleteConfirm.java | 22 +- .../gui/advanced/SubGuiAbilityLoad.java | 111 +++-- .../advanced/SubGuiAbilitySaveConfirm.java | 32 +- .../gui/global/GuiNpcManageAbilities.java | 342 +++++++++++---- .../gui/mainmenu/GuiNPCGlobalMainMenu.java | 11 +- .../gui/util/AbilityPreviewExecutor.java | 368 +++++++++++++++++ .../client/gui/util/GuiAbilityInterface.java | 391 ++++++++++++++++++ .../client/gui/util/GuiModelInterface2.java | 4 +- .../noppes/npcs/constants/EnumScrollData.java | 1 + .../assets/customnpcs/lang/en_US.lang | 3 +- .../assets/customnpcs/textures/gui/icons.png | Bin 5249 -> 11934 bytes 37 files changed, 2396 insertions(+), 162 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java create mode 100644 src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java create mode 100644 src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java index 4180783bf..cce9bbe58 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java @@ -2,6 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; @@ -26,6 +27,7 @@ public abstract class RenderAbilityProjectile extends Render { /** * Setup GL state for translucent, self-illuminated rendering. + * Forces full brightness so world lighting does not affect projectiles. */ protected void setupRenderState() { GL11.glPushMatrix(); @@ -37,6 +39,9 @@ public abstract class RenderAbilityProjectile extends Render { GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_TEXTURE_2D); + + // Force full brightness - prevents world lighting from darkening projectiles + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f); } /** diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java index 0a24f1773..10705d762 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java @@ -3,6 +3,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.entity.EntityAbilitySweeper; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; @@ -52,6 +53,9 @@ public class RenderAbilitySweeper extends Render { GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); + + // Force full brightness - prevents world lighting from darkening sweeper + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f); } private void restoreRenderState() { diff --git a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java index 5f4e815b7..3b5e49e2d 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java +++ b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java @@ -257,4 +257,83 @@ public class TelegraphRenderer { tessellator.draw(); } + + // ==================== GUI PREVIEW RENDERING ==================== + + /** + * Render a telegraph in GUI space for ability preview. + * This is used by the Manage Abilities GUI to show telegraph shapes. + * + * @param instance The telegraph instance to render + * @param centerX X center position in GUI space + * @param centerY Y center position in GUI space + * @param centerZ Z center position in GUI space + * @param scale Scale factor for the telegraph + * @param partialTicks Partial ticks for interpolation + */ + public void renderTelegraphInGUI(TelegraphInstance instance, + double centerX, double centerY, double centerZ, + float scale, float partialTicks) { + if (instance == null) return; + + Telegraph telegraph = instance.getTelegraph(); + if (telegraph == null || telegraph.getType() == TelegraphType.NONE) { + return; + } + + // Get animated color + int color = instance.getAnimatedColor(partialTicks); + float alpha = ((color >> 24) & 0xFF) / 255.0f; + float red = ((color >> 16) & 0xFF) / 255.0f; + float green = ((color >> 8) & 0xFF) / 255.0f; + float blue = (color & 0xFF) / 255.0f; + + // Setup GL state + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + + GL11.glTranslated(centerX, centerY, centerZ); + GL11.glScalef(scale, scale, scale); + + // Rotate for directional shapes + GL11.glRotatef(-instance.getInterpolatedYaw(partialTicks), 0, 1, 0); + + // Render based on type + switch (telegraph.getType()) { + case CIRCLE: + renderCircle(telegraph.getRadius(), red, green, blue, alpha); + break; + case RING: + renderRing(telegraph.getRadius(), telegraph.getInnerRadius(), red, green, blue, alpha); + break; + case LINE: + renderLine(telegraph.getLength(), telegraph.getWidth(), red, green, blue, alpha); + break; + case CONE: + renderCone(telegraph.getLength(), telegraph.getAngle(), red, green, blue, alpha); + break; + case POINT: + renderPoint(red, green, blue, alpha); + break; + default: + break; + } + + // Restore GL state + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 08eed148b..eb59edf7c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -26,6 +26,8 @@ import noppes.npcs.scripted.event.AbilityEvent; import java.util.ArrayList; import java.util.List; +import net.minecraft.entity.Entity; + public abstract class Ability implements IAbility { // ═══════════════════════════════════════════════════════════════════ @@ -636,6 +638,93 @@ public abstract class Ability implements IAbility { // Override in subclasses to clean up spawned entities, etc. } + // ═══════════════════════════════════════════════════════════════════ + // CLIENT-SIDE PREVIEW METHODS + // ═══════════════════════════════════════════════════════════════════ + + /** + * Get total active phase duration for preview (in ticks). + * Override in subclasses to provide accurate preview duration. + * + * @return Duration of active phase in ticks (default: 40 = 2 seconds) + */ + public int getPreviewActiveDuration() { + return 40; + } + + /** + * Called during preview windup tick (client-side only). + * Override for visual updates during windup preview. + * Do NOT apply damage or world effects here. + * + * @param npc The preview NPC + * @param tick Current tick within windup phase + */ + @SideOnly(Side.CLIENT) + public void onPreviewWindUpTick(EntityNPCInterface npc, int tick) { + // Default: no-op. Override in subclasses for visual effects. + } + + /** + * Called during preview active tick (client-side only). + * Override for visual updates during active preview. + * Do NOT apply damage or world effects here. + * + * @param npc The preview NPC + * @param tick Current tick within active phase + */ + @SideOnly(Side.CLIENT) + public void onPreviewActiveTick(EntityNPCInterface npc, int tick) { + // Default: no-op. Override in subclasses for visual effects. + } + + /** + * Create a preview entity for GUI display (client-side only). + * The entity should be in preview mode and not apply damage. + * Override in abilities that spawn entities (Beam, Orb, Disc, etc.) + * + * @param npc The preview NPC + * @return Preview entity, or null if ability doesn't spawn entities + */ + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + return null; // Override in entity-spawning abilities + } + + /** + * Whether to spawn preview entity during WINDUP phase (true) or ACTIVE phase (false). + * Most abilities (Orb, Beam, Disc) spawn during windup for charging effect. + * Laser spawns at active phase since it has no charging state. + */ + public boolean spawnPreviewDuringWindup() { + return true; // Default: spawn during windup for charging + } + + // ── Preview target (set by executor for abilities that need targeting) ── + + protected transient EntityLivingBase previewTarget; + + /** + * Set the fake target entity for preview mode. + * Called by AbilityPreviewExecutor before starting preview. + */ + public void setPreviewTarget(EntityLivingBase target) { + this.previewTarget = target; + } + + public EntityLivingBase getPreviewTarget() { + return previewTarget; + } + + /** + * Called once when transitioning from WINDUP to ACTIVE in preview mode. + * Override in movement-based abilities to initiate movement. + */ + @SideOnly(Side.CLIENT) + public void onPreviewExecute(EntityNPCInterface npc) { + // Default: no-op. Override in movement abilities. + } + // ═══════════════════════════════════════════════════════════════════ // CONDITION CHECKING // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 1f6f31250..25941e0a5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -288,6 +288,69 @@ public class AbilityCharge extends Ability implements IAbilityCharge { return instance; } + // ==================== PREVIEW MODE ==================== + + private transient double previewDirX, previewDirZ; + private transient double previewStartX, previewStartZ; + private transient boolean previewCharging = false; + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewExecute(EntityNPCInterface npc) { + previewStartX = npc.posX; + previewStartZ = npc.posZ; + previewCharging = false; + + // Calculate direction toward fake target + if (previewTarget != null) { + double dx = previewTarget.posX - npc.posX; + double dz = previewTarget.posZ - npc.posZ; + double len = Math.sqrt(dx * dx + dz * dz); + if (len > 0) { + previewDirX = dx / len; + previewDirZ = dz / len; + } else { + float yaw = (float) Math.toRadians(npc.rotationYaw); + previewDirX = -Math.sin(yaw); + previewDirZ = Math.cos(yaw); + } + } else { + float yaw = (float) Math.toRadians(npc.rotationYaw); + previewDirX = -Math.sin(yaw); + previewDirZ = Math.cos(yaw); + } + previewCharging = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewActiveTick(EntityNPCInterface npc, int tick) { + if (!previewCharging) return; + + // Check distance traveled + double distTraveled = Math.sqrt( + Math.pow(npc.posX - previewStartX, 2) + + Math.pow(npc.posZ - previewStartZ, 2) + ); + + if (distTraveled >= maxRange) { + previewCharging = false; + return; + } + + npc.prevPosX = npc.posX; + npc.prevPosY = npc.posY; + npc.prevPosZ = npc.posZ; + + npc.posX += previewDirX * chargeSpeed; + npc.posZ += previewDirZ * chargeSpeed; + } + + @Override + public int getPreviewActiveDuration() { + return (int) Math.ceil(maxRange / chargeSpeed) + 5; + } + @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("chargeSpeed", chargeSpeed); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 2c03de4c2..054176a7b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -224,6 +224,69 @@ public class AbilityDash extends Ability implements IAbilityDash { return !npc.worldObj.getCollidingBoundingBoxes(npc, npc.boundingBox.copy().offset(nextX, 0, nextZ)).isEmpty(); } + // ==================== PREVIEW MODE ==================== + + private transient double previewDirX, previewDirZ; + private transient double previewStartX, previewStartZ; + private transient boolean previewDashing = false; + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewExecute(EntityNPCInterface npc) { + previewStartX = npc.posX; + previewStartZ = npc.posZ; + previewDashing = false; + + // Pick a random direction based on mode + DashDirection[] directions = dashMode == DashMode.AGGRESSIVE + ? AGGRESSIVE_DIRECTIONS + : DEFENSIVE_DIRECTIONS; + DashDirection dir = directions[RANDOM.nextInt(directions.length)]; + + float baseYaw; + if (previewTarget != null) { + double dx = previewTarget.posX - npc.posX; + double dz = previewTarget.posZ - npc.posZ; + baseYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); + } else { + baseYaw = npc.rotationYaw; + } + + float dashYaw = baseYaw + dir.getAngleOffset(); + float yawRad = (float) Math.toRadians(dashYaw); + previewDirX = -Math.sin(yawRad); + previewDirZ = Math.cos(yawRad); + previewDashing = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewActiveTick(EntityNPCInterface npc, int tick) { + if (!previewDashing) return; + + double distTraveled = Math.sqrt( + Math.pow(npc.posX - previewStartX, 2) + + Math.pow(npc.posZ - previewStartZ, 2) + ); + + if (distTraveled >= dashDistance) { + previewDashing = false; + return; + } + + npc.prevPosX = npc.posX; + npc.prevPosY = npc.posY; + npc.prevPosZ = npc.posZ; + + npc.posX += previewDirX * dashSpeed; + npc.posZ += previewDirZ * dashSpeed; + } + + @Override + public int getPreviewActiveDuration() { + return (int) Math.ceil(dashDistance / dashSpeed) + 5; + } + @Override public float getTelegraphRadius() { return 0; // No telegraph for dash diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index e783b3a42..e5c15e010 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -332,4 +332,23 @@ public class AbilityDisc extends Ability implements IAbilityDisc { @Override public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + return EntityAbilityDisc.createPreview( + npc.worldObj, npc, + discRadius, discThickness, innerColor, outerColor, + outerColorEnabled, outerColorWidth, rotationSpeed, + lightningEffect, lightningDensity, lightningRadius, + anchorPoint, windUpTicks + ); + } + + @Override + public int getPreviewActiveDuration() { + return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 7a81da548..c2b452339 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -329,4 +329,23 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { @Override public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + return EntityAbilityBeam.createPreview( + npc.worldObj, npc, + beamWidth, headSize, innerColor, outerColor, + outerColorEnabled, outerColorWidth, rotationSpeed, + lightningEffect, lightningDensity, lightningRadius, + anchorPoint, windUpTicks, 1.0f + ); + } + + @Override + public int getPreviewActiveDuration() { + return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 7ead64c8e..c1a94e657 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -7,6 +7,7 @@ import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityLaser; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -256,4 +257,28 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + return EntityAbilityLaser.createPreview( + npc.worldObj, npc, + laserWidth, innerColor, outerColor, + outerColorEnabled, outerColorWidth, + expansionSpeed, maxDistance, + lightningEffect, lightningDensity, lightningRadius + ); + } + + @Override + public int getPreviewActiveDuration() { + return maxLifetime > 0 ? Math.min(maxLifetime, 60) : 60; + } + + @Override + public boolean spawnPreviewDuringWindup() { + return false; // Laser has no charging, spawns at active phase + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 4ccbdcf12..13c57478a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -487,4 +487,23 @@ public class AbilityOrb extends Ability implements IAbilityOrb { public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + return EntityAbilityOrb.createPreview( + npc.worldObj, npc, + orbSize, innerColor, outerColor, + outerColorEnabled, outerColorWidth, rotationSpeed, + lightningEffect, lightningDensity, lightningRadius, lightningFadeTime, + anchorPoint, windUpTicks + ); + } + + @Override + public int getPreviewActiveDuration() { + return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index b9da81dc5..a46100c96 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -361,6 +361,100 @@ public class AbilitySlam extends Ability implements IAbilitySlam { airTicks = 0; } + // ==================== PREVIEW MODE ==================== + + private transient double previewVelX, previewVelY, previewVelZ; + private transient boolean previewLaunched = false; + private transient double previewGroundY; + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewExecute(EntityNPCInterface npc) { + previewLaunched = false; + + double tx, ty, tz; + if (previewTarget != null && targetingMode == TargetingMode.AOE_TARGET) { + tx = previewTarget.posX; + ty = previewTarget.posY; + tz = previewTarget.posZ; + } else { + tx = npc.posX; + ty = npc.posY; + tz = npc.posZ; + } + + previewGroundY = npc.posY; + + double dx = tx - npc.posX; + double dz = tz - npc.posZ; + double horizontalDist = Math.sqrt(dx * dx + dz * dz); + + if (horizontalDist < 0.5) { + previewVelX = 0; + previewVelZ = 0; + previewVelY = 0.8 * leapSpeed; + } else { + if (horizontalDist > maxRange) { + double scale = maxRange / horizontalDist; + dx *= scale; + dz *= scale; + horizontalDist = maxRange; + } + + int flightTicks = (int) Math.max(15, Math.min(horizontalDist * 1.5, 30)); + double drag = 0.91; + double dragPowN = Math.pow(drag, flightTicks); + double vHorizontal = horizontalDist * (1.0 - drag) / (1.0 - dragPowN) * leapSpeed; + + double arcHeight = Math.max(1.0, leapHeight) * leapSpeed; + double peakTicks = flightTicks * 0.4; + double vy = (arcHeight * 2.0 / peakTicks) + (0.08 * peakTicks * 0.5); + vy = Math.max(vy, 0.6 * leapSpeed); + + double dirX = dx / horizontalDist; + double dirZ = dz / horizontalDist; + previewVelX = dirX * vHorizontal; + previewVelZ = dirZ * vHorizontal; + previewVelY = vy; + } + previewLaunched = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void onPreviewActiveTick(EntityNPCInterface npc, int tick) { + if (!previewLaunched) return; + + // Apply velocity + npc.prevPosX = npc.posX; + npc.prevPosY = npc.posY; + npc.prevPosZ = npc.posZ; + + npc.posX += previewVelX; + npc.posY += previewVelY; + npc.posZ += previewVelZ; + + // Gravity and drag + previewVelY -= 0.08; + previewVelY *= 0.98; + previewVelX *= 0.91; + previewVelZ *= 0.91; + + // Ground clamp - stop falling below starting Y + if (npc.posY < previewGroundY && previewVelY < 0) { + npc.posY = previewGroundY; + previewVelY = 0; + previewVelX = 0; + previewVelZ = 0; + previewLaunched = false; + } + } + + @Override + public int getPreviewActiveDuration() { + return 60; + } + @Override public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { // Check if telegraph should be shown diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 2e5926e67..c841ee0f9 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -83,8 +83,12 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { /** * Check if beam is in charging state (synced via data watcher). + * In preview mode, uses local field since data watcher isn't synced. */ public boolean isCharging() { + if (previewMode) { + return this.charging; + } return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; } @@ -264,6 +268,103 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { return beam; } + /** + * Create a beam in preview mode for GUI display. + * Follows anchor point and animations like in the real game. + * Can be fired when transitioning to active phase. + */ + public static EntityAbilityBeam createPreview(World world, EntityNPCInterface owner, + float beamWidth, float headSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean lightningEffect, float lightningDensity, float lightningRadius, + AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { + EntityAbilityBeam beam = new EntityAbilityBeam(world); + beam.setPreviewMode(true); + beam.setPreviewOwner(owner); + + // Set visual properties + beam.beamWidth = beamWidth; + beam.headSize = headSize; + beam.size = headSize; + beam.innerColor = innerColor; + beam.outerColor = outerColor; + beam.outerColorEnabled = outerColorEnabled; + beam.outerColorWidth = outerColorWidth; + beam.rotationSpeed = rotationSpeed; + beam.lightningEffect = lightningEffect; + beam.lightningDensity = lightningDensity; + beam.lightningRadius = lightningRadius; + + // Set charging state + beam.setCharging(true); + beam.chargeDuration = chargeDuration; + beam.chargeTick = 0; + beam.chargeOffsetDistance = chargeOffsetDistance; + beam.anchorPoint = anchorPoint; + + // Initial position at anchor point + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint, chargeOffsetDistance); + beam.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + beam.prevPosX = pos.xCoord; + beam.prevPosY = pos.yCoord; + beam.prevPosZ = pos.zCoord; + beam.startX = pos.xCoord; + beam.startY = pos.yCoord; + beam.startZ = pos.zCoord; + + // Initialize head offsets + beam.headOffsetX = 0; + beam.headOffsetY = 0; + beam.headOffsetZ = 0; + beam.prevHeadOffsetX = 0; + beam.prevHeadOffsetY = 0; + beam.prevHeadOffsetZ = 0; + + // Attach to owner for anchor following + beam.attachedToOwner = true; + beam.renderTailOrb = true; + + // Clear motion while charging + beam.motionX = 0; + beam.motionY = 0; + beam.motionZ = 0; + + return beam; + } + + /** + * Start preview firing (simulates firing toward a point in front of NPC). + */ + public void startPreviewFiring() { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Sync prev position to prevent visual jump on first frame + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + // Fire forward based on owner facing direction + Entity owner = getOwner(); + if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = 0; // Fire horizontally + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } else { + motionX = speed; + motionY = 0; + motionZ = 0; + } + } + /** * Start the beam firing (exit charging mode). * Called by ability when windup ends. @@ -361,6 +462,12 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { ageTrailPoints(); } + // In preview mode, run movement on client (no server) + if (previewMode) { + updatePreviewMovement(); + return; + } + if (worldObj.isRemote) { // Client: interpolate entity position handleClientInterpolation(); @@ -510,6 +617,37 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } + /** + * Update movement in preview mode (client-side only, no damage). + */ + private void updatePreviewMovement() { + // Move head offset + headOffsetX += motionX; + headOffsetY += motionY; + headOffsetZ += motionZ; + + // Update origin if attached to owner + if (attachedToOwner) { + Entity owner = getOwner(); + if (owner != null) { + startX = owner.posX; + startY = owner.posY + owner.getEyeHeight() * 0.7; + startZ = owner.posZ; + } + } + + // Calculate world position of head + double headWorldX = startX + headOffsetX; + double headWorldY = startY + headOffsetY; + double headWorldZ = startZ + headOffsetZ; + + // Update entity position to head + this.setPosition(headWorldX, headWorldY, headWorldZ); + + // Add trail point + addTrailPoint(); + } + private void updateHoming() { if (!homing) return; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index f63014158..e3896a839 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -61,8 +61,12 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { /** * Check if disc is in charging state (synced via data watcher). + * In preview mode, uses local field since data watcher isn't synced. */ public boolean isCharging() { + if (previewMode) { + return this.charging; + } return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; } @@ -209,6 +213,94 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { return disc; } + /** + * Create a disc in preview mode for GUI display. + * Follows anchor point and animations like in the real game. + * Can be fired when transitioning to active phase. + */ + public static EntityAbilityDisc createPreview(World world, EntityNPCInterface owner, + float discRadius, float discThickness, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean lightningEffect, float lightningDensity, float lightningRadius, + AnchorPoint anchorPoint, int chargeDuration) { + EntityAbilityDisc disc = new EntityAbilityDisc(world); + disc.setPreviewMode(true); + disc.setPreviewOwner(owner); + + // Set visual properties + disc.innerColor = innerColor; + disc.outerColor = outerColor; + disc.outerColorEnabled = outerColorEnabled; + disc.outerColorWidth = outerColorWidth; + disc.rotationSpeed = rotationSpeed; + disc.lightningEffect = lightningEffect; + disc.lightningDensity = lightningDensity; + disc.lightningRadius = lightningRadius; + + // Set charging state + disc.setCharging(true); + disc.chargeDuration = chargeDuration; + disc.chargeTick = 0; + disc.anchorPoint = anchorPoint; + + // Store target size and start at 0 for grow effect + disc.targetDiscRadius = discRadius; + disc.targetDiscThickness = discThickness; + disc.discRadius = 0.01f; + disc.discThickness = 0.01f; + disc.size = 0.01f; + + // Initial position at anchor point + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + disc.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + disc.prevPosX = pos.xCoord; + disc.prevPosY = pos.yCoord; + disc.prevPosZ = pos.zCoord; + disc.startX = pos.xCoord; + disc.startY = pos.yCoord; + disc.startZ = pos.zCoord; + + // Clear motion while charging + disc.motionX = 0; + disc.motionY = 0; + disc.motionZ = 0; + + return disc; + } + + /** + * Start preview firing (simulates firing toward a point in front of NPC). + */ + public void startPreviewFiring() { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Sync prev position to prevent visual jump on first frame + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + // Fire forward based on owner facing direction + Entity owner = getOwner(); + if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = 0; // Fire horizontally + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } else { + motionX = speed; + motionY = 0; + motionZ = 0; + } + } + /** * Start the disc moving (exit charging mode). * Called by ability when windup ends. @@ -261,6 +353,12 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { return; } + // In preview mode, run movement on client (no server) + if (previewMode) { + updatePreviewMovement(); + return; + } + if (worldObj.isRemote) { handleClientInterpolation(); } else { @@ -332,6 +430,16 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { return distTraveled >= maxDistance; } + /** + * Update movement in preview mode (client-side only, no damage). + */ + private void updatePreviewMovement() { + // Simple movement - just apply motion + this.posX += motionX; + this.posY += motionY; + this.posZ += motionZ; + } + private void updateHoming() { if (!homing) return; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 7a1f97d0f..ec208e2cf 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -347,4 +347,56 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { nbt.setDouble("EndY", endY); nbt.setDouble("EndZ", endZ); } + + /** + * Create a laser in preview mode for GUI display. + * Laser doesn't have charging state - spawns at active phase and fires immediately. + */ + public static EntityAbilityLaser createPreview(World world, EntityNPCInterface owner, + float laserWidth, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, + float expansionSpeed, float maxDistance, + boolean lightningEffect, float lightningDensity, float lightningRadius) { + EntityAbilityLaser laser = new EntityAbilityLaser(world); + laser.setPreviewMode(true); + laser.setPreviewOwner(owner); + + // Set visual properties + laser.laserWidth = laserWidth; + laser.size = laserWidth; + laser.innerColor = innerColor; + laser.outerColor = outerColor; + laser.outerColorEnabled = outerColorEnabled; + laser.outerColorWidth = outerColorWidth; + laser.expansionSpeed = expansionSpeed; + laser.maxDistance = Math.min(maxDistance, 5.0f); // Limit for GUI preview + laser.lightningEffect = lightningEffect; + laser.lightningDensity = lightningDensity; + laser.lightningRadius = lightningRadius; + + // Position at chest height + double x = owner.posX; + double y = owner.posY + owner.height * 0.7; + double z = owner.posZ; + laser.setPosition(x, y, z); + laser.prevPosX = x; + laser.prevPosY = y; + laser.prevPosZ = z; + laser.startX = x; + laser.startY = y; + laser.startZ = z; + + // Fire in owner's facing direction + float yaw = (float) Math.toRadians(owner.rotationYaw); + laser.dirX = -Math.sin(yaw); + laser.dirY = 0; + laser.dirZ = Math.cos(yaw); + + // Initialize end point (same as start, will expand) + laser.endX = x; + laser.endY = y; + laser.endZ = z; + + return laser; + } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 04e59a240..bad2bc955 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -50,8 +50,12 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { /** * Check if orb is in charging state (synced via data watcher). + * In preview mode, uses local field since data watcher isn't synced. */ public boolean isCharging() { + if (previewMode) { + return this.charging; + } return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; } @@ -188,6 +192,95 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { return orb; } + /** + * Create an orb in preview mode for GUI display. + * Follows anchor point and animations like in the real game. + * Can be fired when transitioning to active phase. + */ + public static EntityAbilityOrb createPreview(World world, EntityNPCInterface owner, + float orbSize, int innerColor, int outerColor, + boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, + boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime, + AnchorPoint anchorPoint, int chargeDuration) { + EntityAbilityOrb orb = new EntityAbilityOrb(world); + orb.setPreviewMode(true); + orb.setPreviewOwner(owner); + + // Set visual properties + orb.innerColor = innerColor; + orb.outerColor = outerColor; + orb.outerColorEnabled = outerColorEnabled; + orb.outerColorWidth = outerColorWidth; + orb.rotationSpeed = rotationSpeed; + orb.lightningEffect = lightningEffect; + orb.lightningDensity = lightningDensity; + orb.lightningRadius = lightningRadius; + orb.lightningFadeTime = lightningFadeTime; + + // Set charging state (like createCharging does) + orb.setCharging(true); + orb.chargeDuration = chargeDuration; + orb.chargeTick = 0; + orb.anchorPoint = anchorPoint; + + // Store target size and start at 0 for grow effect + orb.targetSize = orbSize; + orb.size = 0.01f; + orb.renderCurrentSize = 0.01f; + orb.prevRenderSize = 0.01f; + + // Initial position at anchor point + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + orb.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + orb.prevPosX = pos.xCoord; + orb.prevPosY = pos.yCoord; + orb.prevPosZ = pos.zCoord; + orb.startX = pos.xCoord; + orb.startY = pos.yCoord; + orb.startZ = pos.zCoord; + + // Clear motion while charging + orb.motionX = 0; + orb.motionY = 0; + orb.motionZ = 0; + + return orb; + } + + /** + * Start preview firing (simulates firing toward a point in front of NPC). + */ + public void startPreviewFiring() { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Sync prev position to prevent visual jump on first frame + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + // Fire forward based on owner facing direction + Entity owner = getOwner(); + if (owner != null) { + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(0); // Fire horizontally + motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; + motionY = -Math.sin(pitch) * speed; + motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + } else { + // Default: fire forward (positive X in model space) + motionX = speed; + motionY = 0; + motionZ = 0; + } + } + /** * Start the orb moving (exit charging mode). * Called by ability when windup ends. @@ -232,6 +325,12 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { return; } + // In preview mode, run movement on client (no server) + if (previewMode) { + updatePreviewMovement(); + return; + } + if (worldObj.isRemote) { handleClientInterpolation(); } else { @@ -254,6 +353,16 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { } } + /** + * Update movement in preview mode (client-side only, no damage). + */ + private void updatePreviewMovement() { + // Simple movement - just apply motion + this.posX += motionX; + this.posY += motionY; + this.posZ += motionZ; + } + private void updateHoming() { if (!homing) return; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 4b0f1e6a5..149ffd329 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -71,6 +71,8 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // ==================== STATE ==================== protected boolean hasHit = false; + protected boolean previewMode = false; // Client-side preview mode (no damage/effects) + protected EntityNPCInterface previewOwner = null; // Direct reference for GUI preview (no world lookup) // ==================== ROTATION INTERPOLATION ==================== public float prevRotationValX, prevRotationValY, prevRotationValZ; @@ -202,7 +204,10 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.prevRotationValZ = this.rotationValZ; this.prevRenderSize = this.renderCurrentSize; - super.onUpdate(); + // Skip super.onUpdate() in preview mode to avoid world checks + if (!previewMode) { + super.onUpdate(); + } // Update rotation updateRotation(); @@ -210,26 +215,29 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // Lerp render size toward actual size this.renderCurrentSize = this.renderCurrentSize + (this.size - this.renderCurrentSize) * 0.15f; - // Set death time on first tick if not already set (handles chunk load/unload) - if (deathWorldTime < 0 && worldObj != null) { - deathWorldTime = worldObj.getTotalWorldTime() + maxLifetime; - } + // Skip lifetime/distance checks in preview mode + if (!previewMode) { + // Set death time on first tick if not already set (handles chunk load/unload) + if (deathWorldTime < 0 && worldObj != null) { + deathWorldTime = worldObj.getTotalWorldTime() + maxLifetime; + } - // Check lifespan using world time (survives chunk unload/reload) - if (deathWorldTime > 0 && worldObj.getTotalWorldTime() >= deathWorldTime) { - this.setDead(); - return; - } + // Check lifespan using world time (survives chunk unload/reload) + if (deathWorldTime > 0 && worldObj.getTotalWorldTime() >= deathWorldTime) { + this.setDead(); + return; + } - // Check max distance (subclass can override if needed) - if (checkMaxDistance()) { - this.setDead(); - return; - } + // Check max distance (subclass can override if needed) + if (checkMaxDistance()) { + this.setDead(); + return; + } - if (hasHit) { - this.setDead(); - return; + if (hasHit) { + this.setDead(); + return; + } } // Subclass-specific update @@ -310,13 +318,32 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA } } + // ==================== PREVIEW MODE ==================== + + /** + * Set preview mode for GUI display. + * In preview mode, no damage or world effects are applied. + */ + public void setPreviewMode(boolean preview) { + this.previewMode = preview; + } + + /** + * Check if entity is in preview mode. + */ + public boolean isPreviewMode() { + return previewMode; + } + // ==================== DAMAGE & EFFECTS ==================== protected void applyDamage(EntityLivingBase target) { + if (previewMode) return; // Skip damage in preview mode applyDamage(target, this.damage, this.knockback); } protected void applyDamage(EntityLivingBase target, float dmg, float kb) { + if (previewMode) return; // Skip damage in preview mode Entity owner = getOwner(); EntityNPCInterface npc = (owner instanceof EntityNPCInterface) ? (EntityNPCInterface) owner : null; @@ -353,6 +380,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA } protected void doExplosion() { + if (previewMode) return; // Skip explosion in preview mode worldObj.playSoundEffect(posX, posY, posZ, "random.explode", 1.0f, 1.0f); Entity owner = getOwner(); @@ -384,10 +412,22 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // ==================== ENTITY HELPERS ==================== protected Entity getOwner() { + // In preview mode, use direct reference (no world lookup) + if (previewMode && previewOwner != null) { + return previewOwner; + } if (ownerEntityId == -1) return null; return worldObj.getEntityByID(ownerEntityId); } + /** + * Set the preview owner for GUI preview mode. + * This allows anchor point calculations without world entity lookup. + */ + public void setPreviewOwner(EntityNPCInterface owner) { + this.previewOwner = owner; + } + protected Entity getTarget() { if (targetEntityId == -1) return null; return worldObj.getEntityByID(targetEntityId); diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index e659fef74..68c021559 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -92,6 +92,10 @@ import kamkeel.npcs.network.packets.request.TraderMarketSavePacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesGetAllPacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcGetPacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcSavePacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; import kamkeel.npcs.network.packets.request.animation.AnimationGetPacket; import kamkeel.npcs.network.packets.request.animation.AnimationRemovePacket; import kamkeel.npcs.network.packets.request.animation.AnimationSavePacket; @@ -501,6 +505,10 @@ public class PacketHandler { REQUEST_PACKET.registerPacket(new AbilitiesGetAllPacket()); REQUEST_PACKET.registerPacket(new AbilitiesNpcGetPacket()); REQUEST_PACKET.registerPacket(new AbilitiesNpcSavePacket()); + REQUEST_PACKET.registerPacket(new SavedAbilitiesGetPacket()); + REQUEST_PACKET.registerPacket(new SavedAbilityGetPacket()); + REQUEST_PACKET.registerPacket(new SavedAbilityRemovePacket()); + REQUEST_PACKET.registerPacket(new SavedAbilitySavePacket()); // Other Packets REQUEST_PACKET.registerPacket(new IsGuiOpenInform()); diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java index bdd566785..d4968bc5c 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java @@ -198,6 +198,10 @@ public enum EnumRequestPacket { NpcAbilitiesGet, NpcAbilitiesSave, AbilitiesGetAll, + SavedAbilitiesGet, + SavedAbilityGet, + SavedAbilityRemove, + SavedAbilitySave, Hammer, RecipeScript, diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java new file mode 100644 index 000000000..0e8b547a3 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java @@ -0,0 +1,51 @@ +package kamkeel.npcs.network.packets.request.ability; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.NoppesUtilServer; + +import java.io.IOException; + +/** + * Request packet to get list of all saved ability preset names. + */ +public final class SavedAbilitiesGetPacket extends AbstractPacket { + public static String packetName = "Request|SavedAbilitiesGet"; + + public SavedAbilitiesGetPacket() { + } + + @Override + public Enum getType() { + return EnumRequestPacket.SavedAbilitiesGet; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) + return; + + NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); + } +} diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java new file mode 100644 index 000000000..7bb2f1826 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java @@ -0,0 +1,68 @@ +package kamkeel.npcs.network.packets.request.ability; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import kamkeel.npcs.network.packets.data.large.GuiDataPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; + +import java.io.IOException; + +/** + * Request packet to get a specific saved ability by name. + */ +public final class SavedAbilityGetPacket extends AbstractPacket { + public static String packetName = "Request|SavedAbilityGet"; + + private String abilityName; + + public SavedAbilityGetPacket() { + } + + public SavedAbilityGetPacket(String abilityName) { + this.abilityName = abilityName; + } + + @Override + public Enum getType() { + return EnumRequestPacket.SavedAbilityGet; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + ByteBufUtils.writeString(out, abilityName); + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + + if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) + return; + + String name = ByteBufUtils.readString(in); + Ability ability = AbilityController.Instance.getSavedAbility(name); + if (ability != null) { + NBTTagCompound compound = ability.writeNBT(); + GuiDataPacket.sendGuiData((EntityPlayerMP) player, compound); + } + } +} diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java new file mode 100644 index 000000000..3fe4f5a0c --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java @@ -0,0 +1,69 @@ +package kamkeel.npcs.network.packets.request.ability; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.CustomNpcsPermissions; +import noppes.npcs.NoppesUtilServer; + +import java.io.IOException; + +/** + * Request packet to remove a saved ability by name. + */ +public final class SavedAbilityRemovePacket extends AbstractPacket { + public static String packetName = "Request|SavedAbilityRemove"; + + private String abilityName; + + public SavedAbilityRemovePacket() { + } + + public SavedAbilityRemovePacket(String abilityName) { + this.abilityName = abilityName; + } + + @Override + public Enum getType() { + return EnumRequestPacket.SavedAbilityRemove; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @Override + public CustomNpcsPermissions.Permission getPermission() { + return CustomNpcsPermissions.GLOBAL_ABILITY; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + ByteBufUtils.writeString(out, abilityName); + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + + if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) + return; + + String name = ByteBufUtils.readString(in); + AbilityController.Instance.deleteAbility(name); + NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); + } +} diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java new file mode 100644 index 000000000..2cf2fa489 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java @@ -0,0 +1,76 @@ +package kamkeel.npcs.network.packets.request.ability; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import kamkeel.npcs.network.packets.data.large.GuiDataPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.CustomNpcsPermissions; +import noppes.npcs.NoppesUtilServer; + +import java.io.IOException; + +/** + * Request packet to save an ability preset. + */ +public final class SavedAbilitySavePacket extends AbstractPacket { + public static String packetName = "Request|SavedAbilitySave"; + + private NBTTagCompound abilityNBT; + + public SavedAbilitySavePacket() { + } + + public SavedAbilitySavePacket(NBTTagCompound abilityNBT) { + this.abilityNBT = abilityNBT; + } + + @Override + public Enum getType() { + return EnumRequestPacket.SavedAbilitySave; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @Override + public CustomNpcsPermissions.Permission getPermission() { + return CustomNpcsPermissions.GLOBAL_ABILITY; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + ByteBufUtils.writeNBT(out, abilityNBT); + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + + if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) + return; + + NBTTagCompound compound = ByteBufUtils.readNBT(in); + Ability ability = AbilityController.Instance.fromNBT(compound); + if (ability != null) { + AbilityController.Instance.saveAbility(ability); + NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); + GuiDataPacket.sendGuiData((EntityPlayerMP) player, ability.writeNBT()); + } + } +} diff --git a/src/main/java/noppes/npcs/CustomNpcsPermissions.java b/src/main/java/noppes/npcs/CustomNpcsPermissions.java index 0d758ad41..5e7c2924e 100644 --- a/src/main/java/noppes/npcs/CustomNpcsPermissions.java +++ b/src/main/java/noppes/npcs/CustomNpcsPermissions.java @@ -66,6 +66,7 @@ public class CustomNpcsPermissions { public static final Permission GLOBAL_NATURALSPAWN = new Permission("customnpcs.global.naturalspawn"); public static final Permission GLOBAL_TAG = new Permission("customnpcs.global.tag"); public static final Permission GLOBAL_ANIMATION = new Permission("customnpcs.global.animation"); + public static final Permission GLOBAL_ABILITY = new Permission("customnpcs.global.ability"); public static final Permission GLOBAL_MAGIC = new Permission("customnpcs.global.magic"); public static final Permission GLOBAL_EFFECT = new Permission("customnpcs.global.effect"); diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 6a33cb2c0..ae97f70b4 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -785,6 +785,18 @@ public class NoppesUtilServer { sendScrollData(player, map, EnumScrollData.ABILITY_TYPES); } + public static void sendSavedAbilitiesData(EntityPlayerMP player) { + HashMap map = new HashMap(); + kamkeel.npcs.controllers.data.ability.AbilityController controller = kamkeel.npcs.controllers.data.ability.AbilityController.Instance; + if (controller != null) { + int index = 0; + for (String name : controller.getSavedAbilityNames()) { + map.put(name, index++); + } + } + sendScrollData(player, map, EnumScrollData.ABILITIES); + } + public static DialogOption setNpcDialog(int slot, int dialogId, EntityPlayer player) throws IOException { return setNpcDialog(slot, dialogId, getEditingNpc(player)); } diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 9a0044191..01c226812 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -87,6 +87,7 @@ import noppes.npcs.client.gui.global.GuiNPCManageAnimations; import noppes.npcs.client.gui.global.GuiNPCManageBanks; import noppes.npcs.client.gui.global.GuiNPCManageDialogs; import noppes.npcs.client.gui.global.GuiNPCManageEffects; +import noppes.npcs.client.gui.global.GuiNpcManageAbilities; import noppes.npcs.client.gui.global.GuiNPCManageFactions; import noppes.npcs.client.gui.global.GuiNPCManageLinked; import noppes.npcs.client.gui.global.GuiNPCManageQuest; @@ -497,6 +498,20 @@ public class ClientProxy extends CommonProxy { else if (gui == EnumGuiType.ManageEffects) return new GuiNPCManageEffects(npc); + else if (gui == EnumGuiType.ManageAbilities) { + EntityCustomNpc abilityNpc; + if (npc != null) { + abilityNpc = new EntityCustomNpc(npc.worldObj); + abilityNpc.copyDataFrom(npc, true); + abilityNpc.display.showName = 1; + abilityNpc.display.showBossBar = 0; + } else { + abilityNpc = new EntityCustomNpc(Minecraft.getMinecraft().theWorld); + abilityNpc.display.texture = "customnpcs:textures/entity/humanmale/AnimationBody.png"; + } + return new GuiNpcManageAbilities(abilityNpc); + } + else if (gui == EnumGuiType.MainMenuGlobal) return new GuiNPCGlobalMainMenu(npc); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java index 9abcebbe7..750fe282e 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java @@ -281,6 +281,13 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void setGuiData(NBTTagCompound compound) { + // Only process NPC ability data, not saved ability preset data + // SubGuiAbilityLoad also implements IGuiData and may receive responses + // that get forwarded here - ignore those by checking for expected keys + if (!compound.hasKey("Abilities")) { + return; + } + abilitiesEnabled = compound.getBoolean("AbilitiesEnabled"); // Support old globalCooldown for backwards compatibility diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java index ee2561b4e..3760666b4 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java @@ -1,6 +1,7 @@ package noppes.npcs.client.gui.advanced; -import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; import net.minecraft.client.gui.GuiButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; @@ -8,15 +9,20 @@ import noppes.npcs.client.gui.util.SubGuiInterface; /** * Confirmation dialog for deleting an ability preset. + * Uses packet-based communication for proper client-server architecture. */ public class SubGuiAbilityDeleteConfirm extends SubGuiInterface { private final String abilityName; - private final SubGuiAbilityLoad loadGui; + private final Runnable onDeleted; - public SubGuiAbilityDeleteConfirm(String abilityName, SubGuiAbilityLoad loadGui) { + public SubGuiAbilityDeleteConfirm(String abilityName) { + this(abilityName, null); + } + + public SubGuiAbilityDeleteConfirm(String abilityName, Runnable onDeleted) { this.abilityName = abilityName; - this.loadGui = loadGui; + this.onDeleted = onDeleted; setBackground("menubg.png"); xSize = 200; @@ -44,9 +50,11 @@ public class SubGuiAbilityDeleteConfirm extends SubGuiInterface { int id = guibutton.id; if (id == 0) { - // Delete the ability - AbilityController.Instance.deleteAbility(abilityName); - loadGui.onAbilityDeleted(abilityName); + // Delete the ability via packet + PacketClient.sendClient(new SavedAbilityRemovePacket(abilityName)); + if (onDeleted != null) { + onDeleted.run(); + } close(); } else if (id == 1) { close(); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java index c48683070..1e9133d9d 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java @@ -2,28 +2,39 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; import net.minecraft.client.gui.GuiButton; +import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.util.GuiCustomScroll; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.ICustomScrollListener; +import noppes.npcs.client.gui.util.IGuiData; +import noppes.npcs.client.gui.util.IScrollData; import noppes.npcs.client.gui.util.SubGuiInterface; +import noppes.npcs.constants.EnumScrollData; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Vector; /** * Dialog for loading a saved ability preset. - * Can be opened from SubGuiAbilityConfig (to load into editing ability) - * or from GuiNPCAbilities (to add ability directly to NPC). + * Uses packet-based communication for proper client-server architecture. */ -public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollListener { +public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollListener, IScrollData, IGuiData { private final SubGuiAbilityConfig parentConfig; private final GuiNPCAbilities parentAbilities; private String selectedName = null; - private List abilityNames = new ArrayList<>(); + private HashMap abilityData = new HashMap<>(); + private GuiCustomScroll scroll; + + // Track if we're waiting for a load + private boolean waitingForLoad = false; public SubGuiAbilityLoad(SubGuiAbilityConfig parentConfig) { this.parentConfig = parentConfig; @@ -32,6 +43,9 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL setBackground("menubg.png"); xSize = 220; ySize = 180; + + // Request ability list from server + PacketClient.sendClient(new SavedAbilitiesGetPacket()); } public SubGuiAbilityLoad(GuiNPCAbilities parentAbilities) { @@ -41,28 +55,29 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL setBackground("menubg.png"); xSize = 220; ySize = 180; + + // Request ability list from server + PacketClient.sendClient(new SavedAbilitiesGetPacket()); } @Override public void initGui() { super.initGui(); - // Load ability names - Set names = AbilityController.Instance.getSavedAbilityNames(); - abilityNames = new ArrayList<>(names); - int y = guiTop + 5; addLabel(new GuiNpcLabel(0, "ability.load.select", guiLeft + 10, y)); y += 14; // Scroll list of saved abilities - GuiCustomScroll scroll = new GuiCustomScroll(this, 0); - scroll.setSize(200, 110); + if (scroll == null) { + scroll = new GuiCustomScroll(this, 0); + scroll.setSize(200, 110); + } scroll.guiLeft = guiLeft + 10; scroll.guiTop = y; - scroll.setUnsortedList(abilityNames); - if (selectedName != null && abilityNames.contains(selectedName)) { + scroll.setList(getFilteredList()); + if (selectedName != null && abilityData.containsKey(selectedName)) { scroll.setSelected(selectedName); } addScroll(scroll); @@ -70,13 +85,15 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL y += 115; // Buttons - addButton(new GuiNpcButton(0, guiLeft + 10, y, 60, 20, "gui.load")); - addButton(new GuiNpcButton(1, guiLeft + 80, y, 60, 20, "gui.delete")); - addButton(new GuiNpcButton(2, guiLeft + 150, y, 60, 20, "gui.cancel")); + addButton(new GuiNpcButton(0, guiLeft + 10, y, 95, 20, "gui.load")); + addButton(new GuiNpcButton(2, guiLeft + 115, y, 95, 20, "gui.cancel")); - // Disable load/delete if nothing selected + // Disable load if nothing selected getButton(0).setEnabled(selectedName != null && !selectedName.isEmpty()); - getButton(1).setEnabled(selectedName != null && !selectedName.isEmpty()); + } + + private List getFilteredList() { + return new ArrayList<>(abilityData.keySet()); } @Override @@ -84,19 +101,9 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL int id = guibutton.id; if (id == 0 && selectedName != null) { - // Load the selected ability - Ability loaded = AbilityController.Instance.getSavedAbility(selectedName); - if (loaded != null) { - if (parentConfig != null) { - parentConfig.loadAbility(loaded); - } else if (parentAbilities != null) { - parentAbilities.loadAbility(loaded); - } - } - close(); - } else if (id == 1 && selectedName != null) { - // Delete confirmation - setSubGui(new SubGuiAbilityDeleteConfirm(selectedName, this)); + // Request ability data from server + waitingForLoad = true; + PacketClient.sendClient(new SavedAbilityGetPacket(selectedName)); } else if (id == 2) { close(); } @@ -113,8 +120,34 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL @Override public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) { if (scroll.id == 0 && selection != null && !selection.isEmpty()) { - // Double-click to load immediately - Ability loaded = AbilityController.Instance.getSavedAbility(selection); + // Double-click to load - request from server + selectedName = selection; + waitingForLoad = true; + PacketClient.sendClient(new SavedAbilityGetPacket(selection)); + } + } + + @Override + public void setData(Vector list, HashMap data, EnumScrollData type) { + if (type == EnumScrollData.ABILITIES) { + String name = scroll != null ? scroll.getSelected() : null; + this.abilityData = data; + if (scroll != null) { + scroll.setList(getFilteredList()); + if (name != null && abilityData.containsKey(name)) { + scroll.setSelected(name); + } + } + initGui(); + } + } + + @Override + public void setGuiData(NBTTagCompound compound) { + // Received ability data from server + if (waitingForLoad) { + waitingForLoad = false; + Ability loaded = AbilityController.Instance.fromNBT(compound); if (loaded != null) { if (parentConfig != null) { parentConfig.loadAbility(loaded); @@ -126,13 +159,11 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL } } - /** - * Called after an ability is deleted to refresh the list. - */ - public void onAbilityDeleted(String name) { - if (name.equals(selectedName)) { - selectedName = null; + @Override + public void setSelected(String selected) { + this.selectedName = selected; + if (scroll != null) { + scroll.setSelected(selected); } - initGui(); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java index 3be13f0be..760f3eb9b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java @@ -1,23 +1,30 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; -import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; import net.minecraft.client.gui.GuiButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.SubGuiInterface; /** * Confirmation dialog for saving an ability preset. + * Uses packet-based communication for proper client-server architecture. */ public class SubGuiAbilitySaveConfirm extends SubGuiInterface { private final Ability ability; - private final boolean exists; + private final IAbilityConfigCallback callback; public SubGuiAbilitySaveConfirm(Ability ability) { + this(ability, null); + } + + public SubGuiAbilitySaveConfirm(Ability ability, IAbilityConfigCallback callback) { this.ability = ability; - this.exists = AbilityController.Instance.hasSavedAbility(ability.getName()); + this.callback = callback; setBackground("menubg.png"); xSize = 200; @@ -30,15 +37,9 @@ public class SubGuiAbilitySaveConfirm extends SubGuiInterface { int y = guiTop + 10; - if (exists) { - addLabel(new GuiNpcLabel(0, "ability.save.overwrite", guiLeft + 10, y)); - y += 12; - addLabel(new GuiNpcLabel(1, "'" + ability.getName() + "'?", guiLeft + 10, y)); - } else { - addLabel(new GuiNpcLabel(0, "ability.save.confirm", guiLeft + 10, y)); - y += 12; - addLabel(new GuiNpcLabel(1, "'" + ability.getName() + "'?", guiLeft + 10, y)); - } + addLabel(new GuiNpcLabel(0, "ability.save.confirm", guiLeft + 10, y)); + y += 12; + addLabel(new GuiNpcLabel(1, "'" + ability.getName() + "'?", guiLeft + 10, y)); y += 30; @@ -51,8 +52,11 @@ public class SubGuiAbilitySaveConfirm extends SubGuiInterface { int id = guibutton.id; if (id == 0) { - // Save the ability - AbilityController.Instance.saveAbility(ability); + // Save the ability via packet + PacketClient.sendClient(new SavedAbilitySavePacket(ability.writeNBT())); + if (callback != null) { + callback.onAbilitySaved(ability); + } close(); } else if (id == 1) { close(); diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java index 22d0f3103..cb5220d54 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java @@ -1,122 +1,266 @@ package noppes.npcs.client.gui.global; +import kamkeel.npcs.client.renderer.TelegraphRenderer; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; +import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; import net.minecraft.client.gui.GuiButton; -import noppes.npcs.client.gui.advanced.SubGuiAbilityDeleteConfirm; +import net.minecraft.client.gui.GuiYesNo; +import net.minecraft.client.gui.GuiYesNoCallback; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import noppes.npcs.client.NoppesUtil; +import noppes.npcs.client.gui.util.AbilityPreviewExecutor; +import noppes.npcs.client.gui.util.GuiAbilityInterface; import noppes.npcs.client.gui.util.GuiCustomScroll; -import noppes.npcs.client.gui.util.GuiNPCInterface2; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.GuiTexturedButton; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.ICustomScrollListener; +import noppes.npcs.client.gui.util.IGuiData; +import noppes.npcs.client.gui.util.IScrollData; import noppes.npcs.client.gui.util.ISubGuiListener; +import noppes.npcs.client.gui.util.ITextfieldListener; import noppes.npcs.client.gui.util.SubGuiInterface; +import noppes.npcs.constants.EnumScrollData; +import noppes.npcs.controllers.data.AnimationData; import noppes.npcs.entity.EntityNPCInterface; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Vector; /** - * Global GUI for managing saved ability presets. - * Allows viewing, editing, and deleting saved abilities. + * Global GUI for managing saved ability presets with 3D preview. + * + * Features: + * - Left side: 3D preview of NPC with ability effects + * - Right side: Ability list with search + * - Play/Pause/Stop buttons to preview abilities */ -public class GuiNpcManageAbilities extends GuiNPCInterface2 implements ICustomScrollListener, ISubGuiListener, IAbilityConfigCallback { +public class GuiNpcManageAbilities extends GuiAbilityInterface + implements ICustomScrollListener, ISubGuiListener, IAbilityConfigCallback, + ITextfieldListener, GuiYesNoCallback, IScrollData, IGuiData { + // ==================== DATA ==================== private GuiCustomScroll scroll; - private String selectedName = null; - private List abilityNames = new ArrayList<>(); + private HashMap abilityData = new HashMap<>(); + private String selected = null; private String search = ""; + private Ability selectedAbility = null; + + // ==================== PREVIEW ==================== + private AbilityPreviewExecutor previewExecutor; + private long prevTick = 0; public GuiNpcManageAbilities(EntityNPCInterface npc) { super(npc); - loadAbilityNames(); - } - private void loadAbilityNames() { - Set names = AbilityController.Instance.getSavedAbilityNames(); - abilityNames = new ArrayList<>(names); + // Layout offset + this.xOffset = -148 + 110; + this.yOffset = -170 + 167; + + // Initialize preview executor + previewExecutor = new AbilityPreviewExecutor(); + previewExecutor.setParentGui(this); + + // Request ability data from server + PacketClient.sendClient(new SavedAbilitiesGetPacket()); + + // Enable animation data + AnimationData data = npc.display.animationData; + data.setEnabled(true); } @Override public void initGui() { super.initGui(); - int y = guiTop + 10; + // Edit button (above Remove) + addButton(new GuiNpcButton(100, guiLeft + 368, guiTop + 8, 45, 20, "gui.edit")); + getButton(100).setEnabled(selected != null && !selected.isEmpty() && selectedAbility != null); - // Title label - addLabel(new GuiNpcLabel(0, "ability.manager.title", guiLeft + 10, y)); - y += 20; + // Remove button + addButton(new GuiNpcButton(1, guiLeft + 368, guiTop + 30, 45, 20, "gui.remove")); + getButton(1).setEnabled(selected != null && !selected.isEmpty() && abilityData.containsKey(selected)); - // Scroll list of saved abilities + // Scroll list of saved abilities (right side) if (scroll == null) { scroll = new GuiCustomScroll(this, 0); + scroll.setSize(143, 185); } - scroll.setSize(xSize - 90, 160); - scroll.guiLeft = guiLeft + 10; - scroll.guiTop = y; - scroll.setUnsortedList(getFilteredList()); - if (selectedName != null && abilityNames.contains(selectedName)) { - scroll.setSelected(selectedName); - } + scroll.guiLeft = guiLeft + 220; + scroll.guiTop = guiTop + 4; addScroll(scroll); + // Update scroll list + scroll.setList(getSearchList()); + if (selected != null && abilityData.containsKey(selected)) { + scroll.setSelected(selected); + } + // Search bar - addTextField(new GuiNpcTextField(1, this, fontRendererObj, guiLeft + 10, y + 163, xSize - 90, 18, search)); + addTextField(new GuiNpcTextField(55, this, fontRendererObj, guiLeft + 220, guiTop + 192, 143, 20, search)); - // Right side buttons - int btnX = guiLeft + xSize - 70; - addButton(new GuiNpcButton(1, btnX, y, 60, 20, "gui.edit")); - addButton(new GuiNpcButton(2, btnX, y + 25, 60, 20, "gui.delete")); - addButton(new GuiNpcButton(3, btnX, y + 60, 60, 20, "selectServer.refresh")); + // Show ability info only if one is selected + if (selectedAbility == null || selected == null) { + return; + } - // Enable/disable buttons based on selection - getButton(1).setEnabled(selectedName != null && !selectedName.isEmpty()); - getButton(2).setEnabled(selectedName != null && !selectedName.isEmpty()); + // ID/Name label (below search bar) + addLabel(new GuiNpcLabel(10, "ID: " + selectedAbility.getId(), guiLeft + 220, guiTop + 215)); + + // Play/Pause/Stop buttons (below model preview area) + String animTexture = "customnpcs:textures/gui/animation.png"; + int playButtonOffsetX = 60; + + boolean isPlaying = previewExecutor.isPlaying() && !previewExecutor.isPaused(); + boolean isPaused = previewExecutor.isPaused(); + boolean isActive = previewExecutor.isActive(); + + if (!isPlaying || isPaused) { + // Show Play button + String statusKey = isPaused ? "animation.paused" : "animation.stopped"; + addLabel(new GuiNpcLabel(90, statusKey, guiLeft + playButtonOffsetX, guiTop + 198)); + addButton(new GuiTexturedButton(91, "", guiLeft + playButtonOffsetX + 70, guiTop + 192, 11, 20, animTexture, 18, 71)); + } else { + // Show Pause button + addLabel(new GuiNpcLabel(90, "animation.playing", guiLeft + playButtonOffsetX, guiTop + 198)); + addButton(new GuiTexturedButton(92, "", guiLeft + playButtonOffsetX + 70, guiTop + 192, 14, 20, animTexture, 0, 71)); + } + if (isActive) { + // Show Stop button + addButton(new GuiTexturedButton(93, "", guiLeft + playButtonOffsetX + 90, guiTop + 192, 14, 20, animTexture, 33, 71)); + } } - private List getFilteredList() { + private List getSearchList() { if (search.isEmpty()) { - return new ArrayList<>(abilityNames); + return new ArrayList<>(abilityData.keySet()); } - List filtered = new ArrayList<>(); - for (String name : abilityNames) { + List list = new ArrayList<>(); + for (String name : abilityData.keySet()) { if (name.toLowerCase().contains(search.toLowerCase())) { - filtered.add(name); + list.add(name); } } - return filtered; + return list; } @Override - public void buttonEvent(GuiButton guibutton) { + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + // IMPORTANT: Set NPC rotation BEFORE ticking entities + // This ensures anchor point calculations use the correct facing direction + npc.prevRenderYawOffset = npc.renderYawOffset = NPC_FACING_YAW; + npc.prevRotationYaw = npc.rotationYaw = NPC_FACING_YAW; + npc.prevRotationYawHead = npc.rotationYawHead = NPC_FACING_YAW; + + // Tick preview executor (entities will use the rotation set above) + tickPreview(); + + // Draw base (includes 3D preview via parent class) + super.drawScreen(mouseX, mouseY, partialTicks); + + // Draw status text + if (previewExecutor.isActive()) { + String status = previewExecutor.getStatusString(); + fontRendererObj.drawString(status, guiLeft + 12, guiTop + 175, 0xFFFFFF); + } + } + + /** + * Tick the preview executor and animations. + */ + private void tickPreview() { + if (previewExecutor.isPlaying() && !previewExecutor.isPaused()) { + long time = mc.theWorld != null ? mc.theWorld.getTotalWorldTime() : System.currentTimeMillis() / 50; + if (time != prevTick) { + // Advance animation + npc.display.animationData.increaseTime(); + + // Tick preview + previewExecutor.tick(); + + // Sync telegraph to GUI for rendering + setPreviewTelegraph(previewExecutor.getTelegraph()); + + prevTick = time; + + // Check if preview finished + if (!previewExecutor.isActive()) { + initGui(); + } + } + } + } + + @Override + protected void actionPerformed(GuiButton guibutton) { + super.actionPerformed(guibutton); + int id = guibutton.id; - if (id == 1 && selectedName != null) { + if (id == 1 && selected != null && abilityData.containsKey(selected)) { + // Remove - show confirmation + GuiYesNo guiyesno = new GuiYesNo(this, selected, StatCollector.translateToLocal("gui.delete"), 1); + displayGuiScreen(guiyesno); + } else if (id == 100 && selectedAbility != null) { // Edit - Ability ability = AbilityController.Instance.getSavedAbility(selectedName); - if (ability != null) { - setSubGui(ability.createConfigGui(this)); + previewExecutor.stop(); + setSubGui(selectedAbility.createConfigGui(this)); + } else if (id == 91) { + // Play button + if (selectedAbility != null) { + if (previewExecutor.isPaused()) { + previewExecutor.play(); + } else { + previewExecutor.startPreview(selectedAbility, npc); + } + initGui(); } - } else if (id == 2 && selectedName != null) { - // Delete - setSubGui(new SubGuiAbilityDeleteConfirm(selectedName, null)); - } else if (id == 3) { - // Refresh - AbilityController.Instance.load(); - loadAbilityNames(); - selectedName = null; + } else if (id == 92) { + // Pause button + previewExecutor.pause(); initGui(); + } else if (id == 93) { + // Stop button + previewExecutor.stop(); + initGui(); + } + } + + @Override + public void keyTyped(char c, int i) { + super.keyTyped(c, i); + if (getTextField(55) != null && getTextField(55).isFocused()) { + if (!search.equals(getTextField(55).getText())) { + search = getTextField(55).getText(); + scroll.resetScroll(); + scroll.setList(getSearchList()); + } } } @Override public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) { if (scroll.id == 0) { - selectedName = scroll.getSelected(); - initGui(); + String newSelection = scroll.getSelected(); + if (newSelection != null && !newSelection.equals(selected)) { + // Stop any playing preview + previewExecutor.stop(); + + selected = newSelection; + // Request ability data from server + PacketClient.sendClient(new SavedAbilityGetPacket(selected)); + } } } @@ -124,48 +268,90 @@ public class GuiNpcManageAbilities extends GuiNPCInterface2 implements ICustomSc public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) { if (scroll.id == 0 && selection != null && !selection.isEmpty()) { // Double-click to edit - Ability ability = AbilityController.Instance.getSavedAbility(selection); - if (ability != null) { - setSubGui(ability.createConfigGui(this)); + if (selectedAbility != null) { + previewExecutor.stop(); + setSubGui(selectedAbility.createConfigGui(this)); } } } @Override - public void keyTyped(char c, int i) { - super.keyTyped(c, i); - if (getTextField(1) != null && getTextField(1).isFocused()) { - if (!search.equals(getTextField(1).getText())) { - search = getTextField(1).getText(); - scroll.setUnsortedList(getFilteredList()); - scroll.resetScroll(); + public void setData(Vector list, HashMap data, EnumScrollData type) { + if (type == EnumScrollData.ABILITIES) { + String name = scroll != null ? scroll.getSelected() : null; + this.abilityData = data; + if (scroll != null) { + scroll.setList(getSearchList()); + if (name != null && abilityData.containsKey(name)) { + scroll.setSelected(name); + } } + initGui(); + } + } + + @Override + public void setGuiData(NBTTagCompound compound) { + // Received ability data from server + selectedAbility = AbilityController.Instance.fromNBT(compound); + if (selectedAbility != null) { + selected = selectedAbility.getName(); + if (scroll != null) { + scroll.setSelected(selected); + } + } + previewExecutor.stop(); + initGui(); + } + + @Override + public void setSelected(String selected) { + this.selected = selected; + if (scroll != null) { + scroll.setSelected(selected); } } @Override public void subGuiClosed(SubGuiInterface subgui) { - // Refresh list after any sub gui closes - loadAbilityNames(); - if (subgui instanceof SubGuiAbilityDeleteConfirm) { - // After delete, clear selection if it was deleted - if (selectedName != null && !abilityNames.contains(selectedName)) { - selectedName = null; - } - } initGui(); } + @Override + public void confirmClicked(boolean result, int id) { + NoppesUtil.openGUI(player, this); + if (!result) return; + + if (id == 1 && selected != null && abilityData.containsKey(selected)) { + // Delete ability via packet + PacketClient.sendClient(new SavedAbilityRemovePacket(selected)); + scroll.clear(); + selected = null; + selectedAbility = null; + initGui(); + } + } + @Override public void onAbilitySaved(Ability ability) { - // Save the edited ability - AbilityController.Instance.saveAbility(ability); - loadAbilityNames(); - initGui(); + // Save the edited ability via packet + PacketClient.sendClient(new SavedAbilitySavePacket(ability.writeNBT())); + } + + @Override + public void unFocused(GuiNpcTextField textfield) { + // Search field handling is done in keyTyped } @Override public void save() { - // Nothing to save - abilities are saved individually + // Nothing to save - abilities are saved individually via packets + } + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + // Stop preview when GUI closes + previewExecutor.stop(); } } diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java index bca447b1f..b055cbf43 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java @@ -39,6 +39,7 @@ public class GuiNPCGlobalMainMenu extends GuiNPCInterface2 { private GuiNpcSquareButton effectsButton; private GuiNpcSquareButton magicsButton; private GuiNpcSquareButton abilitiesButton; + private GuiNpcSquareButton auctionsButton; public GuiNPCGlobalMainMenu(EntityNPCInterface npc) { super(npc, 5); @@ -96,7 +97,10 @@ public class GuiNPCGlobalMainMenu extends GuiNPCInterface2 { magicsButton.setIconPos(24, 24, 48, 56).setIconTexture(specialIcons); registerButton(abilitiesButton = new GuiNpcSquareButton(21, 0, 0, 20, "global.abilities", 0xFF333333)); - abilitiesButton.setIconPos(24, 24, 72, 56).setIconTexture(specialIcons); // Placeholder icon position + abilitiesButton.setIconPos(24, 24, 72, 56).setIconTexture(specialIcons); + + registerButton(auctionsButton = new GuiNpcSquareButton(22, 0, 0, 20, "global.auction", 0xFF333333)); + auctionsButton.setIconPos(24, 24, 96, 56).setIconTexture(specialIcons); // Layout composite buttons optimally. layoutButtons(); @@ -240,7 +244,10 @@ public class GuiNPCGlobalMainMenu extends GuiNPCInterface2 { NoppesUtil.requestOpenGUI(EnumGuiType.ManageEffects); } if (id == 21) { - NoppesUtil.openGUI(player, new noppes.npcs.client.gui.global.GuiNpcManageAbilities(npc)); + NoppesUtil.requestOpenGUI(EnumGuiType.ManageAbilities); + } + if (id == 22) { + // NoppesUtil.requestOpenGUI(EnumGuiType.ManageAuction); } } diff --git a/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java b/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java new file mode 100644 index 000000000..3dce761d5 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java @@ -0,0 +1,368 @@ +package noppes.npcs.client.gui.util; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityPhase; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilityProjectile; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.AnimationData; +import noppes.npcs.entity.EntityCustomNpc; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Client-side executor for previewing abilities in the GUI. + * + * Lifecycle: + * 1. WINDUP phase - plays windup animation, entities spawn and charge + * 2. ACTIVE phase - plays active animation, entities fire and move + * 3. EXTENDED phase - continues for +100 ticks after animations to see results + * 4. IDLE - preview complete + * + * Features: + * - Invisible fake target NPC placed in front of the preview NPC for targeting + * - NPC movement tracking for abilities that move the NPC (e.g. slam) + */ +@SideOnly(Side.CLIENT) +public class AbilityPreviewExecutor { + + // ==================== PREVIEW STATE ==================== + private Ability previewAbility; + private EntityNPCInterface previewNpc; + private AbilityPhase phase = AbilityPhase.IDLE; + private int currentTick = 0; + private boolean playing = false; + private boolean paused = false; + + // ==================== TIMING ==================== + private static final int EXTENDED_DURATION = 100; + private int activeDuration = 40; + + // ==================== FAKE TARGET ==================== + /** Invisible fake target NPC for ability targeting (placed 5 blocks in front of preview NPC) */ + private EntityNPCInterface fakeTarget; + private static final double TARGET_DISTANCE = 5.0; + + // ==================== NPC START POSITION ==================== + /** Saved NPC position for restoring after movement abilities */ + private double npcStartX, npcStartY, npcStartZ; + + // ==================== PREVIEW CONTENT ==================== + private TelegraphInstance previewTelegraph; + private List previewEntities = new ArrayList<>(); + + // ==================== CALLBACKS ==================== + private GuiAbilityInterface parentGui; + + public AbilityPreviewExecutor() { + } + + public void setParentGui(GuiAbilityInterface gui) { + this.parentGui = gui; + } + + /** + * Start previewing an ability. + */ + public void startPreview(Ability ability, EntityNPCInterface npc) { + stop(); + + this.previewAbility = ability; + this.previewNpc = npc; + this.phase = AbilityPhase.WINDUP; + this.currentTick = 0; + this.playing = true; + this.paused = false; + this.activeDuration = ability.getPreviewActiveDuration(); + + // Save NPC start position for restoring later + this.npcStartX = npc.posX; + this.npcStartY = npc.posY; + this.npcStartZ = npc.posZ; + + // Create invisible fake target NPC for targeting + createFakeTarget(npc); + + // Set preview target on the ability + ability.setPreviewTarget(fakeTarget); + + // Start tracking NPC movement + if (parentGui != null) { + parentGui.startTrackingMovement(); + } + + // Create telegraph for preview + previewTelegraph = ability.createTelegraph(npc, fakeTarget); + + // Start windup animation + Animation windUpAnim = ability.getWindUpAnimation(); + if (windUpAnim != null) { + AnimationData data = npc.display.animationData; + data.setEnabled(true); + data.setAnimation(windUpAnim); + data.animation.paused = false; + } + + // Spawn preview entity on first tick if ability spawns during windup + if (ability.spawnPreviewDuringWindup()) { + spawnPreviewEntity(); + } + } + + /** + * Create an invisible fake target NPC placed in front of the preview NPC. + * This entity is NOT rendered - it only exists for ability targeting logic. + */ + private void createFakeTarget(EntityNPCInterface npc) { + if (npc.worldObj == null) return; + + try { + fakeTarget = new EntityCustomNpc(npc.worldObj); + // Position target in front of NPC based on its facing direction + float facingYaw = GuiAbilityInterface.NPC_FACING_YAW; + double yawRad = Math.toRadians(facingYaw); + double targetX = npc.posX - Math.sin(yawRad) * TARGET_DISTANCE; + double targetY = npc.posY; + double targetZ = npc.posZ + Math.cos(yawRad) * TARGET_DISTANCE; + fakeTarget.setPosition(targetX, targetY, targetZ); + fakeTarget.prevPosX = targetX; + fakeTarget.prevPosY = targetY; + fakeTarget.prevPosZ = targetZ; + } catch (Exception e) { + fakeTarget = null; + } + } + + /** + * Get the fake target entity for abilities that need a target. + */ + public EntityLivingBase getFakeTarget() { + return fakeTarget; + } + + public void play() { + if (previewAbility == null || phase == AbilityPhase.IDLE) { + return; + } + playing = true; + paused = false; + + if (previewNpc != null) { + AnimationData data = previewNpc.display.animationData; + if (data.animation != null) { + data.animation.paused = false; + } + } + } + + public void pause() { + paused = true; + + if (previewNpc != null) { + AnimationData data = previewNpc.display.animationData; + if (data.animation != null) { + data.animation.paused = true; + } + } + } + + public void stop() { + playing = false; + paused = false; + phase = AbilityPhase.IDLE; + currentTick = 0; + + previewTelegraph = null; + + if (parentGui != null) { + for (Entity entity : previewEntities) { + parentGui.removePreviewEntity(entity); + } + parentGui.stopTrackingMovement(); + parentGui.setPreviewTelegraph(null); + } + previewEntities.clear(); + + // Reset NPC position to start position (undo movement from Slam/Charge/Dash) + if (previewNpc != null && npcStartX != 0 && npcStartY != 0 && npcStartZ != 0) { + previewNpc.posX = npcStartX; + previewNpc.posY = npcStartY; + previewNpc.posZ = npcStartZ; + previewNpc.prevPosX = npcStartX; + previewNpc.prevPosY = npcStartY; + previewNpc.prevPosZ = npcStartZ; + } + + // Remove fake target + fakeTarget = null; + + if (previewNpc != null) { + AnimationData data = previewNpc.display.animationData; + data.setAnimation(new Animation()); + data.animation.paused = false; + } + } + + /** + * Tick the preview forward. + */ + public void tick() { + if (!playing || paused || previewAbility == null || previewNpc == null) { + return; + } + + currentTick++; + + if (previewTelegraph != null) { + previewTelegraph.tick(null); + } + + tickEntities(); + + switch (phase) { + case WINDUP: + tickWindup(); + break; + case ACTIVE: + tickActive(); + break; + case IDLE: + tickExtended(); + break; + default: + break; + } + } + + private void tickWindup() { + previewAbility.onPreviewWindUpTick(previewNpc, currentTick); + + if (currentTick >= previewAbility.getWindUpTicks()) { + transitionToActive(); + } + } + + private void tickActive() { + previewAbility.onPreviewActiveTick(previewNpc, currentTick); + + if (currentTick == 1 && !previewAbility.spawnPreviewDuringWindup()) { + spawnPreviewEntity(); + fireEntities(); + } + + if (currentTick >= activeDuration) { + transitionToExtended(); + } + } + + private void tickExtended() { + if (currentTick >= EXTENDED_DURATION) { + playing = false; + } + } + + private void transitionToActive() { + phase = AbilityPhase.ACTIVE; + currentTick = 0; + + previewTelegraph = null; + + // Notify ability of execution (for movement abilities like Slam/Charge/Dash) + previewAbility.onPreviewExecute(previewNpc); + + fireEntities(); + + Animation activeAnim = previewAbility.getActiveAnimation(); + if (activeAnim != null && previewNpc != null) { + AnimationData data = previewNpc.display.animationData; + data.setAnimation(activeAnim); + data.animation.paused = false; + } + } + + private void transitionToExtended() { + phase = AbilityPhase.IDLE; + currentTick = 0; + + if (previewNpc != null) { + AnimationData data = previewNpc.display.animationData; + data.setAnimation(new Animation()); + } + } + + private void spawnPreviewEntity() { + Entity entity = previewAbility.createPreviewEntity(previewNpc); + if (entity != null) { + previewEntities.add(entity); + if (parentGui != null) { + parentGui.addPreviewEntity(entity); + } + } + } + + private void fireEntities() { + for (Entity entity : previewEntities) { + if (entity instanceof EntityAbilityOrb) { + ((EntityAbilityOrb) entity).startPreviewFiring(); + } else if (entity instanceof EntityAbilityBeam) { + ((EntityAbilityBeam) entity).startPreviewFiring(); + } else if (entity instanceof EntityAbilityDisc) { + ((EntityAbilityDisc) entity).startPreviewFiring(); + } + } + } + + private void tickEntities() { + Iterator iter = previewEntities.iterator(); + while (iter.hasNext()) { + Entity entity = iter.next(); + if (entity == null || entity.isDead) { + if (parentGui != null) { + parentGui.removePreviewEntity(entity); + } + iter.remove(); + continue; + } + entity.onUpdate(); + } + } + + // ==================== GETTERS ==================== + + public boolean isPlaying() { return playing; } + public boolean isPaused() { return paused; } + public boolean isActive() { return playing || paused; } + public AbilityPhase getPhase() { return phase; } + public int getCurrentTick() { return currentTick; } + public TelegraphInstance getTelegraph() { return previewTelegraph; } + public List getPreviewEntities() { return previewEntities; } + public Ability getPreviewAbility() { return previewAbility; } + public EntityNPCInterface getPreviewNpc() { return previewNpc; } + + public String getStatusString() { + if (!playing && !paused) { + return "Stopped"; + } else if (paused) { + return "Paused"; + } else if (phase == AbilityPhase.WINDUP) { + return "Windup: " + currentTick + "/" + (previewAbility != null ? previewAbility.getWindUpTicks() : 0); + } else if (phase == AbilityPhase.ACTIVE) { + return "Active: " + currentTick + "/" + activeDuration; + } else if (phase == AbilityPhase.IDLE && playing) { + return "Extended: " + currentTick + "/" + EXTENDED_DURATION; + } + return ""; + } +} diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java new file mode 100644 index 000000000..c9c44ff93 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java @@ -0,0 +1,391 @@ +package noppes.npcs.client.gui.util; + +import kamkeel.npcs.client.renderer.TelegraphRenderer; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import noppes.npcs.client.ClientEventHandler; +import noppes.npcs.client.EntityUtil; +import noppes.npcs.entity.EntityCustomNpc; +import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.entity.data.ModelData; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import java.util.ArrayList; +import java.util.List; + +/** + * Base GUI class for ability preview with fixed camera. + * + * Key concepts: + * - NPC positioned on left side of preview area + * - NPC faces a fixed direction (NPC_FACING_YAW) + * - Viewing direction can be rotated (rotates entire 3D space) + * - Fixed zoom level + * - Preview entities rendered in same coordinate space as NPC + * - NPC position changes (e.g. slam jump) tracked and rendered + */ +public class GuiAbilityInterface extends GuiNPCInterface2 { + + // ==================== FIXED CAMERA SETTINGS ==================== + /** Fixed camera zoom level (higher = more zoomed in) */ + protected static float CAMERA_ZOOM = 45.0f; + /** NPC facing direction - affects anchor points and visual facing */ + protected static float NPC_FACING_YAW = 160.0f; + /** Camera pitch (slight downward angle) */ + protected static float CAMERA_PITCH = 10.0f; + + // ==================== VIEWING ROTATION ==================== + /** Viewing direction rotation (rotates entire 3D space) */ + protected static float viewRotation = 0.0f; + + private GuiNpcButton btnLeft, btnRight; + + // ==================== NPC STATE ==================== + public ModelData playerdata; + public EntityNPCInterface npc; + + /** NPC starting position (saved when preview starts, used to track movement) */ + protected double npcStartX, npcStartY, npcStartZ; + /** Whether we're tracking NPC movement */ + protected boolean trackingNpcMovement = false; + + /** Entities to render in preview space */ + protected List previewEntities = new ArrayList<>(); + + /** Current telegraph to render in preview */ + protected TelegraphInstance previewTelegraph; + + // ==================== LAYOUT ==================== + /** Preview area bounds */ + protected int previewX, previewY, previewWidth, previewHeight; + /** NPC render position on screen */ + protected int npcScreenX, npcScreenY; + + public int xOffset = 0; + public int yOffset = 0; + + public GuiAbilityInterface(EntityNPCInterface npc) { + super(npc); + this.npc = npc; + this.playerdata = ((EntityCustomNpc) npc).modelData; + this.drawDefaultBackground = false; + + CAMERA_ZOOM = 30f; + NPC_FACING_YAW = 310f; + CAMERA_PITCH = 5f; + } + + @Override + public void initGui() { + super.initGui(); + + // Calculate preview area (left side of GUI) + previewX = guiLeft + 10; + previewY = guiTop + 10; + previewWidth = 200; + previewHeight = 180; + + // NPC position: left side of preview, slightly below center + npcScreenX = previewX + (int)(previewWidth * 0.33f) + xOffset; + npcScreenY = previewY + (int)(previewHeight * 0.85f) + yOffset; + + // Viewing rotation buttons (below preview area) + int btnY = guiTop + 192; + addButton(btnLeft = new GuiNpcButton(680, guiLeft + 10, btnY, 20, 20, "<")); + addButton(btnRight = new GuiNpcButton(681, guiLeft + 32, btnY, 20, 20, ">")); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + // Handle held rotation buttons + if (Mouse.isButtonDown(0)) { + if (btnLeft != null && btnLeft.mousePressed(mc, mouseX, mouseY)) { + viewRotation += partialTicks * 2; + } else if (btnRight != null && btnRight.mousePressed(mc, mouseX, mouseY)) { + viewRotation -= partialTicks * 2; + } + } + + // Draw background and UI elements + super.drawScreen(mouseX, mouseY, partialTicks); + + // Draw the 3D preview + drawPreview(mouseX, mouseY, partialTicks); + } + + /** + * Draw the 3D preview with NPC and entities. + */ + protected void drawPreview(int mouseX, int mouseY, float partialTicks) { + GL11.glColor4f(1, 1, 1, 1); + + // Enable scissor to clip rendering to preview area + GL11.glEnable(GL11.GL_SCISSOR_TEST); + setScissorClip(previewX, previewY, previewWidth, previewHeight); + + // Get the entity to render (could be transformed player model) + EntityLivingBase renderEntity = playerdata.getEntity(npc); + if (renderEntity == null) { + renderEntity = this.npc; + } + + // Sync NPC properties to render entity + EntityUtil.Copy(npc, renderEntity); + + // Set NPC facing direction (affects anchor points and visual facing) + npc.prevRenderYawOffset = npc.renderYawOffset = NPC_FACING_YAW; + npc.prevRotationYaw = npc.rotationYaw = NPC_FACING_YAW; + npc.prevRotationYawHead = npc.rotationYawHead = NPC_FACING_YAW; + + // Also set on render entity + renderEntity.prevRenderYawOffset = renderEntity.renderYawOffset = NPC_FACING_YAW; + renderEntity.prevRotationYaw = renderEntity.rotationYaw = NPC_FACING_YAW; + renderEntity.prevRotationYawHead = renderEntity.rotationYawHead = NPC_FACING_YAW; + renderEntity.rotationPitch = 0; + + // Calculate NPC position delta for movement rendering (e.g. slam jump) + // Interpolate with partial ticks for smooth movement between frames + double npcDeltaX = 0, npcDeltaY = 0, npcDeltaZ = 0; + if (trackingNpcMovement) { + double interpX = npc.prevPosX + (npc.posX - npc.prevPosX) * partialTicks; + double interpY = npc.prevPosY + (npc.posY - npc.prevPosY) * partialTicks; + double interpZ = npc.prevPosZ + (npc.posZ - npc.prevPosZ) * partialTicks; + npcDeltaX = interpX - npcStartX; + npcDeltaY = interpY - npcStartY; + npcDeltaZ = interpZ - npcStartZ; + } + + // ==================== BEGIN 3D RENDERING ==================== + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glPushMatrix(); + + // Move to NPC render position on screen + GL11.glTranslatef(npcScreenX, npcScreenY, 50F); + + // Apply zoom (scale) + GL11.glScalef(-CAMERA_ZOOM, CAMERA_ZOOM, CAMERA_ZOOM); + + // Flip for screen coordinates (Y is inverted) + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + + // Apply slight camera pitch (looking down at scene) + GL11.glRotatef(CAMERA_PITCH, 1.0F, 0.0F, 0.0F); + + // Apply VIEWING rotation (rotates entire space, not just NPC) + GL11.glRotatef(viewRotation, 0.0F, 1.0F, 0.0F); + + // Setup lighting (standard item lighting for consistent colors) + GL11.glRotatef(135F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glRotatef(-135F, 0.0F, 1.0F, 0.0F); + + // Adjust for entity offset + GL11.glTranslatef(0.0F, renderEntity.yOffset, 0.0F); + + RenderManager.instance.playerViewY = 180F; + ClientEventHandler.renderingEntityInGUI = true; + + // Render the NPC at its position delta (for movement like slam jumps) + try { + RenderManager.instance.renderEntityWithPosYaw(renderEntity, npcDeltaX, npcDeltaY, npcDeltaZ, 0.0F, partialTicks); + } catch (Exception e) { + playerdata.setEntityClass(null); + } + + // Render preview entities at their positions relative to NPC start position + renderPreviewEntities(partialTicks); + + // Render telegraph in preview space + renderPreviewTelegraph(partialTicks); + + ClientEventHandler.renderingEntityInGUI = false; + + GL11.glPopMatrix(); + + // Cleanup GL state + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + + // Disable scissor + GL11.glDisable(GL11.GL_SCISSOR_TEST); + + // Clear depth buffer so UI renders on top + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + } + + /** + * Render preview entities in the same coordinate space as the NPC. + * Called WITHIN the 3D matrix transformation. + */ + protected void renderPreviewEntities(float partialTicks) { + // Save current GL state that NPC render may have changed + boolean lightingWasEnabled = GL11.glIsEnabled(GL11.GL_LIGHTING); + + // Use the start position as the reference point for entity offsets + double refX = trackingNpcMovement ? npcStartX : npc.posX; + double refY = trackingNpcMovement ? npcStartY : npc.posY; + double refZ = trackingNpcMovement ? npcStartZ : npc.posZ; + + for (Entity entity : previewEntities) { + if (entity == null || entity.isDead) continue; + + // Calculate entity position relative to reference (NPC start position) + double offsetX = entity.prevPosX + (entity.posX - entity.prevPosX) * partialTicks - refX; + double offsetY = entity.prevPosY + (entity.posY - entity.prevPosY) * partialTicks - refY; + double offsetZ = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * partialTicks - refZ; + + // The NPC model was translated by npc.yOffset, so we need to subtract it + offsetY -= npc.yOffset; + + // Reset GL state before each entity to ensure colors render correctly + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + GL11.glDisable(GL11.GL_LIGHTING); + + try { + RenderManager.instance.renderEntityWithPosYaw(entity, offsetX, offsetY, offsetZ, entity.rotationYaw, partialTicks); + } catch (Exception e) { + // Ignore rendering errors + } + } + + // Restore lighting state for any subsequent rendering + if (lightingWasEnabled) { + GL11.glEnable(GL11.GL_LIGHTING); + } + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + } + + /** + * Render the telegraph in the 3D preview space. + * Called within the GL matrix transformation. + */ + protected void renderPreviewTelegraph(float partialTicks) { + if (previewTelegraph == null) return; + if (TelegraphRenderer.Instance == null) return; + + // Telegraph position is in world coords - convert to preview space + double refX = trackingNpcMovement ? npcStartX : npc.posX; + double refY = trackingNpcMovement ? npcStartY : npc.posY; + double refZ = trackingNpcMovement ? npcStartZ : npc.posZ; + + double offsetX = previewTelegraph.getInterpolatedX(partialTicks) - refX; + double offsetY = previewTelegraph.getInterpolatedY(partialTicks) - refY; + double offsetZ = previewTelegraph.getInterpolatedZ(partialTicks) - refZ; + + // Adjust for NPC yOffset (same as entities) + offsetY -= npc.yOffset; + + TelegraphRenderer.Instance.renderTelegraphInGUI(previewTelegraph, offsetX, offsetY, offsetZ, 1.0f, partialTicks); + } + + public void setPreviewTelegraph(TelegraphInstance telegraph) { + this.previewTelegraph = telegraph; + } + + /** + * Set scissor clip for preview area. + */ + protected void setScissorClip(int x, int y, int width, int height) { + ScaledResolution sr = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + int scale = sr.getScaleFactor(); + int scaledY = mc.displayHeight - (y + height) * scale; + GL11.glScissor(x * scale, scaledY, width * scale, height * scale); + } + + // ==================== MOVEMENT TRACKING ==================== + + /** + * Start tracking NPC movement from current position. + */ + public void startTrackingMovement() { + npcStartX = npc.posX; + npcStartY = npc.posY; + npcStartZ = npc.posZ; + trackingNpcMovement = true; + } + + /** + * Stop tracking NPC movement. + */ + public void stopTrackingMovement() { + trackingNpcMovement = false; + } + + // ==================== PREVIEW ENTITY MANAGEMENT ==================== + + public void addPreviewEntity(Entity entity) { + if (entity != null && !previewEntities.contains(entity)) { + previewEntities.add(entity); + } + } + + public void removePreviewEntity(Entity entity) { + previewEntities.remove(entity); + } + + public void clearPreviewEntities() { + previewEntities.clear(); + } + + public List getPreviewEntities() { + return previewEntities; + } + + public float getNpcFacingYaw() { + return NPC_FACING_YAW; + } + + // ==================== BACKGROUND ==================== + + @Override + protected void drawBackground() { + super.drawBackground(); + + drawGradientRect(previewX, previewY, previewX + previewWidth, previewY + previewHeight, + 0xc0101010, 0xd0101010); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + // ==================== STANDARD OVERRIDES ==================== + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + @Override + public void keyTyped(char par1, int par2) { + super.keyTyped(par1, par2); + if (par2 == 1) { + close(); + } + } + + public void close() { + this.mc.displayGuiScreen((GuiScreen) null); + this.mc.setIngameFocus(); + } + + @Override + public void save() { + } + + @Override + protected void actionPerformed(GuiButton btn) { + if (btn.id == 670) { + close(); + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java b/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java index 8a1d015d0..cef818647 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java @@ -18,11 +18,11 @@ import org.lwjgl.opengl.GL12; public class GuiModelInterface2 extends GuiNPCInterface2 { public ModelData playerdata; - private static float rotation = 0; + protected static float rotation = 0; private GuiNpcButton left, right, zoom, unzoom; - private static float zoomed = 60; + protected static float zoomed = 60; public int xOffset = 0; public int yOffset = 0; diff --git a/src/main/java/noppes/npcs/constants/EnumScrollData.java b/src/main/java/noppes/npcs/constants/EnumScrollData.java index 235f2719b..baf994b4e 100644 --- a/src/main/java/noppes/npcs/constants/EnumScrollData.java +++ b/src/main/java/noppes/npcs/constants/EnumScrollData.java @@ -7,6 +7,7 @@ public enum EnumScrollData { DIALOG_GROUP, QUEST_GROUP, ABILITY_TYPES, + ABILITIES, ANIMATIONS, BUILTIN_ANIMATIONS } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 50c150624..fef02e070 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -689,6 +689,8 @@ global.naturalspawn=Spawns global.linked=Linked global.customeffects=Effects global.magic=Magic +global.abilities=Abilities +global.auction=Auction bank.slot=Slot bank.unlock=Unlock @@ -1714,7 +1716,6 @@ ability.delete.confirm=Delete ability preset gui.load=Load # Global Abilities Manager -global.abilities=Abilities ability.manager.title=Ability Manager # Explosive Hover Text diff --git a/src/main/resources/assets/customnpcs/textures/gui/icons.png b/src/main/resources/assets/customnpcs/textures/gui/icons.png index 86bf094c4c9681be9d316b9dced36f8b635d2a81..6f2993cd1eeadf33e09f0723f3f0746d1ff045c6 100644 GIT binary patch literal 11934 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 GM*I(C=F0Z~ literal 5249 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 Date: Thu, 29 Jan 2026 14:19:57 -0500 Subject: [PATCH 29/85] Refactor to Cleaner Class Setup --- .../data/ability/data/EnergyColorData.java | 50 ++++ .../data/ability/data/EnergyCombatData.java | 51 ++++ .../data/ability/data/EnergyHomingData.java | 41 +++ .../data/ability/data/EnergyLifespanData.java | 33 +++ .../ability/data/EnergyLightningData.java | 42 +++ .../data/ability/type/AbilityDisc.java | 232 ++++++---------- .../data/ability/type/AbilityEnergyBeam.java | 246 ++++++----------- .../data/ability/type/AbilityLaserShot.java | 187 +++++-------- .../data/ability/type/AbilityOrb.java | 260 ++++++------------ .../data/ability/type/AbilitySlam.java | 5 +- .../data/ability/type/AbilitySweeper.java | 34 +-- .../npcs/entity/EntityAbilityBeam.java | 236 +++++----------- .../npcs/entity/EntityAbilityDisc.java | 204 +++++--------- .../npcs/entity/EntityAbilityLaser.java | 115 +++----- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 208 +++++--------- .../npcs/entity/EntityAbilityProjectile.java | 124 ++++----- .../npcs/entity/EntityAbilitySweeper.java | 12 +- .../npcs/entity/EntityNPCInterface.java | 7 + 18 files changed, 874 insertions(+), 1213 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyColorData.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyColorData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyColorData.java new file mode 100644 index 000000000..4bd841742 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyColorData.java @@ -0,0 +1,50 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Groups visual color properties shared by all energy abilities. + * Used as a parameter object for entity constructors and ability configuration. + */ +public class EnergyColorData { + public int innerColor = 0xFFFFFF; + public int outerColor = 0x8888FF; + public boolean outerColorEnabled = true; + public float outerColorWidth = 0.4f; + public float outerColorAlpha = 0.5f; + public float rotationSpeed = 4.0f; + + public EnergyColorData() {} + + public EnergyColorData(int innerColor, int outerColor, boolean outerColorEnabled, + float outerColorWidth, float outerColorAlpha, float rotationSpeed) { + this.innerColor = innerColor; + this.outerColor = outerColor; + this.outerColorEnabled = outerColorEnabled; + this.outerColorWidth = outerColorWidth; + this.outerColorAlpha = outerColorAlpha; + this.rotationSpeed = rotationSpeed; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setInteger("innerColor", innerColor); + nbt.setInteger("outerColor", outerColor); + nbt.setBoolean("outerColorEnabled", outerColorEnabled); + nbt.setFloat("outerColorWidth", outerColorWidth); + nbt.setFloat("outerColorAlpha", outerColorAlpha); + nbt.setFloat("rotationSpeed", rotationSpeed); + } + + public void readNBT(NBTTagCompound nbt) { + innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; + outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x8888FF; + outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; + outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; + rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 4.0f; + } + + public EnergyColorData copy() { + return new EnergyColorData(innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java new file mode 100644 index 000000000..fa09645a6 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java @@ -0,0 +1,51 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Groups combat properties shared by energy projectile abilities. + * Used as a parameter object for entity constructors and ability configuration. + */ +public class EnergyCombatData { + public float damage = 7.0f; + public float knockback = 1.0f; + public float knockbackUp = 0.1f; + public boolean explosive = false; + public float explosionRadius = 3.0f; + public float explosionDamageFalloff = 0.5f; + + public EnergyCombatData() {} + + public EnergyCombatData(float damage, float knockback, float knockbackUp, + boolean explosive, float explosionRadius, float explosionDamageFalloff) { + this.damage = damage; + this.knockback = knockback; + this.knockbackUp = knockbackUp; + this.explosive = explosive; + this.explosionRadius = explosionRadius; + this.explosionDamageFalloff = explosionDamageFalloff; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setFloat("damage", damage); + nbt.setFloat("knockback", knockback); + nbt.setFloat("knockbackUp", knockbackUp); + nbt.setBoolean("explosive", explosive); + nbt.setFloat("explosionRadius", explosionRadius); + nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); + } + + public void readNBT(NBTTagCompound nbt) { + damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 7.0f; + knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.0f; + knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.1f; + explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); + explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 3.0f; + explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; + } + + public EnergyCombatData copy() { + return new EnergyCombatData(damage, knockback, knockbackUp, + explosive, explosionRadius, explosionDamageFalloff); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java new file mode 100644 index 000000000..5b90bafce --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java @@ -0,0 +1,41 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Groups homing/movement properties for energy projectile abilities. + * Used by Orb, Disc, and Beam (not Laser or Sweeper). + */ +public class EnergyHomingData { + public float speed = 0.5f; + public boolean homing = true; + public float homingStrength = 0.15f; + public float homingRange = 20.0f; + + public EnergyHomingData() {} + + public EnergyHomingData(float speed, boolean homing, float homingStrength, float homingRange) { + this.speed = speed; + this.homing = homing; + this.homingStrength = homingStrength; + this.homingRange = homingRange; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setFloat("speed", speed); + nbt.setBoolean("homing", homing); + nbt.setFloat("homingStrength", homingStrength); + nbt.setFloat("homingRange", homingRange); + } + + public void readNBT(NBTTagCompound nbt) { + speed = nbt.hasKey("speed") ? nbt.getFloat("speed") : 0.5f; + homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); + homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.15f; + homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 20.0f; + } + + public EnergyHomingData copy() { + return new EnergyHomingData(speed, homing, homingStrength, homingRange); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java new file mode 100644 index 000000000..f8f0122e8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java @@ -0,0 +1,33 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Groups lifespan/range properties for energy projectile abilities. + * Used as a parameter object for entity constructors and ability configuration. + */ +public class EnergyLifespanData { + public float maxDistance = 30.0f; + public int maxLifetime = 200; + + public EnergyLifespanData() {} + + public EnergyLifespanData(float maxDistance, int maxLifetime) { + this.maxDistance = maxDistance; + this.maxLifetime = maxLifetime; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setFloat("maxDistance", maxDistance); + nbt.setInteger("maxLifetime", maxLifetime); + } + + public void readNBT(NBTTagCompound nbt) { + maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 30.0f; + maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; + } + + public EnergyLifespanData copy() { + return new EnergyLifespanData(maxDistance, maxLifetime); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java new file mode 100644 index 000000000..30d4ea6d8 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java @@ -0,0 +1,42 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Groups lightning visual effect properties for energy abilities. + * Used as a parameter object for entity constructors and ability configuration. + */ +public class EnergyLightningData { + public boolean lightningEffect = false; + public float lightningDensity = 0.15f; + public float lightningRadius = 0.5f; + public int lightningFadeTime = 6; + + public EnergyLightningData() {} + + public EnergyLightningData(boolean lightningEffect, float lightningDensity, + float lightningRadius, int lightningFadeTime) { + this.lightningEffect = lightningEffect; + this.lightningDensity = lightningDensity; + this.lightningRadius = lightningRadius; + this.lightningFadeTime = lightningFadeTime; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setBoolean("lightningEffect", lightningEffect); + nbt.setFloat("lightningDensity", lightningDensity); + nbt.setFloat("lightningRadius", lightningRadius); + nbt.setInteger("lightningFadeTime", lightningFadeTime); + } + + public void readNBT(NBTTagCompound nbt) { + lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); + lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; + lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; + lightningFadeTime = nbt.hasKey("lightningFadeTime") ? nbt.getInteger("lightningFadeTime") : 6; + } + + public EnergyLightningData copy() { + return new EnergyLightningData(lightningEffect, lightningDensity, lightningRadius, lightningFadeTime); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index e5c15e010..006f6f128 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -6,14 +6,21 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDisc; @@ -27,53 +34,24 @@ import noppes.npcs.entity.EntityNPCInterface; */ public class AbilityDisc extends Ability implements IAbilityDisc { - // Movement properties - private float speed = 0.6f; + // Disc geometry private float discRadius = 1.0f; private float discThickness = 0.2f; - private float maxDistance = 35.0f; - private int maxLifetime = 200; - - // Combat properties - private float damage = 8.0f; - private float knockback = 1.2f; - private float knockbackUp = 0.15f; - - // Homing properties - private boolean homing = true; - private float homingStrength = 0.12f; - private float homingRange = 18.0f; // Boomerang properties private boolean boomerang = false; private int boomerangDelay = 40; - // Explosion properties - private boolean explosive = false; - private float explosionRadius = 3.0f; - private float explosionDamageFalloff = 0.5f; - - // Effect properties - private int stunDuration = 0; - private int slowDuration = 0; - private int slowLevel = 0; - - // Visual properties - private int innerColor = 0xFFFFFF; - private int outerColor = 0xFF8800; - private float outerColorWidth = 0.4f; // Additive offset from inner size - private float outerColorAlpha = 0.5f; // Additive offset from inner size - private boolean outerColorEnabled = true; - private float rotationSpeed = 5.0f; - - // Lightning effect properties - private boolean lightningEffect = false; - private float lightningDensity = 0.15f; - private float lightningRadius = 0.5f; - // Anchor point for charging position private AnchorPoint anchorPoint = AnchorPoint.FRONT; + // Energy data classes + private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF8800, true, 0.4f, 0.5f, 5.0f); + private EnergyCombatData combatData = new EnergyCombatData(8.0f, 1.2f, 0.15f, false, 3.0f, 0.5f); + private EnergyHomingData homingData = new EnergyHomingData(0.6f, true, 0.12f, 18.0f); + private EnergyLightningData lightningData = new EnergyLightningData(); + private EnergyLifespanData lifespanData = new EnergyLifespanData(35.0f, 200); + // Transient state for disc entity (used during windup charging) private transient EntityAbilityDisc discEntity = null; @@ -134,20 +112,16 @@ public class AbilityDisc extends Ability implements IAbilityDisc { // Spawn disc in charging mode on first tick of windup if (tick == 1) { // Create disc in charging mode - follows NPC based on anchor point during windup - discEntity = EntityAbilityDisc.createCharging( + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint); + discEntity = new EntityAbilityDisc( world, npc, target, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - speed, homing, homingStrength, homingRange, - boomerang, boomerangDelay, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, - anchorPoint, // Anchor point for charging position - windUpTicks // Charge duration = windup duration - ); + spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, + discRadius, discThickness, + colorData, combatData, homingData, lightningData, lifespanData, + boomerang, boomerangDelay); + discEntity.setupCharging(anchorPoint, windUpTicks); + discEntity.setEffects(this.effects); world.spawnEntityInWorld(discEntity); } } @@ -203,127 +177,83 @@ public class AbilityDisc extends Ability implements IAbilityDisc { @Override public void writeTypeNBT(NBTTagCompound nbt) { - nbt.setFloat("speed", speed); nbt.setFloat("discRadius", discRadius); nbt.setFloat("discThickness", discThickness); - nbt.setFloat("maxDistance", maxDistance); - nbt.setInteger("maxLifetime", maxLifetime); - nbt.setFloat("damage", damage); - nbt.setFloat("knockback", knockback); - nbt.setFloat("knockbackUp", knockbackUp); - nbt.setBoolean("homing", homing); - nbt.setFloat("homingStrength", homingStrength); - nbt.setFloat("homingRange", homingRange); nbt.setBoolean("boomerang", boomerang); nbt.setInteger("boomerangDelay", boomerangDelay); - nbt.setBoolean("explosive", explosive); - nbt.setFloat("explosionRadius", explosionRadius); - nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("slowDuration", slowDuration); - nbt.setInteger("slowLevel", slowLevel); - nbt.setInteger("innerColor", innerColor); - nbt.setInteger("outerColor", outerColor); - nbt.setFloat("outerColorWidth", outerColorWidth); - nbt.setFloat("outerColorAlpha", outerColorAlpha); - nbt.setBoolean("outerColorEnabled", outerColorEnabled); - nbt.setFloat("rotationSpeed", rotationSpeed); - nbt.setBoolean("lightningEffect", lightningEffect); - nbt.setFloat("lightningDensity", lightningDensity); - nbt.setFloat("lightningRadius", lightningRadius); nbt.setInteger("anchorPoint", anchorPoint.getId()); + colorData.writeNBT(nbt); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lightningData.writeNBT(nbt); + lifespanData.writeNBT(nbt); } @Override public void readTypeNBT(NBTTagCompound nbt) { - this.speed = nbt.hasKey("speed") ? nbt.getFloat("speed") : 0.6f; this.discRadius = nbt.hasKey("discRadius") ? nbt.getFloat("discRadius") : 1.0f; this.discThickness = nbt.hasKey("discThickness") ? nbt.getFloat("discThickness") : 0.2f; - this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 35.0f; - this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 8.0f; - this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.2f; - this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.15f; - this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); - this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.12f; - this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 18.0f; this.boomerang = nbt.hasKey("boomerang") && nbt.getBoolean("boomerang"); this.boomerangDelay = nbt.hasKey("boomerangDelay") ? nbt.getInteger("boomerangDelay") : 40; - this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); - this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 3.0f; - this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; - this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; - this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; - this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF8800; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; - this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; - this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); - this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 5.0f; - this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); - this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; - this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + colorData.readNBT(nbt); + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lightningData.readNBT(nbt); + lifespanData.readNBT(nbt); } // Getters & Setters - public float getSpeed() { return speed; } - public void setSpeed(float speed) { this.speed = speed; } + public float getSpeed() { return homingData.speed; } + public void setSpeed(float speed) { homingData.speed = speed; } public float getDiscRadius() { return discRadius; } public void setDiscRadius(float discRadius) { this.discRadius = discRadius; } public float getDiscThickness() { return discThickness; } public void setDiscThickness(float discThickness) { this.discThickness = discThickness; } - public float getMaxDistance() { return maxDistance; } - public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } - public int getMaxLifetime() { return maxLifetime; } - public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } - public float getDamage() { return damage; } - public void setDamage(float damage) { this.damage = damage; } - public float getKnockback() { return knockback; } - public void setKnockback(float knockback) { this.knockback = knockback; } - public float getKnockbackUp() { return knockbackUp; } - public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } - public boolean isHoming() { return homing; } - public void setHoming(boolean homing) { this.homing = homing; } - public float getHomingStrength() { return homingStrength; } - public void setHomingStrength(float homingStrength) { this.homingStrength = homingStrength; } - public float getHomingRange() { return homingRange; } - public void setHomingRange(float homingRange) { this.homingRange = homingRange; } + public float getMaxDistance() { return lifespanData.maxDistance; } + public void setMaxDistance(float maxDistance) { lifespanData.maxDistance = maxDistance; } + public int getMaxLifetime() { return lifespanData.maxLifetime; } + public void setMaxLifetime(int maxLifetime) { lifespanData.maxLifetime = maxLifetime; } + public float getDamage() { return combatData.damage; } + public void setDamage(float damage) { combatData.damage = damage; } + public float getKnockback() { return combatData.knockback; } + public void setKnockback(float knockback) { combatData.knockback = knockback; } + public float getKnockbackUp() { return combatData.knockbackUp; } + public void setKnockbackUp(float knockbackUp) { combatData.knockbackUp = knockbackUp; } + public boolean isHoming() { return homingData.homing; } + public void setHoming(boolean homing) { homingData.homing = homing; } + public float getHomingStrength() { return homingData.homingStrength; } + public void setHomingStrength(float homingStrength) { homingData.homingStrength = homingStrength; } + public float getHomingRange() { return homingData.homingRange; } + public void setHomingRange(float homingRange) { homingData.homingRange = homingRange; } public boolean isBoomerang() { return boomerang; } public void setBoomerang(boolean boomerang) { this.boomerang = boomerang; } public int getBoomerangDelay() { return boomerangDelay; } public void setBoomerangDelay(int boomerangDelay) { this.boomerangDelay = boomerangDelay; } - public boolean isExplosive() { return explosive; } - public void setExplosive(boolean explosive) { this.explosive = explosive; } - public float getExplosionRadius() { return explosionRadius; } - public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } - public float getExplosionDamageFalloff() { return explosionDamageFalloff; } - public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } - public int getStunDuration() { return stunDuration; } - public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } - public int getSlowDuration() { return slowDuration; } - public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } - public int getSlowLevel() { return slowLevel; } - public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } - public int getInnerColor() { return innerColor; } - public void setInnerColor(int innerColor) { this.innerColor = innerColor; } - public int getOuterColor() { return outerColor; } - public void setOuterColor(int outerColor) { this.outerColor = outerColor; } - public float getOuterColorWidth() { return outerColorWidth; } - public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } - public float getOuterColorAlpha() { return outerColorAlpha; } - public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } - public boolean isOuterColorEnabled() { return outerColorEnabled; } - public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } - public float getRotationSpeed() { return rotationSpeed; } - public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } - public boolean hasLightningEffect() { return lightningEffect; } - public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } - public float getLightningDensity() { return lightningDensity; } - public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } - public float getLightningRadius() { return lightningRadius; } - public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + public boolean isExplosive() { return combatData.explosive; } + public void setExplosive(boolean explosive) { combatData.explosive = explosive; } + public float getExplosionRadius() { return combatData.explosionRadius; } + public void setExplosionRadius(float explosionRadius) { combatData.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { combatData.explosionDamageFalloff = explosionDamageFalloff; } + public int getInnerColor() { return colorData.innerColor; } + public void setInnerColor(int innerColor) { colorData.innerColor = innerColor; } + public int getOuterColor() { return colorData.outerColor; } + public void setOuterColor(int outerColor) { colorData.outerColor = outerColor; } + public float getOuterColorWidth() { return colorData.outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { colorData.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return colorData.outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { colorData.outerColorAlpha = outerColorAlpha; } + public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { colorData.outerColorEnabled = outerColorEnabled; } + public float getRotationSpeed() { return colorData.rotationSpeed; } + public void setRotationSpeed(float rotationSpeed) { colorData.rotationSpeed = rotationSpeed; } + public boolean hasLightningEffect() { return lightningData.lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { lightningData.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningData.lightningDensity; } + public void setLightningDensity(float lightningDensity) { lightningData.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningData.lightningRadius; } + public void setLightningRadius(float lightningRadius) { lightningData.lightningRadius = lightningRadius; } public AnchorPoint getAnchorPointEnum() { return anchorPoint; } public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } @@ -338,17 +268,13 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public Entity createPreviewEntity(EntityNPCInterface npc) { if (npc == null || npc.worldObj == null) return null; - return EntityAbilityDisc.createPreview( - npc.worldObj, npc, - discRadius, discThickness, innerColor, outerColor, - outerColorEnabled, outerColorWidth, rotationSpeed, - lightningEffect, lightningDensity, lightningRadius, - anchorPoint, windUpTicks - ); + EntityAbilityDisc disc = new EntityAbilityDisc(npc.worldObj); + disc.setupPreview(npc, discRadius, discThickness, colorData, lightningData, anchorPoint, windUpTicks); + return disc; } @Override public int getPreviewActiveDuration() { - return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index c2b452339..049c4c281 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -6,13 +6,20 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; @@ -27,47 +34,16 @@ import noppes.npcs.entity.EntityNPCInterface; */ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { - // Movement properties - private float speed = 0.4f; - private float maxDistance = 25.0f; - private int maxLifetime = 200; - - // Shape properties + // Shape properties (standalone) private float beamWidth = 0.4f; private float headSize = 0.6f; - // Combat properties - private float damage = 10.0f; - private float knockback = 1.5f; - private float knockbackUp = 0.2f; - - // Homing properties - private boolean homing = true; - private float homingStrength = 0.1f; - private float homingRange = 15.0f; - - // Explosion properties - private boolean explosive = false; - private float explosionRadius = 4.0f; - private float explosionDamageFalloff = 0.5f; - - // Effect properties - private int stunDuration = 0; - private int slowDuration = 0; - private int slowLevel = 0; - - // Visual properties - private int innerColor = 0xFFFFFF; - private int outerColor = 0x00AAFF; - private float outerColorWidth = 0.4f; // Additive offset from inner size - private float outerColorAlpha = 0.5f; - private boolean outerColorEnabled = true; - private float rotationSpeed = 6.0f; - - // Lightning effect properties (only on head) - private boolean lightningEffect = false; - private float lightningDensity = 0.15f; - private float lightningRadius = 0.5f; + // Data classes + private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0x00AAFF, true, 0.4f, 0.5f, 6.0f); + private EnergyCombatData combatData = new EnergyCombatData(10.0f, 1.5f, 0.2f, false, 4.0f, 0.5f); + private EnergyHomingData homingData = new EnergyHomingData(0.4f, true, 0.1f, 15.0f); + private EnergyLightningData lightningData = new EnergyLightningData(); + private EnergyLifespanData lifespanData = new EnergyLifespanData(25.0f, 200); // Anchor point for charging position private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; @@ -137,21 +113,16 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { float offsetDist = 1.0f; // Create beam in charging mode - follows NPC based on anchor point during windup - beamEntity = EntityAbilityBeam.createCharging( + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint, offsetDist); + beamEntity = new EntityAbilityBeam( world, npc, target, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, - lockMovement.locksActive(), // Anchored mode during firing - windUpTicks, // Charge duration = windup duration - offsetDist, // Offset distance (used by FRONT anchor) - anchorPoint // Anchor point for charging position - ); + spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, + beamWidth, headSize, + colorData, combatData, homingData, lightningData, lifespanData, + lockMovement.locksActive()); + beamEntity.setupCharging(anchorPoint, windUpTicks, offsetDist); + beamEntity.setEffects(this.effects); world.spawnEntityInWorld(beamEntity); } } @@ -207,120 +178,87 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { @Override public void writeTypeNBT(NBTTagCompound nbt) { - nbt.setFloat("speed", speed); - nbt.setFloat("maxDistance", maxDistance); - nbt.setInteger("maxLifetime", maxLifetime); nbt.setFloat("beamWidth", beamWidth); nbt.setFloat("headSize", headSize); - nbt.setFloat("damage", damage); - nbt.setFloat("knockback", knockback); - nbt.setFloat("knockbackUp", knockbackUp); - nbt.setBoolean("homing", homing); - nbt.setFloat("homingStrength", homingStrength); - nbt.setFloat("homingRange", homingRange); - nbt.setBoolean("explosive", explosive); - nbt.setFloat("explosionRadius", explosionRadius); - nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("slowDuration", slowDuration); - nbt.setInteger("slowLevel", slowLevel); - nbt.setInteger("innerColor", innerColor); - nbt.setInteger("outerColor", outerColor); - nbt.setFloat("outerColorWidth", outerColorWidth); - nbt.setFloat("outerColorAlpha", outerColorAlpha); - nbt.setBoolean("outerColorEnabled", outerColorEnabled); - nbt.setFloat("rotationSpeed", rotationSpeed); - nbt.setBoolean("lightningEffect", lightningEffect); - nbt.setFloat("lightningDensity", lightningDensity); - nbt.setFloat("lightningRadius", lightningRadius); nbt.setInteger("anchorPoint", anchorPoint.getId()); + colorData.writeNBT(nbt); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lightningData.writeNBT(nbt); + lifespanData.writeNBT(nbt); } @Override public void readTypeNBT(NBTTagCompound nbt) { - this.speed = nbt.hasKey("speed") ? nbt.getFloat("speed") : 0.4f; - this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 25.0f; - this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.4f; this.headSize = nbt.hasKey("headSize") ? nbt.getFloat("headSize") : 0.6f; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 10.0f; - this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.5f; - this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.2f; - this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); - this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.1f; - this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 15.0f; - this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); - this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 4.0f; - this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; - this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; - this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; - this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x00AAFF; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; - this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; - this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); - this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 6.0f; - this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); - this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; - this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + colorData.readNBT(nbt); + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lightningData.readNBT(nbt); + lifespanData.readNBT(nbt); } - // Getters & Setters - public float getSpeed() { return speed; } - public void setSpeed(float speed) { this.speed = speed; } - public float getMaxDistance() { return maxDistance; } - public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } - public int getMaxLifetime() { return maxLifetime; } - public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } + // Getters & Setters - Standalone fields public float getBeamWidth() { return beamWidth; } public void setBeamWidth(float beamWidth) { this.beamWidth = beamWidth; } public float getHeadSize() { return headSize; } public void setHeadSize(float headSize) { this.headSize = headSize; } - public float getDamage() { return damage; } - public void setDamage(float damage) { this.damage = damage; } - public float getKnockback() { return knockback; } - public void setKnockback(float knockback) { this.knockback = knockback; } - public float getKnockbackUp() { return knockbackUp; } - public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } - public boolean isHoming() { return homing; } - public void setHoming(boolean homing) { this.homing = homing; } - public float getHomingStrength() { return homingStrength; } - public void setHomingStrength(float homingStrength) { this.homingStrength = homingStrength; } - public float getHomingRange() { return homingRange; } - public void setHomingRange(float homingRange) { this.homingRange = homingRange; } - public boolean isExplosive() { return explosive; } - public void setExplosive(boolean explosive) { this.explosive = explosive; } - public float getExplosionRadius() { return explosionRadius; } - public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } - public float getExplosionDamageFalloff() { return explosionDamageFalloff; } - public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } - public int getStunDuration() { return stunDuration; } - public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } - public int getSlowDuration() { return slowDuration; } - public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } - public int getSlowLevel() { return slowLevel; } - public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } - public int getInnerColor() { return innerColor; } - public void setInnerColor(int innerColor) { this.innerColor = innerColor; } - public int getOuterColor() { return outerColor; } - public void setOuterColor(int outerColor) { this.outerColor = outerColor; } - public float getOuterColorWidth() { return outerColorWidth; } - public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } - public float getOuterColorAlpha() { return outerColorAlpha; } - public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } - public boolean isOuterColorEnabled() { return outerColorEnabled; } - public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } - public float getRotationSpeed() { return rotationSpeed; } - public void setRotationSpeed(float rotationSpeed) { this.rotationSpeed = rotationSpeed; } - public boolean hasLightningEffect() { return lightningEffect; } - public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } - public float getLightningDensity() { return lightningDensity; } - public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } - public float getLightningRadius() { return lightningRadius; } - public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + // Getters & Setters - Color data + public int getInnerColor() { return colorData.innerColor; } + public void setInnerColor(int innerColor) { this.colorData.innerColor = innerColor; } + public int getOuterColor() { return colorData.outerColor; } + public void setOuterColor(int outerColor) { this.colorData.outerColor = outerColor; } + public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.colorData.outerColorEnabled = outerColorEnabled; } + public float getOuterColorWidth() { return colorData.outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.colorData.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return colorData.outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { this.colorData.outerColorAlpha = outerColorAlpha; } + public float getRotationSpeed() { return colorData.rotationSpeed; } + public void setRotationSpeed(float rotationSpeed) { this.colorData.rotationSpeed = rotationSpeed; } + + // Getters & Setters - Combat data + public float getDamage() { return combatData.damage; } + public void setDamage(float damage) { this.combatData.damage = damage; } + public float getKnockback() { return combatData.knockback; } + public void setKnockback(float knockback) { this.combatData.knockback = knockback; } + public float getKnockbackUp() { return combatData.knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.combatData.knockbackUp = knockbackUp; } + public boolean isExplosive() { return combatData.explosive; } + public void setExplosive(boolean explosive) { this.combatData.explosive = explosive; } + public float getExplosionRadius() { return combatData.explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.combatData.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.combatData.explosionDamageFalloff = explosionDamageFalloff; } + + // Getters & Setters - Homing data + public float getSpeed() { return homingData.speed; } + public void setSpeed(float speed) { this.homingData.speed = speed; } + public boolean isHoming() { return homingData.homing; } + public void setHoming(boolean homing) { this.homingData.homing = homing; } + public float getHomingStrength() { return homingData.homingStrength; } + public void setHomingStrength(float homingStrength) { this.homingData.homingStrength = homingStrength; } + public float getHomingRange() { return homingData.homingRange; } + public void setHomingRange(float homingRange) { this.homingData.homingRange = homingRange; } + + // Getters & Setters - Lightning data + public boolean hasLightningEffect() { return lightningData.lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { this.lightningData.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningData.lightningDensity; } + public void setLightningDensity(float lightningDensity) { this.lightningData.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningData.lightningRadius; } + public void setLightningRadius(float lightningRadius) { this.lightningData.lightningRadius = lightningRadius; } + + // Getters & Setters - Lifespan data + public float getMaxDistance() { return lifespanData.maxDistance; } + public void setMaxDistance(float maxDistance) { this.lifespanData.maxDistance = maxDistance; } + public int getMaxLifetime() { return lifespanData.maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.lifespanData.maxLifetime = maxLifetime; } + + // Getters & Setters - Anchor point public AnchorPoint getAnchorPointEnum() { return anchorPoint; } public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } @@ -335,17 +273,13 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public Entity createPreviewEntity(EntityNPCInterface npc) { if (npc == null || npc.worldObj == null) return null; - return EntityAbilityBeam.createPreview( - npc.worldObj, npc, - beamWidth, headSize, innerColor, outerColor, - outerColorEnabled, outerColorWidth, rotationSpeed, - lightningEffect, lightningDensity, lightningRadius, - anchorPoint, windUpTicks, 1.0f - ); + EntityAbilityBeam beam = new EntityAbilityBeam(npc.worldObj); + beam.setupPreview(npc, beamWidth, headSize, colorData, lightningData, anchorPoint, windUpTicks, 1.0f); + return beam; } @Override public int getPreviewActiveDuration() { - return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index c1a94e657..3a25b9aa4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -5,6 +5,10 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityLaser; import net.minecraft.entity.Entity; @@ -28,35 +32,12 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { private float laserWidth = 0.3f; private float expansionSpeed = 3.0f; private int lingerTicks = 8; - private float maxDistance = 40.0f; - private int maxLifetime = 100; - // Combat properties - private float damage = 6.0f; - private float knockback = 0.5f; - private float knockbackUp = 0.05f; - - // Explosion properties - private boolean explosive = false; - private float explosionRadius = 2.0f; - private float explosionDamageFalloff = 0.5f; - - // Effect properties - private int stunDuration = 0; - private int slowDuration = 0; - private int slowLevel = 0; - - // Visual properties - private int innerColor = 0xFFFFFF; - private int outerColor = 0xFF0000; - private float outerColorWidth = 0.4f; // Additive offset from inner width - private float outerColorAlpha = 0.5f; - private boolean outerColorEnabled = true; - - // Lightning effect properties - private boolean lightningEffect = false; - private float lightningDensity = 0.15f; - private float lightningRadius = 0.5f; + // Data classes + private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF0000, true, 0.4f, 0.5f, 0.0f); + private EnergyCombatData combatData = new EnergyCombatData(6.0f, 0.5f, 0.05f, false, 2.0f, 0.5f); + private EnergyLightningData lightningData = new EnergyLightningData(); + private EnergyLifespanData lifespanData = new EnergyLifespanData(40.0f, 100); // Transient state for laser entity (used for movement locking) private transient EntityAbilityLaser laserEntity = null; @@ -97,7 +78,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { @Override public float getTelegraphLength() { - return maxDistance; + return lifespanData.maxDistance; } @Override @@ -119,15 +100,12 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { laserEntity = new EntityAbilityLaser( world, npc, target, spawnX, spawnY, spawnZ, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, - damage, knockback, knockbackUp, - expansionSpeed, lingerTicks, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius + laserWidth, + colorData, combatData, lightningData, lifespanData, + expansionSpeed, lingerTicks ); + laserEntity.setEffects(this.effects); world.spawnEntityInWorld(laserEntity); // Ability stays active until entity dies (prevents firing another while projectile is alive) @@ -165,25 +143,10 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { nbt.setFloat("laserWidth", laserWidth); nbt.setFloat("expansionSpeed", expansionSpeed); nbt.setInteger("lingerTicks", lingerTicks); - nbt.setFloat("maxDistance", maxDistance); - nbt.setInteger("maxLifetime", maxLifetime); - nbt.setFloat("damage", damage); - nbt.setFloat("knockback", knockback); - nbt.setFloat("knockbackUp", knockbackUp); - nbt.setBoolean("explosive", explosive); - nbt.setFloat("explosionRadius", explosionRadius); - nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("slowDuration", slowDuration); - nbt.setInteger("slowLevel", slowLevel); - nbt.setInteger("innerColor", innerColor); - nbt.setInteger("outerColor", outerColor); - nbt.setFloat("outerColorWidth", outerColorWidth); - nbt.setFloat("outerColorAlpha", outerColorAlpha); - nbt.setBoolean("outerColorEnabled", outerColorEnabled); - nbt.setBoolean("lightningEffect", lightningEffect); - nbt.setFloat("lightningDensity", lightningDensity); - nbt.setFloat("lightningRadius", lightningRadius); + colorData.writeNBT(nbt); + combatData.writeNBT(nbt); + lightningData.writeNBT(nbt); + lifespanData.writeNBT(nbt); } @Override @@ -191,90 +154,72 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { this.laserWidth = nbt.hasKey("laserWidth") ? nbt.getFloat("laserWidth") : 0.3f; this.expansionSpeed = nbt.hasKey("expansionSpeed") ? nbt.getFloat("expansionSpeed") : 3.0f; this.lingerTicks = nbt.hasKey("lingerTicks") ? nbt.getInteger("lingerTicks") : 8; - this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 40.0f; - this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 100; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 6.0f; - this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 0.5f; - this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.05f; - this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); - this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 2.0f; - this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; - this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; - this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; - this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; - this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; - this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); - this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); - this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; - this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; + colorData.readNBT(nbt); + combatData.readNBT(nbt); + lightningData.readNBT(nbt); + lifespanData.readNBT(nbt); } - // Getters & Setters + // Getters & Setters - Standalone fields public float getLaserWidth() { return laserWidth; } public void setLaserWidth(float laserWidth) { this.laserWidth = laserWidth; } public float getExpansionSpeed() { return expansionSpeed; } public void setExpansionSpeed(float expansionSpeed) { this.expansionSpeed = expansionSpeed; } public int getLingerTicks() { return lingerTicks; } public void setLingerTicks(int lingerTicks) { this.lingerTicks = lingerTicks; } - public float getMaxDistance() { return maxDistance; } - public void setMaxDistance(float maxDistance) { this.maxDistance = maxDistance; } - public int getMaxLifetime() { return maxLifetime; } - public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } - public float getDamage() { return damage; } - public void setDamage(float damage) { this.damage = damage; } - public float getKnockback() { return knockback; } - public void setKnockback(float knockback) { this.knockback = knockback; } - public float getKnockbackUp() { return knockbackUp; } - public void setKnockbackUp(float knockbackUp) { this.knockbackUp = knockbackUp; } - public boolean isExplosive() { return explosive; } - public void setExplosive(boolean explosive) { this.explosive = explosive; } - public float getExplosionRadius() { return explosionRadius; } - public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } - public float getExplosionDamageFalloff() { return explosionDamageFalloff; } - public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.explosionDamageFalloff = explosionDamageFalloff; } - public int getStunDuration() { return stunDuration; } - public void setStunDuration(int stunDuration) { this.stunDuration = stunDuration; } - public int getSlowDuration() { return slowDuration; } - public void setSlowDuration(int slowDuration) { this.slowDuration = slowDuration; } - public int getSlowLevel() { return slowLevel; } - public void setSlowLevel(int slowLevel) { this.slowLevel = slowLevel; } - public int getInnerColor() { return innerColor; } - public void setInnerColor(int innerColor) { this.innerColor = innerColor; } - public int getOuterColor() { return outerColor; } - public void setOuterColor(int outerColor) { this.outerColor = outerColor; } - public float getOuterColorWidth() { return outerColorWidth; } - public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } - public float getOuterColorAlpha() { return outerColorAlpha; } - public void setOuterColorAlpha(float outerColorAlpha) { this.outerColorAlpha = outerColorAlpha; } - public boolean isOuterColorEnabled() { return outerColorEnabled; } - public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } - public boolean hasLightningEffect() { return lightningEffect; } - public void setLightningEffect(boolean lightningEffect) { this.lightningEffect = lightningEffect; } - public float getLightningDensity() { return lightningDensity; } - public void setLightningDensity(float lightningDensity) { this.lightningDensity = lightningDensity; } - public float getLightningRadius() { return lightningRadius; } - public void setLightningRadius(float lightningRadius) { this.lightningRadius = lightningRadius; } + + // Getters & Setters - Lifespan data + public float getMaxDistance() { return lifespanData.maxDistance; } + public void setMaxDistance(float maxDistance) { this.lifespanData.maxDistance = maxDistance; } + public int getMaxLifetime() { return lifespanData.maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.lifespanData.maxLifetime = maxLifetime; } + + // Getters & Setters - Combat data + public float getDamage() { return combatData.damage; } + public void setDamage(float damage) { this.combatData.damage = damage; } + public float getKnockback() { return combatData.knockback; } + public void setKnockback(float knockback) { this.combatData.knockback = knockback; } + public float getKnockbackUp() { return combatData.knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.combatData.knockbackUp = knockbackUp; } + public boolean isExplosive() { return combatData.explosive; } + public void setExplosive(boolean explosive) { this.combatData.explosive = explosive; } + public float getExplosionRadius() { return combatData.explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.combatData.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.combatData.explosionDamageFalloff = explosionDamageFalloff; } + // Getters & Setters - Color data + public int getInnerColor() { return colorData.innerColor; } + public void setInnerColor(int innerColor) { this.colorData.innerColor = innerColor; } + public int getOuterColor() { return colorData.outerColor; } + public void setOuterColor(int outerColor) { this.colorData.outerColor = outerColor; } + public float getOuterColorWidth() { return colorData.outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { this.colorData.outerColorWidth = outerColorWidth; } + public float getOuterColorAlpha() { return colorData.outerColorAlpha; } + public void setOuterColorAlpha(float outerColorAlpha) { this.colorData.outerColorAlpha = outerColorAlpha; } + public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { this.colorData.outerColorEnabled = outerColorEnabled; } + + // Getters & Setters - Lightning data + public boolean hasLightningEffect() { return lightningData.lightningEffect; } + public void setLightningEffect(boolean lightningEffect) { this.lightningData.lightningEffect = lightningEffect; } + public float getLightningDensity() { return lightningData.lightningDensity; } + public void setLightningDensity(float lightningDensity) { this.lightningData.lightningDensity = lightningDensity; } + public float getLightningRadius() { return lightningData.lightningRadius; } + public void setLightningRadius(float lightningRadius) { this.lightningData.lightningRadius = lightningRadius; } @Override @SideOnly(Side.CLIENT) public Entity createPreviewEntity(EntityNPCInterface npc) { if (npc == null || npc.worldObj == null) return null; - return EntityAbilityLaser.createPreview( - npc.worldObj, npc, - laserWidth, innerColor, outerColor, - outerColorEnabled, outerColorWidth, - expansionSpeed, maxDistance, - lightningEffect, lightningDensity, lightningRadius - ); + EntityAbilityLaser laser = new EntityAbilityLaser(npc.worldObj); + laser.setupPreview(npc, laserWidth, colorData, lightningData, expansionSpeed, lifespanData.maxDistance); + return laser; } @Override public int getPreviewActiveDuration() { - return maxLifetime > 0 ? Math.min(maxLifetime, 60) : 60; + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 60) : 60; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 13c57478a..6c7e8c5b6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -6,14 +6,21 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; @@ -28,49 +35,19 @@ import noppes.npcs.entity.EntityNPCInterface; */ public class AbilityOrb extends Ability implements IAbilityOrb { - // Movement properties - private float orbSpeed = 0.5f; + // Ability-specific properties private float orbSize = 1.0f; - private float maxDistance = 30.0f; // Max distance before orb dies - private int maxLifetime = 200; // Ticks the orb lives - - // Combat properties - private float damage = 7.0f; - private float knockback = 1.0f; - private float knockbackUp = 0.1f; - - // Homing properties - private boolean homing = true; - private float homingStrength = 0.15f; - private float homingRange = 20.0f; - - // Explosion properties - private boolean explosive = false; - private float explosionRadius = 3.0f; - private float explosionDamageFalloff = 0.5f; - - // Effect properties - private int stunDuration = 0; - private int slowDuration = 0; - private int slowLevel = 0; - - // Visual properties - private int innerColor = 0xFFFFFF; // White core - private int outerColor = 0x8888FF; // Light blue glow - private float outerColorWidth = 0.4f; // Additive offset from inner size - private float outerColorAlpha = 0.5f; - private boolean outerColorEnabled = true; // Whether to render outer glow - private float rotationSpeed = 4.0f; // Degrees per tick - - // Lightning effect properties - private boolean lightningEffect = false; - private float lightningDensity = 0.15f; // Bolts spawned per tick (0.15 = ~15% chance per frame) - private float lightningRadius = 0.5f; // Max distance lightning arcs - scales with orbSize - private int lightningFadeTime = 6; // Ticks before lightning fades out // Anchor point for charging position private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; + // Data classes for energy properties + public final EnergyColorData colorData = new EnergyColorData(); + public final EnergyCombatData combatData = new EnergyCombatData(); + public final EnergyHomingData homingData = new EnergyHomingData(); + public final EnergyLightningData lightningData = new EnergyLightningData(); + public final EnergyLifespanData lifespanData = new EnergyLifespanData(); + // Transient state for orb entity (used during windup charging) private transient EntityAbilityOrb orbEntity = null; @@ -133,19 +110,14 @@ public class AbilityOrb extends Ability implements IAbilityOrb { // Spawn orb in charging mode on first tick of windup if (tick == 1) { // Create orb in charging mode - follows NPC based on anchor point during windup - orbEntity = EntityAbilityOrb.createCharging( + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint); + orbEntity = new EntityAbilityOrb( world, npc, target, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - orbSpeed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, lightningFadeTime, - anchorPoint, // Anchor point for charging position - windUpTicks // Charge duration = windup duration - ); + spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, orbSize, + colorData, combatData, homingData, lightningData, lifespanData); + orbEntity.setupCharging(anchorPoint, windUpTicks); + orbEntity.setEffects(this.effects); world.spawnEntityInWorld(orbEntity); } } @@ -202,73 +174,39 @@ public class AbilityOrb extends Ability implements IAbilityOrb { @Override public void writeTypeNBT(NBTTagCompound nbt) { - nbt.setFloat("orbSpeed", orbSpeed); nbt.setFloat("orbSize", orbSize); - nbt.setFloat("maxDistance", maxDistance); - nbt.setInteger("maxLifetime", maxLifetime); - nbt.setFloat("damage", damage); - nbt.setFloat("knockback", knockback); - nbt.setFloat("knockbackUp", knockbackUp); - nbt.setBoolean("homing", homing); - nbt.setFloat("homingStrength", homingStrength); - nbt.setFloat("homingRange", homingRange); - nbt.setBoolean("explosive", explosive); - nbt.setFloat("explosionRadius", explosionRadius); - nbt.setFloat("explosionDamageFalloff", explosionDamageFalloff); - nbt.setInteger("stunDuration", stunDuration); - nbt.setInteger("slowDuration", slowDuration); - nbt.setInteger("slowLevel", slowLevel); - nbt.setInteger("innerColor", innerColor); - nbt.setInteger("outerColor", outerColor); - nbt.setFloat("outerColorWidth", outerColorWidth); - nbt.setFloat("outerColorAlpha", outerColorAlpha); - nbt.setBoolean("outerColorEnabled", outerColorEnabled); - nbt.setFloat("rotationSpeed", rotationSpeed); - nbt.setBoolean("lightningEffect", lightningEffect); - nbt.setFloat("lightningDensity", lightningDensity); - nbt.setFloat("lightningRadius", lightningRadius); - nbt.setInteger("lightningFadeTime", lightningFadeTime); nbt.setInteger("anchorPoint", anchorPoint.getId()); + colorData.writeNBT(nbt); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lightningData.writeNBT(nbt); + lifespanData.writeNBT(nbt); + // Backward compat: old key was "orbSpeed" + nbt.setFloat("orbSpeed", homingData.speed); } @Override public void readTypeNBT(NBTTagCompound nbt) { - this.orbSpeed = nbt.hasKey("orbSpeed") ? nbt.getFloat("orbSpeed") : 0.5f; this.orbSize = nbt.hasKey("orbSize") ? nbt.getFloat("orbSize") : 1.0f; - this.maxDistance = nbt.hasKey("maxDistance") ? nbt.getFloat("maxDistance") : 30.0f; - this.maxLifetime = nbt.hasKey("maxLifetime") ? nbt.getInteger("maxLifetime") : 200; - this.damage = nbt.hasKey("damage") ? nbt.getFloat("damage") : 7.0f; - this.knockback = nbt.hasKey("knockback") ? nbt.getFloat("knockback") : 1.0f; - this.knockbackUp = nbt.hasKey("knockbackUp") ? nbt.getFloat("knockbackUp") : 0.1f; - this.homing = !nbt.hasKey("homing") || nbt.getBoolean("homing"); - this.homingStrength = nbt.hasKey("homingStrength") ? nbt.getFloat("homingStrength") : 0.15f; - this.homingRange = nbt.hasKey("homingRange") ? nbt.getFloat("homingRange") : 20.0f; - this.explosive = nbt.hasKey("explosive") && nbt.getBoolean("explosive"); - this.explosionRadius = nbt.hasKey("explosionRadius") ? nbt.getFloat("explosionRadius") : 3.0f; - this.explosionDamageFalloff = nbt.hasKey("explosionDamageFalloff") ? nbt.getFloat("explosionDamageFalloff") : 0.5f; - this.stunDuration = nbt.hasKey("stunDuration") ? nbt.getInteger("stunDuration") : 0; - this.slowDuration = nbt.hasKey("slowDuration") ? nbt.getInteger("slowDuration") : 0; - this.slowLevel = nbt.hasKey("slowLevel") ? nbt.getInteger("slowLevel") : 0; - this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFFFFFF; - this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0x8888FF; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 0.4f; - this.outerColorAlpha = nbt.hasKey("outerColorAlpha") ? nbt.getFloat("outerColorAlpha") : 0.5f; - this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); - this.rotationSpeed = nbt.hasKey("rotationSpeed") ? nbt.getFloat("rotationSpeed") : 4.0f; - this.lightningEffect = nbt.hasKey("lightningEffect") && nbt.getBoolean("lightningEffect"); - this.lightningDensity = nbt.hasKey("lightningDensity") ? nbt.getFloat("lightningDensity") : 0.15f; - this.lightningRadius = nbt.hasKey("lightningRadius") ? nbt.getFloat("lightningRadius") : 0.5f; - this.lightningFadeTime = nbt.hasKey("lightningFadeTime") ? nbt.getInteger("lightningFadeTime") : 6; this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + colorData.readNBT(nbt); + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lightningData.readNBT(nbt); + lifespanData.readNBT(nbt); + // Backward compat: old key was "orbSpeed" + if (nbt.hasKey("orbSpeed")) { + homingData.speed = nbt.getFloat("orbSpeed"); + } } // Getters & Setters public float getOrbSpeed() { - return orbSpeed; + return homingData.speed; } public void setOrbSpeed(float orbSpeed) { - this.orbSpeed = orbSpeed; + homingData.speed = orbSpeed; } public float getOrbSize() { @@ -280,195 +218,171 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } public float getMaxDistance() { - return maxDistance; + return lifespanData.maxDistance; } public void setMaxDistance(float maxDistance) { - this.maxDistance = maxDistance; + lifespanData.maxDistance = maxDistance; } public int getMaxLifetime() { - return maxLifetime; + return lifespanData.maxLifetime; } public void setMaxLifetime(int maxLifetime) { - this.maxLifetime = maxLifetime; + lifespanData.maxLifetime = maxLifetime; } public float getDamage() { - return damage; + return combatData.damage; } public void setDamage(float damage) { - this.damage = damage; + combatData.damage = damage; } public float getKnockback() { - return knockback; + return combatData.knockback; } public void setKnockback(float knockback) { - this.knockback = knockback; + combatData.knockback = knockback; } public float getKnockbackUp() { - return knockbackUp; + return combatData.knockbackUp; } public void setKnockbackUp(float knockbackUp) { - this.knockbackUp = knockbackUp; + combatData.knockbackUp = knockbackUp; } public boolean isHoming() { - return homing; + return homingData.homing; } public void setHoming(boolean homing) { - this.homing = homing; + homingData.homing = homing; } public float getHomingStrength() { - return homingStrength; + return homingData.homingStrength; } public void setHomingStrength(float homingStrength) { - this.homingStrength = homingStrength; + homingData.homingStrength = homingStrength; } public float getHomingRange() { - return homingRange; + return homingData.homingRange; } public void setHomingRange(float homingRange) { - this.homingRange = homingRange; + homingData.homingRange = homingRange; } public boolean isExplosive() { - return explosive; + return combatData.explosive; } public void setExplosive(boolean explosive) { - this.explosive = explosive; + combatData.explosive = explosive; } public float getExplosionRadius() { - return explosionRadius; + return combatData.explosionRadius; } public void setExplosionRadius(float explosionRadius) { - this.explosionRadius = explosionRadius; + combatData.explosionRadius = explosionRadius; } public float getExplosionDamageFalloff() { - return explosionDamageFalloff; + return combatData.explosionDamageFalloff; } public void setExplosionDamageFalloff(float explosionDamageFalloff) { - this.explosionDamageFalloff = explosionDamageFalloff; - } - - public int getStunDuration() { - return stunDuration; - } - - public void setStunDuration(int stunDuration) { - this.stunDuration = stunDuration; - } - - public int getSlowDuration() { - return slowDuration; - } - - public void setSlowDuration(int slowDuration) { - this.slowDuration = slowDuration; - } - - public int getSlowLevel() { - return slowLevel; - } - - public void setSlowLevel(int slowLevel) { - this.slowLevel = slowLevel; + combatData.explosionDamageFalloff = explosionDamageFalloff; } public int getInnerColor() { - return innerColor; + return colorData.innerColor; } public void setInnerColor(int innerColor) { - this.innerColor = innerColor; + colorData.innerColor = innerColor; } public int getOuterColor() { - return outerColor; + return colorData.outerColor; } public void setOuterColor(int outerColor) { - this.outerColor = outerColor; + colorData.outerColor = outerColor; } public float getOuterColorWidth() { - return outerColorWidth; + return colorData.outerColorWidth; } public void setOuterColorWidth(float outerColorWidth) { - this.outerColorWidth = outerColorWidth; + colorData.outerColorWidth = outerColorWidth; } public float getOuterColorAlpha() { - return outerColorAlpha; + return colorData.outerColorAlpha; } public void setOuterColorAlpha(float outerColorAlpha) { - this.outerColorAlpha = outerColorAlpha; + colorData.outerColorAlpha = outerColorAlpha; } public boolean isOuterColorEnabled() { - return outerColorEnabled; + return colorData.outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { - this.outerColorEnabled = outerColorEnabled; + colorData.outerColorEnabled = outerColorEnabled; } public float getRotationSpeed() { - return rotationSpeed; + return colorData.rotationSpeed; } public void setRotationSpeed(float rotationSpeed) { - this.rotationSpeed = rotationSpeed; + colorData.rotationSpeed = rotationSpeed; } public boolean hasLightningEffect() { - return lightningEffect; + return lightningData.lightningEffect; } public void setLightningEffect(boolean lightningEffect) { - this.lightningEffect = lightningEffect; + lightningData.lightningEffect = lightningEffect; } public float getLightningDensity() { - return lightningDensity; + return lightningData.lightningDensity; } public void setLightningDensity(float lightningDensity) { - this.lightningDensity = lightningDensity; + lightningData.lightningDensity = lightningDensity; } public float getLightningRadius() { - return lightningRadius; + return lightningData.lightningRadius; } public void setLightningRadius(float lightningRadius) { - this.lightningRadius = lightningRadius; + lightningData.lightningRadius = lightningRadius; } public int getLightningFadeTime() { - return lightningFadeTime; + return lightningData.lightningFadeTime; } public void setLightningFadeTime(int lightningFadeTime) { - this.lightningFadeTime = lightningFadeTime; + lightningData.lightningFadeTime = lightningFadeTime; } public AnchorPoint getAnchorPointEnum() { @@ -493,17 +407,13 @@ public class AbilityOrb extends Ability implements IAbilityOrb { public Entity createPreviewEntity(EntityNPCInterface npc) { if (npc == null || npc.worldObj == null) return null; - return EntityAbilityOrb.createPreview( - npc.worldObj, npc, - orbSize, innerColor, outerColor, - outerColorEnabled, outerColorWidth, rotationSpeed, - lightningEffect, lightningDensity, lightningRadius, lightningFadeTime, - anchorPoint, windUpTicks - ); + EntityAbilityOrb orb = new EntityAbilityOrb(npc.worldObj); + orb.setupPreview(npc, orbSize, colorData, lightningData, anchorPoint, windUpTicks); + return orb; } @Override public int getPreviewActiveDuration() { - return maxLifetime > 0 ? Math.min(maxLifetime, 100) : 100; + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index a46100c96..46faef9c9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -58,7 +58,7 @@ public class AbilitySlam extends Ability implements IAbilitySlam { this.maxRange = 15.0f; this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "mob.irongolem.throw"; - this.activeSound = "random.explode"; + this.activeSound = ""; } @Override @@ -278,6 +278,9 @@ public class AbilitySlam extends Ability implements IAbilitySlam { if (world.isRemote) return; + // Play slam impact sound on landing + world.playSoundAtEntity(npc, "random.explode", 1.0f, 1.0f); + // Find all entities in radius @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABBExcludingEntity( diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index d2dced201..976d9e44e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -41,10 +42,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { private boolean lockOnTarget = false; // Visual properties - private int innerColor = 0xFF6600; - private int outerColor = 0xFF0000; - private float outerColorWidth = 1.8f; - private boolean outerColorEnabled = true; + private EnergyColorData colorData = new EnergyColorData(0xFF6600, 0xFF0000, true, 1.8f, 0.5f, 0.0f); // Runtime state (transient) private transient EntityAbilitySweeper activeEntity = null; @@ -94,7 +92,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { // Spawn the entity that handles BOTH visuals AND damage activeEntity = new EntityAbilitySweeper(world, npc, target, beamLength, beamWidth, beamHeight, - innerColor, outerColor, outerColorEnabled, outerColorWidth, + colorData, sweepSpeed, numberOfRotations, damage, damageInterval, piercing, lockOnTarget); @@ -163,10 +161,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { nbt.setFloat("sweepSpeed", sweepSpeed); nbt.setInteger("numberOfRotations", numberOfRotations); nbt.setBoolean("lockOnTarget", lockOnTarget); - nbt.setInteger("innerColor", innerColor); - nbt.setInteger("outerColor", outerColor); - nbt.setFloat("outerColorWidth", outerColorWidth); - nbt.setBoolean("outerColorEnabled", outerColorEnabled); + colorData.writeNBT(nbt); } @Override @@ -180,10 +175,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { this.sweepSpeed = nbt.hasKey("sweepSpeed") ? nbt.getFloat("sweepSpeed") : 3.0f; this.numberOfRotations = nbt.hasKey("numberOfRotations") ? nbt.getInteger("numberOfRotations") : 2; this.lockOnTarget = nbt.hasKey("lockOnTarget") && nbt.getBoolean("lockOnTarget"); - this.innerColor = nbt.hasKey("innerColor") ? nbt.getInteger("innerColor") : 0xFF6600; - this.outerColor = nbt.hasKey("outerColor") ? nbt.getInteger("outerColor") : 0xFF0000; - this.outerColorWidth = nbt.hasKey("outerColorWidth") ? nbt.getFloat("outerColorWidth") : 1.8f; - this.outerColorEnabled = !nbt.hasKey("outerColorEnabled") || nbt.getBoolean("outerColorEnabled"); + colorData.readNBT(nbt); } // Getters & Setters @@ -205,12 +197,12 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { public void setNumberOfRotations(int numberOfRotations) { this.numberOfRotations = numberOfRotations; } public boolean isLockOnTarget() { return lockOnTarget; } public void setLockOnTarget(boolean lockOnTarget) { this.lockOnTarget = lockOnTarget; } - public int getInnerColor() { return innerColor; } - public void setInnerColor(int innerColor) { this.innerColor = innerColor; } - public int getOuterColor() { return outerColor; } - public void setOuterColor(int outerColor) { this.outerColor = outerColor; } - public float getOuterColorWidth() { return outerColorWidth; } - public void setOuterColorWidth(float outerColorWidth) { this.outerColorWidth = outerColorWidth; } - public boolean isOuterColorEnabled() { return outerColorEnabled; } - public void setOuterColorEnabled(boolean outerColorEnabled) { this.outerColorEnabled = outerColorEnabled; } + public int getInnerColor() { return colorData.innerColor; } + public void setInnerColor(int innerColor) { colorData.innerColor = innerColor; } + public int getOuterColor() { return colorData.outerColor; } + public void setOuterColor(int outerColor) { colorData.outerColor = outerColor; } + public float getOuterColorWidth() { return colorData.outerColorWidth; } + public void setOuterColorWidth(float outerColorWidth) { colorData.outerColorWidth = outerColorWidth; } + public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } + public void setOuterColorEnabled(boolean outerColorEnabled) { colorData.outerColorEnabled = outerColorEnabled; } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index c841ee0f9..ca600b84f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -1,6 +1,11 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -103,79 +108,27 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } /** - * Full constructor with all parameters (no lightning). - */ - public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime) { - this(world, owner, target, x, y, z, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - false, 0.15f, 0.5f); - } - - /** - * Full constructor with all parameters including lightning. - */ - public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius) { - this(world, owner, target, x, y, z, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, - true); // Default to anchored mode - } - - /** - * Full constructor with all parameters including lightning and anchored mode. + * Full constructor with all parameters using data classes. * @param anchoredMode If true, origin follows owner and tail orb is rendered. * If false, beam is free-moving with trailing length (no tail orb). */ public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, + float beamWidth, float headSize, + EnergyColorData color, EnergyCombatData combat, + EnergyHomingData homing, EnergyLightningData lightning, + EnergyLifespanData lifespan, boolean anchoredMode) { super(world); - // Initialize base properties with lightning - initProjectile(owner, target, x, y, z, - headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, 6); + // Initialize base properties via parent + initProjectile(owner, target, x, y, z, headSize, color, combat, lightning, lifespan); - // Beam-specific properties - this.speed = speed; - this.homing = homing; - this.homingStrength = homingStrength; - this.homingRange = homingRange; + // Beam-specific properties from homing data + this.speed = homing.speed; + this.homing = homing.homing; + this.homingStrength = homing.homingStrength; + this.homingRange = homing.homingRange; this.beamWidth = beamWidth; this.headSize = headSize; @@ -195,13 +148,13 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { trailPoints.add(Vec3.createVectorHelper(0, 0, 0)); if (DEBUG_LOGGING && !world.isRemote) { - LogWriter.info("[Beam] Created at origin " + x + ", " + y + ", " + z + " maxDist=" + maxDistance); + LogWriter.info("[Beam] Created at origin " + x + ", " + y + ", " + z + " maxDist=" + lifespan.maxDistance); } // Calculate initial velocity toward target if (target != null) { double dx = target.posX - x; - double dy = (target.posY + target.height * 0.5) - y; + double dy = (target.posY + target.getEyeHeight()) - y; double dz = target.posZ - z; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -218,118 +171,69 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } - /** - * Create a beam in charging mode (for windup phase). - * The beam will grow from 0 to headSize over chargeDuration ticks. - * Position follows the owner based on anchor point. - */ - public static EntityAbilityBeam createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, - float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, - boolean anchoredMode, int chargeDuration, float chargeOffsetDistance, - AnchorPoint anchorPoint) { - // Calculate initial position based on anchor point - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint, chargeOffsetDistance); - double spawnX = spawnPos.xCoord; - double spawnY = spawnPos.yCoord; - double spawnZ = spawnPos.zCoord; - - EntityAbilityBeam beam = new EntityAbilityBeam( - world, owner, target, - spawnX, spawnY, spawnZ, - beamWidth, headSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, - anchoredMode); - - // Set charging state (uses data watcher for client sync) - beam.setCharging(true); - beam.chargeDuration = chargeDuration; - beam.chargeTick = 0; - beam.chargeOffsetDistance = chargeOffsetDistance; - beam.anchorPoint = anchorPoint; - - // Non-anchored beams have fading trail (comet effect) - beam.fadeTrail = !anchoredMode; - - // Clear motion while charging - beam.motionX = 0; - beam.motionY = 0; - beam.motionZ = 0; - - return beam; + public void setupCharging(AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { + setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.chargeOffsetDistance = chargeOffsetDistance; + this.anchorPoint = anchorPoint; + this.fadeTrail = !attachedToOwner; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } - /** - * Create a beam in preview mode for GUI display. - * Follows anchor point and animations like in the real game. - * Can be fired when transitioning to active phase. - */ - public static EntityAbilityBeam createPreview(World world, EntityNPCInterface owner, - float beamWidth, float headSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, - boolean lightningEffect, float lightningDensity, float lightningRadius, - AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { - EntityAbilityBeam beam = new EntityAbilityBeam(world); - beam.setPreviewMode(true); - beam.setPreviewOwner(owner); + public void setupPreview(EntityNPCInterface owner, float beamWidth, float headSize, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { + this.setPreviewMode(true); + this.setPreviewOwner(owner); // Set visual properties - beam.beamWidth = beamWidth; - beam.headSize = headSize; - beam.size = headSize; - beam.innerColor = innerColor; - beam.outerColor = outerColor; - beam.outerColorEnabled = outerColorEnabled; - beam.outerColorWidth = outerColorWidth; - beam.rotationSpeed = rotationSpeed; - beam.lightningEffect = lightningEffect; - beam.lightningDensity = lightningDensity; - beam.lightningRadius = lightningRadius; + this.beamWidth = beamWidth; + this.headSize = headSize; + this.size = headSize; + this.innerColor = color.innerColor; + this.outerColor = color.outerColor; + this.outerColorEnabled = color.outerColorEnabled; + this.outerColorWidth = color.outerColorWidth; + this.outerColorAlpha = color.outerColorAlpha; + this.rotationSpeed = color.rotationSpeed; + this.lightningEffect = lightning.lightningEffect; + this.lightningDensity = lightning.lightningDensity; + this.lightningRadius = lightning.lightningRadius; // Set charging state - beam.setCharging(true); - beam.chargeDuration = chargeDuration; - beam.chargeTick = 0; - beam.chargeOffsetDistance = chargeOffsetDistance; - beam.anchorPoint = anchorPoint; + this.setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.chargeOffsetDistance = chargeOffsetDistance; + this.anchorPoint = anchorPoint; // Initial position at anchor point Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint, chargeOffsetDistance); - beam.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); - beam.prevPosX = pos.xCoord; - beam.prevPosY = pos.yCoord; - beam.prevPosZ = pos.zCoord; - beam.startX = pos.xCoord; - beam.startY = pos.yCoord; - beam.startZ = pos.zCoord; + this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + this.prevPosX = pos.xCoord; + this.prevPosY = pos.yCoord; + this.prevPosZ = pos.zCoord; + this.startX = pos.xCoord; + this.startY = pos.yCoord; + this.startZ = pos.zCoord; // Initialize head offsets - beam.headOffsetX = 0; - beam.headOffsetY = 0; - beam.headOffsetZ = 0; - beam.prevHeadOffsetX = 0; - beam.prevHeadOffsetY = 0; - beam.prevHeadOffsetZ = 0; + this.headOffsetX = 0; + this.headOffsetY = 0; + this.headOffsetZ = 0; + this.prevHeadOffsetX = 0; + this.prevHeadOffsetY = 0; + this.prevHeadOffsetZ = 0; // Attach to owner for anchor following - beam.attachedToOwner = true; - beam.renderTailOrb = true; + this.attachedToOwner = true; + this.renderTailOrb = true; - // Clear motion while charging - beam.motionX = 0; - beam.motionY = 0; - beam.motionZ = 0; - - return beam; + // Clear motion + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } /** @@ -406,7 +310,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { if (target != null) { double dx = target.posX - startX; - double dy = (target.posY + target.height * 0.5) - startY; + double dy = (target.posY + target.getEyeHeight()) - startY; double dz = target.posZ - startZ; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -660,7 +564,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { double headWorldZ = startZ + headOffsetZ; double dx = target.posX - headWorldX; - double dy = (target.posY + target.height * 0.5) - headWorldY; + double dy = (target.posY + target.getEyeHeight()) - headWorldY; double dz = target.posZ - headWorldZ; double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index e3896a839..20a43a98a 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -1,6 +1,11 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -81,56 +86,25 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { } /** - * Full constructor with all parameters (no lightning). + * Full constructor with all parameters using data classes. */ public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean boomerang, int boomerangDelay, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime) { - this(world, owner, target, x, y, z, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - boomerang, boomerangDelay, explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - false, 0.15f, 0.5f); - } - - /** - * Full constructor with all parameters including lightning. - */ - public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean boomerang, int boomerangDelay, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius) { + float discRadius, float discThickness, + EnergyColorData color, EnergyCombatData combat, + EnergyHomingData homing, EnergyLightningData lightning, + EnergyLifespanData lifespan, + boolean boomerang, int boomerangDelay) { super(world); - // Initialize base properties with lightning (use discRadius as size for base) - initProjectile(owner, target, x, y, z, - discRadius, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, 6); + // Initialize base properties + initProjectile(owner, target, x, y, z, discRadius, color, combat, lightning, lifespan); - // Disc-specific properties - this.speed = speed; - this.homing = homing; - this.homingStrength = homingStrength; - this.homingRange = homingRange; + // Disc-specific properties from homing data + this.speed = homing.speed; + this.homing = homing.homing; + this.homingStrength = homing.homingStrength; + this.homingRange = homing.homingRange; this.boomerang = boomerang; this.boomerangDelay = boomerangDelay; @@ -141,7 +115,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Calculate initial velocity toward target if (target != null) { double dx = target.posX - x; - double dy = (target.posY + target.height * 0.5) - y; + double dy = (target.posY + target.getEyeHeight()) - y; double dz = target.posZ - z; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -159,113 +133,73 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { } /** - * Create a disc in charging mode (for windup phase). + * Setup this disc in charging mode (for windup phase). * The disc will grow from 0 to discRadius over chargeDuration ticks. * Position follows the owner based on anchor point. */ - public static EntityAbilityDisc createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, - float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean boomerang, int boomerangDelay, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, - AnchorPoint anchorPoint, int chargeDuration) { - // Calculate initial position based on anchor point - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); - double spawnX = spawnPos.xCoord; - double spawnY = spawnPos.yCoord; - double spawnZ = spawnPos.zCoord; - - EntityAbilityDisc disc = new EntityAbilityDisc( - world, owner, target, - spawnX, spawnY, spawnZ, - discRadius, discThickness, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - boomerang, boomerangDelay, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius); - - // Set charging state (uses data watcher for client sync) - disc.setCharging(true); - disc.chargeDuration = chargeDuration; - disc.chargeTick = 0; - disc.anchorPoint = anchorPoint; - - // Store target size and start at 0 for grow effect - disc.targetDiscRadius = disc.discRadius; - disc.targetDiscThickness = disc.discThickness; - disc.discRadius = 0.01f; // Start very small - disc.discThickness = 0.01f; - disc.size = 0.01f; // Base size used for rendering - disc.renderCurrentSize = 0.01f; - disc.prevRenderSize = 0.01f; - - // Clear motion while charging - disc.motionX = 0; - disc.motionY = 0; - disc.motionZ = 0; - - return disc; + public void setupCharging(AnchorPoint anchorPoint, int chargeDuration) { + setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.anchorPoint = anchorPoint; + this.targetDiscRadius = this.discRadius; + this.targetDiscThickness = this.discThickness; + this.discRadius = 0.01f; + this.discThickness = 0.01f; + this.size = 0.01f; + this.renderCurrentSize = 0.01f; + this.prevRenderSize = 0.01f; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } /** - * Create a disc in preview mode for GUI display. + * Setup this disc in preview mode for GUI display. * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public static EntityAbilityDisc createPreview(World world, EntityNPCInterface owner, - float discRadius, float discThickness, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, - boolean lightningEffect, float lightningDensity, float lightningRadius, - AnchorPoint anchorPoint, int chargeDuration) { - EntityAbilityDisc disc = new EntityAbilityDisc(world); - disc.setPreviewMode(true); - disc.setPreviewOwner(owner); + public void setupPreview(EntityNPCInterface owner, float discRadius, float discThickness, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration) { + this.setPreviewMode(true); + this.setPreviewOwner(owner); // Set visual properties - disc.innerColor = innerColor; - disc.outerColor = outerColor; - disc.outerColorEnabled = outerColorEnabled; - disc.outerColorWidth = outerColorWidth; - disc.rotationSpeed = rotationSpeed; - disc.lightningEffect = lightningEffect; - disc.lightningDensity = lightningDensity; - disc.lightningRadius = lightningRadius; + this.innerColor = color.innerColor; + this.outerColor = color.outerColor; + this.outerColorEnabled = color.outerColorEnabled; + this.outerColorWidth = color.outerColorWidth; + this.rotationSpeed = color.rotationSpeed; + this.lightningEffect = lightning.lightningEffect; + this.lightningDensity = lightning.lightningDensity; + this.lightningRadius = lightning.lightningRadius; // Set charging state - disc.setCharging(true); - disc.chargeDuration = chargeDuration; - disc.chargeTick = 0; - disc.anchorPoint = anchorPoint; + this.setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.anchorPoint = anchorPoint; // Store target size and start at 0 for grow effect - disc.targetDiscRadius = discRadius; - disc.targetDiscThickness = discThickness; - disc.discRadius = 0.01f; - disc.discThickness = 0.01f; - disc.size = 0.01f; + this.targetDiscRadius = discRadius; + this.targetDiscThickness = discThickness; + this.discRadius = 0.01f; + this.discThickness = 0.01f; + this.size = 0.01f; // Initial position at anchor point Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); - disc.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); - disc.prevPosX = pos.xCoord; - disc.prevPosY = pos.yCoord; - disc.prevPosZ = pos.zCoord; - disc.startX = pos.xCoord; - disc.startY = pos.yCoord; - disc.startZ = pos.zCoord; + this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + this.prevPosX = pos.xCoord; + this.prevPosY = pos.yCoord; + this.prevPosZ = pos.zCoord; + this.startX = pos.xCoord; + this.startY = pos.yCoord; + this.startZ = pos.zCoord; - // Clear motion while charging - disc.motionX = 0; - disc.motionY = 0; - disc.motionZ = 0; - - return disc; + // Clear motion + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } /** @@ -320,7 +254,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { if (target != null) { double dx = target.posX - posX; - double dy = (target.posY + target.height * 0.5) - posY; + double dy = (target.posY + target.getEyeHeight()) - posY; double dz = target.posZ - posZ; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -447,7 +381,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { if (target == null || !target.isEntityAlive()) return; double dx = target.posX - posX; - double dy = (target.posY + target.height * 0.5) - posY; + double dy = (target.posY + target.getEyeHeight()) - posY; double dz = target.posZ - posZ; double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index ec208e2cf..c45a6ee9e 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -1,5 +1,9 @@ package kamkeel.npcs.entity; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -45,48 +49,19 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { } /** - * Full constructor with all parameters (no lightning). + * Full constructor with all parameters using data classes. */ public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, double x, double y, double z, - float laserWidth, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, - float damage, float knockback, float knockbackUp, - float expansionSpeed, int lingerTicks, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime) { - this(world, owner, target, x, y, z, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, - damage, knockback, knockbackUp, expansionSpeed, lingerTicks, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - false, 0.15f, 0.5f); - } - - /** - * Full constructor with all parameters including lightning. - */ - public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float laserWidth, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, - float damage, float knockback, float knockbackUp, - float expansionSpeed, int lingerTicks, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius) { + float laserWidth, + EnergyColorData color, EnergyCombatData combat, + EnergyLightningData lightning, EnergyLifespanData lifespan, + float expansionSpeed, int lingerTicks) { super(world); - // Initialize base properties with lightning - initProjectile(owner, target, x, y, z, - laserWidth, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, 0.0f, // No rotation for laser - damage, knockback, knockbackUp, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, 6); + // Initialize base properties (laser doesn't rotate) + initProjectile(owner, target, x, y, z, laserWidth, color, combat, lightning, lifespan); + this.rotationSpeed = 0.0f; // Laser-specific properties this.laserWidth = laserWidth; @@ -96,7 +71,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Calculate direction toward target or forward if (target != null) { double dx = target.posX - x; - double dy = (target.posY + target.height * 0.5) - y; + double dy = (target.posY + target.getEyeHeight()) - y; double dz = target.posZ - z; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -349,54 +324,48 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { } /** - * Create a laser in preview mode for GUI display. + * Setup this laser in preview mode for GUI display. * Laser doesn't have charging state - spawns at active phase and fires immediately. */ - public static EntityAbilityLaser createPreview(World world, EntityNPCInterface owner, - float laserWidth, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, - float expansionSpeed, float maxDistance, - boolean lightningEffect, float lightningDensity, float lightningRadius) { - EntityAbilityLaser laser = new EntityAbilityLaser(world); - laser.setPreviewMode(true); - laser.setPreviewOwner(owner); + public void setupPreview(EntityNPCInterface owner, float laserWidth, EnergyColorData color, + EnergyLightningData lightning, float expansionSpeed, float maxDistance) { + this.setPreviewMode(true); + this.setPreviewOwner(owner); // Set visual properties - laser.laserWidth = laserWidth; - laser.size = laserWidth; - laser.innerColor = innerColor; - laser.outerColor = outerColor; - laser.outerColorEnabled = outerColorEnabled; - laser.outerColorWidth = outerColorWidth; - laser.expansionSpeed = expansionSpeed; - laser.maxDistance = Math.min(maxDistance, 5.0f); // Limit for GUI preview - laser.lightningEffect = lightningEffect; - laser.lightningDensity = lightningDensity; - laser.lightningRadius = lightningRadius; + this.laserWidth = laserWidth; + this.size = laserWidth; + this.innerColor = color.innerColor; + this.outerColor = color.outerColor; + this.outerColorEnabled = color.outerColorEnabled; + this.outerColorWidth = color.outerColorWidth; + this.expansionSpeed = expansionSpeed; + this.maxDistance = Math.min(maxDistance, 5.0f); // Limit for GUI preview + this.lightningEffect = lightning.lightningEffect; + this.lightningDensity = lightning.lightningDensity; + this.lightningRadius = lightning.lightningRadius; // Position at chest height double x = owner.posX; double y = owner.posY + owner.height * 0.7; double z = owner.posZ; - laser.setPosition(x, y, z); - laser.prevPosX = x; - laser.prevPosY = y; - laser.prevPosZ = z; - laser.startX = x; - laser.startY = y; - laser.startZ = z; + this.setPosition(x, y, z); + this.prevPosX = x; + this.prevPosY = y; + this.prevPosZ = z; + this.startX = x; + this.startY = y; + this.startZ = z; // Fire in owner's facing direction float yaw = (float) Math.toRadians(owner.rotationYaw); - laser.dirX = -Math.sin(yaw); - laser.dirY = 0; - laser.dirZ = Math.cos(yaw); + this.dirX = -Math.sin(yaw); + this.dirY = 0; + this.dirZ = Math.cos(yaw); // Initialize end point (same as start, will expand) - laser.endX = x; - laser.endY = y; - laser.endZ = z; - - return laser; + this.endX = x; + this.endY = y; + this.endZ = z; } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index bad2bc955..2473730c3 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -1,6 +1,11 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -70,181 +75,110 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { } /** - * Full constructor with all parameters. + * Full constructor using data classes for grouped parameters. */ public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime) { - this(world, owner, target, x, y, z, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - false, 0.15f, 0.5f, 6); // Default: no lightning, low density, small radius, 6 tick fade - } - - /** - * Full constructor with lightning effect support. - */ - public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime) { + double x, double y, double z, float orbSize, + EnergyColorData color, EnergyCombatData combat, + EnergyHomingData homing, EnergyLightningData lightning, + EnergyLifespanData lifespan) { super(world); - // Initialize base properties with lightning - initProjectile(owner, target, x, y, z, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorAlpha, outerColorWidth, rotationSpeed, - damage, knockback, knockbackUp, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, lightningFadeTime); + // Initialize base properties + initProjectile(owner, target, x, y, z, orbSize, color, combat, lightning, lifespan); // Orb-specific properties - this.speed = speed; - this.homing = homing; - this.homingStrength = homingStrength; - this.homingRange = homingRange; + this.speed = homing.speed; + this.homing = homing.homing; + this.homingStrength = homing.homingStrength; + this.homingRange = homing.homingRange; // Calculate initial velocity toward target if (target != null) { double dx = target.posX - x; - double dy = (target.posY + target.height * 0.5) - y; + double dy = (target.posY + target.getEyeHeight()) - y; double dz = target.posZ - z; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { - this.motionX = (dx / len) * speed; - this.motionY = (dy / len) * speed; - this.motionZ = (dz / len) * speed; + this.motionX = (dx / len) * homing.speed; + this.motionY = (dy / len) * homing.speed; + this.motionZ = (dz / len) * homing.speed; } } else { // Fire in NPC's facing direction float yaw = (float) Math.toRadians(owner.rotationYaw); float pitch = (float) Math.toRadians(owner.rotationPitch); - this.motionX = -Math.sin(yaw) * Math.cos(pitch) * speed; - this.motionY = -Math.sin(pitch) * speed; - this.motionZ = Math.cos(yaw) * Math.cos(pitch) * speed; + this.motionX = -Math.sin(yaw) * Math.cos(pitch) * homing.speed; + this.motionY = -Math.sin(pitch) * homing.speed; + this.motionZ = Math.cos(yaw) * Math.cos(pitch) * homing.speed; } } /** - * Create an orb in charging mode (for windup phase). + * Setup this orb in charging mode (for windup phase). * The orb will grow from 0 to orbSize over chargeDuration ticks. * Position follows the owner based on anchor point. */ - public static EntityAbilityOrb createCharging(World world, EntityNPCInterface owner, EntityLivingBase target, - float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - float speed, boolean homing, float homingStrength, float homingRange, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime, - AnchorPoint anchorPoint, int chargeDuration) { - // Calculate initial position based on anchor point - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); - double spawnX = spawnPos.xCoord; - double spawnY = spawnPos.yCoord; - double spawnZ = spawnPos.zCoord; - - EntityAbilityOrb orb = new EntityAbilityOrb( - world, owner, target, - spawnX, spawnY, spawnZ, - orbSize, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, speed, homing, homingStrength, homingRange, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, maxDistance, maxLifetime, - lightningEffect, lightningDensity, lightningRadius, lightningFadeTime); - - // Set charging state (uses data watcher for client sync) - orb.setCharging(true); - orb.chargeDuration = chargeDuration; - orb.chargeTick = 0; - orb.anchorPoint = anchorPoint; - - // Store target size and start at 0 for grow effect - orb.targetSize = orb.size; - orb.size = 0.01f; // Start very small - orb.renderCurrentSize = 0.01f; - orb.prevRenderSize = 0.01f; - - // Clear motion while charging - orb.motionX = 0; - orb.motionY = 0; - orb.motionZ = 0; - - return orb; + public void setupCharging(AnchorPoint anchorPoint, int chargeDuration) { + setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.anchorPoint = anchorPoint; + this.targetSize = this.size; + this.size = 0.01f; + this.renderCurrentSize = 0.01f; + this.prevRenderSize = 0.01f; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } /** - * Create an orb in preview mode for GUI display. + * Setup this orb in preview mode for GUI display. * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public static EntityAbilityOrb createPreview(World world, EntityNPCInterface owner, - float orbSize, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float rotationSpeed, - boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime, - AnchorPoint anchorPoint, int chargeDuration) { - EntityAbilityOrb orb = new EntityAbilityOrb(world); - orb.setPreviewMode(true); - orb.setPreviewOwner(owner); + public void setupPreview(EntityNPCInterface owner, float orbSize, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration) { + this.setPreviewMode(true); + this.setPreviewOwner(owner); // Set visual properties - orb.innerColor = innerColor; - orb.outerColor = outerColor; - orb.outerColorEnabled = outerColorEnabled; - orb.outerColorWidth = outerColorWidth; - orb.rotationSpeed = rotationSpeed; - orb.lightningEffect = lightningEffect; - orb.lightningDensity = lightningDensity; - orb.lightningRadius = lightningRadius; - orb.lightningFadeTime = lightningFadeTime; + this.innerColor = color.innerColor; + this.outerColor = color.outerColor; + this.outerColorEnabled = color.outerColorEnabled; + this.outerColorWidth = color.outerColorWidth; + this.rotationSpeed = color.rotationSpeed; + this.lightningEffect = lightning.lightningEffect; + this.lightningDensity = lightning.lightningDensity; + this.lightningRadius = lightning.lightningRadius; + this.lightningFadeTime = lightning.lightningFadeTime; - // Set charging state (like createCharging does) - orb.setCharging(true); - orb.chargeDuration = chargeDuration; - orb.chargeTick = 0; - orb.anchorPoint = anchorPoint; + // Set charging state + this.setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.anchorPoint = anchorPoint; // Store target size and start at 0 for grow effect - orb.targetSize = orbSize; - orb.size = 0.01f; - orb.renderCurrentSize = 0.01f; - orb.prevRenderSize = 0.01f; + this.targetSize = orbSize; + this.size = 0.01f; + this.renderCurrentSize = 0.01f; + this.prevRenderSize = 0.01f; // Initial position at anchor point Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); - orb.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); - orb.prevPosX = pos.xCoord; - orb.prevPosY = pos.yCoord; - orb.prevPosZ = pos.zCoord; - orb.startX = pos.xCoord; - orb.startY = pos.yCoord; - orb.startZ = pos.zCoord; + this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + this.prevPosX = pos.xCoord; + this.prevPosY = pos.yCoord; + this.prevPosZ = pos.zCoord; + this.startX = pos.xCoord; + this.startY = pos.yCoord; + this.startZ = pos.zCoord; - // Clear motion while charging - orb.motionX = 0; - orb.motionY = 0; - orb.motionZ = 0; - - return orb; + // Clear motion + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; } /** @@ -300,7 +234,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { if (target != null) { double dx = target.posX - posX; - double dy = (target.posY + target.height * 0.5) - posY; + double dy = (target.posY + target.getEyeHeight()) - posY; double dz = target.posZ - posZ; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -370,7 +304,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { if (target == null || !target.isEntityAlive()) return; double dx = target.posX - posX; - double dy = (target.posY + target.height * 0.5) - posY; + double dy = (target.posY + target.getEyeHeight()) - posY; double dz = target.posZ - posZ; double dist = Math.sqrt(dx * dx + dy * dy + dz * dz); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 149ffd329..5508ecd94 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -4,17 +4,22 @@ import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.NpcDamageSource; import noppes.npcs.entity.EntityNPCInterface; +import java.util.ArrayList; import java.util.List; /** @@ -40,9 +45,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected float knockbackUp = 0.1f; // ==================== EFFECT PROPERTIES ==================== - protected int stunDuration = 0; - protected int slowDuration = 0; - protected int slowLevel = 0; + protected List effects = new ArrayList<>(); // ==================== EXPLOSION PROPERTIES ==================== protected boolean explosive = false; @@ -96,37 +99,12 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA } /** - * Initialize common properties. Call from subclass constructors. + * Initialize common properties using data classes. Call from subclass constructors. */ protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float size, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime) { - initProjectile(owner, target, x, y, z, - size, innerColor, outerColor, outerColorEnabled, outerColorWidth, outerColorAlpha, rotationSpeed, - damage, knockback, knockbackUp, - explosive, explosionRadius, explosionDamageFalloff, - stunDuration, slowDuration, slowLevel, - maxDistance, maxLifetime, - false, 0.15f, 0.5f, 6); // Default: no lightning, low density, small radius, 6 tick fade - } - - /** - * Initialize common properties with lightning effect support. - */ - protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, - double x, double y, double z, - float size, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, float outerColorAlpha, float rotationSpeed, - float damage, float knockback, float knockbackUp, - boolean explosive, float explosionRadius, float explosionDamageFalloff, - int stunDuration, int slowDuration, int slowLevel, - float maxDistance, int maxLifetime, - boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime) { + double x, double y, double z, float size, + EnergyColorData color, EnergyCombatData combat, + EnergyLightningData lightning, EnergyLifespanData lifespan) { this.setPosition(x, y, z); this.startX = x; this.startY = y; @@ -137,38 +115,33 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // Visual this.size = size; - this.innerColor = innerColor; - this.outerColor = outerColor; - this.outerColorEnabled = outerColorEnabled; - this.outerColorWidth = outerColorWidth; - this.outerColorAlpha = outerColorAlpha; - this.rotationSpeed = rotationSpeed; + this.innerColor = color.innerColor; + this.outerColor = color.outerColor; + this.outerColorEnabled = color.outerColorEnabled; + this.outerColorWidth = color.outerColorWidth; + this.outerColorAlpha = color.outerColorAlpha; + this.rotationSpeed = color.rotationSpeed; // Combat - this.damage = damage; - this.knockback = knockback; - this.knockbackUp = knockbackUp; + this.damage = combat.damage; + this.knockback = combat.knockback; + this.knockbackUp = combat.knockbackUp; // Explosion - this.explosive = explosive; - this.explosionRadius = explosionRadius; - this.explosionDamageFalloff = explosionDamageFalloff; - - // Effects - this.stunDuration = stunDuration; - this.slowDuration = slowDuration; - this.slowLevel = slowLevel; + this.explosive = combat.explosive; + this.explosionRadius = combat.explosionRadius; + this.explosionDamageFalloff = combat.explosionDamageFalloff; // Lifespan - this.maxDistance = maxDistance; - this.maxLifetime = maxLifetime; + this.maxDistance = lifespan.maxDistance; + this.maxLifetime = lifespan.maxLifetime; // deathWorldTime will be set on first tick when world is available // Lightning - this.lightningEffect = lightningEffect; - this.lightningDensity = lightningDensity; - this.lightningRadius = lightningRadius; - this.lightningFadeTime = lightningFadeTime; + this.lightningEffect = lightning.lightningEffect; + this.lightningDensity = lightning.lightningDensity; + this.lightningRadius = lightning.lightningRadius; + this.lightningFadeTime = lightning.lightningFadeTime; // Initialize render size this.renderCurrentSize = size; @@ -370,15 +343,18 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA } protected void applyEffects(EntityLivingBase target) { - if (stunDuration > 0) { - target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, stunDuration, 10)); - target.addPotionEffect(new PotionEffect(Potion.weakness.id, stunDuration, 2)); - } - if (slowDuration > 0 && slowLevel > 0) { - target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, slowDuration, slowLevel)); + for (AbilityEffect effect : effects) { + effect.apply(target); } } + /** + * Set the effects list from the ability's configured effects. + */ + public void setEffects(List effects) { + this.effects = effects != null ? effects : new ArrayList<>(); + } + protected void doExplosion() { if (previewMode) return; // Skip explosion in preview mode worldObj.playSoundEffect(posX, posY, posZ, "random.explode", 1.0f, 1.0f); @@ -559,9 +535,14 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA this.explosionRadius = nbt.getFloat("ExplosionRadius"); this.explosionDamageFalloff = nbt.getFloat("ExplosionDamageFalloff"); - this.stunDuration = nbt.getInteger("StunDuration"); - this.slowDuration = nbt.getInteger("SlowDuration"); - this.slowLevel = nbt.getInteger("SlowLevel"); + // Read effects list + this.effects.clear(); + if (nbt.hasKey("Effects")) { + NBTTagList effectsList = nbt.getTagList("Effects", 10); // 10 = compound tag + for (int i = 0; i < effectsList.tagCount(); i++) { + effects.add(AbilityEffect.fromNBT(effectsList.getCompoundTagAt(i))); + } + } this.maxDistance = nbt.getFloat("MaxDistance"); this.maxLifetime = nbt.getInteger("MaxLifetime"); @@ -610,9 +591,14 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA nbt.setFloat("ExplosionRadius", explosionRadius); nbt.setFloat("ExplosionDamageFalloff", explosionDamageFalloff); - nbt.setInteger("StunDuration", stunDuration); - nbt.setInteger("SlowDuration", slowDuration); - nbt.setInteger("SlowLevel", slowLevel); + // Write effects list + if (!effects.isEmpty()) { + NBTTagList effectsList = new NBTTagList(); + for (AbilityEffect effect : effects) { + effectsList.appendTag(effect.writeNBT()); + } + nbt.setTag("Effects", effectsList); + } nbt.setFloat("MaxDistance", maxDistance); nbt.setLong("DeathWorldTime", deathWorldTime); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java index 6ec4f8b38..ffb5f558a 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -71,8 +72,7 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa public EntityAbilitySweeper(World world, EntityNPCInterface owner, EntityLivingBase target, float beamLength, float beamWidth, float beamHeight, - int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth, + EnergyColorData colorData, float sweepSpeed, int numberOfRotations, float damage, int damageInterval, boolean piercing, boolean lockOnTarget) { @@ -83,10 +83,10 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa this.beamLength = beamLength; this.beamWidth = beamWidth; this.beamHeight = beamHeight; - this.innerColor = innerColor; - this.outerColor = outerColor; - this.outerColorEnabled = outerColorEnabled; - this.outerColorWidth = outerColorWidth; + this.innerColor = colorData.innerColor; + this.outerColor = colorData.outerColor; + this.outerColorEnabled = colorData.outerColorEnabled; + this.outerColorWidth = colorData.outerColorWidth; this.sweepSpeed = sweepSpeed; this.numberOfRotations = numberOfRotations; this.damage = damage; diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index ae292d59d..16389f74d 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -1934,6 +1934,13 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti if (NPCMountUtil.isFlyingMountWithFlightEnabled(this)) { return; } + // Skip fall damage during abilities that control NPC movement (e.g., Slam leap) + if (this.abilities != null && this.abilities.isExecutingAbility() + && this.abilities.getCurrentAbility() != null + && this.abilities.getCurrentAbility().hasAbilityMovement()) { + this.fallDistance = 0; + return; + } if (!this.stats.noFallDamage) super.fall(distance); } From 5350a9882ba8bb5925117c6dac1c09c8911cf997 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 29 Jan 2026 14:20:12 -0500 Subject: [PATCH 30/85] Update api --- src/api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api b/src/api index b8ba682e9..06c9daf81 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit b8ba682e9dd4e542a5ccf0de231ab5e5ebdad448 +Subproject commit 06c9daf81be8df0138a992ca6bcabc05e37189cb From babe58dc34c49aba160d1b81eaf55b0f47c23705 Mon Sep 17 00:00:00 2001 From: Vidal Date: Thu, 29 Jan 2026 17:08:58 -0300 Subject: [PATCH 31/85] Added builtin animations to disc, laser and slam --- .../data/ability/type/AbilityDisc.java | 7 +- .../data/ability/type/AbilityLaserShot.java | 3 + .../data/ability/type/AbilitySlam.java | 3 + .../animations/Ability_Disc_Active.json | 77 ++ .../animations/Ability_Disc_Windup.json | 896 ++++++++++++++++++ .../animations/Ability_Laser_Active.json | 77 ++ .../animations/Ability_Laser_Windup.json | 329 +++++++ .../animations/Ability_Slam_Active.json | 84 ++ .../animations/Ability_Slam_Windup.json | 147 +++ 9 files changed, 1621 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Laser_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 006f6f128..b80dcbdef 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -43,7 +43,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { private int boomerangDelay = 40; // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; // Energy data classes private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF8800, true, 0.4f, 0.5f, 5.0f); @@ -62,10 +62,13 @@ public class AbilityDisc extends Ability implements IAbilityDisc { this.maxRange = 30.0f; this.minRange = 5.0f; this.cooldownTicks = 0; - this.windUpTicks = 20; + this.windUpTicks = 60; this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; + // Default built-in animations + this.windUpAnimationName = "Ability_Disc_Windup"; + this.activeAnimationName = "Ability_Disc_Active"; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 3a25b9aa4..3b45894b4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -53,6 +53,9 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { this.lockMovement = LockMovementType.WINDUP; this.telegraphType = TelegraphType.LINE; this.showTelegraph = true; + // Default built-in animations + this.windUpAnimationName = "Ability_Laser_Windup"; + this.activeAnimationName = "Ability_Laser_Active"; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index 46faef9c9..2dae47d05 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -59,6 +59,9 @@ public class AbilitySlam extends Ability implements IAbilitySlam { this.telegraphType = TelegraphType.CIRCLE; this.windUpSound = "mob.irongolem.throw"; this.activeSound = ""; + // Default built-in animations + this.windUpAnimationName = "Ability_Slam_Windup"; + this.activeAnimationName = "Ability_Slam_Active"; } @Override diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json new file mode 100644 index 000000000..0e221560e --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json @@ -0,0 +1,77 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": 12.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": -44.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 4.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_ARM", + "Rotation1": 31.0f, + "Rotation0": 44.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": -82.0f + }, + { + "Pivot2": -5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": 6.0f + } + ], + "Smooth": 0b, + "Duration": 10 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 7, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Disc_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json new file mode 100644 index 000000000..035e51f7f --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json @@ -0,0 +1,896 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.8f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 0.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 12 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.2f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 25.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -2.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 6 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.25f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 110.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 6.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -12.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 6 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.4f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 120.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 6.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 6 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": 0.0f, + "Pivot1": 8.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 4 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": 1.0f, + "Part": "LEFT_ARM", + "Rotation1": -25.0f, + "Rotation0": -94.0f, + "Pivot0": 0.0f, + "Pivot1": 8.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 4 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.6f, + "FrameParts": [ + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 0.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 0.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 25.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -2.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 110.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 6.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -12.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.2f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 120.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 6.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 7.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.25f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": 3.0f, + "Part": "LEFT_ARM", + "Rotation1": -18.0f, + "Rotation0": -94.0f, + "Pivot0": 0.0f, + "Pivot1": 8.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.5f, + "FrameParts": [ + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": 1.0f, + "Part": "LEFT_ARM", + "Rotation1": -25.0f, + "Rotation0": -94.0f, + "Pivot0": 0.0f, + "Pivot1": 8.0f, + "Rotation2": 37.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.5f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": 12.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": -44.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 4.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_ARM", + "Rotation1": 31.0f, + "Rotation0": 44.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": -82.0f + }, + { + "Pivot2": -5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": 6.0f + } + ], + "Smooth": 0b, + "Duration": 4 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 6, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Disc_Windup", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Laser_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Active.json new file mode 100644 index 000000000..5cb4fc3be --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Active.json @@ -0,0 +1,77 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 5.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": -195.0f, + "Pivot0": -1.0f, + "Pivot1": -1.0f, + "Rotation2": -56.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": -1.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -37.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 3, + "Smooth": 0b, + "ID": 10, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Laser_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json new file mode 100644 index 000000000..5b7dc3e16 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json @@ -0,0 +1,329 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 50.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 50.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 2.0f, + "Rotation0": -88.0f, + "Pivot0": 1.0f, + "Pivot1": 2.0f, + "Rotation2": 86.0f + }, + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 50.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -92.0f, + "Pivot0": 1.0f, + "Pivot1": 2.0f, + "Rotation2": 94.0f + }, + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 50.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": -2.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 2.0f, + "Rotation2": 80.0f + }, + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 5.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": -195.0f, + "Pivot0": -1.0f, + "Pivot1": -1.0f, + "Rotation2": -56.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": -1.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -37.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 3, + "Smooth": 0b, + "ID": 8, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Laser_Windup", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json new file mode 100644 index 000000000..90e16e948 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json @@ -0,0 +1,84 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": -208.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 12.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -208.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": -18.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 107.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Duration": 3 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 5, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Slam_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json new file mode 100644 index 000000000..b35cef0cf --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json @@ -0,0 +1,147 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.25f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 0.0f, + "Pivot1": 6.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 6.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 6.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 6.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 82.0f, + "Pivot0": 0.0f, + "Pivot1": 7.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 27 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -88.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Duration": 3 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 4, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Slam_Windup", + "WhileStanding": 1b +} From da33baf971a21fae4d5679cf90c32e3e516f6e18 Mon Sep 17 00:00:00 2001 From: Vidal Date: Thu, 29 Jan 2026 20:34:10 -0300 Subject: [PATCH 32/85] Added EnergyAnchorData, a wrapper for anchor points which also stores 3 flat offset values --- .../data/ability/data/EnergyAnchorData.java | 54 +++++++++++++++++++ .../data/ability/type/AbilityDisc.java | 35 ++++++------ .../data/ability/type/AbilityEnergyBeam.java | 34 ++++++------ .../data/ability/type/AbilityOrb.java | 45 ++++++++-------- .../npcs/entity/EntityAbilityBeam.java | 26 +++++---- .../npcs/entity/EntityAbilityDisc.java | 26 +++++---- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 25 ++++----- .../kamkeel/npcs/util/AnchorPointHelper.java | 39 ++++++++++---- 8 files changed, 175 insertions(+), 109 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java new file mode 100644 index 000000000..39c7db9e7 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java @@ -0,0 +1,54 @@ +package kamkeel.npcs.controllers.data.ability.data; + +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import net.minecraft.nbt.NBTTagCompound; + +public class EnergyAnchorData { + public AnchorPoint anchorPoint = AnchorPoint.FRONT; + public float anchorOffsetX = 0; + public float anchorOffsetY = 0; + public float anchorOffsetZ = 0; + + public EnergyAnchorData() { + } + + public EnergyAnchorData(AnchorPoint anchorPoint) { + this.anchorPoint = anchorPoint; + } + + public EnergyAnchorData(AnchorPoint anchorPoint, float anchorOffsetX, float anchorOffsetY, float anchorOffsetZ) { + this.anchorPoint = anchorPoint; + this.anchorOffsetX = anchorOffsetX; + this.anchorOffsetY = anchorOffsetY; + this.anchorOffsetZ = anchorOffsetZ; + } + + public EnergyAnchorData(int anchorPoint) { + this.anchorPoint = AnchorPoint.fromId(anchorPoint); + } + + public EnergyAnchorData(int anchorPoint, float anchorOffsetX, float anchorOffsetY, float anchorOffsetZ) { + this.anchorPoint = AnchorPoint.fromId(anchorPoint); + this.anchorOffsetX = anchorOffsetX; + this.anchorOffsetY = anchorOffsetY; + this.anchorOffsetZ = anchorOffsetZ; + } + + public void writeNBT(NBTTagCompound nbt) { + nbt.setInteger("anchorPoint", anchorPoint.getId()); + nbt.setFloat("anchorOffsetX", anchorOffsetX); + nbt.setFloat("anchorOffsetY", anchorOffsetY); + nbt.setFloat("anchorOffsetZ", anchorOffsetZ); + } + + public void readNBT(NBTTagCompound nbt) { + this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + this.anchorOffsetX = nbt.hasKey("anchorOffsetX") ? nbt.getFloat("anchorOffsetX") : 0; + this.anchorOffsetY = nbt.hasKey("anchorOffsetY") ? nbt.getFloat("anchorOffsetY") : 0; + this.anchorOffsetZ = nbt.hasKey("anchorOffsetZ") ? nbt.getFloat("anchorOffsetZ") : 0; + } + + public EnergyAnchorData copy() { + return new EnergyAnchorData(anchorPoint, anchorOffsetX, anchorOffsetY, anchorOffsetZ); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index b80dcbdef..3ef2e164d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -6,11 +6,7 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -19,7 +15,6 @@ import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -42,15 +37,13 @@ public class AbilityDisc extends Ability implements IAbilityDisc { private boolean boomerang = false; private int boomerangDelay = 40; - // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; - // Energy data classes private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF8800, true, 0.4f, 0.5f, 5.0f); private EnergyCombatData combatData = new EnergyCombatData(8.0f, 1.2f, 0.15f, false, 3.0f, 0.5f); private EnergyHomingData homingData = new EnergyHomingData(0.6f, true, 0.12f, 18.0f); private EnergyLightningData lightningData = new EnergyLightningData(); private EnergyLifespanData lifespanData = new EnergyLifespanData(35.0f, 200); + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); // Transient state for disc entity (used during windup charging) private transient EntityAbilityDisc discEntity = null; @@ -115,14 +108,14 @@ public class AbilityDisc extends Ability implements IAbilityDisc { // Spawn disc in charging mode on first tick of windup if (tick == 1) { // Create disc in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint); + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData); discEntity = new EntityAbilityDisc( world, npc, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, discRadius, discThickness, colorData, combatData, homingData, lightningData, lifespanData, boomerang, boomerangDelay); - discEntity.setupCharging(anchorPoint, windUpTicks); + discEntity.setupCharging(anchorData, windUpTicks); discEntity.setEffects(this.effects); world.spawnEntityInWorld(discEntity); @@ -184,7 +177,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { nbt.setFloat("discThickness", discThickness); nbt.setBoolean("boomerang", boomerang); nbt.setInteger("boomerangDelay", boomerangDelay); - nbt.setInteger("anchorPoint", anchorPoint.getId()); + anchorData.writeNBT(nbt); colorData.writeNBT(nbt); combatData.writeNBT(nbt); homingData.writeNBT(nbt); @@ -198,7 +191,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { this.discThickness = nbt.hasKey("discThickness") ? nbt.getFloat("discThickness") : 0.2f; this.boomerang = nbt.hasKey("boomerang") && nbt.getBoolean("boomerang"); this.boomerangDelay = nbt.hasKey("boomerangDelay") ? nbt.getInteger("boomerangDelay") : 40; - this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + anchorData.readNBT(nbt); colorData.readNBT(nbt); combatData.readNBT(nbt); homingData.readNBT(nbt); @@ -257,14 +250,20 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public void setLightningDensity(float lightningDensity) { lightningData.lightningDensity = lightningDensity; } public float getLightningRadius() { return lightningData.lightningRadius; } public void setLightningRadius(float lightningRadius) { lightningData.lightningRadius = lightningRadius; } - public AnchorPoint getAnchorPointEnum() { return anchorPoint; } - public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + public AnchorPoint getAnchorPointEnum() { return anchorData.anchorPoint; } + public float getAnchorOffsetX() { return anchorData.anchorOffsetX; } + public float getAnchorOffsetY() { return anchorData.anchorOffsetY; } + public float getAnchorOffsetZ() { return anchorData.anchorOffsetZ; } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorData.anchorPoint = anchorPoint; } + public void setAnchorOffsetX(float x) { this.anchorData.anchorOffsetX = x; } + public void setAnchorOffsetY(float y) { this.anchorData.anchorOffsetY = y; } + public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } @Override - public int getAnchorPoint() { return anchorPoint.getId(); } + public int getAnchorPoint() { return anchorData.anchorPoint.getId(); } @Override - public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } + public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromId(point); } @Override @SideOnly(Side.CLIENT) @@ -272,7 +271,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { if (npc == null || npc.worldObj == null) return null; EntityAbilityDisc disc = new EntityAbilityDisc(npc.worldObj); - disc.setupPreview(npc, discRadius, discThickness, colorData, lightningData, anchorPoint, windUpTicks); + disc.setupPreview(npc, discRadius, discThickness, colorData, lightningData, anchorData, windUpTicks); return disc; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 049c4c281..53377161a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -6,11 +6,7 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -44,9 +40,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { private EnergyHomingData homingData = new EnergyHomingData(0.4f, true, 0.1f, 15.0f); private EnergyLightningData lightningData = new EnergyLightningData(); private EnergyLifespanData lifespanData = new EnergyLifespanData(25.0f, 200); - - // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); // Transient state for beam entity (used during windup charging) private transient EntityAbilityBeam beamEntity = null; @@ -113,14 +107,14 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { float offsetDist = 1.0f; // Create beam in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint, offsetDist); + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData, offsetDist); beamEntity = new EntityAbilityBeam( world, npc, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, beamWidth, headSize, colorData, combatData, homingData, lightningData, lifespanData, lockMovement.locksActive()); - beamEntity.setupCharging(anchorPoint, windUpTicks, offsetDist); + beamEntity.setupCharging(anchorData, windUpTicks, offsetDist); beamEntity.setEffects(this.effects); world.spawnEntityInWorld(beamEntity); @@ -180,7 +174,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("beamWidth", beamWidth); nbt.setFloat("headSize", headSize); - nbt.setInteger("anchorPoint", anchorPoint.getId()); + anchorData.writeNBT(nbt); colorData.writeNBT(nbt); combatData.writeNBT(nbt); homingData.writeNBT(nbt); @@ -192,7 +186,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public void readTypeNBT(NBTTagCompound nbt) { this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.4f; this.headSize = nbt.hasKey("headSize") ? nbt.getFloat("headSize") : 0.6f; - this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + anchorData.readNBT(nbt); colorData.readNBT(nbt); combatData.readNBT(nbt); homingData.readNBT(nbt); @@ -259,14 +253,20 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public void setMaxLifetime(int maxLifetime) { this.lifespanData.maxLifetime = maxLifetime; } // Getters & Setters - Anchor point - public AnchorPoint getAnchorPointEnum() { return anchorPoint; } - public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorPoint = anchorPoint; } + public AnchorPoint getAnchorPointEnum() { return anchorData.anchorPoint; } + public float getAnchorOffsetX() { return anchorData.anchorOffsetX; } + public float getAnchorOffsetY() { return anchorData.anchorOffsetY; } + public float getAnchorOffsetZ() { return anchorData.anchorOffsetZ; } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorData.anchorPoint = anchorPoint; } + public void setAnchorOffsetX(float x) { this.anchorData.anchorOffsetX = x; } + public void setAnchorOffsetY(float y) { this.anchorData.anchorOffsetY = y; } + public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } @Override - public int getAnchorPoint() { return anchorPoint.getId(); } + public int getAnchorPoint() { return anchorData.anchorPoint.getId(); } @Override - public void setAnchorPoint(int point) { this.anchorPoint = AnchorPoint.fromId(point); } + public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromId(point); } @Override @SideOnly(Side.CLIENT) @@ -274,7 +274,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { if (npc == null || npc.worldObj == null) return null; EntityAbilityBeam beam = new EntityAbilityBeam(npc.worldObj); - beam.setupPreview(npc, beamWidth, headSize, colorData, lightningData, anchorPoint, windUpTicks, 1.0f); + beam.setupPreview(npc, beamWidth, headSize, colorData, lightningData, anchorData, windUpTicks, 1.0f); return beam; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 6c7e8c5b6..014a88f40 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -6,11 +6,7 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -19,7 +15,6 @@ import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -38,15 +33,13 @@ public class AbilityOrb extends Ability implements IAbilityOrb { // Ability-specific properties private float orbSize = 1.0f; - // Anchor point for charging position - private AnchorPoint anchorPoint = AnchorPoint.RIGHT_HAND; - // Data classes for energy properties public final EnergyColorData colorData = new EnergyColorData(); public final EnergyCombatData combatData = new EnergyCombatData(); public final EnergyHomingData homingData = new EnergyHomingData(); public final EnergyLightningData lightningData = new EnergyLightningData(); public final EnergyLifespanData lifespanData = new EnergyLifespanData(); + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); // Transient state for orb entity (used during windup charging) private transient EntityAbilityOrb orbEntity = null; @@ -110,12 +103,12 @@ public class AbilityOrb extends Ability implements IAbilityOrb { // Spawn orb in charging mode on first tick of windup if (tick == 1) { // Create orb in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorPoint); + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData); orbEntity = new EntityAbilityOrb( world, npc, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, orbSize, colorData, combatData, homingData, lightningData, lifespanData); - orbEntity.setupCharging(anchorPoint, windUpTicks); + orbEntity.setupCharging(anchorData, windUpTicks); orbEntity.setEffects(this.effects); world.spawnEntityInWorld(orbEntity); @@ -175,7 +168,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { @Override public void writeTypeNBT(NBTTagCompound nbt) { nbt.setFloat("orbSize", orbSize); - nbt.setInteger("anchorPoint", anchorPoint.getId()); + anchorData.writeNBT(nbt); colorData.writeNBT(nbt); combatData.writeNBT(nbt); homingData.writeNBT(nbt); @@ -188,7 +181,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { @Override public void readTypeNBT(NBTTagCompound nbt) { this.orbSize = nbt.hasKey("orbSize") ? nbt.getFloat("orbSize") : 1.0f; - this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + anchorData.readNBT(nbt); colorData.readNBT(nbt); combatData.readNBT(nbt); homingData.readNBT(nbt); @@ -385,21 +378,29 @@ public class AbilityOrb extends Ability implements IAbilityOrb { lightningData.lightningFadeTime = lightningFadeTime; } - public AnchorPoint getAnchorPointEnum() { - return anchorPoint; - } + public AnchorPoint getAnchorPointEnum() { return anchorData.anchorPoint; } - public void setAnchorPointEnum(AnchorPoint anchorPoint) { - this.anchorPoint = anchorPoint; - } + public float getAnchorOffsetX() { return anchorData.anchorOffsetX; } + + public float getAnchorOffsetY() { return anchorData.anchorOffsetY; } + + public float getAnchorOffsetZ() { return anchorData.anchorOffsetZ; } + + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorData.anchorPoint = anchorPoint; } + + public void setAnchorOffsetX(float x) { this.anchorData.anchorOffsetX = x; } + + public void setAnchorOffsetY(float y) { this.anchorData.anchorOffsetY = y; } + + public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } public int getAnchorPoint() { - return anchorPoint.getId(); + return anchorData.anchorPoint.getId(); } @Override public void setAnchorPoint(int point) { - this.anchorPoint = AnchorPoint.fromId(point); + this.anchorData.anchorPoint = AnchorPoint.fromId(point); } @Override @@ -408,7 +409,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { if (npc == null || npc.worldObj == null) return null; EntityAbilityOrb orb = new EntityAbilityOrb(npc.worldObj); - orb.setupPreview(npc, orbSize, colorData, lightningData, anchorPoint, windUpTicks); + orb.setupPreview(npc, orbSize, colorData, lightningData, anchorData, windUpTicks); return orb; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index ca600b84f..75fa6ef7d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -1,11 +1,7 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -62,7 +58,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { private int chargeDuration = 40; private int chargeTick = 0; private float chargeOffsetDistance = 1.0f; - private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.FRONT); // Trail fading for non-anchored beams (comet effect) private boolean fadeTrail = false; @@ -171,19 +167,19 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } - public void setupCharging(AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { + public void setupCharging(EnergyAnchorData anchor, int chargeDuration, float chargeOffsetDistance) { setCharging(true); this.chargeDuration = chargeDuration; this.chargeTick = 0; this.chargeOffsetDistance = chargeOffsetDistance; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; this.fadeTrail = !attachedToOwner; this.motionX = 0; this.motionY = 0; this.motionZ = 0; } - public void setupPreview(EntityNPCInterface owner, float beamWidth, float headSize, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration, float chargeOffsetDistance) { + public void setupPreview(EntityNPCInterface owner, float beamWidth, float headSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration, float chargeOffsetDistance) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -206,10 +202,10 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.chargeDuration = chargeDuration; this.chargeTick = 0; this.chargeOffsetDistance = chargeOffsetDistance; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; // Initial position at anchor point - Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint, chargeOffsetDistance); + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorData, chargeOffsetDistance); this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); this.prevPosX = pos.xCoord; this.prevPosY = pos.yCoord; @@ -450,7 +446,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { // Calculate position based on anchor point Vec3 pos; if (owner instanceof EntityLivingBase) { - pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint, chargeOffsetDistance); + pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData, chargeOffsetDistance); } else { // Fallback for non-living entities (shouldn't happen normally) float yaw = (float) Math.toRadians(owner.rotationYaw); @@ -772,10 +768,11 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; this.chargeOffsetDistance = nbt.hasKey("ChargeOffsetDistance") ? nbt.getFloat("ChargeOffsetDistance") : 1.0f; - this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; this.fadeTrail = nbt.hasKey("FadeTrail") && nbt.getBoolean("FadeTrail"); this.trailFadeTime = nbt.hasKey("TrailFadeTime") ? nbt.getInteger("TrailFadeTime") : 20; + this.anchorData.readNBT(nbt); + // Read trail points (relative to origin) trailPoints.clear(); if (nbt.hasKey("Trail")) { @@ -808,10 +805,11 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { nbt.setInteger("ChargeDuration", chargeDuration); nbt.setInteger("ChargeTick", chargeTick); nbt.setFloat("ChargeOffsetDistance", chargeOffsetDistance); - nbt.setInteger("AnchorPoint", anchorPoint.getId()); nbt.setBoolean("FadeTrail", fadeTrail); nbt.setInteger("TrailFadeTime", trailFadeTime); + this.anchorData.writeNBT(nbt); + // Write trail points NBTTagList trailList = new NBTTagList(); for (Vec3 point : trailPoints) { diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index 20a43a98a..f6003df80 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -1,11 +1,7 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -46,9 +42,9 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { private boolean charging = false; private int chargeDuration = 40; private int chargeTick = 0; - private AnchorPoint anchorPoint = AnchorPoint.FRONT; private float targetDiscRadius = 1.0f; // Full radius to grow to during charging private float targetDiscThickness = 0.2f; // Full thickness to grow to during charging + private EnergyAnchorData anchorData = new EnergyAnchorData(); // Data watcher index for charging state (synced to clients) private static final int DW_CHARGING = 20; @@ -137,11 +133,11 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { * The disc will grow from 0 to discRadius over chargeDuration ticks. * Position follows the owner based on anchor point. */ - public void setupCharging(AnchorPoint anchorPoint, int chargeDuration) { + public void setupCharging(EnergyAnchorData anchor, int chargeDuration) { setCharging(true); this.chargeDuration = chargeDuration; this.chargeTick = 0; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; this.targetDiscRadius = this.discRadius; this.targetDiscThickness = this.discThickness; this.discRadius = 0.01f; @@ -159,7 +155,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public void setupPreview(EntityNPCInterface owner, float discRadius, float discThickness, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration) { + public void setupPreview(EntityNPCInterface owner, float discRadius, float discThickness, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -177,7 +173,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.setCharging(true); this.chargeDuration = chargeDuration; this.chargeTick = 0; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; // Store target size and start at 0 for grow effect this.targetDiscRadius = discRadius; @@ -187,7 +183,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.size = 0.01f; // Initial position at anchor point - Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorData); this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); this.prevPosX = pos.xCoord; this.prevPosY = pos.yCoord; @@ -518,7 +514,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Calculate position based on anchor point if (owner instanceof EntityLivingBase) { - Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint); + Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData); setPosition(pos.xCoord, pos.yCoord, pos.zCoord); } @@ -589,9 +585,9 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; - this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; this.targetDiscRadius = nbt.hasKey("TargetDiscRadius") ? nbt.getFloat("TargetDiscRadius") : this.discRadius; this.targetDiscThickness = nbt.hasKey("TargetDiscThickness") ? nbt.getFloat("TargetDiscThickness") : this.discThickness; + this.anchorData.readNBT(nbt); } @Override @@ -609,8 +605,10 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { nbt.setBoolean("Charging", isCharging()); nbt.setInteger("ChargeDuration", chargeDuration); nbt.setInteger("ChargeTick", chargeTick); - nbt.setInteger("AnchorPoint", anchorPoint.getId()); nbt.setFloat("TargetDiscRadius", targetDiscRadius); nbt.setFloat("TargetDiscThickness", targetDiscThickness); + + // Anchor data + this.anchorData.writeNBT(nbt); } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 2473730c3..eff147448 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -1,11 +1,7 @@ package kamkeel.npcs.entity; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -36,7 +32,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { private boolean charging = false; private int chargeDuration = 40; private int chargeTick = 0; - private AnchorPoint anchorPoint = AnchorPoint.FRONT; + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.FRONT); private float targetSize = 1.0f; // Full size to grow to during charging // Data watcher index for charging state (synced to clients) @@ -119,11 +115,11 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { * The orb will grow from 0 to orbSize over chargeDuration ticks. * Position follows the owner based on anchor point. */ - public void setupCharging(AnchorPoint anchorPoint, int chargeDuration) { + public void setupCharging(EnergyAnchorData anchor, int chargeDuration) { setCharging(true); this.chargeDuration = chargeDuration; this.chargeTick = 0; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; this.targetSize = this.size; this.size = 0.01f; this.renderCurrentSize = 0.01f; @@ -138,7 +134,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public void setupPreview(EntityNPCInterface owner, float orbSize, EnergyColorData color, EnergyLightningData lightning, AnchorPoint anchorPoint, int chargeDuration) { + public void setupPreview(EntityNPCInterface owner, float orbSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -157,7 +153,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { this.setCharging(true); this.chargeDuration = chargeDuration; this.chargeTick = 0; - this.anchorPoint = anchorPoint; + this.anchorData = anchor; // Store target size and start at 0 for grow effect this.targetSize = orbSize; @@ -166,7 +162,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { this.prevRenderSize = 0.01f; // Initial position at anchor point - Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorPoint); + Vec3 pos = AnchorPointHelper.calculateAnchorPosition(owner, anchorData); this.setPosition(pos.xCoord, pos.yCoord, pos.zCoord); this.prevPosX = pos.xCoord; this.prevPosY = pos.yCoord; @@ -400,7 +396,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { // Calculate position based on anchor point if (owner instanceof EntityLivingBase) { - Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorPoint); + Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData); setPosition(pos.xCoord, pos.yCoord, pos.zCoord); } } @@ -460,8 +456,9 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; - this.anchorPoint = nbt.hasKey("AnchorPoint") ? AnchorPoint.fromId(nbt.getInteger("AnchorPoint")) : AnchorPoint.FRONT; this.targetSize = nbt.hasKey("TargetSize") ? nbt.getFloat("TargetSize") : this.size; + // Anchor data + this.anchorData.readNBT(nbt); } @Override @@ -474,7 +471,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { nbt.setBoolean("Charging", isCharging()); nbt.setInteger("ChargeDuration", chargeDuration); nbt.setInteger("ChargeTick", chargeTick); - nbt.setInteger("AnchorPoint", anchorPoint.getId()); + anchorData.writeNBT(nbt); nbt.setFloat("TargetSize", targetSize); } } diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 45e4f3eab..d9d584b64 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -1,6 +1,7 @@ package kamkeel.npcs.util; import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.Vec3; import noppes.npcs.constants.EnumAnimationPart; @@ -48,17 +49,23 @@ public class AnchorPointHelper { /** * Calculate world position for an anchor point on an entity. */ - public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor) { - return calculateAnchorPosition(entity, anchor, DEFAULT_FRONT_DISTANCE); + public static Vec3 calculateAnchorPosition(EntityLivingBase entity, EnergyAnchorData anchorData) { + return calculateAnchorPosition(entity, anchorData, DEFAULT_FRONT_DISTANCE); } /** * Calculate world position for an anchor point with custom front offset. */ - public static Vec3 calculateAnchorPosition(EntityLivingBase entity, AnchorPoint anchor, float frontOffset) { + public static Vec3 calculateAnchorPosition(EntityLivingBase entity, EnergyAnchorData anchorData, float frontOffset) { float scale = getModelScale(entity); float height = entity.height; + AnchorPoint anchor = anchorData.anchorPoint; + + float anchorX = anchorData.anchorOffsetX; + float anchorY = anchorData.anchorOffsetY; + float anchorZ = anchorData.anchorOffsetZ; + double x = entity.posX; double y = entity.posY; double z = entity.posZ; @@ -78,10 +85,10 @@ public class AnchorPointHelper { break; case RIGHT_HAND: - return calculateHandPosition(entity, true, scale); + return calculateHandPosition(entity, anchorData, true, scale); case LEFT_HAND: - return calculateHandPosition(entity, false, scale); + return calculateHandPosition(entity, anchorData, false, scale); case ABOVE_HEAD: y += height * ABOVE_HEAD_HEIGHT; @@ -92,6 +99,10 @@ public class AnchorPointHelper { break; } + x += anchorX * scale; + y += anchorY * scale; + z += anchorZ * scale; + return Vec3.createVectorHelper(x, y, z); } @@ -124,22 +135,22 @@ public class AnchorPointHelper { /** * Calculate hand position using animation data if available. */ - private static Vec3 calculateHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + private static Vec3 calculateHandPosition(EntityLivingBase entity, EnergyAnchorData anchor, boolean rightHand, float scale) { // Try to get animated position first - Vec3 animatedPos = getAnimatedHandPosition(entity, rightHand, scale); + Vec3 animatedPos = getAnimatedHandPosition(entity, anchor, rightHand, scale); if (animatedPos != null) { return animatedPos; } // Fallback to static position - return calculateFallbackHandPosition(entity, rightHand, scale); + return calculateFallbackHandPosition(entity, anchor, rightHand, scale); } /** * Calculate hand position from animation data. * Works for both NPCs and Players. */ - private static Vec3 getAnimatedHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + private static Vec3 getAnimatedHandPosition(EntityLivingBase entity, EnergyAnchorData anchor, boolean rightHand, float scale) { AnimationData animData = AnimationData.getData(entity); if (animData == null || !animData.isActive() || animData.animation == null) { return null; @@ -235,6 +246,10 @@ public class AnchorPointHelper { double worldY = entity.posY + shoulderHeight - blockY; double worldZ = entity.posZ + worldOffsetZ; + worldX += anchor.anchorOffsetX * scale; + worldY += anchor.anchorOffsetY * scale; + worldZ += anchor.anchorOffsetZ * scale; + return Vec3.createVectorHelper(worldX, worldY, worldZ); } @@ -277,7 +292,7 @@ public class AnchorPointHelper { * Calculate fallback hand position when no animation is active. * Represents arms hanging at sides in default idle pose. */ - private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, boolean rightHand, float scale) { + private static Vec3 calculateFallbackHandPosition(EntityLivingBase entity, EnergyAnchorData anchor, boolean rightHand, float scale) { float bodyYaw = (float) Math.toRadians(entity.renderYawOffset); // Get arm scale for EntityCustomNpc @@ -302,6 +317,10 @@ public class AnchorPointHelper { double y = entity.posY + entity.height * FALLBACK_ARM_HEIGHT + armLengthOffset; double z = entity.posZ + lateralZ + forwardZ; + x += anchor.anchorOffsetX * scale; + y += anchor.anchorOffsetY * scale; + z += anchor.anchorOffsetZ * scale; + return Vec3.createVectorHelper(x, y, z); } From 601b0d721ed297e53778477a5488ab337993b720 Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 00:33:32 -0300 Subject: [PATCH 33/85] Added an active animation for orb and updated windup and IDs --- .../data/ability/type/AbilityOrb.java | 1 + .../animations/Ability_Beam_Active.json | 64 +-- .../animations/Ability_Disc_Active.json | 28 +- .../animations/Ability_Disc_Windup.json | 482 +++++++++--------- .../animations/Ability_Laser_Windup.json | 112 ++-- .../animations/Ability_Orb_Active.json | 77 +++ .../animations/Ability_Orb_Windup.json | 143 ++---- .../animations/Ability_Slam_Active.json | 60 +-- .../animations/Ability_Slam_Windup.json | 94 ++-- 9 files changed, 538 insertions(+), 523 deletions(-) create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Orb_Active.json diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 014a88f40..78936adbf 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -57,6 +57,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { this.showTelegraph = true; // Default built-in animation this.windUpAnimationName = "Ability_Orb_Windup"; + this.activeAnimationName = "Ability_Orb_Active"; } @Override diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json index 466b9163c..e285bc679 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Beam_Active.json @@ -9,13 +9,22 @@ "FrameParts": [ { "Pivot2": -5.0f, - "Part": "RIGHT_ARM", - "Rotation1": -18.0f, - "Rotation0": -107.0f, - "Pivot0": -1.0f, - "Pivot1": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 12.0f, + "Rotation0": -75.0f, + "Pivot0": -2.0f, + "Pivot1": 3.0f, "Rotation2": 50.0f }, + { + "Pivot2": -4.0f, + "Part": "RIGHT_LEG", + "Rotation1": 56.0f, + "Rotation0": 18.0f, + "Pivot0": -4.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": -6.0f, "Part": "LEFT_LEG", @@ -25,6 +34,15 @@ "Pivot1": 0.0f, "Rotation2": -6.0f }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, { "Pivot2": -3.0f, "Part": "BODY", @@ -34,6 +52,15 @@ "Pivot1": 1.0f, "Rotation2": 0.0f }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": -18.0f, + "Rotation0": -107.0f, + "Pivot0": -1.0f, + "Pivot1": 2.0f, + "Rotation2": 50.0f + }, { "Pivot2": 0.0f, "Part": "FULL_MODEL", @@ -42,33 +69,6 @@ "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f - }, - { - "Pivot2": -3.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": -1.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -4.0f, - "Part": "RIGHT_LEG", - "Rotation1": 56.0f, - "Rotation0": 18.0f, - "Pivot0": -4.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -5.0f, - "Part": "LEFT_ARM", - "Rotation1": 12.0f, - "Rotation0": -75.0f, - "Pivot0": -2.0f, - "Pivot1": 3.0f, - "Rotation2": 50.0f } ], "Smooth": 0b, diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json index 0e221560e..13fe07485 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Active.json @@ -9,12 +9,12 @@ "FrameParts": [ { "Pivot2": -5.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 25.0f, "Pivot0": 2.0f, "Pivot1": 3.0f, - "Rotation2": 12.0f + "Rotation2": 6.0f }, { "Pivot2": 0.0f, @@ -25,15 +25,6 @@ "Pivot1": 1.0f, "Rotation2": 31.0f }, - { - "Pivot2": -7.0f, - "Part": "RIGHT_ARM", - "Rotation1": -44.0f, - "Rotation0": -90.0f, - "Pivot0": 1.0f, - "Pivot1": 4.0f, - "Rotation2": 90.0f - }, { "Pivot2": -4.0f, "Part": "LEFT_LEG", @@ -43,6 +34,15 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": -44.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 4.0f, + "Rotation2": 90.0f + }, { "Pivot2": -2.0f, "Part": "LEFT_ARM", @@ -54,12 +54,12 @@ }, { "Pivot2": -5.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, "Rotation0": 25.0f, "Pivot0": 2.0f, "Pivot1": 3.0f, - "Rotation2": 6.0f + "Rotation2": 12.0f } ], "Smooth": 0b, @@ -69,7 +69,7 @@ "CurrentFrameTime": 0, "CurrentFrame": 0, "Smooth": 0b, - "ID": 7, + "ID": 9, "WhileAttacking": 1b, "WhileWalking": 1b, "Name": "Ability_Disc_Active", diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json index 035e51f7f..a8231ff50 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Disc_Windup.json @@ -9,22 +9,13 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 2.0f, "Pivot1": 2.0f, "Rotation2": 18.0f }, - { - "Pivot2": -1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": 0.0f, - "Pivot0": 1.0f, - "Pivot1": -2.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -44,13 +35,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, "Rotation0": 0.0f, - "Pivot0": 2.0f, - "Pivot1": 2.0f, - "Rotation2": 18.0f + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f }, { "Pivot2": 3.0f, @@ -60,6 +51,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f } ], "Smooth": 0b, @@ -72,22 +72,13 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 6.0f }, - { - "Pivot2": -1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": 25.0f, - "Pivot0": -1.0f, - "Pivot1": -2.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -107,13 +98,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 6.0f + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 25.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f }, { "Pivot2": 3.0f, @@ -123,6 +114,15 @@ "Pivot0": -2.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f } ], "Smooth": 0b, @@ -135,22 +135,13 @@ "FrameParts": [ { "Pivot2": 2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 2.0f, "Rotation2": 6.0f }, - { - "Pivot2": 1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 110.0f, - "Rotation0": -90.0f, - "Pivot0": -1.0f, - "Pivot1": -2.0f, - "Rotation2": 90.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -170,13 +161,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 2.0f, - "Rotation2": 6.0f + "Pivot2": 1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 110.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f }, { "Pivot2": 4.0f, @@ -186,6 +177,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f } ], "Smooth": 0b, @@ -198,22 +198,13 @@ "FrameParts": [ { "Pivot2": 2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": -12.0f, "Pivot0": 2.0f, "Pivot1": 2.0f, "Rotation2": 18.0f }, - { - "Pivot2": 2.0f, - "Part": "RIGHT_ARM", - "Rotation1": 120.0f, - "Rotation0": -90.0f, - "Pivot0": 1.0f, - "Pivot1": -2.0f, - "Rotation2": 90.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -234,12 +225,12 @@ }, { "Pivot2": 2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 2.0f, - "Pivot1": 2.0f, - "Rotation2": 18.0f + "Part": "RIGHT_ARM", + "Rotation1": 120.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f }, { "Pivot2": 4.0f, @@ -249,6 +240,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f } ], "Smooth": 0b, @@ -261,22 +261,13 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 4.0f, "Pivot1": 3.0f, "Rotation2": 31.0f }, - { - "Pivot2": -1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": -18.0f, - "Pivot0": 3.0f, - "Pivot1": -1.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -296,13 +287,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 4.0f, - "Pivot1": 3.0f, - "Rotation2": 31.0f + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f }, { "Pivot2": 3.0f, @@ -312,6 +303,15 @@ "Pivot0": 0.0f, "Pivot1": 8.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f } ], "Smooth": 0b, @@ -324,22 +324,13 @@ "FrameParts": [ { "Pivot2": -2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 12.0f, "Pivot0": 4.0f, "Pivot1": 3.0f, "Rotation2": 31.0f }, - { - "Pivot2": -3.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": -18.0f, - "Pivot0": 3.0f, - "Pivot1": -1.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -359,13 +350,13 @@ "Rotation2": 0.0f }, { - "Pivot2": -2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 12.0f, - "Pivot0": 4.0f, - "Pivot1": 3.0f, - "Rotation2": 31.0f + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f }, { "Pivot2": 1.0f, @@ -375,6 +366,15 @@ "Pivot0": 0.0f, "Pivot1": 8.0f, "Rotation2": 37.0f + }, + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f } ], "Smooth": 0b, @@ -387,22 +387,13 @@ "FrameParts": [ { "Pivot2": -2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 12.0f, "Pivot0": 2.0f, "Pivot1": 2.0f, "Rotation2": 18.0f }, - { - "Pivot2": -2.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": 0.0f, - "Pivot0": 1.0f, - "Pivot1": -2.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -423,12 +414,12 @@ }, { "Pivot2": -2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 12.0f, - "Pivot0": 2.0f, - "Pivot1": 2.0f, - "Rotation2": 18.0f + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": 0.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f }, { "Pivot2": 2.0f, @@ -438,6 +429,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f } ], "Smooth": 0b, @@ -450,22 +450,13 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 2.0f, "Pivot1": 2.0f, "Rotation2": 18.0f }, - { - "Pivot2": -1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": 0.0f, - "Pivot0": 1.0f, - "Pivot1": -2.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -485,13 +476,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, "Rotation0": 0.0f, - "Pivot0": 2.0f, - "Pivot1": 2.0f, - "Rotation2": 18.0f + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 180.0f }, { "Pivot2": 3.0f, @@ -501,6 +492,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f } ], "Smooth": 0b, @@ -513,13 +513,31 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 6.0f }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 31.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": -1.0f, "Part": "RIGHT_ARM", @@ -529,33 +547,6 @@ "Pivot1": -2.0f, "Rotation2": 180.0f }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_LEG", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": -2.0f, - "Pivot1": 0.0f, - "Rotation2": 31.0f - }, - { - "Pivot2": -3.0f, - "Part": "LEFT_LEG", - "Rotation1": -31.0f, - "Rotation0": 12.0f, - "Pivot0": 1.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 6.0f - }, { "Pivot2": 3.0f, "Part": "LEFT_ARM", @@ -564,6 +555,15 @@ "Pivot0": -2.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f } ], "Smooth": 0b, @@ -576,22 +576,13 @@ "FrameParts": [ { "Pivot2": 2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 2.0f, "Rotation2": 6.0f }, - { - "Pivot2": 1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 110.0f, - "Rotation0": -90.0f, - "Pivot0": -1.0f, - "Pivot1": -2.0f, - "Rotation2": 90.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -611,13 +602,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 2.0f, - "Rotation2": 6.0f + "Pivot2": 1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 110.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f }, { "Pivot2": 4.0f, @@ -627,6 +618,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 6.0f } ], "Smooth": 0b, @@ -639,22 +639,13 @@ "FrameParts": [ { "Pivot2": 2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": -12.0f, "Pivot0": 2.0f, "Pivot1": 2.0f, "Rotation2": 18.0f }, - { - "Pivot2": 2.0f, - "Part": "RIGHT_ARM", - "Rotation1": 120.0f, - "Rotation0": -90.0f, - "Pivot0": 1.0f, - "Pivot1": -2.0f, - "Rotation2": 90.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -675,12 +666,12 @@ }, { "Pivot2": 2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 2.0f, - "Pivot1": 2.0f, - "Rotation2": 18.0f + "Part": "RIGHT_ARM", + "Rotation1": 120.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": -2.0f, + "Rotation2": 90.0f }, { "Pivot2": 4.0f, @@ -690,6 +681,15 @@ "Pivot0": -1.0f, "Pivot1": 7.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": 2.0f, + "Pivot1": 2.0f, + "Rotation2": 18.0f } ], "Smooth": 0b, @@ -702,22 +702,13 @@ "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 0.0f, "Pivot0": 4.0f, "Pivot1": 3.0f, "Rotation2": 31.0f }, - { - "Pivot2": -1.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": -18.0f, - "Pivot0": 3.0f, - "Pivot1": -1.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -737,13 +728,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 0.0f, - "Pivot0": 4.0f, - "Pivot1": 3.0f, - "Rotation2": 31.0f + "Pivot2": -1.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f }, { "Pivot2": 3.0f, @@ -753,6 +744,15 @@ "Pivot0": 0.0f, "Pivot1": 8.0f, "Rotation2": 37.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f } ], "Smooth": 0b, @@ -765,22 +765,13 @@ "FrameParts": [ { "Pivot2": -2.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 12.0f, "Pivot0": 4.0f, "Pivot1": 3.0f, "Rotation2": 31.0f }, - { - "Pivot2": -3.0f, - "Part": "RIGHT_ARM", - "Rotation1": 90.0f, - "Rotation0": -18.0f, - "Pivot0": 3.0f, - "Pivot1": -1.0f, - "Rotation2": 180.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -800,13 +791,13 @@ "Rotation2": 0.0f }, { - "Pivot2": -2.0f, - "Part": "HEAD", - "Rotation1": 0.0f, - "Rotation0": 12.0f, - "Pivot0": 4.0f, - "Pivot1": 3.0f, - "Rotation2": 31.0f + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -18.0f, + "Pivot0": 3.0f, + "Pivot1": -1.0f, + "Rotation2": 180.0f }, { "Pivot2": 1.0f, @@ -816,6 +807,15 @@ "Pivot0": 0.0f, "Pivot1": 8.0f, "Rotation2": 37.0f + }, + { + "Pivot2": -2.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 4.0f, + "Pivot1": 3.0f, + "Rotation2": 31.0f } ], "Smooth": 0b, @@ -828,12 +828,12 @@ "FrameParts": [ { "Pivot2": -5.0f, - "Part": "BODY", + "Part": "HEAD", "Rotation1": 0.0f, "Rotation0": 25.0f, "Pivot0": 2.0f, "Pivot1": 3.0f, - "Rotation2": 12.0f + "Rotation2": 6.0f }, { "Pivot2": 0.0f, @@ -844,15 +844,6 @@ "Pivot1": 1.0f, "Rotation2": 31.0f }, - { - "Pivot2": -7.0f, - "Part": "RIGHT_ARM", - "Rotation1": -44.0f, - "Rotation0": -90.0f, - "Pivot0": 1.0f, - "Pivot1": 4.0f, - "Rotation2": 90.0f - }, { "Pivot2": -4.0f, "Part": "LEFT_LEG", @@ -862,6 +853,15 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": -44.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 4.0f, + "Rotation2": 90.0f + }, { "Pivot2": -2.0f, "Part": "LEFT_ARM", @@ -873,12 +873,12 @@ }, { "Pivot2": -5.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, "Rotation0": 25.0f, "Pivot0": 2.0f, "Pivot1": 3.0f, - "Rotation2": 6.0f + "Rotation2": 12.0f } ], "Smooth": 0b, @@ -888,7 +888,7 @@ "CurrentFrameTime": 0, "CurrentFrame": 0, "Smooth": 0b, - "ID": 6, + "ID": 11, "WhileAttacking": 1b, "WhileWalking": 1b, "Name": "Ability_Disc_Windup", diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json index 5b7dc3e16..c445faca9 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Laser_Windup.json @@ -7,6 +7,15 @@ "Comment": "", "Speed": 3.0f, "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "LEFT_LEG", @@ -16,15 +25,6 @@ "Pivot1": 0.0f, "Rotation2": -18.0f }, - { - "Pivot2": 3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -54,9 +54,9 @@ }, { "Pivot2": 3.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 0.0f @@ -70,6 +70,15 @@ "Comment": "", "Speed": 3.0f, "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "LEFT_LEG", @@ -79,15 +88,6 @@ "Pivot1": 0.0f, "Rotation2": -18.0f }, - { - "Pivot2": 3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -117,9 +117,9 @@ }, { "Pivot2": 3.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 0.0f @@ -133,6 +133,15 @@ "Comment": "", "Speed": 3.0f, "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "LEFT_LEG", @@ -142,15 +151,6 @@ "Pivot1": 0.0f, "Rotation2": -18.0f }, - { - "Pivot2": 3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -180,9 +180,9 @@ }, { "Pivot2": 3.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 0.0f @@ -196,6 +196,15 @@ "Comment": "", "Speed": 3.0f, "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "LEFT_LEG", @@ -205,15 +214,6 @@ "Pivot1": 0.0f, "Rotation2": -18.0f }, - { - "Pivot2": 3.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -12.0f, - "Pivot0": 0.0f, - "Pivot1": 1.0f, - "Rotation2": 0.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -243,9 +243,9 @@ }, { "Pivot2": 3.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -12.0f, "Pivot0": 0.0f, "Pivot1": 1.0f, "Rotation2": 0.0f @@ -259,6 +259,15 @@ "Comment": "", "Speed": 3.0f, "FrameParts": [ + { + "Pivot2": 5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -37.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "LEFT_LEG", @@ -268,15 +277,6 @@ "Pivot1": 0.0f, "Rotation2": -18.0f }, - { - "Pivot2": 5.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -25.0f, - "Pivot0": 0.0f, - "Pivot1": 2.0f, - "Rotation2": 0.0f - }, { "Pivot2": 0.0f, "Part": "RIGHT_LEG", @@ -306,9 +306,9 @@ }, { "Pivot2": 5.0f, - "Part": "HEAD", + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": -37.0f, + "Rotation0": -25.0f, "Pivot0": 0.0f, "Pivot1": 2.0f, "Rotation2": 0.0f @@ -321,7 +321,7 @@ "CurrentFrameTime": 0, "CurrentFrame": 3, "Smooth": 0b, - "ID": 8, + "ID": 12, "WhileAttacking": 1b, "WhileWalking": 1b, "Name": "Ability_Laser_Windup", diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Orb_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Orb_Active.json new file mode 100644 index 000000000..994e2190c --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Orb_Active.json @@ -0,0 +1,77 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": -37.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_LEG", + "Rotation1": -75.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -50.0f, + "Rotation0": 50.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": -56.0f + }, + { + "Pivot2": -6.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": -44.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 30 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 13, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Orb_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json index 77f21f941..1be8ef71c 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Orb_Windup.json @@ -7,11 +7,11 @@ "Comment": "", "FrameParts": [ { - "Pivot2": 0.0f, - "Part": "BODY", - "Rotation1": 31.0f, - "Rotation0": 0.0f, - "Pivot0": 0.0f, + "Pivot2": -3.0f, + "Part": "LEFT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": 1.0f, "Pivot1": 0.0f, "Rotation2": 0.0f }, @@ -24,15 +24,6 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, - { - "Pivot2": 5.0f, - "Part": "RIGHT_ARM", - "Rotation1": 37.0f, - "Rotation0": -101.0f, - "Pivot0": 2.0f, - "Pivot1": 1.0f, - "Rotation2": -25.0f - }, { "Pivot2": 0.0f, "Part": "LEFT_ARM", @@ -43,31 +34,49 @@ "Rotation2": -90.0f }, { - "Pivot2": -3.0f, - "Part": "LEFT_LEG", - "Rotation1": -18.0f, - "Rotation0": 12.0f, - "Pivot0": 1.0f, + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 70.0f, + "Rotation0": -125.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -50.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 31.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f } ], - "Duration": 20 + "Duration": 26 }, { "ColorMarker": 16777215, "Comment": "", - "Speed": 1.0f, + "Speed": 2.0f, "FrameParts": [ { "Pivot2": 0.0f, - "Part": "BODY", - "Rotation1": -44.0f, - "Rotation0": 12.0f, + "Part": "HEAD", + "Rotation1": -37.0f, + "Rotation0": 25.0f, "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f }, + { + "Pivot2": 4.0f, + "Part": "LEFT_LEG", + "Rotation1": -75.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": -3.0f, "Part": "RIGHT_LEG", @@ -78,13 +87,13 @@ "Rotation2": 0.0f }, { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": -37.0f, - "Rotation0": 25.0f, - "Pivot0": 0.0f, + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -50.0f, + "Rotation0": 50.0f, + "Pivot0": -3.0f, "Pivot1": 0.0f, - "Rotation2": 0.0f + "Rotation2": -56.0f }, { "Pivot2": -6.0f, @@ -95,33 +104,6 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, - { - "Pivot2": 4.0f, - "Part": "LEFT_ARM", - "Rotation1": -50.0f, - "Rotation0": 50.0f, - "Pivot0": -3.0f, - "Pivot1": 0.0f, - "Rotation2": -56.0f - }, - { - "Pivot2": 4.0f, - "Part": "LEFT_LEG", - "Rotation1": -75.0f, - "Rotation0": 12.0f, - "Pivot0": -1.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - } - ], - "Smooth": 0b, - "Duration": 5 - }, - { - "ColorMarker": 16777215, - "Comment": "", - "Speed": 0.5f, - "FrameParts": [ { "Pivot2": 0.0f, "Part": "BODY", @@ -130,55 +112,10 @@ "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f - }, - { - "Pivot2": -3.0f, - "Part": "RIGHT_LEG", - "Rotation1": -18.0f, - "Rotation0": 12.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "HEAD", - "Rotation1": -37.0f, - "Rotation0": 25.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": -6.0f, - "Part": "RIGHT_ARM", - "Rotation1": 0.0f, - "Rotation0": -90.0f, - "Pivot0": 2.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 4.0f, - "Part": "LEFT_ARM", - "Rotation1": -50.0f, - "Rotation0": 50.0f, - "Pivot0": -3.0f, - "Pivot1": 0.0f, - "Rotation2": -56.0f - }, - { - "Pivot2": 4.0f, - "Part": "LEFT_LEG", - "Rotation1": -75.0f, - "Rotation0": 12.0f, - "Pivot0": -1.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f } ], "Smooth": 0b, - "Duration": 5 + "Duration": 4 } ], "CurrentFrameTime": 0, diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json index 90e16e948..da3e8d61f 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Active.json @@ -6,6 +6,15 @@ "ColorMarker": 16777215, "Comment": "", "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "HEAD", @@ -15,33 +24,6 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, - { - "Pivot2": 0.0f, - "Part": "LEFT_ARM", - "Rotation1": 0.0f, - "Rotation0": -208.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 12.0f - }, - { - "Pivot2": 0.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -6.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_ARM", - "Rotation1": 0.0f, - "Rotation0": -208.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": -12.0f - }, { "Pivot2": -2.0f, "Part": "RIGHT_LEG", @@ -62,9 +44,27 @@ }, { "Pivot2": 0.0f, - "Part": "FULL_MODEL", + "Part": "LEFT_ARM", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -208.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 12.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -208.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -6.0f, "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f @@ -76,7 +76,7 @@ "CurrentFrameTime": 0, "CurrentFrame": 0, "Smooth": 0b, - "ID": 5, + "ID": 14, "WhileAttacking": 1b, "WhileWalking": 1b, "Name": "Ability_Slam_Active", diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json index b35cef0cf..0c22ac017 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_Slam_Windup.json @@ -17,12 +17,21 @@ "Rotation2": 0.0f }, { - "Pivot2": 2.0f, - "Part": "BODY", + "Pivot2": 4.0f, + "Part": "RIGHT_LEG", "Rotation1": 0.0f, - "Rotation0": 12.0f, + "Rotation0": 82.0f, "Pivot0": 0.0f, - "Pivot1": 6.0f, + "Pivot1": 7.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, "Rotation2": 0.0f }, { @@ -44,21 +53,12 @@ "Rotation2": 6.0f }, { - "Pivot2": 4.0f, - "Part": "RIGHT_LEG", + "Pivot2": 2.0f, + "Part": "BODY", "Rotation1": 0.0f, - "Rotation0": 82.0f, + "Rotation0": 12.0f, "Pivot0": 0.0f, - "Pivot1": 7.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "LEFT_LEG", - "Rotation1": 0.0f, - "Rotation0": 18.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, + "Pivot1": 6.0f, "Rotation2": 0.0f } ], @@ -69,6 +69,15 @@ "ColorMarker": 16777215, "Comment": "", "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, { "Pivot2": 0.0f, "Part": "HEAD", @@ -78,33 +87,6 @@ "Pivot1": 0.0f, "Rotation2": 0.0f }, - { - "Pivot2": 0.0f, - "Part": "LEFT_ARM", - "Rotation1": 0.0f, - "Rotation0": -82.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "BODY", - "Rotation1": 0.0f, - "Rotation0": -6.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, - { - "Pivot2": 0.0f, - "Part": "RIGHT_ARM", - "Rotation1": 0.0f, - "Rotation0": -88.0f, - "Pivot0": 0.0f, - "Pivot1": 0.0f, - "Rotation2": 0.0f - }, { "Pivot2": -2.0f, "Part": "RIGHT_LEG", @@ -125,9 +107,27 @@ }, { "Pivot2": 0.0f, - "Part": "FULL_MODEL", + "Part": "LEFT_ARM", "Rotation1": 0.0f, - "Rotation0": 0.0f, + "Rotation0": -82.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -88.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -6.0f, "Pivot0": 0.0f, "Pivot1": 0.0f, "Rotation2": 0.0f @@ -139,7 +139,7 @@ "CurrentFrameTime": 0, "CurrentFrame": 0, "Smooth": 0b, - "ID": 4, + "ID": 15, "WhileAttacking": 1b, "WhileWalking": 1b, "Name": "Ability_Slam_Windup", From 1b8ad4dd904499f5b81ccf983b03d06fde4b34a9 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 30 Jan 2026 05:01:54 -0500 Subject: [PATCH 34/85] Player Abilities --- src/api | 2 +- .../kamkeel/npcs/command/AbilityCommand.java | 53 +- .../npcs/controllers/SyncController.java | 45 +- .../controllers/data/ability/Ability.java | 220 +++++--- .../data/ability/AbilityController.java | 292 ++++++---- .../controllers/data/ability/AbilitySlot.java | 124 +++++ .../controllers/data/ability/AnchorPoint.java | 35 +- .../data/ability/BuiltInAbility.java | 63 +++ .../controllers/data/ability/Condition.java | 55 +- .../controllers/data/ability/UserType.java | 26 + .../data/ability/type/AbilityCharge.java | 128 ++--- .../data/ability/type/AbilityCutter.java | 28 +- .../data/ability/type/AbilityDash.java | 68 +-- .../data/ability/type/AbilityDisc.java | 20 +- .../data/ability/type/AbilityEnergyBeam.java | 20 +- .../data/ability/type/AbilityGuard.java | 26 +- .../data/ability/type/AbilityHazard.java | 66 +-- .../data/ability/type/AbilityHeal.java | 26 +- .../data/ability/type/AbilityHeavyHit.java | 6 +- .../data/ability/type/AbilityLaserShot.java | 16 +- .../data/ability/type/AbilityOrb.java | 20 +- .../data/ability/type/AbilityProjectile.java | 30 +- .../data/ability/type/AbilityShockwave.java | 16 +- .../data/ability/type/AbilitySlam.java | 158 +++--- .../data/ability/type/AbilitySweeper.java | 19 +- .../data/ability/type/AbilityTeleport.java | 91 ++-- .../data/ability/type/AbilityTrap.java | 56 +- .../data/ability/type/AbilityVortex.java | 32 +- .../npcs/entity/EntityAbilityBeam.java | 11 +- .../npcs/entity/EntityAbilityDisc.java | 7 +- .../npcs/entity/EntityAbilityLaser.java | 5 +- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 7 +- .../npcs/entity/EntityAbilityProjectile.java | 17 +- .../npcs/entity/EntityAbilitySweeper.java | 14 +- .../kamkeel/npcs/network/PacketHandler.java | 18 +- .../npcs/network/enums/EnumDataPacket.java | 1 + .../npcs/network/enums/EnumRequestPacket.java | 8 +- .../npcs/network/enums/EnumSyncType.java | 3 +- .../data/ability/PlayerAbilitySyncPacket.java | 73 +++ .../packets/player/SpecialKeyStatePacket.java | 6 + ...ket.java => CustomAbilitiesGetPacket.java} | 12 +- ...acket.java => CustomAbilityGetPacket.java} | 24 +- ...et.java => CustomAbilityRemovePacket.java} | 24 +- ...cket.java => CustomAbilitySavePacket.java} | 20 +- .../kamkeel/npcs/util/AnchorPointHelper.java | 7 +- src/main/java/noppes/npcs/CustomNpcs.java | 1 - src/main/java/noppes/npcs/DataAbilities.java | 115 ++-- src/main/java/noppes/npcs/EventHooks.java | 6 + .../java/noppes/npcs/NoppesUtilServer.java | 10 +- .../noppes/npcs/ScriptPlayerEventHandler.java | 7 + .../client/gui/SubGuiNpcDialogVisual.java | 60 +-- .../client/gui/SubGuiNpcPartyOptions.java | 4 +- .../client/gui/SubGuiSpawningOptions.java | 4 +- .../client/gui/advanced/GuiNPCAbilities.java | 221 +++++--- .../gui/advanced/SubGuiAbilityConfig.java | 16 +- .../advanced/SubGuiAbilityDeleteConfirm.java | 4 +- .../gui/advanced/SubGuiAbilityEditMode.java | 56 ++ .../gui/advanced/SubGuiAbilityLoad.java | 121 +++-- .../gui/advanced/SubGuiAbilityLoadMode.java | 56 ++ .../advanced/SubGuiAbilitySaveConfirm.java | 4 +- .../gui/advanced/SubGuiConditionEdit.java | 6 +- .../advanced/ability/SubGuiAbilityDisc.java | 8 +- .../ability/SubGuiAbilityEffects.java | 4 +- .../ability/SubGuiAbilityEnergyBeam.java | 8 +- .../ability/SubGuiAbilityLaserShot.java | 4 +- .../advanced/ability/SubGuiAbilityOrb.java | 8 +- .../client/gui/global/GuiNPCManageLinked.java | 18 +- .../gui/global/GuiNpcManageAbilities.java | 60 ++- .../gui/global/GuiNpcNaturalSpawns.java | 8 +- .../gui/player/AuctionTooltipHandler.java | 4 +- .../client/gui/player/GuiAnvilRecipes.java | 6 +- .../client/gui/player/GuiAuctionBidding.java | 2 +- .../gui/player/GuiAuctionInterface.java | 4 +- .../client/gui/player/GuiAuctionSell.java | 4 +- .../npcs/client/gui/player/GuiNPCTrader.java | 6 +- .../client/gui/player/SubGuiAuctionBid.java | 6 +- .../gui/player/SubGuiAuctionBuyNow.java | 4 +- .../gui/player/inventory/GuiProfiles.java | 2 +- .../client/gui/roles/GuiNpcTraderSetup.java | 2 +- .../gui/roles/SubGuiNpcTraderStock.java | 2 +- .../gui/roles/SubGuiNpcTraderStockSlots.java | 2 +- .../client/gui/util/GuiAbilityInterface.java | 2 +- .../client/gui/util/GuiScriptTextArea.java | 4 +- .../gui/util/key/OverlayKeyPresetViewer.java | 2 +- .../gui/util/script/GoToLineDialog.java | 2 +- .../util/script/RenameRefactorHandler.java | 2 +- .../noppes/npcs/constants/EnumScrollData.java | 2 +- .../controllers/data/PlayerAbilityData.java | 503 ++++++++++++++++++ .../npcs/controllers/data/PlayerData.java | 11 + .../event/player/PlayerAbilityEvent.java | 101 ++++ .../scripted/wrapper/ScriptDataAbilities.java | 43 +- .../wrapper/ScriptPlayerAbilityData.java | 112 ++++ 92 files changed, 2610 insertions(+), 1025 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/UserType.java create mode 100644 src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java rename src/main/java/kamkeel/npcs/network/packets/request/ability/{SavedAbilitiesGetPacket.java => CustomAbilitiesGetPacket.java} (75%) rename src/main/java/kamkeel/npcs/network/packets/request/ability/{SavedAbilityGetPacket.java => CustomAbilityGetPacket.java} (70%) rename src/main/java/kamkeel/npcs/network/packets/request/ability/{SavedAbilityRemovePacket.java => CustomAbilityRemovePacket.java} (69%) rename src/main/java/kamkeel/npcs/network/packets/request/ability/{SavedAbilitySavePacket.java => CustomAbilitySavePacket.java} (73%) create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityEditMode.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoadMode.java create mode 100644 src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java create mode 100644 src/main/java/noppes/npcs/scripted/event/player/PlayerAbilityEvent.java create mode 100644 src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java diff --git a/src/api b/src/api index 06c9daf81..db6a68e43 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 06c9daf81be8df0138a992ca6bcabc05e37189cb +Subproject commit db6a68e43073b2828ec05a3c2ede660453c4544e diff --git a/src/main/java/kamkeel/npcs/command/AbilityCommand.java b/src/main/java/kamkeel/npcs/command/AbilityCommand.java index cf5e1ca58..499f9491d 100644 --- a/src/main/java/kamkeel/npcs/command/AbilityCommand.java +++ b/src/main/java/kamkeel/npcs/command/AbilityCommand.java @@ -4,9 +4,6 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import net.minecraft.command.ICommandSender; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import java.util.Set; import static kamkeel.npcs.util.ColorUtil.sendError; @@ -25,25 +22,23 @@ public class AbilityCommand extends CommandKamkeelBase { } @SubCommand( - desc = "List all saved abilities" + desc = "List all custom abilities" ) public void list(ICommandSender sender, String[] args) { - Set names = AbilityController.Instance.getSavedAbilityNames(); - if (names.isEmpty()) { - sendResult(sender, "No saved abilities found."); + Set uuids = AbilityController.Instance.getCustomAbilityIds(); + if (uuids.isEmpty()) { + sendResult(sender, "No custom abilities found."); return; } - List sortedNames = new ArrayList<>(names); - Collections.sort(sortedNames); - - sendResult(sender, "Saved Abilities (" + sortedNames.size() + "):"); - for (String name : sortedNames) { - Ability ability = AbilityController.Instance.getSavedAbility(name); + sendResult(sender, "Custom Abilities (" + uuids.size() + "):"); + for (String uuid : uuids) { + Ability ability = AbilityController.Instance.getCustomAbility(uuid); if (ability != null) { - sendResult(sender, " - \u00A7b" + name + "\u00A77 (" + ability.getTypeId() + ")"); + String name = ability.getName() != null ? ability.getName() : uuid; + sendResult(sender, " - \u00A7b" + name + "\u00A77 (" + ability.getTypeId() + ") [" + uuid + "]"); } else { - sendResult(sender, " - \u00A7b" + name); + sendResult(sender, " - \u00A7b" + uuid); } } } @@ -79,39 +74,39 @@ public class AbilityCommand extends CommandKamkeelBase { } @SubCommand( - desc = "Delete a saved ability", - usage = "" + desc = "Delete a custom ability by UUID", + usage = "" ) public void delete(ICommandSender sender, String[] args) { if (args.length < 1) { - sendError(sender, "Usage: /kam ability delete "); + sendError(sender, "Usage: /kam ability delete "); return; } - String name = args[0]; - if (!AbilityController.Instance.getSavedAbilityNames().contains(name)) { - sendError(sender, "No saved ability with name: " + name); + String uuid = args[0]; + if (!AbilityController.Instance.hasCustomAbility(uuid)) { + sendError(sender, "No custom ability with UUID: " + uuid); return; } - AbilityController.Instance.deleteAbility(name); - sendResult(sender, "Deleted ability: \u00A7b" + name); + AbilityController.Instance.deleteCustomAbility(uuid); + sendResult(sender, "Deleted ability: \u00A7b" + uuid); } @SubCommand( - desc = "Get info about a saved ability", - usage = "" + desc = "Get info about an ability", + usage = "" ) public void info(ICommandSender sender, String[] args) { if (args.length < 1) { - sendError(sender, "Usage: /kam ability info "); + sendError(sender, "Usage: /kam ability info "); return; } - String name = args[0]; - Ability ability = AbilityController.Instance.getSavedAbility(name); + String key = args[0]; + Ability ability = AbilityController.Instance.resolveAbility(key); if (ability == null) { - sendError(sender, "No saved ability with name: " + name); + sendError(sender, "No ability found for: " + key); return; } diff --git a/src/main/java/kamkeel/npcs/controllers/SyncController.java b/src/main/java/kamkeel/npcs/controllers/SyncController.java index 3247498b5..b6010ad86 100644 --- a/src/main/java/kamkeel/npcs/controllers/SyncController.java +++ b/src/main/java/kamkeel/npcs/controllers/SyncController.java @@ -39,11 +39,14 @@ import noppes.npcs.controllers.data.Quest; import noppes.npcs.controllers.data.QuestCategory; import noppes.npcs.controllers.data.RecipeAnvil; import noppes.npcs.controllers.data.RecipeCarpentry; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; import java.io.IOException; import java.util.EnumMap; import java.util.EnumSet; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -72,7 +75,8 @@ public class SyncController { EnumSyncType.ANVIL_RECIPES, EnumSyncType.CUSTOM_EFFECTS, EnumSyncType.MAGIC, - EnumSyncType.MAGIC_CYCLE + EnumSyncType.MAGIC_CYCLE, + EnumSyncType.CUSTOM_ABILITY }; public static void load() { @@ -88,6 +92,7 @@ public class SyncController { registerCache(EnumSyncType.CUSTOM_EFFECTS, SyncController::customEffectsNBT); registerCache(EnumSyncType.MAGIC, SyncController::magicsNBT); registerCache(EnumSyncType.MAGIC_CYCLE, SyncController::magicCyclesNBT); + registerCache(EnumSyncType.CUSTOM_ABILITY, SyncController::customAbilitiesNBT); } public static void syncPlayer(EntityPlayerMP player) { @@ -323,6 +328,27 @@ public class SyncController { return compound; } + public static NBTTagCompound customAbilitiesNBT() { + NBTTagList list = new NBTTagList(); + NBTTagCompound compound = new NBTTagCompound(); + for (Map.Entry entry : AbilityController.Instance.getCustomAbilities().entrySet()) { + NBTTagCompound abilityNBT = entry.getValue().writeNBT(); + abilityNBT.setString("CustomAbilityId", entry.getKey()); + list.appendTag(abilityNBT); + } + compound.setTag("Data", list); + return compound; + } + + public static void syncAllCustomAbilities() { + CachedSyncPayload payload = rebuildNow(EnumSyncType.CUSTOM_ABILITY); + if (payload == null) { + return; + } + PacketHandler.Instance.sendToAll(new SyncPacket(EnumSyncType.CUSTOM_ABILITY, payload)); + updateAllPlayerRevisions(EnumSyncType.CUSTOM_ABILITY, payload.getRevision()); + } + public static void syncPlayerData(EntityPlayerMP player, boolean update) { PlayerData data = PlayerData.get(player); if (data != null) { @@ -595,6 +621,21 @@ public class SyncController { ce.customEffectsSync.clear(); break; } + case CUSTOM_ABILITY: { + NBTTagList list = fullCompound.getTagList("Data", 10); + LinkedHashMap sync = new LinkedHashMap<>(); + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt = list.getCompoundTagAt(i); + String uuid = nbt.getString("CustomAbilityId"); + Ability ability = AbilityController.Instance.fromNBT(nbt); + if (ability != null) { + ability.setId(uuid); + sync.put(uuid, ability); + } + } + AbilityController.Instance.setCustomAbilities(sync); + break; + } } ClientCacheHandler.updateClientRevision(enumSyncType, revision); @@ -843,6 +884,8 @@ public class SyncController { return EnumSet.of(EnumSyncType.ANVIL_RECIPES); case CUSTOM_EFFECTS: return EnumSet.of(EnumSyncType.CUSTOM_EFFECTS); + case CUSTOM_ABILITY: + return EnumSet.of(EnumSyncType.CUSTOM_ABILITY); default: return EnumSet.noneOf(EnumSyncType.class); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index eb59edf7c..6f66614e0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -19,9 +19,14 @@ import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; +import net.minecraft.entity.player.EntityPlayer; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.controllers.ScriptController; +import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; +import noppes.npcs.scripted.event.player.PlayerAbilityEvent; import java.util.ArrayList; import java.util.List; @@ -81,6 +86,12 @@ public abstract class Ability implements IAbility { // Custom data for external mods protected NBTTagCompound customData = new NBTTagCompound(); + // User type restriction + protected UserType allowedBy = UserType.BOTH; + + // Cooldown override + protected boolean ignoreCooldown = false; + // Configurable potion effects protected List effects = new ArrayList<>(); @@ -101,12 +112,12 @@ public abstract class Ability implements IAbility { /** * Called first tick of ACTIVE phase */ - public abstract void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world); + public abstract void onExecute(EntityLivingBase caster, EntityLivingBase target, World world); /** * Called every tick of ACTIVE phase */ - public abstract void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick); + public abstract void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick); /** * Write type-specific config to NBT @@ -122,55 +133,55 @@ public abstract class Ability implements IAbility { // OPTIONAL OVERRIDES // ═══════════════════════════════════════════════════════════════════ - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { } - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { } - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { } /** * Apply damage to an entity with ability hit event support. * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. * - * @param npc The NPC executing the ability + * @param caster The entity executing the ability (NPC or Player) * @param hitEntity The entity being hit * @param damage The damage amount * @param knockback The horizontal knockback * @return true if damage was applied (not cancelled), false if cancelled */ - protected boolean applyAbilityDamage(EntityNPCInterface npc, EntityLivingBase hitEntity, + protected boolean applyAbilityDamage(EntityLivingBase caster, EntityLivingBase hitEntity, float damage, float knockback) { - double dx = hitEntity.posX - npc.posX; - double dz = hitEntity.posZ - npc.posZ; - return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, 0.0f, dx, dz); + double dx = hitEntity.posX - caster.posX; + double dz = hitEntity.posZ - caster.posZ; + return applyAbilityDamageInternal(caster, hitEntity, damage, knockback, 0.0f, dx, dz); } /** * Apply damage to an entity with ability hit event support and vertical knockback. * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. * - * @param npc The NPC executing the ability + * @param caster The entity executing the ability (NPC or Player) * @param hitEntity The entity being hit * @param damage The damage amount * @param knockback The horizontal knockback * @param knockbackUp The vertical knockback * @return true if damage was applied (not cancelled), false if cancelled */ - protected boolean applyAbilityDamage(EntityNPCInterface npc, EntityLivingBase hitEntity, + protected boolean applyAbilityDamage(EntityLivingBase caster, EntityLivingBase hitEntity, float damage, float knockback, float knockbackUp) { - double dx = hitEntity.posX - npc.posX; - double dz = hitEntity.posZ - npc.posZ; - return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, knockbackUp, dx, dz); + double dx = hitEntity.posX - caster.posX; + double dz = hitEntity.posZ - caster.posZ; + return applyAbilityDamageInternal(caster, hitEntity, damage, knockback, knockbackUp, dx, dz); } /** * Apply damage to an entity with ability hit event support and custom knockback direction. * Fires the abilityHit script event, allowing scripts to modify or cancel the damage. * - * @param npc The NPC executing the ability + * @param caster The entity executing the ability (NPC or Player) * @param hitEntity The entity being hit * @param damage The damage amount * @param knockback The horizontal knockback @@ -178,46 +189,74 @@ public abstract class Ability implements IAbility { * @param knockbackDirZ The Z component of knockback direction * @return true if damage was applied (not cancelled), false if cancelled */ - protected boolean applyAbilityDamageWithDirection(EntityNPCInterface npc, EntityLivingBase hitEntity, + protected boolean applyAbilityDamageWithDirection(EntityLivingBase caster, EntityLivingBase hitEntity, float damage, float knockback, double knockbackDirX, double knockbackDirZ) { - return applyAbilityDamageInternal(npc, hitEntity, damage, knockback, 0.0f, knockbackDirX, knockbackDirZ); + return applyAbilityDamageInternal(caster, hitEntity, damage, knockback, 0.0f, knockbackDirX, knockbackDirZ); } /** * Internal unified damage application method. * All public damage methods delegate to this. + * Supports both NPC and Player casters. */ - private boolean applyAbilityDamageInternal(EntityNPCInterface npc, EntityLivingBase hitEntity, + private boolean applyAbilityDamageInternal(EntityLivingBase caster, EntityLivingBase hitEntity, float damage, float knockback, float knockbackUp, double knockbackDirX, double knockbackDirZ) { - DataAbilities dataAbilities = npc.abilities; - AbilityEvent.HitEvent event = dataAbilities.fireHitEvent( - this, currentTarget, hitEntity, damage, knockback, knockbackUp); + // Fire hit event for NPC casters (NPC event system) + if (caster instanceof EntityNPCInterface) { + EntityNPCInterface npc = (EntityNPCInterface) caster; + DataAbilities dataAbilities = npc.abilities; + AbilityEvent.HitEvent event = dataAbilities.fireHitEvent( + this, currentTarget, hitEntity, damage, knockback, knockbackUp); - if (event == null) { - return false; // Cancelled + if (event == null) { + return false; // Cancelled + } + + damage = event.getDamage(); + knockback = event.getKnockback(); + knockbackUp = event.getKnockbackUp(); + } + // Fire hit event for Player casters (Player event system) + else if (caster instanceof EntityPlayer && ScriptController.Instance != null) { + EntityPlayer player = (EntityPlayer) caster; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + if (handler != null) { + IPlayer iPlayer = (IPlayer) NpcAPI.Instance().getIEntity(player); + PlayerAbilityEvent.HitEvent event = new PlayerAbilityEvent.HitEvent( + iPlayer, this, currentTarget, hitEntity, damage, knockback, knockbackUp); + + if (noppes.npcs.EventHooks.onPlayerAbilityHit(handler, event)) { + return false; // Cancelled + } + + damage = event.getDamage(); + knockback = event.getKnockback(); + knockbackUp = event.getKnockbackUp(); + } } - // Apply damage with potentially modified values - float finalDamage = event.getDamage(); - float finalKnockback = event.getKnockback(); - float finalKnockbackUp = event.getKnockbackUp(); - // Apply damage - if (finalDamage > 0) { - hitEntity.attackEntityFrom(new NpcDamageSource("mob", npc), finalDamage); + if (damage > 0) { + if (caster instanceof EntityNPCInterface) { + hitEntity.attackEntityFrom(new NpcDamageSource("mob", (EntityNPCInterface) caster), damage); + } else if (caster instanceof EntityPlayer) { + hitEntity.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) caster), damage); + } else { + hitEntity.attackEntityFrom(DamageSource.causeMobDamage(caster), damage); + } } // Apply knockback if any - if (finalKnockback > 0 || finalKnockbackUp > 0) { - applyNpcKnockback(hitEntity, knockbackDirX, knockbackDirZ, finalKnockback, finalKnockbackUp); + if (knockback > 0 || knockbackUp > 0) { + applyKnockback(hitEntity, knockbackDirX, knockbackDirZ, knockback, knockbackUp); } return true; } - private void applyNpcKnockback(EntityLivingBase hitEntity, double dirX, double dirZ, float knockback, float knockbackUp) { + private void applyKnockback(EntityLivingBase hitEntity, double dirX, double dirZ, float knockback, float knockbackUp) { double len = Math.sqrt(dirX * dirX + dirZ * dirZ); double x = 0; double z = 0; @@ -334,33 +373,33 @@ public abstract class Ability implements IAbility { * @param target The target (for position calculation) * @return The telegraph instance, or null if no telegraph */ - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!showTelegraph || telegraphType == TelegraphType.NONE) { return null; } Telegraph telegraph; double x, y, z; - float yaw = npc.rotationYaw; + float yaw = caster.rotationYaw; // Determine position based on targeting mode - boolean positionAtNpc = targetingMode == TargetingMode.AOE_SELF || + boolean positionAtCaster = targetingMode == TargetingMode.AOE_SELF || targetingMode == TargetingMode.SELF || telegraphType == TelegraphType.LINE || telegraphType == TelegraphType.CONE; - if (positionAtNpc) { - x = npc.posX; - y = findGroundLevel(npc.worldObj, npc.posX, npc.posY, npc.posZ); - z = npc.posZ; + if (positionAtCaster) { + x = caster.posX; + y = findGroundLevel(caster.worldObj, caster.posX, caster.posY, caster.posZ); + z = caster.posZ; } else if (target != null) { x = target.posX; - y = findGroundLevel(npc.worldObj, target.posX, target.posY, target.posZ); + y = findGroundLevel(caster.worldObj, target.posX, target.posY, target.posZ); z = target.posZ; } else { - x = npc.posX; - y = findGroundLevel(npc.worldObj, npc.posX, npc.posY, npc.posZ); - z = npc.posZ; + x = caster.posX; + y = findGroundLevel(caster.worldObj, caster.posX, caster.posY, caster.posZ); + z = caster.posZ; } // Create telegraph based on type @@ -391,12 +430,12 @@ public abstract class Ability implements IAbility { telegraph.setHeightOffset(telegraphHeightOffset); TelegraphInstance instance = new TelegraphInstance(telegraph, x, y, z, yaw); - instance.setCasterEntityId(npc.getEntityId()); + instance.setCasterEntityId(caster.getEntityId()); // Set entity to follow based on targeting mode - if (positionAtNpc) { - // AOE_SELF abilities: telegraph follows NPC during windup - instance.setEntityIdToFollow(npc.getEntityId()); + if (positionAtCaster) { + // AOE_SELF abilities: telegraph follows caster during windup + instance.setEntityIdToFollow(caster.getEntityId()); // For LINE/CONE telegraphs: track target direction during windup if ((telegraphType == TelegraphType.LINE || telegraphType == TelegraphType.CONE) && target != null) { @@ -729,9 +768,20 @@ public abstract class Ability implements IAbility { // CONDITION CHECKING // ═══════════════════════════════════════════════════════════════════ - public boolean checkConditions(EntityNPCInterface npc, EntityLivingBase target) { + public boolean checkConditions(EntityLivingBase caster, EntityLivingBase target) { for (Condition c : conditions) { - if (!c.check(npc, target)) return false; + if (!c.check(caster, target)) return false; + } + return true; + } + + /** + * Check conditions for a player caster, skipping target-requiring conditions. + */ + public boolean checkConditionsForPlayer(EntityLivingBase caster) { + for (Condition c : conditions) { + if (c.requiresTarget()) continue; + if (!c.check(caster, null)) return false; } return true; } @@ -768,6 +818,8 @@ public abstract class Ability implements IAbility { nbt.setString("telegraphType", telegraphType.name()); nbt.setFloat("telegraphHeightOffset", telegraphHeightOffset); nbt.setTag("customData", customData); + nbt.setInteger("allowedBy", allowedBy.ordinal()); + nbt.setBoolean("ignoreCooldown", ignoreCooldown); // Conditions NBTTagList condList = new NBTTagList(); @@ -803,38 +855,14 @@ public abstract class Ability implements IAbility { dazedTicks = nbt.getInteger("recovery"); interruptible = nbt.getBoolean("interruptible"); lockMovement = LockMovementType.fromOrdinal(nbt.getInteger("lockMovement")); - // Support old telegraphColor key for backwards compatibility - if (nbt.hasKey("windUpColor")) { - windUpColor = nbt.getInteger("windUpColor"); - } else if (nbt.hasKey("telegraphColor")) { - windUpColor = nbt.getInteger("telegraphColor"); - } - if (nbt.hasKey("activeColor")) { - activeColor = nbt.getInteger("activeColor"); - } else { - // Default active color to windUpColor with higher alpha - activeColor = (windUpColor & 0x00FFFFFF) | 0xC0000000; - } - // Sound fields (with backwards compatibility for old castSound) - if (nbt.hasKey("windUpSound")) { - windUpSound = nbt.getString("windUpSound"); - } else if (nbt.hasKey("castSound")) { - windUpSound = nbt.getString("castSound"); // Migrate old field - } else { - windUpSound = ""; - } - activeSound = nbt.hasKey("activeSound") ? nbt.getString("activeSound") : ""; - // Animation fields (with backwards compatibility for old animationId) - if (nbt.hasKey("windUpAnimationId")) { - windUpAnimationId = nbt.getInteger("windUpAnimationId"); - } else if (nbt.hasKey("animationId")) { - windUpAnimationId = nbt.getInteger("animationId"); // Migrate old field - } else { - windUpAnimationId = -1; - } + windUpColor = nbt.getInteger("windUpColor"); + activeColor = nbt.getInteger("activeColor"); + windUpSound = nbt.getString("windUpSound"); + activeSound = nbt.getString("activeSound"); + windUpAnimationId = nbt.hasKey("windUpAnimationId") ? nbt.getInteger("windUpAnimationId") : -1; activeAnimationId = nbt.hasKey("activeAnimationId") ? nbt.getInteger("activeAnimationId") : -1; - windUpAnimationName = nbt.hasKey("windUpAnimationName") ? nbt.getString("windUpAnimationName") : ""; - activeAnimationName = nbt.hasKey("activeAnimationName") ? nbt.getString("activeAnimationName") : ""; + windUpAnimationName = nbt.getString("windUpAnimationName"); + activeAnimationName = nbt.getString("activeAnimationName"); showTelegraph = !nbt.hasKey("showTelegraph") || nbt.getBoolean("showTelegraph"); if (nbt.hasKey("telegraphType")) { try { @@ -845,6 +873,8 @@ public abstract class Ability implements IAbility { } telegraphHeightOffset = nbt.hasKey("telegraphHeightOffset") ? nbt.getFloat("telegraphHeightOffset") : 0.1f; customData = nbt.getCompoundTag("customData"); + allowedBy = nbt.hasKey("allowedBy") ? UserType.fromOrdinal(nbt.getInteger("allowedBy")) : UserType.BOTH; + ignoreCooldown = nbt.hasKey("ignoreCooldown") && nbt.getBoolean("ignoreCooldown"); // Conditions conditions.clear(); @@ -1170,6 +1200,22 @@ public abstract class Ability implements IAbility { conditions.add(c); } + public UserType getAllowedBy() { + return allowedBy; + } + + public void setAllowedBy(UserType allowedBy) { + this.allowedBy = allowedBy; + } + + public boolean isIgnoreCooldown() { + return ignoreCooldown; + } + + public void setIgnoreCooldown(boolean ignoreCooldown) { + this.ignoreCooldown = ignoreCooldown; + } + public List getEffects() { return effects; } @@ -1192,6 +1238,16 @@ public abstract class Ability implements IAbility { // IAbility API METHODS // ═══════════════════════════════════════════════════════════════════ + @Override + public int getAllowedByType() { + return allowedBy.ordinal(); + } + + @Override + public void setAllowedByType(int type) { + this.allowedBy = UserType.fromOrdinal(type); + } + @Override public INbt getNbt() { return NpcAPI.Instance().getINbt(writeNBT()); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index a61df06fa..62d226bf7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -18,6 +18,7 @@ import kamkeel.npcs.controllers.data.ability.type.AbilitySlam; import kamkeel.npcs.controllers.data.ability.type.AbilityTeleport; import kamkeel.npcs.controllers.data.ability.type.AbilityTrap; import kamkeel.npcs.controllers.data.ability.type.AbilityVortex; +import kamkeel.npcs.controllers.SyncController; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; @@ -29,30 +30,46 @@ import java.util.*; import java.util.function.Supplier; /** - * Controller for ability types. Allows external mods to register custom ability types. - * Initialize during FMLInitializationEvent. + * Central controller for ability types and presets. *

- * Also manages saved ability presets that can be reused across NPCs. + * Three maps: + *

    + *
  • {@code typeFactories} — keyed by typeId (lang key), creates new instances of each ability type
  • + *
  • {@code abilities} — built-in pre-configured abilities, keyed by unique name
  • + *
  • {@code customAbilities} — user-created presets, keyed by UUID
  • + *
*/ public class AbilityController implements IAbilityHandler { - public static AbilityController Instance; + public static AbilityController Instance = new AbilityController(); - private final Map> factories = new LinkedHashMap<>(); - private final Map> factoriesByTypeId = new LinkedHashMap<>(); - private final Map savedAbilities = new LinkedHashMap<>(); + /** Type factories keyed by typeId (lang key, e.g. "ability.cnpc.slam"). */ + private final Map> typeFactories = new LinkedHashMap<>(); + + /** Built-in pre-configured abilities keyed by unique name. */ + private final Map abilities = new LinkedHashMap<>(); + + /** User-created custom ability presets keyed by UUID. */ + private final Map customAbilities = new LinkedHashMap<>(); + + /** Version counter — incremented on any custom ability add/modify/delete. + * Used by AbilitySlot for cache invalidation. */ + private int version = 0; public AbilityController() { - Instance = this; - registerBuiltins(); + registerBuiltinTypes(); } + // ═══════════════════════════════════════════════════════════════════════════ + // LOADING / SAVING CUSTOM ABILITIES + // ═══════════════════════════════════════════════════════════════════════════ + /** - * Load saved abilities from world directory. - * Called when world loads. + * Load custom ability presets from world directory. + * Called when world loads. Files are named {@code .json}. */ public void load() { - savedAbilities.clear(); + customAbilities.clear(); File dir = getDir(); if (!dir.exists()) { return; @@ -64,22 +81,22 @@ public class AbilityController implements IAbilityHandler { for (File file : files) { if (!file.isFile() || !file.getName().endsWith(".json")) continue; try { + String filename = file.getName(); + String uuid = filename.substring(0, filename.length() - 5); // strip .json + NBTTagCompound nbt = NBTJsonUtil.LoadFile(file); Ability ability = fromNBT(nbt); - if (ability != null && ability.getName() != null && !ability.getName().isEmpty()) { - savedAbilities.put(ability.getName(), ability); - LogWriter.info("Loaded ability preset: " + ability.getName()); + if (ability != null) { + ability.setId(uuid); + customAbilities.put(uuid, ability); } } catch (Exception e) { - LogWriter.error("Error loading ability preset: " + file.getAbsolutePath(), e); + LogWriter.error("Error loading custom ability: " + file.getAbsolutePath(), e); } } - LogWriter.info("Loaded " + savedAbilities.size() + " ability presets"); + LogWriter.info("Loaded " + customAbilities.size() + " custom abilities"); } - /** - * Get the ability save directory. - */ private File getDir() { File dir = new File(CustomNpcs.getWorldSaveDirectory(), "abilities"); if (!dir.exists()) { @@ -89,26 +106,26 @@ public class AbilityController implements IAbilityHandler { } /** - * Save an ability preset to disk. - * - * @param ability The ability to save - * @return true if successful + * Save a custom ability preset. If the ability has no id, generates a UUID. + * Stores in customAbilities map and writes to disk. */ - public boolean saveAbility(Ability ability) { - if (ability == null || ability.getName() == null || ability.getName().isEmpty()) { - return false; + public boolean saveCustomAbility(Ability ability) { + if (ability == null) return false; + + String uuid = ability.getId(); + if (uuid == null || uuid.isEmpty()) { + uuid = UUID.randomUUID().toString(); + ability.setId(uuid); } File dir = getDir(); - String safeName = ability.getName().replaceAll("[^a-zA-Z0-9_-]", "_"); - File fileNew = new File(dir, safeName + ".json_new"); - File fileCurrent = new File(dir, safeName + ".json"); + File fileNew = new File(dir, uuid + ".json_new"); + File fileCurrent = new File(dir, uuid + ".json"); try { NBTTagCompound nbt = ability.writeNBT(); NBTJsonUtil.SaveFile(fileNew, nbt); - // Atomic rename if (fileCurrent.exists()) { fileCurrent.delete(); } @@ -117,76 +134,144 @@ public class AbilityController implements IAbilityHandler { fileNew.delete(); } - savedAbilities.put(ability.getName(), ability); - LogWriter.info("Saved ability preset: " + ability.getName()); + customAbilities.put(uuid, ability); + version++; + LogWriter.info("Saved custom ability: " + ability.getName() + " [" + uuid + "]"); + SyncController.syncAllCustomAbilities(); return true; } catch (Exception e) { - LogWriter.error("Error saving ability preset: " + ability.getName(), e); + LogWriter.error("Error saving custom ability: " + uuid, e); return false; } } /** - * Delete a saved ability preset. - * - * @param name The name of the ability to delete - * @return true if successful + * Delete a custom ability preset by UUID. */ - public boolean deleteAbility(String name) { - if (name == null || name.isEmpty()) { - return false; - } + public boolean deleteCustomAbility(String uuid) { + if (uuid == null || uuid.isEmpty()) return false; - Ability removed = savedAbilities.remove(name); - if (removed == null) { - return false; - } + Ability removed = customAbilities.remove(uuid); + if (removed == null) return false; File dir = getDir(); - String safeName = name.replaceAll("[^a-zA-Z0-9_-]", "_"); - File file = new File(dir, safeName + ".json"); + File file = new File(dir, uuid + ".json"); if (file.exists()) { file.delete(); } - LogWriter.info("Deleted ability preset: " + name); + version++; + LogWriter.info("Deleted custom ability: " + uuid); + SyncController.syncAllCustomAbilities(); return true; } + // ═══════════════════════════════════════════════════════════════════════════ + // BUILT-IN ABILITY REGISTRY + // ═══════════════════════════════════════════════════════════════════════════ + /** - * Get a saved ability preset by name. + * Register a pre-configured built-in ability by name. + * These are looked up by name in {@link #resolveAbility(String)}. * - * @param name The name of the ability - * @return A copy of the ability, or null if not found + * @param name Unique name (e.g., "Jump Attack", "Ki Blast") + * @param ability Pre-configured ability instance */ - public Ability getSavedAbility(String name) { - Ability saved = savedAbilities.get(name); - if (saved == null) { - return null; + public void registerAbility(String name, Ability ability) { + if (abilities.containsKey(name)) { + LogWriter.info("AbilityController: Overwriting built-in ability: " + name); } - // Return a copy so modifications don't affect the saved version - return fromNBT(saved.writeNBT()); + ability.setName(name); + abilities.put(name, ability); + LogWriter.info("Registered ability: " + name); + } + + // ═══════════════════════════════════════════════════════════════════════════ + // RESOLUTION (used by AbilitySlot, PlayerAbilityData, etc.) + // ═══════════════════════════════════════════════════════════════════════════ + + /** + * Resolve an ability by key. Checks built-in abilities first (by name), + * then custom abilities (by UUID). Returns a copy safe to modify. + * + * @param key The ability name (built-in) or UUID (custom) + * @return A copy of the resolved ability, or null if not found + */ + public Ability resolveAbility(String key) { + if (key == null || key.isEmpty()) return null; + + // Check built-in abilities first + Ability builtIn = abilities.get(key); + if (builtIn != null) { + return fromNBT(builtIn.writeNBT()); + } + + // Check custom abilities + Ability custom = customAbilities.get(key); + if (custom != null) { + return fromNBT(custom.writeNBT()); + } + + return null; } /** - * Check if a saved ability exists. + * Check if an ability key exists (either built-in or custom). */ - public boolean hasSavedAbility(String name) { - return savedAbilities.containsKey(name); + public boolean hasAbility(String key) { + return abilities.containsKey(key) || customAbilities.containsKey(key); } - /** - * Get all saved ability names. - */ - public Set getSavedAbilityNames() { - return new LinkedHashSet<>(savedAbilities.keySet()); + // ═══════════════════════════════════════════════════════════════════════════ + // ACCESSORS + // ═══════════════════════════════════════════════════════════════════════════ + + /** Get a built-in ability by name. Returns the stored instance (not a copy). */ + public Ability getAbility(String name) { + return abilities.get(name); } - /** - * Get all saved abilities. - */ - public Collection getSavedAbilities() { - return savedAbilities.values(); + /** Get all built-in ability names. */ + public Set getAbilityNames() { + return new LinkedHashSet<>(abilities.keySet()); + } + + /** Get a custom ability by UUID. Returns the stored instance (not a copy). */ + public Ability getCustomAbility(String uuid) { + return customAbilities.get(uuid); + } + + /** Check if a custom ability exists by UUID. */ + public boolean hasCustomAbility(String uuid) { + return customAbilities.containsKey(uuid); + } + + /** Get all custom ability UUIDs. */ + public Set getCustomAbilityIds() { + return new LinkedHashSet<>(customAbilities.keySet()); + } + + /** Get the display name for a custom ability by UUID. */ + public String getCustomAbilityName(String uuid) { + Ability a = customAbilities.get(uuid); + return a != null ? a.getName() : null; + } + + /** Get the custom abilities map (used by SyncController). */ + public Map getCustomAbilities() { + return customAbilities; + } + + /** Replace the custom abilities map (used by client-side sync). */ + public void setCustomAbilities(Map synced) { + customAbilities.clear(); + customAbilities.putAll(synced); + version++; + } + + /** Get the version counter (incremented on custom ability changes). */ + public int getVersion() { + return version; } // ═══════════════════════════════════════════════════════════════════════════ @@ -195,28 +280,37 @@ public class AbilityController implements IAbilityHandler { @Override public String[] getTypes() { - // Return the ability typeIds (lang keys), not the factory keys - return factoriesByTypeId.keySet().toArray(new String[0]); + return typeFactories.keySet().toArray(new String[0]); } @Override public boolean hasType(String typeId) { - return factories.containsKey(typeId) || factoriesByTypeId.containsKey(typeId); + return typeFactories.containsKey(typeId); } @Override - public String[] getSavedNames() { - return savedAbilities.keySet().toArray(new String[0]); + public String[] getAbilityNameArray() { + return abilities.keySet().toArray(new String[0]); } @Override - public boolean has(String name) { - return savedAbilities.containsKey(name); + public boolean hasAbilityName(String name) { + return abilities.containsKey(name); } @Override - public boolean delete(String name) { - return deleteAbility(name); + public String[] getCustomAbilityIdArray() { + return customAbilities.keySet().toArray(new String[0]); + } + + @Override + public boolean hasCustomAbilityId(String uuid) { + return customAbilities.containsKey(uuid); + } + + @Override + public boolean deleteCustomAbilityById(String uuid) { + return deleteCustomAbility(uuid); } // ═══════════════════════════════════════════════════════════════════════════ @@ -225,26 +319,23 @@ public class AbilityController implements IAbilityHandler { /** * Register a new ability type. - * Call during FMLInitializationEvent. + * Extracts the typeId from a temporary instance and stores in typeFactories. * - * @param factoryKey The factory key (e.g., "cnpc:slam", "mymod:custom_ability") + * @param factoryKey Unused legacy key — the typeId from the created instance is used * @param factory Factory lambda that creates a new instance */ public void registerType(String factoryKey, Supplier factory) { - if (factories.containsKey(factoryKey)) { - LogWriter.info("AbilityController: Overwriting existing ability type: " + factoryKey); - } - factories.put(factoryKey, factory); - - // Also register by the ability's actual typeId (lang key) Ability temp = factory.get(); - String abilityTypeId = temp.getTypeId(); - factoriesByTypeId.put(abilityTypeId, factory); + String typeId = temp.getTypeId(); + if (typeFactories.containsKey(typeId)) { + LogWriter.info("AbilityController: Overwriting type: " + typeId); + } + typeFactories.put(typeId, factory); } /** * Create an ability from NBT data. - * Uses the "typeId" field to determine which type to create. + * Uses the "typeId" field to look up in typeFactories. */ public Ability fromNBT(NBTTagCompound nbt) { if (nbt == null || !nbt.hasKey("typeId")) { @@ -252,11 +343,7 @@ public class AbilityController implements IAbilityHandler { } String typeId = nbt.getString("typeId"); - Supplier factory = factories.get(typeId); - if (factory == null) { - // Try looking up by ability typeId (lang key) - factory = factoriesByTypeId.get(typeId); - } + Supplier factory = typeFactories.get(typeId); if (factory == null) { LogWriter.info("AbilityController: Unknown ability type: " + typeId); return null; @@ -270,15 +357,10 @@ public class AbilityController implements IAbilityHandler { /** * Create a new empty ability of the given type. * - * @param factoryKey The factory key (e.g., "cnpc:slam") or the ability typeId (e.g., "ability.cnpc.slam") + * @param typeId The ability typeId (e.g., "ability.cnpc.slam") */ - public Ability create(String factoryKey) { - // Try direct lookup first (factory key) - Supplier factory = factories.get(factoryKey); - if (factory == null) { - // Try looking up by ability typeId - factory = factoriesByTypeId.get(factoryKey); - } + public Ability create(String typeId) { + Supplier factory = typeFactories.get(typeId); if (factory == null) { return null; } @@ -288,7 +370,7 @@ public class AbilityController implements IAbilityHandler { /** * Register built-in ability types. */ - private void registerBuiltins() { + private void registerBuiltinTypes() { // Melee/AOE damage abilities registerType("cnpc:slam", AbilitySlam::new); registerType("cnpc:heavy_hit", AbilityHeavyHit::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java new file mode 100644 index 000000000..ca4e7471e --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java @@ -0,0 +1,124 @@ +package kamkeel.npcs.controllers.data.ability; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Wrapper that stores either an inline ability (full NBT) or a reference + * to a built-in/custom ability (by name or UUID). + *

+ * References are lazy-resolved via {@link AbilityController#resolveAbility(String)} + * and cached until the controller version changes. + */ +public class AbilitySlot { + + private Ability inlineAbility; + private String referenceId; + + private transient Ability cachedAbility; + private transient int cachedVersion = -1; + + private AbilitySlot() {} + + /** + * Create a slot with an inline (embedded) ability. + */ + public static AbilitySlot inline(Ability ability) { + AbilitySlot slot = new AbilitySlot(); + slot.inlineAbility = ability; + slot.referenceId = null; + return slot; + } + + /** + * Create a slot that references a built-in ability (by name) or custom ability (by UUID). + */ + public static AbilitySlot reference(String referenceId) { + AbilitySlot slot = new AbilitySlot(); + slot.inlineAbility = null; + slot.referenceId = referenceId; + return slot; + } + + public boolean isReference() { + return referenceId != null; + } + + public String getReferenceId() { + return referenceId; + } + + /** + * Get the resolved ability. For inline slots, returns the ability directly. + * For reference slots, lazily resolves from AbilityController and caches. + * Returns null if the reference cannot be resolved (broken ref). + */ + public Ability getAbility() { + if (!isReference()) { + return inlineAbility; + } + + // Lazy resolve with version-based cache invalidation + AbilityController controller = AbilityController.Instance; + if (controller == null) return null; + + int currentVersion = controller.getVersion(); + if (cachedAbility != null && cachedVersion == currentVersion) { + return cachedAbility; + } + + cachedAbility = controller.resolveAbility(referenceId); + cachedVersion = currentVersion; + return cachedAbility; + } + + /** + * Get the inline ability directly (null for reference slots). + */ + public Ability getInlineAbility() { + return inlineAbility; + } + + /** + * Convert this reference slot to an inline slot by copying the resolved ability. + * No-op if already inline. Returns false if resolution fails. + */ + public boolean convertToInline() { + if (!isReference()) return true; + + Ability resolved = getAbility(); + if (resolved == null) return false; + + // Deep copy via NBT round-trip + inlineAbility = AbilityController.Instance.fromNBT(resolved.writeNBT()); + referenceId = null; + cachedAbility = null; + cachedVersion = -1; + return true; + } + + // ═══════════════════════════════════════════════════════════════════ + // NBT + // ═══════════════════════════════════════════════════════════════════ + + public NBTTagCompound writeNBT() { + if (isReference()) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("Reference", referenceId); + return nbt; + } + return inlineAbility != null ? inlineAbility.writeNBT() : new NBTTagCompound(); + } + + public static AbilitySlot fromNBT(NBTTagCompound nbt) { + if (nbt == null) return null; + + if (nbt.hasKey("Reference")) { + return reference(nbt.getString("Reference")); + } + + // Inline ability + Ability ability = AbilityController.Instance.fromNBT(nbt); + if (ability == null) return null; + return inline(ability); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java index 9bf408c27..01100c318 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java @@ -5,40 +5,33 @@ package kamkeel.npcs.controllers.data.ability; * Determines where the charging visual (orb, disc, etc.) appears relative to the entity. */ public enum AnchorPoint { - FRONT(0, "Front"), // In front of entity face (default) - CENTER(1, "Center"), // Entity center - RIGHT_HAND(2, "Right Hand"), // Right arm/hand position - LEFT_HAND(3, "Left Hand"), // Left arm/hand position - ABOVE_HEAD(4, "Above Head"), // Above the entity - CHEST(5, "Chest"); // Chest level, centered + FRONT("Front"), // In front of entity face (default) + CENTER("Center"), // Entity center + RIGHT_HAND("Right Hand"), // Right arm/hand position + LEFT_HAND("Left Hand"), // Left arm/hand position + ABOVE_HEAD("Above Head"), // Above the entity + CHEST("Chest"); // Chest level, centered - private final int id; private final String displayName; - AnchorPoint(int id, String displayName) { - this.id = id; + AnchorPoint(String displayName) { this.displayName = displayName; } - public int getId() { - return id; - } - public String getDisplayName() { return displayName; } /** - * Get AnchorPoint from NBT id value. - * Returns FRONT if id is invalid. + * Get AnchorPoint from ordinal value. + * Returns FRONT if ordinal is out of bounds. */ - public static AnchorPoint fromId(int id) { - for (AnchorPoint anchor : values()) { - if (anchor.id == id) { - return anchor; - } + public static AnchorPoint fromOrdinal(int ordinal) { + AnchorPoint[] vals = values(); + if (ordinal < 0 || ordinal >= vals.length) { + return FRONT; } - return FRONT; + return vals[ordinal]; } /** diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java b/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java new file mode 100644 index 000000000..69151291f --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java @@ -0,0 +1,63 @@ +package kamkeel.npcs.controllers.data.ability; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Abstract base class for built-in (non-customizable) abilities. + * Built-in abilities are registered by key, have fixed configurations, + * and cannot be modified through the preset GUI system. + *

+ * Examples: simple utility abilities like Jump, Sprint, etc. + * Third-party mods can extend this class to create their own built-in abilities. + */ +public abstract class BuiltInAbility extends Ability { + + /** + * The registry key used to look up this ability (e.g., "cnpc:jump", "dbc:ki_blast"). + */ + private final String registryKey; + + public BuiltInAbility(String registryKey) { + this.registryKey = registryKey; + this.id = registryKey; + this.name = registryKey; + this.typeId = registryKey; + } + + /** + * Get the registry key for this built-in ability. + */ + public String getRegistryKey() { + return registryKey; + } + + /** + * Built-in abilities are not customizable. + */ + @Override + public boolean isCustomizable() { + return false; + } + + /** + * Built-in abilities do not write type-specific NBT (they have fixed configs). + */ + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + // No-op: built-in abilities have fixed configurations + } + + /** + * Built-in abilities do not read type-specific NBT. + */ + @Override + public void readTypeNBT(NBTTagCompound nbt) { + // No-op: built-in abilities have fixed configurations + } + + /** + * Get the duration of the active phase in ticks. + * Built-in abilities must define their own active duration. + */ + public abstract int getActiveDurationTicks(); +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Condition.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Condition.java index 8d078421a..1183fe858 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Condition.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Condition.java @@ -13,11 +13,19 @@ public interface Condition { /** * Check if this condition is met. * - * @param npc The NPC that would use the ability - * @param target The current target (may be null for self-targeting abilities) + * @param caster The entity that would use the ability (NPC or Player) + * @param target The current target (may be null for self-targeting abilities or players) * @return true if the condition is satisfied */ - boolean check(EntityNPCInterface npc, EntityLivingBase target); + boolean check(EntityLivingBase caster, EntityLivingBase target); + + /** + * Whether this condition requires a target entity to evaluate. + * Conditions that return true here will be skipped for player ability checks. + */ + default boolean requiresTarget() { + return false; + } /** * Get the condition type ID for serialization. @@ -75,7 +83,7 @@ public interface Condition { // ═══════════════════════════════════════════════════════════════════ /** - * Condition: NPC HP is above a percentage threshold. + * Condition: Caster HP is above a percentage threshold. */ class ConditionHPAbove implements Condition { private float threshold = 0.5f; // 50% @@ -88,8 +96,8 @@ public interface Condition { } @Override - public boolean check(EntityNPCInterface npc, EntityLivingBase target) { - return npc.getHealth() / npc.getMaxHealth() > threshold; + public boolean check(EntityLivingBase caster, EntityLivingBase target) { + return caster.getHealth() / caster.getMaxHealth() > threshold; } @Override @@ -112,7 +120,7 @@ public interface Condition { } /** - * Condition: NPC HP is below a percentage threshold. + * Condition: Caster HP is below a percentage threshold. */ class ConditionHPBelow implements Condition { private float threshold = 0.5f; @@ -125,8 +133,8 @@ public interface Condition { } @Override - public boolean check(EntityNPCInterface npc, EntityLivingBase target) { - return npc.getHealth() / npc.getMaxHealth() < threshold; + public boolean check(EntityLivingBase caster, EntityLivingBase target) { + return caster.getHealth() / caster.getMaxHealth() < threshold; } @Override @@ -150,6 +158,7 @@ public interface Condition { /** * Condition: Target HP is above a percentage threshold. + * Requires a target - will be skipped for player ability checks. */ class ConditionTargetHPAbove implements Condition { private float threshold = 0.5f; @@ -162,11 +171,16 @@ public interface Condition { } @Override - public boolean check(EntityNPCInterface npc, EntityLivingBase target) { + public boolean check(EntityLivingBase caster, EntityLivingBase target) { if (target == null) return false; return target.getHealth() / target.getMaxHealth() > threshold; } + @Override + public boolean requiresTarget() { + return true; + } + @Override public String getTypeId() { return "target_hp_above"; @@ -188,6 +202,7 @@ public interface Condition { /** * Condition: Target HP is below a percentage threshold. + * Requires a target - will be skipped for player ability checks. */ class ConditionTargetHPBelow implements Condition { private float threshold = 0.5f; @@ -200,11 +215,16 @@ public interface Condition { } @Override - public boolean check(EntityNPCInterface npc, EntityLivingBase target) { + public boolean check(EntityLivingBase caster, EntityLivingBase target) { if (target == null) return false; return target.getHealth() / target.getMaxHealth() < threshold; } + @Override + public boolean requiresTarget() { + return true; + } + @Override public String getTypeId() { return "target_hp_below"; @@ -225,8 +245,9 @@ public interface Condition { } /** - * Condition: NPC has been hit X times within a time window. + * Condition: Caster has been hit X times within a time window. * Useful for reactive abilities that trigger after receiving multiple hits. + * Currently only works for NPCs (requires DataAbilities hit tracking). */ class ConditionHitCount implements Condition { private int requiredHits = 3; @@ -241,11 +262,15 @@ public interface Condition { } @Override - public boolean check(EntityNPCInterface npc, EntityLivingBase target) { + public boolean check(EntityLivingBase caster, EntityLivingBase target) { // Check NPC's recent hit count from DataAbilities - if (npc.abilities != null) { - return npc.abilities.getRecentHitCount(withinTicks) >= requiredHits; + if (caster instanceof EntityNPCInterface) { + EntityNPCInterface npc = (EntityNPCInterface) caster; + if (npc.abilities != null) { + return npc.abilities.getRecentHitCount(withinTicks) >= requiredHits; + } } + // For players, hit count tracking is not yet supported return false; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/UserType.java b/src/main/java/kamkeel/npcs/controllers/data/ability/UserType.java new file mode 100644 index 000000000..d68693f59 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/UserType.java @@ -0,0 +1,26 @@ +package kamkeel.npcs.controllers.data.ability; + +/** + * Defines which entity types can use an ability. + */ +public enum UserType { + NPC_ONLY, + PLAYER_ONLY, + BOTH; + + public boolean allowsNpc() { + return this == NPC_ONLY || this == BOTH; + } + + public boolean allowsPlayer() { + return this == PLAYER_ONLY || this == BOTH; + } + + public static UserType fromOrdinal(int ordinal) { + UserType[] values = values(); + if (ordinal >= 0 && ordinal < values.length) { + return values[ordinal]; + } + return BOTH; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 25941e0a5..37d88e1f7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -88,106 +88,106 @@ public class AbilityCharge extends Ability implements IAbilityCharge { * Called on the first tick of windup - lock direction here so it matches telegraph. */ @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (tick == 1) { // Lock direction on first windup tick (same time telegraph is created) - lockChargeDirection(npc, target); + lockChargeDirection(caster, target); } - // Keep NPC facing the locked direction during windup - enforceLockedRotation(npc); + // Keep caster facing the locked direction during windup + enforceLockedRotation(caster); } /** * Locks the charge direction based on current target position. * Called once at windup start - direction won't change even if target moves. */ - private void lockChargeDirection(EntityNPCInterface npc, EntityLivingBase target) { + private void lockChargeDirection(EntityLivingBase caster, EntityLivingBase target) { if (target != null) { - double dx = target.posX - npc.posX; - double dz = target.posZ - npc.posZ; + double dx = target.posX - caster.posX; + double dz = target.posZ - caster.posZ; double len = Math.sqrt(dx * dx + dz * dz); if (len > 0) { chargeDirection = Vec3.createVectorHelper(dx / len, 0, dz / len); } else { - float yaw = (float) Math.toRadians(npc.rotationYaw); + float yaw = (float) Math.toRadians(caster.rotationYaw); chargeDirection = Vec3.createVectorHelper(-Math.sin(yaw), 0, Math.cos(yaw)); } } else { - float yaw = (float) Math.toRadians(npc.rotationYaw); + float yaw = (float) Math.toRadians(caster.rotationYaw); chargeDirection = Vec3.createVectorHelper(-Math.sin(yaw), 0, Math.cos(yaw)); } lockedYaw = (float) Math.toDegrees(Math.atan2(-chargeDirection.xCoord, chargeDirection.zCoord)); } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { // Initialize charge - direction was already locked during windup - startX = npc.posX; - startY = npc.posY; - startZ = npc.posZ; + startX = caster.posX; + startY = caster.posY; + startZ = caster.posZ; hitEntities.clear(); // If direction wasn't set during windup (shouldn't happen), set it now if (chargeDirection == null) { - lockChargeDirection(npc, target); + lockChargeDirection(caster, target); } - enforceLockedRotation(npc); + enforceLockedRotation(caster); } - private void enforceLockedRotation(EntityNPCInterface npc) { - npc.rotationYaw = lockedYaw; - npc.rotationYawHead = lockedYaw; - npc.prevRotationYaw = lockedYaw; - npc.prevRotationYawHead = lockedYaw; - npc.renderYawOffset = lockedYaw; - npc.prevRenderYawOffset = lockedYaw; + private void enforceLockedRotation(EntityLivingBase caster) { + caster.rotationYaw = lockedYaw; + caster.rotationYawHead = lockedYaw; + caster.prevRotationYaw = lockedYaw; + caster.prevRotationYawHead = lockedYaw; + caster.renderYawOffset = lockedYaw; + caster.prevRenderYawOffset = lockedYaw; } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (chargeDirection == null) return; // Enforce rotation every tick - enforceLockedRotation(npc); + enforceLockedRotation(caster); // Calculate distance traveled double distanceTraveled = Math.sqrt( - Math.pow(npc.posX - startX, 2) + - Math.pow(npc.posZ - startZ, 2) + Math.pow(caster.posX - startX, 2) + + Math.pow(caster.posZ - startZ, 2) ); // Check if reached max distance if (distanceTraveled >= maxRange) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; signalCompletion(); return; } - if (isChargeBlocked(npc)) { - stopMomentum(npc); + if (isChargeBlocked(caster)) { + stopMomentum(caster); signalCompletion(); return; } - // Move NPC - npc.motionX = chargeDirection.xCoord * chargeSpeed; - npc.motionY = 0; - npc.motionZ = chargeDirection.zCoord * chargeSpeed; - npc.velocityChanged = true; + // Move caster + caster.motionX = chargeDirection.xCoord * chargeSpeed; + caster.motionY = 0; + caster.motionZ = chargeDirection.zCoord * chargeSpeed; + caster.velocityChanged = true; // Server-side collision damage if (!world.isRemote) { - AxisAlignedBB hitBox = npc.boundingBox.expand(hitWidth, hitWidth * 0.5, hitWidth); + AxisAlignedBB hitBox = caster.boundingBox.expand(hitWidth, hitWidth * 0.5, hitWidth); @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, hitBox); for (Entity entity : entities) { if (!(entity instanceof EntityLivingBase)) continue; - if (entity == npc) continue; + if (entity == caster) continue; if (hitEntities.contains(entity.getEntityId())) continue; EntityLivingBase livingEntity = (EntityLivingBase) entity; @@ -196,7 +196,7 @@ public class AbilityCharge extends Ability implements IAbilityCharge { hitEntities.add(entity.getEntityId()); // Apply damage with scripted event support - boolean wasHit = applyAbilityDamageWithDirection(npc, livingEntity, damage, knockback, + boolean wasHit = applyAbilityDamageWithDirection(caster, livingEntity, damage, knockback, chargeDirection.xCoord, chargeDirection.zCoord); // Play impact sound if hit wasn't cancelled @@ -208,28 +208,28 @@ public class AbilityCharge extends Ability implements IAbilityCharge { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - stopMomentum(npc); - super.onComplete(npc, target); + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + stopMomentum(caster); + super.onComplete(caster, target); } @Override - public void onInterrupt(EntityNPCInterface npc, net.minecraft.util.DamageSource source, float damage) { - stopMomentum(npc); - super.onInterrupt(npc, source, damage); + public void onInterrupt(EntityLivingBase caster, net.minecraft.util.DamageSource source, float damage) { + stopMomentum(caster); + super.onInterrupt(caster, source, damage); } - private void stopMomentum(EntityNPCInterface npc) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + private void stopMomentum(EntityLivingBase caster) { + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; } - private boolean isChargeBlocked(EntityNPCInterface npc) { + private boolean isChargeBlocked(EntityLivingBase caster) { double nextX = chargeDirection.xCoord * chargeSpeed; double nextZ = chargeDirection.zCoord * chargeSpeed; - AxisAlignedBB nextBox = npc.boundingBox.copy().offset(nextX, 0, nextZ); - return !npc.worldObj.getCollidingBoundingBoxes(npc, nextBox).isEmpty(); + AxisAlignedBB nextBox = caster.boundingBox.copy().offset(nextX, 0, nextZ); + return !caster.worldObj.getCollidingBoundingBoxes(caster, nextBox).isEmpty(); } @Override @@ -250,12 +250,12 @@ public class AbilityCharge extends Ability implements IAbilityCharge { } /** - * Creates a LINE telegraph from NPC position towards target. - * Telegraph follows NPC during windup (so NPC can reposition before charging). + * Creates a LINE telegraph from caster position towards target. + * Telegraph follows caster during windup (so caster can reposition before charging). * Direction is locked at creation based on target position. */ @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!isShowTelegraph() || getTelegraphType() == TelegraphType.NONE) { return null; } @@ -263,11 +263,11 @@ public class AbilityCharge extends Ability implements IAbilityCharge { // Calculate direction to target at this moment (locked) float yaw; if (target != null) { - double dx = target.posX - npc.posX; - double dz = target.posZ - npc.posZ; + double dx = target.posX - caster.posX; + double dz = target.posZ - caster.posZ; yaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); } else { - yaw = npc.rotationYaw; + yaw = caster.rotationYaw; } // Create LINE telegraph @@ -278,12 +278,12 @@ public class AbilityCharge extends Ability implements IAbilityCharge { telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); telegraph.setHeightOffset(telegraphHeightOffset); - // Position at NPC ground level, direction towards target - double groundY = findGroundLevel(npc.worldObj, npc.posX, npc.posY, npc.posZ); - TelegraphInstance instance = new TelegraphInstance(telegraph, npc.posX, groundY, npc.posZ, yaw); - instance.setCasterEntityId(npc.getEntityId()); - // Telegraph follows NPC during windup - allows NPC to reposition - instance.setEntityIdToFollow(npc.getEntityId()); + // Position at caster ground level, direction towards target + double groundY = findGroundLevel(caster.worldObj, caster.posX, caster.posY, caster.posZ); + TelegraphInstance instance = new TelegraphInstance(telegraph, caster.posX, groundY, caster.posZ, yaw); + instance.setCasterEntityId(caster.getEntityId()); + // Telegraph follows caster during windup - allows caster to reposition + instance.setEntityIdToFollow(caster.getEntityId()); return instance; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 9db9d7700..ef2d2f687 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -100,13 +100,13 @@ public class AbilityCutter extends Ability implements IAbilityCutter { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { hitEntities.clear(); currentRotation = -arcAngle / 2.0f; } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; switch (sweepMode) { @@ -115,7 +115,7 @@ public class AbilityCutter extends Ability implements IAbilityCutter { signalCompletion(); // Swipe arc complete return; } - performSweepDamage(npc, world, innerRadius, range, currentRotation); + performSweepDamage(caster, world, innerRadius, range, currentRotation); currentRotation += sweepSpeed; break; @@ -126,30 +126,30 @@ public class AbilityCutter extends Ability implements IAbilityCutter { } currentRotation = (currentRotation + sweepSpeed) % 360.0f; hitEntities.clear(); - performSweepDamage(npc, world, innerRadius, range, currentRotation); + performSweepDamage(caster, world, innerRadius, range, currentRotation); break; } } - private void performSweepDamage(EntityNPCInterface npc, World world, float minDist, float maxDist, float angleOffset) { - float casterYaw = npc.rotationYaw + angleOffset; + private void performSweepDamage(EntityLivingBase caster, World world, float minDist, float maxDist, float angleOffset) { + float casterYaw = caster.rotationYaw + angleOffset; AxisAlignedBB searchBox = AxisAlignedBB.getBoundingBox( - npc.posX - maxDist, npc.posY - 1, npc.posZ - maxDist, - npc.posX + maxDist, npc.posY + 3, npc.posZ + maxDist + caster.posX - maxDist, caster.posY - 1, caster.posZ - maxDist, + caster.posX + maxDist, caster.posY + 3, caster.posZ + maxDist ); @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, searchBox); for (EntityLivingBase entity : entities) { - if (entity == npc) continue; + if (entity == caster) continue; if (hitEntities.contains(entity.getEntityId())) continue; // If not piercing, stop after hitting one entity this sweep if (!piercing && !hitEntities.isEmpty()) break; - double dx = entity.posX - npc.posX; - double dz = entity.posZ - npc.posZ; + double dx = entity.posX - caster.posX; + double dz = entity.posZ - caster.posZ; double dist = Math.sqrt(dx * dx + dz * dz); if (dist < minDist || dist > maxDist) continue; @@ -161,7 +161,7 @@ public class AbilityCutter extends Ability implements IAbilityCutter { float actualDamage = damage * distFactor; // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, entity, actualDamage, knockback); + boolean wasHit = applyAbilityDamage(caster, entity, actualDamage, knockback); // Apply effects if hit wasn't cancelled if (wasHit) { @@ -183,13 +183,13 @@ public class AbilityCutter extends Ability implements IAbilityCutter { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { hitEntities.clear(); currentRotation = 0.0f; } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { hitEntities.clear(); currentRotation = 0.0f; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 054176a7b..e070b099e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -8,6 +8,8 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -127,10 +129,10 @@ public class AbilityDash extends Ability implements IAbilityDash { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { - startX = npc.posX; - startY = npc.posY; - startZ = npc.posZ; + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { + startX = caster.posX; + startY = caster.posY; + startZ = caster.posZ; // Choose random direction based on mode DashDirection[] directions = dashMode == DashMode.AGGRESSIVE @@ -141,11 +143,11 @@ public class AbilityDash extends Ability implements IAbilityDash { // Calculate dash direction relative to target float baseYaw; if (target != null) { - double dx = target.posX - npc.posX; - double dz = target.posZ - npc.posZ; + double dx = target.posX - caster.posX; + double dz = target.posZ - caster.posZ; baseYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); } else { - baseYaw = npc.rotationYaw; + baseYaw = caster.rotationYaw; } // Apply direction offset @@ -161,54 +163,54 @@ public class AbilityDash extends Ability implements IAbilityDash { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (dashDirection == null) return; // Calculate distance traveled double distanceTraveled = Math.sqrt( - Math.pow(npc.posX - startX, 2) + - Math.pow(npc.posZ - startZ, 2) + Math.pow(caster.posX - startX, 2) + + Math.pow(caster.posZ - startZ, 2) ); // Check if reached max distance if (distanceTraveled >= dashDistance) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; signalCompletion(); return; } - if (isDashBlocked(npc)) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + if (isDashBlocked(caster)) { + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; signalCompletion(); return; } - // Move NPC - npc.motionX = dashDirection.xCoord * dashSpeed; - npc.motionY = 0; - npc.motionZ = dashDirection.zCoord * dashSpeed; - npc.velocityChanged = true; + // Move caster + caster.motionX = dashDirection.xCoord * dashSpeed; + caster.motionY = 0; + caster.motionZ = dashDirection.zCoord * dashSpeed; + caster.velocityChanged = true; // Trail particles - world.spawnParticle("smoke", npc.posX, npc.posY + 0.5, npc.posZ, 0, 0, 0); + world.spawnParticle("smoke", caster.posX, caster.posY + 0.5, caster.posZ, 0, 0, 0); } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; } @Override - public void onInterrupt(EntityNPCInterface npc, net.minecraft.util.DamageSource source, float damage) { - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; } @Override @@ -217,11 +219,11 @@ public class AbilityDash extends Ability implements IAbilityDash { chosenDirection = null; } - private boolean isDashBlocked(EntityNPCInterface npc) { + private boolean isDashBlocked(EntityLivingBase caster) { if (dashDirection == null) return true; double nextX = dashDirection.xCoord * dashSpeed; double nextZ = dashDirection.zCoord * dashSpeed; - return !npc.worldObj.getCollidingBoundingBoxes(npc, npc.boundingBox.copy().offset(nextX, 0, nextZ)).isEmpty(); + return !caster.worldObj.getCollidingBoundingBoxes(caster, caster.boundingBox.copy().offset(nextX, 0, nextZ)).isEmpty(); } // ==================== PREVIEW MODE ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 3ef2e164d..74ce14e34 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -86,7 +86,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); return; @@ -102,15 +102,15 @@ public class AbilityDisc extends Ability implements IAbilityDisc { } @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; // Spawn disc in charging mode on first tick of windup if (tick == 1) { - // Create disc in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData); + // Create disc in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(caster, anchorData); discEntity = new EntityAbilityDisc( - world, npc, target, + world, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, discRadius, discThickness, colorData, combatData, homingData, lightningData, lifespanData, @@ -123,7 +123,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Signal completion when entity dies if (discEntity == null || discEntity.isDead) { discEntity = null; @@ -132,7 +132,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { } @Override @@ -145,7 +145,7 @@ public class AbilityDisc extends Ability implements IAbilityDisc { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { return null; } @@ -159,8 +159,8 @@ public class AbilityDisc extends Ability implements IAbilityDisc { telegraph.setHeightOffset(telegraphHeightOffset); // Position at target and follow target during windup - TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); - instance.setCasterEntityId(npc.getEntityId()); + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); instance.setEntityIdToFollow(target.getEntityId()); return instance; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 53377161a..59e84f8f0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -83,7 +83,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); return; @@ -99,17 +99,17 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { } @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; // Spawn beam in charging mode on first tick of windup if (tick == 1) { float offsetDist = 1.0f; - // Create beam in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData, offsetDist); + // Create beam in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(caster, anchorData, offsetDist); beamEntity = new EntityAbilityBeam( - world, npc, target, + world, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, beamWidth, headSize, colorData, combatData, homingData, lightningData, lifespanData, @@ -122,7 +122,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Signal completion when entity dies if (beamEntity == null || beamEntity.isDead) { beamEntity = null; @@ -131,7 +131,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { } @Override @@ -144,7 +144,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { return null; } @@ -158,8 +158,8 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { telegraph.setHeightOffset(telegraphHeightOffset); // Position at target and follow target during windup - TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); - instance.setCasterEntityId(npc.getEntityId()); + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); instance.setEntityIdToFollow(target.getEntityId()); return instance; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 92c7ca58e..223a1180c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.UserType; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -60,6 +61,7 @@ public class AbilityGuard extends Ability implements IAbilityGuard { this.showTelegraph = false; this.windUpSound = "random.anvil_use"; this.activeSound = "random.anvil_land"; + this.allowedBy = UserType.NPC_ONLY; } @Override @@ -85,17 +87,17 @@ public class AbilityGuard extends Ability implements IAbilityGuard { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { lastAttacker = null; counterTriggered = false; lastDamageTaken = 0.0f; } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Counter attack logic if triggered if (canCounter && counterTriggered && lastAttacker != null && !world.isRemote) { - performCounter(npc, world); + performCounter(caster, world); } // Check if guard duration has ended @@ -105,13 +107,13 @@ public class AbilityGuard extends Ability implements IAbilityGuard { } /** - * Called externally when the NPC takes damage while guarding. + * Called externally when the caster takes damage while guarding. * This should be called from the damage handling code. * * @param attacker The entity that attacked * @param damage The damage amount (after reduction) */ - public void onDamageTaken(EntityNPCInterface npc, EntityLivingBase attacker, DamageSource source, float damage) { + public void onDamageTaken(EntityLivingBase caster, EntityLivingBase attacker, DamageSource source, float damage) { if (!canCounter || attacker == null) return; if (!isDirectHit(source)) return; if (RANDOM.nextFloat() >= counterChance) return; @@ -122,17 +124,19 @@ public class AbilityGuard extends Ability implements IAbilityGuard { // Counter will be performed in onActiveTick - don't self-interrupt } - private void performCounter(EntityNPCInterface npc, World world) { + private void performCounter(EntityLivingBase caster, World world) { float counterDamage = counterType == CounterType.PERCENT ? lastDamageTaken * (counterValue / 100.0f) : counterValue; - boolean wasHit = applyAbilityDamage(npc, lastAttacker, counterDamage, 0.5f); + boolean wasHit = applyAbilityDamage(caster, lastAttacker, counterDamage, 0.5f); if (wasHit && counterSound != null && !counterSound.isEmpty()) { - world.playSoundAtEntity(npc, counterSound, 1.0f, 1.2f); + world.playSoundAtEntity(caster, counterSound, 1.0f, 1.2f); + } + // Use shared animation utility - only available for NPCs + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).abilities.playAbilityAnimation(counterAnimationId); } - // Use shared animation utility - npc.abilities.playAbilityAnimation(counterAnimationId); counterTriggered = false; lastAttacker = null; @@ -157,7 +161,7 @@ public class AbilityGuard extends Ability implements IAbilityGuard { } /** - * Check if the NPC is currently in guard stance. + * Check if the caster is currently in guard stance. */ public boolean isGuarding() { return isExecuting() && getPhase() == kamkeel.npcs.controllers.data.ability.AbilityPhase.ACTIVE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 61841ded4..0700b1f01 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -118,8 +118,8 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { - TelegraphInstance instance = super.createTelegraph(npc, target); + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { + TelegraphInstance instance = super.createTelegraph(caster, target); if (instance == null) return null; // Control telegraph following based on placement mode @@ -128,9 +128,9 @@ public class AbilityHazard extends Ability implements IAbilityHazard { case FOLLOW_CASTER: // Telegraph stays at caster position, no following instance.setEntityIdToFollow(-1); - instance.setX(npc.posX); - instance.setY(npc.posY); - instance.setZ(npc.posZ); + instance.setX(caster.posX); + instance.setY(caster.posY); + instance.setZ(caster.posZ); break; case AT_TARGET: // Telegraph follows target during windup, locks on execute @@ -149,14 +149,14 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // AT_CASTER locks immediately, AT_TARGET follows during windup and locks on execute if (tick == 0) { switch (placement) { case AT_CASTER: - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; positionLocked = true; break; case AT_TARGET: @@ -172,7 +172,7 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { // Lock position from telegraph (which was following target) or calculate it now TelegraphInstance telegraph = getTelegraphInstance(); @@ -180,9 +180,9 @@ public class AbilityHazard extends Ability implements IAbilityHazard { case AT_CASTER: // Already locked during windup if (!positionLocked) { - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; } break; case AT_TARGET: @@ -204,15 +204,15 @@ public class AbilityHazard extends Ability implements IAbilityHazard { zoneY = pos[1]; zoneZ = pos[2]; } else { - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; } break; case FOLLOW_CASTER: - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; break; case FOLLOW_TARGET: if (target != null) { @@ -220,9 +220,9 @@ public class AbilityHazard extends Ability implements IAbilityHazard { zoneY = target.posY; zoneZ = target.posZ; } else { - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; } break; } @@ -231,7 +231,7 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; // Check if hazard duration has ended @@ -245,9 +245,9 @@ public class AbilityHazard extends Ability implements IAbilityHazard { switch (placement) { case FOLLOW_CASTER: - zoneX = npc.posX; - zoneY = npc.posY; - zoneZ = npc.posZ; + zoneX = caster.posX; + zoneY = caster.posY; + zoneZ = caster.posZ; break; case FOLLOW_TARGET: if (target != null) { @@ -272,16 +272,16 @@ public class AbilityHazard extends Ability implements IAbilityHazard { List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, searchBox); for (EntityLivingBase entity : entities) { - if (entity == npc && !affectsCaster) continue; + if (entity == caster && !affectsCaster) continue; if (damagedThisTick.contains(entity.getEntityId())) continue; - if (!isInZone(entity, npc)) continue; + if (!isInZone(entity, caster)) continue; if (damagePerSecond > 0) { if (ignoreInvulnFrames) { entity.hurtResistantTime = 0; } // Apply damage with scripted event support (no knockback for hazard) - boolean wasHit = applyAbilityDamage(npc, entity, damagePerSecond, 0); + boolean wasHit = applyAbilityDamage(caster, entity, damagePerSecond, 0); if (!wasHit) continue; // Skip debuffs if hit was cancelled } @@ -291,7 +291,7 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } } - private boolean isInZone(EntityLivingBase entity, EntityNPCInterface npc) { + private boolean isInZone(EntityLivingBase entity, EntityLivingBase caster) { double dx = entity.posX - zoneX; double dz = entity.posZ - zoneZ; double dist = Math.sqrt(dx * dx + dz * dz); @@ -303,7 +303,7 @@ public class AbilityHazard extends Ability implements IAbilityHazard { return dist >= innerRadius && dist <= radius; case CONE: if (dist > radius) return false; - float casterYaw = npc.rotationYaw; + float casterYaw = caster.rotationYaw; double angleToEntity = Math.toDegrees(Math.atan2(-dx, dz)); double angleDiff = Math.abs(normalizeAngle(angleToEntity - casterYaw)); return angleDiff <= coneAngle / 2; @@ -337,13 +337,13 @@ public class AbilityHazard extends Ability implements IAbilityHazard { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { damagedThisTick.clear(); positionLocked = false; } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { damagedThisTick.clear(); positionLocked = false; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 406be2f3a..898d54f57 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -80,21 +80,21 @@ public class AbilityHeal extends Ability implements IAbilityHeal { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) return; getHealedAllies().clear(); // Always find allies if we're healing them (needed for both instant and HoT) if (healAllies && healRadius > 0) { - findAlliesInRadius(npc, world); + findAlliesInRadius(caster, world); } if (instantHeal) { // Instant heal - apply all healing now if (healSelf) { - healEntity(npc); - spawnHealParticles(world, npc); + healEntity(caster); + spawnHealParticles(world, caster); } for (EntityLivingBase ally : getHealedAllies()) { @@ -109,7 +109,7 @@ public class AbilityHeal extends Ability implements IAbilityHeal { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote || instantHeal) return; // Heal over time - distribute heal across duration ticks @@ -121,11 +121,11 @@ public class AbilityHeal extends Ability implements IAbilityHeal { float selfTickHeal = tickHeal; // Add percentage-based heal portion if (healPercent > 0) { - selfTickHeal += (npc.getMaxHealth() * healPercent / (float) durationTicks) * 10; + selfTickHeal += (caster.getMaxHealth() * healPercent / (float) durationTicks) * 10; } - npc.heal(selfTickHeal); + caster.heal(selfTickHeal); if (tick % 20 == 0) { - spawnHealParticles(world, npc); + spawnHealParticles(world, caster); } } @@ -155,10 +155,10 @@ public class AbilityHeal extends Ability implements IAbilityHeal { /** * Find all allies in radius and add them to healedAllies list. */ - private void findAlliesInRadius(EntityNPCInterface npc, World world) { + private void findAlliesInRadius(EntityLivingBase caster, World world) { AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( - npc.posX - healRadius, npc.posY - 2, npc.posZ - healRadius, - npc.posX + healRadius, npc.posY + 3, npc.posZ + healRadius + caster.posX - healRadius, caster.posY - 2, caster.posZ - healRadius, + caster.posX + healRadius, caster.posY + 3, caster.posZ + healRadius ); @SuppressWarnings("unchecked") @@ -166,13 +166,13 @@ public class AbilityHeal extends Ability implements IAbilityHeal { for (Entity entity : entities) { if (!(entity instanceof EntityLivingBase)) continue; - if (entity == npc) continue; + if (entity == caster) continue; EntityLivingBase living = (EntityLivingBase) entity; // Only heal other NPCs (allies) if (living instanceof EntityNPCInterface) { - float dist = npc.getDistanceToEntity(living); + float dist = caster.getDistanceToEntity(living); if (dist <= healRadius) { getHealedAllies().add(living); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 4ed4a0e78..7d0c217c0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -62,14 +62,14 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote || target == null) { signalCompletion(); return; } // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, target, damage, knockback); + boolean wasHit = applyAbilityDamage(caster, target, damage, knockback); // Apply effects if hit wasn't cancelled if (wasHit) { @@ -81,7 +81,7 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Heavy Hit is instant, no active tick needed } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 3b45894b4..acf5f0aa4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -90,18 +90,18 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); return; } - double spawnX = npc.posX; - double spawnY = npc.posY + npc.getEyeHeight() * 0.8; - double spawnZ = npc.posZ; + double spawnX = caster.posX; + double spawnY = caster.posY + caster.getEyeHeight(); + double spawnZ = caster.posZ; laserEntity = new EntityAbilityLaser( - world, npc, target, + world, caster, target, spawnX, spawnY, spawnZ, laserWidth, colorData, combatData, lightningData, lifespanData, @@ -116,7 +116,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Signal completion when entity dies if (laserEntity == null || laserEntity.isDead) { laserEntity = null; @@ -125,11 +125,11 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 78936adbf..b489f4b9d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -82,7 +82,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); return; @@ -98,15 +98,15 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (world.isRemote) return; // Spawn orb in charging mode on first tick of windup if (tick == 1) { - // Create orb in charging mode - follows NPC based on anchor point during windup - Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(npc, anchorData); + // Create orb in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(caster, anchorData); orbEntity = new EntityAbilityOrb( - world, npc, target, + world, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, orbSize, colorData, combatData, homingData, lightningData, lifespanData); orbEntity.setupCharging(anchorData, windUpTicks); @@ -117,7 +117,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Signal completion when entity dies if (orbEntity == null || orbEntity.isDead) { orbEntity = null; @@ -126,7 +126,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { // Nothing to clean up - entity manages itself } @@ -140,7 +140,7 @@ public class AbilityOrb extends Ability implements IAbilityOrb { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { return null; } @@ -154,8 +154,8 @@ public class AbilityOrb extends Ability implements IAbilityOrb { telegraph.setHeightOffset(telegraphHeightOffset); // Position at target and follow target during windup - TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, npc.rotationYaw); - instance.setCasterEntityId(npc.getEntityId()); + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); instance.setEntityIdToFollow(target.getEntityId()); return instance; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 6b81fabe7..c465bc0a5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -13,8 +13,6 @@ import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityProjectile; import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.entity.EntityNPCInterface; - import noppes.npcs.api.ability.type.IAbilityProjectile; import java.util.List; @@ -71,13 +69,13 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote || target == null) return; // Calculate direction to target - double dx = target.posX - npc.posX; - double dy = (target.posY + target.height / 2) - (npc.posY + npc.getEyeHeight()); - double dz = target.posZ - npc.posZ; + double dx = target.posX - caster.posX; + double dy = (target.posY + target.height / 2) - (caster.posY + caster.getEyeHeight()); + double dz = target.posZ - caster.posZ; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -88,10 +86,10 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { // Deal instant damage with scripted event support // TODO: Use custom EntityAbilityProjectile for actual tracking - applyAbilityDamageWithDirection(npc, target, damage, knockback, dx, dz); + applyAbilityDamageWithDirection(caster, target, damage, knockback, dx, dz); // Play sound - world.playSoundAtEntity(npc, "random.bow", 1.0f, 0.8f); + world.playSoundAtEntity(caster, "random.bow", 1.0f, 0.8f); // Handle splash damage for explosive projectiles if (explosive && explosionRadius > 0) { @@ -100,13 +98,13 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { target.boundingBox.expand(explosionRadius, explosionRadius, explosionRadius)); for (Entity entity : entities) { - if (entity instanceof EntityLivingBase && entity != npc) { + if (entity instanceof EntityLivingBase && entity != caster) { EntityLivingBase living = (EntityLivingBase) entity; float dist = target.getDistanceToEntity(living); if (dist < explosionRadius) { float falloff = 1.0f - (dist / explosionRadius); // Apply splash damage with scripted event support (no knockback) - applyAbilityDamage(npc, living, damage * falloff * 0.5f, 0); + applyAbilityDamage(caster, living, damage * falloff * 0.5f, 0); } } } @@ -123,16 +121,16 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { } // Spawn projectile particles (visual trail) - spawnProjectileParticles(world, npc, target); + spawnProjectileParticles(world, caster, target); // Projectile is instant signalCompletion(); } - private void spawnProjectileParticles(World world, EntityNPCInterface npc, EntityLivingBase target) { - double startX = npc.posX; - double startY = npc.posY + npc.getEyeHeight(); - double startZ = npc.posZ; + private void spawnProjectileParticles(World world, EntityLivingBase caster, EntityLivingBase target) { + double startX = caster.posX; + double startY = caster.posY + caster.getEyeHeight(); + double startZ = caster.posZ; double endX = target.posX; double endY = target.posY + target.height / 2; double endZ = target.posZ; @@ -161,7 +159,7 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Projectile is instant, nothing to do per-tick } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index 006084f5e..6416cc0ba 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -71,28 +71,28 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { // Shockwave is instant - apply effect immediately after windup // Get all entities in radius - AxisAlignedBB box = npc.boundingBox.expand(pushRadius, pushRadius / 2, pushRadius); + AxisAlignedBB box = caster.boundingBox.expand(pushRadius, pushRadius / 2, pushRadius); @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, box); int count = 0; for (EntityLivingBase entity : entities) { - if (entity == npc) continue; + if (entity == caster) continue; if (entity.isDead) continue; - double dist = npc.getDistanceToEntity(entity); + double dist = caster.getDistanceToEntity(entity); if (dist > pushRadius) continue; count++; if (count > maxTargets) break; // Calculate push direction (away from caster) - double dx = entity.posX - npc.posX; - double dz = entity.posZ - npc.posZ; + double dx = entity.posX - caster.posX; + double dz = entity.posZ - caster.posZ; double len = Math.sqrt(dx * dx + dz * dz); if (len > 0) { @@ -109,7 +109,7 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { float distFactor = 1.0f - (float) (dist / pushRadius) * 0.5f; float finalPush = pushStrength * distFactor; // Apply damage with custom knockback direction - boolean wasHit = applyAbilityDamageWithDirection(npc, entity, damage * distFactor, finalPush, dx, dz); + boolean wasHit = applyAbilityDamageWithDirection(caster, entity, damage * distFactor, finalPush, dx, dz); // Apply effects if hit connected if (wasHit) { @@ -122,7 +122,7 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Shockwave is instant - nothing to do per-tick } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index 2dae47d05..64e0255ca 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -94,13 +94,13 @@ public class AbilitySlam extends Ability implements IAbilitySlam { } @Override - public void onWindUpTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Update target position during windup if (targetingMode == TargetingMode.AOE_SELF) { - // AOE_SELF: slam at NPC's current position - targetX = npc.posX; - targetY = npc.posY; - targetZ = npc.posZ; + // AOE_SELF: slam at caster's current position + targetX = caster.posX; + targetY = caster.posY; + targetZ = caster.posZ; } else if (targetingMode == TargetingMode.AOE_TARGET && target != null && !target.isDead) { // AOE_TARGET: telegraph follows target via setEntityIdToFollow targetX = target.posX; @@ -110,13 +110,13 @@ public class AbilitySlam extends Ability implements IAbilitySlam { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { // Lock in the destination at moment of launch if (targetingMode == TargetingMode.AOE_SELF) { // AOE_SELF: slam in place (just jump up) - targetX = npc.posX; - targetY = npc.posY; - targetZ = npc.posZ; + targetX = caster.posX; + targetY = caster.posY; + targetZ = caster.posZ; } else if (targetingMode == TargetingMode.AOE_TARGET && target != null && !target.isDead) { // AOE_TARGET: leap to target's current position targetX = target.posX; @@ -124,9 +124,9 @@ public class AbilitySlam extends Ability implements IAbilitySlam { targetZ = target.posZ; } else { // Fallback: slam in place - targetX = npc.posX; - targetY = npc.posY; - targetZ = npc.posZ; + targetX = caster.posX; + targetY = caster.posY; + targetZ = caster.posZ; } hasLaunched = false; @@ -134,31 +134,33 @@ public class AbilitySlam extends Ability implements IAbilitySlam { airTicks = 0; // Reset fall distance to prevent fall damage during slam - npc.fallDistance = 0; + caster.fallDistance = 0; // Calculate and apply leap velocity - launchTowardTarget(npc); + launchTowardTarget(caster); } /** - * Calculate ballistic arc and launch NPC toward target. + * Calculate ballistic arc and launch caster toward target. * Accounts for Minecraft's drag physics to actually reach the destination. */ - private void launchTowardTarget(EntityNPCInterface npc) { - double dx = targetX - npc.posX; - double dy = targetY - npc.posY; - double dz = targetZ - npc.posZ; + private void launchTowardTarget(EntityLivingBase caster) { + double dx = targetX - caster.posX; + double dy = targetY - caster.posY; + double dz = targetZ - caster.posZ; double horizontalDist = Math.sqrt(dx * dx + dz * dz); // For AOE_SELF or very close targets, just hop in place if (horizontalDist < 0.5) { - npc.motionX = 0; - npc.motionZ = 0; - npc.motionY = 0.8 * leapSpeed; + caster.motionX = 0; + caster.motionZ = 0; + caster.motionY = 0.8 * leapSpeed; hasLaunched = true; - npc.setNpcJumpingState(true); - npc.velocityChanged = true; - npc.worldObj.playSoundAtEntity(npc, "mob.irongolem.throw", 0.8f, 0.8f); + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).setNpcJumpingState(true); + } + caster.velocityChanged = true; + caster.worldObj.playSoundAtEntity(caster, "mob.irongolem.throw", 0.8f, 0.8f); return; } @@ -168,8 +170,8 @@ public class AbilitySlam extends Ability implements IAbilitySlam { dx *= scale; dz *= scale; horizontalDist = maxRange; - targetX = npc.posX + dx; - targetZ = npc.posZ + dz; + targetX = caster.posX + dx; + targetZ = caster.posZ + dz; } // Choose flight time based on distance - shorter distances = faster @@ -215,96 +217,100 @@ public class AbilitySlam extends Ability implements IAbilitySlam { double dirX = dx / horizontalDist; double dirZ = dz / horizontalDist; - npc.motionX = dirX * vHorizontal; - npc.motionZ = dirZ * vHorizontal; - npc.motionY = vy; + caster.motionX = dirX * vHorizontal; + caster.motionZ = dirZ * vHorizontal; + caster.motionY = vy; hasLaunched = true; - npc.setNpcJumpingState(true); - npc.velocityChanged = true; + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).setNpcJumpingState(true); + } + caster.velocityChanged = true; // Face the target float targetYaw = (float) (Math.atan2(-dx, dz) * 180.0D / Math.PI); - npc.rotationYaw = targetYaw; - npc.rotationYawHead = targetYaw; + caster.rotationYaw = targetYaw; + caster.rotationYawHead = targetYaw; } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (!hasLaunched) return; if (hasLanded) return; airTicks++; // Continuously reset fall distance during slam to prevent fall damage - npc.fallDistance = 0; + caster.fallDistance = 0; // Check for landing - if (npc.onGround && airTicks > 3) { + if (caster.onGround && airTicks > 3) { // Landed! - onLanding(npc, world); + onLanding(caster, world); return; } // Timeout protection - force landing after max air time if (airTicks >= maxAirTicks) { - onLanding(npc, world); + onLanding(caster, world); return; } // While in air, face toward target - double dx = targetX - npc.posX; - double dz = targetZ - npc.posZ; + double dx = targetX - caster.posX; + double dz = targetZ - caster.posZ; float targetYaw = (float) (Math.atan2(-dx, dz) * 180.0D / Math.PI); - npc.rotationYaw = targetYaw; - npc.rotationYawHead = targetYaw; + caster.rotationYaw = targetYaw; + caster.rotationYawHead = targetYaw; } /** - * Called when NPC lands - deal AOE damage and signal completion. + * Called when caster lands - deal AOE damage and signal completion. */ - private void onLanding(EntityNPCInterface npc, World world) { + private void onLanding(EntityLivingBase caster, World world) { hasLanded = true; - npc.setNpcJumpingState(false); + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).setNpcJumpingState(false); + } // Signal that the ability has completed its active phase signalCompletion(); // Reset fall distance to prevent fall damage on landing - npc.fallDistance = 0; + caster.fallDistance = 0; // Stop horizontal momentum - npc.motionX = 0; - npc.motionZ = 0; - npc.velocityChanged = true; + caster.motionX = 0; + caster.motionZ = 0; + caster.velocityChanged = true; if (world.isRemote) return; // Play slam impact sound on landing - world.playSoundAtEntity(npc, "random.explode", 1.0f, 1.0f); + world.playSoundAtEntity(caster, "random.explode", 1.0f, 1.0f); // Find all entities in radius @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABBExcludingEntity( - npc, npc.boundingBox.expand(radius, radius / 2, radius)); + caster, caster.boundingBox.expand(radius, radius / 2, radius)); for (Entity entity : entities) { - if (entity instanceof EntityLivingBase && entity != npc) { + if (entity instanceof EntityLivingBase && entity != caster) { EntityLivingBase livingTarget = (EntityLivingBase) entity; // Check if actually within radius (bounding box is a cube, we want a circle) - double dx = livingTarget.posX - npc.posX; - double dz = livingTarget.posZ - npc.posZ; + double dx = livingTarget.posX - caster.posX; + double dz = livingTarget.posZ - caster.posZ; if (dx * dx + dz * dz <= radius * radius) { // Apply damage with scripted event support - applyAbilityDamage(npc, livingTarget, damage, knockbackStrength); + applyAbilityDamage(caster, livingTarget, damage, knockbackStrength); } } } // Spawn particles - spawnSlamParticles(world, npc.posX, npc.posY, npc.posZ); + spawnSlamParticles(world, caster.posX, caster.posY, caster.posZ); } /** @@ -344,16 +350,20 @@ public class AbilitySlam extends Ability implements IAbilitySlam { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { - npc.setNpcJumpingState(false); + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).setNpcJumpingState(false); + } hasLaunched = false; hasLanded = false; airTicks = 0; } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { - npc.setNpcJumpingState(false); + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { + if (caster instanceof EntityNPCInterface) { + ((EntityNPCInterface) caster).setNpcJumpingState(false); + } hasLaunched = false; hasLanded = false; airTicks = 0; @@ -462,7 +472,7 @@ public class AbilitySlam extends Ability implements IAbilitySlam { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { // Check if telegraph should be shown if (!isShowTelegraph() || getTelegraphType() == TelegraphType.NONE) { return null; @@ -470,24 +480,24 @@ public class AbilitySlam extends Ability implements IAbilitySlam { // Telegraph shows at landing zone if (targetingMode == TargetingMode.AOE_SELF) { - // AOE_SELF: telegraph at NPC position, does NOT follow - targetX = npc.posX; - targetY = npc.posY; - targetZ = npc.posZ; + // AOE_SELF: telegraph at caster position, does NOT follow + targetX = caster.posX; + targetY = caster.posY; + targetZ = caster.posZ; } else if (targetingMode == TargetingMode.AOE_TARGET && target != null) { // AOE_TARGET: telegraph at target position, follows target during windup targetX = target.posX; targetY = target.posY; targetZ = target.posZ; } else { - // Fallback to NPC position - targetX = npc.posX; - targetY = npc.posY; - targetZ = npc.posZ; + // Fallback to caster position + targetX = caster.posX; + targetY = caster.posY; + targetZ = caster.posZ; } // Create telegraph at the appropriate position - double groundY = findGroundLevel(npc.worldObj, targetX, targetY, targetZ); + double groundY = findGroundLevel(caster.worldObj, targetX, targetY, targetZ); Telegraph telegraph = Telegraph.circle(radius); telegraph.setDurationTicks(windUpTicks); @@ -496,14 +506,14 @@ public class AbilitySlam extends Ability implements IAbilitySlam { telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); telegraph.setHeightOffset(telegraphHeightOffset); - TelegraphInstance instance = new TelegraphInstance(telegraph, targetX, groundY, targetZ, npc.rotationYaw); - instance.setCasterEntityId(npc.getEntityId()); + TelegraphInstance instance = new TelegraphInstance(telegraph, targetX, groundY, targetZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); // AOE_TARGET: telegraph follows target during windup if (targetingMode == TargetingMode.AOE_TARGET && target != null) { instance.setEntityIdToFollow(target.getEntityId()); } - // AOE_SELF: telegraph stays at NPC position, no follow + // AOE_SELF: telegraph stays at caster position, no follow return instance; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 976d9e44e..d2acc4df3 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -18,7 +18,6 @@ import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySweeper; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.api.ability.type.IAbilitySweeper; -import noppes.npcs.entity.EntityNPCInterface; /** * Sweeper ability: A low sweeping beam that rotates around the NPC. @@ -83,14 +82,14 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); return; } // Spawn the entity that handles BOTH visuals AND damage - activeEntity = new EntityAbilitySweeper(world, npc, target, + activeEntity = new EntityAbilitySweeper(world, caster, target, beamLength, beamWidth, beamHeight, colorData, sweepSpeed, numberOfRotations, @@ -103,7 +102,7 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Signal completion when entity dies if (activeEntity == null || activeEntity.isDead) { activeEntity = null; @@ -129,12 +128,12 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { * Override to position telegraph at NPC (not target) since the sweep is centered on NPC. */ @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { if (!showTelegraph || telegraphType == TelegraphType.NONE) { return null; } - // Create circle telegraph centered on NPC + // Create circle telegraph centered on caster Telegraph telegraph = Telegraph.circle(beamLength); telegraph.setDurationTicks(windUpTicks); telegraph.setColor(windUpColor); @@ -142,10 +141,10 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); telegraph.setHeightOffset(telegraphHeightOffset); - // Position at NPC, not target - TelegraphInstance instance = new TelegraphInstance(telegraph, npc.posX, npc.posY, npc.posZ, npc.rotationYaw); - instance.setCasterEntityId(npc.getEntityId()); - instance.setEntityIdToFollow(npc.getEntityId()); // Follow NPC + // Position at caster, not target + TelegraphInstance instance = new TelegraphInstance(telegraph, caster.posX, caster.posY, caster.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); + instance.setEntityIdToFollow(caster.getEntityId()); // Follow caster return instance; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 1fef00a55..4e4a5dff7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -95,13 +95,13 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { currentBlink = 0; ticksSinceLastBlink = blinkDelayTicks; // Trigger first blink immediately } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { int blinkLimit = mode == TeleportMode.BLINK ? blinkCount : 1; if (currentBlink >= blinkLimit) { signalCompletion(); @@ -111,7 +111,7 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { ticksSinceLastBlink++; if (ticksSinceLastBlink >= blinkDelayTicks) { - performBlink(npc, target, world); + performBlink(caster, target, world); currentBlink++; ticksSinceLastBlink = 0; @@ -122,20 +122,20 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { } } - private void performBlink(EntityNPCInterface npc, EntityLivingBase target, World world) { + private void performBlink(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) return; - double oldX = npc.posX; - double oldY = npc.posY; - double oldZ = npc.posZ; + double oldX = caster.posX; + double oldY = caster.posY; + double oldZ = caster.posZ; - Vec3 destination = calculateDestination(npc, target, world); + Vec3 destination = calculateDestination(caster, target, world); if (destination == null) return; boolean mustHaveLOS = mode == TeleportMode.BEHIND || requireLineOfSight; - if (mustHaveLOS && !hasLineOfSight(world, oldX, oldY + npc.getEyeHeight(), oldZ, - destination.xCoord, destination.yCoord + npc.getEyeHeight(), destination.zCoord)) { - destination = findValidPositionAlongLine(world, npc, oldX, oldY, oldZ, + if (mustHaveLOS && !hasLineOfSight(world, oldX, oldY + caster.getEyeHeight(), oldZ, + destination.xCoord, destination.yCoord + caster.getEyeHeight(), destination.zCoord)) { + destination = findValidPositionAlongLine(world, caster, oldX, oldY, oldZ, destination.xCoord, destination.yCoord, destination.zCoord); if (destination == null) return; } @@ -146,22 +146,22 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { // Damage at origin if (damageAtStart) { - dealDamageAt(npc, world, oldX, oldY, oldZ); + dealDamageAt(caster, world, oldX, oldY, oldZ); } // Spawn particles at origin spawnTeleportParticles(world, oldX, oldY, oldZ); // Teleport - npc.setPositionAndUpdate(destination.xCoord, destination.yCoord, destination.zCoord); - npc.fallDistance = 0; + caster.setPositionAndUpdate(destination.xCoord, destination.yCoord, destination.zCoord); + caster.fallDistance = 0; // Spawn particles at destination spawnTeleportParticles(world, destination.xCoord, destination.yCoord, destination.zCoord); // Damage at destination if (damageAtEnd) { - dealDamageAt(npc, world, destination.xCoord, destination.yCoord, destination.zCoord); + dealDamageAt(caster, world, destination.xCoord, destination.yCoord, destination.zCoord); } // Face target after teleport @@ -169,8 +169,8 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { double dx = target.posX - destination.xCoord; double dz = target.posZ - destination.zCoord; float newYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); - npc.rotationYaw = newYaw; - npc.rotationYawHead = newYaw; + caster.rotationYaw = newYaw; + caster.rotationYawHead = newYaw; } } @@ -186,29 +186,50 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { } } - private Vec3 calculateDestination(EntityNPCInterface npc, EntityLivingBase target, World world) { - if (target == null) return null; - + private Vec3 calculateDestination(EntityLivingBase caster, EntityLivingBase target, World world) { double newX; double newY; double newZ; + if (target != null) { + switch (mode) { + case BEHIND: + double yaw = Math.toRadians(target.rotationYaw); + newX = target.posX + Math.sin(yaw) * behindDistance; + newZ = target.posZ - Math.cos(yaw) * behindDistance; + newY = target.posY; + return Vec3.createVectorHelper(newX, newY, newZ); + case SINGLE: + case BLINK: + default: + double angle = RANDOM.nextDouble() * Math.PI * 2; + double dist = Math.min(blinkRadius, maxRange); + double offset = RANDOM.nextDouble() * dist; + newX = target.posX + Math.cos(angle) * offset; + newZ = target.posZ + Math.sin(angle) * offset; + newY = target.posY; + return Vec3.createVectorHelper(newX, newY, newZ); + } + } + + // No target (player use) - teleport in caster's look direction + Vec3 look = caster.getLookVec(); switch (mode) { case BEHIND: - double yaw = Math.toRadians(target.rotationYaw); - newX = target.posX + Math.sin(yaw) * behindDistance; - newZ = target.posZ - Math.cos(yaw) * behindDistance; - newY = target.posY; + // Teleport forward in look direction by behindDistance + newX = caster.posX + look.xCoord * behindDistance; + newZ = caster.posZ + look.zCoord * behindDistance; + newY = caster.posY; return Vec3.createVectorHelper(newX, newY, newZ); case SINGLE: case BLINK: default: - double angle = RANDOM.nextDouble() * Math.PI * 2; + // Teleport forward in look direction within blinkRadius double dist = Math.min(blinkRadius, maxRange); - double offset = RANDOM.nextDouble() * dist; - newX = target.posX + Math.cos(angle) * offset; - newZ = target.posZ + Math.sin(angle) * offset; - newY = target.posY; + double offset = (RANDOM.nextDouble() * 0.5 + 0.5) * dist; // 50-100% of max distance + newX = caster.posX + look.xCoord * offset; + newZ = caster.posZ + look.zCoord * offset; + newY = caster.posY; return Vec3.createVectorHelper(newX, newY, newZ); } } @@ -285,7 +306,7 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { return true; } - private Vec3 findValidPositionAlongLine(World world, EntityNPCInterface npc, + private Vec3 findValidPositionAlongLine(World world, EntityLivingBase caster, double x1, double y1, double z1, double x2, double y2, double z2) { double dx = x2 - x1; @@ -307,8 +328,8 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { double checkY = y1 + dy * d; double checkZ = z1 + dz * d; - if (hasLineOfSight(world, x1, y1 + npc.getEyeHeight(), z1, - checkX, checkY + npc.getEyeHeight(), checkZ)) { + if (hasLineOfSight(world, x1, y1 + caster.getEyeHeight(), z1, + checkX, checkY + caster.getEyeHeight(), checkZ)) { int blockX = MathHelper.floor_double(checkX); int blockY = MathHelper.floor_double(checkY); int blockZ = MathHelper.floor_double(checkZ); @@ -361,7 +382,7 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { !headBlock.getMaterial().isSolid(); } - private void dealDamageAt(EntityNPCInterface npc, World world, double x, double y, double z) { + private void dealDamageAt(EntityLivingBase caster, World world, double x, double y, double z) { AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( x - damageRadius, y - 1, z - damageRadius, x + damageRadius, y + 2, z + damageRadius @@ -372,13 +393,13 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { for (Entity entity : entities) { if (!(entity instanceof EntityLivingBase)) continue; - if (entity == npc) continue; + if (entity == caster) continue; EntityLivingBase living = (EntityLivingBase) entity; double dist = Math.sqrt(Math.pow(living.posX - x, 2) + Math.pow(living.posZ - z, 2)); if (dist <= damageRadius) { // Apply damage with scripted event support (no knockback for teleport damage) - boolean wasHit = applyAbilityDamage(npc, living, damage, 0); + boolean wasHit = applyAbilityDamage(caster, living, damage, 0); if (wasHit) { applyEffects(living); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index 6bf69a60b..a50fe57a1 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -100,8 +100,8 @@ public class AbilityTrap extends Ability implements IAbilityTrap { } @Override - public TelegraphInstance createTelegraph(EntityNPCInterface npc, EntityLivingBase target) { - TelegraphInstance instance = super.createTelegraph(npc, target); + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { + TelegraphInstance instance = super.createTelegraph(caster, target); if (instance == null) return null; // Control telegraph following based on placement mode @@ -111,14 +111,14 @@ public class AbilityTrap extends Ability implements IAbilityTrap { // Telegraph at caster or ahead, no following instance.setEntityIdToFollow(-1); if (placement == TrapPlacement.AHEAD_OF_CASTER) { - double yaw = Math.toRadians(npc.rotationYaw); - instance.setX(npc.posX - Math.sin(yaw) * placementDistance); - instance.setY(npc.posY); - instance.setZ(npc.posZ + Math.cos(yaw) * placementDistance); + double yaw = Math.toRadians(caster.rotationYaw); + instance.setX(caster.posX - Math.sin(yaw) * placementDistance); + instance.setY(caster.posY); + instance.setZ(caster.posZ + Math.cos(yaw) * placementDistance); } else { - instance.setX(npc.posX); - instance.setY(npc.posY); - instance.setZ(npc.posZ); + instance.setX(caster.posX); + instance.setY(caster.posY); + instance.setZ(caster.posZ); } break; case AT_TARGET: @@ -132,7 +132,7 @@ public class AbilityTrap extends Ability implements IAbilityTrap { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { armed = false; triggerCount = 0; ticksSinceLastTrigger = armTime; @@ -143,9 +143,9 @@ public class AbilityTrap extends Ability implements IAbilityTrap { switch (placement) { case AT_CASTER: - trapX = npc.posX; - trapY = npc.posY; - trapZ = npc.posZ; + trapX = caster.posX; + trapY = caster.posY; + trapZ = caster.posZ; break; case AT_TARGET: // Use telegraph position with offset @@ -166,22 +166,22 @@ public class AbilityTrap extends Ability implements IAbilityTrap { trapY = pos[1]; trapZ = pos[2]; } else { - trapX = npc.posX; - trapY = npc.posY; - trapZ = npc.posZ; + trapX = caster.posX; + trapY = caster.posY; + trapZ = caster.posZ; } break; case AHEAD_OF_CASTER: - double yaw = Math.toRadians(npc.rotationYaw); - trapX = npc.posX - Math.sin(yaw) * placementDistance; - trapY = npc.posY; - trapZ = npc.posZ + Math.cos(yaw) * placementDistance; + double yaw = Math.toRadians(caster.rotationYaw); + trapX = caster.posX - Math.sin(yaw) * placementDistance; + trapY = caster.posY; + trapZ = caster.posZ + Math.cos(yaw) * placementDistance; break; } } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { // Check if trap duration has ended if (tick >= durationTicks) { signalCompletion(); @@ -215,7 +215,7 @@ public class AbilityTrap extends Ability implements IAbilityTrap { List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, box); for (EntityLivingBase entity : entities) { - if (entity == npc) continue; + if (entity == caster) continue; if (entity.isDead) continue; if (maxTriggers == 1 && triggeredEntities.contains(entity.getUniqueID())) continue; @@ -224,13 +224,13 @@ public class AbilityTrap extends Ability implements IAbilityTrap { double dist = Math.sqrt(dx * dx + dz * dz); if (dist <= triggerRadius) { - triggerTrap(npc, entity, world); + triggerTrap(caster, entity, world); return; } } } - private void triggerTrap(EntityNPCInterface npc, EntityLivingBase triggerer, World world) { + private void triggerTrap(EntityLivingBase caster, EntityLivingBase triggerer, World world) { triggerCount++; ticksSinceLastTrigger = 0; triggeredEntities.add(triggerer.getUniqueID()); @@ -247,7 +247,7 @@ public class AbilityTrap extends Ability implements IAbilityTrap { List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, box); for (EntityLivingBase entity : entities) { - if (entity == npc) continue; + if (entity == caster) continue; double dx = entity.posX - trapX; double dz = entity.posZ - trapZ; double dist = Math.sqrt(dx * dx + dz * dz); @@ -261,7 +261,7 @@ public class AbilityTrap extends Ability implements IAbilityTrap { for (EntityLivingBase entity : affected) { // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, entity, damage, knockback); + boolean wasHit = applyAbilityDamage(caster, entity, damage, knockback); // Apply effects if the hit wasn't cancelled if (wasHit) { @@ -271,14 +271,14 @@ public class AbilityTrap extends Ability implements IAbilityTrap { } @Override - public void onComplete(EntityNPCInterface npc, EntityLivingBase target) { + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { armed = false; triggerCount = 0; triggeredEntities.clear(); } @Override - public void onInterrupt(EntityNPCInterface npc, DamageSource source, float damage) { + public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { armed = false; triggerCount = 0; triggeredEntities.clear(); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index 1bcfb7cbc..f289f0f72 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -90,22 +90,22 @@ public class AbilityVortex extends Ability implements IAbilityVortex { } @Override - public void onExecute(EntityNPCInterface npc, EntityLivingBase target, World world) { + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { getPulledEntities().clear(); pullComplete = false; ticksSincePullDamage = 0; if (aoe) { - AxisAlignedBB box = npc.boundingBox.expand(pullRadius, pullRadius / 2, pullRadius); + AxisAlignedBB box = caster.boundingBox.expand(pullRadius, pullRadius / 2, pullRadius); @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, box); int count = 0; for (EntityLivingBase entity : entities) { - if (entity == npc) continue; + if (entity == caster) continue; if (entity.isDead) continue; - double dist = npc.getDistanceToEntity(entity); + double dist = caster.getDistanceToEntity(entity); if (dist <= pullRadius) { getPulledEntities().add(entity.getUniqueID()); count++; @@ -115,7 +115,7 @@ public class AbilityVortex extends Ability implements IAbilityVortex { } else { // Single target mode - still check pullRadius if (target != null && !target.isDead) { - double dist = npc.getDistanceToEntity(target); + double dist = caster.getDistanceToEntity(target); if (dist <= pullRadius) { getPulledEntities().add(target.getUniqueID()); } @@ -124,21 +124,21 @@ public class AbilityVortex extends Ability implements IAbilityVortex { } @Override - public void onActiveTick(EntityNPCInterface npc, EntityLivingBase target, World world, int tick) { + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { if (pullComplete || getPulledEntities().isEmpty()) { signalCompletion(); return; } - double destX = npc.posX; - double destY = npc.posY; - double destZ = npc.posZ; + double destX = caster.posX; + double destY = caster.posY; + double destZ = caster.posZ; boolean anyStillPulling = false; ticksSincePullDamage++; for (UUID uuid : new HashSet<>(getPulledEntities())) { - EntityLivingBase entity = findEntity(npc, world, uuid); + EntityLivingBase entity = findEntity(caster, world, uuid); if (entity == null || entity.isDead) { getPulledEntities().remove(uuid); continue; @@ -151,7 +151,7 @@ public class AbilityVortex extends Ability implements IAbilityVortex { if (dist <= 1.0f) { getPulledEntities().remove(uuid); - onTargetArrived(npc, entity, world); + onTargetArrived(caster, entity, world); continue; } @@ -176,7 +176,7 @@ public class AbilityVortex extends Ability implements IAbilityVortex { if (damageOnPull && pullDamage > 0 && ticksSincePullDamage >= 10) { ticksSincePullDamage = 0; entity.hurtResistantTime = 0; - applyAbilityDamage(npc, entity, pullDamage * 0.5f, 0); + applyAbilityDamage(caster, entity, pullDamage * 0.5f, 0); } } @@ -186,9 +186,9 @@ public class AbilityVortex extends Ability implements IAbilityVortex { } } - private void onTargetArrived(EntityNPCInterface npc, EntityLivingBase entity, World world) { + private void onTargetArrived(EntityLivingBase caster, EntityLivingBase entity, World world) { // Apply damage with scripted event support - boolean wasHit = applyAbilityDamage(npc, entity, damage, knockback * 0.5f); + boolean wasHit = applyAbilityDamage(caster, entity, damage, knockback * 0.5f); // Only apply effects if hit wasn't cancelled if (wasHit) { @@ -201,9 +201,9 @@ public class AbilityVortex extends Ability implements IAbilityVortex { * Uses AABB search instead of iterating all loaded entities. */ @SuppressWarnings("unchecked") - private EntityLivingBase findEntity(EntityNPCInterface npc, World world, UUID uuid) { + private EntityLivingBase findEntity(EntityLivingBase caster, World world, UUID uuid) { // Search within pull radius (entities being pulled should be within this area) - AxisAlignedBB searchBox = npc.boundingBox.expand(pullRadius, pullRadius / 2, pullRadius); + AxisAlignedBB searchBox = caster.boundingBox.expand(pullRadius, pullRadius / 2, pullRadius); List nearbyEntities = world.getEntitiesWithinAABB(EntityLivingBase.class, searchBox); for (EntityLivingBase entity : nearbyEntities) { diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 75fa6ef7d..a9cfffc43 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -12,7 +12,6 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.LogWriter; -import noppes.npcs.entity.EntityNPCInterface; import java.util.ArrayList; import java.util.List; @@ -108,7 +107,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { * @param anchoredMode If true, origin follows owner and tail orb is rendered. * If false, beam is free-moving with trailing length (no tail orb). */ - public EntityAbilityBeam(World world, EntityNPCInterface owner, EntityLivingBase target, + public EntityAbilityBeam(World world, EntityLivingBase owner, EntityLivingBase target, double x, double y, double z, float beamWidth, float headSize, EnergyColorData color, EnergyCombatData combat, @@ -179,7 +178,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { this.motionZ = 0; } - public void setupPreview(EntityNPCInterface owner, float beamWidth, float headSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration, float chargeOffsetDistance) { + public void setupPreview(EntityLivingBase owner, float beamWidth, float headSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration, float chargeOffsetDistance) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -459,11 +458,13 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { ); } - setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + // Offset downward by half headSize to center + double centeredY = pos.yCoord - headSize * 0.5; + setPosition(pos.xCoord, centeredY, pos.zCoord); // Also update origin for when firing starts startX = pos.xCoord; - startY = pos.yCoord; + startY = centeredY; startZ = pos.zCoord; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index f6003df80..7dc3a8a82 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -10,7 +10,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; import java.util.List; @@ -84,7 +83,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { /** * Full constructor with all parameters using data classes. */ - public EntityAbilityDisc(World world, EntityNPCInterface owner, EntityLivingBase target, + public EntityAbilityDisc(World world, EntityLivingBase owner, EntityLivingBase target, double x, double y, double z, float discRadius, float discThickness, EnergyColorData color, EnergyCombatData combat, @@ -155,7 +154,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public void setupPreview(EntityNPCInterface owner, float discRadius, float discThickness, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { + public void setupPreview(EntityLivingBase owner, float discRadius, float discThickness, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -512,7 +511,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.discThickness = targetDiscThickness * progress; this.size = this.discRadius; // Base size for interpolation - // Calculate position based on anchor point + // Calculate position based on anchor point, offset downward by half radius to center if (owner instanceof EntityLivingBase) { Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData); setPosition(pos.xCoord, pos.yCoord, pos.zCoord); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index c45a6ee9e..3d888c698 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -11,7 +11,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; import java.util.HashSet; import java.util.List; @@ -51,7 +50,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { /** * Full constructor with all parameters using data classes. */ - public EntityAbilityLaser(World world, EntityNPCInterface owner, EntityLivingBase target, + public EntityAbilityLaser(World world, EntityLivingBase owner, EntityLivingBase target, double x, double y, double z, float laserWidth, EnergyColorData color, EnergyCombatData combat, @@ -327,7 +326,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { * Setup this laser in preview mode for GUI display. * Laser doesn't have charging state - spawns at active phase and fires immediately. */ - public void setupPreview(EntityNPCInterface owner, float laserWidth, EnergyColorData color, + public void setupPreview(EntityLivingBase owner, float laserWidth, EnergyColorData color, EnergyLightningData lightning, float expansionSpeed, float maxDistance) { this.setPreviewMode(true); this.setPreviewOwner(owner); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index eff147448..c403f25de 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -10,7 +10,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; import java.util.List; @@ -73,7 +72,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { /** * Full constructor using data classes for grouped parameters. */ - public EntityAbilityOrb(World world, EntityNPCInterface owner, EntityLivingBase target, + public EntityAbilityOrb(World world, EntityLivingBase owner, EntityLivingBase target, double x, double y, double z, float orbSize, EnergyColorData color, EnergyCombatData combat, EnergyHomingData homing, EnergyLightningData lightning, @@ -134,7 +133,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { * Follows anchor point and animations like in the real game. * Can be fired when transitioning to active phase. */ - public void setupPreview(EntityNPCInterface owner, float orbSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { + public void setupPreview(EntityLivingBase owner, float orbSize, EnergyColorData color, EnergyLightningData lightning, EnergyAnchorData anchor, int chargeDuration) { this.setPreviewMode(true); this.setPreviewOwner(owner); @@ -394,7 +393,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { float progress = getChargeProgress(); this.size = targetSize * progress; - // Calculate position based on anchor point + // Calculate position based on anchor point, offset downward by half size to center if (owner instanceof EntityLivingBase) { Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData); setPosition(pos.xCoord, pos.yCoord, pos.zCoord); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 5508ecd94..57f99e1c8 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -11,9 +11,11 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.NpcDamageSource; @@ -75,7 +77,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA // ==================== STATE ==================== protected boolean hasHit = false; protected boolean previewMode = false; // Client-side preview mode (no damage/effects) - protected EntityNPCInterface previewOwner = null; // Direct reference for GUI preview (no world lookup) + protected EntityLivingBase previewOwner = null; // Direct reference for GUI preview (no world lookup) // ==================== ROTATION INTERPOLATION ==================== public float prevRotationValX, prevRotationValY, prevRotationValZ; @@ -101,7 +103,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA /** * Initialize common properties using data classes. Call from subclass constructors. */ - protected void initProjectile(EntityNPCInterface owner, EntityLivingBase target, + protected void initProjectile(EntityLivingBase owner, EntityLivingBase target, double x, double y, double z, float size, EnergyColorData color, EnergyCombatData combat, EnergyLightningData lightning, EnergyLifespanData lifespan) { @@ -318,10 +320,13 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA protected void applyDamage(EntityLivingBase target, float dmg, float kb) { if (previewMode) return; // Skip damage in preview mode Entity owner = getOwner(); - EntityNPCInterface npc = (owner instanceof EntityNPCInterface) ? (EntityNPCInterface) owner : null; - if (npc != null) { - target.attackEntityFrom(new NpcDamageSource("npc_ability", npc), dmg); + if (owner instanceof EntityNPCInterface) { + target.attackEntityFrom(new NpcDamageSource("npc_ability", (EntityNPCInterface) owner), dmg); + } else if (owner instanceof EntityPlayer) { + target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) owner), dmg); + } else if (owner instanceof EntityLivingBase) { + target.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase) owner), dmg); } else { target.attackEntityFrom(new NpcDamageSource("npc_ability", null), dmg); } @@ -400,7 +405,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEntityA * Set the preview owner for GUI preview mode. * This allows anchor point calculations without world entity lookup. */ - public void setPreviewOwner(EntityNPCInterface owner) { + public void setPreviewOwner(EntityLivingBase owner) { this.previewOwner = owner; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java index ffb5f558a..8540d4df9 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java @@ -7,8 +7,10 @@ import io.netty.buffer.ByteBuf; import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import noppes.npcs.LogWriter; import noppes.npcs.NpcDamageSource; @@ -70,7 +72,7 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa this.ignoreFrustumCheck = true; } - public EntityAbilitySweeper(World world, EntityNPCInterface owner, EntityLivingBase target, + public EntityAbilitySweeper(World world, EntityLivingBase owner, EntityLivingBase target, float beamLength, float beamWidth, float beamHeight, EnergyColorData colorData, float sweepSpeed, int numberOfRotations, @@ -264,10 +266,12 @@ public class EntityAbilitySweeper extends Entity implements IEntityAdditionalSpa } private void applyDamage(EntityLivingBase target, Entity owner) { - EntityNPCInterface npc = (owner instanceof EntityNPCInterface) ? (EntityNPCInterface) owner : null; - - if (npc != null) { - target.attackEntityFrom(new NpcDamageSource("npc_ability", npc), damage); + if (owner instanceof EntityNPCInterface) { + target.attackEntityFrom(new NpcDamageSource("npc_ability", (EntityNPCInterface) owner), damage); + } else if (owner instanceof EntityPlayer) { + target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) owner), damage); + } else if (owner instanceof EntityLivingBase) { + target.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase) owner), damage); } else { target.attackEntityFrom(new NpcDamageSource("npc_ability", null), damage); } diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index 68c021559..63ab9b192 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -26,6 +26,7 @@ import kamkeel.npcs.network.packets.data.SoundManagementPacket; import kamkeel.npcs.network.packets.data.SwingPlayerArmPacket; import kamkeel.npcs.network.packets.data.UpdateAnimationsPacket; import kamkeel.npcs.network.packets.data.VillagerListPacket; +import kamkeel.npcs.network.packets.data.ability.PlayerAbilitySyncPacket; import kamkeel.npcs.network.packets.data.telegraph.TelegraphRemovePacket; import kamkeel.npcs.network.packets.data.telegraph.TelegraphSpawnPacket; import kamkeel.npcs.network.packets.data.gui.GuiClosePacket; @@ -92,10 +93,10 @@ import kamkeel.npcs.network.packets.request.TraderMarketSavePacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesGetAllPacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcGetPacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcSavePacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitySavePacket; import kamkeel.npcs.network.packets.request.animation.AnimationGetPacket; import kamkeel.npcs.network.packets.request.animation.AnimationRemovePacket; import kamkeel.npcs.network.packets.request.animation.AnimationSavePacket; @@ -505,10 +506,10 @@ public class PacketHandler { REQUEST_PACKET.registerPacket(new AbilitiesGetAllPacket()); REQUEST_PACKET.registerPacket(new AbilitiesNpcGetPacket()); REQUEST_PACKET.registerPacket(new AbilitiesNpcSavePacket()); - REQUEST_PACKET.registerPacket(new SavedAbilitiesGetPacket()); - REQUEST_PACKET.registerPacket(new SavedAbilityGetPacket()); - REQUEST_PACKET.registerPacket(new SavedAbilityRemovePacket()); - REQUEST_PACKET.registerPacket(new SavedAbilitySavePacket()); + REQUEST_PACKET.registerPacket(new CustomAbilitiesGetPacket()); + REQUEST_PACKET.registerPacket(new CustomAbilityGetPacket()); + REQUEST_PACKET.registerPacket(new CustomAbilityRemovePacket()); + REQUEST_PACKET.registerPacket(new CustomAbilitySavePacket()); // Other Packets REQUEST_PACKET.registerPacket(new IsGuiOpenInform()); @@ -578,6 +579,7 @@ public class PacketHandler { // Data | Ability Packets DATA_PACKET.registerPacket(new TelegraphSpawnPacket()); DATA_PACKET.registerPacket(new TelegraphRemovePacket()); + DATA_PACKET.registerPacket(new PlayerAbilitySyncPacket()); } public void registerPlayerPackets() { diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumDataPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumDataPacket.java index a5c6c8ba9..18321d0a4 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumDataPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumDataPacket.java @@ -62,6 +62,7 @@ public enum EnumDataPacket { // Ability System TELEGRAPH_SPAWN, TELEGRAPH_REMOVE, + PLAYER_ABILITY_SYNC, // Auction System AUCTION_DATA, diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java index d4968bc5c..8183941d0 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java @@ -198,10 +198,10 @@ public enum EnumRequestPacket { NpcAbilitiesGet, NpcAbilitiesSave, AbilitiesGetAll, - SavedAbilitiesGet, - SavedAbilityGet, - SavedAbilityRemove, - SavedAbilitySave, + CustomAbilitiesGet, + CustomAbilityGet, + CustomAbilityRemove, + CustomAbilitySave, Hammer, RecipeScript, diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumSyncType.java b/src/main/java/kamkeel/npcs/network/enums/EnumSyncType.java index a84e62392..1ac0ec828 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumSyncType.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumSyncType.java @@ -12,5 +12,6 @@ public enum EnumSyncType { WORKBENCH_RECIPES, CARPENTRY_RECIPES, ANVIL_RECIPES, - CUSTOM_EFFECTS + CUSTOM_EFFECTS, + CUSTOM_ABILITY } diff --git a/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java new file mode 100644 index 000000000..08df836aa --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java @@ -0,0 +1,73 @@ +package kamkeel.npcs.network.packets.data.ability; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.enums.EnumDataPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.data.PlayerData; + +import java.io.IOException; + +/** + * Syncs the player's ability data (unlocked abilities, selected index) to the client. + * Sent on login and whenever abilities change (unlock/lock/select). + */ +public final class PlayerAbilitySyncPacket extends AbstractPacket { + public static final String packetName = "Data|PlayerAbilitySync"; + + private NBTTagCompound abilityNBT; + + public PlayerAbilitySyncPacket() { + } + + public PlayerAbilitySyncPacket(NBTTagCompound abilityNBT) { + this.abilityNBT = abilityNBT; + } + + @Override + public Enum getType() { + return EnumDataPacket.PLAYER_ABILITY_SYNC; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.DATA_PACKET; + } + + @Override + public void sendData(ByteBuf out) throws IOException { + ByteBufUtils.writeNBT(out, abilityNBT); + } + + @SideOnly(Side.CLIENT) + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + NBTTagCompound nbt = ByteBufUtils.readNBT(in); + if (nbt == null) return; + + PlayerData data = PlayerData.get(player); + if (data != null) { + data.abilityData.readFromNBT(nbt); + } + } + + /** + * Send the player's ability data to their client. + */ + public static void sendToPlayer(EntityPlayerMP player) { + PlayerData data = PlayerDataController.Instance.getPlayerData(player); + if (data == null) return; + + NBTTagCompound nbt = new NBTTagCompound(); + data.abilityData.writeToNBT(nbt); + PacketHandler.Instance.sendToPlayer(new PlayerAbilitySyncPacket(nbt), player); + } +} diff --git a/src/main/java/kamkeel/npcs/network/packets/player/SpecialKeyStatePacket.java b/src/main/java/kamkeel/npcs/network/packets/player/SpecialKeyStatePacket.java index 3b9f56690..48ac3391b 100644 --- a/src/main/java/kamkeel/npcs/network/packets/player/SpecialKeyStatePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/player/SpecialKeyStatePacket.java @@ -54,7 +54,13 @@ public final class SpecialKeyStatePacket extends AbstractPacket { PlayerData data = PlayerDataController.Instance.getPlayerData((EntityPlayerMP) player); if (data != null) { + boolean wasDown = data.isSpecialKeyDown(); data.setSpecialKeyDown(keyDown); + + // Trigger ability activation on key press (rising edge) + if (keyDown && !wasDown) { + data.abilityData.activateAbility(player); + } } } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitiesGetPacket.java similarity index 75% rename from src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java rename to src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitiesGetPacket.java index 0e8b547a3..8febd9fc0 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitiesGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitiesGetPacket.java @@ -16,17 +16,17 @@ import noppes.npcs.NoppesUtilServer; import java.io.IOException; /** - * Request packet to get list of all saved ability preset names. + * Request packet to get list of all custom ability preset UUIDs/names. */ -public final class SavedAbilitiesGetPacket extends AbstractPacket { - public static String packetName = "Request|SavedAbilitiesGet"; +public final class CustomAbilitiesGetPacket extends AbstractPacket { + public static String packetName = "Request|CustomAbilitiesGet"; - public SavedAbilitiesGetPacket() { + public CustomAbilitiesGetPacket() { } @Override public Enum getType() { - return EnumRequestPacket.SavedAbilitiesGet; + return EnumRequestPacket.CustomAbilitiesGet; } @Override @@ -46,6 +46,6 @@ public final class SavedAbilitiesGetPacket extends AbstractPacket { if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) return; - NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); + NoppesUtilServer.sendCustomAbilitiesData((EntityPlayerMP) player); } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java similarity index 70% rename from src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java rename to src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java index 7bb2f1826..d95051a66 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java @@ -20,23 +20,23 @@ import net.minecraft.nbt.NBTTagCompound; import java.io.IOException; /** - * Request packet to get a specific saved ability by name. + * Request packet to get a specific custom ability by UUID. */ -public final class SavedAbilityGetPacket extends AbstractPacket { - public static String packetName = "Request|SavedAbilityGet"; +public final class CustomAbilityGetPacket extends AbstractPacket { + public static String packetName = "Request|CustomAbilityGet"; - private String abilityName; + private String uuid; - public SavedAbilityGetPacket() { + public CustomAbilityGetPacket() { } - public SavedAbilityGetPacket(String abilityName) { - this.abilityName = abilityName; + public CustomAbilityGetPacket(String uuid) { + this.uuid = uuid; } @Override public Enum getType() { - return EnumRequestPacket.SavedAbilityGet; + return EnumRequestPacket.CustomAbilityGet; } @Override @@ -47,7 +47,7 @@ public final class SavedAbilityGetPacket extends AbstractPacket { @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { - ByteBufUtils.writeString(out, abilityName); + ByteBufUtils.writeString(out, uuid); } @Override @@ -58,10 +58,12 @@ public final class SavedAbilityGetPacket extends AbstractPacket { if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) return; - String name = ByteBufUtils.readString(in); - Ability ability = AbilityController.Instance.getSavedAbility(name); + String id = ByteBufUtils.readString(in); + Ability ability = AbilityController.Instance.getCustomAbility(id); if (ability != null) { NBTTagCompound compound = ability.writeNBT(); + // Include the UUID so the client can track it + compound.setString("_uuid", id); GuiDataPacket.sendGuiData((EntityPlayerMP) player, compound); } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityRemovePacket.java similarity index 69% rename from src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java rename to src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityRemovePacket.java index 3fe4f5a0c..3ef040700 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilityRemovePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityRemovePacket.java @@ -19,23 +19,23 @@ import noppes.npcs.NoppesUtilServer; import java.io.IOException; /** - * Request packet to remove a saved ability by name. + * Request packet to remove a custom ability by UUID. */ -public final class SavedAbilityRemovePacket extends AbstractPacket { - public static String packetName = "Request|SavedAbilityRemove"; +public final class CustomAbilityRemovePacket extends AbstractPacket { + public static String packetName = "Request|CustomAbilityRemove"; - private String abilityName; + private String uuid; - public SavedAbilityRemovePacket() { + public CustomAbilityRemovePacket() { } - public SavedAbilityRemovePacket(String abilityName) { - this.abilityName = abilityName; + public CustomAbilityRemovePacket(String uuid) { + this.uuid = uuid; } @Override public Enum getType() { - return EnumRequestPacket.SavedAbilityRemove; + return EnumRequestPacket.CustomAbilityRemove; } @Override @@ -51,7 +51,7 @@ public final class SavedAbilityRemovePacket extends AbstractPacket { @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { - ByteBufUtils.writeString(out, abilityName); + ByteBufUtils.writeString(out, uuid); } @Override @@ -62,8 +62,8 @@ public final class SavedAbilityRemovePacket extends AbstractPacket { if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player)) return; - String name = ByteBufUtils.readString(in); - AbilityController.Instance.deleteAbility(name); - NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); + String id = ByteBufUtils.readString(in); + AbilityController.Instance.deleteCustomAbility(id); + NoppesUtilServer.sendCustomAbilitiesData((EntityPlayerMP) player); } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java similarity index 73% rename from src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java rename to src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java index 2cf2fa489..d5ca1c556 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/SavedAbilitySavePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java @@ -22,23 +22,23 @@ import noppes.npcs.NoppesUtilServer; import java.io.IOException; /** - * Request packet to save an ability preset. + * Request packet to save a custom ability preset. */ -public final class SavedAbilitySavePacket extends AbstractPacket { - public static String packetName = "Request|SavedAbilitySave"; +public final class CustomAbilitySavePacket extends AbstractPacket { + public static String packetName = "Request|CustomAbilitySave"; private NBTTagCompound abilityNBT; - public SavedAbilitySavePacket() { + public CustomAbilitySavePacket() { } - public SavedAbilitySavePacket(NBTTagCompound abilityNBT) { + public CustomAbilitySavePacket(NBTTagCompound abilityNBT) { this.abilityNBT = abilityNBT; } @Override public Enum getType() { - return EnumRequestPacket.SavedAbilitySave; + return EnumRequestPacket.CustomAbilitySave; } @Override @@ -68,9 +68,11 @@ public final class SavedAbilitySavePacket extends AbstractPacket { NBTTagCompound compound = ByteBufUtils.readNBT(in); Ability ability = AbilityController.Instance.fromNBT(compound); if (ability != null) { - AbilityController.Instance.saveAbility(ability); - NoppesUtilServer.sendSavedAbilitiesData((EntityPlayerMP) player); - GuiDataPacket.sendGuiData((EntityPlayerMP) player, ability.writeNBT()); + AbilityController.Instance.saveCustomAbility(ability); + NoppesUtilServer.sendCustomAbilitiesData((EntityPlayerMP) player); + NBTTagCompound responseNbt = ability.writeNBT(); + responseNbt.setString("_uuid", ability.getId()); + GuiDataPacket.sendGuiData((EntityPlayerMP) player, responseNbt); } } } diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index d9d584b64..e095dc61b 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -75,9 +75,10 @@ public class AnchorPointHelper { switch (anchor) { case FRONT: - x -= Math.sin(headYaw) * frontOffset * scale; - y += height * FRONT_HEIGHT; - z += Math.cos(headYaw) * frontOffset * scale; + Vec3 look = entity.getLookVec(); + x += look.xCoord * frontOffset * scale; + y += height * FRONT_HEIGHT + look.yCoord * frontOffset * scale; + z += look.zCoord * frontOffset * scale; break; case CENTER: diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 0005341f8..ff4617545 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -340,7 +340,6 @@ public class CustomNpcs { new SpawnController(); new LinkedNpcController(); new AnimationController(); - new AbilityController(); AbilityController.Instance.load(); TelegraphController.init(); diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 526a3bdd7..8c44c482e 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -3,6 +3,7 @@ package noppes.npcs; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import kamkeel.npcs.controllers.data.ability.AbilityPhase; +import kamkeel.npcs.controllers.data.ability.AbilitySlot; import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.network.packets.data.telegraph.TelegraphRemovePacket; @@ -35,9 +36,9 @@ public class DataAbilities { // ═══════════════════════════════════════════════════════════════════ /** - * List of abilities this NPC can use + * List of ability slots this NPC can use (inline or reference). */ - private List abilities = new ArrayList<>(); + private List abilitySlots = new ArrayList<>(); /** * Whether the ability system is enabled for this NPC @@ -294,7 +295,7 @@ public class DataAbilities { * Check if an ability can be selected right now. */ public boolean canSelectAbility() { - if (!enabled || abilities.isEmpty()) { + if (!enabled || abilitySlots.isEmpty()) { return false; } if (currentAbility != null && currentAbility.isExecuting()) { @@ -314,7 +315,7 @@ public class DataAbilities { List eligible = new ArrayList<>(); int totalWeight = 0; - for (Ability ability : abilities) { + for (Ability ability : getAbilities()) { if (isAbilityEligible(ability, target)) { eligible.add(ability); totalWeight += ability.getWeight(); @@ -636,24 +637,24 @@ public class DataAbilities { } /** - * Execute a preset ability on this NPC. + * Execute an ability on this NPC by key (built-in name or custom UUID). * The NPC does NOT need to have this ability assigned. * - * @param presetName The name of the saved ability preset + * @param key The ability key (built-in name or custom UUID) * @param target The target entity (can be null for self-targeted abilities) * @return true if the ability was started successfully */ - public boolean executePresetAbility(String presetName, EntityLivingBase target) { - if (presetName == null || presetName.isEmpty() || npc.worldObj.isRemote) { + public boolean executeAbility(String key, EntityLivingBase target) { + if (key == null || key.isEmpty() || npc.worldObj.isRemote) { return false; } - Ability preset = AbilityController.Instance.getSavedAbility(presetName); - if (preset == null) { + Ability resolved = AbilityController.Instance.resolveAbility(key); + if (resolved == null) { return false; } - return forceStartAbility(preset, target); + return forceStartAbility(resolved, target); } // ═══════════════════════════════════════════════════════════════════ @@ -715,8 +716,8 @@ public class DataAbilities { // Roll cooldown so NPC doesn't immediately attack after reset rollCooldown(); - // Reset execution state on all abilities - for (Ability ability : abilities) { + // Reset execution state on all resolved abilities + for (Ability ability : getAbilities()) { ability.reset(); } } @@ -737,39 +738,79 @@ public class DataAbilities { // ABILITY LIST MANAGEMENT // ═══════════════════════════════════════════════════════════════════ + /** + * Get resolved abilities from all slots, filtering out broken references. + */ public List getAbilities() { - return abilities; + List resolved = new ArrayList<>(); + for (AbilitySlot slot : abilitySlots) { + Ability a = slot.getAbility(); + if (a != null) { + resolved.add(a); + } + } + return resolved; } + /** Get the raw slot list (for GUI access). */ + public List getAbilitySlots() { + return abilitySlots; + } + + /** Add an inline ability. */ public void addAbility(Ability ability) { - abilities.add(ability); + abilitySlots.add(AbilitySlot.inline(ability)); + } + + /** Add a reference ability by key (built-in name or custom UUID). */ + public void addAbilityReference(String key) { + abilitySlots.add(AbilitySlot.reference(key)); } public void removeAbility(int index) { - if (index >= 0 && index < abilities.size()) { - abilities.remove(index); + if (index >= 0 && index < abilitySlots.size()) { + abilitySlots.remove(index); } } public void removeAbility(String id) { - abilities.removeIf(a -> a.getId().equals(id)); + abilitySlots.removeIf(slot -> { + if (slot.isReference()) { + return slot.getReferenceId().equals(id); + } + Ability a = slot.getAbility(); + return a != null && a.getId().equals(id); + }); } public Ability getAbility(String id) { - for (Ability ability : abilities) { - if (ability.getId().equals(id)) { - return ability; + for (AbilitySlot slot : abilitySlots) { + Ability a = slot.getAbility(); + if (a != null && a.getId().equals(id)) { + return a; } } return null; } + /** Check if a slot at a given index is a reference. */ + public boolean isSlotReference(int index) { + if (index < 0 || index >= abilitySlots.size()) return false; + return abilitySlots.get(index).isReference(); + } + + /** Convert a reference slot to inline. Returns false if resolution fails. */ + public boolean convertToInline(int index) { + if (index < 0 || index >= abilitySlots.size()) return false; + return abilitySlots.get(index).convertToInline(); + } + public void clearAbilities() { - abilities.clear(); + abilitySlots.clear(); } public boolean isEmpty() { - return abilities.isEmpty(); + return abilitySlots.isEmpty(); } // ═══════════════════════════════════════════════════════════════════ @@ -920,8 +961,8 @@ public class DataAbilities { compound.setInteger("AbilityMaxCooldown", maxCooldown); NBTTagList abilityList = new NBTTagList(); - for (Ability ability : abilities) { - abilityList.appendTag(ability.writeNBT()); + for (AbilitySlot slot : abilitySlots) { + abilityList.appendTag(slot.writeNBT()); } compound.setTag("Abilities", abilityList); @@ -930,28 +971,16 @@ public class DataAbilities { public void readFromNBT(NBTTagCompound compound) { enabled = compound.getBoolean("AbilitiesEnabled"); + minCooldown = compound.getInteger("AbilityMinCooldown"); + maxCooldown = compound.getInteger("AbilityMaxCooldown"); - // Support old globalCooldown for backwards compatibility - if (compound.hasKey("AbilityMinCooldown")) { - minCooldown = compound.getInteger("AbilityMinCooldown"); - maxCooldown = compound.getInteger("AbilityMaxCooldown"); - } else if (compound.hasKey("AbilityGlobalCooldown")) { - // Migrate old single cooldown to min/max range - int oldCooldown = compound.getInteger("AbilityGlobalCooldown"); - minCooldown = oldCooldown; - maxCooldown = oldCooldown * 2; // Give some range - } else { - minCooldown = 20; - maxCooldown = 60; - } - - abilities.clear(); + abilitySlots.clear(); NBTTagList abilityList = compound.getTagList("Abilities", 10); for (int i = 0; i < abilityList.tagCount(); i++) { NBTTagCompound abilityNBT = abilityList.getCompoundTagAt(i); - Ability ability = AbilityController.Instance.fromNBT(abilityNBT); - if (ability != null) { - abilities.add(ability); + AbilitySlot slot = AbilitySlot.fromNBT(abilityNBT); + if (slot != null) { + abilitySlots.add(slot); } } } diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 5e086abce..5f9d1388f 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -62,6 +62,7 @@ import noppes.npcs.scripted.event.RecipeScriptEvent; import noppes.npcs.scripted.event.player.CustomGuiEvent; import noppes.npcs.scripted.event.player.DialogEvent; import noppes.npcs.scripted.event.player.FactionEvent; +import noppes.npcs.scripted.event.player.PlayerAbilityEvent; import noppes.npcs.scripted.event.player.PlayerEvent; import noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent; import noppes.npcs.scripted.event.player.PlayerEvent.ContainerOpen; @@ -692,6 +693,11 @@ public class EventHooks { return NpcAPI.EVENT_BUS.post(event); } + public static boolean onPlayerAbilityHit(PlayerDataScript handler, PlayerAbilityEvent.HitEvent event) { + handler.callScript(EnumScriptType.ABILITY_HIT, event); + return NpcAPI.EVENT_BUS.post(event); + } + public static void onPlayerChangeDim(PlayerDataScript handler, IPlayer player, int fromDim, int toDim) { PlayerEvent.ChangedDimension event = new PlayerEvent.ChangedDimension(player, fromDim, toDim); handler.callScript(EnumScriptType.CHANGED_DIM, event); diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index ae97f70b4..0799e7a6c 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -785,16 +785,18 @@ public class NoppesUtilServer { sendScrollData(player, map, EnumScrollData.ABILITY_TYPES); } - public static void sendSavedAbilitiesData(EntityPlayerMP player) { + public static void sendCustomAbilitiesData(EntityPlayerMP player) { HashMap map = new HashMap(); kamkeel.npcs.controllers.data.ability.AbilityController controller = kamkeel.npcs.controllers.data.ability.AbilityController.Instance; if (controller != null) { int index = 0; - for (String name : controller.getSavedAbilityNames()) { - map.put(name, index++); + for (String uuid : controller.getCustomAbilityIds()) { + String name = controller.getCustomAbilityName(uuid); + if (name == null || name.isEmpty()) name = uuid; + map.put(name + "\t" + uuid, index++); } } - sendScrollData(player, map, EnumScrollData.ABILITIES); + sendScrollData(player, map, EnumScrollData.CUSTOM_ABILITIES); } public static DialogOption setNpcDialog(int slot, int dialogId, EntityPlayer player) throws IOException { diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index a37e6ba08..0541f64c4 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -97,6 +97,13 @@ public class ScriptPlayerEventHandler { if (PlayerDataController.Instance != null) { PlayerData playerData = PlayerData.get(player); playerData.actionManager.tick(); + playerData.abilityData.tick(player); + + // Lock player movement during ability phases that require it + if (playerData.abilityData.isMovementLocked()) { + player.motionX = 0; + player.motionZ = 0; + } if (playerData.updateClient) { SyncController.syncPlayerData((EntityPlayerMP) player, true); diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java b/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java index 72481f133..807a3e719 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java @@ -98,7 +98,7 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis getTextField(18).setVisible(dialog.renderGradual); getLabel(18).enabled = dialog.renderGradual; - addTextField(new GuiNpcTextField(19, this, guiLeft + 125, y += 22, 40, 20, String.valueOf(dialog.textPitch))); + addTextField(new GuiNpcTextField(19, this, guiLeft + 125, y += 22, 40, 20, "" + dialog.textPitch)); addLabel(new GuiNpcLabel(19, "dialog.textPitch", guiLeft + 4, y + 5)); getTextField(19).floatsOnly = true; getTextField(19).setVisible(dialog.renderGradual); @@ -110,48 +110,48 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis addButton(new GuiNpcButton(24, guiLeft + 192, y, 50, 20, new String[]{"display.bottom", "display.top"}, dialog.alignment)); addLabel(new GuiNpcLabel(27, "display.alignment", guiLeft + 126, y + 5)); - addTextField(new GuiNpcTextField(11, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.textWidth))); - addTextField(new GuiNpcTextField(12, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.textHeight))); + addTextField(new GuiNpcTextField(11, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.textWidth)); + addTextField(new GuiNpcTextField(12, this, guiLeft + 165, y, 40, 20, "" + dialog.textHeight)); addLabel(new GuiNpcLabel(12, "gui.widthHeight", guiLeft + 4, y + 5)); getTextField(11).integersOnly = true; getTextField(11).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(12).integersOnly = true; getTextField(12).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(13, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.textOffsetX))); - addTextField(new GuiNpcTextField(14, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.textOffsetY))); + addTextField(new GuiNpcTextField(13, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.textOffsetX)); + addTextField(new GuiNpcTextField(14, this, guiLeft + 165, y, 40, 20, "" + dialog.textOffsetY)); addLabel(new GuiNpcLabel(15, "dialog.textOffset", guiLeft + 4, y + 5)); getTextField(13).integersOnly = true; getTextField(13).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(14).integersOnly = true; getTextField(14).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(15, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.titleOffsetX))); - addTextField(new GuiNpcTextField(16, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.titleOffsetY))); + addTextField(new GuiNpcTextField(15, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.titleOffsetX)); + addTextField(new GuiNpcTextField(16, this, guiLeft + 165, y, 40, 20, "" + dialog.titleOffsetY)); addLabel(new GuiNpcLabel(18, "dialog.titleOffset", guiLeft + 4, y + 5)); getTextField(15).integersOnly = true; getTextField(15).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(16).integersOnly = true; getTextField(16).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(17, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.optionOffsetX))); - addTextField(new GuiNpcTextField(18, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.optionOffsetY))); + addTextField(new GuiNpcTextField(17, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.optionOffsetX)); + addTextField(new GuiNpcTextField(18, this, guiLeft + 165, y, 40, 20, "" + dialog.optionOffsetY)); addLabel(new GuiNpcLabel(21, "dialog.optionOffset", guiLeft + 4, y + 5)); getTextField(17).integersOnly = true; getTextField(17).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(18).integersOnly = true; getTextField(18).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(19, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.optionSpaceX))); - addTextField(new GuiNpcTextField(20, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.optionSpaceY))); + addTextField(new GuiNpcTextField(19, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.optionSpaceX)); + addTextField(new GuiNpcTextField(20, this, guiLeft + 165, y, 40, 20, "" + dialog.optionSpaceY)); addLabel(new GuiNpcLabel(24, "dialog.optionSpacing", guiLeft + 4, y + 5)); getTextField(19).integersOnly = true; getTextField(19).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(20).integersOnly = true; getTextField(20).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(21, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.npcOffsetX))); - addTextField(new GuiNpcTextField(22, this, guiLeft + 165, y, 40, 20, String.valueOf(dialog.npcOffsetY))); + addTextField(new GuiNpcTextField(21, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.npcOffsetX)); + addTextField(new GuiNpcTextField(22, this, guiLeft + 165, y, 40, 20, "" + dialog.npcOffsetY)); addLabel(new GuiNpcLabel(25, "dialog.npcOffset", guiLeft + 4, y + 5)); getTextField(21).integersOnly = true; getTextField(21).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); @@ -161,7 +161,7 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis getTextField(22).setVisible(!dialog.hideNPC); getLabel(25).enabled = !dialog.hideNPC; - addTextField(new GuiNpcTextField(23, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialog.npcScale))); + addTextField(new GuiNpcTextField(23, this, guiLeft + 120, y += 25, 40, 20, "" + dialog.npcScale)); addLabel(new GuiNpcLabel(26, "dialog.npcScale", guiLeft + 4, y + 5)); getTextField(23).floatsOnly = true; getTextField(23).setMinMaxDefaultFloat(-Float.MAX_VALUE, Float.MAX_VALUE, 0); @@ -182,30 +182,30 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis DialogImage dialogImage = getSelectedImage(); addButton(new GuiNpcButton(2, guiLeft + xSize + 24, guiTop + 5, 20, 20, "-")); - addTextField(new GuiNpcTextField(10, this, guiLeft + 17, y += 25, 30, 20, String.valueOf(dialogImage.id))); + addTextField(new GuiNpcTextField(10, this, guiLeft + 17, y += 25, 30, 20, "" + dialogImage.id)); addTextField(new GuiNpcTextField(11, this, guiLeft + 92, y, 150, 20, dialogImage.texture)); addLabel(new GuiNpcLabel(10, "gui.id", guiLeft + 4, y + 5)); addLabel(new GuiNpcLabel(11, "display.texture", guiLeft + 50, y + 5)); getTextField(10).integersOnly = true; - addTextField(new GuiNpcTextField(12, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialogImage.x))); - addTextField(new GuiNpcTextField(13, this, guiLeft + 165, y, 40, 20, String.valueOf(dialogImage.y))); + addTextField(new GuiNpcTextField(12, this, guiLeft + 120, y += 25, 40, 20, "" + dialogImage.x)); + addTextField(new GuiNpcTextField(13, this, guiLeft + 165, y, 40, 20, "" + dialogImage.y)); addLabel(new GuiNpcLabel(12, "gui.position", guiLeft + 4, y + 5)); getTextField(12).integersOnly = true; getTextField(12).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(13).integersOnly = true; getTextField(13).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(14, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialogImage.width))); - addTextField(new GuiNpcTextField(15, this, guiLeft + 165, y, 40, 20, String.valueOf(dialogImage.height))); + addTextField(new GuiNpcTextField(14, this, guiLeft + 120, y += 25, 40, 20, "" + dialogImage.width)); + addTextField(new GuiNpcTextField(15, this, guiLeft + 165, y, 40, 20, "" + dialogImage.height)); addLabel(new GuiNpcLabel(13, "gui.widthHeight", guiLeft + 4, y + 5)); getTextField(14).integersOnly = true; getTextField(14).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); getTextField(15).integersOnly = true; getTextField(15).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); - addTextField(new GuiNpcTextField(16, this, guiLeft + 120, y += 25, 40, 20, String.valueOf(dialogImage.textureX))); - addTextField(new GuiNpcTextField(17, this, guiLeft + 165, y, 40, 20, String.valueOf(dialogImage.textureY))); + addTextField(new GuiNpcTextField(16, this, guiLeft + 120, y += 25, 40, 20, "" + dialogImage.textureX)); + addTextField(new GuiNpcTextField(17, this, guiLeft + 165, y, 40, 20, "" + dialogImage.textureY)); addLabel(new GuiNpcLabel(14, "dialog.textureOffset", guiLeft + 4, y + 5)); getTextField(16).integersOnly = true; getTextField(16).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); @@ -229,9 +229,9 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis getButton(19).setVisible(dialogImage.imageType == 2); getLabel(16).enabled = dialogImage.imageType == 2; - addTextField(new GuiNpcTextField(20, this, guiLeft + 33, y += 25, 30, 20, String.valueOf(dialogImage.scale))); - addTextField(new GuiNpcTextField(21, this, guiLeft + 102, y, 30, 20, String.valueOf(dialogImage.alpha))); - addTextField(new GuiNpcTextField(22, this, guiLeft + 183, y, 45, 20, String.valueOf(dialogImage.rotation))); + addTextField(new GuiNpcTextField(20, this, guiLeft + 33, y += 25, 30, 20, "" + dialogImage.scale)); + addTextField(new GuiNpcTextField(21, this, guiLeft + 102, y, 30, 20, "" + dialogImage.alpha)); + addTextField(new GuiNpcTextField(22, this, guiLeft + 183, y, 45, 20, "" + dialogImage.rotation)); addLabel(new GuiNpcLabel(17, "model.scale", guiLeft + 4, y + 5)); addLabel(new GuiNpcLabel(18, "display.alpha", guiLeft + 72, y + 5)); addLabel(new GuiNpcLabel(19, "movement.rotation", guiLeft + 140, y + 5)); @@ -306,13 +306,13 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis Collections.sort(ids); ArrayList strings = new ArrayList<>(); for (int i : ids) { - strings.add(String.valueOf(i)); + strings.add("" + i); } imageScroll.setUnsortedList(strings); if (changedId != -1) { - selected = imageScroll.getList().indexOf(String.valueOf(changedId)); - imageScroll.setSelected(String.valueOf(changedId)); + selected = imageScroll.getList().indexOf("" + changedId); + imageScroll.setSelected("" + changedId); changedId = -1; } @@ -402,7 +402,7 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis dialog.dialogImages.put(addId, new DialogImage(addId)); updateScrollData(); - selected = imageScroll.getList().indexOf(String.valueOf(addId)); + selected = imageScroll.getList().indexOf("" + addId); } if (button.id == 2) { if (imageScroll.getSelected() != null) { @@ -598,8 +598,8 @@ public class SubGuiNpcDialogVisual extends SubGuiInterface implements ISubGuiLis } if (textfield.id == 10) { - if (imageScroll.getList().contains(String.valueOf(textfield.getInteger()))) { - textfield.setText(String.valueOf(dialogImage.id)); + if (imageScroll.getList().contains("" + textfield.getInteger())) { + textfield.setText("" + dialogImage.id); return; } diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiNpcPartyOptions.java b/src/main/java/noppes/npcs/client/gui/SubGuiNpcPartyOptions.java index 10420a65d..c5a0769a3 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiNpcPartyOptions.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiNpcPartyOptions.java @@ -71,7 +71,7 @@ public class SubGuiNpcPartyOptions extends SubGuiInterface implements ITextfield y += 23; //min party size - number field GuiNpcTextField minField = new GuiNpcTextField(21, this, guiLeft + 60, guiTop + 10 + y, - 30, 20, String.valueOf(options.minPartySize)); + 30, 20, "" + options.minPartySize); minField.integersOnly = true; minField.setMinMaxDefault(1, Integer.MAX_VALUE, 1); addTextField(minField); @@ -79,7 +79,7 @@ public class SubGuiNpcPartyOptions extends SubGuiInterface implements ITextfield //max party size - number field GuiNpcTextField maxField = new GuiNpcTextField(20, this, guiLeft + 160, guiTop + 10 + y, - 30, 20, String.valueOf(options.maxPartySize)); + 30, 20, "" + options.maxPartySize); maxField.integersOnly = true; maxField.setMinMaxDefault(1, Integer.MAX_VALUE, 4); addTextField(maxField); diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiSpawningOptions.java b/src/main/java/noppes/npcs/client/gui/SubGuiSpawningOptions.java index c15f9162f..29c33352b 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiSpawningOptions.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiSpawningOptions.java @@ -36,9 +36,9 @@ public class SubGuiSpawningOptions extends SubGuiInterface implements ITextfield addButton(new GuiNpcButtonYesNo(13, guiLeft + 120, y += 22, data.airSpawning)); addLabel(new GuiNpcLabel(13, "spawning.airSpawning", guiLeft + 4, y + 5)); - addTextField(new GuiNpcTextField(14, this, guiLeft + 120, y += 22, 40, 20, String.valueOf(data.spawnHeightMin))); + addTextField(new GuiNpcTextField(14, this, guiLeft + 120, y += 22, 40, 20, "" + data.spawnHeightMin)); addLabel(new GuiNpcLabel(14, "spawning.minHeight", guiLeft + 4, y + 5)); - addTextField(new GuiNpcTextField(15, this, guiLeft + 120, y += 22, 40, 20, String.valueOf(data.spawnHeightMax))); + addTextField(new GuiNpcTextField(15, this, guiLeft + 120, y += 22, 40, 20, "" + data.spawnHeightMax)); addLabel(new GuiNpcLabel(15, "spawning.maxHeight", guiLeft + 4, y + 5)); getTextField(14).integersOnly = true; getTextField(14).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java index 750fe282e..59046ef77 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java @@ -2,6 +2,7 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.controllers.data.ability.AbilitySlot; import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.request.ability.AbilitiesGetAllPacket; import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcGetPacket; @@ -46,8 +47,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Display name to typeId mapping for the available types scroll private final HashMap displayNameToTypeId = new HashMap<>(); - // NPC's current abilities - private final List npcAbilities = new ArrayList<>(); + // NPC's current ability slots + private final List npcSlots = new ArrayList<>(); // Settings private boolean abilitiesEnabled = false; @@ -75,13 +76,13 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Cooldown range: Min Cooldown and Max Cooldown (spaced apart more) addLabel(new GuiNpcLabel(101, "ability.minCooldown", guiLeft + 115, y + 5)); - GuiNpcTextField minField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 165, y, 40, 20, String.valueOf(minCooldown)); + GuiNpcTextField minField = new GuiNpcTextField(101, this, fontRendererObj, guiLeft + 165, y, 40, 20, "" + minCooldown); minField.setIntegersOnly(); minField.setMinMaxDefault(0, 10000, 20); addTextField(minField); addLabel(new GuiNpcLabel(102, "ability.maxCooldown", guiLeft + 260, y + 5)); - GuiNpcTextField maxField = new GuiNpcTextField(102, this, fontRendererObj, guiLeft + 310, y, 40, 20, String.valueOf(maxCooldown)); + GuiNpcTextField maxField = new GuiNpcTextField(102, this, fontRendererObj, guiLeft + 310, y, 40, 20, "" + maxCooldown); maxField.setIntegersOnly(); maxField.setMinMaxDefault(0, 10000, 60); addTextField(maxField); @@ -124,8 +125,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC addButton(new GuiNpcButton(75, centerX, y + 90, 40, 20, "gui.load")); // On/Off toggle for selected ability (under Load button) - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - Ability selectedAbility = npcAbilities.get(selectedAbilityIndex); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + Ability selectedAbility = npcSlots.get(selectedAbilityIndex).getAbility(); GuiNpcButton toggleBtn = new GuiNpcButton(77, centerX, y + 112, 40, 20, new String[]{"gui.off", "gui.on"}, selectedAbility.isEnabled() ? 1 : 0); addButton(toggleBtn); @@ -139,7 +140,7 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC addButton(new GuiNpcButton(73, guiLeft + 270, y + 145, 20, 20, "<")); addButton(new GuiNpcButton(74, guiLeft + 292, y + 145, 20, 20, ">")); getButton(73).setEnabled(selectedAbilityIndex > 0); - getButton(74).setEnabled(selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size() - 1); + getButton(74).setEnabled(selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size() - 1); // Save button (to the right of carrots, only enabled when ability is selected) addButton(new GuiNpcButton(76, guiLeft + 320, y + 145, 50, 20, "gui.save")); @@ -166,10 +167,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC Ability newAbility = AbilityController.Instance.create(typeId); if (newAbility != null) { newAbility.setId(UUID.randomUUID().toString()); - // Don't set custom name - let it default to type name - npcAbilities.add(newAbility); - // Auto-select the newly added ability - selectedAbilityIndex = npcAbilities.size() - 1; + npcSlots.add(AbilitySlot.inline(newAbility)); + selectedAbilityIndex = npcSlots.size() - 1; updateNpcAbilitiesList(); selectAbilityByIndex(selectedAbilityIndex); initGui(); @@ -182,8 +181,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Remove ability if (id == 71) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - npcAbilities.remove(selectedAbilityIndex); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + npcSlots.remove(selectedAbilityIndex); selectedAbilityIndex = -1; updateNpcAbilitiesList(); initGui(); @@ -194,9 +193,17 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Edit ability if (id == 72) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - Ability ability = npcAbilities.get(selectedAbilityIndex); - setSubGui(ability.createConfigGui(this)); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + AbilitySlot slot = npcSlots.get(selectedAbilityIndex); + if (slot.isReference()) { + // Reference slot - ask clone-and-modify vs modify-parent + setSubGui(new SubGuiAbilityEditMode()); + } else { + Ability ability = slot.getAbility(); + if (ability != null) { + setSubGui(ability.createConfigGui(this)); + } + } } return; } @@ -204,9 +211,9 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Move up (carrot left = earlier in list) if (id == 73) { if (selectedAbilityIndex > 0) { - Ability temp = npcAbilities.get(selectedAbilityIndex); - npcAbilities.set(selectedAbilityIndex, npcAbilities.get(selectedAbilityIndex - 1)); - npcAbilities.set(selectedAbilityIndex - 1, temp); + AbilitySlot temp = npcSlots.get(selectedAbilityIndex); + npcSlots.set(selectedAbilityIndex, npcSlots.get(selectedAbilityIndex - 1)); + npcSlots.set(selectedAbilityIndex - 1, temp); selectedAbilityIndex--; updateNpcAbilitiesList(); selectAbilityByIndex(selectedAbilityIndex); @@ -218,10 +225,10 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Move down (carrot right = later in list) if (id == 74) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size() - 1) { - Ability temp = npcAbilities.get(selectedAbilityIndex); - npcAbilities.set(selectedAbilityIndex, npcAbilities.get(selectedAbilityIndex + 1)); - npcAbilities.set(selectedAbilityIndex + 1, temp); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size() - 1) { + AbilitySlot temp = npcSlots.get(selectedAbilityIndex); + npcSlots.set(selectedAbilityIndex, npcSlots.get(selectedAbilityIndex + 1)); + npcSlots.set(selectedAbilityIndex + 1, temp); selectedAbilityIndex++; updateNpcAbilitiesList(); selectAbilityByIndex(selectedAbilityIndex); @@ -237,15 +244,16 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC return; } - // Save selected ability + // Save selected ability as custom preset if (id == 76) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - Ability abilityToSave = npcAbilities.get(selectedAbilityIndex); - if (abilityToSave.getName() == null || abilityToSave.getName().isEmpty()) { - // Need a name to save - open edit dialog first - setSubGui(abilityToSave.createConfigGui(this)); - } else { - setSubGui(new SubGuiAbilitySaveConfirm(abilityToSave)); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + Ability abilityToSave = npcSlots.get(selectedAbilityIndex).getAbility(); + if (abilityToSave != null) { + if (abilityToSave.getName() == null || abilityToSave.getName().isEmpty()) { + setSubGui(abilityToSave.createConfigGui(this)); + } else { + setSubGui(new SubGuiAbilitySaveConfirm(abilityToSave)); + } } } return; @@ -253,13 +261,15 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC // Toggle selected ability on/off if (id == 77) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - Ability ability = npcAbilities.get(selectedAbilityIndex); - ability.setEnabled(((GuiNpcButton) guibutton).getValue() == 1); - updateNpcAbilitiesList(); - selectAbilityByIndex(selectedAbilityIndex); - initGui(); - save(); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + Ability ability = npcSlots.get(selectedAbilityIndex).getAbility(); + if (ability != null) { + ability.setEnabled(((GuiNpcButton) guibutton).getValue() == 1); + updateNpcAbilitiesList(); + selectAbilityByIndex(selectedAbilityIndex); + initGui(); + save(); + } } return; } @@ -290,26 +300,20 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC abilitiesEnabled = compound.getBoolean("AbilitiesEnabled"); - // Support old globalCooldown for backwards compatibility - if (compound.hasKey("AbilityMinCooldown")) { - minCooldown = compound.getInteger("AbilityMinCooldown"); - maxCooldown = compound.getInteger("AbilityMaxCooldown"); - } else if (compound.hasKey("AbilityGlobalCooldown")) { - int oldCooldown = compound.getInteger("AbilityGlobalCooldown"); - minCooldown = oldCooldown; - maxCooldown = oldCooldown * 2; - } else { + minCooldown = compound.getInteger("AbilityMinCooldown"); + maxCooldown = compound.getInteger("AbilityMaxCooldown"); + if (minCooldown == 0 && maxCooldown == 0) { minCooldown = 20; maxCooldown = 60; } - npcAbilities.clear(); + npcSlots.clear(); NBTTagList abilityList = compound.getTagList("Abilities", 10); for (int i = 0; i < abilityList.tagCount(); i++) { NBTTagCompound abilityNBT = abilityList.getCompoundTagAt(i); - Ability ability = AbilityController.Instance.fromNBT(abilityNBT); - if (ability != null) { - npcAbilities.add(ability); + AbilitySlot slot = AbilitySlot.fromNBT(abilityNBT); + if (slot != null) { + npcSlots.add(slot); } } @@ -352,7 +356,7 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC private void updateNpcAbilitiesList() { List list = new ArrayList<>(); - for (int i = 0; i < npcAbilities.size(); i++) { + for (int i = 0; i < npcSlots.size(); i++) { list.add(getAbilityListEntry(i)); } if (npcAbilitiesScroll != null) { @@ -361,26 +365,41 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC } /** - * Creates the display entry for an ability in the list. - * Format: "[●] 1. Custom Name (Type)" or "[●] 1. Type" if no custom name - * Circle is green (§a) for enabled, red (§c) for disabled + * Creates the display entry for an ability slot in the list. + * Inline: "[●] 1. Custom Name (Type)" or "[●] 1. Type" + * Reference: "[●] 1. > Name (Type)" in yellow + * Broken: "[●] 1. > [Missing: id...]" in red */ private String getAbilityListEntry(int index) { - Ability ability = npcAbilities.get(index); + AbilitySlot slot = npcSlots.get(index); + Ability ability = slot.getAbility(); + + if (ability == null) { + // Broken reference + String refId = slot.getReferenceId(); + String shortId = refId != null && refId.length() > 8 ? refId.substring(0, 8) + "..." : refId; + return "\u00A7c\u25CF\u00A7r " + (index + 1) + ". \u00A7c> [Missing: " + shortId + "]\u00A7r"; + } + String typeName = getDisplayName(ability.getTypeId()); String customName = ability.getName(); - - // Color prefix: green circle for enabled, red for disabled String colorPrefix = ability.isEnabled() ? "\u00A7a\u25CF\u00A7r " : "\u00A7c\u25CF\u00A7r "; + String nameDisplay; if (customName != null && !customName.isEmpty() && !customName.equals(typeName)) { - return colorPrefix + (index + 1) + ". " + customName + " (" + typeName + ")"; + nameDisplay = customName + " (" + typeName + ")"; + } else { + nameDisplay = typeName; } - return colorPrefix + (index + 1) + ". " + typeName; + + if (slot.isReference()) { + return colorPrefix + (index + 1) + ". \u00A7e> " + nameDisplay + "\u00A7r"; + } + return colorPrefix + (index + 1) + ". " + nameDisplay; } private void selectAbilityByIndex(int index) { - if (index >= 0 && index < npcAbilities.size()) { + if (index >= 0 && index < npcSlots.size()) { String entry = getAbilityListEntry(index); if (npcAbilitiesScroll != null) { npcAbilitiesScroll.setSelected(entry); @@ -403,8 +422,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC compound.setInteger("AbilityMaxCooldown", maxCooldown); NBTTagList abilityList = new NBTTagList(); - for (Ability ability : npcAbilities) { - abilityList.appendTag(ability.writeNBT()); + for (AbilitySlot slot : npcSlots) { + abilityList.appendTag(slot.writeNBT()); } compound.setTag("Abilities", abilityList); @@ -412,15 +431,29 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC } /** - * Called from SubGuiAbilityLoad when a saved ability is loaded. - * Adds the ability to the NPC's ability list. + * Called from SubGuiAbilityLoad when a cloned ability is loaded. + * Adds as an inline slot. */ public void loadAbility(Ability loadedAbility) { if (loadedAbility != null) { loadedAbility.setId(UUID.randomUUID().toString()); - npcAbilities.add(loadedAbility); - // Auto-select the newly added ability - selectedAbilityIndex = npcAbilities.size() - 1; + npcSlots.add(AbilitySlot.inline(loadedAbility)); + selectedAbilityIndex = npcSlots.size() - 1; + updateNpcAbilitiesList(); + selectAbilityByIndex(selectedAbilityIndex); + initGui(); + save(); + } + } + + /** + * Called from SubGuiAbilityLoad when a reference is loaded. + * Adds as a reference slot. + */ + public void loadAbilityReference(String referenceId) { + if (referenceId != null && !referenceId.isEmpty()) { + npcSlots.add(AbilitySlot.reference(referenceId)); + selectedAbilityIndex = npcSlots.size() - 1; updateNpcAbilitiesList(); selectAbilityByIndex(selectedAbilityIndex); initGui(); @@ -460,9 +493,16 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) { - if (scroll == npcAbilitiesScroll && selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - Ability ability = npcAbilities.get(selectedAbilityIndex); - setSubGui(ability.createConfigGui(this)); + if (scroll == npcAbilitiesScroll && selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + AbilitySlot slot = npcSlots.get(selectedAbilityIndex); + if (slot.isReference()) { + setSubGui(new SubGuiAbilityEditMode()); + } else { + Ability ability = slot.getAbility(); + if (ability != null) { + setSubGui(ability.createConfigGui(this)); + } + } } } @@ -489,8 +529,32 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiAbilityConfig) { - // Ability was saved in the SubGui, refresh list + if (subgui instanceof SubGuiAbilityEditMode) { + int mode = ((SubGuiAbilityEditMode) subgui).getResult(); + if (mode < 0) return; // cancelled + + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + AbilitySlot slot = npcSlots.get(selectedAbilityIndex); + if (mode == SubGuiAbilityEditMode.MODE_CLONE_MODIFY) { + // Convert reference to inline, then edit + if (slot.convertToInline()) { + Ability ability = slot.getAbility(); + if (ability != null) { + ability.setId(UUID.randomUUID().toString()); + setSubGui(ability.createConfigGui(this)); + } + updateNpcAbilitiesList(); + save(); + } + } else if (mode == SubGuiAbilityEditMode.MODE_MODIFY_PARENT) { + // Edit the resolved ability directly (changes propagate to controller) + Ability ability = slot.getAbility(); + if (ability != null) { + setSubGui(ability.createConfigGui(this)); + } + } + } + } else if (subgui instanceof SubGuiAbilityConfig) { updateNpcAbilitiesList(); save(); } @@ -500,8 +564,15 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC * Called from SubGuiAbilityConfig when ability is saved. */ public void onAbilitySaved(Ability ability) { - if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcAbilities.size()) { - npcAbilities.set(selectedAbilityIndex, ability); + if (selectedAbilityIndex >= 0 && selectedAbilityIndex < npcSlots.size()) { + AbilitySlot slot = npcSlots.get(selectedAbilityIndex); + if (slot.isReference()) { + // For reference slots, save back to controller + // (The resolved copy was edited in-place) + } else { + // For inline slots, replace with the updated ability + npcSlots.set(selectedAbilityIndex, AbilitySlot.inline(ability)); + } updateNpcAbilitiesList(); save(); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 684138891..611f8c918 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -250,7 +250,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Row 2: Weight + Lock Movement addLabel(new GuiNpcLabel(4, "ability.weight", col1LabelX, y + 5)); - GuiNpcTextField weightField = new GuiNpcTextField(3, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(weight)); + GuiNpcTextField weightField = new GuiNpcTextField(3, this, fontRendererObj, col1FieldX, y, 40, 20, "" + weight); weightField.setIntegersOnly(); weightField.setMinMaxDefault(1, 1000, 10); addTextField(weightField); @@ -271,7 +271,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Only show dazed ticks if interruptible is enabled if (interruptible) { addLabel(new GuiNpcLabel(12, "ability.dazed", col2LabelX, y + 5)); - GuiNpcTextField dazedField = new GuiNpcTextField(13, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(dazedTicks)); + GuiNpcTextField dazedField = new GuiNpcTextField(13, this, fontRendererObj, col2FieldX, y, 40, 20, "" + dazedTicks); dazedField.setIntegersOnly(); dazedField.setMinMaxDefault(0, 1000, 80); addTextField(dazedField); @@ -291,13 +291,13 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Only show windup textbox if sync is off or no animation selected if (!syncWindupWithAnimation || !hasWindupAnimation) { - GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(windUpTicks)); + GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, "" + windUpTicks); windupField.setIntegersOnly(); windupField.setMinMaxDefault(0, 1000, 20); addTextField(windupField); } else { // Show calculated value as label when synced - addLabel(new GuiNpcLabel(11, String.valueOf(windUpTicks), col1FieldX + 5, y + 5)); + addLabel(new GuiNpcLabel(11, "" + windUpTicks, col1FieldX + 5, y + 5)); } // Sync toggle button - only show if windup animation is selected @@ -309,7 +309,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } addLabel(new GuiNpcLabel(13, "ability.cooldown", col2LabelX, y + 5)); - GuiNpcTextField cooldownField = new GuiNpcTextField(10, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(cooldownTicks)); + GuiNpcTextField cooldownField = new GuiNpcTextField(10, this, fontRendererObj, col2FieldX, y, 40, 20, "" + cooldownTicks); cooldownField.setIntegersOnly(); cooldownField.setMinMaxDefault(0, 10000, 0); addTextField(cooldownField); @@ -399,13 +399,13 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Row 1: Min Range + Max Range addLabel(new GuiNpcLabel(20, "ability.minRange", col1LabelX, y + 5)); - GuiNpcTextField minRangeField = new GuiNpcTextField(5, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf((int) minRange)); + GuiNpcTextField minRangeField = new GuiNpcTextField(5, this, fontRendererObj, col1FieldX, y, 40, 20, "" + (int) minRange); minRangeField.setIntegersOnly(); minRangeField.setMinMaxDefault(0, 100, 0); addTextField(minRangeField); addLabel(new GuiNpcLabel(21, "ability.maxRange", col2LabelX, y + 5)); - GuiNpcTextField maxRangeField = new GuiNpcTextField(6, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf((int) maxRange)); + GuiNpcTextField maxRangeField = new GuiNpcTextField(6, this, fontRendererObj, col2FieldX, y, 40, 20, "" + (int) maxRange); maxRangeField.setIntegersOnly(); maxRangeField.setMinMaxDefault(1, 100, 20); addTextField(maxRangeField); @@ -1039,7 +1039,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi * Creates an integer text field for type-specific settings. */ protected GuiNpcTextField createIntField(int id, int x, int y, int width, int value) { - GuiNpcTextField field = new GuiNpcTextField(id, this, fontRendererObj, x, y, width, 20, String.valueOf(value)); + GuiNpcTextField field = new GuiNpcTextField(id, this, fontRendererObj, x, y, width, 20, "" + value); field.setIntegersOnly(); return field; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java index 3760666b4..c0517257b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityDeleteConfirm.java @@ -1,7 +1,7 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket; import net.minecraft.client.gui.GuiButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; @@ -51,7 +51,7 @@ public class SubGuiAbilityDeleteConfirm extends SubGuiInterface { if (id == 0) { // Delete the ability via packet - PacketClient.sendClient(new SavedAbilityRemovePacket(abilityName)); + PacketClient.sendClient(new CustomAbilityRemovePacket(abilityName)); if (onDeleted != null) { onDeleted.run(); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityEditMode.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityEditMode.java new file mode 100644 index 000000000..4d21f12ca --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityEditMode.java @@ -0,0 +1,56 @@ +package noppes.npcs.client.gui.advanced; + +import net.minecraft.client.gui.GuiButton; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * Dialog asking the user whether to clone-and-modify (convert to inline) or modify the parent ability. + */ +public class SubGuiAbilityEditMode extends SubGuiInterface { + + public static final int MODE_CLONE_MODIFY = 0; + public static final int MODE_MODIFY_PARENT = 1; + + private int result = -1; + + public SubGuiAbilityEditMode() { + setBackground("menubg.png"); + xSize = 220; + ySize = 90; + } + + @Override + public void initGui() { + super.initGui(); + + int y = guiTop + 10; + addLabel(new GuiNpcLabel(0, "ability.edit.mode", guiLeft + 10, y)); + + y += 25; + addButton(new GuiNpcButton(0, guiLeft + 10, y, 95, 20, "ability.cloneModify")); + addButton(new GuiNpcButton(1, guiLeft + 115, y, 95, 20, "ability.modifyParent")); + + y += 25; + addButton(new GuiNpcButton(2, guiLeft + 65, y, 90, 20, "gui.cancel")); + } + + @Override + public void buttonEvent(GuiButton guibutton) { + if (guibutton.id == 0) { + result = MODE_CLONE_MODIFY; + close(); + } else if (guibutton.id == 1) { + result = MODE_MODIFY_PARENT; + close(); + } else if (guibutton.id == 2) { + result = -1; + close(); + } + } + + public int getResult() { + return result; + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java index 1e9133d9d..68a74cb8b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java @@ -3,8 +3,8 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.util.GuiCustomScroll; @@ -13,28 +13,34 @@ import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.ICustomScrollListener; import noppes.npcs.client.gui.util.IGuiData; import noppes.npcs.client.gui.util.IScrollData; +import noppes.npcs.client.gui.util.ISubGuiListener; import noppes.npcs.client.gui.util.SubGuiInterface; import noppes.npcs.constants.EnumScrollData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.UUID; import java.util.Vector; /** * Dialog for loading a saved ability preset. - * Uses packet-based communication for proper client-server architecture. + * Shows custom abilities from the server, then asks Clone/Reference via SubGuiAbilityLoadMode. */ -public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollListener, IScrollData, IGuiData { +public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollListener, IScrollData, IGuiData, ISubGuiListener { private final SubGuiAbilityConfig parentConfig; private final GuiNPCAbilities parentAbilities; - private String selectedName = null; - private HashMap abilityData = new HashMap<>(); + private String selectedDisplayName = null; + private String selectedUuid = null; + + /** Maps display name -> UUID for custom abilities. */ + private final HashMap displayToUuid = new HashMap<>(); + private HashMap rawData = new HashMap<>(); private GuiCustomScroll scroll; - // Track if we're waiting for a load private boolean waitingForLoad = false; + private int pendingLoadMode = -1; public SubGuiAbilityLoad(SubGuiAbilityConfig parentConfig) { this.parentConfig = parentConfig; @@ -44,8 +50,7 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL xSize = 220; ySize = 180; - // Request ability list from server - PacketClient.sendClient(new SavedAbilitiesGetPacket()); + PacketClient.sendClient(new CustomAbilitiesGetPacket()); } public SubGuiAbilityLoad(GuiNPCAbilities parentAbilities) { @@ -56,8 +61,7 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL xSize = 220; ySize = 180; - // Request ability list from server - PacketClient.sendClient(new SavedAbilitiesGetPacket()); + PacketClient.sendClient(new CustomAbilitiesGetPacket()); } @Override @@ -69,7 +73,6 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL addLabel(new GuiNpcLabel(0, "ability.load.select", guiLeft + 10, y)); y += 14; - // Scroll list of saved abilities if (scroll == null) { scroll = new GuiCustomScroll(this, 0); scroll.setSize(200, 110); @@ -77,42 +80,70 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL scroll.guiLeft = guiLeft + 10; scroll.guiTop = y; scroll.setList(getFilteredList()); - if (selectedName != null && abilityData.containsKey(selectedName)) { - scroll.setSelected(selectedName); + if (selectedDisplayName != null) { + scroll.setSelected(selectedDisplayName); } addScroll(scroll); y += 115; - // Buttons addButton(new GuiNpcButton(0, guiLeft + 10, y, 95, 20, "gui.load")); addButton(new GuiNpcButton(2, guiLeft + 115, y, 95, 20, "gui.cancel")); - // Disable load if nothing selected - getButton(0).setEnabled(selectedName != null && !selectedName.isEmpty()); + getButton(0).setEnabled(selectedUuid != null); } private List getFilteredList() { - return new ArrayList<>(abilityData.keySet()); + return new ArrayList<>(displayToUuid.keySet()); } @Override public void buttonEvent(GuiButton guibutton) { int id = guibutton.id; - if (id == 0 && selectedName != null) { - // Request ability data from server - waitingForLoad = true; - PacketClient.sendClient(new SavedAbilityGetPacket(selectedName)); + if (id == 0 && selectedUuid != null) { + if (parentAbilities != null) { + // From NPC abilities GUI - ask clone/reference + setSubGui(new SubGuiAbilityLoadMode()); + } else { + // From config GUI - always clone + waitingForLoad = true; + pendingLoadMode = SubGuiAbilityLoadMode.MODE_CLONE; + PacketClient.sendClient(new CustomAbilityGetPacket(selectedUuid)); + } } else if (id == 2) { close(); } } + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiAbilityLoadMode) { + int mode = ((SubGuiAbilityLoadMode) subgui).getResult(); + if (mode < 0) return; // cancelled + + if (mode == SubGuiAbilityLoadMode.MODE_REFERENCE) { + // Reference mode - just pass the reference ID + if (parentAbilities != null && selectedUuid != null) { + parentAbilities.loadAbilityReference(selectedUuid); + } + close(); + } else { + // Clone mode - request full data + waitingForLoad = true; + pendingLoadMode = SubGuiAbilityLoadMode.MODE_CLONE; + PacketClient.sendClient(new CustomAbilityGetPacket(selectedUuid)); + } + } + } + @Override public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) { if (scroll.id == 0) { - selectedName = scroll.getSelected(); + selectedDisplayName = scroll.getSelected(); + if (selectedDisplayName != null) { + selectedUuid = displayToUuid.get(selectedDisplayName); + } initGui(); } } @@ -120,22 +151,40 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL @Override public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) { if (scroll.id == 0 && selection != null && !selection.isEmpty()) { - // Double-click to load - request from server - selectedName = selection; - waitingForLoad = true; - PacketClient.sendClient(new SavedAbilityGetPacket(selection)); + selectedDisplayName = selection; + selectedUuid = displayToUuid.get(selectedDisplayName); + if (selectedUuid != null) { + if (parentAbilities != null) { + setSubGui(new SubGuiAbilityLoadMode()); + } else { + waitingForLoad = true; + pendingLoadMode = SubGuiAbilityLoadMode.MODE_CLONE; + PacketClient.sendClient(new CustomAbilityGetPacket(selectedUuid)); + } + } } } @Override public void setData(Vector list, HashMap data, EnumScrollData type) { - if (type == EnumScrollData.ABILITIES) { - String name = scroll != null ? scroll.getSelected() : null; - this.abilityData = data; + if (type == EnumScrollData.CUSTOM_ABILITIES) { + displayToUuid.clear(); + rawData = data; + for (String key : data.keySet()) { + // key format: "displayName\tUUID" + int tabIndex = key.indexOf('\t'); + if (tabIndex > 0) { + String displayName = key.substring(0, tabIndex); + String uuid = key.substring(tabIndex + 1); + displayToUuid.put(displayName, uuid); + } else { + displayToUuid.put(key, key); + } + } if (scroll != null) { scroll.setList(getFilteredList()); - if (name != null && abilityData.containsKey(name)) { - scroll.setSelected(name); + if (selectedDisplayName != null && displayToUuid.containsKey(selectedDisplayName)) { + scroll.setSelected(selectedDisplayName); } } initGui(); @@ -144,11 +193,15 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL @Override public void setGuiData(NBTTagCompound compound) { - // Received ability data from server if (waitingForLoad) { waitingForLoad = false; Ability loaded = AbilityController.Instance.fromNBT(compound); if (loaded != null) { + if (pendingLoadMode == SubGuiAbilityLoadMode.MODE_CLONE) { + // Give it a new UUID so it's a unique inline copy + loaded.setId(UUID.randomUUID().toString()); + } + if (parentConfig != null) { parentConfig.loadAbility(loaded); } else if (parentAbilities != null) { @@ -161,7 +214,7 @@ public class SubGuiAbilityLoad extends SubGuiInterface implements ICustomScrollL @Override public void setSelected(String selected) { - this.selectedName = selected; + this.selectedDisplayName = selected; if (scroll != null) { scroll.setSelected(selected); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoadMode.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoadMode.java new file mode 100644 index 000000000..28a7bd0bb --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoadMode.java @@ -0,0 +1,56 @@ +package noppes.npcs.client.gui.advanced; + +import net.minecraft.client.gui.GuiButton; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.SubGuiInterface; + +/** + * Dialog asking the user whether to Clone (inline copy) or Reference the loaded ability. + */ +public class SubGuiAbilityLoadMode extends SubGuiInterface { + + public static final int MODE_CLONE = 0; + public static final int MODE_REFERENCE = 1; + + private int result = -1; + + public SubGuiAbilityLoadMode() { + setBackground("menubg.png"); + xSize = 200; + ySize = 90; + } + + @Override + public void initGui() { + super.initGui(); + + int y = guiTop + 10; + addLabel(new GuiNpcLabel(0, "ability.load.mode", guiLeft + 10, y)); + + y += 25; + addButton(new GuiNpcButton(0, guiLeft + 15, y, 80, 20, "ability.clone")); + addButton(new GuiNpcButton(1, guiLeft + 105, y, 80, 20, "ability.reference")); + + y += 25; + addButton(new GuiNpcButton(2, guiLeft + 55, y, 90, 20, "gui.cancel")); + } + + @Override + public void buttonEvent(GuiButton guibutton) { + if (guibutton.id == 0) { + result = MODE_CLONE; + close(); + } else if (guibutton.id == 1) { + result = MODE_REFERENCE; + close(); + } else if (guibutton.id == 2) { + result = -1; + close(); + } + } + + public int getResult() { + return result; + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java index 760f3eb9b..9407d20c5 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilitySaveConfirm.java @@ -2,7 +2,7 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitySavePacket; import net.minecraft.client.gui.GuiButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; @@ -53,7 +53,7 @@ public class SubGuiAbilitySaveConfirm extends SubGuiInterface { if (id == 0) { // Save the ability via packet - PacketClient.sendClient(new SavedAbilitySavePacket(ability.writeNBT())); + PacketClient.sendClient(new CustomAbilitySavePacket(ability.writeNBT())); if (callback != null) { callback.onAbilitySaved(ability); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java index f45858a99..d941f19ec 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiConditionEdit.java @@ -98,7 +98,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi if (typeId.equals("hit_count")) { // Hit count fields addLabel(new GuiNpcLabel(2, "condition.hits", labelX, y + 5)); - GuiNpcTextField hitsField = new GuiNpcTextField(2, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(requiredHits)); + GuiNpcTextField hitsField = new GuiNpcTextField(2, this, fontRendererObj, fieldX, y, 40, 20, "" + requiredHits); hitsField.setIntegersOnly(); hitsField.setMinMaxDefault(1, 100, 3); hitsField.setHoverText("condition.hover.hits"); @@ -106,7 +106,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi y += 24; addLabel(new GuiNpcLabel(3, "condition.within", labelX, y + 5)); - GuiNpcTextField ticksField = new GuiNpcTextField(3, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(withinTicks)); + GuiNpcTextField ticksField = new GuiNpcTextField(3, this, fontRendererObj, fieldX, y, 40, 20, "" + withinTicks); ticksField.setIntegersOnly(); ticksField.setMinMaxDefault(1, 1200, 60); ticksField.setHoverText("condition.hover.within"); @@ -115,7 +115,7 @@ public class SubGuiConditionEdit extends SubGuiInterface implements ITextfieldLi // HP threshold field (as percentage) addLabel(new GuiNpcLabel(2, "condition.percent", labelX, y + 5)); int percent = (int) (threshold * 100); - GuiNpcTextField thresholdField = new GuiNpcTextField(4, this, fontRendererObj, fieldX, y, 40, 20, String.valueOf(percent)); + GuiNpcTextField thresholdField = new GuiNpcTextField(4, this, fontRendererObj, fieldX, y, 40, 20, "" + percent); thresholdField.setIntegersOnly(); thresholdField.setMinMaxDefault(1, 99, 50); thresholdField.setHoverText("condition.hover.threshold"); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java index 5faf662b0..7f3d04d9e 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java @@ -122,7 +122,7 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPointEnum().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPointEnum().ordinal()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -182,12 +182,12 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { // Row 6: Density + Radius addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(disc.getLightningDensity())); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + disc.getLightningDensity()); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(disc.getLightningRadius())); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + disc.getLightningRadius()); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -236,7 +236,7 @@ public class SubGuiAbilityDisc extends SubGuiAbilityConfig { initGui(); break; case 210: - disc.setAnchorPointEnum(AnchorPoint.fromId(value)); + disc.setAnchorPointEnum(AnchorPoint.fromOrdinal(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java index b4eced168..56ddaf9f6 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEffects.java @@ -80,7 +80,7 @@ public class SubGuiAbilityEffects extends SubGuiInterface implements ITextfieldL // Duration text field GuiNpcTextField durField = new GuiNpcTextField(baseId + 1, this, fontRendererObj, - guiLeft + 112, y, 50, 20, String.valueOf(effect.getDurationTicks())); + guiLeft + 112, y, 50, 20, "" + effect.getDurationTicks()); durField.setIntegersOnly(); durField.setMinMaxDefault(1, 12000, 60); durField.setHoverText("effect.hover.duration"); @@ -89,7 +89,7 @@ public class SubGuiAbilityEffects extends SubGuiInterface implements ITextfieldL // Amplifier selector (0-10) String[] ampValues = new String[11]; for (int a = 0; a <= 10; a++) { - ampValues[a] = String.valueOf(a); + ampValues[a] = "" + a; } GuiNpcButton ampBtn = new GuiNpcButton(baseId + 2, guiLeft + 168, y, 40, 20, ampValues, effect.getAmplifier()); ampBtn.setHoverText("effect.hover.amplifier"); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java index 49ab42e5d..3f70e5aca 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java @@ -118,7 +118,7 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPointEnum().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPointEnum().ordinal()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -175,12 +175,12 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { // Row 5: Density + Radius addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(beam.getLightningDensity())); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + beam.getLightningDensity()); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(beam.getLightningRadius())); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + beam.getLightningRadius()); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -225,7 +225,7 @@ public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { initGui(); break; case 210: - beam.setAnchorPointEnum(AnchorPoint.fromId(value)); + beam.setAnchorPointEnum(AnchorPoint.fromOrdinal(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index e5184a3bb..b594a83c7 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -144,12 +144,12 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { // Row 4: Density + Radius addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(laser.getLightningDensity())); + GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, "" + laser.getLightningDensity()); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(laser.getLightningRadius())); + GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, "" + laser.getLightningRadius()); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java index 7cc0f9f2f..780661c6f 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java @@ -106,7 +106,7 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { // Row 1: Anchor Point addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPointEnum().getId()); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPointEnum().ordinal()); anchorBtn.setHoverText("ability.hover.anchorPoint"); addButton(anchorBtn); @@ -163,12 +163,12 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { // Row 61: Density + Radius addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(orb.getLightningDensity())); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + orb.getLightningDensity()); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); addTextField(densityField); addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(orb.getLightningRadius())); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + orb.getLightningRadius()); radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); addTextField(radiusField); } @@ -213,7 +213,7 @@ public class SubGuiAbilityOrb extends SubGuiAbilityConfig { initGui(); break; case 210: - orb.setAnchorPointEnum(AnchorPoint.fromId(value)); + orb.setAnchorPointEnum(AnchorPoint.fromOrdinal(value)); break; } } diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java index e07d2583c..52e78f7d6 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java @@ -338,21 +338,21 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, // Health label = StatCollector.translateToLocal("stats.health") + ": "; - value = String.valueOf(npc.stats.maxHealth); + value = "" + npc.stats.maxHealth; fontRendererObj.drawString(label, xLabel, y, 0x29d6b9, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; // Damage (using getAttackStrength) label = StatCollector.translateToLocal("stats.meleestrength") + ": "; - value = String.valueOf(npc.stats.getAttackStrength()); + value = "" + npc.stats.getAttackStrength(); fontRendererObj.drawString(label, xLabel, y, 0xff5714, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; // Attack Speed label = StatCollector.translateToLocal("stats.meleespeed") + ": "; - value = String.valueOf(npc.stats.attackSpeed); + value = "" + npc.stats.attackSpeed; fontRendererObj.drawString(label, xLabel, y, 0xf7ca28, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; @@ -381,7 +381,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, // Walk Speed label = StatCollector.translateToLocal("stats.speed") + ": "; - value = String.valueOf(npc.ais.getWalkingSpeed()); + value = "" + npc.ais.getWalkingSpeed(); fontRendererObj.drawString(label, xLabel, y, 0xffae0d, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; @@ -415,7 +415,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, // Version label = StatCollector.translateToLocal("display.version") + ": "; - value = String.valueOf(linkedItem.version); + value = "" + linkedItem.version; fontRendererObj.drawString(label, xLabel, y, labelColor, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; @@ -423,7 +423,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, // Max Stack Size labelColor = 0xff5714; label = StatCollector.translateToLocal("display.maxStack") + ": "; - value = String.valueOf(linkedItem.stackSize); + value = "" + linkedItem.stackSize; fontRendererObj.drawString(label, xLabel, y, labelColor, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; @@ -431,7 +431,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, // Dig Speed labelColor = 0xf7ca28; label = StatCollector.translateToLocal("display.digSpeed") + ": "; - value = String.valueOf(linkedItem.digSpeed); + value = "" + linkedItem.digSpeed; fontRendererObj.drawString(label, xLabel, y, labelColor, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; @@ -498,14 +498,14 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, labelColor = 0x7cff54; // isTool label = StatCollector.translateToLocal("display.isTool") + ": "; - value = String.valueOf(linkedItem.isTool).toUpperCase(); + value = ("" + linkedItem.isTool).toUpperCase(); fontRendererObj.drawString(label, xLabel, y, labelColor, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; // isNormalItem label = StatCollector.translateToLocal("display.isNormalItem") + ": "; - value = String.valueOf(linkedItem.isNormalItem).toUpperCase(); + value = ("" + linkedItem.isNormalItem).toUpperCase(); fontRendererObj.drawString(label, xLabel, y, labelColor, false); fontRendererObj.drawString(value, xValue, y, valueColor, false); y += 15; diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java index cb5220d54..8fa2e4e41 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java @@ -5,10 +5,10 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitiesGetPacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityGetPacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilityRemovePacket; -import kamkeel.npcs.network.packets.request.ability.SavedAbilitySavePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitiesGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket; +import kamkeel.npcs.network.packets.request.ability.CustomAbilitySavePacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.gui.GuiYesNoCallback; @@ -53,7 +53,10 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface // ==================== DATA ==================== private GuiCustomScroll scroll; private HashMap abilityData = new HashMap<>(); + /** Maps display name -> UUID for custom abilities */ + private final HashMap displayToUuid = new HashMap<>(); private String selected = null; + private String selectedUuid = null; private String search = ""; private Ability selectedAbility = null; @@ -73,7 +76,7 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface previewExecutor.setParentGui(this); // Request ability data from server - PacketClient.sendClient(new SavedAbilitiesGetPacket()); + PacketClient.sendClient(new CustomAbilitiesGetPacket()); // Enable animation data AnimationData data = npc.display.animationData; @@ -90,7 +93,7 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface // Remove button addButton(new GuiNpcButton(1, guiLeft + 368, guiTop + 30, 45, 20, "gui.remove")); - getButton(1).setEnabled(selected != null && !selected.isEmpty() && abilityData.containsKey(selected)); + getButton(1).setEnabled(selected != null && !selected.isEmpty() && displayToUuid.containsKey(selected)); // Scroll list of saved abilities (right side) if (scroll == null) { @@ -103,7 +106,7 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface // Update scroll list scroll.setList(getSearchList()); - if (selected != null && abilityData.containsKey(selected)) { + if (selected != null && displayToUuid.containsKey(selected)) { scroll.setSelected(selected); } @@ -144,10 +147,10 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface private List getSearchList() { if (search.isEmpty()) { - return new ArrayList<>(abilityData.keySet()); + return new ArrayList<>(displayToUuid.keySet()); } List list = new ArrayList<>(); - for (String name : abilityData.keySet()) { + for (String name : displayToUuid.keySet()) { if (name.toLowerCase().contains(search.toLowerCase())) { list.add(name); } @@ -208,8 +211,7 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface int id = guibutton.id; - if (id == 1 && selected != null && abilityData.containsKey(selected)) { - // Remove - show confirmation + if (id == 1 && selected != null && selectedUuid != null) { GuiYesNo guiyesno = new GuiYesNo(this, selected, StatCollector.translateToLocal("gui.delete"), 1); displayGuiScreen(guiyesno); } else if (id == 100 && selectedAbility != null) { @@ -254,12 +256,13 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface if (scroll.id == 0) { String newSelection = scroll.getSelected(); if (newSelection != null && !newSelection.equals(selected)) { - // Stop any playing preview previewExecutor.stop(); selected = newSelection; - // Request ability data from server - PacketClient.sendClient(new SavedAbilityGetPacket(selected)); + selectedUuid = displayToUuid.get(selected); + if (selectedUuid != null) { + PacketClient.sendClient(new CustomAbilityGetPacket(selectedUuid)); + } } } } @@ -277,13 +280,25 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface @Override public void setData(Vector list, HashMap data, EnumScrollData type) { - if (type == EnumScrollData.ABILITIES) { - String name = scroll != null ? scroll.getSelected() : null; + if (type == EnumScrollData.CUSTOM_ABILITIES) { + String prevSelected = scroll != null ? scroll.getSelected() : null; this.abilityData = data; + displayToUuid.clear(); + for (String key : data.keySet()) { + // key format: "displayName\tUUID" + int tabIndex = key.indexOf('\t'); + if (tabIndex > 0) { + String displayName = key.substring(0, tabIndex); + String uuid = key.substring(tabIndex + 1); + displayToUuid.put(displayName, uuid); + } else { + displayToUuid.put(key, key); + } + } if (scroll != null) { scroll.setList(getSearchList()); - if (name != null && abilityData.containsKey(name)) { - scroll.setSelected(name); + if (prevSelected != null && displayToUuid.containsKey(prevSelected)) { + scroll.setSelected(prevSelected); } } initGui(); @@ -322,11 +337,11 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface NoppesUtil.openGUI(player, this); if (!result) return; - if (id == 1 && selected != null && abilityData.containsKey(selected)) { - // Delete ability via packet - PacketClient.sendClient(new SavedAbilityRemovePacket(selected)); + if (id == 1 && selected != null && selectedUuid != null) { + PacketClient.sendClient(new CustomAbilityRemovePacket(selectedUuid)); scroll.clear(); selected = null; + selectedUuid = null; selectedAbility = null; initGui(); } @@ -334,8 +349,7 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface @Override public void onAbilitySaved(Ability ability) { - // Save the edited ability via packet - PacketClient.sendClient(new SavedAbilitySavePacket(ability.writeNBT())); + PacketClient.sendClient(new CustomAbilitySavePacket(ability.writeNBT())); } @Override diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNpcNaturalSpawns.java b/src/main/java/noppes/npcs/client/gui/global/GuiNpcNaturalSpawns.java index 41e105a38..ecdec2990 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcNaturalSpawns.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcNaturalSpawns.java @@ -90,7 +90,7 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I ArrayList list = new ArrayList<>(); Set keySet = this.spawn.spawnCompounds.keySet(); for (int i : keySet) { - list.add(String.valueOf(i)); + list.add("" + i); } this.spawnEntryScroll.setList(list); addScroll(this.spawnEntryScroll); @@ -99,7 +99,7 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I if (this.spawnEntryScroll.hasSelected()) { int selected = Integer.parseInt(this.spawnEntryScroll.getSelected()); addButton(new GuiNpcButton(22, guiLeft + 32, y, 20, 20, "-")); - GuiNpcTextField num = new GuiNpcTextField(25, this, guiLeft + 60, y += 10, 30, 20, String.valueOf(selected)); + GuiNpcTextField num = new GuiNpcTextField(25, this, guiLeft + 60, y += 10, 30, 20, "" + selected); num.integersOnly = true; addTextField(num); addButton(new GuiNpcButton(26, guiLeft + 92, y, 100, 20, this.getTitle(this.spawn.spawnCompounds.get(selected)))); @@ -215,8 +215,8 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I } if (textfield.id == 25 && this.spawnEntryScroll.hasSelected()) { int selected = Integer.parseInt(spawnEntryScroll.getSelected()); - if (spawnEntryScroll.getList().contains(String.valueOf(textfield.getInteger()))) { - textfield.setText(String.valueOf(selected)); + if (spawnEntryScroll.getList().contains("" + textfield.getInteger())) { + textfield.setText("" + selected); return; } NBTTagCompound compound = spawn.spawnCompounds.get(selected); diff --git a/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java b/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java index 33966d1e2..a50622529 100644 --- a/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java +++ b/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java @@ -192,7 +192,7 @@ public class AuctionTooltipHandler { tooltip.add(EnumChatFormatting.RED + StatCollector.translateToLocal("auction.claim.expiresSoon")); } else { tooltip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("auction.claim.expires") - .replace("%s", String.valueOf(daysLeft))); + .replace("%s", "" + daysLeft)); } tooltip.add(""); @@ -238,7 +238,7 @@ public class AuctionTooltipHandler { return amount + " " + AuctionClientConfig.getCurrencyName(); } StringBuilder sb = new StringBuilder(); - String str = String.valueOf(amount); + String str = "" + amount; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { if (count > 0 && count % 3 == 0) { diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAnvilRecipes.java b/src/main/java/noppes/npcs/client/gui/player/GuiAnvilRecipes.java index 683e21798..00551911a 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAnvilRecipes.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAnvilRecipes.java @@ -237,7 +237,7 @@ public class GuiAnvilRecipes extends GuiNPCInterface { fontRendererObj.drawString(percentText, percentTextX, percentTextY, CustomNpcResourceListener.DefaultTextColor); // Add text overlay for percentage with the full unrounded value. if (func_146978_c(percentTextX - guiLeft, percentTextY - guiTop, percentWidth, fontRendererObj.FONT_HEIGHT, mouseX, mouseY)) { - textOverlays.add(new TextOverlayData(percentTextX, percentTextY, percentWidth, fontRendererObj.FONT_HEIGHT, String.valueOf(recipe.getRepairPercentage()))); + textOverlays.add(new TextOverlayData(percentTextX, percentTextY, percentWidth, fontRendererObj.FONT_HEIGHT, "" + recipe.getRepairPercentage())); } if (!recipe.availability.isDefault()) { @@ -303,7 +303,7 @@ public class GuiAnvilRecipes extends GuiNPCInterface { int xpBoxWidth = scaledTextWidth; int xpBoxHeight = fontRendererObj.FONT_HEIGHT; if (func_146978_c(xpTextX - guiLeft, xpTextY - guiTop, xpBoxWidth, xpBoxHeight, mouseX, mouseY)) { - textOverlays.add(new TextOverlayData(xpTextX, xpTextY, xpBoxWidth, xpBoxHeight, String.valueOf(recipe.getXpCost()))); + textOverlays.add(new TextOverlayData(xpTextX, xpTextY, xpBoxWidth, xpBoxHeight, "" + recipe.getXpCost())); } } @@ -326,7 +326,7 @@ public class GuiAnvilRecipes extends GuiNPCInterface { private String formatXpCost(int xp) { if (xp < 1000) { - return String.valueOf(xp); + return "" + xp; } double xpK = xp / 1000.0; if (xpK == (int) xpK) { diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java index cc5e5d804..afe47fb44 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java @@ -255,7 +255,7 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis String bidCountLabel = StatCollector.translateToLocal("auction.info.bidCount"); fontRendererObj.drawString(EnumChatFormatting.GRAY + bidCountLabel, x, y, 0xFFFFFF); - label = String.valueOf(listing.bidCount); + label = "" + listing.bidCount; length = fontRendererObj.getStringWidth(label); fontRendererObj.drawString(EnumChatFormatting.WHITE + label, xRight - length, y, 0xFFFFFF); } diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java index 851c92263..7efdbe9c9 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java @@ -196,9 +196,9 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { /** Format currency with commas (e.g., 1000 -> "1,000") */ protected String formatCurrency(long amount) { - if (amount < 1000) return String.valueOf(amount); + if (amount < 1000) return "" + amount; StringBuilder sb = new StringBuilder(); - String str = String.valueOf(amount); + String str = "" + amount; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { if (count > 0 && count % 3 == 0) sb.insert(0, ','); diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java index 8b288c83f..a8784b3b0 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java @@ -67,7 +67,7 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis // Starting Price label and field addLabel(new GuiNpcLabel(1, "auction.sell.startingPrice", guiLeft + contentX, y + 5, 0xFFFFFF)); GuiNpcTextField startingField = new GuiNpcTextField(txtStartingPriceId, this, fontRendererObj, - guiLeft + contentX + 80, y, 80, 18, startingPrice > 0 ? String.valueOf(startingPrice) : ""); + guiLeft + contentX + 80, y, 80, 18, startingPrice > 0 ? "" + startingPrice : ""); startingField.setIntegersOnly(); addTextField(startingField); @@ -78,7 +78,7 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis addLabel(lblBuyout); txtBuyout = new GuiNpcTextField(txtBuyoutPriceId, this, fontRendererObj, - guiLeft + contentX + 80, y, 80, 18, buyoutPrice > 0 ? String.valueOf(buyoutPrice) : ""); + guiLeft + contentX + 80, y, 80, 18, buyoutPrice > 0 ? "" + buyoutPrice : ""); txtBuyout.setIntegersOnly(); addTextField(txtBuyout); diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiNPCTrader.java b/src/main/java/noppes/npcs/client/gui/player/GuiNPCTrader.java index f11bbb2e6..b0a1c6c32 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiNPCTrader.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiNPCTrader.java @@ -172,7 +172,7 @@ public class GuiNPCTrader extends GuiContainerNPCInterface implements IGuiData { // Draw stock count to the RIGHT of the trade (after output slot) if (stockEnabled && availableStock[slotIdx] < Integer.MAX_VALUE) { - String stockText = String.valueOf(availableStock[slotIdx]); + String stockText = "" + availableStock[slotIdx]; int stockColor = availableStock[slotIdx] > 0 ? 0x00AA00 : 0xAA0000; fontRendererObj.drawString(stockText, x + OUTPUT_OFFSET + 20, y + 5, stockColor); } @@ -317,10 +317,10 @@ public class GuiNPCTrader extends GuiContainerNPCInterface implements IGuiData { */ private String formatCurrency(long amount) { if (amount < 1000) { - return String.valueOf(amount); + return "" + amount; } StringBuilder sb = new StringBuilder(); - String str = String.valueOf(amount); + String str = "" + amount; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { if (count > 0 && count % 3 == 0) { diff --git a/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBid.java b/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBid.java index de7ab50e4..a1793c545 100644 --- a/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBid.java +++ b/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBid.java @@ -62,7 +62,7 @@ public class SubGuiAuctionBid extends SubGuiInterface implements ITextfieldListe // Bid amount field addLabel(new GuiNpcLabel(3, "auction.bid.yourBid", guiLeft + 15, y + 4)); GuiNpcTextField bidField = new GuiNpcTextField(txtBidId, this, fontRendererObj, - guiLeft + 80, y, 100, 18, String.valueOf(minimumBid)); + guiLeft + 80, y, 100, 18, "" + minimumBid); bidField.setIntegersOnly(); addTextField(bidField); y += 28; @@ -146,9 +146,9 @@ public class SubGuiAuctionBid extends SubGuiInterface implements ITextfieldListe } private String formatCurrency(long amount) { - if (amount < 1000) return String.valueOf(amount); + if (amount < 1000) return "" + amount; StringBuilder sb = new StringBuilder(); - String str = String.valueOf(amount); + String str = "" + amount; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { if (count > 0 && count % 3 == 0) sb.insert(0, ','); diff --git a/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBuyNow.java b/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBuyNow.java index f4061299b..b63471047 100644 --- a/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBuyNow.java +++ b/src/main/java/noppes/npcs/client/gui/player/SubGuiAuctionBuyNow.java @@ -107,9 +107,9 @@ public class SubGuiAuctionBuyNow extends SubGuiInterface { } private String formatCurrency(long amount) { - if (amount < 1000) return String.valueOf(amount); + if (amount < 1000) return "" + amount; StringBuilder sb = new StringBuilder(); - String str = String.valueOf(amount); + String str = "" + amount; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { if (count > 0 && count % 3 == 0) sb.insert(0, ','); diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiProfiles.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiProfiles.java index 7ffb7aff2..f9e627fe7 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiProfiles.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiProfiles.java @@ -180,7 +180,7 @@ public class GuiProfiles extends GuiCNPCInventory implements ISubGuiListener, IC if (slot.isTemporary()) { label = StatCollector.translateToLocal("profile.temporary"); - result = (String.valueOf(slot.isTemporary())).toUpperCase(); + result = ("" + slot.isTemporary()).toUpperCase(); labelColor = 0xfc60dd; resultColor = 0x35fc81; fontRendererObj.drawString(label, xLabel, y, labelColor, false); diff --git a/src/main/java/noppes/npcs/client/gui/roles/GuiNpcTraderSetup.java b/src/main/java/noppes/npcs/client/gui/roles/GuiNpcTraderSetup.java index 6c4745d42..7b54518e3 100644 --- a/src/main/java/noppes/npcs/client/gui/roles/GuiNpcTraderSetup.java +++ b/src/main/java/noppes/npcs/client/gui/roles/GuiNpcTraderSetup.java @@ -56,7 +56,7 @@ public class GuiNpcTraderSetup extends GuiContainerNPCInterface2 implements ITex int x = guiLeft + i % 3 * 130 + 15; // First position after "$" label int y = guiTop + i / 3 * 22 + 14; long cost = role.getCurrencyCost(i); - GuiNpcTextField field = new GuiNpcTextField(CURRENCY_FIELD_ID_START + i, this, x, y, 36, 16, cost > 0 ? String.valueOf(cost) : ""); + GuiNpcTextField field = new GuiNpcTextField(CURRENCY_FIELD_ID_START + i, this, x, y, 36, 16, cost > 0 ? "" + cost : ""); field.setMaxStringLength(8); field.setIntegersOnly(); addTextField(field); diff --git a/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStock.java b/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStock.java index 2e369b7e6..4e88c9b21 100644 --- a/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStock.java +++ b/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStock.java @@ -95,7 +95,7 @@ public class SubGuiNpcTraderStock extends SubGuiInterface implements ISubGuiList return "-1"; // Mixed values, return unlimited } } - return String.valueOf(first); + return "" + first; } @Override diff --git a/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStockSlots.java b/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStockSlots.java index b4a76ba48..c9d40c5df 100644 --- a/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStockSlots.java +++ b/src/main/java/noppes/npcs/client/gui/roles/SubGuiNpcTraderStockSlots.java @@ -47,7 +47,7 @@ public class SubGuiNpcTraderStockSlots extends SubGuiInterface implements ITextf // Max stock textfield int maxStock = role.stock.maxStock[i]; - String value = maxStock < 0 ? "-1" : String.valueOf(maxStock); + String value = maxStock < 0 ? "-1" : "" + maxStock; GuiNpcTextField field = new GuiNpcTextField(i, this, fontRendererObj, x + 42, y, 32, 18, value); field.setIntegersOnly(); field.setMinMaxDefault(-1, Integer.MAX_VALUE, -1); diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java index c9c44ff93..ea8dcc0b5 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java @@ -169,7 +169,7 @@ public class GuiAbilityInterface extends GuiNPCInterface2 { GL11.glPushMatrix(); // Move to NPC render position on screen - GL11.glTranslatef(npcScreenX, npcScreenY, 50F); + GL11.glTranslatef(npcScreenX, npcScreenY, 300F); // Apply zoom (scale) GL11.glScalef(-CAMERA_ZOOM, CAMERA_ZOOM, CAMERA_ZOOM); diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java index 77be0dd7c..be148c11d 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java @@ -477,7 +477,7 @@ public class GuiScriptTextArea extends GuiNpcTextField { // Dynamically calculate gutter width based on line count digits if (container != null && container.linesCount > 0) { int maxLineNum = container.linesCount; - String maxLineStr = String.valueOf(maxLineNum); + String maxLineStr = "" + maxLineNum; int digitWidth = ClientProxy.Font.width(maxLineStr); LINE_NUMBER_GUTTER_WIDTH = digitWidth + 10; // 10px total padding (5px left + 5px right) } @@ -645,7 +645,7 @@ public class GuiScriptTextArea extends GuiNpcTextField { // Render LINE GUTTER numbers for (int i = renderStart; i <= renderEnd; i++) { int posY = y + (i - scroll.getScrolledLine()) * container.lineHeight + stringYOffset; - String lineNum = String.valueOf(i + 1); + String lineNum = "" + (i + 1); int lineNumWidth = ClientProxy.Font.width(lineNum); int lineNumX = x + LINE_NUMBER_GUTTER_WIDTH - lineNumWidth - 5; // right-align with 5px padding int lineNumY = posY + 1; diff --git a/src/main/java/noppes/npcs/client/gui/util/key/OverlayKeyPresetViewer.java b/src/main/java/noppes/npcs/client/gui/util/key/OverlayKeyPresetViewer.java index 7ebc098be..5d9cfdaa0 100644 --- a/src/main/java/noppes/npcs/client/gui/util/key/OverlayKeyPresetViewer.java +++ b/src/main/java/noppes/npcs/client/gui/util/key/OverlayKeyPresetViewer.java @@ -361,7 +361,7 @@ public class OverlayKeyPresetViewer { GL11.glPushMatrix(); GL11.glScalef(scale, scale, 1); GL11.glTranslatef(letterX / scale, nameY / scale, 1); - font.drawStringWithShadow(String.valueOf(letter), 0, 0, isDefault ? 0xff8a8a8a : 0xffffffff); + font.drawStringWithShadow("" + letter, 0, 0, isDefault ? 0xff8a8a8a : 0xffffffff); GL11.glPopMatrix(); //////////////////////////////////////////// diff --git a/src/main/java/noppes/npcs/client/gui/util/script/GoToLineDialog.java b/src/main/java/noppes/npcs/client/gui/util/script/GoToLineDialog.java index f054f32a7..e3e023dee 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/GoToLineDialog.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/GoToLineDialog.java @@ -470,7 +470,7 @@ public class GoToLineDialog { // Type character - only allow digits and colon if (ChatAllowedCharacters.isAllowedCharacter(c)) { if (Character.isDigit(c) || c == ':') { - insertText(String.valueOf(c)); + insertText("" + c); markActivity(); return true; } diff --git a/src/main/java/noppes/npcs/client/gui/util/script/RenameRefactorHandler.java b/src/main/java/noppes/npcs/client/gui/util/script/RenameRefactorHandler.java index 3d5c9909d..81c346f8f 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/RenameRefactorHandler.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/RenameRefactorHandler.java @@ -366,7 +366,7 @@ public class RenameRefactorHandler { if (isValidIdentifierChar(c, isFirstChar)) { if (hasSelection) { // Replace entire selection with this character - currentWord = String.valueOf(c); + currentWord = "" + c; applyLiveRename(); callback.setCursorPosition(primaryOccurrenceStart + 1); sel.setSelection(0, 0); // Clear selection diff --git a/src/main/java/noppes/npcs/constants/EnumScrollData.java b/src/main/java/noppes/npcs/constants/EnumScrollData.java index baf994b4e..06d5a6ec3 100644 --- a/src/main/java/noppes/npcs/constants/EnumScrollData.java +++ b/src/main/java/noppes/npcs/constants/EnumScrollData.java @@ -7,7 +7,7 @@ public enum EnumScrollData { DIALOG_GROUP, QUEST_GROUP, ABILITY_TYPES, - ABILITIES, + CUSTOM_ABILITIES, ANIMATIONS, BUILTIN_ANIMATIONS } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java new file mode 100644 index 000000000..45f9dfe44 --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java @@ -0,0 +1,503 @@ +package noppes.npcs.controllers.data; + +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.controllers.data.ability.AbilityPhase; +import kamkeel.npcs.controllers.data.ability.UserType; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.network.packets.data.telegraph.TelegraphRemovePacket; +import kamkeel.npcs.network.packets.data.telegraph.TelegraphSpawnPacket; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.DamageSource; +import noppes.npcs.api.ability.IPlayerAbilityData; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; + +import kamkeel.npcs.network.packets.data.ability.PlayerAbilitySyncPacket; + +import java.util.ArrayList; +import java.util.List; + +/** + * Manages player ability data - unlocked abilities, selection, cooldowns, and execution. + * Players reference abilities by key (built-in keys or preset names), never customized copies. + *

+ * Key differences from NPC DataAbilities: + * - Universal cooldown (shared across all abilities) + * - Player manually selects ability (no weighted random) + * - Conditions requiring a target are skipped + * - Uses ability's base cooldownTicks only + */ +public class PlayerAbilityData implements IPlayerAbilityData { + + private final PlayerData playerData; + + // ═══════════════════════════════════════════════════════════════════ + // CONFIGURATION (saved to NBT) + // ═══════════════════════════════════════════════════════════════════ + + /** + * List of unlocked ability keys (preset names or built-in keys). + * Order matters - determines selection index. + */ + private List unlockedAbilities = new ArrayList<>(); + + /** + * Currently selected ability index in the unlocked list. + */ + private int selectedIndex = 0; + + // ═══════════════════════════════════════════════════════════════════ + // RUNTIME STATE (not saved) + // ═══════════════════════════════════════════════════════════════════ + + /** + * Universal cooldown end time (shared across all abilities). + */ + private transient long cooldownEndTime = 0; + + /** + * Currently executing ability instance (null if none). + */ + private transient Ability currentAbility; + + /** + * Current ability's key (for cooldown tracking after completion). + */ + private transient String currentAbilityKey; + + /** + * Target for the current ability (can be null for self-targeting). + */ + private transient EntityLivingBase currentTarget; + + // ═══════════════════════════════════════════════════════════════════ + // CONSTRUCTOR + // ═══════════════════════════════════════════════════════════════════ + + public PlayerAbilityData(PlayerData playerData) { + this.playerData = playerData; + } + + // ═══════════════════════════════════════════════════════════════════ + // TICK - Called from player tick handler + // ═══════════════════════════════════════════════════════════════════ + + /** + * Main tick method - handles ability execution. + * Should be called every server tick. + */ + public void tick(EntityPlayer player) { + if (player.worldObj.isRemote || player.isDead) { + return; + } + + if (currentAbility != null && currentAbility.isExecuting()) { + tickCurrentAbility(player); + } + } + + /** + * Tick the currently executing ability. + */ + private void tickCurrentAbility(EntityPlayer player) { + AbilityPhase oldPhase = currentAbility.getPhase(); + + // Tick advances time and possibly changes phase + boolean phaseChanged = currentAbility.tick(); + + switch (currentAbility.getPhase()) { + case WINDUP: + currentAbility.onWindUpTick(player, currentTarget, player.worldObj, currentAbility.getCurrentTick()); + break; + + case ACTIVE: + if (phaseChanged && oldPhase == AbilityPhase.WINDUP) { + // Just entered ACTIVE phase + TelegraphInstance telegraph = currentAbility.getTelegraphInstance(); + if (telegraph != null) { + telegraph.lockPosition(); + } + removeTelegraph(currentAbility, player); + + // Play active sound and animation + playAbilitySound(player, currentAbility.getActiveSound()); + playAbilityAnimation(currentAbility.getActiveAnimation()); + + // Call onExecute + currentAbility.onExecute(player, currentTarget, player.worldObj); + + if (currentAbility.getPhase() == AbilityPhase.IDLE) { + handleAbilityCompletion(player); + return; + } + } + currentAbility.onActiveTick(player, currentTarget, player.worldObj, currentAbility.getCurrentTick()); + + if (currentAbility.getPhase() == AbilityPhase.IDLE) { + handleAbilityCompletion(player); + return; + } + break; + + case DAZED: + // Player is dazed - just wait + break; + + case IDLE: + handleAbilityCompletion(player); + break; + } + } + + /** + * Handle ability completion. + */ + private void handleAbilityCompletion(EntityPlayer player) { + if (currentAbility == null) return; + + currentAbility.onComplete(player, currentTarget); + + // Apply universal cooldown (using base cooldownTicks only, not min/max random) + if (!currentAbility.isIgnoreCooldown()) { + cooldownEndTime = player.worldObj.getTotalWorldTime() + currentAbility.getCooldownTicks(); + } + + // Stop animation + stopAbilityAnimation(); + + currentAbility = null; + currentAbilityKey = null; + currentTarget = null; + } + + // ═══════════════════════════════════════════════════════════════════ + // ABILITY ACTIVATION - Called on Special Key press + // ═══════════════════════════════════════════════════════════════════ + + /** + * Activate the currently selected ability. + * Called when the player presses the Special Key. + * + * @param player The player + * @return true if the ability was started + */ + public boolean activateAbility(EntityPlayer player) { + if (player.worldObj.isRemote) return false; + if (unlockedAbilities.isEmpty()) return false; + if (selectedIndex < 0 || selectedIndex >= unlockedAbilities.size()) return false; + + String key = unlockedAbilities.get(selectedIndex); + return activateAbility(player, key); + } + + /** + * Activate a specific ability by key. + * + * @param player The player + * @param key The ability key (built-in or preset name) + * @return true if the ability was started + */ + public boolean activateAbility(EntityPlayer player, String key) { + if (player.worldObj.isRemote || key == null || key.isEmpty()) return false; + + // Can't activate if already executing + if (currentAbility != null && currentAbility.isExecuting()) return false; + + // Resolve ability from controller + if (AbilityController.Instance == null) return false; + Ability ability = AbilityController.Instance.resolveAbility(key); + if (ability == null) return false; + + // Check user type allows player + if (!ability.getAllowedBy().allowsPlayer()) return false; + + // Check universal cooldown + if (!ability.isIgnoreCooldown() && isOnCooldown(player)) return false; + + // Check conditions (skip target-requiring ones) + if (!ability.checkConditionsForPlayer(player)) return false; + + // Start the ability + currentAbility = ability; + currentAbilityKey = key; + currentTarget = null; // Players don't have auto-targets + ability.start(null); + + // Spawn telegraph + spawnTelegraph(ability, player, null); + + // Play wind up sound and animation + playAbilitySound(player, ability.getWindUpSound()); + playAbilityAnimation(ability.getWindUpAnimation()); + + return true; + } + + // ═══════════════════════════════════════════════════════════════════ + // CLIENT SYNC + // ═══════════════════════════════════════════════════════════════════ + + /** + * Sync ability data to the client. + * Called when abilities change (unlock/lock/select) and on login. + */ + public void syncToClient() { + EntityPlayer player = playerData.player; + if (player instanceof EntityPlayerMP) { + PlayerAbilitySyncPacket.sendToPlayer((EntityPlayerMP) player); + } + } + + // ═══════════════════════════════════════════════════════════════════ + // SELECTION + // ═══════════════════════════════════════════════════════════════════ + + public int getSelectedIndex() { + return selectedIndex; + } + + public void setSelectedIndex(int index) { + if (index >= 0 && index < unlockedAbilities.size()) { + this.selectedIndex = index; + syncToClient(); + } + } + + public void selectNext() { + if (unlockedAbilities.isEmpty()) return; + selectedIndex = (selectedIndex + 1) % unlockedAbilities.size(); + syncToClient(); + } + + public void selectPrevious() { + if (unlockedAbilities.isEmpty()) return; + selectedIndex = (selectedIndex - 1 + unlockedAbilities.size()) % unlockedAbilities.size(); + syncToClient(); + } + + public String getSelectedAbilityKey() { + if (unlockedAbilities.isEmpty() || selectedIndex < 0 || selectedIndex >= unlockedAbilities.size()) { + return null; + } + return unlockedAbilities.get(selectedIndex); + } + + // ═══════════════════════════════════════════════════════════════════ + // UNLOCKED ABILITIES + // ═══════════════════════════════════════════════════════════════════ + + public List getUnlockedAbilityList() { + return unlockedAbilities; + } + + @Override + public String[] getUnlockedAbilities() { + return unlockedAbilities.toArray(new String[0]); + } + + public void setUnlockedAbilities(List abilities) { + this.unlockedAbilities = abilities != null ? new ArrayList<>(abilities) : new ArrayList<>(); + // Clamp selected index + if (selectedIndex >= unlockedAbilities.size()) { + selectedIndex = Math.max(0, unlockedAbilities.size() - 1); + } + syncToClient(); + } + + public void unlockAbility(String key) { + if (key != null && !key.isEmpty() && !unlockedAbilities.contains(key)) { + unlockedAbilities.add(key); + syncToClient(); + } + } + + public void lockAbility(String key) { + unlockedAbilities.remove(key); + if (selectedIndex >= unlockedAbilities.size()) { + selectedIndex = Math.max(0, unlockedAbilities.size() - 1); + } + syncToClient(); + } + + public boolean hasUnlockedAbility(String key) { + return unlockedAbilities.contains(key); + } + + // ═══════════════════════════════════════════════════════════════════ + // COOLDOWNS + // ═══════════════════════════════════════════════════════════════════ + + public boolean isOnCooldown(EntityPlayer player) { + return player.worldObj.getTotalWorldTime() < cooldownEndTime; + } + + /** + * Check if a specific ability key is on cooldown. + * Currently uses universal cooldown (same for all abilities). + */ + public boolean isOnCooldown(String key, EntityPlayer player) { + return isOnCooldown(player); + } + + public long getRemainingCooldown(EntityPlayer player) { + long remaining = cooldownEndTime - player.worldObj.getTotalWorldTime(); + return remaining > 0 ? remaining : 0; + } + + /** + * Reset cooldown for a specific ability key. + * Currently resets the universal cooldown. + */ + public void resetCooldown(String key) { + cooldownEndTime = 0; + } + + /** + * Reset all cooldowns. + */ + public void resetAllCooldowns() { + cooldownEndTime = 0; + } + + @Override + public boolean activateAbility() { + return activateAbility(playerData.player); + } + + @Override + public boolean activateAbility(String key) { + return activateAbility(playerData.player, key); + } + + // ═══════════════════════════════════════════════════════════════════ + // STATE QUERIES + // ═══════════════════════════════════════════════════════════════════ + + public boolean isExecutingAbility() { + return currentAbility != null && currentAbility.isExecuting(); + } + + public Ability getCurrentAbility() { + return currentAbility; + } + + public void interruptCurrentAbility() { + if (currentAbility != null && currentAbility.isExecuting()) { + currentAbility.interrupt(); + stopAbilityAnimation(); + currentAbility = null; + currentAbilityKey = null; + currentTarget = null; + } + } + + @Override + public boolean isOnCooldown() { + EntityPlayer player = playerData.player; + if (player == null) return false; + return isOnCooldown(player); + } + + @Override + public boolean isOnCooldown(String key) { + EntityPlayer player = playerData.player; + if (player == null) return false; + return isOnCooldown(key, player); + } + + @Override + public void resetCooldown() { + cooldownEndTime = 0; + } + + /** + * Check if the player's movement should be locked due to an executing ability. + * Used by the tick handler to restrict player movement during ability phases. + */ + public boolean isMovementLocked() { + return currentAbility != null && currentAbility.isExecuting() + && currentAbility.isMovementLockedForCurrentPhase(); + } + + // ═══════════════════════════════════════════════════════════════════ + // TELEGRAPH + // ═══════════════════════════════════════════════════════════════════ + + private void spawnTelegraph(Ability ability, EntityPlayer player, EntityLivingBase target) { + TelegraphInstance telegraph = ability.createTelegraph(player, target); + if (telegraph != null) { + ability.setTelegraphInstance(telegraph); + if (player instanceof EntityPlayerMP) { + TelegraphSpawnPacket.sendToTracking(telegraph, player); + } + } + } + + private void removeTelegraph(Ability ability, EntityPlayer player) { + TelegraphInstance telegraph = ability.getTelegraphInstance(); + if (telegraph != null) { + if (player instanceof EntityPlayerMP) { + TelegraphRemovePacket.sendToTracking(telegraph.getInstanceId(), player); + } + ability.setTelegraphInstance(null); + } + } + + // ═══════════════════════════════════════════════════════════════════ + // ANIMATION + // ═══════════════════════════════════════════════════════════════════ + + private void playAbilityAnimation(Animation animation) { + if (animation == null || AnimationController.Instance == null) return; + playerData.animationData.setEnabled(true); + playerData.animationData.setAnimation(animation); + playerData.animationData.updateClient(); + } + + private void stopAbilityAnimation() { + playerData.animationData.setAnimation(null); + playerData.animationData.updateClient(); + } + + private void playAbilitySound(EntityPlayer player, String sound) { + if (sound != null && !sound.isEmpty()) { + player.worldObj.playSoundAtEntity(player, sound, 1.0f, 1.0f); + } + } + + // ═══════════════════════════════════════════════════════════════════ + // NBT SERIALIZATION + // ═══════════════════════════════════════════════════════════════════ + + public void writeToNBT(NBTTagCompound compound) { + NBTTagList list = new NBTTagList(); + for (String key : unlockedAbilities) { + list.appendTag(new NBTTagString(key)); + } + compound.setTag("PlayerAbilities", list); + compound.setInteger("PlayerAbilitySelected", selectedIndex); + } + + public void readFromNBT(NBTTagCompound compound) { + unlockedAbilities.clear(); + if (compound.hasKey("PlayerAbilities")) { + NBTTagList list = compound.getTagList("PlayerAbilities", 8); // 8 = string tag + for (int i = 0; i < list.tagCount(); i++) { + String key = list.getStringTagAt(i); + if (key != null && !key.isEmpty()) { + unlockedAbilities.add(key); + } + } + } + selectedIndex = compound.getInteger("PlayerAbilitySelected"); + if (selectedIndex >= unlockedAbilities.size()) { + selectedIndex = Math.max(0, unlockedAbilities.size() - 1); + } + } +} diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index 04e06a41e..fa4e7d961 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -15,6 +15,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; +import noppes.npcs.api.ability.IPlayerAbilityData; import noppes.npcs.api.entity.ICustomNpc; import noppes.npcs.api.handler.IPlayerBankData; import noppes.npcs.api.handler.IPlayerTradeData; @@ -65,6 +66,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { // Trade data (currency + auction claims) - shared across all profile slots public PlayerTradeData tradeData = new PlayerTradeData(this); + public PlayerAbilityData abilityData = new PlayerAbilityData(this); public ActionManager actionManager = new ActionManager(); public PlayerDataScript scriptData; @@ -108,6 +110,9 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { if (!controller.playerEffects.containsKey(playerID)) { controller.playerEffects.put(playerID, effectData.getEffects()); } + + // Sync player ability data to client + abilityData.syncToClient(); } public void onLogout() { @@ -137,6 +142,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { effectData.readFromNBT(data); magicData.readToNBT(data); tradeData.readFromNBT(data); + abilityData.readFromNBT(data); if (player != null) { playername = player.getCommandSenderName(); @@ -180,6 +186,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { effectData.writeToNBT(compound); magicData.writeToNBT(compound); tradeData.writeToNBT(compound); + abilityData.writeToNBT(compound); compound.setString("PlayerName", playername); compound.setString("UUID", uuid); @@ -411,6 +418,10 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { return tradeData; } + public IPlayerAbilityData getAbilityData() { + return abilityData; + } + public synchronized void save() { // Don't Save this is a Modification of a Profile's PlayerData Profile profile = ProfileController.Instance.getProfile(UUID.fromString(uuid)); diff --git a/src/main/java/noppes/npcs/scripted/event/player/PlayerAbilityEvent.java b/src/main/java/noppes/npcs/scripted/event/player/PlayerAbilityEvent.java new file mode 100644 index 000000000..cb7def405 --- /dev/null +++ b/src/main/java/noppes/npcs/scripted/event/player/PlayerAbilityEvent.java @@ -0,0 +1,101 @@ +package noppes.npcs.scripted.event.player; + +import cpw.mods.fml.common.eventhandler.Cancelable; +import kamkeel.npcs.controllers.data.ability.Ability; +import net.minecraft.entity.EntityLivingBase; +import noppes.npcs.api.ability.IAbility; +import noppes.npcs.api.entity.IEntityLivingBase; +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.api.event.IPlayerAbilityEvent; +import noppes.npcs.constants.EnumScriptType; +import noppes.npcs.scripted.NpcAPI; + +/** + * Events fired during player ability execution lifecycle. + */ +public class PlayerAbilityEvent extends PlayerEvent implements IPlayerAbilityEvent { + protected final Ability ability; + protected final IEntityLivingBase target; + + public PlayerAbilityEvent(IPlayer player, Ability ability, EntityLivingBase target) { + super(player); + this.ability = ability; + this.target = target != null ? (IEntityLivingBase) NpcAPI.Instance().getIEntity(target) : null; + } + + @Override + public IAbility getAbility() { + return ability; + } + + @Override + public IEntityLivingBase getTarget() { + return target; + } + + @Override + public String getHookName() { + return "playerAbilityEvent"; + } + + /** + * Fired when a player's ability hits an entity with damage. + * Canceling prevents the damage from being applied. + */ + @Cancelable + public static class HitEvent extends PlayerAbilityEvent implements IPlayerAbilityEvent.HitEvent { + private final IEntityLivingBase hitEntity; + private float damage; + private float knockback; + private float knockbackUp; + + public HitEvent(IPlayer player, Ability ability, EntityLivingBase target, + EntityLivingBase hitEntity, float damage, float knockback, float knockbackUp) { + super(player, ability, target); + this.hitEntity = hitEntity != null ? (IEntityLivingBase) NpcAPI.Instance().getIEntity(hitEntity) : null; + this.damage = damage; + this.knockback = knockback; + this.knockbackUp = knockbackUp; + } + + @Override + public IEntityLivingBase getHitEntity() { + return hitEntity; + } + + @Override + public float getDamage() { + return damage; + } + + @Override + public void setDamage(float damage) { + this.damage = damage; + } + + @Override + public float getKnockback() { + return knockback; + } + + @Override + public void setKnockback(float knockback) { + this.knockback = knockback; + } + + @Override + public float getKnockbackUp() { + return knockbackUp; + } + + @Override + public void setKnockbackUp(float knockbackUp) { + this.knockbackUp = knockbackUp; + } + + @Override + public String getHookName() { + return EnumScriptType.ABILITY_HIT.function; + } + } +} diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java index d097a892c..6cbbb4dae 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java @@ -43,6 +43,11 @@ public class ScriptDataAbilities implements IDataAbilities { } } + @Override + public void addAbilityReference(String key) { + data.addAbilityReference(key); + } + @Override public void removeAbility(String abilityId) { data.removeAbility(abilityId); @@ -58,6 +63,33 @@ public class ScriptDataAbilities implements IDataAbilities { return data.getAbility(abilityId) != null; } + @Override + public boolean isAbilityReference(String abilityId) { + List slots = data.getAbilitySlots(); + for (int i = 0; i < slots.size(); i++) { + kamkeel.npcs.controllers.data.ability.AbilitySlot slot = slots.get(i); + if (slot.isReference()) { + if (slot.getReferenceId().equals(abilityId)) return true; + } else { + Ability a = slot.getAbility(); + if (a != null && a.getId().equals(abilityId)) return false; + } + } + return false; + } + + @Override + public boolean convertToInline(String abilityId) { + List slots = data.getAbilitySlots(); + for (int i = 0; i < slots.size(); i++) { + kamkeel.npcs.controllers.data.ability.AbilitySlot slot = slots.get(i); + if (slot.isReference() && slot.getReferenceId().equals(abilityId)) { + return data.convertToInline(i); + } + } + return false; + } + @Override public void clearAbilities() { data.clearAbilities(); @@ -117,17 +149,14 @@ public class ScriptDataAbilities implements IDataAbilities { } @Override - public boolean executePresetAbility(String presetName) { - return executePresetAbility(presetName, null); + public boolean executeAbility(String key) { + return executeAbility(key, null); } @Override - public boolean executePresetAbility(String presetName, Object target) { - // Resolve target + public boolean executeAbility(String key, Object target) { EntityLivingBase targetEntity = resolveTarget(target); - - // Use the direct preset execution method - return data.executePresetAbility(presetName, targetEntity); + return data.executeAbility(key, targetEntity); } @Override diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java new file mode 100644 index 000000000..2570653fc --- /dev/null +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java @@ -0,0 +1,112 @@ +package noppes.npcs.scripted.wrapper; + +import net.minecraft.entity.player.EntityPlayer; +import noppes.npcs.api.ability.IAbility; +import noppes.npcs.api.ability.IPlayerAbilityData; +import noppes.npcs.controllers.data.PlayerAbilityData; +import noppes.npcs.controllers.data.PlayerData; + +/** + * Script wrapper for PlayerAbilityData providing API access to player abilities. + */ +public class ScriptPlayerAbilityData implements IPlayerAbilityData { + + private final PlayerAbilityData data; + private final PlayerData playerData; + + public ScriptPlayerAbilityData(PlayerData playerData) { + this.playerData = playerData; + this.data = playerData.abilityData; + } + + @Override + public String[] getUnlockedAbilities() { + return data.getUnlockedAbilities().toArray(new String[0]); + } + + @Override + public void unlockAbility(String key) { + data.unlockAbility(key); + } + + @Override + public void lockAbility(String key) { + data.lockAbility(key); + } + + @Override + public boolean hasUnlockedAbility(String key) { + return data.hasUnlockedAbility(key); + } + + @Override + public int getSelectedIndex() { + return data.getSelectedIndex(); + } + + @Override + public void setSelectedIndex(int index) { + data.setSelectedIndex(index); + } + + @Override + public String getSelectedAbilityKey() { + return data.getSelectedAbilityKey(); + } + + @Override + public void selectNext() { + data.selectNext(); + } + + @Override + public void selectPrevious() { + data.selectPrevious(); + } + + @Override + public boolean isExecutingAbility() { + return data.isExecutingAbility(); + } + + @Override + public IAbility getCurrentAbility() { + return data.getCurrentAbility(); + } + + @Override + public void interruptCurrentAbility() { + data.interruptCurrentAbility(); + } + + @Override + public boolean isOnCooldown(String key) { + EntityPlayer player = playerData.player; + if (player == null) return false; + return data.isOnCooldown(key, player); + } + + @Override + public void resetCooldown(String key) { + data.resetCooldown(key); + } + + @Override + public void resetAllCooldowns() { + data.resetAllCooldowns(); + } + + @Override + public boolean activateAbility() { + EntityPlayer player = playerData.player; + if (player == null) return false; + return data.activateAbility(player); + } + + @Override + public boolean activateAbility(String key) { + EntityPlayer player = playerData.player; + if (player == null) return false; + return data.activateAbility(player, key); + } +} From 2cac2e4add829beab330955ff8993aa08d3115eb Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 12:37:57 -0300 Subject: [PATCH 35/85] Changed Special Key from C to B --- src/main/java/noppes/npcs/client/ClientProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 01c226812..705e261c5 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -320,7 +320,7 @@ public class ClientProxy extends CommonProxy { Minecraft mc = Minecraft.getMinecraft(); NPCButton = new KeyBinding("NPC Inventory", Keyboard.KEY_N, "key.categories.customnpc"); - SpecialKey = new KeyBinding("key.customnpcs.special", Keyboard.KEY_C, "key.categories.customnpc"); + SpecialKey = new KeyBinding("key.customnpcs.special", Keyboard.KEY_B, "key.categories.customnpc"); ClientRegistry.registerKeyBinding(NPCButton); ClientRegistry.registerKeyBinding(SpecialKey); From 01e06c22ac31b48d4144b211ebc056b721582538 Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 13:30:27 -0300 Subject: [PATCH 36/85] Added alpha to the head and tail of the beam --- .../npcs/client/renderer/RenderAbilityBeam.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java index 2fcb58d54..4912e4b72 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -63,6 +63,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { float headSize = beam.getHeadSize(); int innerColor = beam.getInnerColor(); int outerColor = beam.getOuterColor(); + float outerAlpha = beam.getOuterColorAlpha(); // Render everything relative to origin position GL11.glPushMatrix(); @@ -74,7 +75,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { // Render tail orb at origin (0,0,0) - only in anchored mode // Don't render if head is too close to origin (would cause overlap/extra orb appearance) if (beam.shouldRenderTailOrb() && headDistFromOrigin > headSize * 0.5) { - renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth()); + renderTailOrb(headSize * 0.8f, innerColor, outerColor, beam.isOuterColorEnabled(), beam.getOuterColorWidth(), outerAlpha); } // Render trail segments with smooth connections (with fading for non-anchored) @@ -85,7 +86,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { } // Render head at interpolated offset position - renderHead(beam, headOffsetX, headOffsetY, headOffsetZ, headSize, innerColor, outerColor, partialTicks); + renderHead(beam, headOffsetX, headOffsetY, headOffsetZ, headSize, innerColor, outerColor, outerAlpha, partialTicks); GL11.glPopMatrix(); @@ -128,10 +129,11 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { // Render outer glow only if enabled if (beam.isOuterColorEnabled()) { float outerScale = innerScale + beam.getOuterColorWidth(); + float outerAlpha = beam.getOuterColorAlpha(); GL11.glDepthMask(false); GL11.glPushMatrix(); GL11.glScalef(outerScale, outerScale, outerScale); - renderCube(outerColor, 0.5f, 0.5f); + renderCube(outerColor, outerAlpha, 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } @@ -148,7 +150,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { * Render the tail orb at the origin (where the beam emanates from). * This orb does not rotate - it's a stable anchor point. */ - private void renderTailOrb(float size, int innerColor, int outerColor, boolean outerColorEnabled, float outerColorWidth) { + private void renderTailOrb(float size, int innerColor, int outerColor, boolean outerColorEnabled, float outerColorWidth, float outerAlpha) { GL11.glPushMatrix(); // Already at origin (0,0,0) @@ -162,7 +164,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glDepthMask(false); GL11.glPushMatrix(); GL11.glScalef(size * outerScale, size * outerScale, size * outerScale); - renderCube(outerColor, 0.4f, 0.5f); + renderCube(outerColor, outerAlpha, 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } @@ -532,7 +534,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { * Coordinates are relative to origin. */ private void renderHead(EntityAbilityBeam beam, double x, double y, double z, - float size, int innerColor, int outerColor, float partialTicks) { + float size, int innerColor, int outerColor, float outerAlpha, float partialTicks) { GL11.glPushMatrix(); GL11.glTranslated(x, y, z); @@ -564,7 +566,7 @@ public class RenderAbilityBeam extends RenderAbilityProjectile { GL11.glDepthMask(false); GL11.glPushMatrix(); GL11.glScalef(outerScale, outerScale, outerScale); - renderCube(outerColor, 0.5f, 0.5f); + renderCube(outerColor, outerAlpha, 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } From d9bf5132e7f72a607df540a3850fd9f849a37474 Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 13:46:53 -0300 Subject: [PATCH 37/85] Updated old anchor point method calls --- .../npcs/controllers/data/ability/type/AbilityDisc.java | 4 ++-- .../npcs/controllers/data/ability/type/AbilityEnergyBeam.java | 4 ++-- .../npcs/controllers/data/ability/type/AbilityOrb.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 74ce14e34..36bc898b2 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -260,10 +260,10 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } @Override - public int getAnchorPoint() { return anchorData.anchorPoint.getId(); } + public int getAnchorPoint() { return anchorData.anchorPoint.ordinal(); } @Override - public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromId(point); } + public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromOrdinal(point); } @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 59e84f8f0..700f771c7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -263,10 +263,10 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } @Override - public int getAnchorPoint() { return anchorData.anchorPoint.getId(); } + public int getAnchorPoint() { return anchorData.anchorPoint.ordinal(); } @Override - public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromId(point); } + public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromOrdinal(point); } @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index b489f4b9d..63c7c9005 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -396,12 +396,12 @@ public class AbilityOrb extends Ability implements IAbilityOrb { public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } public int getAnchorPoint() { - return anchorData.anchorPoint.getId(); + return anchorData.anchorPoint.ordinal(); } @Override public void setAnchorPoint(int point) { - this.anchorData.anchorPoint = AnchorPoint.fromId(point); + this.anchorData.anchorPoint = AnchorPoint.fromOrdinal(point); } @Override From 4a5b0f49956e745c04d12a1fe6064a7e235d563b Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 20:21:45 -0300 Subject: [PATCH 38/85] Updated overrides and imports --- .../java/kamkeel/npcs/command/AbilityCommand.java | 3 +++ .../npcs/scripted/wrapper/ScriptDataAbilities.java | 5 ++++- .../scripted/wrapper/ScriptPlayerAbilityData.java | 12 +++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/npcs/command/AbilityCommand.java b/src/main/java/kamkeel/npcs/command/AbilityCommand.java index 499f9491d..d5b9420cc 100644 --- a/src/main/java/kamkeel/npcs/command/AbilityCommand.java +++ b/src/main/java/kamkeel/npcs/command/AbilityCommand.java @@ -4,6 +4,9 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; import net.minecraft.command.ICommandSender; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Set; import static kamkeel.npcs.util.ColorUtil.sendError; diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java index 6cbbb4dae..d0b5259ea 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java @@ -2,12 +2,15 @@ package noppes.npcs.scripted.wrapper; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import kamkeel.npcs.controllers.data.ability.AbilitySlot; import net.minecraft.entity.EntityLivingBase; import noppes.npcs.DataAbilities; import noppes.npcs.api.ability.IAbility; import noppes.npcs.api.ability.IDataAbilities; import noppes.npcs.entity.EntityNPCInterface; +import java.util.List; + /** * Script wrapper for DataAbilities providing API access to NPC abilities. */ @@ -65,7 +68,7 @@ public class ScriptDataAbilities implements IDataAbilities { @Override public boolean isAbilityReference(String abilityId) { - List slots = data.getAbilitySlots(); + List slots = data.getAbilitySlots(); for (int i = 0; i < slots.size(); i++) { kamkeel.npcs.controllers.data.ability.AbilitySlot slot = slots.get(i); if (slot.isReference()) { diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java index 2570653fc..a36c65d51 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java @@ -21,7 +21,7 @@ public class ScriptPlayerAbilityData implements IPlayerAbilityData { @Override public String[] getUnlockedAbilities() { - return data.getUnlockedAbilities().toArray(new String[0]); + return data.getUnlockedAbilities(); } @Override @@ -79,6 +79,11 @@ public class ScriptPlayerAbilityData implements IPlayerAbilityData { data.interruptCurrentAbility(); } + @Override + public boolean isOnCooldown() { + return data.isOnCooldown(); + } + @Override public boolean isOnCooldown(String key) { EntityPlayer player = playerData.player; @@ -86,6 +91,11 @@ public class ScriptPlayerAbilityData implements IPlayerAbilityData { return data.isOnCooldown(key, player); } + @Override + public void resetCooldown() { + data.resetCooldown(); + } + @Override public void resetCooldown(String key) { data.resetCooldown(key); From a8ca3293fdea207d6e03b9219dc3a309ffd0f850 Mon Sep 17 00:00:00 2001 From: Vidal Date: Fri, 30 Jan 2026 20:25:15 -0300 Subject: [PATCH 39/85] Removed wrong @param --- .../java/kamkeel/npcs/controllers/data/ability/Ability.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 6f66614e0..e31b8f8fd 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -369,7 +369,7 @@ public abstract class Ability implements IAbility { * Create a telegraph instance for this ability. * Override for custom telegraph shapes. * - * @param npc The caster + * @param caster The caster * @param target The target (for position calculation) * @return The telegraph instance, or null if no telegraph */ From 5182a3474e2e7334e65f4b5adb7e5f20517075c9 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 04:58:27 +0100 Subject: [PATCH 40/85] Field handler for automatic GUI creation --- .../java/somehussar/gui/FieldConstraint.java | 5 + .../java/somehussar/gui/FieldConstraints.java | 27 ++++ src/main/java/somehussar/gui/GuiEditable.java | 13 ++ .../java/somehussar/gui/GuiFieldHandler.java | 128 ++++++++++++++++++ .../gui/constraints/ConstraintFactory.java | 10 ++ .../gui/constraints/NumericConstraint.java | 13 ++ .../constraints/NumericConstraintFactory.java | 13 ++ .../constraints/NumericRangeConstraint.java | 35 +++++ .../somehussar/gui/field/EditableField.java | 71 ++++++++++ 9 files changed, 315 insertions(+) create mode 100644 src/main/java/somehussar/gui/FieldConstraint.java create mode 100644 src/main/java/somehussar/gui/FieldConstraints.java create mode 100644 src/main/java/somehussar/gui/GuiEditable.java create mode 100644 src/main/java/somehussar/gui/GuiFieldHandler.java create mode 100644 src/main/java/somehussar/gui/constraints/ConstraintFactory.java create mode 100644 src/main/java/somehussar/gui/constraints/NumericConstraint.java create mode 100644 src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java create mode 100644 src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java create mode 100644 src/main/java/somehussar/gui/field/EditableField.java diff --git a/src/main/java/somehussar/gui/FieldConstraint.java b/src/main/java/somehussar/gui/FieldConstraint.java new file mode 100644 index 000000000..af46df61d --- /dev/null +++ b/src/main/java/somehussar/gui/FieldConstraint.java @@ -0,0 +1,5 @@ +package somehussar.gui; + +public interface FieldConstraint { + void validate(Object value); +} diff --git a/src/main/java/somehussar/gui/FieldConstraints.java b/src/main/java/somehussar/gui/FieldConstraints.java new file mode 100644 index 000000000..113cf4460 --- /dev/null +++ b/src/main/java/somehussar/gui/FieldConstraints.java @@ -0,0 +1,27 @@ +package somehussar.gui; + +public final class FieldConstraints { + + private static final FieldConstraints EMPTY = + new FieldConstraints(new FieldConstraint[0]); + + private final FieldConstraint[] constraints; + + public FieldConstraints(FieldConstraint[] constraints) { + this.constraints = constraints; + } + + public static FieldConstraints empty() { + return EMPTY; + } + + public void validate(Object value) { + for (FieldConstraint c : constraints) { + c.validate(value); + } + } + + public boolean isEmpty() { + return constraints.length == 0; + } +} diff --git a/src/main/java/somehussar/gui/GuiEditable.java b/src/main/java/somehussar/gui/GuiEditable.java new file mode 100644 index 000000000..b32d4f7c4 --- /dev/null +++ b/src/main/java/somehussar/gui/GuiEditable.java @@ -0,0 +1,13 @@ +package somehussar.gui; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface GuiEditable { + + @Retention(RetentionPolicy.RUNTIME) + @interface Field { + String name() default ""; + } +} diff --git a/src/main/java/somehussar/gui/GuiFieldHandler.java b/src/main/java/somehussar/gui/GuiFieldHandler.java new file mode 100644 index 000000000..f217e2b5a --- /dev/null +++ b/src/main/java/somehussar/gui/GuiFieldHandler.java @@ -0,0 +1,128 @@ +package somehussar.gui; + +import somehussar.gui.constraints.*; +import somehussar.gui.field.EditableField; + +import java.lang.annotation.Annotation; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public final class GuiFieldHandler { + + private static final Map, ClassMetadata> CACHE = new HashMap<>(); + private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); + + public static final Map, ConstraintFactory> registry = new HashMap<>(); + + static { + registry.put(NumericConstraint.class, new NumericConstraintFactory()); + } + + + private GuiFieldHandler() {} + + public static ClassMetadata getMetadata(Class type) { + return CACHE.computeIfAbsent(type, GuiFieldHandler::scanClass); + } + + + private static ClassMetadata scanClass(Class type) { + if (!type.isAnnotationPresent(GuiEditable.class)) { + return null; + } + + ClassMetadata parent = null; + + Class superCls = type.getSuperclass(); + if (superCls != null && superCls != Object.class) { + parent = getMetadata(superCls); + } + + List list = new ArrayList<>(); + for (Field field : type.getDeclaredFields()) { + EditableField editableField = createEditableField(field); + + if (editableField != null) { + list.add(editableField); + } + } + + return new ClassMetadata( + type, + list.toArray(list.toArray(new EditableField[0])), + parent + ); + } + + @SuppressWarnings({"RawUseOfParameterized", "unchecked"}) + private static EditableField createEditableField(Field field) { + try { + GuiEditable.Field fieldConfig = field.getAnnotation(GuiEditable.Field.class); + if (fieldConfig == null) return null; + if (Modifier.isFinal(field.getModifiers())) return null; + + field.setAccessible(true); + EditableField.Builder builder = new EditableField.Builder(); + builder.name(fieldConfig.name()); + builder.type(field.getType()); + builder.getter(LOOKUP.unreflectGetter(field)); + builder.setter(LOOKUP.unreflectSetter(field)); + builder.constraints(buildConstraints(field)); + + + return builder.build(); + } catch (IllegalAccessException e) { + throw new RuntimeException( + "Failed to bind field: " + field, e); + } + } + + @SuppressWarnings({"RawUseOfParameterized", "unchecked"}) + private static FieldConstraints buildConstraints(Field field) { + List list = new ArrayList<>(); + + for (Annotation ann : field.getAnnotations()) { + ConstraintFactory factory = registry.get(ann.annotationType()); + if (factory != null) { + FieldConstraint c = factory.create(field, ann); + list.add(c); + } + } + + if (list.isEmpty()) return FieldConstraints.empty(); + return new FieldConstraints(list.toArray(new FieldConstraint[0])); + } + + + @SuppressWarnings({"RawUseOfParameterized"}) + public static final class ClassMetadata { + final Class type; + final EditableField[] fields; // only declared fields + final ClassMetadata parent; // superclass metadata (nullable) + + ClassMetadata(Class type, EditableField[] fields, ClassMetadata parent) { + this.type = type; + this.fields = fields; + this.parent = parent; + } + + public ClassMetadata getParent() { + return parent; + } + + public EditableField[] getDeclaredFields() { + return fields; + } + + public Class getType() { + return type; + } + } + + +} diff --git a/src/main/java/somehussar/gui/constraints/ConstraintFactory.java b/src/main/java/somehussar/gui/constraints/ConstraintFactory.java new file mode 100644 index 000000000..efc3cb90a --- /dev/null +++ b/src/main/java/somehussar/gui/constraints/ConstraintFactory.java @@ -0,0 +1,10 @@ +package somehussar.gui.constraints; + +import somehussar.gui.FieldConstraint; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +public interface ConstraintFactory { + FieldConstraint create(Field field, A annotation); +} diff --git a/src/main/java/somehussar/gui/constraints/NumericConstraint.java b/src/main/java/somehussar/gui/constraints/NumericConstraint.java new file mode 100644 index 000000000..773129be3 --- /dev/null +++ b/src/main/java/somehussar/gui/constraints/NumericConstraint.java @@ -0,0 +1,13 @@ +package somehussar.gui.constraints; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value = RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface NumericConstraint { + double min() default Double.NEGATIVE_INFINITY; + double max() default Double.POSITIVE_INFINITY; +} diff --git a/src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java b/src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java new file mode 100644 index 000000000..bd0a024e6 --- /dev/null +++ b/src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java @@ -0,0 +1,13 @@ +package somehussar.gui.constraints; + +import somehussar.gui.FieldConstraint; + +import java.lang.reflect.Field; + +public class NumericConstraintFactory implements ConstraintFactory { + + @Override + public FieldConstraint create(Field field, NumericConstraint ann) { + return new NumericRangeConstraint(ann.min(), ann.max()); + } +} diff --git a/src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java b/src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java new file mode 100644 index 000000000..16bf95895 --- /dev/null +++ b/src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java @@ -0,0 +1,35 @@ +package somehussar.gui.constraints; + +import somehussar.gui.FieldConstraint; + +public final class NumericRangeConstraint implements FieldConstraint { + + private final double min; + private final double max; + + public NumericRangeConstraint(double min, double max) { + this.min = min; + this.max = max; + } + + @Override + public void validate(Object value) { + if (!(value instanceof Number)) { + throw new ConstraintViolationException("Expected number, got " + value); + } + + double v = ((Number) value).doubleValue(); + if (v < min || v > max) { + throw new ConstraintViolationException( + "Value " + v + " must be between " + min + " and " + max + ); + } + } + + public static final class ConstraintViolationException extends RuntimeException { + public ConstraintViolationException(String message) { + super(message); + } + } + +} diff --git a/src/main/java/somehussar/gui/field/EditableField.java b/src/main/java/somehussar/gui/field/EditableField.java new file mode 100644 index 000000000..a1a076efd --- /dev/null +++ b/src/main/java/somehussar/gui/field/EditableField.java @@ -0,0 +1,71 @@ +package somehussar.gui.field; + +import somehussar.gui.FieldConstraints; + +import java.lang.invoke.MethodHandle; + +public final class EditableField { + + private final String name; + private final Class type; + private final MethodHandle getter; + private final MethodHandle setter; + private final FieldConstraints constraints; + + public String getName() { + return name; + } + + public Class getType() { + return type; + } + + @SuppressWarnings({"unchecked"}) + public T read(T instance) { + try { + return (T) getter.invoke(instance); + } catch (Throwable t) { + throw new RuntimeException("Failed to read field " + name, t); + } + } + + public void write(T instance, T value) { + constraints.validate(value); + try { + setter.invoke(instance, value); + } catch (Throwable t) { + throw new RuntimeException("Failed to write field " + name, t); + } + } + + public FieldConstraints getConstraints() { + return this.constraints; + } + + EditableField(Builder b) { + this.name = b.name; + this.type = b.type; + this.getter = b.getter; + this.setter = b.setter; + this.constraints = b.constraints; + } + + public static class Builder { + private String name; + private Class type; + private MethodHandle getter; + private MethodHandle setter; + private FieldConstraints constraints; + + public Builder name(String v) { this.name = v; return this; } + public Builder type(Class v) { this.type = v; return this; } + public Builder getter(MethodHandle v) { this.getter = v; return this; } + public Builder setter(MethodHandle v) { this.setter = v; return this; } + public Builder constraints(FieldConstraints v) { this.constraints = v; return this; } + + public EditableField build() { + return new EditableField(this); + } + + } +} From 9480212c4d5d31e2c39d6241c58e03154fb71c15 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 05:26:02 +0100 Subject: [PATCH 41/85] Group ability --- src/main/java/somehussar/gui/GuiEditable.java | 13 ++++++++++++- .../java/somehussar/gui/GuiFieldHandler.java | 17 +++++++++++------ .../somehussar/gui/field/EditableField.java | 12 +++++++++++- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/somehussar/gui/GuiEditable.java b/src/main/java/somehussar/gui/GuiEditable.java index b32d4f7c4..52a8d4067 100644 --- a/src/main/java/somehussar/gui/GuiEditable.java +++ b/src/main/java/somehussar/gui/GuiEditable.java @@ -8,6 +8,17 @@ public @interface GuiEditable { @Retention(RetentionPolicy.RUNTIME) @interface Field { - String name() default ""; + String value(); + + /** + * Display order + * Higher value = higher priority. + */ + int order() default 0; + } + + @Retention(RetentionPolicy.RUNTIME) + @interface Group { + String value(); } } diff --git a/src/main/java/somehussar/gui/GuiFieldHandler.java b/src/main/java/somehussar/gui/GuiFieldHandler.java index f217e2b5a..ba5356696 100644 --- a/src/main/java/somehussar/gui/GuiFieldHandler.java +++ b/src/main/java/somehussar/gui/GuiFieldHandler.java @@ -67,12 +67,17 @@ public final class GuiFieldHandler { if (Modifier.isFinal(field.getModifiers())) return null; field.setAccessible(true); - EditableField.Builder builder = new EditableField.Builder(); - builder.name(fieldConfig.name()); - builder.type(field.getType()); - builder.getter(LOOKUP.unreflectGetter(field)); - builder.setter(LOOKUP.unreflectSetter(field)); - builder.constraints(buildConstraints(field)); + EditableField.Builder builder = new EditableField.Builder() + .name(fieldConfig.value()) + .type(field.getType()) + .getter(LOOKUP.unreflectGetter(field)) + .setter(LOOKUP.unreflectSetter(field)) + .constraints(buildConstraints(field)) + .order(fieldConfig.order()); + + GuiEditable.Group group = field.getAnnotation(GuiEditable.Group.class); + if (group != null) + builder.group(group.value()); return builder.build(); diff --git a/src/main/java/somehussar/gui/field/EditableField.java b/src/main/java/somehussar/gui/field/EditableField.java index a1a076efd..c0ace4303 100644 --- a/src/main/java/somehussar/gui/field/EditableField.java +++ b/src/main/java/somehussar/gui/field/EditableField.java @@ -11,6 +11,8 @@ public final class EditableField { private final MethodHandle getter; private final MethodHandle setter; private final FieldConstraints constraints; + private final int order; + private final String group; public String getName() { return name; @@ -42,12 +44,16 @@ public final class EditableField { return this.constraints; } + public int getOrder() { return this.order; } + EditableField(Builder b) { this.name = b.name; this.type = b.type; this.getter = b.getter; this.setter = b.setter; this.constraints = b.constraints; + this.order = b.order; + this.group = b.group; } public static class Builder { @@ -56,15 +62,19 @@ public final class EditableField { private MethodHandle getter; private MethodHandle setter; private FieldConstraints constraints; + private int order; + private String group = null; public Builder name(String v) { this.name = v; return this; } public Builder type(Class v) { this.type = v; return this; } public Builder getter(MethodHandle v) { this.getter = v; return this; } public Builder setter(MethodHandle v) { this.setter = v; return this; } public Builder constraints(FieldConstraints v) { this.constraints = v; return this; } + public Builder order(int order) { this.order = order; return this; } + public Builder group(String value) { this.group = value; return this; } public EditableField build() { - return new EditableField(this); + return new EditableField<>(this); } } From 3ea6303fc380be2aab81d7379f412a16d321b8bc Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 05:39:28 +0100 Subject: [PATCH 42/85] Sizing --- src/main/java/somehussar/gui/GuiEditable.java | 22 +++++++++++++++++++ .../java/somehussar/gui/GuiFieldHandler.java | 9 ++++++-- .../somehussar/gui/field/EditableField.java | 6 ++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/somehussar/gui/GuiEditable.java b/src/main/java/somehussar/gui/GuiEditable.java index 52a8d4067..6e0a826cf 100644 --- a/src/main/java/somehussar/gui/GuiEditable.java +++ b/src/main/java/somehussar/gui/GuiEditable.java @@ -1,5 +1,6 @@ package somehussar.gui; +import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -15,10 +16,31 @@ public @interface GuiEditable { * Higher value = higher priority. */ int order() default 0; + } @Retention(RetentionPolicy.RUNTIME) @interface Group { String value(); } + + @Retention(RetentionPolicy.RUNTIME) + @interface Size { + int labelWidth() default 60; + int fieldWidth() default 50; + + GuiEditable.Size DEFAULT_SIZE = new GuiEditable.Size() { + @Override + public int labelWidth() { + return 60; + } + + @Override + public int fieldWidth() { + return 50; + } + @Override public Class annotationType() { return GuiEditable.Size.class; } + }; + + } } diff --git a/src/main/java/somehussar/gui/GuiFieldHandler.java b/src/main/java/somehussar/gui/GuiFieldHandler.java index ba5356696..5cf39bda5 100644 --- a/src/main/java/somehussar/gui/GuiFieldHandler.java +++ b/src/main/java/somehussar/gui/GuiFieldHandler.java @@ -30,7 +30,7 @@ public final class GuiFieldHandler { return CACHE.computeIfAbsent(type, GuiFieldHandler::scanClass); } - + @SuppressWarnings({"RawUseOfParameterized"}) private static ClassMetadata scanClass(Class type) { if (!type.isAnnotationPresent(GuiEditable.class)) { return null; @@ -66,6 +66,9 @@ public final class GuiFieldHandler { if (fieldConfig == null) return null; if (Modifier.isFinal(field.getModifiers())) return null; + GuiEditable.Size size = field.getAnnotation(GuiEditable.Size.class); + if (size == null) size = GuiEditable.Size.DEFAULT_SIZE;; + field.setAccessible(true); EditableField.Builder builder = new EditableField.Builder() .name(fieldConfig.value()) @@ -73,7 +76,9 @@ public final class GuiFieldHandler { .getter(LOOKUP.unreflectGetter(field)) .setter(LOOKUP.unreflectSetter(field)) .constraints(buildConstraints(field)) - .order(fieldConfig.order()); + .order(fieldConfig.order()) + .size(size); + GuiEditable.Group group = field.getAnnotation(GuiEditable.Group.class); if (group != null) diff --git a/src/main/java/somehussar/gui/field/EditableField.java b/src/main/java/somehussar/gui/field/EditableField.java index c0ace4303..782416663 100644 --- a/src/main/java/somehussar/gui/field/EditableField.java +++ b/src/main/java/somehussar/gui/field/EditableField.java @@ -1,6 +1,7 @@ package somehussar.gui.field; import somehussar.gui.FieldConstraints; +import somehussar.gui.GuiEditable; import java.lang.invoke.MethodHandle; @@ -13,6 +14,7 @@ public final class EditableField { private final FieldConstraints constraints; private final int order; private final String group; + private final GuiEditable.Size size; public String getName() { return name; @@ -54,6 +56,7 @@ public final class EditableField { this.constraints = b.constraints; this.order = b.order; this.group = b.group; + this.size = b.size; } public static class Builder { @@ -64,6 +67,7 @@ public final class EditableField { private FieldConstraints constraints; private int order; private String group = null; + private GuiEditable.Size size; public Builder name(String v) { this.name = v; return this; } public Builder type(Class v) { this.type = v; return this; } @@ -72,10 +76,10 @@ public final class EditableField { public Builder constraints(FieldConstraints v) { this.constraints = v; return this; } public Builder order(int order) { this.order = order; return this; } public Builder group(String value) { this.group = value; return this; } + public Builder size(GuiEditable.Size size) { this.size = size; return this; } public EditableField build() { return new EditableField<>(this); } - } } From a1549abff1b46de1af32ff6e8247d70860826262 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 05:47:17 +0100 Subject: [PATCH 43/85] Move classes around --- .../gui/{ => annotationHandling}/FieldConstraint.java | 2 +- .../gui/{ => annotationHandling}/FieldConstraints.java | 2 +- .../gui/{ => annotationHandling}/GuiEditable.java | 2 +- .../gui/{ => annotationHandling}/GuiFieldHandler.java | 8 +++++--- .../constraints/ConstraintFactory.java | 4 ++-- .../constraints/NumericConstraint.java | 2 +- .../constraints/NumericConstraintFactory.java | 4 ++-- .../constraints/NumericRangeConstraint.java | 4 ++-- .../gui/{ => annotationHandling}/field/EditableField.java | 6 +++--- 9 files changed, 18 insertions(+), 16 deletions(-) rename src/main/java/somehussar/gui/{ => annotationHandling}/FieldConstraint.java (62%) rename src/main/java/somehussar/gui/{ => annotationHandling}/FieldConstraints.java (93%) rename src/main/java/somehussar/gui/{ => annotationHandling}/GuiEditable.java (96%) rename src/main/java/somehussar/gui/{ => annotationHandling}/GuiFieldHandler.java (92%) rename src/main/java/somehussar/gui/{ => annotationHandling}/constraints/ConstraintFactory.java (62%) rename src/main/java/somehussar/gui/{ => annotationHandling}/constraints/NumericConstraint.java (87%) rename src/main/java/somehussar/gui/{ => annotationHandling}/constraints/NumericConstraintFactory.java (71%) rename src/main/java/somehussar/gui/{ => annotationHandling}/constraints/NumericRangeConstraint.java (88%) rename src/main/java/somehussar/gui/{ => annotationHandling}/field/EditableField.java (93%) diff --git a/src/main/java/somehussar/gui/FieldConstraint.java b/src/main/java/somehussar/gui/annotationHandling/FieldConstraint.java similarity index 62% rename from src/main/java/somehussar/gui/FieldConstraint.java rename to src/main/java/somehussar/gui/annotationHandling/FieldConstraint.java index af46df61d..7a9b124e4 100644 --- a/src/main/java/somehussar/gui/FieldConstraint.java +++ b/src/main/java/somehussar/gui/annotationHandling/FieldConstraint.java @@ -1,4 +1,4 @@ -package somehussar.gui; +package somehussar.gui.annotationHandling; public interface FieldConstraint { void validate(Object value); diff --git a/src/main/java/somehussar/gui/FieldConstraints.java b/src/main/java/somehussar/gui/annotationHandling/FieldConstraints.java similarity index 93% rename from src/main/java/somehussar/gui/FieldConstraints.java rename to src/main/java/somehussar/gui/annotationHandling/FieldConstraints.java index 113cf4460..9a48fd1e3 100644 --- a/src/main/java/somehussar/gui/FieldConstraints.java +++ b/src/main/java/somehussar/gui/annotationHandling/FieldConstraints.java @@ -1,4 +1,4 @@ -package somehussar.gui; +package somehussar.gui.annotationHandling; public final class FieldConstraints { diff --git a/src/main/java/somehussar/gui/GuiEditable.java b/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java similarity index 96% rename from src/main/java/somehussar/gui/GuiEditable.java rename to src/main/java/somehussar/gui/annotationHandling/GuiEditable.java index 6e0a826cf..596f3ab2f 100644 --- a/src/main/java/somehussar/gui/GuiEditable.java +++ b/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java @@ -1,4 +1,4 @@ -package somehussar.gui; +package somehussar.gui.annotationHandling; import java.lang.annotation.Annotation; import java.lang.annotation.Retention; diff --git a/src/main/java/somehussar/gui/GuiFieldHandler.java b/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java similarity index 92% rename from src/main/java/somehussar/gui/GuiFieldHandler.java rename to src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java index 5cf39bda5..c6b7f3625 100644 --- a/src/main/java/somehussar/gui/GuiFieldHandler.java +++ b/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java @@ -1,7 +1,9 @@ -package somehussar.gui; +package somehussar.gui.annotationHandling; -import somehussar.gui.constraints.*; -import somehussar.gui.field.EditableField; +import somehussar.gui.annotationHandling.constraints.ConstraintFactory; +import somehussar.gui.annotationHandling.constraints.NumericConstraint; +import somehussar.gui.annotationHandling.constraints.NumericConstraintFactory; +import somehussar.gui.annotationHandling.field.EditableField; import java.lang.annotation.Annotation; import java.lang.invoke.MethodHandles; diff --git a/src/main/java/somehussar/gui/constraints/ConstraintFactory.java b/src/main/java/somehussar/gui/annotationHandling/constraints/ConstraintFactory.java similarity index 62% rename from src/main/java/somehussar/gui/constraints/ConstraintFactory.java rename to src/main/java/somehussar/gui/annotationHandling/constraints/ConstraintFactory.java index efc3cb90a..d62de94b4 100644 --- a/src/main/java/somehussar/gui/constraints/ConstraintFactory.java +++ b/src/main/java/somehussar/gui/annotationHandling/constraints/ConstraintFactory.java @@ -1,6 +1,6 @@ -package somehussar.gui.constraints; +package somehussar.gui.annotationHandling.constraints; -import somehussar.gui.FieldConstraint; +import somehussar.gui.annotationHandling.FieldConstraint; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/src/main/java/somehussar/gui/constraints/NumericConstraint.java b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java similarity index 87% rename from src/main/java/somehussar/gui/constraints/NumericConstraint.java rename to src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java index 773129be3..3b9268a30 100644 --- a/src/main/java/somehussar/gui/constraints/NumericConstraint.java +++ b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java @@ -1,4 +1,4 @@ -package somehussar.gui.constraints; +package somehussar.gui.annotationHandling.constraints; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraintFactory.java similarity index 71% rename from src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java rename to src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraintFactory.java index bd0a024e6..24b08ceb9 100644 --- a/src/main/java/somehussar/gui/constraints/NumericConstraintFactory.java +++ b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraintFactory.java @@ -1,6 +1,6 @@ -package somehussar.gui.constraints; +package somehussar.gui.annotationHandling.constraints; -import somehussar.gui.FieldConstraint; +import somehussar.gui.annotationHandling.FieldConstraint; import java.lang.reflect.Field; diff --git a/src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericRangeConstraint.java similarity index 88% rename from src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java rename to src/main/java/somehussar/gui/annotationHandling/constraints/NumericRangeConstraint.java index 16bf95895..198888d25 100644 --- a/src/main/java/somehussar/gui/constraints/NumericRangeConstraint.java +++ b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericRangeConstraint.java @@ -1,6 +1,6 @@ -package somehussar.gui.constraints; +package somehussar.gui.annotationHandling.constraints; -import somehussar.gui.FieldConstraint; +import somehussar.gui.annotationHandling.FieldConstraint; public final class NumericRangeConstraint implements FieldConstraint { diff --git a/src/main/java/somehussar/gui/field/EditableField.java b/src/main/java/somehussar/gui/annotationHandling/field/EditableField.java similarity index 93% rename from src/main/java/somehussar/gui/field/EditableField.java rename to src/main/java/somehussar/gui/annotationHandling/field/EditableField.java index 782416663..73172ef42 100644 --- a/src/main/java/somehussar/gui/field/EditableField.java +++ b/src/main/java/somehussar/gui/annotationHandling/field/EditableField.java @@ -1,7 +1,7 @@ -package somehussar.gui.field; +package somehussar.gui.annotationHandling.field; -import somehussar.gui.FieldConstraints; -import somehussar.gui.GuiEditable; +import somehussar.gui.annotationHandling.FieldConstraints; +import somehussar.gui.annotationHandling.GuiEditable; import java.lang.invoke.MethodHandle; From 43c0a8e2968ec19b71c39705c8505df7fbc4676f Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 06:00:37 +0100 Subject: [PATCH 44/85] Shitty test command do not fucking use xd --- .../java/kamkeel/npcs/command/TestGui.java | 25 +++++++++++++ .../controllers/data/ability/Ability.java | 5 +++ .../java/somehussar/gui/AnnotatedGui.java | 35 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/main/java/kamkeel/npcs/command/TestGui.java create mode 100644 src/main/java/somehussar/gui/AnnotatedGui.java diff --git a/src/main/java/kamkeel/npcs/command/TestGui.java b/src/main/java/kamkeel/npcs/command/TestGui.java new file mode 100644 index 000000000..d34f64b0a --- /dev/null +++ b/src/main/java/kamkeel/npcs/command/TestGui.java @@ -0,0 +1,25 @@ +package kamkeel.npcs.command; + +import kamkeel.npcs.controllers.data.ability.Ability; +import net.minecraft.client.Minecraft; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import somehussar.gui.AnnotatedGui; + +public class TestGui extends CommandKamkeelBase { + + @Override + public void processCommand(ICommandSender sender, String[] args) throws CommandException { + Minecraft.getMinecraft().displayGuiScreen(new AnnotatedGui(Ability.class)); + } + + @Override + public String getDescription() { + return ""; + } + + @Override + public String getCommandName() { + return "mytestgui"; + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index eb59edf7c..b67ed95ac 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -27,15 +27,20 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.entity.Entity; +import somehussar.gui.annotationHandling.GuiEditable; +@GuiEditable public abstract class Ability implements IAbility { // ═══════════════════════════════════════════════════════════════════ // CONFIGURATION (saved to NBT) // ═══════════════════════════════════════════════════════════════════ + @GuiEditable.Field("id") protected String id; + @GuiEditable.Field("name") protected String name; + @GuiEditable.Field("test") protected String typeId; // e.g., "ability.cnpc.slam" (also used as lang key) // Selection diff --git a/src/main/java/somehussar/gui/AnnotatedGui.java b/src/main/java/somehussar/gui/AnnotatedGui.java new file mode 100644 index 000000000..7bb4bf777 --- /dev/null +++ b/src/main/java/somehussar/gui/AnnotatedGui.java @@ -0,0 +1,35 @@ +package somehussar.gui; + +import noppes.npcs.client.gui.util.GuiNPCInterface; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import somehussar.gui.annotationHandling.GuiFieldHandler; +import somehussar.gui.annotationHandling.field.EditableField; + +public class AnnotatedGui extends GuiNPCInterface { + private final GuiFieldHandler.ClassMetadata metadata; + + public AnnotatedGui(Class type) { + metadata = GuiFieldHandler.getMetadata(type); + setBackground("menubg.png"); + xSize = 256; + ySize = 216; + closeOnEsc = true; + } + + @Override + public void initGui() { + super.initGui(); + if (metadata == null) + return; + + int i = 0; + for (EditableField field : metadata.getDeclaredFields()) { + addLabel(new GuiNpcLabel(i++, field.getName(), guiLeft+8, guiTop+i*15+5)); + } + } + + @Override + public void save() { + + } +} From d0eef8b271a0cc3d089ff4eca9f8785f22b833b8 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 06:00:46 +0100 Subject: [PATCH 45/85] oops --- src/main/java/kamkeel/npcs/command/CommandKamkeel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java index d0341f211..a7cc9acd5 100644 --- a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java @@ -30,6 +30,7 @@ public class CommandKamkeel extends CommandBase { public CommandKamkeel() { registerCommand(help); + registerCommand(new TestGui()); registerCommand(new ScriptCommand()); registerCommand(new SlayCommand()); registerCommand(new QuestCommand()); From 5dc27f7212edce361c1c4f7970df03165305c41c Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 02:02:18 -0300 Subject: [PATCH 46/85] Updated anchor point method calls --- .../controllers/data/ability/data/EnergyAnchorData.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java index 39c7db9e7..66983f89b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyAnchorData.java @@ -24,25 +24,25 @@ public class EnergyAnchorData { } public EnergyAnchorData(int anchorPoint) { - this.anchorPoint = AnchorPoint.fromId(anchorPoint); + this.anchorPoint = AnchorPoint.fromOrdinal(anchorPoint); } public EnergyAnchorData(int anchorPoint, float anchorOffsetX, float anchorOffsetY, float anchorOffsetZ) { - this.anchorPoint = AnchorPoint.fromId(anchorPoint); + this.anchorPoint = AnchorPoint.fromOrdinal(anchorPoint); this.anchorOffsetX = anchorOffsetX; this.anchorOffsetY = anchorOffsetY; this.anchorOffsetZ = anchorOffsetZ; } public void writeNBT(NBTTagCompound nbt) { - nbt.setInteger("anchorPoint", anchorPoint.getId()); + nbt.setInteger("anchorPoint", anchorPoint.ordinal()); nbt.setFloat("anchorOffsetX", anchorOffsetX); nbt.setFloat("anchorOffsetY", anchorOffsetY); nbt.setFloat("anchorOffsetZ", anchorOffsetZ); } public void readNBT(NBTTagCompound nbt) { - this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromId(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; + this.anchorPoint = nbt.hasKey("anchorPoint") ? AnchorPoint.fromOrdinal(nbt.getInteger("anchorPoint")) : AnchorPoint.FRONT; this.anchorOffsetX = nbt.hasKey("anchorOffsetX") ? nbt.getFloat("anchorOffsetX") : 0; this.anchorOffsetY = nbt.hasKey("anchorOffsetY") ? nbt.getFloat("anchorOffsetY") : 0; this.anchorOffsetZ = nbt.hasKey("anchorOffsetZ") ? nbt.getFloat("anchorOffsetZ") : 0; From 3ffd62c2e7760da8a116a9d85c2c6802e2421321 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 02:03:07 -0300 Subject: [PATCH 47/85] More animations --- .../animations/Ability_DualBeam_Active.json | 203 ++++++++++++++++++ .../animations/Ability_DualBeam_Windup.json | 201 +++++++++++++++++ 2 files changed, 404 insertions(+) create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json new file mode 100644 index 000000000..fa47349f9 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json @@ -0,0 +1,203 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": 31.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": -25.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 25.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": 31.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": -25.0f, + "Rotation0": -85.0f, + "Pivot0": 1.0f, + "Pivot1": 1.0f, + "Rotation2": 20.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 25.0f, + "Rotation0": -85.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": -20.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": 31.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": -25.0f, + "Rotation0": -85.0f, + "Pivot0": 1.0f, + "Pivot1": 1.0f, + "Rotation2": -20.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 25.0f, + "Rotation0": -85.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 20.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 3, + "Smooth": 0b, + "ID": 12, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_DualBeam_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json new file mode 100644 index 000000000..99437fc2d --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json @@ -0,0 +1,201 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 90.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "LEFT_ARM", + "Rotation1": -90.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Duration": 60 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 18.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 75.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -75.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 25.0f + }, + { + "Pivot2": 3.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": -18.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 3.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -31.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 5 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 3.0f, + "FrameParts": [ + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": 31.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_ARM", + "Rotation1": -25.0f, + "Rotation0": -90.0f, + "Pivot0": 1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 25.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 0.0f, + "Rotation0": 6.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 15 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 2, + "Smooth": 0b, + "ID": 11, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_DualBeam_Windup", + "WhileStanding": 1b +} From 00e62be79df67c7c06cce7a6f95fa75af916b7ac Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 06:06:10 +0100 Subject: [PATCH 48/85] Revert "oops" This reverts commit d0eef8b271a0cc3d089ff4eca9f8785f22b833b8. --- src/main/java/kamkeel/npcs/command/CommandKamkeel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java index a7cc9acd5..d0341f211 100644 --- a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java @@ -30,7 +30,6 @@ public class CommandKamkeel extends CommandBase { public CommandKamkeel() { registerCommand(help); - registerCommand(new TestGui()); registerCommand(new ScriptCommand()); registerCommand(new SlayCommand()); registerCommand(new QuestCommand()); From 289baf4131ceab531e03c42bcbc5f6f63a10763b Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 06:06:54 +0100 Subject: [PATCH 49/85] Revert test gui command --- .../java/kamkeel/npcs/command/TestGui.java | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 src/main/java/kamkeel/npcs/command/TestGui.java diff --git a/src/main/java/kamkeel/npcs/command/TestGui.java b/src/main/java/kamkeel/npcs/command/TestGui.java deleted file mode 100644 index d34f64b0a..000000000 --- a/src/main/java/kamkeel/npcs/command/TestGui.java +++ /dev/null @@ -1,25 +0,0 @@ -package kamkeel.npcs.command; - -import kamkeel.npcs.controllers.data.ability.Ability; -import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import somehussar.gui.AnnotatedGui; - -public class TestGui extends CommandKamkeelBase { - - @Override - public void processCommand(ICommandSender sender, String[] args) throws CommandException { - Minecraft.getMinecraft().displayGuiScreen(new AnnotatedGui(Ability.class)); - } - - @Override - public String getDescription() { - return ""; - } - - @Override - public String getCommandName() { - return "mytestgui"; - } -} From 17eb003a12097fb9748e85ad7d3a35954a10ef1e Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sat, 31 Jan 2026 07:18:54 +0100 Subject: [PATCH 50/85] i fucking give up, this will not hold up. --- .../data/ability/type/AbilitySlam.java | 2 ++ .../java/somehussar/gui/AnnotatedGui.java | 23 +++++++++---- .../somehussar/gui/ImmediateTextField.java | 32 +++++++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 src/main/java/somehussar/gui/ImmediateTextField.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index 2dae47d05..b3c800d81 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -19,6 +19,7 @@ import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilitySlam; +import somehussar.gui.annotationHandling.GuiEditable; import java.util.List; @@ -31,6 +32,7 @@ import java.util.List; * - Landing: When NPC hits ground, deal AOE damage * - RECOVERY: Landing recovery animation */ +@GuiEditable public class AbilitySlam extends Ability implements IAbilitySlam { // Type-specific config diff --git a/src/main/java/somehussar/gui/AnnotatedGui.java b/src/main/java/somehussar/gui/AnnotatedGui.java index 7bb4bf777..8cdf224d5 100644 --- a/src/main/java/somehussar/gui/AnnotatedGui.java +++ b/src/main/java/somehussar/gui/AnnotatedGui.java @@ -1,19 +1,28 @@ package somehussar.gui; -import noppes.npcs.client.gui.util.GuiNPCInterface; +import net.minecraft.client.gui.GuiScreen; import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.SubGuiInterface; import somehussar.gui.annotationHandling.GuiFieldHandler; import somehussar.gui.annotationHandling.field.EditableField; -public class AnnotatedGui extends GuiNPCInterface { +public class AnnotatedGui extends SubGuiInterface { private final GuiFieldHandler.ClassMetadata metadata; - public AnnotatedGui(Class type) { - metadata = GuiFieldHandler.getMetadata(type); + public AnnotatedGui(T object, String[] groups, GuiScreen parent) { + this(object, groups, parent, 256, 216); + } + + public AnnotatedGui(T object, String[] groups, GuiScreen parent, int xSize, int ySize) { + if (object != null) + metadata = GuiFieldHandler.getMetadata(object.getClass()); + else + metadata = null; setBackground("menubg.png"); - xSize = 256; - ySize = 216; + this.xSize = xSize; + this.ySize = ySize; closeOnEsc = true; + this.parent = parent; } @Override @@ -23,7 +32,7 @@ public class AnnotatedGui extends GuiNPCInterface { return; int i = 0; - for (EditableField field : metadata.getDeclaredFields()) { + for (EditableField field : metadata.getParent().getDeclaredFields()) { addLabel(new GuiNpcLabel(i++, field.getName(), guiLeft+8, guiTop+i*15+5)); } } diff --git a/src/main/java/somehussar/gui/ImmediateTextField.java b/src/main/java/somehussar/gui/ImmediateTextField.java new file mode 100644 index 000000000..5f49a9d84 --- /dev/null +++ b/src/main/java/somehussar/gui/ImmediateTextField.java @@ -0,0 +1,32 @@ +package somehussar.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import somehussar.gui.annotationHandling.field.EditableField; + +public class ImmediateTextField extends GuiNpcTextField{ + private final EditableField editableField; +// +// private final GuiNpcTextField encapsulatedField; + + public ImmediateTextField(int id, EditableField field, int xPos, int yPos) { + this(id, field, Minecraft.getMinecraft().fontRenderer, xPos, yPos); + } + public ImmediateTextField(int id, EditableField field, FontRenderer fontRenderer, int xPos, int yPos) { + super(id, null, fontRenderer, xPos, yPos, 0, 0, null); + + this.editableField = field; + } + + @Override + public void drawTextBox(int mousX, int mousY) { + + } + + @Override + public void mouseClicked(int xPos, int yPos, int k) { + xPos -= this.xPosition; + yPos -= this.yPosition; + } +} From b9e82e4c5b1bded76ddab8d12dcaa08729b2dca0 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 16:37:28 -0300 Subject: [PATCH 51/85] Fixed mysterious override stopping the game from running Kam let's please stop using claude for everything this BuiltInAbility is not even used --- src/api | 2 +- .../npcs/controllers/data/ability/BuiltInAbility.java | 8 -------- src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java | 6 ++++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/api b/src/api index db6a68e43..bf650319d 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit db6a68e43073b2828ec05a3c2ede660453c4544e +Subproject commit bf650319da422790bff294d570dd879143fe8d4c diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java b/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java index 69151291f..904fad0b9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/BuiltInAbility.java @@ -31,14 +31,6 @@ public abstract class BuiltInAbility extends Ability { return registryKey; } - /** - * Built-in abilities are not customizable. - */ - @Override - public boolean isCustomizable() { - return false; - } - /** * Built-in abilities do not write type-specific NBT (they have fixed configs). */ diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java index 26f7a1ba7..f534f9dbc 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemStack; import noppes.npcs.NoppesUtilServer; import noppes.npcs.api.IPos; import noppes.npcs.api.ITimers; +import noppes.npcs.api.ability.IDataAbilities; import noppes.npcs.api.entity.ICustomNpc; import noppes.npcs.api.entity.IEntityLivingBase; import noppes.npcs.api.entity.IPlayer; @@ -51,6 +52,7 @@ import noppes.npcs.scripted.roles.ScriptRoleInterface; import noppes.npcs.scripted.roles.ScriptRoleMailman; import noppes.npcs.scripted.roles.ScriptRoleTrader; import noppes.npcs.scripted.roles.ScriptRoleTransporter; +import noppes.npcs.scripted.wrapper.ScriptDataAbilities; import noppes.npcs.util.ValueUtil; import java.util.ArrayList; @@ -1458,7 +1460,7 @@ public class ScriptNpc extends ScriptLiving imp return npc.stats.magicData; } - public noppes.npcs.api.ability.IDataAbilities getAbilityData() { - return new noppes.npcs.scripted.wrapper.ScriptDataAbilities(npc); + public IDataAbilities getAbilityData() { + return new ScriptDataAbilities(npc); } } From 9df8fbb88d9d0775cf4a0cbccc67f9f7141e0d7e Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 19:22:43 -0300 Subject: [PATCH 52/85] Registry to add new Abilities, could possibly be used to register other stuff like animations --- src/main/java/kamkeel/npcs/util/Register.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/kamkeel/npcs/util/Register.java diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java new file mode 100644 index 000000000..d12e49146 --- /dev/null +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -0,0 +1,36 @@ +package kamkeel.npcs.util; + +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityController; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.Supplier; + +public class Register { + private final String registryKey; + private final String namespace; + protected final Map> entries = new LinkedHashMap<>(); + + public Register(String registryKey, String namespace) { + this.registryKey = registryKey; + this.namespace = namespace; + } + + public T register(String factoryName, Supplier factory) { + entries.put(registryKey + "." + namespace + ":" + factoryName, factory); + return factory.get(); + } + + public static class Abilities extends Register { + public Abilities(String namespace) { + super("ability", namespace); + } + + public void register() { + for (Map.Entry> entry : entries.entrySet()) { + AbilityController.Instance.registerType(entry.getKey(), entry.getValue()); + } + } + } +} From 245e8f81626acb117692098e2a09b164564e9987 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 21:55:39 -0300 Subject: [PATCH 53/85] Added Dual Beam Ability --- .../data/ability/AbilityController.java | 20 +- .../data/ability/type/AbilityDualBeam.java | 401 ++++++++++++++++++ .../npcs/entity/EntityAbilityBeam.java | 23 + .../ability/SubGuiAbilityDualBeam.java | 328 ++++++++++++++ 4 files changed, 754 insertions(+), 18 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 62d226bf7..5b3c15e05 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -1,23 +1,6 @@ package kamkeel.npcs.controllers.data.ability; -import kamkeel.npcs.controllers.data.ability.type.AbilitySweeper; -import kamkeel.npcs.controllers.data.ability.type.AbilityCharge; -import kamkeel.npcs.controllers.data.ability.type.AbilityCutter; -import kamkeel.npcs.controllers.data.ability.type.AbilityDash; -import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; -import kamkeel.npcs.controllers.data.ability.type.AbilityHazard; -import kamkeel.npcs.controllers.data.ability.type.AbilityHeal; -import kamkeel.npcs.controllers.data.ability.type.AbilityHeavyHit; -import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; -import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; -import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; -import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; -import kamkeel.npcs.controllers.data.ability.type.AbilityProjectile; -import kamkeel.npcs.controllers.data.ability.type.AbilityShockwave; -import kamkeel.npcs.controllers.data.ability.type.AbilitySlam; -import kamkeel.npcs.controllers.data.ability.type.AbilityTeleport; -import kamkeel.npcs.controllers.data.ability.type.AbilityTrap; -import kamkeel.npcs.controllers.data.ability.type.AbilityVortex; +import kamkeel.npcs.controllers.data.ability.type.*; import kamkeel.npcs.controllers.SyncController; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.CustomNpcs; @@ -383,6 +366,7 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:disc", AbilityDisc::new); registerType("cnpc:laser_shot", AbilityLaserShot::new); registerType("cnpc:beam", AbilityEnergyBeam::new); + registerType("cnpc:dual_beam", AbilityDualBeam::new); // Movement abilities registerType("cnpc:charge", AbilityCharge::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java new file mode 100644 index 000000000..6704b0e33 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java @@ -0,0 +1,401 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.util.AnchorPointHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualBeam; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.util.ValueUtil; + +public class AbilityDualBeam extends Ability { + private float beamWidth = 0.4f; + private float headSize = 0.6f; + private boolean dualFire= true; + private int dualFireDelay = 0; + + // Data classes + private EnergyColorData[] colorData = new EnergyColorData[]{ + new EnergyColorData(0xFFFFFF, 0x00AAFF, true, 0.4f, 0.5f, 6.0f), + new EnergyColorData(0xFFFFFF, 0xFF0000, true, 0.4f, 0.5f, 6.0f), + }; + private EnergyCombatData combatData = new EnergyCombatData(10.0f, 1.5f, 0.2f, false, 4.0f, 0.5f); + private EnergyHomingData homingData = new EnergyHomingData(0.4f, true, 0.1f, 15.0f); + private EnergyLightningData[] lightningData = new EnergyLightningData[]{ + new EnergyLightningData(), new EnergyLightningData() + }; + private EnergyLifespanData lifespanData = new EnergyLifespanData(25.0f, 200); + private EnergyAnchorData[] anchorData = new EnergyAnchorData[]{ + new EnergyAnchorData(AnchorPoint.RIGHT_HAND), new EnergyAnchorData(AnchorPoint.LEFT_HAND) + }; + + // Transient state for beam entity (used during windup charging) + private transient EntityAbilityBeam beamEntity = null; + private transient EntityAbilityBeam beamEntity2 = null; + + public AbilityDualBeam() { + this.typeId = "ability.cnpc.dual_beam"; + this.name = "Dual Beam"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 20.0f; + this.minRange = 5.0f; + this.cooldownTicks = 0; + this.windUpTicks = 80; + this.lockMovement = LockMovementType.WINDUP_AND_ACTIVE; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; + // Default built-in animations + this.windUpAnimationName = "Ability_DualBeam_Windup"; + this.activeAnimationName = "Ability_DualBeam_Active"; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityDualBeam(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { + if (world.isRemote) { + signalCompletion(); + return; + } + + // Start firing the beam that was spawned during windup + if (beamEntity != null && !beamEntity.isDead) { + beamEntity.startFiring(target); + } + + if (dualFire) { + if (beamEntity2 != null && !beamEntity2.isDead && dualFireDelay <= 0) { + beamEntity2.startFiring(target); + } + } else { + beamEntity2.setDead(); + } + + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class + } + + @Override + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; + + // Spawn beam in charging mode on first tick of windup + if (tick == 1) { + float offsetDist = 1.0f; + + // Create beam in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos1 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[0], offsetDist); + beamEntity = new EntityAbilityBeam( + world, caster, target, + spawnPos1.xCoord, spawnPos1.yCoord, spawnPos1.zCoord, + beamWidth, headSize, + colorData[0], combatData, homingData, lightningData[0], lifespanData, + lockMovement.locksActive()); + + Vec3 spawnPos2 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[1], offsetDist); + beamEntity2 = new EntityAbilityBeam( + world, caster, target, + spawnPos2.xCoord, spawnPos2.yCoord, spawnPos2.zCoord, + beamWidth, headSize, + colorData[1], combatData, homingData, lightningData[1], lifespanData, + lockMovement.locksActive()); + + beamEntity.setSiblingUUID(beamEntity2.getPersistentID()); + beamEntity2.setSiblingUUID(beamEntity.getPersistentID()); + + beamEntity.setupCharging(anchorData[0], windUpTicks, offsetDist); + beamEntity2.setupCharging(anchorData[1], windUpTicks, offsetDist); + + beamEntity.setEffects(this.effects); + if (dualFire) beamEntity2.setEffects(this.effects); + + world.spawnEntityInWorld(beamEntity); + world.spawnEntityInWorld(beamEntity2); + } + } + + @Override + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + // Signal completion when entity dies + if (dualFire) { + if ((beamEntity == null || beamEntity.isDead) && (beamEntity2 == null || beamEntity2.isDead)) { + beamEntity = null; + beamEntity2 = null; + signalCompletion(); + } + + if (tick == dualFireDelay && beamEntity2 != null && !beamEntity2.isDead) { + beamEntity2.startFiring(target); + } + } else { + if (beamEntity == null || beamEntity.isDead) { + beamEntity = null; + signalCompletion(); + } + } + } + + @Override + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + } + + @Override + public void cleanup() { + // Despawn beam entity if still alive + if (beamEntity != null && !beamEntity.isDead) { + beamEntity.setDead(); + } + + if (beamEntity2 != null && !beamEntity2.isDead) { + beamEntity2.setDead(); + } + + beamEntity = null; + beamEntity2 = null; + } + + @Override + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create circle telegraph at target position + Telegraph telegraph = Telegraph.circle(headSize * 2.0f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return headSize * 2.0f; + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("beamWidth", beamWidth); + nbt.setFloat("headSize", headSize); + nbt.setBoolean("dualFire", dualFire); + nbt.setInteger("dualFireDelay", dualFireDelay); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lifespanData.writeNBT(nbt); + + NBTTagCompound beam1 = new NBTTagCompound(); + NBTTagCompound beam2 = new NBTTagCompound(); + + anchorData[0].writeNBT(beam1); + anchorData[1].writeNBT(beam2); + colorData[0].writeNBT(beam1); + colorData[1].writeNBT(beam2); + lightningData[0].writeNBT(beam1); + lightningData[1].writeNBT(beam2); + + nbt.setTag("Beam_1", beam1); + nbt.setTag("Beam_2", beam2); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + NBTTagCompound beam1 = nbt.hasKey("Beam_1") ? nbt.getCompoundTag("Beam_1") : new NBTTagCompound(); + NBTTagCompound beam2 = nbt.hasKey("Beam_2") ? nbt.getCompoundTag("Beam_2") : new NBTTagCompound(); + + this.beamWidth = nbt.hasKey("beamWidth") ? nbt.getFloat("beamWidth") : 0.4f; + this.headSize = nbt.hasKey("headSize") ? nbt.getFloat("headSize") : 0.6f; + this.dualFire = !nbt.hasKey("dualFire") || nbt.getBoolean("dualFire"); + this.dualFireDelay = nbt.hasKey("dualFireDelay") ? nbt.getInteger("dualFireDelay") : 0; + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lifespanData.readNBT(nbt); + + anchorData[0].readNBT(beam1); + anchorData[1].readNBT(beam2); + colorData[0].readNBT(beam1); + colorData[1].readNBT(beam2); + lightningData[0].readNBT(beam1); + lightningData[1].readNBT(beam2); + } + + // Getters & Setters - Standalone fields + public float getBeamWidth() { return beamWidth; } + public void setBeamWidth(float beamWidth) { this.beamWidth = beamWidth; } + public float getHeadSize() { return headSize; } + public void setHeadSize(float headSize) { this.headSize = headSize; } + public boolean isDualFire() { return dualFire; } + public void setDualFire(boolean dualFire) { this.dualFire = dualFire; } + public int getDualFireDelay() { return dualFireDelay; } + public void setDualFireDelay(int dualFireDelay) { this.dualFireDelay = dualFireDelay; } + + private EnergyColorData getColorData(int beam) { + beam = ValueUtil.clamp(beam, 0, 1); + return colorData[beam]; + } + private EnergyLightningData getLightningData(int beam) { + beam = ValueUtil.clamp(beam, 0, 1); + return lightningData[beam]; + } + private EnergyAnchorData getAnchorData(int beam) { + beam = ValueUtil.clamp(beam, 0, 1); + return anchorData[beam]; + } + + // Getters & Setters - Color data + public int getInnerColor(int beam) { return getColorData(beam).innerColor; } + public void setInnerColor(int beam, int innerColor) { getColorData(beam).innerColor = innerColor; } + public int getOuterColor(int beam) { return getColorData(beam).outerColor; } + public void setOuterColor(int beam, int outerColor) { getColorData(beam).outerColor = outerColor; } + public boolean isOuterColorEnabled(int beam) { return getColorData(beam).outerColorEnabled; } + public void setOuterColorEnabled(int beam, boolean enabled) { getColorData(beam).outerColorEnabled = enabled; } + public float getOuterColorWidth(int beam) { return getColorData(beam).outerColorWidth; } + public void setOuterColorWidth(int beam, float width) { getColorData(beam).outerColorWidth = width; } + public float getOuterColorAlpha(int beam) { return getColorData(beam).outerColorAlpha; } + public void setOuterColorAlpha(int beam, float alpha) { getColorData(beam).outerColorAlpha = alpha; } + public float getRotationSpeed(int beam) { return getColorData(beam).rotationSpeed; } + public void setRotationSpeed(int beam, float speed) { getColorData(beam).rotationSpeed = speed; } + + + public int getInnerColor() { return getInnerColor(0); } + public void setInnerColor(int innerColor) { setInnerColor(0, innerColor); } + public int getOuterColor() { return getOuterColor(0); } + public void setOuterColor(int outerColor) { setOuterColor(0, outerColor); } + public boolean isOuterColorEnabled() { return isOuterColorEnabled(0); } + public void setOuterColorEnabled(boolean enabled) { setOuterColorEnabled(0, enabled); } + public float getOuterColorWidth() { return getOuterColorWidth(0); } + public void setOuterColorWidth(float width) { setOuterColorWidth(0, width); } + public float getOuterColorAlpha() { return getOuterColorAlpha(0); } + public void setOuterColorAlpha(float alpha) { setOuterColorAlpha(0, alpha); } + public float getRotationSpeed() { return getRotationSpeed(0); } + public void setRotationSpeed(float speed) { setRotationSpeed(0, speed); } + + // Getters & Setters - Combat data + public float getDamage() { return combatData.damage; } + public void setDamage(float damage) { this.combatData.damage = damage; } + public float getKnockback() { return combatData.knockback; } + public void setKnockback(float knockback) { this.combatData.knockback = knockback; } + public float getKnockbackUp() { return combatData.knockbackUp; } + public void setKnockbackUp(float knockbackUp) { this.combatData.knockbackUp = knockbackUp; } + public boolean isExplosive() { return combatData.explosive; } + public void setExplosive(boolean explosive) { this.combatData.explosive = explosive; } + public float getExplosionRadius() { return combatData.explosionRadius; } + public void setExplosionRadius(float explosionRadius) { this.combatData.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { this.combatData.explosionDamageFalloff = explosionDamageFalloff; } + + // Getters & Setters - Homing data + public float getSpeed() { return homingData.speed; } + public void setSpeed(float speed) { this.homingData.speed = speed; } + public boolean isHoming() { return homingData.homing; } + public void setHoming(boolean homing) { this.homingData.homing = homing; } + public float getHomingStrength() { return homingData.homingStrength; } + public void setHomingStrength(float homingStrength) { this.homingData.homingStrength = homingStrength; } + public float getHomingRange() { return homingData.homingRange; } + public void setHomingRange(float homingRange) { this.homingData.homingRange = homingRange; } + + // Getters & Setters - Lightning data + public boolean hasLightningEffect(int beam) { return getLightningData(beam).lightningEffect; } + public void setLightningEffect(int beam, boolean lightningEffect) { getLightningData(beam).lightningEffect = lightningEffect; } + public float getLightningDensity(int beam) { return getLightningData(beam).lightningDensity; } + public void setLightningDensity(int beam, float lightningDensity) { getLightningData(beam).lightningDensity = lightningDensity; } + public float getLightningRadius(int beam) { return getLightningData(beam).lightningRadius; } + public void setLightningRadius(int beam, float lightningRadius) { getLightningData(beam).lightningRadius = lightningRadius; } + + public boolean hasLightningEffect() { return hasLightningEffect(0); } + public void setLightningEffect(boolean lightningEffect) { setLightningEffect(0, lightningEffect); } + public float getLightningDensity() { return getLightningDensity(0); } + public void setLightningDensity(float lightningDensity) { setLightningDensity(0, lightningDensity); } + public float getLightningRadius() { return getLightningRadius(0); } + public void setLightningRadius(float lightningRadius) { setLightningRadius(0, lightningRadius); } + + + // Getters & Setters - Lifespan data + public float getMaxDistance() { return lifespanData.maxDistance; } + public void setMaxDistance(float maxDistance) { this.lifespanData.maxDistance = maxDistance; } + public int getMaxLifetime() { return lifespanData.maxLifetime; } + public void setMaxLifetime(int maxLifetime) { this.lifespanData.maxLifetime = maxLifetime; } + + // Getters & Setters - Anchor point + public AnchorPoint getAnchorPointEnum(int beam) { return getAnchorData(beam).anchorPoint; } + public void setAnchorPointEnum(int beam, AnchorPoint anchorPoint) { getAnchorData(beam).anchorPoint = anchorPoint; } + public float getAnchorOffsetX(int beam) { return getAnchorData(beam).anchorOffsetX; } + public void setAnchorOffsetX(int beam, float x) { getAnchorData(beam).anchorOffsetX = x; } + public float getAnchorOffsetY(int beam) { return getAnchorData(beam).anchorOffsetY; } + public void setAnchorOffsetY(int beam, float y) { getAnchorData(beam).anchorOffsetY = y; } + public float getAnchorOffsetZ(int beam) { return getAnchorData(beam).anchorOffsetZ; } + public void setAnchorOffsetZ(int beam, float z) { getAnchorData(beam).anchorOffsetZ = z; } + + public AnchorPoint getAnchorPointEnum() { return getAnchorPointEnum(0); } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { setAnchorPointEnum(0, anchorPoint); } + public float getAnchorOffsetX() { return getAnchorOffsetX(0); } + public void setAnchorOffsetX(float x) { setAnchorOffsetX(0, x); } + public float getAnchorOffsetY() { return getAnchorOffsetY(0); } + public void setAnchorOffsetY(float y) { setAnchorOffsetY(0, y); } + public float getAnchorOffsetZ() { return getAnchorOffsetZ(0); } + public void setAnchorOffsetZ(float z) { setAnchorOffsetZ(0, z); } + + //@Override + public int getAnchorPoint(int beam) { return getAnchorData(beam).anchorPoint.ordinal(); } + public int getAnchorPoint() { return getAnchorData(0).anchorPoint.ordinal(); } + + //@Override + public void setAnchorPoint(int beam, int point) { getAnchorData(beam).anchorPoint = AnchorPoint.fromOrdinal(point); } + public void setAnchorPoint(int point) { getAnchorData(0).anchorPoint = AnchorPoint.fromOrdinal(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + EntityAbilityBeam beam = new EntityAbilityBeam(npc.worldObj); + beam.setupPreview(npc, beamWidth, headSize, colorData[0], lightningData[0], anchorData[0], windUpTicks, 1.0f); + return beam; + } + + @Override + public int getPreviewActiveDuration() { + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index a9cfffc43..bceae89aa 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -15,6 +15,7 @@ import noppes.npcs.LogWriter; import java.util.ArrayList; import java.util.List; +import java.util.UUID; /** * Beam projectile - head with trailing path that curves with homing. @@ -32,6 +33,7 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { private boolean homing = true; private float homingStrength = 0.35f; // Increased from 0.15 for better tracking private float homingRange = 20.0f; + private UUID siblingUUID = null; // Beam shape properties private float beamWidth = 0.3f; @@ -646,6 +648,12 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { } } + @Override + protected boolean shouldIgnoreEntity(Entity entity) { + if (entity.getPersistentID().equals(siblingUUID)) return true; + return super.shouldIgnoreEntity(entity); + } + // ==================== GETTERS FOR RENDERER ==================== public float getBeamWidth() { @@ -744,6 +752,18 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { return trailFadeTime; } + public UUID getSiblingUUID() { + return siblingUUID; + } + + public void setSiblingUUID(UUID siblingUUID) { + if (siblingUUID == null) + return; + + if (this.siblingUUID == null) + this.siblingUUID = siblingUUID; + } + // ==================== NBT ==================== @Override @@ -787,6 +807,8 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { )); } } + + this.siblingUUID = nbt.hasKey("SiblingUUID") ? UUID.fromString(nbt.getString("SiblingUUID")) : null; } @Override @@ -821,5 +843,6 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { trailList.appendTag(pointNbt); } nbt.setTag("Trail", trailList); + nbt.setString("SiblingUUID", siblingUUID.toString()); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java new file mode 100644 index 000000000..87144adfc --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java @@ -0,0 +1,328 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.type.AbilityDualBeam; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.*; + +import java.util.List; + +public class SubGuiAbilityDualBeam extends SubGuiAbilityConfig { + private final AbilityDualBeam beam; + private int editingVisualColorId = 0; + private int editingBeam = 0; + + public SubGuiAbilityDualBeam(AbilityDualBeam ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.beam = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Speed + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, beam.getDamage())); + + addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, beam.getSpeed())); + + y += 24; + + // Row 2: Beam Width + Head Size + addLabel(new GuiNpcLabel(102, "ability.beamWidth", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, beam.getBeamWidth())); + + addLabel(new GuiNpcLabel(103, "ability.headSize", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, beam.getHeadSize())); + + y += 24; + + // Row 3: Homing + Homing Strength (only show strength if homing) + addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); + + if (beam.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, beam.getHomingStrength())); + } + + y += 24; + + // Row 4: Max Distance (+ Homing Range only if homing) + if (beam.isHoming()) { + addLabel(new GuiNpcLabel(106, "ability.homingRange", labelX, y + 5)); + addTextField(createFloatField(106, fieldX, y, 50, beam.getHomingRange())); + } + + addLabel(new GuiNpcLabel(107, "ability.maxDist", beam.isHoming() ? col2LabelX : labelX, y + 5)); + addTextField(createFloatField(107, beam.isHoming() ? col2FieldX : fieldX, y, 50, beam.getMaxDistance())); + + y += 24; + + // Row 5: Explosive + Explosion Radius (only show radius if explosive) + addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); + GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); + + if (beam.isExplosive()) { + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, beam.getExplosionRadius())); + } + + y += 24; + + // Row 6: Knockback + Max Lifetime + addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(110, fieldX, y, 50, beam.getKnockback())); + + addLabel(new GuiNpcLabel(111, "ability.lifetime", col2LabelX, y + 5)); + addTextField(createIntField(111, col2FieldX, y, 50, beam.getMaxLifetime())); + + y += 24; + + addLabel(new GuiNpcLabel(112, "ability.dualFire", labelX, y + 5)); + addButton(new GuiNpcButtonYesNo(112, fieldX, y, beam.isDualFire())); + + if (beam.isDualFire()) { + addLabel(new GuiNpcLabel(113, "ability.dualFireDelay", col2LabelX, y + 5)); + addTextField(createIntField(113, col2FieldX, y, 50, beam.getDualFireDelay())); + } + + y += 24; + + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPointEnum(editingBeam).ordinal()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); + + y += 24; + + // Row 2: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", beam.getInnerColor(editingBeam) & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(beam.getInnerColor(editingBeam) & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", beam.getOuterColor(editingBeam) & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(beam.getOuterColor(editingBeam) & 0xFFFFFF); + outerColorBtn.setEnabled(beam.isOuterColorEnabled(editingBeam)); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isOuterColorEnabled(editingBeam) ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, beam.getOuterColorWidth(editingBeam)); + widthField.setEnabled(beam.isOuterColorEnabled(editingBeam)); + addTextField(widthField); + + y += 24; + + // Row 3: Rotation Speed + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, beam.getOuterColorAlpha(editingBeam)); + alphaField.setEnabled(beam.isOuterColorEnabled(editingBeam)); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(205, col2FieldX, y, 50, beam.getRotationSpeed(editingBeam))); + + y += 24; + + // Row 4: Lightning Effect Enabled (only affects head) + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect(editingBeam) ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); + + // Only show Lightning settings if Lightning is enabled + if (beam.hasLightningEffect(editingBeam)) { + y += 24; + + // Row 5: Density + Radius + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + beam.getLightningDensity(editingBeam)); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + beam.getLightningRadius(editingBeam)); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } + + y += 24; + + addButton(new GuiNpcButton(400, col2FieldX, y, 55, 20, new String[]{"Beam 1", "Beam 2"}, editingBeam)); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 104: + beam.setHoming(value == 1); + initGui(); + break; + case 108: + beam.setExplosive(value == 1); + initGui(); + break; + case 112: + beam.setDualFire(value == 1); + initGui(); + break; + case 150: + setSubGui(new SubGuiAbilityEffects(beam.getEffects())); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(beam.getInnerColor(editingBeam))); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(beam.getOuterColor(editingBeam))); + break; + case 202: + beam.setOuterColorEnabled(editingBeam, value == 1); + initGui(); + break; + case 206: + beam.setLightningEffect(editingBeam, value == 1); + initGui(); + break; + case 210: + beam.setAnchorPointEnum(editingBeam, AnchorPoint.fromOrdinal(value)); + break; + case 400: + editingBeam = (editingBeam + 1) % 2; + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + beam.setInnerColor(editingBeam, rgb); + } else if (editingVisualColorId == 201) { + beam.setOuterColor(editingBeam, rgb); + } + editingVisualColorId = 0; + initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + beam.setEffects(result); + } + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + beam.setDamage(parseFloat(field, beam.getDamage())); + break; + case 101: + beam.setSpeed(parseFloat(field, beam.getSpeed())); + break; + case 102: + beam.setBeamWidth(parseFloat(field, beam.getBeamWidth())); + break; + case 103: + beam.setHeadSize(parseFloat(field, beam.getHeadSize())); + break; + case 105: + beam.setHomingStrength(parseFloat(field, beam.getHomingStrength())); + break; + case 106: + beam.setHomingRange(parseFloat(field, beam.getHomingRange())); + break; + case 107: + beam.setMaxDistance(parseFloat(field, beam.getMaxDistance())); + break; + case 109: + beam.setExplosionRadius(parseFloat(field, beam.getExplosionRadius())); + break; + case 110: + beam.setKnockback(parseFloat(field, beam.getKnockback())); + break; + case 111: + beam.setMaxLifetime(field.getInteger()); + break; + case 113: + beam.setDualFireDelay(field.getInteger()); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + beam.setOuterColorWidth(editingBeam, parseFloat(field, beam.getOuterColorWidth(editingBeam))); + break; + case 204: + beam.setOuterColorAlpha(editingBeam, parseFloat(field, beam.getOuterColorAlpha(editingBeam))); + break; + case 205: + beam.setRotationSpeed(editingBeam, parseFloat(field, beam.getRotationSpeed(editingBeam))); + break; + case 207: + beam.setLightningDensity(editingBeam, parseFloat(field, beam.getLightningDensity(editingBeam))); + break; + case 208: + beam.setLightningRadius(editingBeam, parseFloat(field, beam.getLightningRadius(editingBeam))); + break; + } + } +} From e9f22dab2a59ab3fb4e98edeb0c70ccb923c7627 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 21:56:14 -0300 Subject: [PATCH 54/85] Added Dual Orb Ability --- .../data/ability/AbilityController.java | 1 + .../data/ability/type/AbilityDualOrb.java | 481 ++++++++++++++++++ .../kamkeel/npcs/entity/EntityAbilityOrb.java | 15 + .../ability/SubGuiAbilityDualOrb.java | 313 ++++++++++++ 4 files changed, 810 insertions(+) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 5b3c15e05..5603ac4ff 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -363,6 +363,7 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:sweeper", AbilitySweeper::new); registerType("cnpc:projectile", AbilityProjectile::new); registerType("cnpc:orb", AbilityOrb::new); + registerType("cnpc:dual_orb", AbilityDualOrb::new); registerType("cnpc:disc", AbilityDisc::new); registerType("cnpc:laser_shot", AbilityLaserShot::new); registerType("cnpc:beam", AbilityEnergyBeam::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java new file mode 100644 index 000000000..baddfb910 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java @@ -0,0 +1,481 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.util.AnchorPointHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualOrb; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.util.ValueUtil; + +public class AbilityDualOrb extends Ability { + // Ability-specific properties + private float orbSize = 1.0f; + private boolean dualFire= true; + private int dualFireDelay = 20; + + // Data classes for energy properties + public final EnergyColorData[] colorData = new EnergyColorData[]{ + new EnergyColorData(), new EnergyColorData() + }; + public final EnergyCombatData combatData = new EnergyCombatData(); + public final EnergyHomingData homingData = new EnergyHomingData(); + public final EnergyLightningData[] lightningData = new EnergyLightningData[]{ + new EnergyLightningData(), new EnergyLightningData() + }; + public final EnergyLifespanData lifespanData = new EnergyLifespanData(); + private EnergyAnchorData[] anchorData = new EnergyAnchorData[]{ + new EnergyAnchorData(AnchorPoint.RIGHT_HAND), new EnergyAnchorData(AnchorPoint.LEFT_HAND) + }; + + // Transient state for orb entity (used during windup charging) + private transient EntityAbilityOrb orbEntity = null; + private transient EntityAbilityOrb orbEntity2 = null; + + public AbilityDualOrb() { + this.typeId = "ability.cnpc.dual_orb"; + this.name = "Dual Orb"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 25.0f; + this.minRange = 5.0f; + this.cooldownTicks = 0; + this.windUpTicks = 30; + this.lockMovement = LockMovementType.WINDUP; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; + // Default built-in animation + this.windUpAnimationName = "Ability_DualBeam_Windup"; + this.activeAnimationName = "Ability_DualBeam_Active"; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityDualOrb(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { + if (world.isRemote) { + signalCompletion(); + return; + } + + // Start moving the orb that was spawned during windup + if (orbEntity != null && !orbEntity.isDead) { + orbEntity.startMoving(target); + } + + if (dualFire) { + if (orbEntity2 != null && !orbEntity2.isDead && dualFireDelay <= 0) { + orbEntity2.startMoving(target); + } + } else { + orbEntity2.setDead(); + } + + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class + } + + @Override + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; + + // Spawn orb in charging mode on first tick of windup + if (tick == 1) { + // Create orb in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos1 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[0]); + orbEntity = new EntityAbilityOrb( + world, caster, target, + spawnPos1.xCoord, spawnPos1.yCoord, spawnPos1.zCoord, orbSize, + colorData[0], combatData, homingData, lightningData[0], lifespanData); + + Vec3 spawnPos2 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[1]); + orbEntity2 = new EntityAbilityOrb( + world, caster, target, + spawnPos2.xCoord, spawnPos2.yCoord, spawnPos2.zCoord, orbSize, + colorData[1], combatData, homingData, lightningData[1], lifespanData); + + orbEntity.setSiblingUUID(orbEntity2.getPersistentID()); + orbEntity2.setSiblingUUID(orbEntity.getPersistentID()); + + orbEntity.setupCharging(anchorData[0], windUpTicks); + orbEntity2.setupCharging(anchorData[1], windUpTicks); + + orbEntity.setEffects(this.effects); + + if (dualFire) { + orbEntity2.setEffects(this.effects); + } + + world.spawnEntityInWorld(orbEntity); + world.spawnEntityInWorld(orbEntity2); + } + } + + @Override + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + // Signal completion when entity dies + if (dualFire) { + if ((orbEntity == null || orbEntity.isDead) && (orbEntity2 == null || orbEntity2.isDead)) { + orbEntity = null; + orbEntity2 = null; + signalCompletion(); + } + + if (tick == dualFireDelay && orbEntity2 != null && !orbEntity2.isDead) { + orbEntity2.startMoving(target); + } + } else { + if (orbEntity == null || orbEntity.isDead) { + orbEntity = null; + signalCompletion(); + } + } + } + + @Override + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + // Nothing to clean up - entity manages itself + } + + @Override + public void cleanup() { + // Despawn orb entity if still alive + if (orbEntity != null && !orbEntity.isDead) { + orbEntity.setDead(); + } + + if (orbEntity2 != null && !orbEntity2.isDead) { + orbEntity2.setDead(); + } + + orbEntity = null; + orbEntity2 = null; + } + + @Override + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create small circle telegraph at target position + Telegraph telegraph = Telegraph.circle(orbSize * 1.5f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return orbSize * 1.5f; + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("orbSize", orbSize); + nbt.setBoolean("dualFire", dualFire); + nbt.setInteger("dualFireDelay", dualFireDelay); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lifespanData.writeNBT(nbt); + // Backward compat: old key was "orbSpeed" + nbt.setFloat("orbSpeed", homingData.speed); + + NBTTagCompound orb1 = new NBTTagCompound(); + NBTTagCompound orb2 = new NBTTagCompound(); + + anchorData[0].writeNBT(orb1); + anchorData[1].writeNBT(orb2); + colorData[0].writeNBT(orb1); + colorData[1].writeNBT(orb2); + lightningData[0].writeNBT(orb1); + lightningData[1].writeNBT(orb2); + + nbt.setTag("Orb_1", orb1); + nbt.setTag("Orb_2", orb2); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + NBTTagCompound orb1 = nbt.hasKey("Orb_1") ? nbt.getCompoundTag("Orb_1") : new NBTTagCompound(); + NBTTagCompound orb2 = nbt.hasKey("Orb_2") ? nbt.getCompoundTag("Orb_2") : new NBTTagCompound(); + + this.orbSize = nbt.hasKey("orbSize") ? nbt.getFloat("orbSize") : 1.0f; + this.dualFire = !nbt.hasKey("dualFire") || nbt.getBoolean("dualFire"); + this.dualFireDelay = nbt.hasKey("dualFireDelay") ? nbt.getInteger("dualFireDelay") : 0; + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lifespanData.readNBT(nbt); + // Backward compat: old key was "orbSpeed" + if (nbt.hasKey("orbSpeed")) { + homingData.speed = nbt.getFloat("orbSpeed"); + } + + anchorData[0].readNBT(orb1); + anchorData[1].readNBT(orb2); + colorData[0].readNBT(orb1); + colorData[1].readNBT(orb2); + lightningData[0].readNBT(orb1); + lightningData[1].readNBT(orb2); + } + + // Getters & Setters + private EnergyColorData getColorData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return colorData[orb]; + } + private EnergyLightningData getLightningData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return lightningData[orb]; + } + private EnergyAnchorData getAnchorData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return anchorData[orb]; + } + + public float getOrbSpeed() { + return homingData.speed; + } + + public void setOrbSpeed(float orbSpeed) { + homingData.speed = orbSpeed; + } + + public float getOrbSize() { + return orbSize; + } + + public void setOrbSize(float orbSize) { + this.orbSize = orbSize; + } + + public boolean isDualFire() { + return dualFire; + } + + public void setDualFire(boolean dualFire) { + this.dualFire = dualFire; + } + + public int getDualFireDelay() { + return dualFireDelay; + } + + public void setDualFireDelay(int dualFireDelay) { + this.dualFireDelay = dualFireDelay; + } + + public float getMaxDistance() { + return lifespanData.maxDistance; + } + + public void setMaxDistance(float maxDistance) { + lifespanData.maxDistance = maxDistance; + } + + public int getMaxLifetime() { + return lifespanData.maxLifetime; + } + + public void setMaxLifetime(int maxLifetime) { + lifespanData.maxLifetime = maxLifetime; + } + + public float getDamage() { + return combatData.damage; + } + + public void setDamage(float damage) { + combatData.damage = damage; + } + + public float getKnockback() { + return combatData.knockback; + } + + public void setKnockback(float knockback) { + combatData.knockback = knockback; + } + + public float getKnockbackUp() { + return combatData.knockbackUp; + } + + public void setKnockbackUp(float knockbackUp) { + combatData.knockbackUp = knockbackUp; + } + + public boolean isHoming() { + return homingData.homing; + } + + public void setHoming(boolean homing) { + homingData.homing = homing; + } + + public float getHomingStrength() { + return homingData.homingStrength; + } + + public void setHomingStrength(float homingStrength) { + homingData.homingStrength = homingStrength; + } + + public float getHomingRange() { + return homingData.homingRange; + } + + public void setHomingRange(float homingRange) { + homingData.homingRange = homingRange; + } + + public boolean isExplosive() { + return combatData.explosive; + } + + public void setExplosive(boolean explosive) { + combatData.explosive = explosive; + } + + public float getExplosionRadius() { + return combatData.explosionRadius; + } + + public void setExplosionRadius(float explosionRadius) { + combatData.explosionRadius = explosionRadius; + } + + public float getExplosionDamageFalloff() { + return combatData.explosionDamageFalloff; + } + + public void setExplosionDamageFalloff(float explosionDamageFalloff) { + combatData.explosionDamageFalloff = explosionDamageFalloff; + } + + + public int getInnerColor(int orb) { return getColorData(orb).innerColor; } + public void setInnerColor(int orb, int innerColor) { getColorData(orb).innerColor = innerColor; } + public int getOuterColor(int orb) { return getColorData(orb).outerColor; } + public void setOuterColor(int orb, int outerColor) { getColorData(orb).outerColor = outerColor; } + public boolean isOuterColorEnabled(int orb) { return getColorData(orb).outerColorEnabled; } + public void setOuterColorEnabled(int orb, boolean enabled) { getColorData(orb).outerColorEnabled = enabled; } + public float getOuterColorWidth(int orb) { return getColorData(orb).outerColorWidth; } + public void setOuterColorWidth(int orb, float width) { getColorData(orb).outerColorWidth = width; } + public float getOuterColorAlpha(int orb) { return getColorData(orb).outerColorAlpha; } + public void setOuterColorAlpha(int orb, float alpha) { getColorData(orb).outerColorAlpha = alpha; } + public float getRotationSpeed(int orb) { return getColorData(orb).rotationSpeed; } + public void setRotationSpeed(int orb, float speed) { getColorData(orb).rotationSpeed = speed; } + + public int getInnerColor() { return getInnerColor(0); } + public void setInnerColor(int innerColor) { setInnerColor(0, innerColor); } + public int getOuterColor() { return getOuterColor(0); } + public void setOuterColor(int outerColor) { setOuterColor(0, outerColor); } + public boolean isOuterColorEnabled() { return isOuterColorEnabled(0); } + public void setOuterColorEnabled(boolean enabled) { setOuterColorEnabled(0, enabled); } + public float getOuterColorWidth() { return getOuterColorWidth(0); } + public void setOuterColorWidth(float width) { setOuterColorWidth(0, width); } + public float getOuterColorAlpha() { return getOuterColorAlpha(0); } + public void setOuterColorAlpha(float alpha) { setOuterColorAlpha(0, alpha); } + public float getRotationSpeed() { return getRotationSpeed(0); } + public void setRotationSpeed(float speed) { setRotationSpeed(0, speed); } + + + public boolean hasLightningEffect(int orb) { return getLightningData(orb).lightningEffect; } + public void setLightningEffect(int orb, boolean lightningEffect) { getLightningData(orb).lightningEffect = lightningEffect; } + public float getLightningDensity(int orb) { return getLightningData(orb).lightningDensity; } + public void setLightningDensity(int orb, float lightningDensity) { getLightningData(orb).lightningDensity = lightningDensity; } + public float getLightningRadius(int orb) { return getLightningData(orb).lightningRadius; } + public void setLightningRadius(int orb, float lightningRadius) { getLightningData(orb).lightningRadius = lightningRadius; } + + public boolean hasLightningEffect() { return hasLightningEffect(0); } + public void setLightningEffect(boolean lightningEffect) { setLightningEffect(0, lightningEffect); } + public float getLightningDensity() { return getLightningDensity(0); } + public void setLightningDensity(float lightningDensity) { setLightningDensity(0, lightningDensity); } + public float getLightningRadius() { return getLightningRadius(0); } + public void setLightningRadius(float lightningRadius) { setLightningRadius(0, lightningRadius); } + + + public AnchorPoint getAnchorPointEnum(int orb) { return getAnchorData(orb).anchorPoint; } + public void setAnchorPointEnum(int orb, AnchorPoint anchorPoint) { getAnchorData(orb).anchorPoint = anchorPoint; } + public float getAnchorOffsetX(int orb) { return getAnchorData(orb).anchorOffsetX; } + public void setAnchorOffsetX(int orb, float x) { getAnchorData(orb).anchorOffsetX = x; } + public float getAnchorOffsetY(int orb) { return getAnchorData(orb).anchorOffsetY; } + public void setAnchorOffsetY(int orb, float y) { getAnchorData(orb).anchorOffsetY = y; } + public float getAnchorOffsetZ(int orb) { return getAnchorData(orb).anchorOffsetZ; } + public void setAnchorOffsetZ(int orb, float z) { getAnchorData(orb).anchorOffsetZ = z; } + + public AnchorPoint getAnchorPointEnum() { return getAnchorPointEnum(0); } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { setAnchorPointEnum(0, anchorPoint); } + public float getAnchorOffsetX() { return getAnchorOffsetX(0); } + public void setAnchorOffsetX(float x) { setAnchorOffsetX(0, x); } + public float getAnchorOffsetY() { return getAnchorOffsetY(0); } + public void setAnchorOffsetY(float y) { setAnchorOffsetY(0, y); } + public float getAnchorOffsetZ() { return getAnchorOffsetZ(0); } + public void setAnchorOffsetZ(float z) { setAnchorOffsetZ(0, z); } + + //@Override + public int getAnchorPoint(int orb) { return getAnchorData(orb).anchorPoint.ordinal(); } + public int getAnchorPoint() { return getAnchorData(0).anchorPoint.ordinal(); } + + //@Override + public void setAnchorPoint(int orb, int point) { getAnchorData(orb).anchorPoint = AnchorPoint.fromOrdinal(point); } + public void setAnchorPoint(int point) { getAnchorData(0).anchorPoint = AnchorPoint.fromOrdinal(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + EntityAbilityOrb orb = new EntityAbilityOrb(npc.worldObj); + orb.setupPreview(npc, orbSize, colorData[0], lightningData[0], anchorData[0], windUpTicks); + return orb; + } + + @Override + public int getPreviewActiveDuration() { + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index c403f25de..a4384d035 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -12,6 +12,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import java.util.List; +import java.util.UUID; /** * Orb projectile - spherical homing energy ball. @@ -37,6 +38,8 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { // Data watcher index for charging state (synced to clients) private static final int DW_CHARGING = 20; + private UUID siblingUUID = null; + public EntityAbilityOrb(World world) { super(world); } @@ -441,6 +444,18 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { return size; } + public UUID getSiblingUUID() { + return siblingUUID; + } + + public void setSiblingUUID(UUID siblingUUID) { + if (siblingUUID == null) + return; + + if (this.siblingUUID == null) + this.siblingUUID = siblingUUID; + } + // ==================== NBT ==================== @Override diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java new file mode 100644 index 000000000..03a868a05 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java @@ -0,0 +1,313 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.type.AbilityDualOrb; +import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.*; + +import java.util.List; + +public class SubGuiAbilityDualOrb extends SubGuiAbilityConfig { + private final AbilityDualOrb orb; + private int editingVisualColorId = 0; + private int editingOrb = 0; + + public SubGuiAbilityDualOrb(AbilityDualOrb ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.orb = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Speed + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, orb.getDamage())); + + addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, orb.getOrbSpeed())); + + y += 24; + + // Row 2: Orb Size + Max Distance + addLabel(new GuiNpcLabel(102, "stats.size", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, orb.getOrbSize())); + + addLabel(new GuiNpcLabel(103, "ability.maxDist", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, orb.getMaxDistance())); + + y += 24; + + // Row 3: Homing + Homing Strength (only show strength if homing) + addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); + + if (orb.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, orb.getHomingStrength())); + } + + y += 24; + + // Row 4: Explosive + Explosion Radius (only show radius if explosive) + addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); + GuiNpcButton explosiveBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); + + if (orb.isExplosive()) { + addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(107, col2FieldX, y, 50, orb.getExplosionRadius())); + } + + y += 24; + + // Row 5: Knockback + Max Lifetime + addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(108, fieldX, y, 50, orb.getKnockback())); + + addLabel(new GuiNpcLabel(109, "ability.lifetime", col2LabelX, y + 5)); + addTextField(createIntField(109, col2FieldX, y, 50, orb.getMaxLifetime())); + + y += 24; + + addLabel(new GuiNpcLabel(110, "ability.dualFire", labelX, y + 5)); + addButton(new GuiNpcButtonYesNo(110, fieldX, y, orb.isDualFire())); + + if (orb.isDualFire()) { + addLabel(new GuiNpcLabel(111, "ability.dualFireDelay", col2LabelX, y + 5)); + addTextField(createIntField(111, col2FieldX, y, 50, orb.getDualFireDelay())); + } + + y += 24; + + // Row 7: Effects button + addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPointEnum(editingOrb).ordinal()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); + + y += 24; + + // Row 2: Inner Color + Rotation Speed + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", orb.getInnerColor(editingOrb) & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(orb.getInnerColor(editingOrb) & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); + addTextField(createFloatField(205, col2FieldX, y, 55, orb.getRotationSpeed(editingOrb))); + + y += 24; + + // Row 3: Outer Glow Enabled + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isOuterColorEnabled(editingOrb) ? 1 : 0)); + + // Only show Outer Color and Width if Outer Glow is enabled + if (orb.isOuterColorEnabled()) { + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", col2LabelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, col2FieldX, y, 55, orb.getOuterColorAlpha(editingOrb)); + alphaField.setEnabled(orb.isOuterColorEnabled(editingOrb)); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + + y += 24; + + // Row 4: Outer Color + Outer Width + addLabel(new GuiNpcLabel(201, "ability.outerColor", labelX, y + 5)); + String outerHex = String.format("%06X", orb.getOuterColor(editingOrb) & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, fieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(orb.getOuterColor(editingOrb) & 0xFFFFFF); + addButton(outerColorBtn); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + addTextField(createFloatField(203, col2FieldX, y, 55, orb.getOuterColorWidth(editingOrb))); + } + + y += 24; + + // Row 5: Lightning Effect Enabled + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect(editingOrb) ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); + + // Only show Lightning settings if Lightning is enabled + if (orb.hasLightningEffect(editingOrb)) { + y += 24; + + // Row 61: Density + Radius + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + orb.getLightningDensity(editingOrb)); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + orb.getLightningRadius(editingOrb)); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } + + y += 24; + + addButton(new GuiNpcButton(400, col2FieldX, y, 55, 20, new String[]{"Orb 1", "Orb 2"}, editingOrb)); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 104: + orb.setHoming(value == 1); + initGui(); + break; + case 106: + orb.setExplosive(value == 1); + initGui(); + break; + case 110: + orb.setDualFire(value == 1); + initGui(); + break; + case 150: + setSubGui(new SubGuiAbilityEffects(orb.getEffects())); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(orb.getInnerColor(editingOrb))); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(orb.getOuterColor(editingOrb))); + break; + case 202: + orb.setOuterColorEnabled(editingOrb, value == 1); + initGui(); + break; + case 206: + orb.setLightningEffect(editingOrb, value == 1); + initGui(); + break; + case 210: + orb.setAnchorPointEnum(editingOrb, AnchorPoint.fromOrdinal(value)); + break; + case 400: + editingOrb = (editingOrb + 1) % 2; + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + orb.setInnerColor(rgb); + } else if (editingVisualColorId == 201) { + orb.setOuterColor(rgb); + } + editingVisualColorId = 0; + initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + orb.setEffects(result); + } + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + orb.setDamage(parseFloat(field, orb.getDamage())); + break; + case 101: + orb.setOrbSpeed(parseFloat(field, orb.getOrbSpeed())); + break; + case 102: + orb.setOrbSize(parseFloat(field, orb.getOrbSize())); + break; + case 103: + orb.setMaxDistance(parseFloat(field, orb.getMaxDistance())); + break; + case 105: + orb.setHomingStrength(parseFloat(field, orb.getHomingStrength())); + break; + case 107: + orb.setExplosionRadius(parseFloat(field, orb.getExplosionRadius())); + break; + case 108: + orb.setKnockback(parseFloat(field, orb.getKnockback())); + break; + case 109: + orb.setMaxLifetime(field.getInteger()); + break; + case 111: + orb.setDualFireDelay(field.getInteger()); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + orb.setOuterColorWidth(editingOrb, parseFloat(field, orb.getOuterColorWidth(editingOrb))); + break; + case 204: + orb.setOuterColorAlpha(editingOrb, parseFloat(field, orb.getOuterColorAlpha(editingOrb))); + break; + case 205: + orb.setRotationSpeed(editingOrb, parseFloat(field, orb.getRotationSpeed(editingOrb))); + break; + case 207: + orb.setLightningDensity(editingOrb, parseFloat(field, orb.getLightningDensity(editingOrb))); + break; + case 208: + orb.setLightningRadius(editingOrb, parseFloat(field, orb.getLightningRadius(editingOrb))); + break; + } + } +} From 71065fc5208b29de4f8ed4ba44c709a429ffe4d1 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sat, 31 Jan 2026 22:36:12 -0300 Subject: [PATCH 55/85] Added Dual Disc Ability --- .../data/ability/AbilityController.java | 3 +- .../data/ability/type/AbilityDualDisc.java | 410 ++++++++++++++++++ .../npcs/entity/EntityAbilityDisc.java | 17 + .../kamkeel/npcs/entity/EntityAbilityOrb.java | 4 + .../ability/SubGuiAbilityDualDisc.java | 342 +++++++++++++++ .../ability/SubGuiAbilityDualOrb.java | 5 +- .../assets/customnpcs/lang/en_US.lang | 7 + 7 files changed, 784 insertions(+), 4 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 5603ac4ff..43d7bd8bb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -364,7 +364,8 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:projectile", AbilityProjectile::new); registerType("cnpc:orb", AbilityOrb::new); registerType("cnpc:dual_orb", AbilityDualOrb::new); - registerType("cnpc:disc", AbilityDisc::new); + registerType("cnpc:dual_disc", AbilityDisc::new); + registerType("cnpc:dual_disc", AbilityDualDisc::new); registerType("cnpc:laser_shot", AbilityLaserShot::new); registerType("cnpc:beam", AbilityEnergyBeam::new); registerType("cnpc:dual_beam", AbilityDualBeam::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java new file mode 100644 index 000000000..873530119 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java @@ -0,0 +1,410 @@ +package kamkeel.npcs.controllers.data.ability.type; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.LockMovementType; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.telegraph.Telegraph; +import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.util.AnchorPointHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualDisc; +import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.util.ValueUtil; + +public class AbilityDualDisc extends Ability { + + // Disc geometry + private float discRadius = 1.0f; + private float discThickness = 0.2f; + + // Boomerang properties + private boolean boomerang = false; + private int boomerangDelay = 40; + + // Dual properties + private boolean dualFire= true; + private int dualFireDelay = 10; + + // Energy data classes + private EnergyColorData[] colorData = new EnergyColorData[]{ + new EnergyColorData(0xFFFFFF, 0xFF8800, true, 0.4f, 0.5f, 5.0f), + new EnergyColorData(0xFFFFFF, 0x8800FF, true, 0.4f, 0.5f, 5.0f) + }; + private EnergyCombatData combatData = new EnergyCombatData(8.0f, 1.2f, 0.15f, false, 3.0f, 0.5f); + private EnergyHomingData homingData = new EnergyHomingData(0.6f, true, 0.12f, 18.0f); + public final EnergyLightningData[] lightningData = new EnergyLightningData[]{ + new EnergyLightningData(), new EnergyLightningData() + }; + private EnergyLifespanData lifespanData = new EnergyLifespanData(35.0f, 200); + private EnergyAnchorData[] anchorData = new EnergyAnchorData[]{ + new EnergyAnchorData(AnchorPoint.RIGHT_HAND), new EnergyAnchorData(AnchorPoint.LEFT_HAND) + }; + + // Transient state for disc entity (used during windup charging) + private transient EntityAbilityDisc discEntity = null; + private transient EntityAbilityDisc discEntity2 = null; + + public AbilityDualDisc() { + this.typeId = "ability.cnpc.dual_disc"; + this.name = "Dual Disc"; + this.targetingMode = TargetingMode.AGGRO_TARGET; + this.maxRange = 30.0f; + this.minRange = 5.0f; + this.cooldownTicks = 0; + this.windUpTicks = 60; + this.lockMovement = LockMovementType.WINDUP; + this.telegraphType = TelegraphType.CIRCLE; + this.showTelegraph = true; + // Default built-in animations + this.windUpAnimationName = "Ability_DualBeam_Windup"; + this.activeAnimationName = "Ability_DualBeam_Active"; + } + + @Override + public boolean hasTypeSettings() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { + return new SubGuiAbilityDualDisc(this, callback); + } + + @Override + public boolean isTargetingModeLocked() { + return true; + } + + @Override + public TargetingMode[] getAllowedTargetingModes() { + return new TargetingMode[]{TargetingMode.AGGRO_TARGET}; + } + + @Override + public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { + if (world.isRemote) { + signalCompletion(); + return; + } + + // Start moving the orb that was spawned during windup + if (discEntity != null && !discEntity.isDead) { + discEntity.startMoving(target); + } + + if (dualFire) { + if (discEntity2 != null && !discEntity2.isDead && dualFireDelay <= 0) { + discEntity2.startMoving(target); + } + } else { + discEntity2.setDead(); + } + + // Ability stays active until entity dies (prevents firing another while projectile is alive) + // Movement locking is handled separately by the base class + } + + @Override + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; + + // Spawn disc in charging mode on first tick of windup + if (tick == 1) { + // Create disc in charging mode - follows caster based on anchor point during windup + Vec3 spawnPos1 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[0]); + discEntity = new EntityAbilityDisc( + world, caster, target, + spawnPos1.xCoord, spawnPos1.yCoord, spawnPos1.zCoord, + discRadius, discThickness, + colorData[0], combatData, homingData, lightningData[0], lifespanData, + boomerang, boomerangDelay); + + Vec3 spawnPos2 = AnchorPointHelper.calculateAnchorPosition(caster, anchorData[1]); + discEntity2 = new EntityAbilityDisc( + world, caster, target, + spawnPos2.xCoord, spawnPos2.yCoord, spawnPos2.zCoord, + discRadius, discThickness, + colorData[1], combatData, homingData, lightningData[1], lifespanData, + boomerang, boomerangDelay); + + discEntity.setSiblingUUID(discEntity2.getPersistentID()); + discEntity2.setSiblingUUID(discEntity.getPersistentID()); + + discEntity.setupCharging(anchorData[0], windUpTicks); + discEntity2.setupCharging(anchorData[1], windUpTicks); + + discEntity.setEffects(this.effects); + + if (dualFire) { + discEntity2.setEffects(this.effects); + } + + world.spawnEntityInWorld(discEntity); + world.spawnEntityInWorld(discEntity2); + } + } + + @Override + public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + // Signal completion when entity dies + if (dualFire) { + if ((discEntity == null || discEntity.isDead) && (discEntity2 == null || discEntity2.isDead)) { + discEntity = null; + discEntity2 = null; + signalCompletion(); + } + + if (tick == dualFireDelay && discEntity2 != null && !discEntity2.isDead) { + discEntity2.startMoving(target); + } + } else { + if (discEntity == null || discEntity.isDead) { + discEntity = null; + signalCompletion(); + } + } + } + + @Override + public void onComplete(EntityLivingBase caster, EntityLivingBase target) { + } + + @Override + public void cleanup() { + // Despawn disc entity if still alive + if (discEntity != null && !discEntity.isDead) { + discEntity.setDead(); + } + + if (discEntity2 != null && !discEntity2.isDead) { + discEntity2.setDead(); + } + + discEntity = null; + discEntity2 = null; + } + + @Override + public TelegraphInstance createTelegraph(EntityLivingBase caster, EntityLivingBase target) { + if (!showTelegraph || telegraphType == TelegraphType.NONE || target == null) { + return null; + } + + // Create circle telegraph at target position + Telegraph telegraph = Telegraph.circle(discRadius * 1.5f); + telegraph.setDurationTicks(windUpTicks); + telegraph.setColor(windUpColor); + telegraph.setWarningColor(activeColor); + telegraph.setWarningStartTick(Math.max(5, windUpTicks / 4)); + telegraph.setHeightOffset(telegraphHeightOffset); + + // Position at target and follow target during windup + TelegraphInstance instance = new TelegraphInstance(telegraph, target.posX, target.posY, target.posZ, caster.rotationYaw); + instance.setCasterEntityId(caster.getEntityId()); + instance.setEntityIdToFollow(target.getEntityId()); + + return instance; + } + + @Override + public float getTelegraphRadius() { + return discRadius * 1.5f; + } + + @Override + public void writeTypeNBT(NBTTagCompound nbt) { + nbt.setFloat("discRadius", discRadius); + nbt.setFloat("discThickness", discThickness); + nbt.setBoolean("boomerang", boomerang); + nbt.setInteger("boomerangDelay", boomerangDelay); + nbt.setBoolean("dualFire", dualFire); + nbt.setInteger("dualFireDelay", dualFireDelay); + combatData.writeNBT(nbt); + homingData.writeNBT(nbt); + lifespanData.writeNBT(nbt); + + NBTTagCompound disc1 = new NBTTagCompound(); + NBTTagCompound disc2 = new NBTTagCompound(); + + anchorData[0].writeNBT(disc1); + anchorData[1].writeNBT(disc2); + colorData[0].writeNBT(disc1); + colorData[1].writeNBT(disc2); + lightningData[0].writeNBT(disc1); + lightningData[1].writeNBT(disc2); + + nbt.setTag("Disc_1", disc1); + nbt.setTag("Disc_2", disc2); + } + + @Override + public void readTypeNBT(NBTTagCompound nbt) { + NBTTagCompound disc1 = nbt.hasKey("Disc_1") ? nbt.getCompoundTag("Disc_1") : new NBTTagCompound(); + NBTTagCompound disc2 = nbt.hasKey("Disc_2") ? nbt.getCompoundTag("Disc_2") : new NBTTagCompound(); + + this.discRadius = nbt.hasKey("discRadius") ? nbt.getFloat("discRadius") : 1.0f; + this.discThickness = nbt.hasKey("discThickness") ? nbt.getFloat("discThickness") : 0.2f; + this.boomerang = nbt.hasKey("boomerang") && nbt.getBoolean("boomerang"); + this.boomerangDelay = nbt.hasKey("boomerangDelay") ? nbt.getInteger("boomerangDelay") : 40; + this.dualFire = !nbt.hasKey("dualFire") || nbt.getBoolean("dualFire"); + this.dualFireDelay = nbt.hasKey("dualFireDelay") ? nbt.getInteger("dualFireDelay") : 0; + combatData.readNBT(nbt); + homingData.readNBT(nbt); + lifespanData.readNBT(nbt); + + anchorData[0].readNBT(disc1); + anchorData[1].readNBT(disc2); + colorData[0].readNBT(disc1); + colorData[1].readNBT(disc2); + lightningData[0].readNBT(disc1); + lightningData[1].readNBT(disc2); + } + + // Getters & Setters + private EnergyColorData getColorData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return colorData[orb]; + } + private EnergyLightningData getLightningData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return lightningData[orb]; + } + private EnergyAnchorData getAnchorData(int orb) { + orb = ValueUtil.clamp(orb, 0, 1); + return anchorData[orb]; + } + + public boolean isDualFire() { return dualFire; } + public void setDualFire(boolean dualFire) { this.dualFire = dualFire; } + public int getDualFireDelay() { return dualFireDelay; } + public void setDualFireDelay(int dualFireDelay) { this.dualFireDelay = dualFireDelay; } + public float getSpeed() { return homingData.speed; } + public void setSpeed(float speed) { homingData.speed = speed; } + public float getDiscRadius() { return discRadius; } + public void setDiscRadius(float discRadius) { this.discRadius = discRadius; } + public float getDiscThickness() { return discThickness; } + public void setDiscThickness(float discThickness) { this.discThickness = discThickness; } + public float getMaxDistance() { return lifespanData.maxDistance; } + public void setMaxDistance(float maxDistance) { lifespanData.maxDistance = maxDistance; } + public int getMaxLifetime() { return lifespanData.maxLifetime; } + public void setMaxLifetime(int maxLifetime) { lifespanData.maxLifetime = maxLifetime; } + public float getDamage() { return combatData.damage; } + public void setDamage(float damage) { combatData.damage = damage; } + public float getKnockback() { return combatData.knockback; } + public void setKnockback(float knockback) { combatData.knockback = knockback; } + public float getKnockbackUp() { return combatData.knockbackUp; } + public void setKnockbackUp(float knockbackUp) { combatData.knockbackUp = knockbackUp; } + public boolean isHoming() { return homingData.homing; } + public void setHoming(boolean homing) { homingData.homing = homing; } + public float getHomingStrength() { return homingData.homingStrength; } + public void setHomingStrength(float homingStrength) { homingData.homingStrength = homingStrength; } + public float getHomingRange() { return homingData.homingRange; } + public void setHomingRange(float homingRange) { homingData.homingRange = homingRange; } + public boolean isBoomerang() { return boomerang; } + public void setBoomerang(boolean boomerang) { this.boomerang = boomerang; } + public int getBoomerangDelay() { return boomerangDelay; } + public void setBoomerangDelay(int boomerangDelay) { this.boomerangDelay = boomerangDelay; } + public boolean isExplosive() { return combatData.explosive; } + public void setExplosive(boolean explosive) { combatData.explosive = explosive; } + public float getExplosionRadius() { return combatData.explosionRadius; } + public void setExplosionRadius(float explosionRadius) { combatData.explosionRadius = explosionRadius; } + public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } + public void setExplosionDamageFalloff(float explosionDamageFalloff) { combatData.explosionDamageFalloff = explosionDamageFalloff; } + + + public int getInnerColor(int orb) { return getColorData(orb).innerColor; } + public void setInnerColor(int orb, int innerColor) { getColorData(orb).innerColor = innerColor; } + public int getOuterColor(int orb) { return getColorData(orb).outerColor; } + public void setOuterColor(int orb, int outerColor) { getColorData(orb).outerColor = outerColor; } + public boolean isOuterColorEnabled(int orb) { return getColorData(orb).outerColorEnabled; } + public void setOuterColorEnabled(int orb, boolean enabled) { getColorData(orb).outerColorEnabled = enabled; } + public float getOuterColorWidth(int orb) { return getColorData(orb).outerColorWidth; } + public void setOuterColorWidth(int orb, float width) { getColorData(orb).outerColorWidth = width; } + public float getOuterColorAlpha(int orb) { return getColorData(orb).outerColorAlpha; } + public void setOuterColorAlpha(int orb, float alpha) { getColorData(orb).outerColorAlpha = alpha; } + public float getRotationSpeed(int orb) { return getColorData(orb).rotationSpeed; } + public void setRotationSpeed(int orb, float speed) { getColorData(orb).rotationSpeed = speed; } + + public int getInnerColor() { return getInnerColor(0); } + public void setInnerColor(int innerColor) { setInnerColor(0, innerColor); } + public int getOuterColor() { return getOuterColor(0); } + public void setOuterColor(int outerColor) { setOuterColor(0, outerColor); } + public boolean isOuterColorEnabled() { return isOuterColorEnabled(0); } + public void setOuterColorEnabled(boolean enabled) { setOuterColorEnabled(0, enabled); } + public float getOuterColorWidth() { return getOuterColorWidth(0); } + public void setOuterColorWidth(float width) { setOuterColorWidth(0, width); } + public float getOuterColorAlpha() { return getOuterColorAlpha(0); } + public void setOuterColorAlpha(float alpha) { setOuterColorAlpha(0, alpha); } + public float getRotationSpeed() { return getRotationSpeed(0); } + public void setRotationSpeed(float speed) { setRotationSpeed(0, speed); } + + + public boolean hasLightningEffect(int orb) { return getLightningData(orb).lightningEffect; } + public void setLightningEffect(int orb, boolean lightningEffect) { getLightningData(orb).lightningEffect = lightningEffect; } + public float getLightningDensity(int orb) { return getLightningData(orb).lightningDensity; } + public void setLightningDensity(int orb, float lightningDensity) { getLightningData(orb).lightningDensity = lightningDensity; } + public float getLightningRadius(int orb) { return getLightningData(orb).lightningRadius; } + public void setLightningRadius(int orb, float lightningRadius) { getLightningData(orb).lightningRadius = lightningRadius; } + + public boolean hasLightningEffect() { return hasLightningEffect(0); } + public void setLightningEffect(boolean lightningEffect) { setLightningEffect(0, lightningEffect); } + public float getLightningDensity() { return getLightningDensity(0); } + public void setLightningDensity(float lightningDensity) { setLightningDensity(0, lightningDensity); } + public float getLightningRadius() { return getLightningRadius(0); } + public void setLightningRadius(float lightningRadius) { setLightningRadius(0, lightningRadius); } + + + public AnchorPoint getAnchorPointEnum(int orb) { return getAnchorData(orb).anchorPoint; } + public void setAnchorPointEnum(int orb, AnchorPoint anchorPoint) { getAnchorData(orb).anchorPoint = anchorPoint; } + public float getAnchorOffsetX(int orb) { return getAnchorData(orb).anchorOffsetX; } + public void setAnchorOffsetX(int orb, float x) { getAnchorData(orb).anchorOffsetX = x; } + public float getAnchorOffsetY(int orb) { return getAnchorData(orb).anchorOffsetY; } + public void setAnchorOffsetY(int orb, float y) { getAnchorData(orb).anchorOffsetY = y; } + public float getAnchorOffsetZ(int orb) { return getAnchorData(orb).anchorOffsetZ; } + public void setAnchorOffsetZ(int orb, float z) { getAnchorData(orb).anchorOffsetZ = z; } + + public AnchorPoint getAnchorPointEnum() { return getAnchorPointEnum(0); } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { setAnchorPointEnum(0, anchorPoint); } + public float getAnchorOffsetX() { return getAnchorOffsetX(0); } + public void setAnchorOffsetX(float x) { setAnchorOffsetX(0, x); } + public float getAnchorOffsetY() { return getAnchorOffsetY(0); } + public void setAnchorOffsetY(float y) { setAnchorOffsetY(0, y); } + public float getAnchorOffsetZ() { return getAnchorOffsetZ(0); } + public void setAnchorOffsetZ(float z) { setAnchorOffsetZ(0, z); } + + //@Override + public int getAnchorPoint(int orb) { return getAnchorData(orb).anchorPoint.ordinal(); } + public int getAnchorPoint() { return getAnchorData(0).anchorPoint.ordinal(); } + + //@Override + public void setAnchorPoint(int orb, int point) { getAnchorData(orb).anchorPoint = AnchorPoint.fromOrdinal(point); } + public void setAnchorPoint(int point) { getAnchorData(0).anchorPoint = AnchorPoint.fromOrdinal(point); } + + @Override + @SideOnly(Side.CLIENT) + public Entity createPreviewEntity(EntityNPCInterface npc) { + if (npc == null || npc.worldObj == null) return null; + + EntityAbilityDisc disc = new EntityAbilityDisc(npc.worldObj); + disc.setupPreview(npc, discRadius, discThickness, colorData[0], lightningData[0], anchorData[0], windUpTicks); + return disc; + } + + @Override + public int getPreviewActiveDuration() { + return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; + } +} diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index 7dc3a8a82..d0005c7e0 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -12,6 +12,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import java.util.List; +import java.util.UUID; /** * Disc projectile - flat spinning disc with optional boomerang behavior. @@ -48,6 +49,8 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Data watcher index for charging state (synced to clients) private static final int DW_CHARGING = 20; + private UUID siblingUUID = null; + public EntityAbilityDisc(World world) { super(world); } @@ -565,6 +568,18 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { return returning; } + public UUID getSiblingUUID() { + return siblingUUID; + } + + public void setSiblingUUID(UUID siblingUUID) { + if (siblingUUID == null) + return; + + if (this.siblingUUID == null) + this.siblingUUID = siblingUUID; + } + // ==================== NBT ==================== @Override @@ -587,6 +602,7 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { this.targetDiscRadius = nbt.hasKey("TargetDiscRadius") ? nbt.getFloat("TargetDiscRadius") : this.discRadius; this.targetDiscThickness = nbt.hasKey("TargetDiscThickness") ? nbt.getFloat("TargetDiscThickness") : this.discThickness; this.anchorData.readNBT(nbt); + this.siblingUUID = nbt.hasKey("SiblingUUID") ? UUID.fromString(nbt.getString("SiblingUUID")) : null; } @Override @@ -609,5 +625,6 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Anchor data this.anchorData.writeNBT(nbt); + nbt.setString("SiblingUUID", siblingUUID.toString()); } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index a4384d035..250b1d629 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -473,6 +473,8 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { this.targetSize = nbt.hasKey("TargetSize") ? nbt.getFloat("TargetSize") : this.size; // Anchor data this.anchorData.readNBT(nbt); + + this.siblingUUID = nbt.hasKey("SiblingUUID") ? UUID.fromString(nbt.getString("SiblingUUID")) : null; } @Override @@ -487,5 +489,7 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { nbt.setInteger("ChargeTick", chargeTick); anchorData.writeNBT(nbt); nbt.setFloat("TargetSize", targetSize); + + nbt.setString("SiblingUUID", siblingUUID.toString()); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java new file mode 100644 index 000000000..f8bdbf9f2 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java @@ -0,0 +1,342 @@ +package noppes.npcs.client.gui.advanced.ability; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; +import kamkeel.npcs.controllers.data.ability.type.AbilityDualDisc; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.util.*; + +import java.util.List; + +public class SubGuiAbilityDualDisc extends SubGuiAbilityConfig { + private final AbilityDualDisc disc; + private int editingVisualColorId = 0; + private int editingDisc = 0; + + public SubGuiAbilityDualDisc(AbilityDualDisc ability, IAbilityConfigCallback callback) { + super(ability, callback); + this.disc = ability; + } + + @Override + protected boolean hasVisualSettings() { + return true; + } + + @Override + protected void initTypeTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 145; + int col2FieldX = guiLeft + 205; + + // Row 1: Damage + Speed + addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); + addTextField(createFloatField(100, fieldX, y, 50, disc.getDamage())); + + addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); + addTextField(createFloatField(101, col2FieldX, y, 50, disc.getSpeed())); + + y += 24; + + // Row 2: Disc Radius + Disc Thickness + addLabel(new GuiNpcLabel(102, "ability.discRadius", labelX, y + 5)); + addTextField(createFloatField(102, fieldX, y, 50, disc.getDiscRadius())); + + addLabel(new GuiNpcLabel(103, "ability.discThickness", col2LabelX, y + 5)); + addTextField(createFloatField(103, col2FieldX, y, 50, disc.getDiscThickness())); + + y += 24; + + // Row 3: Homing + Homing Strength (only show strength if homing) + addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); + GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isHoming() ? 1 : 0); + homingBtn.setHoverText("ability.hover.homing"); + addButton(homingBtn); + + if (disc.isHoming()) { + addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); + addTextField(createFloatField(105, col2FieldX, y, 50, disc.getHomingStrength())); + } + + y += 24; + + // Row 4: Boomerang + Boomerang Delay (only show delay if boomerang) + addLabel(new GuiNpcLabel(106, "ability.boomerang", labelX, y + 5)); + GuiNpcButton boomerangBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isBoomerang() ? 1 : 0); + boomerangBtn.setHoverText("ability.hover.boomerang"); + addButton(boomerangBtn); + + if (disc.isBoomerang()) { + addLabel(new GuiNpcLabel(107, "ability.boomerangDelay", col2LabelX, y + 5)); + addTextField(createIntField(107, col2FieldX, y, 50, disc.getBoomerangDelay())); + } + + y += 24; + + // Row 5: Explosive + Explosion Radius (only show radius if explosive) + addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); + GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isExplosive() ? 1 : 0); + explosiveBtn.setHoverText("ability.hover.explosive"); + addButton(explosiveBtn); + + if (disc.isExplosive()) { + addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); + addTextField(createFloatField(109, col2FieldX, y, 50, disc.getExplosionRadius())); + } + + y += 24; + + // Row 6: Knockback + Max Distance + addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); + addTextField(createFloatField(110, fieldX, y, 50, disc.getKnockback())); + + addLabel(new GuiNpcLabel(111, "ability.maxDist", col2LabelX, y + 5)); + addTextField(createFloatField(111, col2FieldX, y, 50, disc.getMaxDistance())); + + y += 24; + + // Row 7: Max Lifetime + Effects button + addLabel(new GuiNpcLabel(112, "ability.lifetime", labelX, y + 5)); + addTextField(createIntField(112, fieldX, y, 50, disc.getMaxLifetime())); + + y += 24; + + addLabel(new GuiNpcLabel(113, "ability.dualFire", labelX, y + 5)); + addButton(new GuiNpcButtonYesNo(113, fieldX, y, disc.isDualFire())); + + if (disc.isDualFire()) { + addLabel(new GuiNpcLabel(114, "ability.dualFireDelay", col2LabelX, y + 5)); + addTextField(createIntField(114, col2FieldX, y, 50, disc.getDualFireDelay())); + } + + addButton(new GuiNpcButton(150, col2LabelX + 120, y, 80, 20, "ability.effects")); + } + + @Override + protected void initVisualTab(int startY) { + int y = startY; + int labelX = guiLeft + 8; + int fieldX = guiLeft + 85; + int col2LabelX = guiLeft + 180; + int col2FieldX = guiLeft + 260; + + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPointEnum(editingDisc).ordinal()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); + + y += 24; + + // Row 2: Inner Color + Outer Color + addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); + String innerHex = String.format("%06X", disc.getInnerColor(editingDisc) & 0xFFFFFF); + GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); + innerColorBtn.setTextColor(disc.getInnerColor(editingDisc) & 0xFFFFFF); + addButton(innerColorBtn); + + addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); + String outerHex = String.format("%06X", disc.getOuterColor(editingDisc) & 0xFFFFFF); + GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); + outerColorBtn.setTextColor(disc.getOuterColor(editingDisc) & 0xFFFFFF); + outerColorBtn.setEnabled(disc.isOuterColorEnabled(editingDisc)); + addButton(outerColorBtn); + + y += 24; + + // Row 2: Outer Color Enabled + Outer Color Width + addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); + addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isOuterColorEnabled(editingDisc) ? 1 : 0)); + + addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); + GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, disc.getOuterColorWidth(editingDisc)); + widthField.setEnabled(disc.isOuterColorEnabled(editingDisc)); + addTextField(widthField); + + y += 24; + + // Row 3: Outer Color Alpha + addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); + GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, disc.getOuterColorAlpha(editingDisc)); + alphaField.setEnabled(disc.isOuterColorEnabled(editingDisc)); + alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); + addTextField(alphaField); + + y += 24; + + // Row 4: Rotation Speed + addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", labelX, y + 5)); + addTextField(createFloatField(205, fieldX, y, 50, disc.getRotationSpeed(editingDisc))); + + y += 24; + + // Row 5: Lightning Effect Enabled + addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); + GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect(editingDisc) ? 1 : 0); + lightningBtn.setHoverText("ability.hover.lightning"); + addButton(lightningBtn); + + // Only show Lightning settings if Lightning is enabled + if (disc.hasLightningEffect(editingDisc)) { + y += 24; + + // Row 6: Density + Radius + addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); + GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, "" + disc.getLightningDensity(editingDisc)); + densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); + addTextField(densityField); + + addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); + GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, "" + disc.getLightningRadius(editingDisc)); + radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); + addTextField(radiusField); + } + + y += 24; + + addButton(new GuiNpcButton(400, col2FieldX, y, 55, 20, new String[]{"Disc 1", "Disc 2"}, editingDisc)); + } + + @Override + protected void handleTypeButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 104: + disc.setHoming(value == 1); + initGui(); + break; + case 106: + disc.setBoomerang(value == 1); + initGui(); + break; + case 108: + disc.setExplosive(value == 1); + initGui(); + break; + case 113: + disc.setDualFire(value == 1); + initGui(); + break; + case 150: + setSubGui(new SubGuiAbilityEffects(disc.getEffects())); + break; + } + } + + @Override + protected void handleVisualButton(int id, GuiNpcButton button) { + int value = button.getValue(); + switch (id) { + case 200: + editingVisualColorId = 200; + setSubGui(new SubGuiColorSelector(disc.getInnerColor(editingDisc))); + break; + case 201: + editingVisualColorId = 201; + setSubGui(new SubGuiColorSelector(disc.getOuterColor(editingDisc))); + break; + case 202: + disc.setOuterColorEnabled(editingDisc, value == 1); + initGui(); + break; + case 206: + disc.setLightningEffect(editingDisc, value == 1); + initGui(); + break; + case 210: + disc.setAnchorPointEnum(editingDisc, AnchorPoint.fromOrdinal(value)); + break; + case 400: + editingDisc = (editingDisc + 1) % 2; + initGui(); + break; + } + } + + @Override + public void subGuiClosed(SubGuiInterface subgui) { + if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { + SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; + int rgb = colorSelector.color & 0x00FFFFFF; + if (editingVisualColorId == 200) { + disc.setInnerColor(editingDisc, rgb); + } else if (editingVisualColorId == 201) { + disc.setOuterColor(editingDisc, rgb); + } + editingVisualColorId = 0; + initGui(); + } else if (subgui instanceof SubGuiAbilityEffects) { + SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; + List result = effectsGui.getResult(); + if (result != null) { + disc.setEffects(result); + } + } else { + super.subGuiClosed(subgui); + } + } + + @Override + protected void handleTypeTextField(int id, GuiNpcTextField field) { + switch (id) { + case 100: + disc.setDamage(parseFloat(field, disc.getDamage())); + break; + case 101: + disc.setSpeed(parseFloat(field, disc.getSpeed())); + break; + case 102: + disc.setDiscRadius(parseFloat(field, disc.getDiscRadius())); + break; + case 103: + disc.setDiscThickness(parseFloat(field, disc.getDiscThickness())); + break; + case 105: + disc.setHomingStrength(parseFloat(field, disc.getHomingStrength())); + break; + case 107: + disc.setBoomerangDelay(field.getInteger()); + break; + case 109: + disc.setExplosionRadius(parseFloat(field, disc.getExplosionRadius())); + break; + case 110: + disc.setKnockback(parseFloat(field, disc.getKnockback())); + break; + case 111: + disc.setMaxDistance(parseFloat(field, disc.getMaxDistance())); + break; + case 112: + disc.setMaxLifetime(field.getInteger()); + break; + case 114: + disc.setDualFireDelay(field.getInteger()); + break; + } + } + + @Override + protected void handleVisualTextField(int id, GuiNpcTextField field) { + switch (id) { + case 203: + disc.setOuterColorWidth(editingDisc, parseFloat(field, disc.getOuterColorWidth(editingDisc))); + break; + case 204: + disc.setOuterColorAlpha(editingDisc, parseFloat(field, disc.getOuterColorAlpha(editingDisc))); + break; + case 205: + disc.setRotationSpeed(editingDisc, parseFloat(field, disc.getRotationSpeed(editingDisc))); + break; + case 207: + disc.setLightningDensity(editingDisc, parseFloat(field, disc.getLightningDensity(editingDisc))); + break; + case 208: + disc.setLightningRadius(editingDisc, parseFloat(field, disc.getLightningRadius(editingDisc))); + break; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java index 03a868a05..a8b9caadf 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java @@ -3,7 +3,6 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.type.AbilityDualOrb; -import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.*; @@ -240,9 +239,9 @@ public class SubGuiAbilityDualOrb extends SubGuiAbilityConfig { SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; int rgb = colorSelector.color & 0x00FFFFFF; if (editingVisualColorId == 200) { - orb.setInnerColor(rgb); + orb.setInnerColor(editingOrb, rgb); } else if (editingVisualColorId == 201) { - orb.setOuterColor(rgb); + orb.setOuterColor(editingOrb, rgb); } editingVisualColorId = 0; initGui(); diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index fef02e070..f64e3820f 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1562,8 +1562,10 @@ ability.cnpc.slam=Slam ability.cnpc.heavy_hit=Heavy Hit ability.cnpc.cutter=Cutter ability.cnpc.beam=Beam +ability.cnpc.dual_beam=Dual Beam ability.cnpc.projectile=Projectile ability.cnpc.orb=Orb +ability.cnpc.dual_orb=Dual Orb ability.cnpc.charge=Charge ability.cnpc.dash=Dash ability.cnpc.teleport=Teleport @@ -1574,6 +1576,7 @@ ability.cnpc.heal=Heal ability.cnpc.hazard=Hazard ability.cnpc.trap=Trap ability.cnpc.disc=Disc +ability.cnpc.dual_disc=Dual Disc ability.cnpc.laser_shot=Laser Shot ability.cnpc.sweeper=Sweeper @@ -1699,6 +1702,10 @@ ability.lightningRadius=Radius ability.anchorPoint=Anchor Point ability.noVisualSettings=No visual settings for this ability type +# Dual Energy Projectile Settings +ability.dualFire=Dual Fire +ability.dualFireDelay=Fire Delay + # Laser Shot Settings ability.laserWidth=Laser Width ability.expansionSpeed=Expansion Spd From d6b7b969b316b6ef3598326407e01300bfeb831b Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sun, 1 Feb 2026 03:39:03 +0100 Subject: [PATCH 56/85] Fix crash on server --- src/main/java/noppes/npcs/CustomNpcs.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index ff4617545..0bc081429 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -158,7 +158,13 @@ public class CustomNpcs { @SideOnly(Side.CLIENT) private static IDynamicCompiler clientJaninoCompiler; @SideOnly(Side.CLIENT) - private final static Set> clientClassFilterConsumer = new HashSet<>(); + private static Set> clientClassFilterConsumer; + + static { + if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { + clientClassFilterConsumer = new HashSet<>(); + } + } @SideOnly(Side.CLIENT) public static void addClassesToClientClassFilter(Consumer consumer) { From 86a4c15dbb8e3d63745473020bc4fec0a458a56f Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 00:59:54 -0300 Subject: [PATCH 57/85] Fixed energy abilities not rendering --- src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java | 5 ++++- src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java | 5 ++++- src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index bceae89aa..6aed40c3f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -843,6 +843,9 @@ public class EntityAbilityBeam extends EntityAbilityProjectile { trailList.appendTag(pointNbt); } nbt.setTag("Trail", trailList); - nbt.setString("SiblingUUID", siblingUUID.toString()); + + if (siblingUUID instanceof UUID) { + nbt.setString("SiblingUUID", siblingUUID.toString()); + } } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index d0005c7e0..04afb2224 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -625,6 +625,9 @@ public class EntityAbilityDisc extends EntityAbilityProjectile { // Anchor data this.anchorData.writeNBT(nbt); - nbt.setString("SiblingUUID", siblingUUID.toString()); + + if (siblingUUID instanceof UUID) { + nbt.setString("SiblingUUID", siblingUUID.toString()); + } } } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 250b1d629..3c5895206 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -490,6 +490,8 @@ public class EntityAbilityOrb extends EntityAbilityProjectile { anchorData.writeNBT(nbt); nbt.setFloat("TargetSize", targetSize); - nbt.setString("SiblingUUID", siblingUUID.toString()); + if (siblingUUID instanceof UUID) { + nbt.setString("SiblingUUID", siblingUUID.toString()); + } } } From 44f7161c9ffe6aafbf204da8cd2f534483fc4a50 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 01:50:28 -0300 Subject: [PATCH 58/85] Added charge to animation and fixed some access modifiers --- .../client/renderer/RenderAbilityLaser.java | 75 +++++++- .../data/ability/type/AbilityLaserShot.java | 70 +++++--- .../data/ability/type/AbilityOrb.java | 12 +- .../npcs/entity/EntityAbilityLaser.java | 167 +++++++++++++++++- .../ability/SubGuiAbilityLaserShot.java | 20 ++- 5 files changed, 302 insertions(+), 42 deletions(-) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java index bf4df79eb..e70e5c6ba 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java @@ -3,6 +3,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.client.renderer.lightning.AttachedLightningRenderer; +import kamkeel.npcs.entity.EntityAbilityBeam; import kamkeel.npcs.entity.EntityAbilityLaser; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; @@ -20,11 +21,14 @@ public class RenderAbilityLaser extends RenderAbilityProjectile { public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { EntityAbilityLaser laser = (EntityAbilityLaser) entity; - // Don't render if length is 0 - if (laser.getCurrentLength() <= 0) return; - setupRenderState(); + if (laser.isCharging()) { + renderChargingOrb(laser, x, y, z, partialTicks); + restoreRenderState(); + return; + } + // Get laser parameters double startX = laser.getStartX(); double startY = laser.getStartY(); @@ -123,6 +127,55 @@ public class RenderAbilityLaser extends RenderAbilityProjectile { restoreRenderState(); } + private void renderChargingOrb(EntityAbilityLaser laser, double x, double y, double z, float partialTicks) { + float headSize = laser.getLaserWidth() * 1.5f; + float chargeProgress = laser.getInterpolatedChargeProgress(partialTicks); + float size = headSize * chargeProgress; + + if (size <= 0.01f) return; + + int innerColor = laser.getInnerColor(); + int outerColor = laser.getOuterColor(); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + // Pulsing effect + float pulseTime = laser.ticksExisted + partialTicks; + float scaleModifier = (float) Math.sin(pulseTime * 0.2f) * 0.08f; + float scale = size * (1.0f + scaleModifier); + + // Render lightning during charging if enabled + if (laser.hasLightningEffect()) { + renderAttachedLightning(laser, scale); + } + + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + + // Inner scale defines the core size + float innerScale = 0.6f; + + // Render outer glow only if enabled + if (laser.isOuterColorEnabled()) { + float outerScale = innerScale + laser.getOuterColorWidth(); + float outerAlpha = laser.getOuterColorAlpha(); + GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glScalef(outerScale, outerScale, outerScale); + renderCube(outerColor, outerAlpha, 0.5f); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + } + + // Render inner core + GL11.glScalef(innerScale, innerScale, innerScale); + renderCube(innerColor, 1.0f, 0.5f); + + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } + /** * Render lightning effects along the laser beam at multiple points. */ @@ -161,6 +214,22 @@ public class RenderAbilityLaser extends RenderAbilityProjectile { GL11.glPopMatrix(); } + + private void renderAttachedLightning(EntityAbilityLaser laser, float headScale) { + AttachedLightningRenderer.LightningState state = getLightningState(laser); + + float density = laser.getLightningDensity(); + // Lightning radius extends outward from inner surface (innerScale = 0.6) + float innerRadius = 0.6f * headScale * 0.5f; + float radius = innerRadius + laser.getLightningRadius() * headScale; + int outerColor = laser.getOuterColor(); + int innerColor = laser.getInnerColor(); + int fadeTime = laser.getLightningFadeTime(); + + state.update(density, radius, outerColor, innerColor, fadeTime); + state.render(); + } + /** * Get or create the main lightning state for the laser. */ diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index acf5f0aa4..5d42b23cc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -3,18 +3,18 @@ package kamkeel.npcs.controllers.data.ability.type; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.*; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityLaserShot; @@ -34,10 +34,11 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { private int lingerTicks = 8; // Data classes - private EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF0000, true, 0.4f, 0.5f, 0.0f); - private EnergyCombatData combatData = new EnergyCombatData(6.0f, 0.5f, 0.05f, false, 2.0f, 0.5f); - private EnergyLightningData lightningData = new EnergyLightningData(); - private EnergyLifespanData lifespanData = new EnergyLifespanData(40.0f, 100); + private final EnergyColorData colorData = new EnergyColorData(0xFFFFFF, 0xFF0000, true, 0.4f, 0.5f, 0.0f); + private final EnergyCombatData combatData = new EnergyCombatData(6.0f, 0.5f, 0.05f, false, 2.0f, 0.5f); + private final EnergyLightningData lightningData = new EnergyLightningData(); + private final EnergyLifespanData lifespanData = new EnergyLifespanData(40.0f, 100); + private final EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); // Transient state for laser entity (used for movement locking) private transient EntityAbilityLaser laserEntity = null; @@ -89,27 +90,34 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { return laserWidth * 2.0f; // Make telegraph slightly wider for visibility } + @Override + public void onWindUpTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { + if (world.isRemote) return; + + if (tick == 1) { + Vec3 spawnPos = AnchorPointHelper.calculateAnchorPosition(caster, anchorData); + laserEntity = new EntityAbilityLaser( + world, caster, target, + spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, + laserWidth, + colorData, combatData, lightningData, lifespanData, + expansionSpeed, lingerTicks + ); + + laserEntity.setupCharging(anchorData, windUpTicks); + + laserEntity.setEffects(this.effects); + world.spawnEntityInWorld(laserEntity); + } + } + @Override public void onExecute(EntityLivingBase caster, EntityLivingBase target, World world) { if (world.isRemote) { signalCompletion(); - return; } - double spawnX = caster.posX; - double spawnY = caster.posY + caster.getEyeHeight(); - double spawnZ = caster.posZ; - - laserEntity = new EntityAbilityLaser( - world, caster, target, - spawnX, spawnY, spawnZ, - laserWidth, - colorData, combatData, lightningData, lifespanData, - expansionSpeed, lingerTicks - ); - - laserEntity.setEffects(this.effects); - world.spawnEntityInWorld(laserEntity); + laserEntity.startMoving(target); // Ability stays active until entity dies (prevents firing another while projectile is alive) // Movement locking is handled separately by the base class @@ -146,6 +154,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { nbt.setFloat("laserWidth", laserWidth); nbt.setFloat("expansionSpeed", expansionSpeed); nbt.setInteger("lingerTicks", lingerTicks); + anchorData.writeNBT(nbt); colorData.writeNBT(nbt); combatData.writeNBT(nbt); lightningData.writeNBT(nbt); @@ -157,6 +166,7 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { this.laserWidth = nbt.hasKey("laserWidth") ? nbt.getFloat("laserWidth") : 0.3f; this.expansionSpeed = nbt.hasKey("expansionSpeed") ? nbt.getFloat("expansionSpeed") : 3.0f; this.lingerTicks = nbt.hasKey("lingerTicks") ? nbt.getInteger("lingerTicks") : 8; + anchorData.readNBT(nbt); colorData.readNBT(nbt); combatData.readNBT(nbt); lightningData.readNBT(nbt); @@ -210,6 +220,20 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { public float getLightningRadius() { return lightningData.lightningRadius; } public void setLightningRadius(float lightningRadius) { this.lightningData.lightningRadius = lightningRadius; } + public AnchorPoint getAnchorPointEnum() { return anchorData.anchorPoint; } + + public float getAnchorOffsetX() { return anchorData.anchorOffsetX; } + public float getAnchorOffsetY() { return anchorData.anchorOffsetY; } + public float getAnchorOffsetZ() { return anchorData.anchorOffsetZ; } + public void setAnchorPointEnum(AnchorPoint anchorPoint) { this.anchorData.anchorPoint = anchorPoint; } + public void setAnchorOffsetX(float x) { this.anchorData.anchorOffsetX = x; } + public void setAnchorOffsetY(float y) { this.anchorData.anchorOffsetY = y; } + public void setAnchorOffsetZ(float z) { this.anchorData.anchorOffsetZ = z; } + public int getAnchorPoint() { + return anchorData.anchorPoint.ordinal(); + } + public void setAnchorPoint(int point) { this.anchorData.anchorPoint = AnchorPoint.fromOrdinal(point); } + @Override @SideOnly(Side.CLIENT) public Entity createPreviewEntity(EntityNPCInterface npc) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 63c7c9005..0ae1c6182 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -34,12 +34,12 @@ public class AbilityOrb extends Ability implements IAbilityOrb { private float orbSize = 1.0f; // Data classes for energy properties - public final EnergyColorData colorData = new EnergyColorData(); - public final EnergyCombatData combatData = new EnergyCombatData(); - public final EnergyHomingData homingData = new EnergyHomingData(); - public final EnergyLightningData lightningData = new EnergyLightningData(); - public final EnergyLifespanData lifespanData = new EnergyLifespanData(); - private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); + private final EnergyColorData colorData = new EnergyColorData(); + private final EnergyCombatData combatData = new EnergyCombatData(); + private final EnergyHomingData homingData = new EnergyHomingData(); + private final EnergyLightningData lightningData = new EnergyLightningData(); + private final EnergyLifespanData lifespanData = new EnergyLifespanData(); + private final EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.RIGHT_HAND); // Transient state for orb entity (used during windup charging) private transient EntityAbilityOrb orbEntity = null; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 3d888c698..d8aeb725c 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -1,9 +1,8 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; -import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; +import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -43,10 +42,48 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // End point for rendering private double endX, endY, endZ; + // Charging state (during windup) + private boolean charging = false; + private int chargeDuration = 40; + private int chargeTick = 0; + private EnergyAnchorData anchorData = new EnergyAnchorData(AnchorPoint.FRONT); + private float targetSize = 1.0f; // Full size to grow to during charging + + // Data watcher index for charging state (synced to clients) + private static final int DW_CHARGING = 20; + public EntityAbilityLaser(World world) { super(world); } + @Override + protected void entityInit() { + super.entityInit(); + // Register data watcher for charging state + this.dataWatcher.addObject(DW_CHARGING, (byte) 0); + } + + /** + * Check if orb is in charging state (synced via data watcher). + * In preview mode, uses local field since data watcher isn't synced. + */ + public boolean isCharging() { + if (previewMode) { + return this.charging; + } + return this.dataWatcher.getWatchableObjectByte(DW_CHARGING) == 1; + } + + /** + * Set charging state (server only, synced to clients via data watcher). + */ + private void setCharging(boolean value) { + this.charging = value; + if (!worldObj.isRemote) { + this.dataWatcher.updateObject(DW_CHARGING, (byte) (value ? 1 : 0)); + } + } + /** * Full constructor with all parameters using data classes. */ @@ -70,7 +107,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Calculate direction toward target or forward if (target != null) { double dx = target.posX - x; - double dy = (target.posY + target.getEyeHeight()) - y; + double dy = (target.posY + target.getEyeHeight() - 0.4) - y; double dz = target.posZ - z; double len = Math.sqrt(dx * dx + dy * dy + dz * dz); if (len > 0) { @@ -93,6 +130,25 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { this.endZ = z; } + /** + * Setup this orb in charging mode (for windup phase). + * The orb will grow from 0 to orbSize over chargeDuration ticks. + * Position follows the owner based on anchor point. + */ + public void setupCharging(EnergyAnchorData anchor, int chargeDuration) { + setCharging(true); + this.chargeDuration = chargeDuration; + this.chargeTick = 0; + this.anchorData = anchor; + this.targetSize = this.size; + this.size = 0.01f; + this.renderCurrentSize = 0.01f; + this.prevRenderSize = 0.01f; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + } + @Override protected void updateRotation() { // Laser doesn't rotate @@ -106,6 +162,11 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { @Override protected void updateProjectile() { + if (isCharging()) { + updateCharging(); + return; + } + if (!fullyExtended) { // Expand the laser currentLength += expansionSpeed; @@ -134,6 +195,46 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { } } + public void startMoving(EntityLivingBase target) { + if (!isCharging()) return; + + setCharging(false); + + // Update start position to current position + startX = posX; + startY = posY; + startZ = posZ; + + // Calculate velocity toward target + Entity owner = getOwner(); + + if (target != null) { + double dx = target.posX - startX; + double dy = (target.posY + target.getEyeHeight() - 0.4) - startY; + double dz = target.posZ - startZ; + double len = Math.sqrt(dx * dx + dy * dy + dz * dz); + if (len > 0) { + this.dirX = dx / len; + this.dirY = dy / len; + this.dirZ = dz / len; + } + } else if (owner != null) { + // Fire in NPC's facing direction + float yaw = (float) Math.toRadians(owner.rotationYaw); + float pitch = (float) Math.toRadians(owner.rotationPitch); + this.dirX = -Math.sin(yaw) * Math.cos(pitch); + this.dirY = -Math.sin(pitch); + this.dirZ = Math.cos(yaw) * Math.cos(pitch);; + } + + setPosition(endX, endY, endZ); + + // Initialize end point + this.endX = posX; + this.endY = posY; + this.endZ = posZ; + } + private void checkBlockCollision() { Vec3 start = Vec3.createVectorHelper(startX, startY, startZ); Vec3 end = Vec3.createVectorHelper(endX, endY, endZ); @@ -168,6 +269,44 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { } } + /** + * Update during charging state - follow owner based on anchor point. + */ + private void updateCharging() { + chargeTick++; + + Entity owner = getOwner(); + if (owner == null || owner.isDead) { + setDead(); + return; + } + + // Grow size based on charge progress + float progress = getChargeProgress(); + this.size = targetSize * progress; + + // Calculate position based on anchor point, offset downward by half size to center + if (owner instanceof EntityLivingBase) { + Vec3 pos = AnchorPointHelper.calculateAnchorPosition((EntityLivingBase) owner, anchorData); + setPosition(pos.xCoord, pos.yCoord, pos.zCoord); + } + } + + /** + * Get the charge progress (0-1). + */ + public float getChargeProgress() { + if (chargeDuration <= 0) return 1.0f; + return Math.min(1.0f, (float) chargeTick / chargeDuration); + } + + public float getInterpolatedChargeProgress(float partialTicks) { + if (chargeDuration <= 0) return 1.0f; + float prevProgress = Math.max(0, (float) (chargeTick - 1) / chargeDuration); + float currProgress = Math.min(1.0f, (float) chargeTick / chargeDuration); + return prevProgress + (currProgress - prevProgress) * partialTicks; + } + private void checkEntityCollisionAlongLine() { // Check collision along the entire laser line // Use a slightly expanded AABB for the full line @@ -190,7 +329,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Check if entity is close to the laser line if (isEntityOnLine(entity)) { hitEntities.add(entity.getEntityId()); - applyDamage(entity); + applyDamage(entity); // TODO find out why ts aint hittin // Piercing - don't stop, continue to next entity } @@ -305,6 +444,15 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { this.endX = nbt.getDouble("EndX"); this.endY = nbt.getDouble("EndY"); this.endZ = nbt.getDouble("EndZ"); + + // Charging state + boolean isCharging = nbt.hasKey("Charging") && nbt.getBoolean("Charging"); + this.charging = isCharging; + this.dataWatcher.updateObject(DW_CHARGING, (byte) (isCharging ? 1 : 0)); + this.chargeDuration = nbt.hasKey("ChargeDuration") ? nbt.getInteger("ChargeDuration") : 40; + this.chargeTick = nbt.hasKey("ChargeTick") ? nbt.getInteger("ChargeTick") : 0; + this.targetSize = nbt.hasKey("TargetSize") ? nbt.getFloat("TargetSize") : this.size; + anchorData.readNBT(nbt); } @Override @@ -320,6 +468,13 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { nbt.setDouble("EndX", endX); nbt.setDouble("EndY", endY); nbt.setDouble("EndZ", endZ); + + // Charging state + nbt.setBoolean("Charging", isCharging()); + nbt.setInteger("ChargeDuration", chargeDuration); + nbt.setInteger("ChargeTick", chargeTick); + nbt.setFloat("TargetSize", targetSize); + anchorData.writeNBT(nbt); } /** diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java index b594a83c7..71a03e97e 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java @@ -1,6 +1,7 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; @@ -99,7 +100,15 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { int col2LabelX = guiLeft + 180; int col2FieldX = guiLeft + 260; - // Row 1: Inner Color + Outer Color + // Row 1: Anchor Point + addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); + GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), laser.getAnchorPointEnum().ordinal()); + anchorBtn.setHoverText("ability.hover.anchorPoint"); + addButton(anchorBtn); + + y += 24; + + // Row 2: Inner Color + Outer Color addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); String innerHex = String.format("%06X", laser.getInnerColor() & 0xFFFFFF); GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); @@ -115,7 +124,7 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { y += 24; - // Row 2: Outer Color Enabled + Outer Color Width + // Row 3: Outer Color Enabled + Outer Color Width addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isOuterColorEnabled() ? 1 : 0)); @@ -126,7 +135,7 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { y += 24; - // Row 3: Lightning Effect Enabled + // Row 4: Lightning Effect Enabled addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, laser.getOuterColorAlpha()); alphaField.setEnabled(laser.isOuterColorEnabled()); @@ -142,7 +151,7 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { if (laser.hasLightningEffect()) { y += 24; - // Row 4: Density + Radius + // Row 5: Density + Radius addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, "" + laser.getLightningDensity()); densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); @@ -189,6 +198,9 @@ public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { laser.setLightningEffect(value == 1); initGui(); break; + case 210: + laser.setAnchorPointEnum(AnchorPoint.fromOrdinal(value)); + break; } } From ffc6a070dcce96c78a03ffcda9e65db219caf69c Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 01:50:39 -0300 Subject: [PATCH 59/85] Removed todo --- src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index d8aeb725c..e93ea5a77 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -329,7 +329,7 @@ public class EntityAbilityLaser extends EntityAbilityProjectile { // Check if entity is close to the laser line if (isEntityOnLine(entity)) { hitEntities.add(entity.getEntityId()); - applyDamage(entity); // TODO find out why ts aint hittin + applyDamage(entity); // Piercing - don't stop, continue to next entity } From bd0f8d8383ada8d97a609411f20b2e944e89fc78 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Sun, 1 Feb 2026 06:00:59 +0100 Subject: [PATCH 60/85] Goatee, are you fucking retarded? --- .../npcs/network/packets/request/script/ScriptFilesPacket.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java index 37383ea6c..96268e915 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java @@ -47,7 +47,6 @@ public final class ScriptFilesPacket extends AbstractPacket { return CustomNpcsPermissions.SCRIPT_GLOBAL; } - @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { ByteBufUtils.writeNBT(out, getScriptsNbt(lang)); From 119c3170295e14cd3ca92310b9936b85ae82e125 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 02:01:29 -0300 Subject: [PATCH 61/85] Fixed wrong packet channel and misplaced SideOnly --- .../npcs/network/packets/request/script/ScriptFilesPacket.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java index 37383ea6c..700513d78 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java @@ -39,7 +39,7 @@ public final class ScriptFilesPacket extends AbstractPacket { @Override public PacketChannel getChannel() { - return PacketHandler.DATA_PACKET; + return PacketHandler.REQUEST_PACKET; } @Override @@ -47,7 +47,6 @@ public final class ScriptFilesPacket extends AbstractPacket { return CustomNpcsPermissions.SCRIPT_GLOBAL; } - @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { ByteBufUtils.writeNBT(out, getScriptsNbt(lang)); From 00ebb626a68a3b113d75b94091e2caa24a85fe64 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 04:27:56 -0300 Subject: [PATCH 62/85] HOW DID I MISS THIS --- .../java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java index e2e6f8234..048b3642f 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityOrb.java @@ -56,7 +56,7 @@ public class RenderAbilityOrb extends RenderAbilityProjectile { GL11.glDepthMask(false); GL11.glPushMatrix(); GL11.glScalef(outerScale, outerScale, outerScale); - renderCube(orb.getOuterColor(), 0.5f, 0.5f); + renderCube(orb.getOuterColor(), orb.getOuterColorAlpha(), 0.5f); GL11.glPopMatrix(); GL11.glDepthMask(true); } From f4db57875a129b758041c1509e805dc6ba2b6256 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 06:45:29 -0300 Subject: [PATCH 63/85] Changed dual ability names --- .../data/ability/AbilityController.java | 6 +++--- ...AbilityDualBeam.java => AbilityBeamDual.java} | 16 ++++++++-------- ...AbilityDualDisc.java => AbilityDiscDual.java} | 16 ++++++++-------- .../{AbilityDualOrb.java => AbilityOrbDual.java} | 16 ++++++++-------- ...yDualBeam.java => SubGuiAbilityBeamDual.java} | 8 ++++---- ...yDualDisc.java => SubGuiAbilityDiscDual.java} | 9 ++++----- ...ityDualOrb.java => SubGuiAbilityOrbDual.java} | 8 ++++---- ..._Active.json => Ability_BeamDual_Active.json} | 2 +- ..._Windup.json => Ability_BeamDual_Windup.json} | 2 +- 9 files changed, 41 insertions(+), 42 deletions(-) rename src/main/java/kamkeel/npcs/controllers/data/ability/type/{AbilityDualBeam.java => AbilityBeamDual.java} (97%) rename src/main/java/kamkeel/npcs/controllers/data/ability/type/{AbilityDualDisc.java => AbilityDiscDual.java} (97%) rename src/main/java/kamkeel/npcs/controllers/data/ability/type/{AbilityDualOrb.java => AbilityOrbDual.java} (97%) rename src/main/java/noppes/npcs/client/gui/advanced/ability/{SubGuiAbilityDualBeam.java => SubGuiAbilityBeamDual.java} (98%) rename src/main/java/noppes/npcs/client/gui/advanced/ability/{SubGuiAbilityDualDisc.java => SubGuiAbilityDiscDual.java} (97%) rename src/main/java/noppes/npcs/client/gui/advanced/ability/{SubGuiAbilityDualOrb.java => SubGuiAbilityOrbDual.java} (98%) rename src/main/resources/assets/customnpcs/animations/{Ability_DualBeam_Active.json => Ability_BeamDual_Active.json} (99%) rename src/main/resources/assets/customnpcs/animations/{Ability_DualBeam_Windup.json => Ability_BeamDual_Windup.json} (99%) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 43d7bd8bb..eba8795f7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -363,12 +363,12 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:sweeper", AbilitySweeper::new); registerType("cnpc:projectile", AbilityProjectile::new); registerType("cnpc:orb", AbilityOrb::new); - registerType("cnpc:dual_orb", AbilityDualOrb::new); + registerType("cnpc:dual_orb", AbilityOrbDual::new); registerType("cnpc:dual_disc", AbilityDisc::new); - registerType("cnpc:dual_disc", AbilityDualDisc::new); + registerType("cnpc:dual_disc", AbilityDiscDual::new); registerType("cnpc:laser_shot", AbilityLaserShot::new); registerType("cnpc:beam", AbilityEnergyBeam::new); - registerType("cnpc:dual_beam", AbilityDualBeam::new); + registerType("cnpc:dual_beam", AbilityBeamDual::new); // Movement abilities registerType("cnpc:charge", AbilityCharge::new); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java similarity index 97% rename from src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java rename to src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java index 6704b0e33..54c806604 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java @@ -18,12 +18,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualBeam; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityBeamDual; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.util.ValueUtil; -public class AbilityDualBeam extends Ability { +public class AbilityBeamDual extends Ability { private float beamWidth = 0.4f; private float headSize = 0.6f; private boolean dualFire= true; @@ -48,9 +48,9 @@ public class AbilityDualBeam extends Ability { private transient EntityAbilityBeam beamEntity = null; private transient EntityAbilityBeam beamEntity2 = null; - public AbilityDualBeam() { - this.typeId = "ability.cnpc.dual_beam"; - this.name = "Dual Beam"; + public AbilityBeamDual() { + this.typeId = "ability.cnpc.beam_dual"; + this.name = "Beam Dual"; this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 20.0f; this.minRange = 5.0f; @@ -60,8 +60,8 @@ public class AbilityDualBeam extends Ability { this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; // Default built-in animations - this.windUpAnimationName = "Ability_DualBeam_Windup"; - this.activeAnimationName = "Ability_DualBeam_Active"; + this.windUpAnimationName = "Ability_BeamDual_Windup"; + this.activeAnimationName = "Ability_BeamDual_Active"; } @Override @@ -72,7 +72,7 @@ public class AbilityDualBeam extends Ability { @Override @SideOnly(Side.CLIENT) public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityDualBeam(this, callback); + return new SubGuiAbilityBeamDual(this, callback); } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java similarity index 97% rename from src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java rename to src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java index 873530119..0fc3ab061 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java @@ -18,12 +18,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualDisc; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDiscDual; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.util.ValueUtil; -public class AbilityDualDisc extends Ability { +public class AbilityDiscDual extends Ability { // Disc geometry private float discRadius = 1.0f; @@ -56,9 +56,9 @@ public class AbilityDualDisc extends Ability { private transient EntityAbilityDisc discEntity = null; private transient EntityAbilityDisc discEntity2 = null; - public AbilityDualDisc() { - this.typeId = "ability.cnpc.dual_disc"; - this.name = "Dual Disc"; + public AbilityDiscDual() { + this.typeId = "ability.cnpc.disc_dual"; + this.name = "Disc Dual"; this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 30.0f; this.minRange = 5.0f; @@ -68,8 +68,8 @@ public class AbilityDualDisc extends Ability { this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; // Default built-in animations - this.windUpAnimationName = "Ability_DualBeam_Windup"; - this.activeAnimationName = "Ability_DualBeam_Active"; + this.windUpAnimationName = "Ability_BeamDual_Windup"; + this.activeAnimationName = "Ability_BeamDual_Active"; } @Override @@ -80,7 +80,7 @@ public class AbilityDualDisc extends Ability { @Override @SideOnly(Side.CLIENT) public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityDualDisc(this, callback); + return new SubGuiAbilityDiscDual(this, callback); } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java similarity index 97% rename from src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java rename to src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java index baddfb910..1e28d5820 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDualOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java @@ -18,12 +18,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDualOrb; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrbDual; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.util.ValueUtil; -public class AbilityDualOrb extends Ability { +public class AbilityOrbDual extends Ability { // Ability-specific properties private float orbSize = 1.0f; private boolean dualFire= true; @@ -47,9 +47,9 @@ public class AbilityDualOrb extends Ability { private transient EntityAbilityOrb orbEntity = null; private transient EntityAbilityOrb orbEntity2 = null; - public AbilityDualOrb() { - this.typeId = "ability.cnpc.dual_orb"; - this.name = "Dual Orb"; + public AbilityOrbDual() { + this.typeId = "ability.cnpc.orb_dual"; + this.name = "Orb Dual"; this.targetingMode = TargetingMode.AGGRO_TARGET; this.maxRange = 25.0f; this.minRange = 5.0f; @@ -59,8 +59,8 @@ public class AbilityDualOrb extends Ability { this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; // Default built-in animation - this.windUpAnimationName = "Ability_DualBeam_Windup"; - this.activeAnimationName = "Ability_DualBeam_Active"; + this.windUpAnimationName = "Ability_BeamDual_Windup"; + this.activeAnimationName = "Ability_BeamDual_Active"; } @Override @@ -71,7 +71,7 @@ public class AbilityDualOrb extends Ability { @Override @SideOnly(Side.CLIENT) public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityDualOrb(this, callback); + return new SubGuiAbilityOrbDual(this, callback); } @Override diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeamDual.java similarity index 98% rename from src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java rename to src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeamDual.java index 87144adfc..3e1886c53 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualBeam.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityBeamDual.java @@ -2,19 +2,19 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityDualBeam; +import kamkeel.npcs.controllers.data.ability.type.AbilityBeamDual; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.*; import java.util.List; -public class SubGuiAbilityDualBeam extends SubGuiAbilityConfig { - private final AbilityDualBeam beam; +public class SubGuiAbilityBeamDual extends SubGuiAbilityConfig { + private final AbilityBeamDual beam; private int editingVisualColorId = 0; private int editingBeam = 0; - public SubGuiAbilityDualBeam(AbilityDualBeam ability, IAbilityConfigCallback callback) { + public SubGuiAbilityBeamDual(AbilityBeamDual ability, IAbilityConfigCallback callback) { super(ability, callback); this.beam = ability; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDiscDual.java similarity index 97% rename from src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java rename to src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDiscDual.java index f8bdbf9f2..c8ab5a352 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualDisc.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDiscDual.java @@ -2,20 +2,19 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; -import kamkeel.npcs.controllers.data.ability.type.AbilityDualDisc; +import kamkeel.npcs.controllers.data.ability.type.AbilityDiscDual; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.*; import java.util.List; -public class SubGuiAbilityDualDisc extends SubGuiAbilityConfig { - private final AbilityDualDisc disc; +public class SubGuiAbilityDiscDual extends SubGuiAbilityConfig { + private final AbilityDiscDual disc; private int editingVisualColorId = 0; private int editingDisc = 0; - public SubGuiAbilityDualDisc(AbilityDualDisc ability, IAbilityConfigCallback callback) { + public SubGuiAbilityDiscDual(AbilityDiscDual ability, IAbilityConfigCallback callback) { super(ability, callback); this.disc = ability; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrbDual.java similarity index 98% rename from src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java rename to src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrbDual.java index a8b9caadf..cdf805f53 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDualOrb.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrbDual.java @@ -2,19 +2,19 @@ package noppes.npcs.client.gui.advanced.ability; import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityDualOrb; +import kamkeel.npcs.controllers.data.ability.type.AbilityOrbDual; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.*; import java.util.List; -public class SubGuiAbilityDualOrb extends SubGuiAbilityConfig { - private final AbilityDualOrb orb; +public class SubGuiAbilityOrbDual extends SubGuiAbilityConfig { + private final AbilityOrbDual orb; private int editingVisualColorId = 0; private int editingOrb = 0; - public SubGuiAbilityDualOrb(AbilityDualOrb ability, IAbilityConfigCallback callback) { + public SubGuiAbilityOrbDual(AbilityOrbDual ability, IAbilityConfigCallback callback) { super(ability, callback); this.orb = ability; } diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Active.json similarity index 99% rename from src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json rename to src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Active.json index fa47349f9..c98f89236 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Active.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Active.json @@ -198,6 +198,6 @@ "ID": 12, "WhileAttacking": 1b, "WhileWalking": 1b, - "Name": "Ability_DualBeam_Active", + "Name": "Ability_BeamDual_Active", "WhileStanding": 1b } diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Windup.json similarity index 99% rename from src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json rename to src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Windup.json index 99437fc2d..d793e3f22 100644 --- a/src/main/resources/assets/customnpcs/animations/Ability_DualBeam_Windup.json +++ b/src/main/resources/assets/customnpcs/animations/Ability_BeamDual_Windup.json @@ -196,6 +196,6 @@ "ID": 11, "WhileAttacking": 1b, "WhileWalking": 1b, - "Name": "Ability_DualBeam_Windup", + "Name": "Ability_BeamDual_Windup", "WhileStanding": 1b } From b7fdda690576c1bc7b387d907fb2a92878084b4f Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 06:51:26 -0300 Subject: [PATCH 64/85] Updated translation --- src/main/resources/assets/customnpcs/lang/en_US.lang | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index f64e3820f..ab6ee1904 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1562,10 +1562,10 @@ ability.cnpc.slam=Slam ability.cnpc.heavy_hit=Heavy Hit ability.cnpc.cutter=Cutter ability.cnpc.beam=Beam -ability.cnpc.dual_beam=Dual Beam +ability.cnpc.beam_dual=Beam Dual ability.cnpc.projectile=Projectile ability.cnpc.orb=Orb -ability.cnpc.dual_orb=Dual Orb +ability.cnpc.orb_dual=Orb Dual ability.cnpc.charge=Charge ability.cnpc.dash=Dash ability.cnpc.teleport=Teleport @@ -1576,7 +1576,7 @@ ability.cnpc.heal=Heal ability.cnpc.hazard=Hazard ability.cnpc.trap=Trap ability.cnpc.disc=Disc -ability.cnpc.dual_disc=Dual Disc +ability.cnpc.disc_dual=Disc Dual ability.cnpc.laser_shot=Laser Shot ability.cnpc.sweeper=Sweeper @@ -1696,6 +1696,7 @@ ability.innerColor=Inner Color ability.outerColor=Outer Color ability.outerEnabled=Outer Glow ability.outerWidth=Outer Width +ability.outerAlpha=Outer Alpha ability.lightning=Lightning ability.lightningDensity=Density ability.lightningRadius=Radius From c39ce6b6d16edd14c3a4332a4638c9f9ef988242 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 17:08:24 -0300 Subject: [PATCH 65/85] Fixed sync windup animation not being an ability property and getting overridden on gui init --- .../controllers/data/ability/Ability.java | 49 ++++++++++++++++++- src/main/java/kamkeel/npcs/util/Register.java | 2 + .../gui/advanced/SubGuiAbilityConfig.java | 4 +- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index e31b8f8fd..b33426ba9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -20,6 +20,7 @@ import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; import net.minecraft.entity.player.EntityPlayer; +import noppes.npcs.controllers.data.Frame; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.controllers.ScriptController; @@ -57,6 +58,7 @@ public abstract class Ability implements IAbility { protected int cooldownTicks = 0; // Added to global cooldown after ability completes protected int windUpTicks = 20; protected int dazedTicks = 80; // Only used when interrupted during WINDUP (if interruptible) + protected boolean syncWindupWithAnimation = true; // Interruption protected boolean interruptible = true; @@ -972,7 +974,7 @@ public abstract class Ability implements IAbility { } public int getWindUpTicks() { - return windUpTicks; + return this.calculateWindupFromAnimation(); } public void setWindUpTicks(int windUpTicks) { @@ -987,6 +989,14 @@ public abstract class Ability implements IAbility { this.dazedTicks = Math.max(0, dazedTicks); } + public boolean isSyncWindupWithAnimation() { + return syncWindupWithAnimation; + } + + public void setSyncWindupWithAnimation(boolean syncWindupWithAnimation) { + this.syncWindupWithAnimation = syncWindupWithAnimation; + } + public boolean isInterruptible() { return interruptible; } @@ -1234,6 +1244,43 @@ public abstract class Ability implements IAbility { effects.clear(); } + // ═══════════════════════════════════════════════════════════════════ + // SHIT FROM THE ASS + // ═══════════════════════════════════════════════════════════════════ + + private int calculateWindupFromAnimation() { + if (!syncWindupWithAnimation) { + return windUpTicks; + } + + if (AnimationController.Instance == null) { + return this.windUpTicks; + } + + Animation animation = null; + // Check for built-in animation (by name) first + if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationName); + } + // Fall back to user animation (by ID) + else if (windUpAnimationId >= 0) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationId); + } + + if (animation == null || animation.frames.isEmpty()) { + return this.windUpTicks; + } + + // Calculate total duration by summing all frame durations + int totalDuration = 0; + for (Frame frame : animation.frames) { + totalDuration += frame.getDuration(); + } + + // Return total duration + return totalDuration; + } + // ═══════════════════════════════════════════════════════════════════ // IAbility API METHODS // ═══════════════════════════════════════════════════════════════════ diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index d12e49146..6485b9b81 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -33,4 +33,6 @@ public class Register { } } } + + // TODO ADD ANIMATION REGISTER } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 611f8c918..ef799961d 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -66,7 +66,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi protected int cooldownTicks; protected int windUpTicks; protected int dazedTicks; - protected boolean syncWindupWithAnimation = true; // Sync windup ticks with animation duration + protected boolean syncWindupWithAnimation; // Sync windup ticks with animation duration // ═══════════════════════════════════════════════════════════════════════════ // CACHED VALUES - Target Tab @@ -120,6 +120,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.cooldownTicks = ability.getCooldownTicks(); this.windUpTicks = ability.getWindUpTicks(); this.dazedTicks = ability.getDazedTicks(); + this.syncWindupWithAnimation = ability.isSyncWindupWithAnimation(); // Target this.minRange = ability.getMinRange(); @@ -923,6 +924,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi ability.setCooldownTicks(cooldownTicks); ability.setWindUpTicks(windUpTicks); ability.setDazedTicks(dazedTicks); + ability.setSyncWindupWithAnimation(syncWindupWithAnimation); // Target ability.setMinRange(minRange); From c168702970b666f4bfe357e2f163cfefdba9d3eb Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:09:12 -0300 Subject: [PATCH 66/85] WIP Animations Register --- .../controllers/data/ability/Ability.java | 6 ++-- src/main/java/kamkeel/npcs/util/Register.java | 20 ++++++++++++- .../gui/advanced/SubGuiAbilityConfig.java | 2 +- .../npcs/controllers/AnimationController.java | 29 +++++++++++++------ 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index b33426ba9..f7325a24f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -1098,7 +1098,7 @@ public abstract class Ability implements IAbility { // Built-in animation by name takes priority if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { - return (Animation) AnimationController.Instance.get(windUpAnimationName); + return (Animation) AnimationController.Instance.get(windUpAnimationName, true); } // Fall back to user animation by ID if (windUpAnimationId >= 0) { @@ -1128,7 +1128,7 @@ public abstract class Ability implements IAbility { // Built-in animation by name takes priority if (activeAnimationName != null && !activeAnimationName.isEmpty()) { - return (Animation) AnimationController.Instance.get(activeAnimationName); + return (Animation) AnimationController.Instance.get(activeAnimationName, true); } // Fall back to user animation by ID if (activeAnimationId >= 0) { @@ -1260,7 +1260,7 @@ public abstract class Ability implements IAbility { Animation animation = null; // Check for built-in animation (by name) first if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { - animation = (Animation) AnimationController.Instance.get(windUpAnimationName); + animation = (Animation) AnimationController.Instance.get(windUpAnimationName, true); } // Fall back to user animation (by ID) else if (windUpAnimationId >= 0) { diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 6485b9b81..aebfd4255 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -2,6 +2,9 @@ package kamkeel.npcs.util; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import noppes.npcs.LogWriter; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; import java.util.LinkedHashMap; import java.util.Map; @@ -34,5 +37,20 @@ public class Register { } } - // TODO ADD ANIMATION REGISTER + public static class Animations extends Register { + private final Class modClass; + private final String animationsPath; + + public Animations(Class modClass, String animationsPath, String namespace) { + super("ability", namespace); + this.animationsPath = animationsPath; + this.modClass = modClass; + } + + public void register() throws Exception { + for (Map.Entry> entry : entries.entrySet()) { + AnimationController.Instance.loadBuiltInAnimation(modClass, animationsPath, entry.getKey()); + } + } + } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index ef799961d..32cfc51b2 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -1003,7 +1003,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi Animation animation = null; // Check for built-in animation (by name) first if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { - animation = (Animation) AnimationController.Instance.get(windUpAnimationName); + animation = (Animation) AnimationController.Instance.get(windUpAnimationName, true); } // Fall back to user animation (by ID) else if (windUpAnimationId >= 0) { diff --git a/src/main/java/noppes/npcs/controllers/AnimationController.java b/src/main/java/noppes/npcs/controllers/AnimationController.java index c6837b6c7..b4203b452 100644 --- a/src/main/java/noppes/npcs/controllers/AnimationController.java +++ b/src/main/java/noppes/npcs/controllers/AnimationController.java @@ -120,12 +120,9 @@ public class AnimationController implements IAnimationHandler { } } - /** - * Load a single built-in animation by name from assets folder. - */ - private void loadBuiltInAnimation(String animName) throws Exception { - String resourcePath = BUILTIN_ANIMATIONS_PATH + "/" + animName + ".json"; - try (InputStream stream = CustomNpcs.class.getResourceAsStream(resourcePath)) { + public void loadBuiltInAnimation(Class modClass, String path, String animName) throws Exception { + String resourcePath = path + "/" + animName + ".json"; + try (InputStream stream = modClass.getResourceAsStream(resourcePath)) { if (stream == null) { return; } @@ -150,6 +147,13 @@ public class AnimationController implements IAnimationHandler { } } + /** + * Load a single built-in animation by name from assets folder. + */ + private void loadBuiltInAnimation(String animName) throws Exception { + loadBuiltInAnimation(CustomNpcs.class, BUILTIN_ANIMATIONS_PATH, animName); + } + private void loadAnimations() { animations.clear(); @@ -314,6 +318,10 @@ public class AnimationController implements IAnimationHandler { } public IAnimation get(String name) { + return get(name, false); + } + + public IAnimation get(String name, boolean builtIn) { // Check user/custom animations first (allows overriding built-in) for (Map.Entry entry : animations.entrySet()) { if (entry.getValue().name.equalsIgnoreCase(name)) { @@ -321,10 +329,13 @@ public class AnimationController implements IAnimationHandler { } } // Then check built-in animations - BuiltInAnimation builtIn = builtInAnimations.get(name.toLowerCase()); - if (builtIn != null) { - return builtIn; + if (builtIn) { + BuiltInAnimation builtInAnim = builtInAnimations.get(name.toLowerCase()); + if (builtInAnim != null) { + return builtInAnim; + } } + return null; } From b254ad0ba9030ae6d712202366520e06434cae9a Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:25:16 -0300 Subject: [PATCH 67/85] WIP Animations Register --- src/main/java/kamkeel/npcs/util/Register.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index aebfd4255..d5dd9006f 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -2,7 +2,6 @@ package kamkeel.npcs.util; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; -import noppes.npcs.LogWriter; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; @@ -12,7 +11,7 @@ import java.util.function.Supplier; public class Register { private final String registryKey; - private final String namespace; + protected final String namespace; protected final Map> entries = new LinkedHashMap<>(); public Register(String registryKey, String namespace) { @@ -41,15 +40,21 @@ public class Register { private final Class modClass; private final String animationsPath; - public Animations(Class modClass, String animationsPath, String namespace) { - super("ability", namespace); + public Animations(Class modClass, String namespace, String animationsPath) { + super("animation", namespace); this.animationsPath = animationsPath; this.modClass = modClass; } public void register() throws Exception { - for (Map.Entry> entry : entries.entrySet()) { - AnimationController.Instance.loadBuiltInAnimation(modClass, animationsPath, entry.getKey()); + try { + + } catch(Exception e) { + String path = "/assets/" + namespace + "/" + animationsPath + "/"; + for (Map.Entry> entry : entries.entrySet()) { + String key = entry.getKey().substring(entry.getKey().indexOf(":")); + AnimationController.Instance.loadBuiltInAnimation(modClass, path, key); + } } } } From 9d7ad714a13b419c176371a30dfd992f43d50a43 Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:27:21 -0300 Subject: [PATCH 68/85] WIP Animations Register --- src/main/java/kamkeel/npcs/util/Register.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index d5dd9006f..0c6cb8ee8 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -2,6 +2,7 @@ package kamkeel.npcs.util; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityController; +import noppes.npcs.LogWriter; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; @@ -40,21 +41,19 @@ public class Register { private final Class modClass; private final String animationsPath; - public Animations(Class modClass, String namespace, String animationsPath) { - super("animation", namespace); + public Animations(Class modClass, String animationsPath, String namespace) { + super("ability", namespace); this.animationsPath = animationsPath; this.modClass = modClass; } - public void register() throws Exception { + public void register() { try { - - } catch(Exception e) { - String path = "/assets/" + namespace + "/" + animationsPath + "/"; for (Map.Entry> entry : entries.entrySet()) { - String key = entry.getKey().substring(entry.getKey().indexOf(":")); - AnimationController.Instance.loadBuiltInAnimation(modClass, path, key); + AnimationController.Instance.loadBuiltInAnimation(modClass, animationsPath, entry.getKey()); } + } catch (Exception e) { + LogWriter.error("Error scanning built-in animations folder", e); } } } From 0883d7fb9498c841cac8cc19b27d2eb0d018ac2a Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:39:15 -0300 Subject: [PATCH 69/85] Cast register animation to builtin --- src/main/java/kamkeel/npcs/util/Register.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 0c6cb8ee8..91d284e21 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -5,6 +5,7 @@ import kamkeel.npcs.controllers.data.ability.AbilityController; import noppes.npcs.LogWriter; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.BuiltInAnimation; import java.util.LinkedHashMap; import java.util.Map; @@ -47,6 +48,11 @@ public class Register { this.modClass = modClass; } + @Override + public Animation register(String factoryName, Supplier factory) { + return (BuiltInAnimation) super.register(factoryName, factory); + } + public void register() { try { for (Map.Entry> entry : entries.entrySet()) { From 8ae3bcff1c9923bbbf61b958faf66686198e93bb Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:44:23 -0300 Subject: [PATCH 70/85] nevermind --- src/main/java/kamkeel/npcs/util/Register.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 91d284e21..26fda3f3d 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -50,7 +50,7 @@ public class Register { @Override public Animation register(String factoryName, Supplier factory) { - return (BuiltInAnimation) super.register(factoryName, factory); + return super.register(factoryName, factory); } public void register() { From bc88c8898203000e8e36de316d432bd26631472b Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:49:34 -0300 Subject: [PATCH 71/85] Changed animation name reading logic --- src/main/java/kamkeel/npcs/util/Register.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 26fda3f3d..30016fb52 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -55,8 +55,10 @@ public class Register { public void register() { try { + String path = "/assets/" + namespace + "/" + animationsPath; for (Map.Entry> entry : entries.entrySet()) { - AnimationController.Instance.loadBuiltInAnimation(modClass, animationsPath, entry.getKey()); + String name = entry.getKey().substring(entry.getKey().indexOf(":")); + AnimationController.Instance.loadBuiltInAnimation(modClass, path, name); } } catch (Exception e) { LogWriter.error("Error scanning built-in animations folder", e); From 0369b6de834e462f0c09ef2be8ce9ebd28af347c Mon Sep 17 00:00:00 2001 From: Vidal Date: Sun, 1 Feb 2026 20:53:12 -0300 Subject: [PATCH 72/85] oopsie >< --- src/main/java/kamkeel/npcs/util/Register.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 30016fb52..0f1400ab3 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -57,7 +57,7 @@ public class Register { try { String path = "/assets/" + namespace + "/" + animationsPath; for (Map.Entry> entry : entries.entrySet()) { - String name = entry.getKey().substring(entry.getKey().indexOf(":")); + String name = entry.getKey().substring(entry.getKey().indexOf(":") + 1); AnimationController.Instance.loadBuiltInAnimation(modClass, path, name); } } catch (Exception e) { From b74149d98de62a37937adc6d3b0025a7caf4bc87 Mon Sep 17 00:00:00 2001 From: Vidal Date: Mon, 2 Feb 2026 00:52:43 -0300 Subject: [PATCH 73/85] Added Heavy Hit and Cutter animations --- .../data/ability/type/AbilityCutter.java | 2 + .../data/ability/type/AbilityHeavyHit.java | 9 +- .../animations/Ability_Cutter_Active.json | 86 ++ .../animations/Ability_Cutter_Windup.json | 156 ++ .../animations/Ability_HeavyHit_Active.json | 77 + .../animations/Ability_HeavyHit_Windup.json | 1274 +++++++++++++++++ 6 files changed, 1600 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Cutter_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_Cutter_Windup.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Windup.json diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index ef2d2f687..3ba6c3079 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -61,6 +61,8 @@ public class AbilityCutter extends Ability implements IAbilityCutter { this.telegraphType = TelegraphType.CONE; this.windUpSound = "random.bow"; this.activeSound = "random.break"; + this.windUpAnimationName = "Ability_Cutter_Windup"; + this.activeAnimationName = "Ability_Cutter_Active"; } @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 7d0c217c0..3419492c3 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -37,6 +37,8 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { this.showTelegraph = false; this.windUpSound = "random.anvil_use"; this.activeSound = "random.anvil_land"; + this.windUpAnimationName = "Ability_HeavyHit_Windup"; + this.activeAnimationName = "Ability_HeavyHit_Active"; } @Override @@ -75,14 +77,13 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { if (wasHit) { applyEffects(target); } - - // Heavy Hit is instant - signalCompletion(); } @Override public void onActiveTick(EntityLivingBase caster, EntityLivingBase target, World world, int tick) { - // Heavy Hit is instant, no active tick needed + // Just enough delay to see the active animation + if (tick == 10) + signalCompletion(); } @Override diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Active.json new file mode 100644 index 000000000..1fdf06c24 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Active.json @@ -0,0 +1,86 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 18.0f, + "Rotation0": 88.0f, + "Pivot0": -10.0f, + "Pivot1": 0.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 107.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 107.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 6.0f, + "Rotation0": 82.0f, + "Pivot0": 3.0f, + "Pivot1": 3.0f, + "Rotation2": 88.0f + }, + { + "Pivot2": 5.0f, + "Part": "RIGHT_LEG", + "Rotation1": 107.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_LEG", + "Rotation1": 56.0f, + "Rotation0": 0.0f, + "Pivot0": -6.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 20 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 14, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Cutter_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Windup.json new file mode 100644 index 000000000..153d90f12 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_Cutter_Windup.json @@ -0,0 +1,156 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "FrameParts": [ + { + "Pivot2": 1.0f, + "Part": "LEFT_ARM", + "Rotation1": -31.0f, + "Rotation0": -94.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": -3.0f, + "Part": "HEAD", + "Rotation1": -31.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "BODY", + "Rotation1": -31.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": -75.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": -50.0f, + "Rotation0": -145.0f, + "Pivot0": 2.0f, + "Pivot1": 3.0f, + "Rotation2": 88.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 18.0f, + "Rotation0": 12.0f, + "Pivot0": -3.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Duration": 20 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 18.0f, + "Rotation0": 88.0f, + "Pivot0": -10.0f, + "Pivot1": 0.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 107.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 107.0f, + "Rotation0": -25.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "RIGHT_ARM", + "Rotation1": 6.0f, + "Rotation0": 82.0f, + "Pivot0": 3.0f, + "Pivot1": 3.0f, + "Rotation2": 88.0f + }, + { + "Pivot2": 5.0f, + "Part": "RIGHT_LEG", + "Rotation1": 107.0f, + "Rotation0": 6.0f, + "Pivot0": -2.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_LEG", + "Rotation1": 56.0f, + "Rotation0": 0.0f, + "Pivot0": -6.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 13, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_Cutter_Windup", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Active.json new file mode 100644 index 000000000..fa6b44543 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Active.json @@ -0,0 +1,77 @@ +{ + "Loop": 0, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": -25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 6.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": -25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -63.0f, + "Rotation0": -31.0f, + "Pivot0": -2.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 20 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 19, + "Smooth": 0b, + "ID": 16, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_HeavyHit_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Windup.json new file mode 100644 index 000000000..15d49bce6 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_HeavyHit_Windup.json @@ -0,0 +1,1274 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.8f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 31.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -37.0f, + "Rotation0": -37.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 6.0f + } + ], + "Smooth": 0b, + "Duration": 10 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.1f, + "FrameParts": [ + { + "Pivot2": 3.0f, + "Part": "RIGHT_ARM", + "Rotation1": 40.0f, + "Rotation0": -107.0f, + "Pivot0": 2.0f, + "Pivot1": 1.0f, + "Rotation2": -37.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": -1.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 37.0f, + "Rotation0": 25.0f, + "Pivot0": -2.0f, + "Pivot1": -1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "BODY", + "Rotation1": 18.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": -40.0f, + "Rotation0": -40.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -90.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 90.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_LEG", + "Rotation1": -31.0f, + "Rotation0": 31.0f, + "Pivot0": 1.0f, + "Pivot1": 0.0f, + "Rotation2": -18.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": -25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_LEG", + "Rotation1": 6.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": -25.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 4.0f, + "Part": "LEFT_ARM", + "Rotation1": -63.0f, + "Rotation0": -31.0f, + "Pivot0": -2.0f, + "Pivot1": 1.0f, + "Rotation2": -6.0f + } + ], + "Smooth": 0b, + "Duration": 2 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 19, + "Smooth": 0b, + "ID": 15, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_HeavyHit_Windup", + "WhileStanding": 1b +} From bcc9d790d606a76242ddc2a7816aee8445de7178 Mon Sep 17 00:00:00 2001 From: Vidal Date: Mon, 2 Feb 2026 03:00:35 -0300 Subject: [PATCH 74/85] Added Disc Dual animation --- .../data/ability/type/AbilityDiscDual.java | 6 +- .../animations/Ability_DiscDual_Active.json | 392 ++++++++++++++++++ .../animations/Ability_DiscDual_Windup.json | 293 +++++++++++++ 3 files changed, 688 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Active.json create mode 100644 src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Windup.json diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java index 0fc3ab061..1495c49a0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java @@ -49,7 +49,7 @@ public class AbilityDiscDual extends Ability { }; private EnergyLifespanData lifespanData = new EnergyLifespanData(35.0f, 200); private EnergyAnchorData[] anchorData = new EnergyAnchorData[]{ - new EnergyAnchorData(AnchorPoint.RIGHT_HAND), new EnergyAnchorData(AnchorPoint.LEFT_HAND) + new EnergyAnchorData(AnchorPoint.LEFT_HAND), new EnergyAnchorData(AnchorPoint.RIGHT_HAND) }; // Transient state for disc entity (used during windup charging) @@ -68,8 +68,8 @@ public class AbilityDiscDual extends Ability { this.telegraphType = TelegraphType.CIRCLE; this.showTelegraph = true; // Default built-in animations - this.windUpAnimationName = "Ability_BeamDual_Windup"; - this.activeAnimationName = "Ability_BeamDual_Active"; + this.windUpAnimationName = "Ability_DiscDual_Windup"; + this.activeAnimationName = "Ability_DiscDual_Active"; } @Override diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Active.json b/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Active.json new file mode 100644 index 000000000..8fbaa73da --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Active.json @@ -0,0 +1,392 @@ +{ + "Loop": 5, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": -37.0f, + "Rotation0": 37.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 56.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -37.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": 120.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.5f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": -37.0f, + "Rotation0": 37.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 56.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -37.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": 120.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 4 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": -37.0f, + "Rotation0": 37.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 56.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -37.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": 120.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 4 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": -25.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -145.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 75.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 37.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": -12.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 2 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": -25.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -145.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 75.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 37.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": -12.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 4 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": 2.0f, + "Part": "BODY", + "Rotation1": -25.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": -145.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 75.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -25.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -12.0f + }, + { + "Pivot2": 2.0f, + "Part": "LEFT_ARM", + "Rotation1": 37.0f, + "Rotation0": -90.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": -12.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 6.0f + }, + { + "Pivot2": 2.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": -12.0f, + "Pivot0": -1.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 4 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 0, + "Smooth": 0b, + "ID": 18, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_DiscDual_Active", + "WhileStanding": 1b +} diff --git a/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Windup.json b/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Windup.json new file mode 100644 index 000000000..080306c95 --- /dev/null +++ b/src/main/resources/assets/customnpcs/animations/Ability_DiscDual_Windup.json @@ -0,0 +1,293 @@ +{ + "Loop": -1, + "Speed": 1.0f, + "Frames": [ + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.5f, + "FrameParts": [ + { + "Pivot2": -8.0f, + "Part": "BODY", + "Rotation1": 25.0f, + "Rotation0": 31.0f, + "Pivot0": -2.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 50.0f, + "Pivot0": 0.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -2.0f, + "Part": "LEFT_LEG", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -31.0f + }, + { + "Pivot2": -8.0f, + "Part": "LEFT_ARM", + "Rotation1": 31.0f, + "Rotation0": -56.0f, + "Pivot0": -2.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -3.0f, + "Part": "RIGHT_LEG", + "Rotation1": 25.0f, + "Rotation0": 18.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 360.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -8.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": -2.0f, + "Pivot1": 2.0f, + "Rotation2": -12.0f + } + ], + "Smooth": 0b, + "Duration": 10 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 0.35f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 50.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 50.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 170.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 75.0f, + "Rotation0": -107.0f, + "Pivot0": -6.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -6.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 50.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": -4.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 360.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 46 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 1.0f, + "FrameParts": [ + { + "Pivot2": 0.0f, + "Part": "BODY", + "Rotation1": 50.0f, + "Rotation0": -6.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 5.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 50.0f, + "Pivot0": 2.0f, + "Pivot1": 0.0f, + "Rotation2": 170.0f + }, + { + "Pivot2": -3.0f, + "Part": "LEFT_ARM", + "Rotation1": 75.0f, + "Rotation0": -107.0f, + "Pivot0": -6.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -4.0f, + "Part": "LEFT_LEG", + "Rotation1": -6.0f, + "Rotation0": 12.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "RIGHT_LEG", + "Rotation1": 50.0f, + "Rotation0": 18.0f, + "Pivot0": -3.0f, + "Pivot1": -4.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "FULL_MODEL", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": 0.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 0.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 2b, + "Duration": 1 + }, + { + "ColorMarker": 16777215, + "Comment": "", + "Speed": 2.0f, + "FrameParts": [ + { + "Pivot2": -5.0f, + "Part": "BODY", + "Rotation1": -37.0f, + "Rotation0": 37.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -7.0f, + "Part": "RIGHT_ARM", + "Rotation1": 0.0f, + "Rotation0": 25.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 56.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_LEG", + "Rotation1": -37.0f, + "Rotation0": 31.0f, + "Pivot0": 0.0f, + "Pivot1": 0.0f, + "Rotation2": -25.0f + }, + { + "Pivot2": 0.0f, + "Part": "LEFT_ARM", + "Rotation1": 0.0f, + "Rotation0": 120.0f, + "Pivot0": 0.0f, + "Pivot1": 1.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -1.0f, + "Part": "RIGHT_LEG", + "Rotation1": -18.0f, + "Rotation0": 12.0f, + "Pivot0": -1.0f, + "Pivot1": 0.0f, + "Rotation2": 0.0f + }, + { + "Pivot2": -6.0f, + "Part": "HEAD", + "Rotation1": 0.0f, + "Rotation0": 18.0f, + "Pivot0": 3.0f, + "Pivot1": 2.0f, + "Rotation2": 0.0f + } + ], + "Smooth": 0b, + "Duration": 3 + } + ], + "CurrentFrameTime": 0, + "CurrentFrame": 1, + "Smooth": 0b, + "ID": 17, + "WhileAttacking": 1b, + "WhileWalking": 1b, + "Name": "Ability_DiscDual_Windup", + "WhileStanding": 1b +} From 335ccd260bf6eed3b5f96e0bf53e2e01758b44b7 Mon Sep 17 00:00:00 2001 From: Vidal Date: Mon, 2 Feb 2026 04:48:43 -0300 Subject: [PATCH 75/85] Updated translation --- src/main/resources/assets/customnpcs/lang/en_US.lang | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index ab6ee1904..0737e9e55 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1612,6 +1612,9 @@ ability.piercing=Piercing # Orb Settings ability.homing=Homing ability.explosive=Explosive +ability.firingSpeed=Firing Speed +ability.amount=Amount +ability.dualCharge=Dual Charging # Vortex Settings ability.pullRadius=Radius @@ -1729,9 +1732,6 @@ ability.manager.title=Ability Manager # Explosive Hover Text ability.explosive.noBlockDamage=Explosions do not destroy blocks -# Additional Orb Settings -ability.explRadius=Expl Radius - # Telegraph Colors (for abilities that support separate colors) ability.windUpColor=Wind Up Color ability.activeColor=Active Color @@ -1768,6 +1768,7 @@ ability.hover.piercing=Hits multiple targets instead of stopping on first hit ability.hover.lightning=Add electrical effect to visuals ability.hover.outerGlow=Enable outer glow layer around projectile ability.hover.anchorPoint=Where on the NPC the ability spawns from +ability.hover.dualCharge=Whether or not should create two anchor points ability.hover.damage=Base damage dealt to targets ability.hover.speed=Movement speed of projectile ability.hover.lifetime=Maximum ticks before despawning From 3651643f26d2cc2e997541f4f564b2bbd19b83f8 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Feb 2026 14:59:55 -0500 Subject: [PATCH 76/85] Fix GL Issues? --- src/api | 2 +- .../npcs/client/renderer/RenderAbilityProjectile.java | 5 ++--- .../npcs/client/renderer/blocks/BlockBeamRenderer.java | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/api b/src/api index bf650319d..06c9daf81 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit bf650319da422790bff294d570dd879143fe8d4c +Subproject commit 06c9daf81be8df0138a992ca6bcabc05e37189cb diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java index cce9bbe58..2ba840aec 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityProjectile.java @@ -31,6 +31,7 @@ public abstract class RenderAbilityProjectile extends Render { */ protected void setupRenderState() { GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_ALPHA_TEST); @@ -48,9 +49,7 @@ public abstract class RenderAbilityProjectile extends Render { * Restore GL state after rendering. */ protected void restoreRenderState() { - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopAttrib(); GL11.glPopMatrix(); } diff --git a/src/main/java/noppes/npcs/client/renderer/blocks/BlockBeamRenderer.java b/src/main/java/noppes/npcs/client/renderer/blocks/BlockBeamRenderer.java index 64b37340f..7f9fdd19b 100644 --- a/src/main/java/noppes/npcs/client/renderer/blocks/BlockBeamRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/blocks/BlockBeamRenderer.java @@ -26,8 +26,8 @@ public class BlockBeamRenderer extends BlockRendererInterface { public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { TileVariant tile = (TileVariant) var1; - GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPushMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glTranslatef((float) var2 + 0.5f, (float) var4 + 1.5f, (float) var6 + 0.5f); //GL11.glScalef(1.2f, 1.1f, 1.2f); GL11.glRotatef(180, 0, 0, 1); From 0ff501bb167713f7dcf52df1bb5fa3e68578a781 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Feb 2026 16:17:37 -0500 Subject: [PATCH 77/85] Declarative ability GUI: replace 18 SubGui classes with FieldDef system All ability GUI tabs (General, Target, Effects, Type, Visual) are now fully declarative via FieldDef definitions. Deleted 18 SubGuiAbility* classes (~3100 lines) and rewrote SubGuiAbilityConfig to use GuiScrollWindow for every tab with a unified field renderer. - Add FieldDef, FieldType, TabTarget, ColumnHint, TabDef gui framework - Add getFieldDefinitions() to all 18 ability subclasses - Add getBaseFieldDefinitions() to Ability.java for shared tabs - Merge COLOR/EFFECTS into SUB_GUI with convenience factories - Net reduction: ~3100 lines removed Co-Authored-By: Claude Opus 4.5 --- .../controllers/data/ability/Ability.java | 89 ++ .../data/ability/gui/ColumnHint.java | 7 + .../data/ability/gui/FieldDef.java | 287 +++++ .../data/ability/gui/FieldType.java | 11 + .../controllers/data/ability/gui/TabDef.java | 28 + .../data/ability/gui/TabTarget.java | 10 + .../data/ability/type/AbilityCharge.java | 23 +- .../data/ability/type/AbilityCutter.java | 35 +- .../data/ability/type/AbilityDash.java | 24 +- .../data/ability/type/AbilityDisc.java | 66 +- .../data/ability/type/AbilityEnergyBeam.java | 64 +- .../data/ability/type/AbilityGuard.java | 40 +- .../data/ability/type/AbilityHazard.java | 38 +- .../data/ability/type/AbilityHeal.java | 32 +- .../data/ability/type/AbilityHeavyHit.java | 26 +- .../data/ability/type/AbilityLaserShot.java | 55 +- .../data/ability/type/AbilityOrb.java | 62 +- .../data/ability/type/AbilityProjectile.java | 34 +- .../data/ability/type/AbilityShockwave.java | 24 +- .../data/ability/type/AbilitySlam.java | 24 +- .../data/ability/type/AbilitySweeper.java | 45 +- .../data/ability/type/AbilityTeleport.java | 41 +- .../data/ability/type/AbilityTrap.java | 32 +- .../data/ability/type/AbilityVortex.java | 32 +- .../gui/advanced/SubGuiAbilityConfig.java | 1145 +++++------------ .../advanced/ability/SubGuiAbilityCharge.java | 92 -- .../advanced/ability/SubGuiAbilityCutter.java | 141 -- .../advanced/ability/SubGuiAbilityDash.java | 65 - .../advanced/ability/SubGuiAbilityDisc.java | 323 ----- .../ability/SubGuiAbilityEnergyBeam.java | 312 ----- .../advanced/ability/SubGuiAbilityGuard.java | 143 -- .../advanced/ability/SubGuiAbilityHazard.java | 159 --- .../advanced/ability/SubGuiAbilityHeal.java | 106 -- .../ability/SubGuiAbilityHeavyHit.java | 76 -- .../ability/SubGuiAbilityLaserShot.java | 268 ---- .../advanced/ability/SubGuiAbilityOrb.java | 294 ----- .../ability/SubGuiAbilityProjectile.java | 145 --- .../ability/SubGuiAbilityShockwave.java | 95 -- .../advanced/ability/SubGuiAbilitySlam.java | 98 -- .../ability/SubGuiAbilitySweeper.java | 219 ---- .../ability/SubGuiAbilityTeleport.java | 165 --- .../advanced/ability/SubGuiAbilityTrap.java | 126 -- .../advanced/ability/SubGuiAbilityVortex.java | 129 -- 43 files changed, 1232 insertions(+), 3998 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/ColumnHint.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabDef.java create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java delete mode 100644 src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index b67ed95ac..b368d6267 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -23,7 +23,11 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + import java.util.ArrayList; +import java.util.Collections; import java.util.List; import net.minecraft.entity.Entity; @@ -300,6 +304,91 @@ public abstract class Ability implements IAbility { return true; } + /** + * Returns the declarative field definitions for this ability's GUI. + * Override in subclasses to declare type-specific and visual fields. + * The GUI rendering engine in SubGuiAbilityConfig uses this list to + * automatically build the Type and Visual tabs. + */ + public List getFieldDefinitions() { + return Collections.emptyList(); + } + + /** + * Returns field definitions for all base Ability fields (General, Target, Effects tabs). + */ + @SideOnly(Side.CLIENT) + public List getBaseFieldDefinitions() { + List defs = new ArrayList<>(); + + // General tab + defs.add(FieldDef.stringField("gui.name", this::getName, this::setName) + .tab(TabTarget.GENERAL)); + defs.add(FieldDef.intField("ability.weight", this::getWeight, this::setWeight) + .tab(TabTarget.GENERAL).range(1, 1000)); + defs.add(FieldDef.enumField("ability.lockMove", LockMovementType.class, + this::getLockMovement, this::setLockMovement) + .tab(TabTarget.GENERAL).hover("ability.hover.lockMove")); + defs.add(FieldDef.boolField("ability.interruptible", this::isInterruptible, this::setInterruptible) + .tab(TabTarget.GENERAL).hover("ability.hover.interruptible")); + defs.add(FieldDef.intField("ability.dazed", this::getDazedTicks, this::setDazedTicks) + .tab(TabTarget.GENERAL).range(0, 1000) + .visibleWhen(this::isInterruptible)); + defs.add(FieldDef.intField("ability.windup", this::getWindUpTicks, this::setWindUpTicks) + .tab(TabTarget.GENERAL).range(0, 1000)); + defs.add(FieldDef.intField("ability.cooldown", this::getCooldownTicks, this::setCooldownTicks) + .tab(TabTarget.GENERAL).range(0, 10000)); + defs.add(FieldDef.boolField("gui.enabled", this::isEnabled, this::setEnabled) + .tab(TabTarget.GENERAL)); + + // Target tab + defs.add(FieldDef.intField("ability.minRange", () -> (int) getMinRange(), v -> setMinRange(v)) + .tab(TabTarget.TARGET).range(0, 100)); + defs.add(FieldDef.intField("ability.maxRange", () -> (int) getMaxRange(), v -> setMaxRange(v)) + .tab(TabTarget.TARGET).range(1, 100)); + if (!isTargetingModeLocked()) { + defs.add(FieldDef.enumField("ability.targeting", TargetingMode.class, + this::getTargetingMode, this::setTargetingMode) + .tab(TabTarget.TARGET).hover("ability.hover.targeting")); + } + + // Effects tab + defs.add(FieldDef.soundSubGui("ability.windUpSound", this::getWindUpSound, this::setWindUpSound) + .tab(TabTarget.EFFECTS)); + defs.add(FieldDef.soundSubGui("ability.activeSound", this::getActiveSound, this::setActiveSound) + .tab(TabTarget.EFFECTS)); + defs.add(FieldDef.animSubGui("ability.windUpAnim", + this::getWindUpAnimationId, this::setWindUpAnimationId, + this::getWindUpAnimationName, this::setWindUpAnimationName) + .tab(TabTarget.EFFECTS)); + defs.add(FieldDef.animSubGui("ability.activeAnim", + this::getActiveAnimationId, this::setActiveAnimationId, + this::getActiveAnimationName, this::setActiveAnimationName) + .tab(TabTarget.EFFECTS)); + + TelegraphType tType = getTelegraphType(); + if (tType != null && tType != TelegraphType.NONE) { + defs.add(FieldDef.boolField("ability.showTelegraph", this::isShowTelegraph, this::setShowTelegraph) + .tab(TabTarget.EFFECTS).hover("ability.hover.showTelegraph")); + defs.add(FieldDef.colorSubGui("ability.windUpColor", this::getWindUpColor, this::setWindUpColor) + .tab(TabTarget.EFFECTS).visibleWhen(this::isShowTelegraph)); + defs.add(FieldDef.colorSubGui("ability.activeColor", this::getActiveColor, this::setActiveColor) + .tab(TabTarget.EFFECTS).visibleWhen(this::isShowTelegraph)); + } + + return defs; + } + + /** + * Returns ALL field definitions: base (General/Target/Effects) + type-specific (Type/Visual). + */ + @SideOnly(Side.CLIENT) + public final List getAllFieldDefinitions() { + List all = new ArrayList<>(getBaseFieldDefinitions()); + all.addAll(getFieldDefinitions()); + return all; + } + /** * Returns true if this ability type has custom settings that need a Type-specific tab. * Override to return true if the ability has settings beyond the base Ability fields. diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/ColumnHint.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/ColumnHint.java new file mode 100644 index 000000000..a1b5dd270 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/ColumnHint.java @@ -0,0 +1,7 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +public enum ColumnHint { + FULL, + LEFT, + RIGHT +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java new file mode 100644 index 000000000..25ec6cb66 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java @@ -0,0 +1,287 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import noppes.npcs.client.gui.SubGuiColorSelector; +import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEffects; +import noppes.npcs.client.gui.select.GuiAnimationSelection; +import noppes.npcs.client.gui.select.GuiSoundSelection; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; +import java.util.function.BooleanSupplier; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * Declarative field definition for ability GUI rendering. + * Built via static factories and chaining methods. + */ +public class FieldDef { + + private final String label; + private final FieldType type; + private TabTarget tab = TabTarget.TYPE; + private String customTabName = null; + private ColumnHint column = ColumnHint.FULL; + private Supplier getter; + private Consumer setter; + private BooleanSupplier visibleWhen = () -> true; + private String tooltip = null; + private String hoverText = null; + + // Numeric range + private float min = Float.MIN_VALUE; + private float max = Float.MAX_VALUE; + + // Enum support + private Class> enumClass; + private String[] stringEnumValues; + private Supplier stringEnumGetter; + private Consumer stringEnumSetter; + + // Sub-gui support + private Supplier subGuiFactory; + private Consumer subGuiResultHandler; + + // Button display + private Supplier buttonLabelSupplier; + private Supplier buttonTextColorSupplier; + private Runnable clearAction; + + private FieldDef(String label, FieldType type) { + this.label = label; + this.type = type; + } + + // ═══════════════════════════════════════════════════════════════════ + // STATIC FACTORIES + // ═══════════════════════════════════════════════════════════════════ + + public static FieldDef floatField(String label, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.FLOAT); + def.getter = () -> getter.get(); + def.setter = v -> setter.accept(((Number) v).floatValue()); + return def; + } + + public static FieldDef intField(String label, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.INT); + def.getter = () -> getter.get(); + def.setter = v -> setter.accept(((Number) v).intValue()); + return def; + } + + public static FieldDef boolField(String label, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.BOOLEAN); + def.getter = () -> getter.get(); + def.setter = v -> setter.accept((Boolean) v); + return def; + } + + @SuppressWarnings("unchecked") + public static > FieldDef enumField(String label, Class enumClass, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.ENUM); + def.enumClass = enumClass; + def.getter = () -> getter.get(); + def.setter = v -> setter.accept((E) v); + return def; + } + + public static FieldDef stringEnumField(String label, String[] values, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.STRING_ENUM); + def.stringEnumValues = values; + def.stringEnumGetter = getter; + def.stringEnumSetter = setter; + return def; + } + + public static FieldDef stringField(String label, Supplier getter, Consumer setter) { + FieldDef def = new FieldDef(label, FieldType.STRING); + def.getter = () -> getter.get(); + def.setter = v -> setter.accept((String) v); + return def; + } + + public static FieldDef subGuiField(String label, Supplier factory, Consumer resultHandler) { + FieldDef def = new FieldDef(label, FieldType.SUB_GUI); + def.subGuiFactory = factory; + def.subGuiResultHandler = resultHandler; + return def; + } + + // ═══════════════════════════════════════════════════════════════════ + // CONVENIENCE FACTORIES (SUB_GUI wrappers) + // ═══════════════════════════════════════════════════════════════════ + + public static FieldDef colorSubGui(String label, Supplier getter, Consumer setter) { + return subGuiField(label, + () -> new SubGuiColorSelector(getter.get()), + gui -> setter.accept(((SubGuiColorSelector) gui).color & 0x00FFFFFF)) + .buttonLabel(() -> String.format("%06X", getter.get() & 0xFFFFFF)) + .buttonTextColor(() -> getter.get() & 0xFFFFFF); + } + + public static FieldDef effectsSubGui(String label, Supplier> getter, Consumer> setter) { + return subGuiField(label, + () -> new SubGuiAbilityEffects(getter.get()), + gui -> { + List r = ((SubGuiAbilityEffects) gui).getResult(); + if (r != null) setter.accept(r); + }); + } + + public static FieldDef soundSubGui(String label, Supplier getter, Consumer setter) { + return subGuiField(label, + () -> new GuiSoundSelection(getter.get()), + gui -> { + GuiSoundSelection s = (GuiSoundSelection) gui; + if (s.selectedResource != null) setter.accept(s.selectedResource.toString()); + }) + .buttonLabel(() -> { + String s = getter.get(); + return s == null || s.isEmpty() ? "gui.none" : truncateEnd(s, 10); + }) + .clearable(() -> setter.accept("")); + } + + public static FieldDef animSubGui(String label, + Supplier idGetter, Consumer idSetter, + Supplier nameGetter, Consumer nameSetter) { + return subGuiField(label, + () -> new GuiAnimationSelection(idGetter.get(), nameGetter.get()), + gui -> { + GuiAnimationSelection sel = (GuiAnimationSelection) gui; + if (sel.isBuiltInSelected()) { + nameSetter.accept(sel.selectedBuiltInName); + idSetter.accept(-1); + } else { + idSetter.accept(sel.selectedAnimationId); + nameSetter.accept(""); + } + }) + .buttonLabel(() -> { + String name = nameGetter.get(); + if (name != null && !name.isEmpty()) return truncateEnd(name, 8); + int id = idGetter.get(); + return id >= 0 ? "ID: " + id : "gui.none"; + }) + .clearable(() -> { idSetter.accept(-1); nameSetter.accept(""); }); + } + + // ═══════════════════════════════════════════════════════════════════ + // CHAINING METHODS + // ═══════════════════════════════════════════════════════════════════ + + public FieldDef tab(TabTarget tab) { + this.tab = tab; + return this; + } + + public FieldDef customTab(String tabName) { + this.tab = TabTarget.CUSTOM; + this.customTabName = tabName; + return this; + } + + public FieldDef range(float min, float max) { + this.min = min; + this.max = max; + return this; + } + + public FieldDef column(ColumnHint column) { + this.column = column; + return this; + } + + public FieldDef visibleWhen(BooleanSupplier condition) { + this.visibleWhen = condition; + return this; + } + + public FieldDef tooltip(String tooltip) { + this.tooltip = tooltip; + return this; + } + + public FieldDef hover(String hoverText) { + this.hoverText = hoverText; + return this; + } + + public FieldDef buttonLabel(Supplier supplier) { + this.buttonLabelSupplier = supplier; + return this; + } + + public FieldDef buttonTextColor(Supplier supplier) { + this.buttonTextColorSupplier = supplier; + return this; + } + + public FieldDef clearable(Runnable action) { + this.clearAction = action; + return this; + } + + // ═══════════════════════════════════════════════════════════════════ + // GETTERS + // ═══════════════════════════════════════════════════════════════════ + + public String getLabel() { return label; } + public FieldType getType() { return type; } + public TabTarget getTab() { return tab; } + public String getCustomTabName() { return customTabName; } + public ColumnHint getColumn() { return column; } + public boolean isVisible() { return visibleWhen.getAsBoolean(); } + public String getTooltip() { return tooltip; } + public String getHoverText() { return hoverText; } + public float getMin() { return min; } + public float getMax() { return max; } + public boolean hasRange() { return min != Float.MIN_VALUE || max != Float.MAX_VALUE; } + public Class> getEnumClass() { return enumClass; } + public String[] getStringEnumValues() { return stringEnumValues; } + public Supplier getSubGuiFactory() { return subGuiFactory; } + public Consumer getSubGuiResultHandler() { return subGuiResultHandler; } + public boolean hasClearAction() { return clearAction != null; } + public Runnable getClearAction() { return clearAction; } + + public Object getValue() { + return getter != null ? getter.get() : null; + } + + public void setValue(Object value) { + if (setter != null) setter.accept(value); + } + + public String getStringEnumValue() { + return stringEnumGetter != null ? stringEnumGetter.get() : null; + } + + public void setStringEnumValue(String value) { + if (stringEnumSetter != null) stringEnumSetter.accept(value); + } + + public String getButtonLabel() { + if (buttonLabelSupplier != null) return buttonLabelSupplier.get(); + return label; + } + + public Integer getButtonTextColor() { + return buttonTextColorSupplier != null ? buttonTextColorSupplier.get() : null; + } + + // ═══════════════════════════════════════════════════════════════════ + // HELPERS + // ═══════════════════════════════════════════════════════════════════ + + static String truncateEnd(String str, int maxLen) { + if (str == null) return ""; + if (str.length() <= maxLen) return str; + int lastSlash = str.lastIndexOf('/'); + if (lastSlash >= 0 && str.length() - lastSlash <= maxLen) { + return "..." + str.substring(lastSlash); + } + return "..." + str.substring(str.length() - maxLen + 3); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java new file mode 100644 index 000000000..b908d9b88 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java @@ -0,0 +1,11 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +public enum FieldType { + FLOAT, + INT, + BOOLEAN, + ENUM, + STRING_ENUM, + SUB_GUI, + STRING +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabDef.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabDef.java new file mode 100644 index 000000000..64d1501fd --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabDef.java @@ -0,0 +1,28 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +/** + * Simple data class representing a tab in the ability config GUI. + * Built automatically from the FieldDef list. + */ +public class TabDef { + + public final String name; + public final TabTarget target; + public int index; + + public TabDef(String name, TabTarget target, int index) { + this.name = name; + this.target = target; + this.index = index; + } + + /** + * Returns a unique key combining target and custom name for deduplication. + */ + public String getKey() { + if (target == TabTarget.CUSTOM && name != null) { + return "CUSTOM:" + name; + } + return target.name(); + } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java new file mode 100644 index 000000000..aba49646b --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java @@ -0,0 +1,10 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +public enum TabTarget { + GENERAL, + TYPE, + TARGET, + EFFECTS, + VISUAL, + CUSTOM +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 25941e0a5..8241fab86 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -14,13 +14,13 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityCharge; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityCharge; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -63,12 +63,6 @@ public class AbilityCharge extends Ability implements IAbilityCharge { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityCharge(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -405,4 +399,15 @@ public class AbilityCharge extends Ability implements IAbilityCharge { public void setHitWidth(float hitWidth) { this.hitWidth = hitWidth; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("stats.speed", this::getChargeSpeed, this::setChargeSpeed), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.floatField("ability.hitWidth", this::getHitWidth, this::setHitWidth), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 9db9d7700..29ae4aa22 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -11,13 +9,14 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityCutter; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityCutter; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -68,12 +67,6 @@ public class AbilityCutter extends Ability implements IAbilityCutter { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityCutter(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -311,4 +304,24 @@ public class AbilityCutter extends Ability implements IAbilityCutter { public float getCurrentRotation() { return currentRotation; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("gui.range", this::getRange, this::setRange), + FieldDef.floatField("ability.arcAngle", this::getArcAngle, this::setArcAngle), + FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), + FieldDef.enumField("ability.sweepMode", SweepMode.class, this::getSweepModeEnum, this::setSweepModeEnum) + .hover("ability.hover.sweepMode"), + FieldDef.boolField("ability.piercing", this::isPiercing, this::setPiercing) + .hover("ability.hover.piercing"), + FieldDef.intField("ability.duration", this::getSpinDurationTicks, this::setSpinDurationTicks) + .range(1, 1000) + .visibleWhen(() -> this.getSweepModeEnum() == SweepMode.SPIN), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 054176a7b..3684a8b73 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -10,13 +10,14 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDash; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityDash; +import java.util.Arrays; +import java.util.List; import java.util.Random; /** @@ -104,13 +105,6 @@ public class AbilityDash extends Ability implements IAbilityDash { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityDash(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -349,4 +343,14 @@ public class AbilityDash extends Ability implements IAbilityDash { public DashDirection getChosenDirection() { return chosenDirection; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.enumField("ability.mode", DashMode.class, this::getDashModeEnum, this::setDashModeEnum) + .hover("ability.hover.dashMode"), + FieldDef.floatField("ability.dashDist", this::getDashDistance, this::setDashDistance), + FieldDef.floatField("ability.dashSpeed", this::getDashSpeed, this::setDashSpeed) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 3ef2e164d..fb2f94646 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -17,10 +17,12 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityDisc; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityDisc; + +import java.util.Arrays; +import java.util.List; import noppes.npcs.entity.EntityNPCInterface; /** @@ -69,12 +71,6 @@ public class AbilityDisc extends Ability implements IAbilityDisc { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityDisc(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -279,4 +275,56 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public int getPreviewActiveDuration() { return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + // Type tab + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), + FieldDef.floatField("ability.discRadius", this::getDiscRadius, this::setDiscRadius), + FieldDef.floatField("ability.discThickness", this::getDiscThickness, this::setDiscThickness), + FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming), + FieldDef.boolField("ability.boomerang", this::isBoomerang, this::setBoomerang) + .hover("ability.hover.boomerang"), + FieldDef.intField("ability.boomerangDelay", this::getBoomerangDelay, this::setBoomerangDelay) + .visibleWhen(this::isBoomerang), + FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + // Visual tab + FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) + .tab(TabTarget.VISUAL).range(0, 1) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) + .tab(TabTarget.VISUAL).range(0.01f, 5.0f) + .visibleWhen(this::hasLightningEffect), + FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) + .tab(TabTarget.VISUAL).range(0.1f, 10.0f) + .visibleWhen(this::hasLightningEffect) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 53377161a..89fe6acfc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -17,10 +17,12 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEnergyBeam; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityEnergyBeam; + +import java.util.Arrays; +import java.util.List; import noppes.npcs.entity.EntityNPCInterface; /** @@ -66,12 +68,6 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityEnergyBeam(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -282,4 +278,54 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public int getPreviewActiveDuration() { return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + // Type tab + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), + FieldDef.floatField("ability.beamWidth", this::getBeamWidth, this::setBeamWidth), + FieldDef.floatField("ability.headSize", this::getHeadSize, this::setHeadSize), + FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming), + FieldDef.floatField("ability.homingRange", this::getHomingRange, this::setHomingRange) + .visibleWhen(this::isHoming), + FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), + FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + // Visual tab + FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) + .tab(TabTarget.VISUAL).range(0, 1) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) + .tab(TabTarget.VISUAL).range(0.01f, 5.0f) + .visibleWhen(this::hasLightningEffect), + FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) + .tab(TabTarget.VISUAL).range(0.1f, 10.0f) + .visibleWhen(this::hasLightningEffect) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index 92c7ca58e..bfa7b0f34 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -10,13 +8,15 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityGuard; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityGuard; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; +import java.util.List; import java.util.Random; /** @@ -67,13 +67,6 @@ public class AbilityGuard extends Ability implements IAbilityGuard { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityGuard(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -290,4 +283,27 @@ public class AbilityGuard extends Ability implements IAbilityGuard { public void setCounterAnimationId(int counterAnimationId) { this.counterAnimationId = counterAnimationId; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) + .range(1, 1000), + FieldDef.floatField("ability.dmgReduce", this::getDamageReduction, this::setDamageReduction), + FieldDef.boolField("ability.canCounter", this::isCanCounter, this::setCanCounter) + .hover("ability.hover.canCounter"), + FieldDef.enumField("ability.counterType", CounterType.class, this::getCounterTypeEnum, this::setCounterTypeEnum) + .hover("ability.hover.counterType") + .visibleWhen(this::isCanCounter), + FieldDef.floatField("ability.counterValue", this::getCounterValue, this::setCounterValue) + .visibleWhen(this::isCanCounter), + FieldDef.floatField("ability.counterChance", this::getCounterChance, this::setCounterChance) + .visibleWhen(this::isCanCounter), + FieldDef.stringField("ability.counterSound", this::getCounterSound, this::setCounterSound) + .visibleWhen(this::isCanCounter), + FieldDef.intField("ability.counterAnim", this::getCounterAnimationId, this::setCounterAnimationId) + .visibleWhen(this::isCanCounter), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index 61841ded4..cd5194b29 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -14,13 +12,14 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHazard; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityHazard; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Random; @@ -95,13 +94,6 @@ public class AbilityHazard extends Ability implements IAbilityHazard { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityHazard(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -616,4 +608,26 @@ public class AbilityHazard extends Ability implements IAbilityHazard { public double getZoneZ() { return zoneZ; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) + .range(1, 2000), + FieldDef.enumField("ability.shape", HazardShape.class, this::getShapeEnum, this::setShapeEnum) + .hover("ability.hover.shape"), + FieldDef.enumField("ability.placement", PlacementMode.class, this::getPlacementEnum, this::setPlacementEnum) + .hover("ability.hover.placement"), + FieldDef.floatField("ability.radius", this::getRadius, this::setRadius), + FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius), + FieldDef.floatField("ability.dmgPerSec", this::getDamagePerSecond, this::setDamagePerSecond), + FieldDef.intField("ability.dmgInterval", this::getDamageInterval, this::setDamageInterval), + FieldDef.intField("ability.slownessLvl", this::getSlownessLevel, this::setSlownessLevel), + FieldDef.intField("ability.debuffDur", this::getDebuffDuration, this::setDebuffDuration), + FieldDef.intField("ability.poisonLvl", this::getPoisonLevel, this::setPoisonLevel), + FieldDef.boolField("ability.affectsCaster", this::isAffectsCaster, this::setAffectsCaster) + .hover("ability.hover.affectsCaster"), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 406be2f3a..543a26821 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -11,14 +9,14 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHeal; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityHeal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -63,12 +61,6 @@ public class AbilityHeal extends Ability implements IAbilityHeal { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityHeal(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -289,4 +281,22 @@ public class AbilityHeal extends Ability implements IAbilityHeal { public void setInstantHeal(boolean instantHeal) { this.instantHeal = instantHeal; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.boolField("dialog.instant", this::isInstantHeal, this::setInstantHeal) + .hover("ability.hover.instant"), + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) + .range(1, 1000) + .visibleWhen(() -> !this.isInstantHeal()), + FieldDef.floatField("ability.healAmount", this::getHealAmount, this::setHealAmount), + FieldDef.floatField("ability.healPercent", this::getHealPercent, this::setHealPercent), + FieldDef.floatField("ability.healRadius", this::getHealRadius, this::setHealRadius), + FieldDef.boolField("ability.healSelf", this::isHealSelf, this::setHealSelf) + .hover("ability.hover.healSelf"), + FieldDef.boolField("ability.healAllies", this::isHealAllies, this::setHealAllies) + .hover("ability.hover.healAllies") + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index 4ed4a0e78..a86662304 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -9,12 +7,14 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityHeavyHit; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityHeavyHit; import noppes.npcs.entity.EntityNPCInterface; +import java.util.Arrays; +import java.util.List; + /** * Heavy Hit ability: Single-target melee attack with optional stun. * Deals high damage to one target and can stun them. @@ -44,13 +44,6 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityHeavyHit(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -113,4 +106,13 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { public void setKnockback(float knockback) { this.knockback = knockback; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 3b45894b4..4d3ce9fbe 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -6,6 +6,8 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; @@ -16,10 +18,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityLaserShot; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.api.ability.type.IAbilityLaserShot; + +import java.util.Arrays; +import java.util.List; import noppes.npcs.entity.EntityNPCInterface; /** @@ -63,12 +65,6 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityLaserShot(this, callback); - } - @Override public boolean isTargetingModeLocked() { return false; @@ -229,4 +225,45 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { public boolean spawnPreviewDuringWindup() { return false; // Laser has no charging, spawns at active phase } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + // Type tab + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.laserWidth", this::getLaserWidth, this::setLaserWidth), + FieldDef.floatField("ability.expansionSpeed", this::getExpansionSpeed, this::setExpansionSpeed), + FieldDef.intField("ability.lingerTicks", this::getLingerTicks, this::setLingerTicks), + FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), + FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.floatField("ability.knockbackUp", this::getKnockbackUp, this::setKnockbackUp), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + // Visual tab + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) + .tab(TabTarget.VISUAL).range(0, 1) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) + .tab(TabTarget.VISUAL).range(0.01f, 5.0f) + .visibleWhen(this::hasLightningEffect), + FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) + .tab(TabTarget.VISUAL).range(0.1f, 10.0f) + .visibleWhen(this::hasLightningEffect) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index 78936adbf..f4c156f49 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -17,10 +17,12 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityOrb; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityOrb; + +import java.util.Arrays; +import java.util.List; import noppes.npcs.entity.EntityNPCInterface; /** @@ -65,12 +67,6 @@ public class AbilityOrb extends Ability implements IAbilityOrb { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityOrb(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -418,4 +414,52 @@ public class AbilityOrb extends Ability implements IAbilityOrb { public int getPreviewActiveDuration() { return lifespanData.maxLifetime > 0 ? Math.min(lifespanData.maxLifetime, 100) : 100; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + // Type tab + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("stats.speed", this::getOrbSpeed, this::setOrbSpeed), + FieldDef.floatField("stats.size", this::getOrbSize, this::setOrbSize), + FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), + FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming), + FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + // Visual tab + FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) + .tab(TabTarget.VISUAL).range(0, 1) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) + .tab(TabTarget.VISUAL).range(0.01f, 5.0f) + .visibleWhen(this::hasLightningEffect), + FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) + .tab(TabTarget.VISUAL).range(0.1f, 10.0f) + .visibleWhen(this::hasLightningEffect) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 6b81fabe7..03b815441 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -10,13 +8,14 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityProjectile; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityProjectile; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; import java.util.List; /** @@ -54,12 +53,6 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityProjectile(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -258,4 +251,23 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { public void setHomingStrength(float homingStrength) { this.homingStrength = homingStrength; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.stringEnumField("ability.projType", new String[]{"fireball", "arrow", "magic"}, this::getProjectileType, this::setProjectileType), + FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index 006084f5e..83af93df7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -11,13 +9,13 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityShockwave; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityShockwave; +import java.util.Arrays; import java.util.List; /** @@ -49,12 +47,6 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityShockwave(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -175,4 +167,14 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { this.maxTargets = maxTargets; } + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.pushRadius", this::getPushRadius, this::setPushRadius), + FieldDef.floatField("ability.pushStrength", this::getPushStrength, this::setPushStrength), + FieldDef.intField("ability.maxTargets", this::getMaxTargets, this::setMaxTargets), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index b3c800d81..b26e203c1 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -13,14 +13,14 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySlam; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilitySlam; import somehussar.gui.annotationHandling.GuiEditable; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; +import java.util.Arrays; import java.util.List; /** @@ -71,12 +71,6 @@ public class AbilitySlam extends Ability implements IAbilitySlam { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilitySlam(this, callback); - } - /** * Slam can be AOE_SELF (jump in place) or AOE_TARGET (leap to target). */ @@ -573,4 +567,16 @@ public class AbilitySlam extends Ability implements IAbilitySlam { public void setLeapHeight(float leapHeight) { this.leapHeight = leapHeight; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.radius", this::getRadius, this::setRadius), + FieldDef.floatField("ability.knockback", this::getKnockbackStrength, this::setKnockbackStrength), + FieldDef.floatField("ability.leapSpeed", this::getLeapSpeed, this::setLeapSpeed), + FieldDef.floatField("ability.leapHeight", this::getLeapHeight, this::setLeapHeight), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index 976d9e44e..ef00df35e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -1,11 +1,11 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -14,10 +14,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import noppes.npcs.LogWriter; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilitySweeper; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.api.ability.type.IAbilitySweeper; + +import java.util.Arrays; +import java.util.List; import noppes.npcs.entity.EntityNPCInterface; /** @@ -66,12 +66,6 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilitySweeper(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -205,4 +199,33 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { public void setOuterColorWidth(float outerColorWidth) { colorData.outerColorWidth = outerColorWidth; } public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } public void setOuterColorEnabled(boolean outerColorEnabled) { colorData.outerColorEnabled = outerColorEnabled; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + // Type tab + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.intField("ability.dmgInterval", this::getDamageInterval, this::setDamageInterval), + FieldDef.floatField("ability.beamLength", this::getBeamLength, this::setBeamLength), + FieldDef.floatField("ability.beamWidth", this::getBeamWidth, this::setBeamWidth), + FieldDef.floatField("ability.beamHeight", this::getBeamHeight, this::setBeamHeight), + FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), + FieldDef.intField("ability.rotations", this::getNumberOfRotations, this::setNumberOfRotations), + FieldDef.boolField("ability.piercing", this::isPiercing, this::setPiercing) + .hover("ability.hover.piercing"), + FieldDef.boolField("ability.lockTarget", this::isLockOnTarget, this::setLockOnTarget) + .hover("ability.hover.lockTarget"), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + // Visual tab + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) + .tab(TabTarget.VISUAL), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .tab(TabTarget.VISUAL), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) + .tab(TabTarget.VISUAL), + FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) + .tab(TabTarget.VISUAL) + .visibleWhen(this::isOuterColorEnabled) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 1fef00a55..284bdec03 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -14,13 +12,14 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityTeleport; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityTeleport; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; import java.util.List; import java.util.Random; @@ -77,13 +76,6 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityTeleport(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -534,4 +526,29 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { public void setDamageRadius(float damageRadius) { this.damageRadius = damageRadius; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.enumField("ability.mode", TeleportMode.class, this::getModeEnum, this::setModeEnum), + FieldDef.floatField("ability.blinkRadius", this::getBlinkRadius, this::setBlinkRadius) + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK || this.getModeEnum() == TeleportMode.SINGLE), + FieldDef.intField("ability.blinkCount", this::getBlinkCount, this::setBlinkCount) + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK), + FieldDef.intField("ability.blinkDelay", this::getBlinkDelayTicks, this::setBlinkDelayTicks) + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK), + FieldDef.floatField("ability.behindDistance", this::getBehindDistance, this::setBehindDistance) + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BEHIND), + FieldDef.boolField("ability.lineOfSight", this::isRequireLineOfSight, this::setRequireLineOfSight) + .hover("ability.hover.lineOfSight") + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK || this.getModeEnum() == TeleportMode.SINGLE), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.dmgRadius", this::getDamageRadius, this::setDamageRadius), + FieldDef.boolField("ability.dmgAtStart", this::isDamageAtStart, this::setDamageAtStart) + .hover("ability.hover.dmgAtStart"), + FieldDef.boolField("ability.dmgAtEnd", this::isDamageAtEnd, this::setDamageAtEnd) + .hover("ability.hover.dmgAtEnd"), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index 6bf69a60b..2cb7a8a26 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -12,13 +10,14 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityTrap; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityTrap; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; + +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Random; @@ -78,12 +77,6 @@ public class AbilityTrap extends Ability implements IAbilityTrap { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui(IAbilityConfigCallback callback) { - return new SubGuiAbilityTrap(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -464,4 +457,21 @@ public class AbilityTrap extends Ability implements IAbilityTrap { public boolean isArmed() { return armed; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) + .range(1, 2000), + FieldDef.enumField("ability.placement", TrapPlacement.class, this::getPlacementEnum, this::setPlacementEnum) + .hover("ability.hover.placement"), + FieldDef.floatField("ability.triggerRad", this::getTriggerRadius, this::setTriggerRadius), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.dmgRadius", this::getDamageRadius, this::setDamageRadius), + FieldDef.intField("ability.armTime", this::getArmTime, this::setArmTime), + FieldDef.intField("ability.maxTriggers", this::getMaxTriggers, this::setMaxTriggers), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index 1bcfb7cbc..61e246bc9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -1,7 +1,5 @@ package kamkeel.npcs.controllers.data.ability.type; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; @@ -10,13 +8,13 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityVortex; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityVortex; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -67,13 +65,6 @@ public class AbilityVortex extends Ability implements IAbilityVortex { return true; } - @Override - @SideOnly(Side.CLIENT) - public SubGuiAbilityConfig createConfigGui( - IAbilityConfigCallback callback) { - return new SubGuiAbilityVortex(this, callback); - } - @Override public boolean isTargetingModeLocked() { return true; @@ -309,4 +300,21 @@ public class AbilityVortex extends Ability implements IAbilityVortex { public void setPullDamage(float pullDamage) { this.pullDamage = pullDamage; } + + @Override + public List getFieldDefinitions() { + return Arrays.asList( + FieldDef.floatField("ability.pullRadius", this::getPullRadius, this::setPullRadius), + FieldDef.floatField("ability.pullStrength", this::getPullStrength, this::setPullStrength), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), + FieldDef.boolField("ability.aoe", this::isAoe, this::setAoe) + .hover("ability.hover.aoe"), + FieldDef.intField("ability.maxTargets", this::getMaxTargets, this::setMaxTargets), + FieldDef.boolField("ability.dmgOnPull", this::isDamageOnPull, this::setDamageOnPull) + .hover("ability.hover.dmgOnPull"), + FieldDef.floatField("ability.pullDamage", this::getPullDamage, this::setPullDamage), + FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + ); + } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 684138891..9c862e3b0 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -2,171 +2,95 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.Condition; -import kamkeel.npcs.controllers.data.ability.LockMovementType; -import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.telegraph.TelegraphType; -import noppes.npcs.controllers.data.Animation; -import noppes.npcs.controllers.data.Frame; -import noppes.npcs.controllers.AnimationController; +import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.FieldType; +import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import net.minecraft.client.gui.GuiButton; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.select.GuiAnimationSelection; -import noppes.npcs.client.gui.select.GuiSoundSelection; import noppes.npcs.client.gui.util.GuiMenuTopButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.GuiScrollWindow; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.client.gui.util.ISubGuiListener; import noppes.npcs.client.gui.util.ITextfieldListener; import noppes.npcs.client.gui.util.SubGuiInterface; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; -/** - * Base SubGui for editing ability configuration with tabbed interface. - * Uses GuiMenuTopButton for navigation tabs. - *

- * Tabs: - * - General: Name, Weight, Lock Movement, Interruptible, Timing - * - Type: Type-specific settings per Ability (override in subclasses) - * - Target: Min/Max Range, Targeting Mode, Conditions (up to 3) - * - Effects: Sounds, Animations, Telegraph settings, Colors - *

- * Subclasses should override initTypeTab() and handleTypeButton()/handleTypeTextField() - * to provide type-specific settings UI. - */ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldListener, ISubGuiListener { - // Tab constants - protected static final int TAB_GENERAL = 0; - protected static final int TAB_TYPE = 1; - protected static final int TAB_TARGET = 2; - protected static final int TAB_EFFECTS = 3; - protected static final int TAB_VISUAL = 4; + private static final int DECLARATIVE_ID_START = 1000; + private static final int CLEAR_ID_START = 2000; - // Core references - protected final Ability ability; - protected final IAbilityConfigCallback callback; - protected int activeTab = TAB_GENERAL; + private static final int TAB_GENERAL = 0; + private static final int TAB_TYPE = 1; + private static final int TAB_TARGET = 2; + private static final int TAB_EFFECTS = 3; + private static final int TAB_VISUAL = 4; - // ═══════════════════════════════════════════════════════════════════════════ - // CACHED VALUES - General Tab - // ═══════════════════════════════════════════════════════════════════════════ - protected String name; - protected boolean enabled; - protected int weight; - protected LockMovementType lockMovement; - protected boolean interruptible; + private final Ability ability; + private final IAbilityConfigCallback callback; + private int activeTab = TAB_GENERAL; - // Timing - protected int cooldownTicks; - protected int windUpTicks; - protected int dazedTicks; - protected boolean syncWindupWithAnimation = true; // Sync windup ticks with animation duration + private List fieldDefs; + private boolean hasTypeFields; + private boolean hasVisualFields; - // ═══════════════════════════════════════════════════════════════════════════ - // CACHED VALUES - Target Tab - // ═══════════════════════════════════════════════════════════════════════════ - protected float minRange; - protected float maxRange; - protected TargetingMode targetingMode; - protected List conditions; + // Conditions are complex (list with add/edit/remove) - cached separately + private List conditions; + private int editingConditionIndex = -1; - // ═══════════════════════════════════════════════════════════════════════════ - // CACHED VALUES - Effects Tab - // ═══════════════════════════════════════════════════════════════════════════ - protected String windUpSound; - protected String activeSound; - protected int windUpAnimationId; - protected int activeAnimationId; - protected String windUpAnimationName = null; - protected String activeAnimationName = null; - - // Telegraph - protected boolean showTelegraph; - protected int windUpColor; - protected int activeColor; - - // Editing state - protected int editingColorId = 0; - protected int editingSoundId = 0; - protected int editingAnimationId = 0; - protected int editingConditionIndex = -1; - - // ═══════════════════════════════════════════════════════════════════════════ - // ABILITY TYPE FEATURES - // ═══════════════════════════════════════════════════════════════════════════ - protected final boolean supportsTelegraph; - protected final boolean targetingModeLocked; - protected final boolean hasTypeSettings; - protected final boolean hasVisualSettings; + // Event routing + private final Map buttonFieldMap = new HashMap<>(); + private final Map textFieldMap = new HashMap<>(); + private final Map clearFieldMap = new HashMap<>(); + private FieldDef activeSubGuiField = null; public SubGuiAbilityConfig(Ability ability, IAbilityConfigCallback callback) { this.ability = ability; this.callback = callback; - - // Cache values from ability - General - this.name = ability.getName() != null ? ability.getName() : ""; - this.enabled = ability.isEnabled(); - this.weight = ability.getWeight(); - this.lockMovement = ability.getLockMovement(); - this.interruptible = ability.isInterruptible(); - - // Timing - this.cooldownTicks = ability.getCooldownTicks(); - this.windUpTicks = ability.getWindUpTicks(); - this.dazedTicks = ability.getDazedTicks(); - - // Target - this.minRange = ability.getMinRange(); - this.maxRange = ability.getMaxRange(); - this.targetingMode = ability.getTargetingMode(); this.conditions = new ArrayList<>(ability.getConditions()); - // Effects - this.windUpSound = ability.getWindUpSound(); - this.activeSound = ability.getActiveSound(); - // Animation: check name first (built-in), then ID (user) - this.windUpAnimationName = ability.getWindUpAnimationName(); - this.activeAnimationName = ability.getActiveAnimationName(); - this.windUpAnimationId = ability.getWindUpAnimationId(); - this.activeAnimationId = ability.getActiveAnimationId(); - - // Telegraph - this.showTelegraph = ability.isShowTelegraph(); - this.windUpColor = ability.getWindUpColor(); - this.activeColor = ability.getActiveColor(); - - // Determine ability type features - TelegraphType defaultType = ability.getTelegraphType(); - this.supportsTelegraph = defaultType != null && defaultType != TelegraphType.NONE; - this.targetingModeLocked = ability.isTargetingModeLocked(); - this.hasTypeSettings = ability.hasTypeSettings(); - this.hasVisualSettings = hasVisualSettings(); + this.fieldDefs = ability.getAllFieldDefinitions(); + this.hasTypeFields = hasFieldsForTab(TabTarget.TYPE); + this.hasVisualFields = hasFieldsForTab(TabTarget.VISUAL); setBackground("menubg.png", 217); xSize = 356; ySize = 200; } + private boolean hasFieldsForTab(TabTarget target) { + for (FieldDef def : fieldDefs) { + if (def.getTab() == target) return true; + } + return false; + } + + // ═══════════════════════════════════════════════════════════════════════════ + // INIT GUI + // ═══════════════════════════════════════════════════════════════════════════ + @Override public void initGui() { super.initGui(); + buttonFieldMap.clear(); + textFieldMap.clear(); + clearFieldMap.clear(); - // ═══════════════════════════════════════════════════════════════════════ - // TOP TABS using GuiMenuTopButton - // ═══════════════════════════════════════════════════════════════════════ + // Tab buttons GuiMenuTopButton generalTab = new GuiMenuTopButton(90, guiLeft + 4, guiTop - 17, "menu.general"); generalTab.active = (activeTab == TAB_GENERAL); addTopButton(generalTab); - GuiMenuTopButton lastTab = generalTab; - if (hasTypeSettings) { + if (hasTypeFields) { GuiMenuTopButton typeTab = new GuiMenuTopButton(91, lastTab, "gui.type"); typeTab.active = (activeTab == TAB_TYPE); addTopButton(typeTab); @@ -183,277 +107,197 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi addTopButton(effectsTab); lastTab = effectsTab; - if (hasVisualSettings) { + if (hasVisualFields) { GuiMenuTopButton visualTab = new GuiMenuTopButton(94, lastTab, "ability.tab.visual"); visualTab.active = (activeTab == TAB_VISUAL); addTopButton(visualTab); } - // Close button (X) in top menu bar - use -1000 to avoid any ID conflicts GuiMenuTopButton closeBtn = new GuiMenuTopButton(-1000, guiLeft + xSize - 22, guiTop - 17, "X"); addTopButton(closeBtn); - int contentY = guiTop + 5; + // Scroll window for tab content + int swX = guiLeft + 4; + int swY = guiTop + 5; + int swW = xSize - 8; + int swH = ySize - 10; - // ═══════════════════════════════════════════════════════════════════════ - // TAB CONTENT - // ═══════════════════════════════════════════════════════════════════════ - switch (activeTab) { - case TAB_GENERAL: - initGeneralTab(contentY); - break; - case TAB_TYPE: - initTypeTab(contentY); - break; - case TAB_TARGET: - initTargetTab(contentY); - break; - case TAB_EFFECTS: - initEffectsTab(contentY); - break; - case TAB_VISUAL: - initVisualTab(contentY); - break; - } + GuiScrollWindow sw = new GuiScrollWindow(this, swX, swY, swW, swH, 0); - // ═══════════════════════════════════════════════════════════════════════ - // BOTTOM ROW - Enabled toggle (only on General tab) - // ═══════════════════════════════════════════════════════════════════════ + TabTarget tabTarget = tabTargetForIndex(activeTab); + int y = 5; + int idCounter = DECLARATIVE_ID_START; + int clearCounter = CLEAR_ID_START; + + // General tab: show type label at top if (activeTab == TAB_GENERAL) { - addLabel(new GuiNpcLabel(99, "gui.enabled", guiLeft + 8, guiTop + ySize - 18)); - GuiNpcButton enabledBtn = new GuiNpcButton(2, guiLeft + 55, guiTop + ySize - 24, 40, 20, new String[]{"gui.no", "gui.yes"}, enabled ? 1 : 0); - enabledBtn.setTextColor(enabled ? 0x00FF00 : 0xFF0000); - addButton(enabledBtn); + sw.addLabel(new GuiNpcLabel(1, "gui.type", 5, y + 5)); + sw.addLabel(new GuiNpcLabel(2, ability.getTypeId(), 50, y + 5)); + y += 24; + } + + // Render declarative fields for this tab + List tabFields = getVisibleFieldsForTab(tabTarget); + for (FieldDef def : tabFields) { + int widgetId = idCounter++; + int clearId = clearCounter++; + y = renderField(sw, def, widgetId, clearId, y); + } + + // Target tab: append conditions list + if (activeTab == TAB_TARGET) { + y = renderConditions(sw, y); + } + + sw.maxScrollY = Math.max(y - swH, 0); + addScrollableGui(0, sw); + } + + private TabTarget tabTargetForIndex(int tab) { + switch (tab) { + case TAB_GENERAL: return TabTarget.GENERAL; + case TAB_TYPE: return TabTarget.TYPE; + case TAB_TARGET: return TabTarget.TARGET; + case TAB_EFFECTS: return TabTarget.EFFECTS; + case TAB_VISUAL: return TabTarget.VISUAL; + default: return TabTarget.TYPE; } } - // ═══════════════════════════════════════════════════════════════════════════ - // GENERAL TAB - // ═══════════════════════════════════════════════════════════════════════════ - - private void initGeneralTab(int startY) { - int y = startY; - int col1LabelX = guiLeft + 8; - int col1FieldX = guiLeft + 70; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 248; - - // Row 1: Type (read-only) + Name - addLabel(new GuiNpcLabel(1, "gui.type", col1LabelX, y + 5)); - addLabel(new GuiNpcLabel(2, ability.getTypeId(), col1FieldX, y + 5)); - - addLabel(new GuiNpcLabel(3, "gui.name", col2LabelX, y + 5)); - GuiNpcTextField nameField = new GuiNpcTextField(1, this, fontRendererObj, col2FieldX, y, 100, 20, name); - addTextField(nameField); - - y += 24; - - // Row 2: Weight + Lock Movement - addLabel(new GuiNpcLabel(4, "ability.weight", col1LabelX, y + 5)); - GuiNpcTextField weightField = new GuiNpcTextField(3, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(weight)); - weightField.setIntegersOnly(); - weightField.setMinMaxDefault(1, 1000, 10); - addTextField(weightField); - - addLabel(new GuiNpcLabel(5, "ability.lockMove", col2LabelX, y + 5)); - GuiNpcButton lockMoveBtn = new GuiNpcButton(16, col2FieldX, y, 60, 20, LockMovementType.getDisplayKeys(), lockMovement.ordinal()); - lockMoveBtn.setHoverText("ability.hover.lockMove"); - addButton(lockMoveBtn); - - y += 24; - - // Row 3: Interruptible + Dazed Ticks (only if interruptible) - addLabel(new GuiNpcLabel(6, "ability.interruptible", col1LabelX, y + 5)); - GuiNpcButton interruptBtn = new GuiNpcButton(14, guiLeft + 85, y, 40, 20, new String[]{"gui.no", "gui.yes"}, interruptible ? 1 : 0); - interruptBtn.setHoverText("ability.hover.interruptible"); - addButton(interruptBtn); - - // Only show dazed ticks if interruptible is enabled - if (interruptible) { - addLabel(new GuiNpcLabel(12, "ability.dazed", col2LabelX, y + 5)); - GuiNpcTextField dazedField = new GuiNpcTextField(13, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(dazedTicks)); - dazedField.setIntegersOnly(); - dazedField.setMinMaxDefault(0, 1000, 80); - addTextField(dazedField); + private List getVisibleFieldsForTab(TabTarget target) { + List result = new ArrayList<>(); + for (FieldDef def : fieldDefs) { + if (def.getTab() == target && def.isVisible()) { + result.add(def); + } } + return result; + } - y += 28; + // ═══════════════════════════════════════════════════════════════════════════ + // FIELD RENDERING + // ═══════════════════════════════════════════════════════════════════════════ - // Separator - Timing section header - addLabel(new GuiNpcLabel(7, "ability.timing", col1LabelX, y)); + @SuppressWarnings({"unchecked", "rawtypes"}) + private int renderField(GuiScrollWindow sw, FieldDef def, int widgetId, int clearId, int y) { + int labelX = 5; + int fieldX = 100; + int fieldW = 60; + + sw.addLabel(new GuiNpcLabel(widgetId, def.getLabel(), labelX, y + 5)); + + switch (def.getType()) { + case FLOAT: { + float fVal = def.getValue() instanceof Number ? ((Number) def.getValue()).floatValue() : 0f; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW, 20, String.format("%.2f", fVal)); + tf.setFloatsOnly(); + if (def.hasRange()) tf.setMinMaxDefaultFloat(def.getMin(), def.getMax(), fVal); + if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + break; + } + case INT: { + int iVal = def.getValue() instanceof Number ? ((Number) def.getValue()).intValue() : 0; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW, 20, String.valueOf(iVal)); + tf.setIntegersOnly(); + if (def.hasRange()) tf.setMinMaxDefault((int) def.getMin(), (int) def.getMax(), iVal); + if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + break; + } + case STRING: { + String sVal = def.getValue() != null ? def.getValue().toString() : ""; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW + 40, 20, sVal); + if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + break; + } + case BOOLEAN: { + boolean bVal = def.getValue() instanceof Boolean ? (Boolean) def.getValue() : false; + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 40, 20, new String[]{"gui.no", "gui.yes"}, bVal ? 1 : 0); + if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + break; + } + case ENUM: { + Class> enumClass = def.getEnumClass(); + if (enumClass != null) { + Enum[] constants = enumClass.getEnumConstants(); + String[] names = new String[constants.length]; + for (int i = 0; i < constants.length; i++) names[i] = constants[i].toString(); + int selected = def.getValue() instanceof Enum ? ((Enum) def.getValue()).ordinal() : 0; + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 80, 20, names, selected); + if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + } + break; + } + case STRING_ENUM: { + String[] values = def.getStringEnumValues(); + if (values != null && values.length > 0) { + String curVal = def.getStringEnumValue(); + int selected = 0; + for (int i = 0; i < values.length; i++) { + if (values[i].equals(curVal)) { selected = i; break; } + } + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 80, 20, values, selected); + if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + } + break; + } + case SUB_GUI: { + String btnText = def.getButtonLabel(); + int btnW = def.hasClearAction() ? 60 : 80; + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, btnW, 20, btnText); + Integer textColor = def.getButtonTextColor(); + if (textColor != null) btn.setTextColor(textColor); + if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + + if (def.hasClearAction()) { + GuiNpcButton clearBtn = new GuiNpcButton(clearId, fieldX + btnW + 5, y, 20, 20, "X"); + sw.addButton(clearBtn); + clearFieldMap.put(clearId, def); + } + break; + } + } + return y + 24; + } + + // ═══════════════════════════════════════════════════════════════════════════ + // CONDITIONS (Target tab special handling) + // ═══════════════════════════════════════════════════════════════════════════ + + private int renderConditions(GuiScrollWindow sw, int y) { + int x = 5; + + sw.addLabel(new GuiNpcLabel(50, "ability.conditions", x, y)); y += 14; - // Check if windup animation is selected (either by name or ID) - boolean hasWindupAnimation = windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty()); - - // Row 4: Windup Ticks + Cooldown Ticks - addLabel(new GuiNpcLabel(10, "ability.windup", col1LabelX, y + 5)); - - // Only show windup textbox if sync is off or no animation selected - if (!syncWindupWithAnimation || !hasWindupAnimation) { - GuiNpcTextField windupField = new GuiNpcTextField(11, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf(windUpTicks)); - windupField.setIntegersOnly(); - windupField.setMinMaxDefault(0, 1000, 20); - addTextField(windupField); - } else { - // Show calculated value as label when synced - addLabel(new GuiNpcLabel(11, String.valueOf(windUpTicks), col1FieldX + 5, y + 5)); - } - - // Sync toggle button - only show if windup animation is selected - if (hasWindupAnimation) { - String syncLabel = syncWindupWithAnimation ? "ability.syncOn" : "ability.syncOff"; - GuiNpcButton syncBtn = new GuiNpcButton(17, guiLeft + 115, y, 50, 20, syncLabel); - syncBtn.setHoverText("ability.hover.sync"); - addButton(syncBtn); - } - - addLabel(new GuiNpcLabel(13, "ability.cooldown", col2LabelX, y + 5)); - GuiNpcTextField cooldownField = new GuiNpcTextField(10, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf(cooldownTicks)); - cooldownField.setIntegersOnly(); - cooldownField.setMinMaxDefault(0, 10000, 0); - addTextField(cooldownField); - } - - // ═══════════════════════════════════════════════════════════════════════════ - // TYPE TAB - Override in subclasses for type-specific settings - // ═══════════════════════════════════════════════════════════════════════════ - - /** - * Override this method to render type-specific settings in the Type tab. - * Use the helper methods createFloatField(), createIntField(), etc. - * Button/TextField IDs should start at 100. - * - * @param startY The Y position to start rendering from - */ - protected void initTypeTab(int startY) { - // Default: show message that no type settings are available - addLabel(new GuiNpcLabel(100, "ability.noTypeSettings", guiLeft + 8, startY + 5)); - } - - /** - * Override this method to handle button clicks for type-specific buttons. - * Button IDs 100+ are reserved for type-specific use. - */ - protected void handleTypeButton(int id, GuiNpcButton button) { - // Default: no-op - } - - /** - * Override this method to handle text field changes for type-specific fields. - * Field IDs 100+ are reserved for type-specific use. - */ - protected void handleTypeTextField(int id, GuiNpcTextField field) { - // Default: no-op - } - - // ═══════════════════════════════════════════════════════════════════════════ - // VISUAL TAB - Override in subclasses for visual settings (colors, etc.) - // ═══════════════════════════════════════════════════════════════════════════ - - /** - * Override to return true if this ability has visual settings (colors, glow, etc.). - * When true, a Visual tab will be shown in the GUI. - */ - protected boolean hasVisualSettings() { - return false; - } - - /** - * Override this method to render visual settings in the Visual tab. - * Use button/text field IDs starting at 200 for visual settings. - * - * @param startY The Y position to start rendering from - */ - protected void initVisualTab(int startY) { - // Default: show message that no visual settings are available - addLabel(new GuiNpcLabel(200, "ability.noVisualSettings", guiLeft + 8, startY + 5)); - } - - /** - * Override this method to handle button clicks for visual-specific buttons. - * Button IDs 200+ are reserved for visual-specific use. - */ - protected void handleVisualButton(int id, GuiNpcButton button) { - // Default: no-op - } - - /** - * Override this method to handle text field changes for visual-specific fields. - * Field IDs 200+ are reserved for visual-specific use. - */ - protected void handleVisualTextField(int id, GuiNpcTextField field) { - // Default: no-op - } - - // ═══════════════════════════════════════════════════════════════════════════ - // TARGET TAB - // ═══════════════════════════════════════════════════════════════════════════ - - private void initTargetTab(int startY) { - int y = startY; - int col1LabelX = guiLeft + 8; - int col1FieldX = guiLeft + 70; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 248; - - // Row 1: Min Range + Max Range - addLabel(new GuiNpcLabel(20, "ability.minRange", col1LabelX, y + 5)); - GuiNpcTextField minRangeField = new GuiNpcTextField(5, this, fontRendererObj, col1FieldX, y, 40, 20, String.valueOf((int) minRange)); - minRangeField.setIntegersOnly(); - minRangeField.setMinMaxDefault(0, 100, 0); - addTextField(minRangeField); - - addLabel(new GuiNpcLabel(21, "ability.maxRange", col2LabelX, y + 5)); - GuiNpcTextField maxRangeField = new GuiNpcTextField(6, this, fontRendererObj, col2FieldX, y, 40, 20, String.valueOf((int) maxRange)); - maxRangeField.setIntegersOnly(); - maxRangeField.setMinMaxDefault(1, 100, 20); - addTextField(maxRangeField); - - y += 24; - - // Row 2: Targeting Mode (if not locked) - addLabel(new GuiNpcLabel(22, "ability.targeting", col1LabelX, y + 5)); - if (!targetingModeLocked) { - String[] targetingModes = getAvailableTargetingModes(); - int selectedIndex = getTargetingModeIndex(targetingMode); - GuiNpcButton targetBtn = new GuiNpcButton(4, col1FieldX, y, 90, 20, targetingModes, selectedIndex); - targetBtn.setHoverText("ability.hover.targeting"); - addButton(targetBtn); - } else { - String modeName = "ability.target." + targetingMode.name().toLowerCase(); - addLabel(new GuiNpcLabel(23, modeName, col1FieldX, y + 5)); - } - - y += 28; - - // ───────────────────────────────────────────────────────────────────── - // CONDITIONS SECTION (up to 3) - // ───────────────────────────────────────────────────────────────────── - addLabel(new GuiNpcLabel(24, "ability.conditions", col1LabelX, y)); - y += 14; - - // Display existing conditions (similar to Marks pattern) for (int i = 0; i < conditions.size() && i < 3; i++) { Condition cond = conditions.get(i); String condName = getConditionDisplayName(cond); - - // Condition type button - addButton(new GuiNpcButton(50 + i * 10, col1LabelX, y, 140, 20, condName)); - - // Edit button - addButton(new GuiNpcButton(51 + i * 10, col1LabelX + 145, y, 40, 20, "gui.edit")); - - // Delete button - addButton(new GuiNpcButton(52 + i * 10, col1LabelX + 190, y, 20, 20, "X")); - + sw.addButton(new GuiNpcButton(50 + i * 10, x, y, 140, 20, condName)); + sw.addButton(new GuiNpcButton(51 + i * 10, x + 145, y, 40, 20, "gui.edit")); + sw.addButton(new GuiNpcButton(52 + i * 10, x + 190, y, 20, 20, "X")); y += 22; } - // Add button (if less than 3 conditions) if (conditions.size() < 3) { - addButton(new GuiNpcButton(80, col1LabelX, y, 50, 20, "gui.add")); + sw.addButton(new GuiNpcButton(80, x, y, 50, 20, "gui.add")); + y += 24; } + + return y; } private String getConditionDisplayName(Condition cond) { @@ -469,310 +313,102 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi case "target_hp_below": return StatCollector.translateToLocal("condition.target_hp_below") + " " + (int) (getConditionThreshold(cond) * 100) + "%"; case "hit_count": - Condition.ConditionHitCount hitCount = (Condition.ConditionHitCount) cond; - return StatCollector.translateToLocal("condition.hit_count") + ": " + hitCount.getRequiredHits() + "/" + hitCount.getWithinTicks() + "t"; + Condition.ConditionHitCount hc = (Condition.ConditionHitCount) cond; + return StatCollector.translateToLocal("condition.hit_count") + ": " + hc.getRequiredHits() + "/" + hc.getWithinTicks() + "t"; default: return typeId; } } private float getConditionThreshold(Condition cond) { - // Read threshold from NBT since inner classes don't expose it NBTTagCompound nbt = cond.writeNBT(); return nbt.hasKey("threshold") ? nbt.getFloat("threshold") : 0.5f; } - private String[] getAvailableTargetingModes() { - TargetingMode[] modes = ability.getAllowedTargetingModes(); - if (modes == null) { - modes = TargetingMode.values(); - } - String[] result = new String[modes.length]; - for (int i = 0; i < modes.length; i++) { - result[i] = "ability.target." + modes[i].name().toLowerCase(); - } - return result; - } - - private int getTargetingModeIndex(TargetingMode mode) { - TargetingMode[] modes = ability.getAllowedTargetingModes(); - if (modes == null) { - return mode.ordinal(); - } - for (int i = 0; i < modes.length; i++) { - if (modes[i] == mode) return i; - } - return 0; - } - - // ═══════════════════════════════════════════════════════════════════════════ - // EFFECTS TAB - // ═══════════════════════════════════════════════════════════════════════════ - - private void initEffectsTab(int startY) { - int y = startY; - int col1LabelX = guiLeft + 8; - int col1FieldX = guiLeft + 85; - int col1ClearX = guiLeft + 160; - int col2LabelX = guiLeft + 185; - int col2FieldX = guiLeft + 255; - - // ───────────────────────────────────────────────────────────────────── - // SOUNDS SECTION - // ───────────────────────────────────────────────────────────────────── - addLabel(new GuiNpcLabel(30, "advanced.sounds", col1LabelX, y)); - y += 14; - - // Wind Up Sound - addLabel(new GuiNpcLabel(31, "ability.windUpSound", col1LabelX, y + 5)); - String windUpSoundDisplay = windUpSound != null && !windUpSound.isEmpty() ? truncateString(windUpSound, 10) : StatCollector.translateToLocal("gui.none"); - addButton(new GuiNpcButton(30, col1FieldX, y, 70, 20, windUpSoundDisplay)); - addButton(new GuiNpcButton(35, col1ClearX, y, 20, 20, "X")); - - // Active Sound - addLabel(new GuiNpcLabel(32, "ability.activeSound", col2LabelX, y + 5)); - String activeSoundDisplay = activeSound != null && !activeSound.isEmpty() ? truncateString(activeSound, 10) : StatCollector.translateToLocal("gui.none"); - addButton(new GuiNpcButton(31, col2FieldX, y, 70, 20, activeSoundDisplay)); - addButton(new GuiNpcButton(36, col2FieldX + 75, y, 20, 20, "X")); - - y += 26; - - // ───────────────────────────────────────────────────────────────────── - // ANIMATIONS SECTION - // ───────────────────────────────────────────────────────────────────── - addLabel(new GuiNpcLabel(33, "menu.animations", col1LabelX, y)); - y += 14; - - // Wind Up Animation - addLabel(new GuiNpcLabel(34, "ability.windUpAnim", col1LabelX, y + 5)); - String windUpAnimName = getAnimationName(windUpAnimationId, true); - addButton(new GuiNpcButton(32, col1FieldX, y, 70, 20, windUpAnimName)); - addButton(new GuiNpcButton(37, col1ClearX, y, 20, 20, "X")); - - // Active Animation - addLabel(new GuiNpcLabel(35, "ability.activeAnim", col2LabelX, y + 5)); - String activeAnimName = getAnimationName(activeAnimationId, false); - addButton(new GuiNpcButton(33, col2FieldX, y, 70, 20, activeAnimName)); - addButton(new GuiNpcButton(38, col2FieldX + 75, y, 20, 20, "X")); - - y += 26; - - // ───────────────────────────────────────────────────────────────────── - // TELEGRAPH SECTION (only if supported) - // ───────────────────────────────────────────────────────────────────── - if (supportsTelegraph) { - addLabel(new GuiNpcLabel(40, "ability.telegraph", col1LabelX, y)); - y += 14; - - // Show Telegraph - addLabel(new GuiNpcLabel(41, "ability.showTelegraph", col1LabelX, y + 5)); - GuiNpcButton telegraphBtn = new GuiNpcButton(20, guiLeft + 95, y, 40, 20, new String[]{"gui.no", "gui.yes"}, showTelegraph ? 1 : 0); - telegraphBtn.setHoverText("ability.hover.showTelegraph"); - addButton(telegraphBtn); - - // Telegraph Type (separate column) - String typeKey = ability.getTelegraphType().name().toLowerCase(); - addLabel(new GuiNpcLabel(42, "ability.telegraphType", guiLeft + 200, y + 5)); - String telegraphLangKey = typeKey.equals("none") ? "gui.none" : "telegraph." + typeKey; - addLabel(new GuiNpcLabel(43, telegraphLangKey, guiLeft + 280, y + 5)); - - y += 24; - - // Colors - only show when telegraph is enabled - if (showTelegraph) { - addLabel(new GuiNpcLabel(44, "ability.windUpColor", col1LabelX, y + 5)); - String windUpHex = String.format("%06X", windUpColor & 0xFFFFFF); - GuiNpcButton windUpColorBtn = new GuiNpcButton(22, guiLeft + 95, y, 55, 20, windUpHex); - windUpColorBtn.setTextColor(windUpColor & 0xFFFFFF); - addButton(windUpColorBtn); - - addLabel(new GuiNpcLabel(45, "ability.activeColor", guiLeft + 200, y + 5)); - String activeHex = String.format("%06X", activeColor & 0xFFFFFF); - GuiNpcButton activeColorBtn = new GuiNpcButton(24, guiLeft + 280, y, 55, 20, activeHex); - activeColorBtn.setTextColor(activeColor & 0xFFFFFF); - addButton(activeColorBtn); - } - } - } - - private String truncateString(String str, int maxLen) { - if (str == null) return ""; - if (str.length() <= maxLen) return str; - int lastSlash = str.lastIndexOf('/'); - if (lastSlash >= 0 && str.length() - lastSlash <= maxLen) { - return "..." + str.substring(lastSlash); - } - return "..." + str.substring(str.length() - maxLen + 3); - } - - private String getAnimationName(int animId, boolean isWindUp) { - String animName = isWindUp ? windUpAnimationName : activeAnimationName; - // Check if we have a built-in animation (by name) - if (animName != null && !animName.isEmpty()) { - return truncateString(animName, 8); - } - // Check if we have a user animation (by ID) - if (animId >= 0) { - return "ID: " + animId; - } - return StatCollector.translateToLocal("gui.none"); - } - // ═══════════════════════════════════════════════════════════════════════════ // BUTTON EVENTS // ═══════════════════════════════════════════════════════════════════════════ @Override + @SuppressWarnings({"unchecked", "rawtypes"}) public void buttonEvent(GuiButton guibutton) { int id = guibutton.id; // Tab switching - if (id == 90) { - activeTab = TAB_GENERAL; - initGui(); - return; - } - if (id == 91 && hasTypeSettings) { - activeTab = TAB_TYPE; - initGui(); - return; - } - if (id == 92) { - activeTab = TAB_TARGET; - initGui(); - return; - } - if (id == 93) { - activeTab = TAB_EFFECTS; - initGui(); - return; - } - if (id == 94 && hasVisualSettings) { - activeTab = TAB_VISUAL; - initGui(); - return; - } + if (id == 90) { activeTab = TAB_GENERAL; initGui(); return; } + if (id == 91) { activeTab = TAB_TYPE; initGui(); return; } + if (id == 92) { activeTab = TAB_TARGET; initGui(); return; } + if (id == 93) { activeTab = TAB_EFFECTS; initGui(); return; } + if (id == 94) { activeTab = TAB_VISUAL; initGui(); return; } + if (id == -1000) { close(); return; } - // Enabled button (bottom left) - if (id == 2) { - enabled = ((GuiNpcButton) guibutton).getValue() == 1; - initGui(); - } - - // General tab buttons - else if (id == 14) { - interruptible = ((GuiNpcButton) guibutton).getValue() == 1; - initGui(); // Refresh to show/hide dazed ticks field - } else if (id == 16) { - lockMovement = LockMovementType.fromOrdinal(((GuiNpcButton) guibutton).getValue()); - } else if (id == 17) { - // Toggle sync on/off - syncWindupWithAnimation = !syncWindupWithAnimation; - if (syncWindupWithAnimation) { - // Calculate windup ticks from animation when turning sync on - calculateWindupFromAnimation(); - } - initGui(); - } - - // Target tab - Targeting mode - else if (id == 4) { - TargetingMode[] modes = ability.getAllowedTargetingModes(); - int idx = ((GuiNpcButton) guibutton).getValue(); - if (modes != null && idx < modes.length) { - targetingMode = modes[idx]; - } else { - targetingMode = TargetingMode.values()[idx]; - } - } - - // Close button (X in top menu) - use -1000 to avoid any ID conflicts - else if (id == -1000) { - close(); - return; - } - - // Target tab - Condition buttons (50-79) - else if (id >= 50 && id < 80) { + // Condition buttons (50-80) + if (id >= 50 && id < 80) { int condIndex = (id - 50) / 10; int action = (id - 50) % 10; - if (action == 0 || action == 1) { - // Click on condition name or Edit button - open edit subgui if (condIndex < conditions.size()) { editingConditionIndex = condIndex; setSubGui(new SubGuiConditionEdit(conditions.get(condIndex))); } } else if (action == 2) { - // Delete button if (condIndex < conditions.size()) { conditions.remove(condIndex); initGui(); } } + return; } - // Add condition button - else if (id == 80) { + if (id == 80) { if (conditions.size() < 3) { editingConditionIndex = conditions.size(); setSubGui(new SubGuiConditionEdit(null)); } + return; } - // Effects tab - Telegraph - else if (id == 20) { - showTelegraph = ((GuiNpcButton) guibutton).getValue() == 1; - initGui(); - } else if (id == 22) { - editingColorId = 22; - setSubGui(new SubGuiColorSelector(windUpColor)); - } else if (id == 24) { - editingColorId = 24; - setSubGui(new SubGuiColorSelector(activeColor)); + // Clear buttons + if (id >= CLEAR_ID_START) { + FieldDef def = clearFieldMap.get(id); + if (def != null && def.hasClearAction()) { + def.getClearAction().run(); + initGui(); + } + return; } - // Effects tab - Sound buttons - else if (id == 30) { - editingSoundId = 30; - setSubGui(new GuiSoundSelection(windUpSound)); - } else if (id == 31) { - editingSoundId = 31; - setSubGui(new GuiSoundSelection(activeSound)); - } - // Sound clear buttons - else if (id == 35) { - windUpSound = ""; - initGui(); - } else if (id == 36) { - activeSound = ""; - initGui(); - } - // Animation buttons - else if (id == 32) { - editingAnimationId = 32; - setSubGui(new GuiAnimationSelection(windUpAnimationId, windUpAnimationName)); - } else if (id == 33) { - editingAnimationId = 33; - setSubGui(new GuiAnimationSelection(activeAnimationId, activeAnimationName)); - } - // Animation clear buttons - else if (id == 37) { - windUpAnimationId = -1; - windUpAnimationName = ""; - initGui(); - } else if (id == 38) { - activeAnimationId = -1; - activeAnimationName = ""; - initGui(); - } + // Declarative field buttons + if (id >= DECLARATIVE_ID_START) { + FieldDef def = buttonFieldMap.get(id); + if (def == null) return; - // Visual-specific buttons (200+) - delegate to subclass - else if (id >= 200) { - handleVisualButton(id, (GuiNpcButton) guibutton); - } - // Type-specific buttons (100-199) - delegate to subclass - else if (id >= 100) { - handleTypeButton(id, (GuiNpcButton) guibutton); + switch (def.getType()) { + case BOOLEAN: + def.setValue(((GuiNpcButton) guibutton).getValue() == 1); + initGui(); + break; + case ENUM: { + int idx = ((GuiNpcButton) guibutton).getValue(); + Class> ec = def.getEnumClass(); + if (ec != null) { + Enum[] constants = ec.getEnumConstants(); + if (idx >= 0 && idx < constants.length) def.setValue(constants[idx]); + } + initGui(); + break; + } + case STRING_ENUM: { + int idx = ((GuiNpcButton) guibutton).getValue(); + String[] values = def.getStringEnumValues(); + if (values != null && idx >= 0 && idx < values.length) def.setStringEnumValue(values[idx]); + initGui(); + break; + } + case SUB_GUI: + activeSubGuiField = def; + if (def.getSubGuiFactory() != null) setSubGui(def.getSubGuiFactory().get()); + break; + } } } @@ -783,94 +419,41 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi @Override public void unFocused(GuiNpcTextField textField) { int id = textField.id; + if (id < DECLARATIVE_ID_START) return; - // General tab - if (id == 1) { - name = textField.getText(); - } else if (id == 3) { - weight = textField.getInteger(); - } + FieldDef def = textFieldMap.get(id); + if (def == null) return; - // Target tab - else if (id == 5) { - minRange = textField.getInteger(); - } else if (id == 6) { - maxRange = textField.getInteger(); - } - - // Timing (General tab) - else if (id == 10) { - cooldownTicks = textField.getInteger(); - } else if (id == 11) { - windUpTicks = textField.getInteger(); - } else if (id == 13) { - dazedTicks = textField.getInteger(); - } - - // Visual-specific fields (200+) - delegate to subclass - else if (id >= 200) { - handleVisualTextField(id, textField); - } - // Type-specific fields (100-199) - delegate to subclass - else if (id >= 100) { - handleTypeTextField(id, textField); + switch (def.getType()) { + case FLOAT: + try { def.setValue(Float.parseFloat(textField.getText())); } catch (NumberFormatException ignored) {} + break; + case INT: + try { def.setValue(Integer.parseInt(textField.getText())); } catch (NumberFormatException ignored) {} + break; + case STRING: + def.setValue(textField.getText()); + break; } } // ═══════════════════════════════════════════════════════════════════════════ - // SUBGUI CLOSED HANDLER + // SUB GUI CLOSED // ═══════════════════════════════════════════════════════════════════════════ @Override public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingColorId == 22) { - windUpColor = 0x80000000 | rgb; - } else if (editingColorId == 24) { - activeColor = 0xC0000000 | rgb; + if (activeSubGuiField != null) { + FieldDef def = activeSubGuiField; + activeSubGuiField = null; + if (def.getSubGuiResultHandler() != null) { + def.getSubGuiResultHandler().accept(subgui); } - editingColorId = 0; initGui(); - } else if (subgui instanceof GuiSoundSelection) { - GuiSoundSelection soundSelector = (GuiSoundSelection) subgui; - if (soundSelector.selectedResource != null) { - String sound = soundSelector.selectedResource.toString(); - if (editingSoundId == 30) { - windUpSound = sound; - } else if (editingSoundId == 31) { - activeSound = sound; - } - } - editingSoundId = 0; - initGui(); - } else if (subgui instanceof GuiAnimationSelection) { - GuiAnimationSelection animSelector = (GuiAnimationSelection) subgui; - if (editingAnimationId == 32) { - if (animSelector.isBuiltInSelected()) { - // Built-in animation selected - use name, clear ID - windUpAnimationName = animSelector.selectedBuiltInName; - windUpAnimationId = -1; - } else { - // User animation selected - use ID, clear name - windUpAnimationId = animSelector.selectedAnimationId; - windUpAnimationName = ""; - } - } else if (editingAnimationId == 33) { - if (animSelector.isBuiltInSelected()) { - // Built-in animation selected - use name, clear ID - activeAnimationName = animSelector.selectedBuiltInName; - activeAnimationId = -1; - } else { - // User animation selected - use ID, clear name - activeAnimationId = animSelector.selectedAnimationId; - activeAnimationName = ""; - } - } - editingAnimationId = 0; - initGui(); - } else if (subgui instanceof SubGuiConditionEdit) { + return; + } + + if (subgui instanceof SubGuiConditionEdit) { SubGuiConditionEdit condEdit = (SubGuiConditionEdit) subgui; Condition result = condEdit.getResult(); if (result != null && editingConditionIndex >= 0) { @@ -886,178 +469,36 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } // ═══════════════════════════════════════════════════════════════════════════ - // CLOSE - Save before closing + // CLOSE / APPLY // ═══════════════════════════════════════════════════════════════════════════ @Override public void close() { - // Apply all cached values to the ability before closing applyToAbility(); - - // Notify callback that ability was saved callback.onAbilitySaved(ability); - - // Close the GUI super.close(); } - // ═══════════════════════════════════════════════════════════════════════════ - // APPLY TO ABILITY - // ═══════════════════════════════════════════════════════════════════════════ - protected void applyToAbility() { - // General - ability.setName(name); - ability.setEnabled(enabled); - ability.setWeight(weight); - ability.setLockMovement(lockMovement); - ability.setInterruptible(interruptible); - - // If sync is enabled and we have a windup animation, recalculate before saving - boolean hasWindupAnimation = windUpAnimationId >= 0 || (windUpAnimationName != null && !windUpAnimationName.isEmpty()); - if (syncWindupWithAnimation && hasWindupAnimation) { - calculateWindupFromAnimation(); - } - - // Timing - ability.setCooldownTicks(cooldownTicks); - ability.setWindUpTicks(windUpTicks); - ability.setDazedTicks(dazedTicks); - - // Target - ability.setMinRange(minRange); - ability.setMaxRange(maxRange); - ability.setTargetingMode(targetingMode); - - // Conditions + // Conditions are the only cached values - write them back ability.getConditions().clear(); - for (Condition c : conditions) { - ability.addCondition(c); - } - - // Effects - ability.setWindUpSound(windUpSound); - ability.setActiveSound(activeSound); - ability.setWindUpAnimationId(windUpAnimationId); - ability.setActiveAnimationId(activeAnimationId); - ability.setWindUpAnimationName(windUpAnimationName != null ? windUpAnimationName : ""); - ability.setActiveAnimationName(activeAnimationName != null ? activeAnimationName : ""); - - // Telegraph - ability.setShowTelegraph(showTelegraph); - ability.setWindUpColor(windUpColor); - ability.setActiveColor(activeColor); - - // Type-specific values are applied directly in handleTypeTextField and handleTypeButton + for (Condition c : conditions) ability.addCondition(c); + // All other fields write directly to ability via FieldDef lambdas } - /** - * Called when an ability is loaded from saved presets. - */ public void loadAbility(Ability loadedAbility) { if (loadedAbility == null) return; - - // Copy all values from loaded ability to current ability NBTTagCompound nbt = loadedAbility.writeNBT(); - // Keep the current typeId since we can't change types mid-edit nbt.setString("typeId", ability.getTypeId()); ability.readNBT(nbt); - // Update cached values - this.name = ability.getName() != null ? ability.getName() : ""; - this.enabled = ability.isEnabled(); - this.weight = ability.getWeight(); - this.lockMovement = ability.getLockMovement(); - this.interruptible = ability.isInterruptible(); - - this.cooldownTicks = ability.getCooldownTicks(); - this.windUpTicks = ability.getWindUpTicks(); - this.dazedTicks = ability.getDazedTicks(); - - this.minRange = ability.getMinRange(); - this.maxRange = ability.getMaxRange(); - this.targetingMode = ability.getTargetingMode(); this.conditions = new ArrayList<>(ability.getConditions()); - - this.showTelegraph = ability.isShowTelegraph(); - this.windUpColor = ability.getWindUpColor(); - this.activeColor = ability.getActiveColor(); - + this.fieldDefs = ability.getAllFieldDefinitions(); + this.hasTypeFields = hasFieldsForTab(TabTarget.TYPE); + this.hasVisualFields = hasFieldsForTab(TabTarget.VISUAL); initGui(); } - // ═══════════════════════════════════════════════════════════════════════════ - // SYNC ANIMATION - // ═══════════════════════════════════════════════════════════════════════════ - - /** - * Calculates windup ticks from the selected windup animation's total duration. - */ - private void calculateWindupFromAnimation() { - if (AnimationController.Instance == null) { - return; - } - - Animation animation = null; - // Check for built-in animation (by name) first - if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { - animation = (Animation) AnimationController.Instance.get(windUpAnimationName); - } - // Fall back to user animation (by ID) - else if (windUpAnimationId >= 0) { - animation = (Animation) AnimationController.Instance.get(windUpAnimationId); - } - - if (animation == null || animation.frames.isEmpty()) { - return; - } - - // Calculate total duration by summing all frame durations - int totalDuration = 0; - for (Frame frame : animation.frames) { - totalDuration += frame.getDuration(); - } - - // Update the cached value and refresh GUI - windUpTicks = totalDuration; - initGui(); - } - - // ═══════════════════════════════════════════════════════════════════════════ - // HELPER METHODS FOR SUBCLASSES - // ═══════════════════════════════════════════════════════════════════════════ - - /** - * Creates a float text field for type-specific settings. - */ - protected GuiNpcTextField createFloatField(int id, int x, int y, int width, float value) { - GuiNpcTextField field = new GuiNpcTextField(id, this, fontRendererObj, x, y, width, 20, String.format("%.1f", value)); - return field; - } - - /** - * Creates an integer text field for type-specific settings. - */ - protected GuiNpcTextField createIntField(int id, int x, int y, int width, int value) { - GuiNpcTextField field = new GuiNpcTextField(id, this, fontRendererObj, x, y, width, 20, String.valueOf(value)); - field.setIntegersOnly(); - return field; - } - - /** - * Parses a float from a text field with a fallback default value. - */ - protected float parseFloat(GuiNpcTextField field, float defaultValue) { - try { - return Float.parseFloat(field.getText()); - } catch (NumberFormatException e) { - return defaultValue; - } - } - - /** - * Gets the ability being edited. - */ protected Ability getAbility() { return ability; } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java deleted file mode 100644 index ea35797c4..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCharge.java +++ /dev/null @@ -1,92 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityCharge; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Charge ability type-specific settings. - */ -public class SubGuiAbilityCharge extends SubGuiAbilityConfig { - - private final AbilityCharge charge; - - public SubGuiAbilityCharge(AbilityCharge ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.charge = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Speed - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, charge.getDamage())); - - addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, charge.getChargeSpeed())); - - y += 24; - - // Row 2: Knockback - addLabel(new GuiNpcLabel(102, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, charge.getKnockback())); - - y += 24; - - // Row 3: Hit Width + Effects - addLabel(new GuiNpcLabel(104, "ability.hitWidth", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, charge.getHitWidth())); - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 150) { - setSubGui(new SubGuiAbilityEffects(charge.getEffects())); - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - charge.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - charge.setDamage(parseFloat(field, charge.getDamage())); - break; - case 101: - charge.setChargeSpeed(parseFloat(field, charge.getChargeSpeed())); - break; - case 102: - charge.setKnockback(parseFloat(field, charge.getKnockback())); - break; - case 104: - charge.setHitWidth(parseFloat(field, charge.getHitWidth())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java deleted file mode 100644 index a1539536d..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityCutter.java +++ /dev/null @@ -1,141 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityCutter; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Cutter ability type-specific settings. - */ -public class SubGuiAbilityCutter extends SubGuiAbilityConfig { - - private final AbilityCutter cutter; - - public SubGuiAbilityCutter(AbilityCutter ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.cutter = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Range - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, cutter.getDamage())); - - addLabel(new GuiNpcLabel(101, "gui.range", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, cutter.getRange())); - - y += 24; - - // Row 2: Arc Angle + Inner Radius - addLabel(new GuiNpcLabel(102, "ability.arcAngle", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, cutter.getArcAngle())); - - addLabel(new GuiNpcLabel(103, "ability.innerRadius", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, cutter.getInnerRadius())); - - y += 24; - - // Row 3: Knockback + Sweep Speed - addLabel(new GuiNpcLabel(104, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, cutter.getKnockback())); - - addLabel(new GuiNpcLabel(105, "ability.sweepSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, cutter.getSweepSpeed())); - - y += 24; - - // Row 4: Sweep Mode + Piercing - addLabel(new GuiNpcLabel(106, "ability.sweepMode", labelX, y + 5)); - String[] sweepModes = {"Swipe", "Spin"}; - GuiNpcButton sweepModeBtn = new GuiNpcButton(106, fieldX, y, 70, 20, sweepModes, cutter.getSweepModeEnum().ordinal()); - sweepModeBtn.setHoverText("ability.hover.sweepMode"); - addButton(sweepModeBtn); - - addLabel(new GuiNpcLabel(107, "ability.piercing", col2LabelX, y + 5)); - GuiNpcButton piercingBtn = new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, cutter.isPiercing() ? 1 : 0); - piercingBtn.setHoverText("ability.hover.piercing"); - addButton(piercingBtn); - - y += 24; - - // Row 5: Spin Duration (only for SPIN mode) + Effects button - if (cutter.getSweepModeEnum() == AbilityCutter.SweepMode.SPIN) { - addLabel(new GuiNpcLabel(108, "ability.duration", labelX, y + 5)); - GuiNpcTextField durationField = createIntField(108, fieldX, y, 50, cutter.getSpinDurationTicks()); - durationField.setMinMaxDefault(1, 1000, 60); - addTextField(durationField); - } - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 106: - cutter.setSweepModeEnum(AbilityCutter.SweepMode.values()[value]); - initGui(); // Refresh to show/hide duration field - break; - case 107: - cutter.setPiercing(value == 1); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(cutter.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - cutter.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - cutter.setDamage(parseFloat(field, cutter.getDamage())); - break; - case 101: - cutter.setRange(parseFloat(field, cutter.getRange())); - break; - case 102: - cutter.setArcAngle(parseFloat(field, cutter.getArcAngle())); - break; - case 103: - cutter.setInnerRadius(parseFloat(field, cutter.getInnerRadius())); - break; - case 104: - cutter.setKnockback(parseFloat(field, cutter.getKnockback())); - break; - case 105: - cutter.setSweepSpeed(parseFloat(field, cutter.getSweepSpeed())); - break; - case 108: - cutter.setSpinDurationTicks(field.getInteger()); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java deleted file mode 100644 index 9d7bd63b6..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDash.java +++ /dev/null @@ -1,65 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.type.AbilityDash; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; - -/** - * GUI for configuring Dash ability type-specific settings. - */ -public class SubGuiAbilityDash extends SubGuiAbilityConfig { - - private final AbilityDash dash; - - public SubGuiAbilityDash(AbilityDash ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.dash = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Dash Mode - addLabel(new GuiNpcLabel(100, "ability.mode", labelX, y + 5)); - String[] dashModes = {"Aggressive", "Defensive"}; - GuiNpcButton modeBtn = new GuiNpcButton(100, fieldX, y, 80, 20, dashModes, dash.getDashModeEnum().ordinal()); - modeBtn.setHoverText("ability.hover.dashMode"); - addButton(modeBtn); - - y += 24; - - // Row 2: Dash Distance + Dash Speed - addLabel(new GuiNpcLabel(101, "ability.dashDist", labelX, y + 5)); - addTextField(createFloatField(101, fieldX, y, 50, dash.getDashDistance())); - - addLabel(new GuiNpcLabel(102, "ability.dashSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(102, col2FieldX, y, 50, dash.getDashSpeed())); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 100) { - dash.setDashModeEnum(AbilityDash.DashMode.values()[button.getValue()]); - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 101: - dash.setDashDistance(parseFloat(field, dash.getDashDistance())); - break; - case 102: - dash.setDashSpeed(parseFloat(field, dash.getDashSpeed())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java deleted file mode 100644 index 5faf662b0..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityDisc.java +++ /dev/null @@ -1,323 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityDisc; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Disc ability type-specific settings. - */ -public class SubGuiAbilityDisc extends SubGuiAbilityConfig { - - private final AbilityDisc disc; - private int editingVisualColorId = 0; - - public SubGuiAbilityDisc(AbilityDisc ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.disc = ability; - } - - @Override - protected boolean hasVisualSettings() { - return true; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Speed - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, disc.getDamage())); - - addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, disc.getSpeed())); - - y += 24; - - // Row 2: Disc Radius + Disc Thickness - addLabel(new GuiNpcLabel(102, "ability.discRadius", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, disc.getDiscRadius())); - - addLabel(new GuiNpcLabel(103, "ability.discThickness", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, disc.getDiscThickness())); - - y += 24; - - // Row 3: Homing + Homing Strength (only show strength if homing) - addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isHoming() ? 1 : 0); - homingBtn.setHoverText("ability.hover.homing"); - addButton(homingBtn); - - if (disc.isHoming()) { - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, disc.getHomingStrength())); - } - - y += 24; - - // Row 4: Boomerang + Boomerang Delay (only show delay if boomerang) - addLabel(new GuiNpcLabel(106, "ability.boomerang", labelX, y + 5)); - GuiNpcButton boomerangBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isBoomerang() ? 1 : 0); - boomerangBtn.setHoverText("ability.hover.boomerang"); - addButton(boomerangBtn); - - if (disc.isBoomerang()) { - addLabel(new GuiNpcLabel(107, "ability.boomerangDelay", col2LabelX, y + 5)); - addTextField(createIntField(107, col2FieldX, y, 50, disc.getBoomerangDelay())); - } - - y += 24; - - // Row 5: Explosive + Explosion Radius (only show radius if explosive) - addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); - GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isExplosive() ? 1 : 0); - explosiveBtn.setHoverText("ability.hover.explosive"); - addButton(explosiveBtn); - - if (disc.isExplosive()) { - addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, disc.getExplosionRadius())); - } - - y += 24; - - // Row 6: Knockback + Max Distance - addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(110, fieldX, y, 50, disc.getKnockback())); - - addLabel(new GuiNpcLabel(111, "ability.maxDist", col2LabelX, y + 5)); - addTextField(createFloatField(111, col2FieldX, y, 50, disc.getMaxDistance())); - - y += 24; - - // Row 7: Max Lifetime + Effects button - addLabel(new GuiNpcLabel(112, "ability.lifetime", labelX, y + 5)); - addTextField(createIntField(112, fieldX, y, 50, disc.getMaxLifetime())); - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void initVisualTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 260; - - // Row 1: Anchor Point - addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), disc.getAnchorPointEnum().getId()); - anchorBtn.setHoverText("ability.hover.anchorPoint"); - addButton(anchorBtn); - - y += 24; - - // Row 2: Inner Color + Outer Color - addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); - String innerHex = String.format("%06X", disc.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); - innerColorBtn.setTextColor(disc.getInnerColor() & 0xFFFFFF); - addButton(innerColorBtn); - - addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); - String outerHex = String.format("%06X", disc.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(disc.getOuterColor() & 0xFFFFFF); - outerColorBtn.setEnabled(disc.isOuterColorEnabled()); - addButton(outerColorBtn); - - y += 24; - - // Row 2: Outer Color Enabled + Outer Color Width - addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); - addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.isOuterColorEnabled() ? 1 : 0)); - - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, disc.getOuterColorWidth()); - widthField.setEnabled(disc.isOuterColorEnabled()); - addTextField(widthField); - - y += 24; - - // Row 3: Outer Color Alpha - addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); - GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, disc.getOuterColorAlpha()); - alphaField.setEnabled(disc.isOuterColorEnabled()); - alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); - addTextField(alphaField); - - y += 24; - - // Row 4: Rotation Speed - addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", labelX, y + 5)); - addTextField(createFloatField(205, fieldX, y, 50, disc.getRotationSpeed())); - - y += 24; - - // Row 5: Lightning Effect Enabled - addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, disc.hasLightningEffect() ? 1 : 0); - lightningBtn.setHoverText("ability.hover.lightning"); - addButton(lightningBtn); - - // Only show Lightning settings if Lightning is enabled - if (disc.hasLightningEffect()) { - y += 24; - - // Row 6: Density + Radius - addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(disc.getLightningDensity())); - densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); - addTextField(densityField); - - addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(disc.getLightningRadius())); - radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); - addTextField(radiusField); - } - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 104: - disc.setHoming(value == 1); - initGui(); - break; - case 106: - disc.setBoomerang(value == 1); - initGui(); - break; - case 108: - disc.setExplosive(value == 1); - initGui(); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(disc.getEffects())); - break; - } - } - - @Override - protected void handleVisualButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 200: - editingVisualColorId = 200; - setSubGui(new SubGuiColorSelector(disc.getInnerColor())); - break; - case 201: - editingVisualColorId = 201; - setSubGui(new SubGuiColorSelector(disc.getOuterColor())); - break; - case 202: - disc.setOuterColorEnabled(value == 1); - initGui(); - break; - case 206: - disc.setLightningEffect(value == 1); - initGui(); - break; - case 210: - disc.setAnchorPointEnum(AnchorPoint.fromId(value)); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingVisualColorId == 200) { - disc.setInnerColor(rgb); - } else if (editingVisualColorId == 201) { - disc.setOuterColor(rgb); - } - editingVisualColorId = 0; - initGui(); - } else if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - disc.setEffects(result); - } - } else { - super.subGuiClosed(subgui); - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - disc.setDamage(parseFloat(field, disc.getDamage())); - break; - case 101: - disc.setSpeed(parseFloat(field, disc.getSpeed())); - break; - case 102: - disc.setDiscRadius(parseFloat(field, disc.getDiscRadius())); - break; - case 103: - disc.setDiscThickness(parseFloat(field, disc.getDiscThickness())); - break; - case 105: - disc.setHomingStrength(parseFloat(field, disc.getHomingStrength())); - break; - case 107: - disc.setBoomerangDelay(field.getInteger()); - break; - case 109: - disc.setExplosionRadius(parseFloat(field, disc.getExplosionRadius())); - break; - case 110: - disc.setKnockback(parseFloat(field, disc.getKnockback())); - break; - case 111: - disc.setMaxDistance(parseFloat(field, disc.getMaxDistance())); - break; - case 112: - disc.setMaxLifetime(field.getInteger()); - break; - } - } - - @Override - protected void handleVisualTextField(int id, GuiNpcTextField field) { - switch (id) { - case 203: - disc.setOuterColorWidth(parseFloat(field, disc.getOuterColorWidth())); - break; - case 204: - disc.setOuterColorAlpha(parseFloat(field, disc.getOuterColorAlpha())); - break; - case 205: - disc.setRotationSpeed(parseFloat(field, disc.getRotationSpeed())); - break; - case 207: - disc.setLightningDensity(parseFloat(field, disc.getLightningDensity())); - break; - case 208: - disc.setLightningRadius(parseFloat(field, disc.getLightningRadius())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java deleted file mode 100644 index 49ab42e5d..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityEnergyBeam.java +++ /dev/null @@ -1,312 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityEnergyBeam; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Energy Beam ability type-specific settings. - * Energy Beam is a homing head with trailing path (DBZ-style). - */ -public class SubGuiAbilityEnergyBeam extends SubGuiAbilityConfig { - - private final AbilityEnergyBeam beam; - private int editingVisualColorId = 0; - - public SubGuiAbilityEnergyBeam(AbilityEnergyBeam ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.beam = ability; - } - - @Override - protected boolean hasVisualSettings() { - return true; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Speed - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, beam.getDamage())); - - addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, beam.getSpeed())); - - y += 24; - - // Row 2: Beam Width + Head Size - addLabel(new GuiNpcLabel(102, "ability.beamWidth", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, beam.getBeamWidth())); - - addLabel(new GuiNpcLabel(103, "ability.headSize", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, beam.getHeadSize())); - - y += 24; - - // Row 3: Homing + Homing Strength (only show strength if homing) - addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isHoming() ? 1 : 0); - homingBtn.setHoverText("ability.hover.homing"); - addButton(homingBtn); - - if (beam.isHoming()) { - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, beam.getHomingStrength())); - } - - y += 24; - - // Row 4: Max Distance (+ Homing Range only if homing) - if (beam.isHoming()) { - addLabel(new GuiNpcLabel(106, "ability.homingRange", labelX, y + 5)); - addTextField(createFloatField(106, fieldX, y, 50, beam.getHomingRange())); - } - - addLabel(new GuiNpcLabel(107, "ability.maxDist", beam.isHoming() ? col2LabelX : labelX, y + 5)); - addTextField(createFloatField(107, beam.isHoming() ? col2FieldX : fieldX, y, 50, beam.getMaxDistance())); - - y += 24; - - // Row 5: Explosive + Explosion Radius (only show radius if explosive) - addLabel(new GuiNpcLabel(108, "ability.explosive", labelX, y + 5)); - GuiNpcButton explosiveBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isExplosive() ? 1 : 0); - explosiveBtn.setHoverText("ability.hover.explosive"); - addButton(explosiveBtn); - - if (beam.isExplosive()) { - addLabel(new GuiNpcLabel(109, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, beam.getExplosionRadius())); - } - - y += 24; - - // Row 6: Knockback + Max Lifetime - addLabel(new GuiNpcLabel(110, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(110, fieldX, y, 50, beam.getKnockback())); - - addLabel(new GuiNpcLabel(111, "ability.lifetime", col2LabelX, y + 5)); - addTextField(createIntField(111, col2FieldX, y, 50, beam.getMaxLifetime())); - - y += 24; - - // Row 7: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void initVisualTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 260; - - // Row 1: Anchor Point - addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), beam.getAnchorPointEnum().getId()); - anchorBtn.setHoverText("ability.hover.anchorPoint"); - addButton(anchorBtn); - - y += 24; - - // Row 2: Inner Color + Outer Color - addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); - String innerHex = String.format("%06X", beam.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); - innerColorBtn.setTextColor(beam.getInnerColor() & 0xFFFFFF); - addButton(innerColorBtn); - - addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); - String outerHex = String.format("%06X", beam.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(beam.getOuterColor() & 0xFFFFFF); - outerColorBtn.setEnabled(beam.isOuterColorEnabled()); - addButton(outerColorBtn); - - y += 24; - - // Row 2: Outer Color Enabled + Outer Color Width - addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); - addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.isOuterColorEnabled() ? 1 : 0)); - - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, beam.getOuterColorWidth()); - widthField.setEnabled(beam.isOuterColorEnabled()); - addTextField(widthField); - - y += 24; - - // Row 3: Rotation Speed - addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); - GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, beam.getOuterColorAlpha()); - alphaField.setEnabled(beam.isOuterColorEnabled()); - alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); - addTextField(alphaField); - - addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(205, col2FieldX, y, 50, beam.getRotationSpeed())); - - y += 24; - - // Row 4: Lightning Effect Enabled (only affects head) - addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, beam.hasLightningEffect() ? 1 : 0); - lightningBtn.setHoverText("ability.hover.lightning"); - addButton(lightningBtn); - - // Only show Lightning settings if Lightning is enabled - if (beam.hasLightningEffect()) { - y += 24; - - // Row 5: Density + Radius - addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(beam.getLightningDensity())); - densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); - addTextField(densityField); - - addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(beam.getLightningRadius())); - radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); - addTextField(radiusField); - } - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 104: - beam.setHoming(value == 1); - initGui(); - break; - case 108: - beam.setExplosive(value == 1); - initGui(); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(beam.getEffects())); - break; - } - } - - @Override - protected void handleVisualButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 200: - editingVisualColorId = 200; - setSubGui(new SubGuiColorSelector(beam.getInnerColor())); - break; - case 201: - editingVisualColorId = 201; - setSubGui(new SubGuiColorSelector(beam.getOuterColor())); - break; - case 202: - beam.setOuterColorEnabled(value == 1); - initGui(); - break; - case 206: - beam.setLightningEffect(value == 1); - initGui(); - break; - case 210: - beam.setAnchorPointEnum(AnchorPoint.fromId(value)); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingVisualColorId == 200) { - beam.setInnerColor(rgb); - } else if (editingVisualColorId == 201) { - beam.setOuterColor(rgb); - } - editingVisualColorId = 0; - initGui(); - } else if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - beam.setEffects(result); - } - } else { - super.subGuiClosed(subgui); - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - beam.setDamage(parseFloat(field, beam.getDamage())); - break; - case 101: - beam.setSpeed(parseFloat(field, beam.getSpeed())); - break; - case 102: - beam.setBeamWidth(parseFloat(field, beam.getBeamWidth())); - break; - case 103: - beam.setHeadSize(parseFloat(field, beam.getHeadSize())); - break; - case 105: - beam.setHomingStrength(parseFloat(field, beam.getHomingStrength())); - break; - case 106: - beam.setHomingRange(parseFloat(field, beam.getHomingRange())); - break; - case 107: - beam.setMaxDistance(parseFloat(field, beam.getMaxDistance())); - break; - case 109: - beam.setExplosionRadius(parseFloat(field, beam.getExplosionRadius())); - break; - case 110: - beam.setKnockback(parseFloat(field, beam.getKnockback())); - break; - case 111: - beam.setMaxLifetime(field.getInteger()); - break; - } - } - - @Override - protected void handleVisualTextField(int id, GuiNpcTextField field) { - switch (id) { - case 203: - beam.setOuterColorWidth(parseFloat(field, beam.getOuterColorWidth())); - break; - case 204: - beam.setOuterColorAlpha(parseFloat(field, beam.getOuterColorAlpha())); - break; - case 205: - beam.setRotationSpeed(parseFloat(field, beam.getRotationSpeed())); - break; - case 207: - beam.setLightningDensity(parseFloat(field, beam.getLightningDensity())); - break; - case 208: - beam.setLightningRadius(parseFloat(field, beam.getLightningRadius())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java deleted file mode 100644 index 0d2ec667b..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityGuard.java +++ /dev/null @@ -1,143 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Guard ability type-specific settings. - */ -public class SubGuiAbilityGuard extends SubGuiAbilityConfig { - - private final AbilityGuard guard; - - public SubGuiAbilityGuard(AbilityGuard ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.guard = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 105; - int col2LabelX = guiLeft + 165; - int col2FieldX = guiLeft + 225; - - // Row 1: Duration + Damage Reduction - addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); - GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, guard.getDurationTicks()); - durationField.setMinMaxDefault(1, 1000, 60); - addTextField(durationField); - - addLabel(new GuiNpcLabel(100, "ability.dmgReduce", col2LabelX, y + 5)); - addTextField(createFloatField(100, col2FieldX, y, 50, guard.getDamageReduction())); - - y += 24; - - // Row 2: Can Counter + Counter Type - addLabel(new GuiNpcLabel(101, "ability.canCounter", labelX, y + 5)); - GuiNpcButton canCounterBtn = new GuiNpcButton(101, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, guard.isCanCounter() ? 1 : 0); - canCounterBtn.setHoverText("ability.hover.canCounter"); - addButton(canCounterBtn); - - addLabel(new GuiNpcLabel(102, "ability.counterType", col2LabelX, y + 5)); - String[] types = {"Flat", "Percent"}; - GuiNpcButton counterTypeButton = new GuiNpcButton(102, col2FieldX, y, 60, 20, types, guard.getCounterTypeEnum().ordinal()); - counterTypeButton.setHoverText("ability.hover.counterType"); - counterTypeButton.setEnabled(guard.isCanCounter()); - addButton(counterTypeButton); - - y += 24; - - // Row 3: Counter Value + Counter Chance - addLabel(new GuiNpcLabel(103, "ability.counterValue", labelX, y + 5)); - GuiNpcTextField counterValueField = createFloatField(103, fieldX, y, 50, guard.getCounterValue()); - counterValueField.setEnabled(guard.isCanCounter()); - addTextField(counterValueField); - - addLabel(new GuiNpcLabel(104, "ability.counterChance", col2LabelX, y + 5)); - GuiNpcTextField counterChanceField = createFloatField(104, col2FieldX, y, 50, guard.getCounterChance()); - counterChanceField.setEnabled(guard.isCanCounter()); - addTextField(counterChanceField); - - y += 24; - - // Row 4: Counter Sound + Counter Animation - addLabel(new GuiNpcLabel(105, "ability.counterSound", labelX, y + 5)); - GuiNpcTextField counterSoundField = new GuiNpcTextField(105, this, fontRendererObj, fieldX, y, 100, 20, guard.getCounterSound()); - counterSoundField.setEnabled(guard.isCanCounter()); - addTextField(counterSoundField); - - addLabel(new GuiNpcLabel(106, "ability.counterAnim", col2LabelX, y + 5)); - GuiNpcTextField counterAnimField = createIntField(106, col2FieldX, y, 50, guard.getCounterAnimationId()); - counterAnimField.setEnabled(guard.isCanCounter()); - addTextField(counterAnimField); - - y += 24; - - // Row 5: Effects button (applies on counter) - GuiNpcButton effectsBtn = new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects"); - effectsBtn.setEnabled(guard.isCanCounter()); - addButton(effectsBtn); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - switch (id) { - case 101: - guard.setCanCounter(button.getValue() == 1); - initGui(); - break; - case 102: - guard.setCounterTypeEnum(AbilityGuard.CounterType.values()[button.getValue()]); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(guard.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - guard.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 99: - guard.setDurationTicks(field.getInteger()); - break; - case 100: - guard.setDamageReduction(parseFloat(field, guard.getDamageReduction())); - break; - case 103: - guard.setCounterValue(parseFloat(field, guard.getCounterValue())); - break; - case 104: - guard.setCounterChance(parseFloat(field, guard.getCounterChance())); - break; - case 105: - guard.setCounterSound(field.getText()); - break; - case 106: - guard.setCounterAnimationId(field.getInteger()); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java deleted file mode 100644 index 5b8be7976..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHazard.java +++ /dev/null @@ -1,159 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityHazard; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Hazard ability type-specific settings. - */ -public class SubGuiAbilityHazard extends SubGuiAbilityConfig { - - private final AbilityHazard hazard; - - public SubGuiAbilityHazard(AbilityHazard ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.hazard = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Duration + Shape - addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); - GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, hazard.getDurationTicks()); - durationField.setMinMaxDefault(1, 2000, 100); - addTextField(durationField); - - addLabel(new GuiNpcLabel(100, "ability.shape", col2LabelX, y + 5)); - String[] shapes = {"Circle", "Ring", "Cone"}; - GuiNpcButton shapeBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, shapes, hazard.getShapeEnum().ordinal()); - shapeBtn.setHoverText("ability.hover.shape"); - addButton(shapeBtn); - - y += 24; - - // Row 2: Placement - addLabel(new GuiNpcLabel(101, "ability.placement", labelX, y + 5)); - String[] placements = {"Caster", "Target", "FollowCast", "FollowTgt"}; - GuiNpcButton placementBtn = new GuiNpcButton(101, fieldX, y, 70, 20, placements, hazard.getPlacementEnum().ordinal()); - placementBtn.setHoverText("ability.hover.placement"); - addButton(placementBtn); - - y += 24; - - // Row 2: Radius + Inner Radius - addLabel(new GuiNpcLabel(102, "ability.radius", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, hazard.getRadius())); - - addLabel(new GuiNpcLabel(103, "ability.innerRadius", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, hazard.getInnerRadius())); - - y += 24; - - // Row 3: Damage Per Second + Damage Interval - addLabel(new GuiNpcLabel(104, "ability.dmgPerSec", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, hazard.getDamagePerSecond())); - - addLabel(new GuiNpcLabel(105, "ability.dmgInterval", col2LabelX, y + 5)); - addTextField(createIntField(105, col2FieldX, y, 50, hazard.getDamageInterval())); - - y += 24; - - // Row 4: Slowness Level + Debuff Duration - addLabel(new GuiNpcLabel(106, "ability.slownessLvl", labelX, y + 5)); - addTextField(createIntField(106, fieldX, y, 50, hazard.getSlownessLevel())); - - addLabel(new GuiNpcLabel(107, "ability.debuffDur", col2LabelX, y + 5)); - addTextField(createIntField(107, col2FieldX, y, 50, hazard.getDebuffDuration())); - - y += 24; - - // Row 5: Poison Level + Affects Caster - addLabel(new GuiNpcLabel(108, "ability.poisonLvl", labelX, y + 5)); - addTextField(createIntField(108, fieldX, y, 50, hazard.getPoisonLevel())); - - addLabel(new GuiNpcLabel(109, "ability.affectsCaster", col2LabelX, y + 5)); - GuiNpcButton affectsCasterBtn = new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, hazard.isAffectsCaster() ? 1 : 0); - affectsCasterBtn.setHoverText("ability.hover.affectsCaster"); - addButton(affectsCasterBtn); - - y += 24; - - // Row 6: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 100: - hazard.setShapeEnum(AbilityHazard.HazardShape.values()[value]); - break; - case 101: - hazard.setPlacementEnum(AbilityHazard.PlacementMode.values()[value]); - break; - case 109: - hazard.setAffectsCaster(value == 1); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(hazard.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - hazard.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 99: - hazard.setDurationTicks(field.getInteger()); - break; - case 102: - hazard.setRadius(parseFloat(field, hazard.getRadius())); - break; - case 103: - hazard.setInnerRadius(parseFloat(field, hazard.getInnerRadius())); - break; - case 104: - hazard.setDamagePerSecond(parseFloat(field, hazard.getDamagePerSecond())); - break; - case 105: - hazard.setDamageInterval(field.getInteger()); - break; - case 106: - hazard.setSlownessLevel(field.getInteger()); - break; - case 107: - hazard.setDebuffDuration(field.getInteger()); - break; - case 108: - hazard.setPoisonLevel(field.getInteger()); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java deleted file mode 100644 index 490b4773a..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeal.java +++ /dev/null @@ -1,106 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.type.AbilityHeal; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; - -/** - * GUI for configuring Heal ability type-specific settings. - */ -public class SubGuiAbilityHeal extends SubGuiAbilityConfig { - - private final AbilityHeal heal; - - public SubGuiAbilityHeal(AbilityHeal ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.heal = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Instant Heal + Duration (only shown if not instant) - addLabel(new GuiNpcLabel(103, "dialog.instant", labelX, y + 5)); - GuiNpcButton instantBtn = new GuiNpcButton(103, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isInstantHeal() ? 1 : 0); - instantBtn.setHoverText("ability.hover.instant"); - addButton(instantBtn); - - if (!heal.isInstantHeal()) { - addLabel(new GuiNpcLabel(99, "ability.duration", col2LabelX, y + 5)); - GuiNpcTextField durationField = createIntField(99, col2FieldX, y, 50, heal.getDurationTicks()); - durationField.setMinMaxDefault(1, 1000, 60); - addTextField(durationField); - } - - y += 24; - - // Row 2: Heal Amount + Heal Percent - addLabel(new GuiNpcLabel(100, "ability.healAmount", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, heal.getHealAmount())); - - addLabel(new GuiNpcLabel(101, "ability.healPercent", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, heal.getHealPercent())); - - y += 24; - - // Row 3: Heal Radius - addLabel(new GuiNpcLabel(102, "ability.healRadius", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, heal.getHealRadius())); - - y += 24; - - // Row 4: Heal Self + Heal Allies - addLabel(new GuiNpcLabel(104, "ability.healSelf", labelX, y + 5)); - GuiNpcButton healSelfBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealSelf() ? 1 : 0); - healSelfBtn.setHoverText("ability.hover.healSelf"); - addButton(healSelfBtn); - - addLabel(new GuiNpcLabel(105, "ability.healAllies", col2LabelX, y + 5)); - GuiNpcButton healAlliesBtn = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, heal.isHealAllies() ? 1 : 0); - healAlliesBtn.setHoverText("ability.hover.healAllies"); - addButton(healAlliesBtn); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 103: - heal.setInstantHeal(value == 1); - initGui(); // Refresh to show/hide duration field - break; - case 104: - heal.setHealSelf(value == 1); - break; - case 105: - heal.setHealAllies(value == 1); - break; - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 99: - heal.setDurationTicks(field.getInteger()); - break; - case 100: - heal.setHealAmount(parseFloat(field, heal.getHealAmount())); - break; - case 101: - heal.setHealPercent(parseFloat(field, heal.getHealPercent())); - break; - case 102: - heal.setHealRadius(parseFloat(field, heal.getHealRadius())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java deleted file mode 100644 index 897a4af1f..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityHeavyHit.java +++ /dev/null @@ -1,76 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityHeavyHit; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Heavy Hit ability type-specific settings. - */ -public class SubGuiAbilityHeavyHit extends SubGuiAbilityConfig { - - private final AbilityHeavyHit heavyHit; - - public SubGuiAbilityHeavyHit(AbilityHeavyHit ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.heavyHit = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - - // Row 1: Damage + Knockback - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, heavyHit.getDamage())); - - addLabel(new GuiNpcLabel(102, "ability.knockback", col2LabelX, y + 5)); - addTextField(createFloatField(102, guiLeft + 205, y, 50, heavyHit.getKnockback())); - - y += 24; - - // Row 2: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 150) { - setSubGui(new SubGuiAbilityEffects(heavyHit.getEffects())); - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - heavyHit.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - heavyHit.setDamage(parseFloat(field, heavyHit.getDamage())); - break; - case 102: - heavyHit.setKnockback(parseFloat(field, heavyHit.getKnockback())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java deleted file mode 100644 index e5184a3bb..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityLaserShot.java +++ /dev/null @@ -1,268 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityLaserShot; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Laser Shot ability type-specific settings. - */ -public class SubGuiAbilityLaserShot extends SubGuiAbilityConfig { - - private final AbilityLaserShot laser; - private int editingVisualColorId = 0; - - public SubGuiAbilityLaserShot(AbilityLaserShot ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.laser = ability; - } - - @Override - protected boolean hasVisualSettings() { - return true; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Laser Width - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, laser.getDamage())); - - addLabel(new GuiNpcLabel(101, "ability.laserWidth", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, laser.getLaserWidth())); - - y += 24; - - // Row 2: Expansion Speed + Linger Ticks - addLabel(new GuiNpcLabel(102, "ability.expansionSpeed", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, laser.getExpansionSpeed())); - - addLabel(new GuiNpcLabel(103, "ability.lingerTicks", col2LabelX, y + 5)); - addTextField(createIntField(103, col2FieldX, y, 50, laser.getLingerTicks())); - - y += 24; - - // Row 3: Max Distance + Max Lifetime - addLabel(new GuiNpcLabel(104, "ability.maxDist", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, laser.getMaxDistance())); - - addLabel(new GuiNpcLabel(105, "ability.lifetime", col2LabelX, y + 5)); - addTextField(createIntField(105, col2FieldX, y, 50, laser.getMaxLifetime())); - - y += 24; - - // Row 4: Explosive + Explosion Radius (only show radius if explosive) - addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); - GuiNpcButton explosiveBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isExplosive() ? 1 : 0); - explosiveBtn.setHoverText("ability.hover.explosive"); - addButton(explosiveBtn); - - if (laser.isExplosive()) { - addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, laser.getExplosionRadius())); - } - - y += 24; - - // Row 5: Knockback + Knockback Up - addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(108, fieldX, y, 50, laser.getKnockback())); - - addLabel(new GuiNpcLabel(109, "ability.knockbackUp", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, laser.getKnockbackUp())); - - y += 24; - - // Row 6: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void initVisualTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 260; - - // Row 1: Inner Color + Outer Color - addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); - String innerHex = String.format("%06X", laser.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); - innerColorBtn.setTextColor(laser.getInnerColor() & 0xFFFFFF); - addButton(innerColorBtn); - - addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); - String outerHex = String.format("%06X", laser.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(laser.getOuterColor() & 0xFFFFFF); - outerColorBtn.setEnabled(laser.isOuterColorEnabled()); - addButton(outerColorBtn); - - y += 24; - - // Row 2: Outer Color Enabled + Outer Color Width - addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); - addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.isOuterColorEnabled() ? 1 : 0)); - - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, laser.getOuterColorWidth()); - widthField.setEnabled(laser.isOuterColorEnabled()); - addTextField(widthField); - - y += 24; - - // Row 3: Lightning Effect Enabled - addLabel(new GuiNpcLabel(204, "ability.outerAlpha", labelX, y + 5)); - GuiNpcTextField alphaField = createFloatField(204, fieldX, y, 55, laser.getOuterColorAlpha()); - alphaField.setEnabled(laser.isOuterColorEnabled()); - alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); - addTextField(alphaField); - - addLabel(new GuiNpcLabel(205, "ability.lightning", col2LabelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(205, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, laser.hasLightningEffect() ? 1 : 0); - lightningBtn.setHoverText("ability.hover.lightning"); - addButton(lightningBtn); - - // Only show Lightning settings if Lightning is enabled - if (laser.hasLightningEffect()) { - y += 24; - - // Row 4: Density + Radius - addLabel(new GuiNpcLabel(206, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(206, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(laser.getLightningDensity())); - densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); - addTextField(densityField); - - addLabel(new GuiNpcLabel(207, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(207, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(laser.getLightningRadius())); - radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); - addTextField(radiusField); - } - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 106: - laser.setExplosive(value == 1); - initGui(); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(laser.getEffects())); - break; - } - } - - @Override - protected void handleVisualButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 200: - editingVisualColorId = 200; - setSubGui(new SubGuiColorSelector(laser.getInnerColor())); - break; - case 201: - editingVisualColorId = 201; - setSubGui(new SubGuiColorSelector(laser.getOuterColor())); - break; - case 202: - laser.setOuterColorEnabled(value == 1); - initGui(); - break; - case 205: - laser.setLightningEffect(value == 1); - initGui(); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingVisualColorId == 200) { - laser.setInnerColor(rgb); - } else if (editingVisualColorId == 201) { - laser.setOuterColor(rgb); - } - editingVisualColorId = 0; - initGui(); - } else if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - laser.setEffects(result); - } - } else { - super.subGuiClosed(subgui); - } - } - - @Override - protected void handleVisualTextField(int id, GuiNpcTextField field) { - switch (id) { - case 203: - laser.setOuterColorWidth(parseFloat(field, laser.getOuterColorWidth())); - break; - case 204: - laser.setOuterColorAlpha(parseFloat(field, laser.getOuterColorAlpha())); - break; - case 206: - laser.setLightningDensity(parseFloat(field, laser.getLightningDensity())); - break; - case 207: - laser.setLightningRadius(parseFloat(field, laser.getLightningRadius())); - break; - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - laser.setDamage(parseFloat(field, laser.getDamage())); - break; - case 101: - laser.setLaserWidth(parseFloat(field, laser.getLaserWidth())); - break; - case 102: - laser.setExpansionSpeed(parseFloat(field, laser.getExpansionSpeed())); - break; - case 103: - laser.setLingerTicks(field.getInteger()); - break; - case 104: - laser.setMaxDistance(parseFloat(field, laser.getMaxDistance())); - break; - case 105: - laser.setMaxLifetime(field.getInteger()); - break; - case 107: - laser.setExplosionRadius(parseFloat(field, laser.getExplosionRadius())); - break; - case 108: - laser.setKnockback(parseFloat(field, laser.getKnockback())); - break; - case 109: - laser.setKnockbackUp(parseFloat(field, laser.getKnockbackUp())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java deleted file mode 100644 index 7cc0f9f2f..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityOrb.java +++ /dev/null @@ -1,294 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.type.AbilityOrb; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Orb ability type-specific settings. - */ -public class SubGuiAbilityOrb extends SubGuiAbilityConfig { - - private final AbilityOrb orb; - private int editingVisualColorId = 0; - - public SubGuiAbilityOrb(AbilityOrb ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.orb = ability; - } - - @Override - protected boolean hasVisualSettings() { - return true; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Speed - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, orb.getDamage())); - - addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, orb.getOrbSpeed())); - - y += 24; - - // Row 2: Orb Size + Max Distance - addLabel(new GuiNpcLabel(102, "stats.size", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, orb.getOrbSize())); - - addLabel(new GuiNpcLabel(103, "ability.maxDist", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, orb.getMaxDistance())); - - y += 24; - - // Row 3: Homing + Homing Strength (only show strength if homing) - addLabel(new GuiNpcLabel(104, "ability.homing", labelX, y + 5)); - GuiNpcButton homingBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isHoming() ? 1 : 0); - homingBtn.setHoverText("ability.hover.homing"); - addButton(homingBtn); - - if (orb.isHoming()) { - addLabel(new GuiNpcLabel(105, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, orb.getHomingStrength())); - } - - y += 24; - - // Row 4: Explosive + Explosion Radius (only show radius if explosive) - addLabel(new GuiNpcLabel(106, "ability.explosive", labelX, y + 5)); - GuiNpcButton explosiveBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isExplosive() ? 1 : 0); - explosiveBtn.setHoverText("ability.hover.explosive"); - addButton(explosiveBtn); - - if (orb.isExplosive()) { - addLabel(new GuiNpcLabel(107, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, orb.getExplosionRadius())); - } - - y += 24; - - // Row 5: Knockback + Max Lifetime - addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(108, fieldX, y, 50, orb.getKnockback())); - - addLabel(new GuiNpcLabel(109, "ability.lifetime", col2LabelX, y + 5)); - addTextField(createIntField(109, col2FieldX, y, 50, orb.getMaxLifetime())); - - y += 24; - - // Row 6: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void initVisualTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 260; - - // Row 1: Anchor Point - addLabel(new GuiNpcLabel(210, "ability.anchorPoint", labelX, y + 5)); - GuiNpcButton anchorBtn = new GuiNpcButton(210, fieldX, y, 80, 20, AnchorPoint.getDisplayNames(), orb.getAnchorPointEnum().getId()); - anchorBtn.setHoverText("ability.hover.anchorPoint"); - addButton(anchorBtn); - - y += 24; - - // Row 2: Inner Color + Rotation Speed - addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); - String innerHex = String.format("%06X", orb.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); - innerColorBtn.setTextColor(orb.getInnerColor() & 0xFFFFFF); - addButton(innerColorBtn); - - addLabel(new GuiNpcLabel(205, "ability.rotationSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(205, col2FieldX, y, 55, orb.getRotationSpeed())); - - y += 24; - - // Row 3: Outer Glow Enabled - addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); - addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.isOuterColorEnabled() ? 1 : 0)); - - // Only show Outer Color and Width if Outer Glow is enabled - if (orb.isOuterColorEnabled()) { - addLabel(new GuiNpcLabel(204, "ability.outerAlpha", col2LabelX, y + 5)); - GuiNpcTextField alphaField = createFloatField(204, col2FieldX, y, 55, orb.getOuterColorAlpha()); - alphaField.setEnabled(orb.isOuterColorEnabled()); - alphaField.setMinMaxDefaultFloat(0, 1, 0.5f); - addTextField(alphaField); - - y += 24; - - // Row 4: Outer Color + Outer Width - addLabel(new GuiNpcLabel(201, "ability.outerColor", labelX, y + 5)); - String outerHex = String.format("%06X", orb.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, fieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(orb.getOuterColor() & 0xFFFFFF); - addButton(outerColorBtn); - - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - addTextField(createFloatField(203, col2FieldX, y, 55, orb.getOuterColorWidth())); - } - - y += 24; - - // Row 5: Lightning Effect Enabled - addLabel(new GuiNpcLabel(206, "ability.lightning", labelX, y + 5)); - GuiNpcButton lightningBtn = new GuiNpcButton(206, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, orb.hasLightningEffect() ? 1 : 0); - lightningBtn.setHoverText("ability.hover.lightning"); - addButton(lightningBtn); - - // Only show Lightning settings if Lightning is enabled - if (orb.hasLightningEffect()) { - y += 24; - - // Row 61: Density + Radius - addLabel(new GuiNpcLabel(207, "ability.lightningDensity", labelX, y + 5)); - GuiNpcTextField densityField = new GuiNpcTextField(207, this, fontRendererObj, fieldX, y, 55, 18, String.valueOf(orb.getLightningDensity())); - densityField.setMinMaxDefaultFloat(0.01f, 5.0f, 0.15f); - addTextField(densityField); - - addLabel(new GuiNpcLabel(208, "ability.lightningRadius", col2LabelX, y + 5)); - GuiNpcTextField radiusField = new GuiNpcTextField(208, this, fontRendererObj, col2FieldX, y, 55, 18, String.valueOf(orb.getLightningRadius())); - radiusField.setMinMaxDefaultFloat(0.1f, 10.0f, 0.5f); - addTextField(radiusField); - } - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 104: - orb.setHoming(value == 1); - initGui(); - break; - case 106: - orb.setExplosive(value == 1); - initGui(); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(orb.getEffects())); - break; - } - } - - @Override - protected void handleVisualButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 200: - editingVisualColorId = 200; - setSubGui(new SubGuiColorSelector(orb.getInnerColor())); - break; - case 201: - editingVisualColorId = 201; - setSubGui(new SubGuiColorSelector(orb.getOuterColor())); - break; - case 202: - orb.setOuterColorEnabled(value == 1); - initGui(); - break; - case 206: - orb.setLightningEffect(value == 1); - initGui(); - break; - case 210: - orb.setAnchorPointEnum(AnchorPoint.fromId(value)); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingVisualColorId == 200) { - orb.setInnerColor(rgb); - } else if (editingVisualColorId == 201) { - orb.setOuterColor(rgb); - } - editingVisualColorId = 0; - initGui(); - } else if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - orb.setEffects(result); - } - } else { - super.subGuiClosed(subgui); - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - orb.setDamage(parseFloat(field, orb.getDamage())); - break; - case 101: - orb.setOrbSpeed(parseFloat(field, orb.getOrbSpeed())); - break; - case 102: - orb.setOrbSize(parseFloat(field, orb.getOrbSize())); - break; - case 103: - orb.setMaxDistance(parseFloat(field, orb.getMaxDistance())); - break; - case 105: - orb.setHomingStrength(parseFloat(field, orb.getHomingStrength())); - break; - case 107: - orb.setExplosionRadius(parseFloat(field, orb.getExplosionRadius())); - break; - case 108: - orb.setKnockback(parseFloat(field, orb.getKnockback())); - break; - case 109: - orb.setMaxLifetime(field.getInteger()); - break; - } - } - - @Override - protected void handleVisualTextField(int id, GuiNpcTextField field) { - switch (id) { - case 203: - orb.setOuterColorWidth(parseFloat(field, orb.getOuterColorWidth())); - break; - case 204: - orb.setOuterColorAlpha(parseFloat(field, orb.getOuterColorAlpha())); - break; - case 205: - orb.setRotationSpeed(parseFloat(field, orb.getRotationSpeed())); - break; - case 207: - orb.setLightningDensity(parseFloat(field, orb.getLightningDensity())); - break; - case 208: - orb.setLightningRadius(parseFloat(field, orb.getLightningRadius())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java deleted file mode 100644 index fe66fa242..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityProjectile.java +++ /dev/null @@ -1,145 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityProjectile; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Projectile ability type-specific settings. - */ -public class SubGuiAbilityProjectile extends SubGuiAbilityConfig { - - private final AbilityProjectile projectile; - - public SubGuiAbilityProjectile(AbilityProjectile ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.projectile = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Speed - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, projectile.getDamage())); - - addLabel(new GuiNpcLabel(101, "stats.speed", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, projectile.getSpeed())); - - y += 24; - - // Row 2: Knockback + Projectile Type - addLabel(new GuiNpcLabel(102, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, projectile.getKnockback())); - - addLabel(new GuiNpcLabel(103, "ability.projType", col2LabelX, y + 5)); - String[] projTypes = {"fireball", "arrow", "magic"}; - int typeIdx = 0; - String currType = projectile.getProjectileType(); - for (int i = 0; i < projTypes.length; i++) { - if (projTypes[i].equals(currType)) { - typeIdx = i; - break; - } - } - addButton(new GuiNpcButton(103, col2FieldX, y, 60, 20, projTypes, typeIdx)); - - y += 24; - - // Row 3: Explosive + Explosion Radius (only show radius if explosive) - addLabel(new GuiNpcLabel(104, "ability.explosive", labelX, y + 5)); - GuiNpcButton explosiveBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isExplosive() ? 1 : 0); - explosiveBtn.setHoverText("ability.hover.explosive"); - addButton(explosiveBtn); - - if (projectile.isExplosive()) { - addLabel(new GuiNpcLabel(105, "ability.explosionRad", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, projectile.getExplosionRadius())); - } - - y += 24; - - // Row 4: Homing + Homing Strength (only show strength if homing) - addLabel(new GuiNpcLabel(106, "ability.homing", labelX, y + 5)); - GuiNpcButton homingBtn = new GuiNpcButton(106, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, projectile.isHoming() ? 1 : 0); - homingBtn.setHoverText("ability.hover.homing"); - addButton(homingBtn); - - if (projectile.isHoming()) { - addLabel(new GuiNpcLabel(107, "ability.homingStr", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, projectile.getHomingStrength())); - } - - y += 24; - - // Row 5: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 103: - String[] projTypes = {"fireball", "arrow", "magic"}; - projectile.setProjectileType(projTypes[value]); - break; - case 104: - projectile.setExplosive(value == 1); - initGui(); - break; - case 106: - projectile.setHoming(value == 1); - initGui(); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(projectile.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - projectile.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - projectile.setDamage(parseFloat(field, projectile.getDamage())); - break; - case 101: - projectile.setSpeed(parseFloat(field, projectile.getSpeed())); - break; - case 102: - projectile.setKnockback(parseFloat(field, projectile.getKnockback())); - break; - case 105: - projectile.setExplosionRadius(parseFloat(field, projectile.getExplosionRadius())); - break; - case 107: - projectile.setHomingStrength(parseFloat(field, projectile.getHomingStrength())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java deleted file mode 100644 index 48c2c5295..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityShockwave.java +++ /dev/null @@ -1,95 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityShockwave; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Shockwave ability type-specific settings. - */ -public class SubGuiAbilityShockwave extends SubGuiAbilityConfig { - - private final AbilityShockwave shockwave; - - public SubGuiAbilityShockwave(AbilityShockwave ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.shockwave = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Push Radius - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, shockwave.getDamage())); - - addLabel(new GuiNpcLabel(101, "ability.pushRadius", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, shockwave.getPushRadius())); - - y += 24; - - // Row 2: Push Strength - addLabel(new GuiNpcLabel(102, "ability.pushStrength", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, shockwave.getPushStrength())); - - y += 24; - - // Row 3: Max Targets + Effects button - addLabel(new GuiNpcLabel(104, "ability.maxTargets", labelX, y + 5)); - addTextField(createIntField(104, fieldX, y, 50, shockwave.getMaxTargets())); - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - - y += 24; - addLabel(new GuiNpcLabel(105, "ability.shockwaveFalloff", labelX, y + 5)); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 150) { - setSubGui(new SubGuiAbilityEffects(shockwave.getEffects())); - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - shockwave.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - shockwave.setDamage(parseFloat(field, shockwave.getDamage())); - break; - case 101: - shockwave.setPushRadius(parseFloat(field, shockwave.getPushRadius())); - break; - case 102: - shockwave.setPushStrength(parseFloat(field, shockwave.getPushStrength())); - break; - case 104: - shockwave.setMaxTargets(field.getInteger()); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java deleted file mode 100644 index 4e020829b..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySlam.java +++ /dev/null @@ -1,98 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilitySlam; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Slam ability type-specific settings. - */ -public class SubGuiAbilitySlam extends SubGuiAbilityConfig { - - private final AbilitySlam slam; - - public SubGuiAbilitySlam(AbilitySlam ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.slam = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Radius - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, slam.getDamage())); - - addLabel(new GuiNpcLabel(101, "ability.radius", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, slam.getRadius())); - - y += 24; - - // Row 2: Knockback + Leap Speed - addLabel(new GuiNpcLabel(102, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, slam.getKnockbackStrength())); - - addLabel(new GuiNpcLabel(103, "ability.leapSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, slam.getLeapSpeed())); - - y += 24; - - // Row 3: Leap Height + Effects - addLabel(new GuiNpcLabel(104, "ability.leapHeight", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, slam.getLeapHeight())); - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 150) { - setSubGui(new SubGuiAbilityEffects(slam.getEffects())); - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - slam.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - slam.setDamage(parseFloat(field, slam.getDamage())); - break; - case 101: - slam.setRadius(parseFloat(field, slam.getRadius())); - break; - case 102: - slam.setKnockbackStrength(parseFloat(field, slam.getKnockbackStrength())); - break; - case 103: - slam.setLeapSpeed(parseFloat(field, slam.getLeapSpeed())); - break; - case 104: - slam.setLeapHeight(parseFloat(field, slam.getLeapHeight())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java deleted file mode 100644 index 1561b408a..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilitySweeper.java +++ /dev/null @@ -1,219 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilitySweeper; -import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Sweeper ability type-specific settings. - * Sweeper is a low rotating beam that players can jump over. - */ -public class SubGuiAbilitySweeper extends SubGuiAbilityConfig { - - private final AbilitySweeper sweeper; - private int editingVisualColorId = 0; - - public SubGuiAbilitySweeper(AbilitySweeper ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.sweeper = ability; - } - - @Override - protected boolean hasVisualSettings() { - return true; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Damage + Damage Interval - addLabel(new GuiNpcLabel(100, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, sweeper.getDamage())); - - addLabel(new GuiNpcLabel(101, "ability.dmgInterval", col2LabelX, y + 5)); - addTextField(createIntField(101, col2FieldX, y, 50, sweeper.getDamageInterval())); - - y += 24; - - // Row 2: Beam Length + Beam Width - addLabel(new GuiNpcLabel(102, "ability.beamLength", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, sweeper.getBeamLength())); - - addLabel(new GuiNpcLabel(103, "ability.beamWidth", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, sweeper.getBeamWidth())); - - y += 24; - - // Row 3: Beam Height + Sweep Speed - addLabel(new GuiNpcLabel(104, "ability.beamHeight", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, sweeper.getBeamHeight())); - - addLabel(new GuiNpcLabel(105, "ability.sweepSpeed", col2LabelX, y + 5)); - addTextField(createFloatField(105, col2FieldX, y, 50, sweeper.getSweepSpeed())); - - y += 24; - - // Row 4: Number of Rotations + Piercing - addLabel(new GuiNpcLabel(106, "ability.rotations", labelX, y + 5)); - addTextField(createIntField(106, fieldX, y, 50, sweeper.getNumberOfRotations())); - - addLabel(new GuiNpcLabel(107, "ability.piercing", col2LabelX, y + 5)); - GuiNpcButton piercingBtn = new GuiNpcButton(107, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isPiercing() ? 1 : 0); - piercingBtn.setHoverText("ability.hover.piercing"); - addButton(piercingBtn); - - y += 24; - - // Row 5: Lock On Target - addLabel(new GuiNpcLabel(108, "ability.lockTarget", labelX, y + 5)); - GuiNpcButton lockTargetBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isLockOnTarget() ? 1 : 0); - lockTargetBtn.setHoverText("ability.hover.lockTarget"); - addButton(lockTargetBtn); - - y += 24; - - // Row 6: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void initVisualTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 180; - int col2FieldX = guiLeft + 260; - - // Row 1: Inner Color + Outer Color - addLabel(new GuiNpcLabel(200, "ability.innerColor", labelX, y + 5)); - String innerHex = String.format("%06X", sweeper.getInnerColor() & 0xFFFFFF); - GuiNpcButton innerColorBtn = new GuiNpcButton(200, fieldX, y, 55, 20, innerHex); - innerColorBtn.setTextColor(sweeper.getInnerColor() & 0xFFFFFF); - addButton(innerColorBtn); - - addLabel(new GuiNpcLabel(201, "ability.outerColor", col2LabelX, y + 5)); - String outerHex = String.format("%06X", sweeper.getOuterColor() & 0xFFFFFF); - GuiNpcButton outerColorBtn = new GuiNpcButton(201, col2FieldX, y, 55, 20, outerHex); - outerColorBtn.setTextColor(sweeper.getOuterColor() & 0xFFFFFF); - outerColorBtn.setEnabled(sweeper.isOuterColorEnabled()); - addButton(outerColorBtn); - - y += 24; - - // Row 2: Outer Color Enabled + Outer Color Width - addLabel(new GuiNpcLabel(202, "ability.outerEnabled", labelX, y + 5)); - addButton(new GuiNpcButton(202, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, sweeper.isOuterColorEnabled() ? 1 : 0)); - - addLabel(new GuiNpcLabel(203, "ability.outerWidth", col2LabelX, y + 5)); - GuiNpcTextField widthField = createFloatField(203, col2FieldX, y, 55, sweeper.getOuterColorWidth()); - widthField.setEnabled(sweeper.isOuterColorEnabled()); - addTextField(widthField); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 107: - sweeper.setPiercing(value == 1); - break; - case 108: - sweeper.setLockOnTarget(value == 1); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(sweeper.getEffects())); - break; - } - } - - @Override - protected void handleVisualButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 200: - editingVisualColorId = 200; - setSubGui(new SubGuiColorSelector(sweeper.getInnerColor())); - break; - case 201: - editingVisualColorId = 201; - setSubGui(new SubGuiColorSelector(sweeper.getOuterColor())); - break; - case 202: - sweeper.setOuterColorEnabled(value == 1); - initGui(); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiColorSelector && editingVisualColorId != 0) { - SubGuiColorSelector colorSelector = (SubGuiColorSelector) subgui; - int rgb = colorSelector.color & 0x00FFFFFF; - if (editingVisualColorId == 200) { - sweeper.setInnerColor(rgb); - } else if (editingVisualColorId == 201) { - sweeper.setOuterColor(rgb); - } - editingVisualColorId = 0; - initGui(); - } else if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - sweeper.setEffects(result); - } - } else { - super.subGuiClosed(subgui); - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - sweeper.setDamage(parseFloat(field, sweeper.getDamage())); - break; - case 101: - sweeper.setDamageInterval(field.getInteger()); - break; - case 102: - sweeper.setBeamLength(parseFloat(field, sweeper.getBeamLength())); - break; - case 103: - sweeper.setBeamWidth(parseFloat(field, sweeper.getBeamWidth())); - break; - case 104: - sweeper.setBeamHeight(parseFloat(field, sweeper.getBeamHeight())); - break; - case 105: - sweeper.setSweepSpeed(parseFloat(field, sweeper.getSweepSpeed())); - break; - case 106: - sweeper.setNumberOfRotations(field.getInteger()); - break; - } - } - - @Override - protected void handleVisualTextField(int id, GuiNpcTextField field) { - switch (id) { - case 203: - sweeper.setOuterColorWidth(parseFloat(field, sweeper.getOuterColorWidth())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java deleted file mode 100644 index 4b23b0ca0..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTeleport.java +++ /dev/null @@ -1,165 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityTeleport; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Teleport ability type-specific settings. - */ -public class SubGuiAbilityTeleport extends SubGuiAbilityConfig { - - private final AbilityTeleport teleport; - - public SubGuiAbilityTeleport(AbilityTeleport ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.teleport = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Mode - addLabel(new GuiNpcLabel(100, "ability.mode", labelX, y + 5)); - String[] modes = {"Blink", "Behind", "Single"}; - addButton(new GuiNpcButton(100, fieldX, y, 80, 20, modes, teleport.getModeEnum().ordinal())); - - y += 24; - - switch (teleport.getModeEnum()) { - case BLINK: - // Row 2: Blink Radius + Blink Count - addLabel(new GuiNpcLabel(101, "ability.blinkRadius", labelX, y + 5)); - addTextField(createFloatField(101, fieldX, y, 50, teleport.getBlinkRadius())); - - addLabel(new GuiNpcLabel(102, "ability.blinkCount", col2LabelX, y + 5)); - addTextField(createIntField(102, col2FieldX, y, 50, teleport.getBlinkCount())); - - y += 24; - - // Row 3: Blink Delay + Line of Sight - addLabel(new GuiNpcLabel(103, "ability.blinkDelay", labelX, y + 5)); - addTextField(createIntField(103, fieldX, y, 50, teleport.getBlinkDelayTicks())); - - addLabel(new GuiNpcLabel(105, "ability.lineOfSight", col2LabelX, y + 5)); - GuiNpcButton losBtn1 = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0); - losBtn1.setHoverText("ability.hover.lineOfSight"); - addButton(losBtn1); - y += 24; - break; - case SINGLE: - // Row 2: Blink Radius + Line of Sight - addLabel(new GuiNpcLabel(101, "ability.blinkRadius", labelX, y + 5)); - addTextField(createFloatField(101, fieldX, y, 50, teleport.getBlinkRadius())); - - addLabel(new GuiNpcLabel(105, "ability.lineOfSight", col2LabelX, y + 5)); - GuiNpcButton losBtn2 = new GuiNpcButton(105, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isRequireLineOfSight() ? 1 : 0); - losBtn2.setHoverText("ability.hover.lineOfSight"); - addButton(losBtn2); - y += 24; - break; - case BEHIND: - // Row 2: Behind Distance - addLabel(new GuiNpcLabel(104, "ability.behindDistance", labelX, y + 5)); - addTextField(createFloatField(104, fieldX, y, 50, teleport.getBehindDistance())); - y += 24; - break; - } - - // Damage + Damage Radius - addLabel(new GuiNpcLabel(106, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(106, fieldX, y, 50, teleport.getDamage())); - - addLabel(new GuiNpcLabel(107, "ability.dmgRadius", col2LabelX, y + 5)); - addTextField(createFloatField(107, col2FieldX, y, 50, teleport.getDamageRadius())); - - y += 24; - - // Damage at Start/End - addLabel(new GuiNpcLabel(108, "ability.dmgAtStart", labelX, y + 5)); - GuiNpcButton dmgStartBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtStart() ? 1 : 0); - dmgStartBtn.setHoverText("ability.hover.dmgAtStart"); - addButton(dmgStartBtn); - - addLabel(new GuiNpcLabel(109, "ability.dmgAtEnd", col2LabelX, y + 5)); - GuiNpcButton dmgEndBtn = new GuiNpcButton(109, col2FieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, teleport.isDamageAtEnd() ? 1 : 0); - dmgEndBtn.setHoverText("ability.hover.dmgAtEnd"); - addButton(dmgEndBtn); - - y += 24; - - // Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 100: - teleport.setModeEnum(AbilityTeleport.TeleportMode.values()[value]); - initGui(); - break; - case 105: - teleport.setRequireLineOfSight(value == 1); - break; - case 108: - teleport.setDamageAtStart(value == 1); - break; - case 109: - teleport.setDamageAtEnd(value == 1); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(teleport.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - teleport.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 101: - teleport.setBlinkRadius(parseFloat(field, teleport.getBlinkRadius())); - break; - case 102: - teleport.setBlinkCount(field.getInteger()); - break; - case 103: - teleport.setBlinkDelayTicks(field.getInteger()); - break; - case 104: - teleport.setBehindDistance(parseFloat(field, teleport.getBehindDistance())); - break; - case 106: - teleport.setDamage(parseFloat(field, teleport.getDamage())); - break; - case 107: - teleport.setDamageRadius(parseFloat(field, teleport.getDamageRadius())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java deleted file mode 100644 index 5c9c52558..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityTrap.java +++ /dev/null @@ -1,126 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityTrap; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Trap ability type-specific settings. - */ -public class SubGuiAbilityTrap extends SubGuiAbilityConfig { - - private final AbilityTrap trap; - - public SubGuiAbilityTrap(AbilityTrap ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.trap = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Duration + Placement - addLabel(new GuiNpcLabel(99, "ability.duration", labelX, y + 5)); - GuiNpcTextField durationField = createIntField(99, fieldX, y, 50, trap.getDurationTicks()); - durationField.setMinMaxDefault(1, 2000, 200); - addTextField(durationField); - - addLabel(new GuiNpcLabel(100, "ability.placement", col2LabelX, y + 5)); - String[] placements = {"Caster", "Target", "Ahead"}; - GuiNpcButton placementBtn = new GuiNpcButton(100, col2FieldX, y, 55, 20, placements, trap.getPlacementEnum().ordinal()); - placementBtn.setHoverText("ability.hover.placement"); - addButton(placementBtn); - - y += 24; - - // Row 2: Trigger Radius - addLabel(new GuiNpcLabel(101, "ability.triggerRad", labelX, y + 5)); - addTextField(createFloatField(101, fieldX, y, 50, trap.getTriggerRadius())); - - y += 24; - - // Row 2: Damage + Damage Radius - addLabel(new GuiNpcLabel(102, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, trap.getDamage())); - - addLabel(new GuiNpcLabel(103, "ability.dmgRadius", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, trap.getDamageRadius())); - - y += 24; - - // Row 3: Arm Time + Max Triggers - addLabel(new GuiNpcLabel(104, "ability.armTime", labelX, y + 5)); - addTextField(createIntField(104, fieldX, y, 50, trap.getArmTime())); - - addLabel(new GuiNpcLabel(105, "ability.maxTriggers", col2LabelX, y + 5)); - addTextField(createIntField(105, col2FieldX, y, 50, trap.getMaxTriggers())); - - y += 24; - - // Row 4: Knockback + Effects button - addLabel(new GuiNpcLabel(108, "ability.knockback", labelX, y + 5)); - addTextField(createFloatField(108, fieldX, y, 50, trap.getKnockback())); - - addButton(new GuiNpcButton(150, col2LabelX, y, 80, 20, "ability.effects")); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - if (id == 100) { - trap.setPlacementEnum(AbilityTrap.TrapPlacement.values()[button.getValue()]); - } else if (id == 150) { - setSubGui(new SubGuiAbilityEffects(trap.getEffects())); - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - trap.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 99: - trap.setDurationTicks(field.getInteger()); - break; - case 101: - trap.setTriggerRadius(parseFloat(field, trap.getTriggerRadius())); - break; - case 102: - trap.setDamage(parseFloat(field, trap.getDamage())); - break; - case 103: - trap.setDamageRadius(parseFloat(field, trap.getDamageRadius())); - break; - case 104: - trap.setArmTime(field.getInteger()); - break; - case 105: - trap.setMaxTriggers(field.getInteger()); - break; - case 108: - trap.setKnockback(parseFloat(field, trap.getKnockback())); - break; - } - } -} diff --git a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java b/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java deleted file mode 100644 index b56828470..000000000 --- a/src/main/java/noppes/npcs/client/gui/advanced/ability/SubGuiAbilityVortex.java +++ /dev/null @@ -1,129 +0,0 @@ -package noppes.npcs.client.gui.advanced.ability; - -import kamkeel.npcs.controllers.data.ability.AbilityEffect; -import kamkeel.npcs.controllers.data.ability.type.AbilityVortex; -import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; -import noppes.npcs.client.gui.util.GuiNpcButton; -import noppes.npcs.client.gui.util.GuiNpcLabel; -import noppes.npcs.client.gui.util.GuiNpcTextField; -import noppes.npcs.client.gui.util.IAbilityConfigCallback; -import noppes.npcs.client.gui.util.SubGuiInterface; - -import java.util.List; - -/** - * GUI for configuring Vortex ability type-specific settings. - */ -public class SubGuiAbilityVortex extends SubGuiAbilityConfig { - - private final AbilityVortex vortex; - - public SubGuiAbilityVortex(AbilityVortex ability, IAbilityConfigCallback callback) { - super(ability, callback); - this.vortex = ability; - } - - @Override - protected void initTypeTab(int startY) { - int y = startY; - int labelX = guiLeft + 8; - int fieldX = guiLeft + 85; - int col2LabelX = guiLeft + 145; - int col2FieldX = guiLeft + 205; - - // Row 1: Pull Radius + Pull Strength - addLabel(new GuiNpcLabel(100, "ability.pullRadius", labelX, y + 5)); - addTextField(createFloatField(100, fieldX, y, 50, vortex.getPullRadius())); - - addLabel(new GuiNpcLabel(101, "ability.pullStrength", col2LabelX, y + 5)); - addTextField(createFloatField(101, col2FieldX, y, 50, vortex.getPullStrength())); - - y += 24; - - // Row 2: Damage + Knockback - addLabel(new GuiNpcLabel(102, "enchantment.damage", labelX, y + 5)); - addTextField(createFloatField(102, fieldX, y, 50, vortex.getDamage())); - - addLabel(new GuiNpcLabel(103, "ability.knockback", col2LabelX, y + 5)); - addTextField(createFloatField(103, col2FieldX, y, 50, vortex.getKnockback())); - - y += 24; - - // Row 3: AOE + Max Targets - addLabel(new GuiNpcLabel(104, "ability.aoe", labelX, y + 5)); - GuiNpcButton aoeBtn = new GuiNpcButton(104, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isAoe() ? 1 : 0); - aoeBtn.setHoverText("ability.hover.aoe"); - addButton(aoeBtn); - - addLabel(new GuiNpcLabel(105, "ability.maxTargets", col2LabelX, y + 5)); - addTextField(createIntField(105, col2FieldX, y, 50, vortex.getMaxTargets())); - - y += 24; - - // Row 4: Effects button - addButton(new GuiNpcButton(150, labelX, y, 80, 20, "ability.effects")); - - y += 24; - - // Row 5: Damage on Pull + Pull Damage - addLabel(new GuiNpcLabel(108, "ability.dmgOnPull", labelX, y + 5)); - GuiNpcButton dmgOnPullBtn = new GuiNpcButton(108, fieldX, y, 50, 20, new String[]{"gui.no", "gui.yes"}, vortex.isDamageOnPull() ? 1 : 0); - dmgOnPullBtn.setHoverText("ability.hover.dmgOnPull"); - addButton(dmgOnPullBtn); - - addLabel(new GuiNpcLabel(109, "ability.pullDamage", col2LabelX, y + 5)); - addTextField(createFloatField(109, col2FieldX, y, 50, vortex.getPullDamage())); - } - - @Override - protected void handleTypeButton(int id, GuiNpcButton button) { - int value = button.getValue(); - switch (id) { - case 104: - vortex.setAoe(value == 1); - break; - case 108: - vortex.setDamageOnPull(value == 1); - break; - case 150: - setSubGui(new SubGuiAbilityEffects(vortex.getEffects())); - break; - } - } - - @Override - public void subGuiClosed(SubGuiInterface subgui) { - super.subGuiClosed(subgui); - if (subgui instanceof SubGuiAbilityEffects) { - SubGuiAbilityEffects effectsGui = (SubGuiAbilityEffects) subgui; - List result = effectsGui.getResult(); - if (result != null) { - vortex.setEffects(result); - } - } - } - - @Override - protected void handleTypeTextField(int id, GuiNpcTextField field) { - switch (id) { - case 100: - vortex.setPullRadius(parseFloat(field, vortex.getPullRadius())); - break; - case 101: - vortex.setPullStrength(parseFloat(field, vortex.getPullStrength())); - break; - case 102: - vortex.setDamage(parseFloat(field, vortex.getDamage())); - break; - case 103: - vortex.setKnockback(parseFloat(field, vortex.getKnockback())); - break; - case 105: - vortex.setMaxTargets(field.getInteger()); - break; - case 109: - vortex.setPullDamage(parseFloat(field, vortex.getPullDamage())); - break; - } - } -} From 911f1854004ec38f9e93d345e48b150e23aafd3f Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Feb 2026 18:26:52 -0500 Subject: [PATCH 78/85] Fields Builder for Ability GUIs --- .../controllers/data/ability/Ability.java | 105 ++++- .../data/ability/AbilityEffect.java | 7 + .../controllers/data/ability/AnchorPoint.java | 13 + .../data/ability/TargetingMode.java | 13 +- .../data/ability/gui/FieldDef.java | 52 +-- .../ability/gui/FieldDefinitionsBuilder.java | 359 ++++++++++++++++++ .../data/ability/gui/FieldType.java | 5 +- .../data/ability/gui/TabTarget.java | 1 - .../data/ability/type/AbilityCharge.java | 11 +- .../data/ability/type/AbilityCutter.java | 31 +- .../data/ability/type/AbilityDash.java | 18 +- .../data/ability/type/AbilityDisc.java | 76 ++-- .../data/ability/type/AbilityEnergyBeam.java | 71 ++-- .../data/ability/type/AbilityGuard.java | 40 +- .../data/ability/type/AbilityHazard.java | 48 ++- .../data/ability/type/AbilityHeal.java | 15 +- .../data/ability/type/AbilityHeavyHit.java | 7 +- .../data/ability/type/AbilityLaserShot.java | 55 ++- .../data/ability/type/AbilityOrb.java | 67 ++-- .../data/ability/type/AbilityProjectile.java | 23 +- .../data/ability/type/AbilityShockwave.java | 8 +- .../data/ability/type/AbilitySlam.java | 12 +- .../data/ability/type/AbilitySweeper.java | 34 +- .../data/ability/type/AbilityTeleport.java | 32 +- .../data/ability/type/AbilityTrap.java | 28 +- .../data/ability/type/AbilityVortex.java | 24 +- .../gui/advanced/SubGuiAbilityConfig.java | 358 +++++++++-------- .../npcs/client/gui/util/GuiNpcButton.java | 16 + .../assets/customnpcs/lang/en_US.lang | 299 +++++++++------ 29 files changed, 1223 insertions(+), 605 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDefinitionsBuilder.java diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index b368d6267..0696674f4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -19,10 +19,12 @@ import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; import noppes.npcs.client.gui.util.IAbilityConfigCallback; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.Frame; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -60,6 +62,7 @@ public abstract class Ability implements IAbility { // Timing (ticks) protected int cooldownTicks = 0; // Added to global cooldown after ability completes protected int windUpTicks = 20; + protected boolean syncWindupWithAnimation = true; protected int dazedTicks = 80; // Only used when interrupted during WINDUP (if interruptible) // Interruption @@ -325,49 +328,70 @@ public abstract class Ability implements IAbility { defs.add(FieldDef.stringField("gui.name", this::getName, this::setName) .tab(TabTarget.GENERAL)); defs.add(FieldDef.intField("ability.weight", this::getWeight, this::setWeight) - .tab(TabTarget.GENERAL).range(1, 1000)); - defs.add(FieldDef.enumField("ability.lockMove", LockMovementType.class, - this::getLockMovement, this::setLockMovement) + .tab(TabTarget.GENERAL).range(1, 1000).column(ColumnHint.LEFT)); + defs.add(FieldDef.boolField("gui.enabled", this::isEnabled, this::setEnabled) + .tab(TabTarget.GENERAL).column(ColumnHint.RIGHT)); + defs.add(FieldDef.section("ability.section.timing").tab(TabTarget.GENERAL)); + defs.add(FieldDef.intField("ability.windUpTicks", this::getRawWindUpTicks, this::setWindUpTicks) + .tab(TabTarget.GENERAL).range(0, 1000).column(ColumnHint.LEFT) + .visibleWhen(() -> !isSyncWindupWithAnimation())); + defs.add(FieldDef.labelField("ability.windUpTicks", () -> getWindUpTicks() + "t") + .tab(TabTarget.GENERAL).column(ColumnHint.LEFT) + .visibleWhen(this::isSyncWindupWithAnimation)); + defs.add(FieldDef.boolField("ability.syncWindup", this::isSyncWindupWithAnimation, this::setSyncWindupWithAnimation) + .tab(TabTarget.GENERAL).hover("ability.hover.sync").column(ColumnHint.RIGHT) + .visibleWhen(this::hasWindUpAnimation)); + defs.add(FieldDef.intField("ability.cooldownTicks", this::getCooldownTicks, this::setCooldownTicks) + .tab(TabTarget.GENERAL).range(0, 10000)); + defs.add(FieldDef.section("ability.section.movement").tab(TabTarget.GENERAL)); + defs.add(FieldDef.stringEnumField("ability.lockMovement", LockMovementType.getDisplayKeys(), + () -> this.getLockMovement().getDisplayKey(), + v -> { + String[] keys = LockMovementType.getDisplayKeys(); + for (int i = 0; i < keys.length; i++) { + if (keys[i].equals(v)) { this.setLockMovement(LockMovementType.fromOrdinal(i)); break; } + } + }) .tab(TabTarget.GENERAL).hover("ability.hover.lockMove")); defs.add(FieldDef.boolField("ability.interruptible", this::isInterruptible, this::setInterruptible) - .tab(TabTarget.GENERAL).hover("ability.hover.interruptible")); - defs.add(FieldDef.intField("ability.dazed", this::getDazedTicks, this::setDazedTicks) + .tab(TabTarget.GENERAL).hover("ability.hover.interruptible").column(ColumnHint.LEFT)); + defs.add(FieldDef.intField("ability.dazedTicks", this::getDazedTicks, this::setDazedTicks) .tab(TabTarget.GENERAL).range(0, 1000) - .visibleWhen(this::isInterruptible)); - defs.add(FieldDef.intField("ability.windup", this::getWindUpTicks, this::setWindUpTicks) - .tab(TabTarget.GENERAL).range(0, 1000)); - defs.add(FieldDef.intField("ability.cooldown", this::getCooldownTicks, this::setCooldownTicks) - .tab(TabTarget.GENERAL).range(0, 10000)); - defs.add(FieldDef.boolField("gui.enabled", this::isEnabled, this::setEnabled) - .tab(TabTarget.GENERAL)); + .visibleWhen(this::isInterruptible).column(ColumnHint.RIGHT)); // Target tab defs.add(FieldDef.intField("ability.minRange", () -> (int) getMinRange(), v -> setMinRange(v)) - .tab(TabTarget.TARGET).range(0, 100)); + .tab(TabTarget.TARGET).range(0, 100).column(ColumnHint.LEFT)); defs.add(FieldDef.intField("ability.maxRange", () -> (int) getMaxRange(), v -> setMaxRange(v)) - .tab(TabTarget.TARGET).range(1, 100)); + .tab(TabTarget.TARGET).range(1, 100).column(ColumnHint.RIGHT)); if (!isTargetingModeLocked()) { - defs.add(FieldDef.enumField("ability.targeting", TargetingMode.class, + defs.add(FieldDef.enumField("ability.targetingMode", TargetingMode.class, this::getTargetingMode, this::setTargetingMode) .tab(TabTarget.TARGET).hover("ability.hover.targeting")); } - // Effects tab + // Effects tab - Sounds + defs.add(FieldDef.section("ability.section.sounds").tab(TabTarget.EFFECTS)); defs.add(FieldDef.soundSubGui("ability.windUpSound", this::getWindUpSound, this::setWindUpSound) .tab(TabTarget.EFFECTS)); defs.add(FieldDef.soundSubGui("ability.activeSound", this::getActiveSound, this::setActiveSound) .tab(TabTarget.EFFECTS)); - defs.add(FieldDef.animSubGui("ability.windUpAnim", + // Effects tab - Animations + defs.add(FieldDef.section("ability.section.animations").tab(TabTarget.EFFECTS)); + defs.add(FieldDef.animSubGui("ability.windUpAnimation", this::getWindUpAnimationId, this::setWindUpAnimationId, this::getWindUpAnimationName, this::setWindUpAnimationName) .tab(TabTarget.EFFECTS)); - defs.add(FieldDef.animSubGui("ability.activeAnim", + defs.add(FieldDef.animSubGui("ability.activeAnimation", this::getActiveAnimationId, this::setActiveAnimationId, this::getActiveAnimationName, this::setActiveAnimationName) .tab(TabTarget.EFFECTS)); + // Effects tab - Telegraph TelegraphType tType = getTelegraphType(); if (tType != null && tType != TelegraphType.NONE) { + defs.add(FieldDef.section("ability.section.telegraph").tab(TabTarget.EFFECTS) + .tooltip("telegraph." + tType.name().toLowerCase())); defs.add(FieldDef.boolField("ability.showTelegraph", this::isShowTelegraph, this::setShowTelegraph) .tab(TabTarget.EFFECTS).hover("ability.hover.showTelegraph")); defs.add(FieldDef.colorSubGui("ability.windUpColor", this::getWindUpColor, this::setWindUpColor) @@ -847,6 +871,7 @@ public abstract class Ability implements IAbility { nbt.setFloat("maxRange", maxRange); nbt.setInteger("cooldown", cooldownTicks); nbt.setInteger("windUp", windUpTicks); + nbt.setBoolean("syncWindup", syncWindupWithAnimation); nbt.setInteger("recovery", dazedTicks); nbt.setBoolean("interruptible", interruptible); nbt.setInteger("lockMovement", lockMovement.ordinal()); @@ -894,6 +919,7 @@ public abstract class Ability implements IAbility { maxRange = nbt.getFloat("maxRange"); cooldownTicks = nbt.getInteger("cooldown"); windUpTicks = nbt.getInteger("windUp"); + syncWindupWithAnimation = !nbt.hasKey("syncWindup") || nbt.getBoolean("syncWindup"); dazedTicks = nbt.getInteger("recovery"); interruptible = nbt.getBoolean("interruptible"); lockMovement = LockMovementType.fromOrdinal(nbt.getInteger("lockMovement")); @@ -1036,6 +1062,10 @@ public abstract class Ability implements IAbility { } public int getWindUpTicks() { + return calculateWindupFromAnimation(); + } + + public int getRawWindUpTicks() { return windUpTicks; } @@ -1043,6 +1073,45 @@ public abstract class Ability implements IAbility { this.windUpTicks = Math.max(0, windUpTicks); } + public boolean isSyncWindupWithAnimation() { + return syncWindupWithAnimation; + } + + public boolean hasWindUpAnimation() { + return (windUpAnimationName != null && !windUpAnimationName.isEmpty()) || windUpAnimationId >= 0; + } + + public void setSyncWindupWithAnimation(boolean syncWindupWithAnimation) { + this.syncWindupWithAnimation = syncWindupWithAnimation; + } + + private int calculateWindupFromAnimation() { + if (!syncWindupWithAnimation) { + return windUpTicks; + } + + if (AnimationController.Instance == null) { + return windUpTicks; + } + + Animation animation = null; + if (windUpAnimationName != null && !windUpAnimationName.isEmpty()) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationName); + } else if (windUpAnimationId >= 0) { + animation = (Animation) AnimationController.Instance.get(windUpAnimationId); + } + + if (animation == null || animation.frames.isEmpty()) { + return windUpTicks; + } + + int totalDuration = 0; + for (Frame frame : animation.frames) { + totalDuration += frame.getDuration(); + } + return totalDuration; + } + public int getDazedTicks() { return dazedTicks; } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java index 47e03f10d..57f0cbf17 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityEffect.java @@ -38,6 +38,13 @@ public class AbilityEffect { return potionId; } + public static String[] getLangKeys() { + EffectType[] types = values(); + String[] keys = new String[types.length]; + for (int i = 0; i < types.length; i++) keys[i] = types[i].langKey; + return keys; + } + public static EffectType fromOrdinal(int ordinal) { EffectType[] values = values(); if (ordinal >= 0 && ordinal < values.length) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java index 9bf408c27..1bd99d4f8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java @@ -52,4 +52,17 @@ public enum AnchorPoint { } return names; } + + @Override + public String toString() { + switch (this) { + case FRONT: return "ability.anchor.front"; + case CENTER: return "ability.anchor.center"; + case RIGHT_HAND: return "ability.anchor.rightHand"; + case LEFT_HAND: return "ability.anchor.leftHand"; + case ABOVE_HEAD: return "ability.anchor.aboveHead"; + case CHEST: return "ability.anchor.chest"; + default: return name(); + } + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java b/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java index bd1bb6a47..9bdbdac6f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java @@ -22,5 +22,16 @@ public enum TargetingMode { /** * AOE centered on target */ - AOE_TARGET + AOE_TARGET; + + @Override + public String toString() { + switch (this) { + case AGGRO_TARGET: return "ability.target.aggro_target"; + case SELF: return "ability.target.self"; + case AOE_SELF: return "ability.target.aoe_self"; + case AOE_TARGET: return "ability.target.aoe_target"; + default: return name(); + } + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java index 25ec6cb66..28b211c3e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDef.java @@ -2,7 +2,6 @@ package kamkeel.npcs.controllers.data.ability.gui; import kamkeel.npcs.controllers.data.ability.AbilityEffect; import noppes.npcs.client.gui.SubGuiColorSelector; -import noppes.npcs.client.gui.advanced.ability.SubGuiAbilityEffects; import noppes.npcs.client.gui.select.GuiAnimationSelection; import noppes.npcs.client.gui.select.GuiSoundSelection; import noppes.npcs.client.gui.util.SubGuiInterface; @@ -26,6 +25,7 @@ public class FieldDef { private Supplier getter; private Consumer setter; private BooleanSupplier visibleWhen = () -> true; + private BooleanSupplier enabledWhen = () -> true; private String tooltip = null; private String hoverText = null; @@ -57,6 +57,10 @@ public class FieldDef { // STATIC FACTORIES // ═══════════════════════════════════════════════════════════════════ + public static FieldDef section(String label) { + return new FieldDef(label, FieldType.SECTION_HEADER); + } + public static FieldDef floatField(String label, Supplier getter, Consumer setter) { FieldDef def = new FieldDef(label, FieldType.FLOAT); def.getter = () -> getter.get(); @@ -102,6 +106,20 @@ public class FieldDef { return def; } + public static FieldDef labelField(String label, Supplier textSupplier) { + FieldDef def = new FieldDef(label, FieldType.LABEL); + def.getter = () -> textSupplier.get(); + return def; + } + + @SuppressWarnings("unchecked") + public static FieldDef effectsListField(String label, Supplier> getter, Consumer> setter) { + FieldDef def = new FieldDef(label, FieldType.EFFECTS_LIST); + def.getter = () -> getter.get(); + def.setter = v -> setter.accept((List) v); + return def; + } + public static FieldDef subGuiField(String label, Supplier factory, Consumer resultHandler) { FieldDef def = new FieldDef(label, FieldType.SUB_GUI); def.subGuiFactory = factory; @@ -121,15 +139,6 @@ public class FieldDef { .buttonTextColor(() -> getter.get() & 0xFFFFFF); } - public static FieldDef effectsSubGui(String label, Supplier> getter, Consumer> setter) { - return subGuiField(label, - () -> new SubGuiAbilityEffects(getter.get()), - gui -> { - List r = ((SubGuiAbilityEffects) gui).getResult(); - if (r != null) setter.accept(r); - }); - } - public static FieldDef soundSubGui(String label, Supplier getter, Consumer setter) { return subGuiField(label, () -> new GuiSoundSelection(getter.get()), @@ -139,7 +148,7 @@ public class FieldDef { }) .buttonLabel(() -> { String s = getter.get(); - return s == null || s.isEmpty() ? "gui.none" : truncateEnd(s, 10); + return s == null || s.isEmpty() ? "gui.none" : s; }) .clearable(() -> setter.accept("")); } @@ -161,7 +170,7 @@ public class FieldDef { }) .buttonLabel(() -> { String name = nameGetter.get(); - if (name != null && !name.isEmpty()) return truncateEnd(name, 8); + if (name != null && !name.isEmpty()) return name; int id = idGetter.get(); return id >= 0 ? "ID: " + id : "gui.none"; }) @@ -199,6 +208,11 @@ public class FieldDef { return this; } + public FieldDef enabledWhen(BooleanSupplier condition) { + this.enabledWhen = condition; + return this; + } + public FieldDef tooltip(String tooltip) { this.tooltip = tooltip; return this; @@ -234,6 +248,7 @@ public class FieldDef { public String getCustomTabName() { return customTabName; } public ColumnHint getColumn() { return column; } public boolean isVisible() { return visibleWhen.getAsBoolean(); } + public boolean isEnabled() { return enabledWhen.getAsBoolean(); } public String getTooltip() { return tooltip; } public String getHoverText() { return hoverText; } public float getMin() { return min; } @@ -271,17 +286,4 @@ public class FieldDef { return buttonTextColorSupplier != null ? buttonTextColorSupplier.get() : null; } - // ═══════════════════════════════════════════════════════════════════ - // HELPERS - // ═══════════════════════════════════════════════════════════════════ - - static String truncateEnd(String str, int maxLen) { - if (str == null) return ""; - if (str.length() <= maxLen) return str; - int lastSlash = str.lastIndexOf('/'); - if (lastSlash >= 0 && str.length() - lastSlash <= maxLen) { - return "..." + str.substring(lastSlash); - } - return "..." + str.substring(str.length() - maxLen + 3); - } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDefinitionsBuilder.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDefinitionsBuilder.java new file mode 100644 index 000000000..1ba3f2694 --- /dev/null +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldDefinitionsBuilder.java @@ -0,0 +1,359 @@ +package kamkeel.npcs.controllers.data.ability.gui; + +import kamkeel.npcs.controllers.data.ability.AbilityEffect; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.StatCollector; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcButtonYesNo; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.GuiNpcTextField; +import noppes.npcs.client.gui.util.GuiScrollWindow; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Reusable builder that converts a list of {@link FieldDef} into positioned + * GUI widgets inside a {@link GuiScrollWindow}. + */ +public class FieldDefinitionsBuilder { + + // Layout defaults + private int contentRight = 330; + private int colLLabel = 5; + private int colLField = 75; + private int colLWidth = 70; + private int colRLabel = 178; + private int colRField = 248; + private int colRWidth = 70; + private int rowHeight = 24; + private int labelPadding = 8; + + // Dependencies + private final GuiScreen parent; + private final GuiScrollWindow sw; + private final FontRenderer fontRenderer; + + // ID counters + private int widgetId; + private int clearId; + private int labelId; + + // Starting Y + private int startY = 5; + + // Output maps + private final Map buttonFieldMap = new HashMap<>(); + private final Map textFieldMap = new HashMap<>(); + private final Map clearFieldMap = new HashMap<>(); + + // Effects list metadata: widgetId -> [effectIndex, action] + // action: 0=type, 1=duration(text), 2=amp, 3=delete, 4=add + private final Map effectWidgetMeta = new HashMap<>(); + + public FieldDefinitionsBuilder(GuiScreen parent, GuiScrollWindow sw, FontRenderer fontRenderer) { + this.parent = parent; + this.sw = sw; + this.fontRenderer = fontRenderer; + } + + // ═══════════════════════════════════════════════════════════════════ + // CONFIG CHAINING + // ═══════════════════════════════════════════════════════════════════ + + public FieldDefinitionsBuilder contentRight(int v) { this.contentRight = v; return this; } + public FieldDefinitionsBuilder startIds(int widget, int clear, int label) { + this.widgetId = widget; this.clearId = clear; this.labelId = label; return this; + } + public FieldDefinitionsBuilder startY(int y) { this.startY = y; return this; } + public FieldDefinitionsBuilder rowHeight(int h) { this.rowHeight = h; return this; } + + // ═══════════════════════════════════════════════════════════════════ + // BUILD + // ═══════════════════════════════════════════════════════════════════ + + /** + * Processes all fields and adds widgets to the scroll window. + * @return the final Y position after all fields + */ + public int build(List fields) { + buttonFieldMap.clear(); + textFieldMap.clear(); + clearFieldMap.clear(); + effectWidgetMeta.clear(); + + int y = startY; + + for (int i = 0; i < fields.size(); i++) { + FieldDef def = fields.get(i); + + // Section header + if (def.getType() == FieldType.SECTION_HEADER) { + y += 3; + String sectionText = StatCollector.translateToLocal(def.getLabel()); + if (def.getTooltip() != null && !def.getTooltip().isEmpty()) { + sectionText += " (" + StatCollector.translateToLocal(def.getTooltip()) + ")"; + } + sw.addLabel(new GuiNpcLabel(labelId++, sectionText, colLLabel, y + 2, 0xFFFF55)); + y += 15; + continue; + } + + // Effects list renders its own multi-row block + if (def.getType() == FieldType.EFFECTS_LIST) { + y = renderEffectsList(def, y); + continue; + } + + // Two-column pair: LEFT followed by RIGHT + if (def.getColumn() == ColumnHint.LEFT + && i + 1 < fields.size() + && fields.get(i + 1).getColumn() == ColumnHint.RIGHT + && fields.get(i + 1).getType() != FieldType.SECTION_HEADER) { + renderFieldAt(def, colLLabel, colLField, colLWidth, y); + + i++; + FieldDef rightDef = fields.get(i); + renderFieldAt(rightDef, colRLabel, colRField, colRWidth, y); + + y += rowHeight; + } else { + // Full-width: compute fieldX from label pixel width + int fieldW = getFullFieldWidth(def); + String translated = StatCollector.translateToLocal(def.getLabel()); + int labelW = fontRenderer.getStringWidth(translated); + int fieldX = colLLabel + labelW + labelPadding; + + renderFieldAt(def, colLLabel, fieldX, fieldW, y); + y += rowHeight; + } + } + + return y; + } + + // ═══════════════════════════════════════════════════════════════════ + // FIELD RENDERING + // ═══════════════════════════════════════════════════════════════════ + + @SuppressWarnings({"unchecked", "rawtypes"}) + private void renderFieldAt(FieldDef def, int labelX, int fieldX, int fieldW, int y) { + sw.addLabel(new GuiNpcLabel(labelId++, def.getLabel(), labelX, y + 5, 0xFFFFFF)); + + String hover = def.getHoverText() != null ? def.getHoverText() : def.getTooltip(); + + switch (def.getType()) { + case FLOAT: { + float fVal = def.getValue() instanceof Number ? ((Number) def.getValue()).floatValue() : 0f; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, parent, fontRenderer, fieldX, y, fieldW, 20, String.valueOf(fVal)); + tf.setFloatsOnly(); + if (def.hasRange()) tf.setMinMaxDefaultFloat(def.getMin(), def.getMax(), fVal); + if (!def.isEnabled()) tf.setEnabled(false); + if (hover != null) tf.setHoverText(hover); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + widgetId++; + clearId++; + break; + } + case INT: { + int iVal = def.getValue() instanceof Number ? ((Number) def.getValue()).intValue() : 0; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, parent, fontRenderer, fieldX, y, fieldW, 20, String.valueOf(iVal)); + tf.setIntegersOnly(); + if (def.hasRange()) tf.setMinMaxDefault((int) def.getMin(), (int) def.getMax(), iVal); + if (!def.isEnabled()) tf.setEnabled(false); + if (hover != null) tf.setHoverText(hover); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + widgetId++; + clearId++; + break; + } + case STRING: { + String sVal = def.getValue() != null ? def.getValue().toString() : ""; + GuiNpcTextField tf = new GuiNpcTextField(widgetId, parent, fontRenderer, fieldX, y, fieldW, 20, sVal); + if (!def.isEnabled()) tf.setEnabled(false); + if (hover != null) tf.setHoverText(hover); + sw.addTextField(tf); + textFieldMap.put(widgetId, def); + widgetId++; + clearId++; + break; + } + case LABEL: { + String text = def.getValue() != null ? def.getValue().toString() : ""; + sw.addLabel(new GuiNpcLabel(labelId++, text, fieldX, y + 5, 0xAAAAAA)); + widgetId++; + clearId++; + break; + } + case BOOLEAN: { + boolean bVal = def.getValue() instanceof Boolean ? (Boolean) def.getValue() : false; + GuiNpcButtonYesNo btn = new GuiNpcButtonYesNo(widgetId, fieldX, y, fieldW, 20, bVal); + if ("gui.enabled".equals(def.getLabel()) && def.getTab() == TabTarget.GENERAL) { + btn.setTextColor(bVal ? 0x00FF00 : 0xFF0000); + } + if (!def.isEnabled()) btn.setEnabled(false); + if (hover != null) btn.setHoverText(hover); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + widgetId++; + clearId++; + break; + } + case ENUM: { + Class> enumClass = def.getEnumClass(); + if (enumClass != null) { + Enum[] constants = enumClass.getEnumConstants(); + String[] names = new String[constants.length]; + for (int i = 0; i < constants.length; i++) names[i] = constants[i].toString(); + int selected = def.getValue() instanceof Enum ? ((Enum) def.getValue()).ordinal() : 0; + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, fieldW, 20, names, selected); + if (!def.isEnabled()) btn.setEnabled(false); + if (hover != null) btn.setHoverText(hover); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + } + widgetId++; + clearId++; + break; + } + case STRING_ENUM: { + String[] values = def.getStringEnumValues(); + if (values != null && values.length > 0) { + String curVal = def.getStringEnumValue(); + int selected = 0; + for (int i = 0; i < values.length; i++) { + if (values[i].equals(curVal)) { selected = i; break; } + } + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, fieldW, 20, values, selected); + if (!def.isEnabled()) btn.setEnabled(false); + if (hover != null) btn.setHoverText(hover); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + } + widgetId++; + clearId++; + break; + } + case SUB_GUI: { + String btnText = def.getButtonLabel(); + int btnW; + if (def.hasClearAction()) { + btnW = contentRight - 22 - fieldX; + GuiNpcButton clearBtn = new GuiNpcButton(clearId, contentRight - 20, y, 20, 20, "X"); + sw.addButton(clearBtn); + clearFieldMap.put(clearId, def); + } else { + btnW = contentRight - fieldX; + } + GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, btnW, 20, btnText); + Integer textColor = def.getButtonTextColor(); + if (textColor != null) btn.setTextColor(textColor); + if (!def.isEnabled()) btn.setEnabled(false); + if (hover != null) btn.setHoverText(hover); + sw.addButton(btn); + buttonFieldMap.put(widgetId, def); + widgetId++; + clearId++; + break; + } + } + } + + // ═══════════════════════════════════════════════════════════════════ + // EFFECTS LIST RENDERING + // ═══════════════════════════════════════════════════════════════════ + + @SuppressWarnings("unchecked") + private int renderEffectsList(FieldDef def, int y) { + // Section header + y += 3; + sw.addLabel(new GuiNpcLabel(labelId++, def.getLabel(), colLLabel, y + 2, 0xFFFF55)); + y += 15; + + List effects = (List) def.getValue(); + if (effects == null) effects = new ArrayList<>(); + + String[] typeNames = AbilityEffect.EffectType.getLangKeys(); + String[] ampValues = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; + + for (int e = 0; e < effects.size() && e < 5; e++) { + AbilityEffect effect = effects.get(e); + + // Type selector button + int typeIdx = effect.getType().ordinal(); + GuiNpcButton typeBtn = new GuiNpcButton(widgetId, colLLabel, y, 100, 20, typeNames, typeIdx); + sw.addButton(typeBtn); + buttonFieldMap.put(widgetId, def); + effectWidgetMeta.put(widgetId, new int[]{e, 0}); + widgetId++; + + // Duration text field + GuiNpcTextField durField = new GuiNpcTextField(widgetId, parent, fontRenderer, + colLLabel + 104, y, 50, 20, String.valueOf(effect.getDurationTicks())); + durField.setIntegersOnly(); + durField.setMinMaxDefault(1, 12000, 60); + sw.addTextField(durField); + textFieldMap.put(widgetId, def); + effectWidgetMeta.put(widgetId, new int[]{e, 1}); + widgetId++; + + // Amplifier selector (0-10) + GuiNpcButton ampBtn = new GuiNpcButton(widgetId, colLLabel + 158, y, 40, 20, ampValues, effect.getAmplifier()); + sw.addButton(ampBtn); + buttonFieldMap.put(widgetId, def); + effectWidgetMeta.put(widgetId, new int[]{e, 2}); + widgetId++; + + // Delete button + GuiNpcButton delBtn = new GuiNpcButton(clearId, colLLabel + 202, y, 20, 20, "X"); + sw.addButton(delBtn); + clearFieldMap.put(clearId, def); + effectWidgetMeta.put(clearId, new int[]{e, 3}); + clearId++; + + y += rowHeight; + } + + // Add button (if < 5 effects) + if (effects.size() < 5) { + GuiNpcButton addBtn = new GuiNpcButton(widgetId, colLLabel, y, 50, 20, "gui.add"); + sw.addButton(addBtn); + buttonFieldMap.put(widgetId, def); + effectWidgetMeta.put(widgetId, new int[]{effects.size(), 4}); + widgetId++; + clearId++; + y += rowHeight; + } + + return y; + } + + private int getFullFieldWidth(FieldDef def) { + switch (def.getType()) { + case FLOAT: + case INT: return 60; + case STRING: return 200; + case BOOLEAN: return 50; + case LABEL: return 60; + case ENUM: + case STRING_ENUM: return 120; + case SUB_GUI: return def.hasClearAction() ? 175 : 200; + default: return 80; + } + } + + // ═══════════════════════════════════════════════════════════════════ + // GETTERS + // ═══════════════════════════════════════════════════════════════════ + + public Map getButtonFieldMap() { return buttonFieldMap; } + public Map getTextFieldMap() { return textFieldMap; } + public Map getClearFieldMap() { return clearFieldMap; } + public Map getEffectWidgetMeta() { return effectWidgetMeta; } + public int getNextLabelId() { return labelId; } +} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java index b908d9b88..019b24bdf 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/FieldType.java @@ -7,5 +7,8 @@ public enum FieldType { ENUM, STRING_ENUM, SUB_GUI, - STRING + STRING, + SECTION_HEADER, + LABEL, + EFFECTS_LIST } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java index aba49646b..978f15224 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/TabTarget.java @@ -5,6 +5,5 @@ public enum TabTarget { TYPE, TARGET, EFFECTS, - VISUAL, CUSTOM } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java index 8241fab86..48ac3c374 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCharge.java @@ -16,6 +16,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityCharge; @@ -403,11 +404,11 @@ public class AbilityCharge extends Ability implements IAbilityCharge { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("stats.speed", this::getChargeSpeed, this::setChargeSpeed), - FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.floatField("ability.hitWidth", this::getHitWidth, this::setHitWidth), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("ability.chargeSpeed", this::getChargeSpeed, this::setChargeSpeed).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback).column(ColumnHint.LEFT), + FieldDef.floatField("ability.hitWidth", this::getHitWidth, this::setHitWidth).column(ColumnHint.RIGHT), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 29ae4aa22..7e265b7d1 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -13,6 +13,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityCutter; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -30,7 +31,16 @@ public class AbilityCutter extends Ability implements IAbilityCutter { public enum SweepMode { SWIPE, - SPIN + SPIN; + + @Override + public String toString() { + switch (this) { + case SWIPE: return "ability.sweep.swipe"; + case SPIN: return "ability.sweep.spin"; + default: return name(); + } + } } private float arcAngle = 90.0f; @@ -308,20 +318,21 @@ public class AbilityCutter extends Ability implements IAbilityCutter { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("gui.range", this::getRange, this::setRange), - FieldDef.floatField("ability.arcAngle", this::getArcAngle, this::setArcAngle), - FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("gui.range", this::getRange, this::setRange).column(ColumnHint.RIGHT), FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), + FieldDef.section("ability.section.sweep"), FieldDef.enumField("ability.sweepMode", SweepMode.class, this::getSweepModeEnum, this::setSweepModeEnum) .hover("ability.hover.sweepMode"), - FieldDef.boolField("ability.piercing", this::isPiercing, this::setPiercing) - .hover("ability.hover.piercing"), - FieldDef.intField("ability.duration", this::getSpinDurationTicks, this::setSpinDurationTicks) + FieldDef.floatField("ability.arcAngle", this::getArcAngle, this::setArcAngle).column(ColumnHint.LEFT), + FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), + FieldDef.intField("ability.spinDuration", this::getSpinDurationTicks, this::setSpinDurationTicks) .range(1, 1000) .visibleWhen(() -> this.getSweepModeEnum() == SweepMode.SPIN), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.boolField("ability.piercing", this::isPiercing, this::setPiercing) + .hover("ability.hover.piercing"), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java index 3684a8b73..307f8aed2 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDash.java @@ -12,6 +12,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityDash; @@ -31,7 +32,16 @@ public class AbilityDash extends Ability implements IAbilityDash { */ public enum DashMode { AGGRESSIVE, - DEFENSIVE + DEFENSIVE; + + @Override + public String toString() { + switch (this) { + case AGGRESSIVE: return "ability.dash.aggressive"; + case DEFENSIVE: return "ability.dash.defensive"; + default: return name(); + } + } } /** @@ -347,10 +357,10 @@ public class AbilityDash extends Ability implements IAbilityDash { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.enumField("ability.mode", DashMode.class, this::getDashModeEnum, this::setDashModeEnum) + FieldDef.enumField("ability.dashMode", DashMode.class, this::getDashModeEnum, this::setDashModeEnum) .hover("ability.hover.dashMode"), - FieldDef.floatField("ability.dashDist", this::getDashDistance, this::setDashDistance), - FieldDef.floatField("ability.dashSpeed", this::getDashSpeed, this::setDashSpeed) + FieldDef.floatField("ability.dashDistance", this::getDashDistance, this::setDashDistance).column(ColumnHint.LEFT), + FieldDef.floatField("ability.dashSpeed", this::getDashSpeed, this::setDashSpeed).column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index fb2f94646..f08092bd9 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -17,8 +17,8 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityDisc; import java.util.Arrays; @@ -280,51 +280,53 @@ public class AbilityDisc extends Ability implements IAbilityDisc { public List getFieldDefinitions() { return Arrays.asList( // Type tab - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), - FieldDef.floatField("ability.discRadius", this::getDiscRadius, this::setDiscRadius), - FieldDef.floatField("ability.discThickness", this::getDiscThickness, this::setDiscThickness), - FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) - .hover("ability.hover.homing"), - FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) - .visibleWhen(this::isHoming), - FieldDef.boolField("ability.boomerang", this::isBoomerang, this::setBoomerang) - .hover("ability.hover.boomerang"), - FieldDef.intField("ability.boomerangDelay", this::getBoomerangDelay, this::setBoomerangDelay) - .visibleWhen(this::isBoomerang), - FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) - .hover("ability.hover.explosive"), - FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) - .visibleWhen(this::isExplosive), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed).column(ColumnHint.RIGHT), FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), - FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + FieldDef.section("ability.section.disc"), + FieldDef.floatField("gui.radius", this::getDiscRadius, this::setDiscRadius).column(ColumnHint.LEFT), + FieldDef.floatField("gui.thickness", this::getDiscThickness, this::setDiscThickness).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.maxDistance", this::getMaxDistance, this::setMaxDistance).column(ColumnHint.LEFT), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.homing"), + FieldDef.boolField("gui.enabled", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("gui.strength", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming), + FieldDef.section("ability.section.boomerang"), + FieldDef.boolField("gui.enabled", this::isBoomerang, this::setBoomerang) + .hover("ability.hover.boomerang"), + FieldDef.intField("gui.delay", this::getBoomerangDelay, this::setBoomerangDelay) + .visibleWhen(this::isBoomerang), + FieldDef.section("ability.section.explosive"), + FieldDef.boolField("gui.enabled", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("gui.radius", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects), // Visual tab FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), + FieldDef.section("ability.section.colors").customTab("ability.tab.visual"), FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) - .tab(TabTarget.VISUAL), - FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled), FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled).column(ColumnHint.LEFT), FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) - .tab(TabTarget.VISUAL).range(0, 1) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").range(0, 1).visibleWhen(this::isOuterColorEnabled).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.effects").customTab("ability.tab.visual"), FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) - .tab(TabTarget.VISUAL).range(0.01f, 5.0f) - .visibleWhen(this::hasLightningEffect), - FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) - .tab(TabTarget.VISUAL).range(0.1f, 10.0f) - .visibleWhen(this::hasLightningEffect) + .customTab("ability.tab.visual"), + FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) + .customTab("ability.tab.visual").range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) + .customTab("ability.tab.visual").range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java index 89fe6acfc..c47f6e0f0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java @@ -17,8 +17,8 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityEnergyBeam; import java.util.Arrays; @@ -283,49 +283,50 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { public List getFieldDefinitions() { return Arrays.asList( // Type tab - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), - FieldDef.floatField("ability.beamWidth", this::getBeamWidth, this::setBeamWidth), - FieldDef.floatField("ability.headSize", this::getHeadSize, this::setHeadSize), - FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) - .hover("ability.hover.homing"), - FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) - .visibleWhen(this::isHoming), - FieldDef.floatField("ability.homingRange", this::getHomingRange, this::setHomingRange) - .visibleWhen(this::isHoming), - FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), - FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) - .hover("ability.hover.explosive"), - FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) - .visibleWhen(this::isExplosive), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed).column(ColumnHint.RIGHT), FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + FieldDef.section("ability.section.beam"), + FieldDef.floatField("ability.beamWidth", this::getBeamWidth, this::setBeamWidth).column(ColumnHint.LEFT), + FieldDef.floatField("ability.headSize", this::getHeadSize, this::setHeadSize).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.maxDistance", this::getMaxDistance, this::setMaxDistance).column(ColumnHint.LEFT), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.homing"), + FieldDef.boolField("gui.enabled", this::isHoming, this::setHoming) + .hover("ability.hover.homing"), + FieldDef.floatField("gui.strength", this::getHomingStrength, this::setHomingStrength) + .visibleWhen(this::isHoming).column(ColumnHint.LEFT), + FieldDef.floatField("gui.range", this::getHomingRange, this::setHomingRange) + .visibleWhen(this::isHoming).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.explosive"), + FieldDef.boolField("gui.enabled", this::isExplosive, this::setExplosive) + .hover("ability.hover.explosive"), + FieldDef.floatField("gui.radius", this::getExplosionRadius, this::setExplosionRadius) + .visibleWhen(this::isExplosive), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects), // Visual tab FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), + FieldDef.section("ability.section.colors").customTab("ability.tab.visual"), FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) - .tab(TabTarget.VISUAL), - FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled), FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled).column(ColumnHint.LEFT), FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) - .tab(TabTarget.VISUAL).range(0, 1) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").range(0, 1).visibleWhen(this::isOuterColorEnabled).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.effects").customTab("ability.tab.visual"), FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) - .tab(TabTarget.VISUAL).range(0.01f, 5.0f) - .visibleWhen(this::hasLightningEffect), - FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) - .tab(TabTarget.VISUAL).range(0.1f, 10.0f) - .visibleWhen(this::hasLightningEffect) + .customTab("ability.tab.visual"), + FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) + .customTab("ability.tab.visual").range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) + .customTab("ability.tab.visual").range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java index bfa7b0f34..bdf95f882 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityGuard.java @@ -12,6 +12,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityGuard; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -44,7 +45,16 @@ public class AbilityGuard extends Ability implements IAbilityGuard { public enum CounterType { FLAT, - PERCENT + PERCENT; + + @Override + public String toString() { + switch (this) { + case FLAT: return "ability.counter.flat"; + case PERCENT: return "ability.counter.percent"; + default: return name(); + } + } } public AbilityGuard() { @@ -287,23 +297,21 @@ public class AbilityGuard extends Ability implements IAbilityGuard { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) - .range(1, 1000), - FieldDef.floatField("ability.dmgReduce", this::getDamageReduction, this::setDamageReduction), - FieldDef.boolField("ability.canCounter", this::isCanCounter, this::setCanCounter) - .hover("ability.hover.canCounter"), - FieldDef.enumField("ability.counterType", CounterType.class, this::getCounterTypeEnum, this::setCounterTypeEnum) - .hover("ability.hover.counterType") + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks).range(1, 1000), + FieldDef.floatField("ability.damageReduction", this::getDamageReduction, this::setDamageReduction), + FieldDef.section("ability.section.counter"), + FieldDef.boolField("gui.enabled", this::isCanCounter, this::setCanCounter).hover("ability.hover.canCounter"), + FieldDef.enumField("gui.type", CounterType.class, this::getCounterTypeEnum, this::setCounterTypeEnum) + .hover("ability.hover.counterType").visibleWhen(this::isCanCounter), + FieldDef.floatField("gui.value", this::getCounterValue, this::setCounterValue) + .visibleWhen(this::isCanCounter).column(ColumnHint.LEFT), + FieldDef.floatField("gui.chance", this::getCounterChance, this::setCounterChance) + .visibleWhen(this::isCanCounter).column(ColumnHint.RIGHT), + FieldDef.stringField("gui.sound", this::getCounterSound, this::setCounterSound) .visibleWhen(this::isCanCounter), - FieldDef.floatField("ability.counterValue", this::getCounterValue, this::setCounterValue) + FieldDef.intField("gui.animation", this::getCounterAnimationId, this::setCounterAnimationId) .visibleWhen(this::isCanCounter), - FieldDef.floatField("ability.counterChance", this::getCounterChance, this::setCounterChance) - .visibleWhen(this::isCanCounter), - FieldDef.stringField("ability.counterSound", this::getCounterSound, this::setCounterSound) - .visibleWhen(this::isCanCounter), - FieldDef.intField("ability.counterAnim", this::getCounterAnimationId, this::setCounterAnimationId) - .visibleWhen(this::isCanCounter), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java index cd5194b29..11e37d68a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHazard.java @@ -16,6 +16,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityHazard; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -34,14 +35,35 @@ public class AbilityHazard extends Ability implements IAbilityHazard { public enum HazardShape { CIRCLE, RING, - CONE + CONE; + + @Override + public String toString() { + switch (this) { + case CIRCLE: return "ability.shape.circle"; + case RING: return "ability.shape.ring"; + case CONE: return "ability.shape.cone"; + default: return name(); + } + } } public enum PlacementMode { AT_CASTER, AT_TARGET, FOLLOW_CASTER, - FOLLOW_TARGET + FOLLOW_TARGET; + + @Override + public String toString() { + switch (this) { + case AT_CASTER: return "ability.placement.atCaster"; + case AT_TARGET: return "ability.placement.atTarget"; + case FOLLOW_CASTER: return "ability.placement.followCaster"; + case FOLLOW_TARGET: return "ability.placement.followTarget"; + default: return name(); + } + } } private int durationTicks = 100; @@ -612,22 +634,24 @@ public class AbilityHazard extends Ability implements IAbilityHazard { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) - .range(1, 2000), + FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks).range(1, 2000), FieldDef.enumField("ability.shape", HazardShape.class, this::getShapeEnum, this::setShapeEnum) .hover("ability.hover.shape"), FieldDef.enumField("ability.placement", PlacementMode.class, this::getPlacementEnum, this::setPlacementEnum) .hover("ability.hover.placement"), - FieldDef.floatField("ability.radius", this::getRadius, this::setRadius), - FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius), - FieldDef.floatField("ability.dmgPerSec", this::getDamagePerSecond, this::setDamagePerSecond), - FieldDef.intField("ability.dmgInterval", this::getDamageInterval, this::setDamageInterval), - FieldDef.intField("ability.slownessLvl", this::getSlownessLevel, this::setSlownessLevel), - FieldDef.intField("ability.debuffDur", this::getDebuffDuration, this::setDebuffDuration), - FieldDef.intField("ability.poisonLvl", this::getPoisonLevel, this::setPoisonLevel), + FieldDef.section("ability.section.area"), + FieldDef.floatField("gui.radius", this::getRadius, this::setRadius).column(ColumnHint.LEFT), + FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.damage"), + FieldDef.floatField("ability.damagePerSecond", this::getDamagePerSecond, this::setDamagePerSecond).column(ColumnHint.LEFT), + FieldDef.intField("ability.damageInterval", this::getDamageInterval, this::setDamageInterval).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.debuffs"), + FieldDef.intField("ability.slownessLevel", this::getSlownessLevel, this::setSlownessLevel).column(ColumnHint.LEFT), + FieldDef.intField("ability.debuffDuration", this::getDebuffDuration, this::setDebuffDuration).column(ColumnHint.RIGHT), + FieldDef.intField("ability.poisonLevel", this::getPoisonLevel, this::setPoisonLevel), FieldDef.boolField("ability.affectsCaster", this::isAffectsCaster, this::setAffectsCaster) .hover("ability.hover.affectsCaster"), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java index 543a26821..764bef280 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeal.java @@ -11,6 +11,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityHeal; @@ -285,18 +286,18 @@ public class AbilityHeal extends Ability implements IAbilityHeal { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.boolField("dialog.instant", this::isInstantHeal, this::setInstantHeal) + FieldDef.boolField("ability.instantHeal", this::isInstantHeal, this::setInstantHeal) .hover("ability.hover.instant"), FieldDef.intField("ability.duration", this::getDurationTicks, this::setDurationTicks) - .range(1, 1000) - .visibleWhen(() -> !this.isInstantHeal()), - FieldDef.floatField("ability.healAmount", this::getHealAmount, this::setHealAmount), - FieldDef.floatField("ability.healPercent", this::getHealPercent, this::setHealPercent), + .range(1, 1000).visibleWhen(() -> !this.isInstantHeal()), + FieldDef.section("ability.section.healing"), + FieldDef.floatField("ability.healAmount", this::getHealAmount, this::setHealAmount).column(ColumnHint.LEFT), + FieldDef.floatField("ability.healPercent", this::getHealPercent, this::setHealPercent).column(ColumnHint.RIGHT), FieldDef.floatField("ability.healRadius", this::getHealRadius, this::setHealRadius), FieldDef.boolField("ability.healSelf", this::isHealSelf, this::setHealSelf) - .hover("ability.hover.healSelf"), + .hover("ability.hover.healSelf").column(ColumnHint.LEFT), FieldDef.boolField("ability.healAllies", this::isHealAllies, this::setHealAllies) - .hover("ability.hover.healAllies") + .hover("ability.hover.healAllies").column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java index a86662304..0eca4f4c7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityHeavyHit.java @@ -7,6 +7,7 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityHeavyHit; @@ -110,9 +111,9 @@ public class AbilityHeavyHit extends Ability implements IAbilityHeavyHit { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback).column(ColumnHint.RIGHT), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index 4d3ce9fbe..bc33f689b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -6,8 +6,8 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; @@ -231,39 +231,34 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { return Arrays.asList( // Type tab FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.laserWidth", this::getLaserWidth, this::setLaserWidth), - FieldDef.floatField("ability.expansionSpeed", this::getExpansionSpeed, this::setExpansionSpeed), - FieldDef.intField("ability.lingerTicks", this::getLingerTicks, this::setLingerTicks), - FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), - FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), - FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) - .hover("ability.hover.explosive"), - FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) - .visibleWhen(this::isExplosive), - FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.floatField("ability.knockbackUp", this::getKnockbackUp, this::setKnockbackUp), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback).column(ColumnHint.LEFT), + FieldDef.floatField("ability.knockbackUp", this::getKnockbackUp, this::setKnockbackUp).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.beam"), + FieldDef.floatField("ability.laserWidth", this::getLaserWidth, this::setLaserWidth).column(ColumnHint.LEFT), + FieldDef.floatField("ability.expansionSpeed", this::getExpansionSpeed, this::setExpansionSpeed).column(ColumnHint.RIGHT), + FieldDef.intField("ability.lingerTicks", this::getLingerTicks, this::setLingerTicks).column(ColumnHint.LEFT), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.maxDistance", this::getMaxDistance, this::setMaxDistance), + FieldDef.section("ability.section.explosive"), + FieldDef.boolField("gui.enabled", this::isExplosive, this::setExplosive).hover("ability.hover.explosive"), + FieldDef.floatField("gui.radius", this::getExplosionRadius, this::setExplosionRadius).visibleWhen(this::isExplosive), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects), // Visual tab - FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) - .tab(TabTarget.VISUAL), + FieldDef.section("ability.section.colors").customTab("ability.tab.visual"), + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor).customTab("ability.tab.visual"), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled).customTab("ability.tab.visual"), FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) - .tab(TabTarget.VISUAL), - FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled), FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled).column(ColumnHint.LEFT), FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) - .tab(TabTarget.VISUAL).range(0, 1) - .visibleWhen(this::isOuterColorEnabled), - FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) - .tab(TabTarget.VISUAL).range(0.01f, 5.0f) - .visibleWhen(this::hasLightningEffect), - FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) - .tab(TabTarget.VISUAL).range(0.1f, 10.0f) - .visibleWhen(this::hasLightningEffect) + .customTab("ability.tab.visual").range(0, 1).visibleWhen(this::isOuterColorEnabled).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.effects").customTab("ability.tab.visual"), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect).customTab("ability.tab.visual"), + FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) + .customTab("ability.tab.visual").range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) + .customTab("ability.tab.visual").range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index f4c156f49..66ebdf2c7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -17,8 +17,8 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityOrb; import java.util.Arrays; @@ -419,47 +419,38 @@ public class AbilityOrb extends Ability implements IAbilityOrb { public List getFieldDefinitions() { return Arrays.asList( // Type tab - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("stats.speed", this::getOrbSpeed, this::setOrbSpeed), - FieldDef.floatField("stats.size", this::getOrbSize, this::setOrbSize), - FieldDef.floatField("ability.maxDist", this::getMaxDistance, this::setMaxDistance), - FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) - .hover("ability.hover.homing"), - FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) - .visibleWhen(this::isHoming), - FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) - .hover("ability.hover.explosive"), - FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) - .visibleWhen(this::isExplosive), - FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("stats.speed", this::getOrbSpeed, this::setOrbSpeed).column(ColumnHint.RIGHT), + FieldDef.floatField("stats.size", this::getOrbSize, this::setOrbSize).column(ColumnHint.LEFT), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback).column(ColumnHint.RIGHT), + FieldDef.floatField("ability.maxDistance", this::getMaxDistance, this::setMaxDistance).column(ColumnHint.LEFT), + FieldDef.intField("ability.lifetime", this::getMaxLifetime, this::setMaxLifetime).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.homing"), + FieldDef.boolField("gui.enabled", this::isHoming, this::setHoming).hover("ability.hover.homing"), + FieldDef.floatField("gui.strength", this::getHomingStrength, this::setHomingStrength).visibleWhen(this::isHoming), + FieldDef.section("ability.section.explosive"), + FieldDef.boolField("gui.enabled", this::isExplosive, this::setExplosive).hover("ability.hover.explosive"), + FieldDef.floatField("gui.radius", this::getExplosionRadius, this::setExplosionRadius).visibleWhen(this::isExplosive), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects), // Visual tab FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, this::getAnchorPointEnum, this::setAnchorPointEnum) - .tab(TabTarget.VISUAL), - FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed) - .tab(TabTarget.VISUAL), - FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) - .tab(TabTarget.VISUAL).range(0, 1) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual"), + FieldDef.section("ability.section.colors").customTab("ability.tab.visual"), + FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor).customTab("ability.tab.visual"), + FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled).customTab("ability.tab.visual"), FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled), + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled), FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled), - FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect) - .tab(TabTarget.VISUAL), - FieldDef.floatField("ability.lightningDensity", this::getLightningDensity, this::setLightningDensity) - .tab(TabTarget.VISUAL).range(0.01f, 5.0f) - .visibleWhen(this::hasLightningEffect), - FieldDef.floatField("ability.lightningRadius", this::getLightningRadius, this::setLightningRadius) - .tab(TabTarget.VISUAL).range(0.1f, 10.0f) - .visibleWhen(this::hasLightningEffect) + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled).column(ColumnHint.LEFT), + FieldDef.floatField("ability.outerAlpha", this::getOuterColorAlpha, this::setOuterColorAlpha) + .customTab("ability.tab.visual").range(0, 1).visibleWhen(this::isOuterColorEnabled).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.effects").customTab("ability.tab.visual"), + FieldDef.floatField("ability.rotationSpeed", this::getRotationSpeed, this::setRotationSpeed).customTab("ability.tab.visual"), + FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect).customTab("ability.tab.visual"), + FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) + .customTab("ability.tab.visual").range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) + .customTab("ability.tab.visual").range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect).column(ColumnHint.RIGHT) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java index 03b815441..902c9a194 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityProjectile.java @@ -12,6 +12,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityProjectile; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -255,19 +256,17 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("stats.speed", this::getSpeed, this::setSpeed).column(ColumnHint.RIGHT), FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.stringEnumField("ability.projType", new String[]{"fireball", "arrow", "magic"}, this::getProjectileType, this::setProjectileType), - FieldDef.boolField("ability.explosive", this::isExplosive, this::setExplosive) - .hover("ability.hover.explosive"), - FieldDef.floatField("ability.explosionRad", this::getExplosionRadius, this::setExplosionRadius) - .visibleWhen(this::isExplosive), - FieldDef.boolField("ability.homing", this::isHoming, this::setHoming) - .hover("ability.hover.homing"), - FieldDef.floatField("ability.homingStr", this::getHomingStrength, this::setHomingStrength) - .visibleWhen(this::isHoming), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.stringEnumField("ability.projectileType", new String[]{"fireball", "arrow", "magic"}, this::getProjectileType, this::setProjectileType), + FieldDef.section("ability.section.homing"), + FieldDef.boolField("gui.enabled", this::isHoming, this::setHoming).hover("ability.hover.homing"), + FieldDef.floatField("gui.strength", this::getHomingStrength, this::setHomingStrength).visibleWhen(this::isHoming), + FieldDef.section("ability.section.explosive"), + FieldDef.boolField("gui.enabled", this::isExplosive, this::setExplosive).hover("ability.hover.explosive"), + FieldDef.floatField("gui.radius", this::getExplosionRadius, this::setExplosionRadius).visibleWhen(this::isExplosive), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java index 83af93df7..768496ec7 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityShockwave.java @@ -11,6 +11,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityShockwave; @@ -171,10 +172,11 @@ public class AbilityShockwave extends Ability implements IAbilityShockwave { public List getFieldDefinitions() { return Arrays.asList( FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.pushRadius", this::getPushRadius, this::setPushRadius), - FieldDef.floatField("ability.pushStrength", this::getPushStrength, this::setPushStrength), + FieldDef.section("ability.section.push"), + FieldDef.floatField("gui.radius", this::getPushRadius, this::setPushRadius).column(ColumnHint.LEFT), + FieldDef.floatField("gui.strength", this::getPushStrength, this::setPushStrength).column(ColumnHint.RIGHT), FieldDef.intField("ability.maxTargets", this::getMaxTargets, this::setMaxTargets), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java index b26e203c1..d5a2599fd 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySlam.java @@ -18,6 +18,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilitySlam; import somehussar.gui.annotationHandling.GuiEditable; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import java.util.Arrays; @@ -572,11 +573,12 @@ public class AbilitySlam extends Ability implements IAbilitySlam { public List getFieldDefinitions() { return Arrays.asList( FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.radius", this::getRadius, this::setRadius), - FieldDef.floatField("ability.knockback", this::getKnockbackStrength, this::setKnockbackStrength), - FieldDef.floatField("ability.leapSpeed", this::getLeapSpeed, this::setLeapSpeed), - FieldDef.floatField("ability.leapHeight", this::getLeapHeight, this::setLeapHeight), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.floatField("gui.radius", this::getRadius, this::setRadius).column(ColumnHint.LEFT), + FieldDef.floatField("ability.knockback", this::getKnockbackStrength, this::setKnockbackStrength).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.leap"), + FieldDef.floatField("gui.speed", this::getLeapSpeed, this::setLeapSpeed).column(ColumnHint.LEFT), + FieldDef.floatField("gui.height", this::getLeapHeight, this::setLeapHeight).column(ColumnHint.RIGHT), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java index ef00df35e..783f0c1f6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilitySweeper.java @@ -4,8 +4,8 @@ import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.ability.data.EnergyColorData; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -203,29 +203,29 @@ public class AbilitySweeper extends Ability implements IAbilitySweeper { @Override public List getFieldDefinitions() { return Arrays.asList( - // Type tab - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.intField("ability.dmgInterval", this::getDamageInterval, this::setDamageInterval), - FieldDef.floatField("ability.beamLength", this::getBeamLength, this::setBeamLength), - FieldDef.floatField("ability.beamWidth", this::getBeamWidth, this::setBeamWidth), - FieldDef.floatField("ability.beamHeight", this::getBeamHeight, this::setBeamHeight), - FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.intField("ability.damageInterval", this::getDamageInterval, this::setDamageInterval).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.beam"), + FieldDef.floatField("gui.length", this::getBeamLength, this::setBeamLength).column(ColumnHint.LEFT), + FieldDef.floatField("gui.width", this::getBeamWidth, this::setBeamWidth).column(ColumnHint.RIGHT), + FieldDef.floatField("gui.height", this::getBeamHeight, this::setBeamHeight).column(ColumnHint.LEFT), + FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed).column(ColumnHint.RIGHT), FieldDef.intField("ability.rotations", this::getNumberOfRotations, this::setNumberOfRotations), FieldDef.boolField("ability.piercing", this::isPiercing, this::setPiercing) - .hover("ability.hover.piercing"), + .hover("ability.hover.piercing").column(ColumnHint.LEFT), FieldDef.boolField("ability.lockTarget", this::isLockOnTarget, this::setLockOnTarget) - .hover("ability.hover.lockTarget"), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects), + .hover("ability.hover.lockTarget").column(ColumnHint.RIGHT), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects), // Visual tab + FieldDef.section("ability.section.colors").customTab("ability.tab.visual"), FieldDef.colorSubGui("ability.innerColor", this::getInnerColor, this::setInnerColor) - .tab(TabTarget.VISUAL), - FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), FieldDef.boolField("ability.outerEnabled", this::isOuterColorEnabled, this::setOuterColorEnabled) - .tab(TabTarget.VISUAL), + .customTab("ability.tab.visual"), + FieldDef.colorSubGui("ability.outerColor", this::getOuterColor, this::setOuterColor) + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled), FieldDef.floatField("ability.outerWidth", this::getOuterColorWidth, this::setOuterColorWidth) - .tab(TabTarget.VISUAL) - .visibleWhen(this::isOuterColorEnabled) + .customTab("ability.tab.visual").visibleWhen(this::isOuterColorEnabled) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java index 284bdec03..28ad00cd2 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTeleport.java @@ -16,6 +16,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityTeleport; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -34,7 +35,17 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { public enum TeleportMode { BLINK, BEHIND, - SINGLE + SINGLE; + + @Override + public String toString() { + switch (this) { + case BLINK: return "ability.teleport.blink"; + case BEHIND: return "ability.teleport.behind"; + case SINGLE: return "ability.teleport.single"; + default: return name(); + } + } } private static final Random RANDOM = new Random(); @@ -534,21 +545,22 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { FieldDef.floatField("ability.blinkRadius", this::getBlinkRadius, this::setBlinkRadius) .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK || this.getModeEnum() == TeleportMode.SINGLE), FieldDef.intField("ability.blinkCount", this::getBlinkCount, this::setBlinkCount) - .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK), + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK).column(ColumnHint.LEFT), FieldDef.intField("ability.blinkDelay", this::getBlinkDelayTicks, this::setBlinkDelayTicks) - .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK), + .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK).column(ColumnHint.RIGHT), FieldDef.floatField("ability.behindDistance", this::getBehindDistance, this::setBehindDistance) .visibleWhen(() -> this.getModeEnum() == TeleportMode.BEHIND), FieldDef.boolField("ability.lineOfSight", this::isRequireLineOfSight, this::setRequireLineOfSight) .hover("ability.hover.lineOfSight") .visibleWhen(() -> this.getModeEnum() == TeleportMode.BLINK || this.getModeEnum() == TeleportMode.SINGLE), - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.dmgRadius", this::getDamageRadius, this::setDamageRadius), - FieldDef.boolField("ability.dmgAtStart", this::isDamageAtStart, this::setDamageAtStart) - .hover("ability.hover.dmgAtStart"), - FieldDef.boolField("ability.dmgAtEnd", this::isDamageAtEnd, this::setDamageAtEnd) - .hover("ability.hover.dmgAtEnd"), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.section("ability.section.damage"), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getDamageRadius, this::setDamageRadius).column(ColumnHint.RIGHT), + FieldDef.boolField("ability.damageAtStart", this::isDamageAtStart, this::setDamageAtStart) + .hover("ability.hover.dmgAtStart").column(ColumnHint.LEFT), + FieldDef.boolField("ability.damageAtEnd", this::isDamageAtEnd, this::setDamageAtEnd) + .hover("ability.hover.dmgAtEnd").column(ColumnHint.RIGHT), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java index 2cb7a8a26..e27e28740 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityTrap.java @@ -14,6 +14,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.api.ability.type.IAbilityTrap; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; @@ -33,7 +34,17 @@ public class AbilityTrap extends Ability implements IAbilityTrap { public enum TrapPlacement { AT_CASTER, AT_TARGET, - AHEAD_OF_CASTER + AHEAD_OF_CASTER; + + @Override + public String toString() { + switch (this) { + case AT_CASTER: return "ability.trapPlace.atCaster"; + case AT_TARGET: return "ability.trapPlace.atTarget"; + case AHEAD_OF_CASTER: return "ability.trapPlace.aheadOfCaster"; + default: return name(); + } + } } private int durationTicks = 200; @@ -465,13 +476,16 @@ public class AbilityTrap extends Ability implements IAbilityTrap { .range(1, 2000), FieldDef.enumField("ability.placement", TrapPlacement.class, this::getPlacementEnum, this::setPlacementEnum) .hover("ability.hover.placement"), - FieldDef.floatField("ability.triggerRad", this::getTriggerRadius, this::setTriggerRadius), - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.dmgRadius", this::getDamageRadius, this::setDamageRadius), - FieldDef.intField("ability.armTime", this::getArmTime, this::setArmTime), - FieldDef.intField("ability.maxTriggers", this::getMaxTriggers, this::setMaxTriggers), + FieldDef.section("ability.section.trigger"), + FieldDef.floatField("gui.radius", this::getTriggerRadius, this::setTriggerRadius).column(ColumnHint.LEFT), + FieldDef.intField("ability.armTime", this::getArmTime, this::setArmTime).column(ColumnHint.RIGHT), + FieldDef.intField("ability.maxTriggers", this::getMaxTriggers, this::setMaxTriggers).column(ColumnHint.LEFT), + FieldDef.intField("ability.triggerCooldown", this::getTriggerCooldown, this::setTriggerCooldown).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.damage"), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("gui.radius", this::getDamageRadius, this::setDamageRadius).column(ColumnHint.RIGHT), FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java index 61e246bc9..3304cad74 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityVortex.java @@ -10,6 +10,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import noppes.npcs.entity.EntityNPCInterface; +import kamkeel.npcs.controllers.data.ability.gui.ColumnHint; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import noppes.npcs.api.ability.type.IAbilityVortex; @@ -304,17 +305,22 @@ public class AbilityVortex extends Ability implements IAbilityVortex { @Override public List getFieldDefinitions() { return Arrays.asList( - FieldDef.floatField("ability.pullRadius", this::getPullRadius, this::setPullRadius), - FieldDef.floatField("ability.pullStrength", this::getPullStrength, this::setPullStrength), - FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage), - FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback), - FieldDef.boolField("ability.aoe", this::isAoe, this::setAoe) + FieldDef.floatField("ability.pullRadius", this::getPullRadius, this::setPullRadius).column(ColumnHint.LEFT), + FieldDef.floatField("ability.pullStrength", this::getPullStrength, this::setPullStrength).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.damage"), + FieldDef.floatField("enchantment.damage", this::getDamage, this::setDamage).column(ColumnHint.LEFT), + FieldDef.floatField("ability.knockback", this::getKnockback, this::setKnockback).column(ColumnHint.RIGHT), + FieldDef.section("ability.section.aoe"), + FieldDef.boolField("gui.enabled", this::isAoe, this::setAoe) .hover("ability.hover.aoe"), - FieldDef.intField("ability.maxTargets", this::getMaxTargets, this::setMaxTargets), - FieldDef.boolField("ability.dmgOnPull", this::isDamageOnPull, this::setDamageOnPull) + FieldDef.intField("ability.maxTargets", this::getMaxTargets, this::setMaxTargets) + .visibleWhen(this::isAoe), + FieldDef.section("ability.section.pullDamage"), + FieldDef.boolField("gui.enabled", this::isDamageOnPull, this::setDamageOnPull) .hover("ability.hover.dmgOnPull"), - FieldDef.floatField("ability.pullDamage", this::getPullDamage, this::setPullDamage), - FieldDef.effectsSubGui("ability.effects", this::getEffects, this::setEffects) + FieldDef.floatField("enchantment.damage", this::getPullDamage, this::setPullDamage) + .visibleWhen(this::isDamageOnPull), + FieldDef.effectsListField("ability.effects", this::getEffects, this::setEffects) ); } } diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java index 9c862e3b0..04fa3f7f9 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -1,8 +1,10 @@ package noppes.npcs.client.gui.advanced; import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityEffect; import kamkeel.npcs.controllers.data.ability.Condition; import kamkeel.npcs.controllers.data.ability.gui.FieldDef; +import kamkeel.npcs.controllers.data.ability.gui.FieldDefinitionsBuilder; import kamkeel.npcs.controllers.data.ability.gui.FieldType; import kamkeel.npcs.controllers.data.ability.gui.TabTarget; import net.minecraft.client.gui.GuiButton; @@ -19,58 +21,62 @@ import noppes.npcs.client.gui.util.ITextfieldListener; import noppes.npcs.client.gui.util.SubGuiInterface; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldListener, ISubGuiListener { private static final int DECLARATIVE_ID_START = 1000; private static final int CLEAR_ID_START = 2000; + private static final int LABEL_ID_START = 3000; + // Fixed tab indices private static final int TAB_GENERAL = 0; private static final int TAB_TYPE = 1; private static final int TAB_TARGET = 2; private static final int TAB_EFFECTS = 3; - private static final int TAB_VISUAL = 4; + // Custom tabs start at index 4 + + private static final int L_LABEL_X = 5; + private static final int ROW_H = 24; private final Ability ability; private final IAbilityConfigCallback callback; private int activeTab = TAB_GENERAL; private List fieldDefs; - private boolean hasTypeFields; - private boolean hasVisualFields; + private List customTabNames; - // Conditions are complex (list with add/edit/remove) - cached separately private List conditions; private int editingConditionIndex = -1; - // Event routing - private final Map buttonFieldMap = new HashMap<>(); - private final Map textFieldMap = new HashMap<>(); - private final Map clearFieldMap = new HashMap<>(); + private FieldDefinitionsBuilder builder; private FieldDef activeSubGuiField = null; + // Scroll position preservation per tab + private float[] tabScrollY; + public SubGuiAbilityConfig(Ability ability, IAbilityConfigCallback callback) { this.ability = ability; this.callback = callback; this.conditions = new ArrayList<>(ability.getConditions()); this.fieldDefs = ability.getAllFieldDefinitions(); - this.hasTypeFields = hasFieldsForTab(TabTarget.TYPE); - this.hasVisualFields = hasFieldsForTab(TabTarget.VISUAL); + discoverCustomTabs(); setBackground("menubg.png", 217); xSize = 356; ySize = 200; } - private boolean hasFieldsForTab(TabTarget target) { + private void discoverCustomTabs() { + customTabNames = new ArrayList<>(); for (FieldDef def : fieldDefs) { - if (def.getTab() == target) return true; + if (def.getTab() == TabTarget.CUSTOM && def.getCustomTabName() != null + && !customTabNames.contains(def.getCustomTabName())) { + customTabNames.add(def.getCustomTabName()); + } } - return false; + tabScrollY = new float[4 + customTabNames.size()]; } // ═══════════════════════════════════════════════════════════════════════════ @@ -79,23 +85,24 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi @Override public void initGui() { - super.initGui(); - buttonFieldMap.clear(); - textFieldMap.clear(); - clearFieldMap.clear(); + // Save scroll position before super clears scroll windows + GuiScrollWindow oldSw = getScrollableGui(0); + if (oldSw != null && activeTab < tabScrollY.length) { + tabScrollY[activeTab] = oldSw.nextScrollY; + } - // Tab buttons + super.initGui(); + + // Tab buttons — always show General, Type, Target, Effects GuiMenuTopButton generalTab = new GuiMenuTopButton(90, guiLeft + 4, guiTop - 17, "menu.general"); generalTab.active = (activeTab == TAB_GENERAL); addTopButton(generalTab); GuiMenuTopButton lastTab = generalTab; - if (hasTypeFields) { - GuiMenuTopButton typeTab = new GuiMenuTopButton(91, lastTab, "gui.type"); - typeTab.active = (activeTab == TAB_TYPE); - addTopButton(typeTab); - lastTab = typeTab; - } + GuiMenuTopButton typeTab = new GuiMenuTopButton(91, lastTab, "gui.type"); + typeTab.active = (activeTab == TAB_TYPE); + addTopButton(typeTab); + lastTab = typeTab; GuiMenuTopButton targetTab = new GuiMenuTopButton(92, lastTab, "script.target"); targetTab.active = (activeTab == TAB_TARGET); @@ -107,194 +114,117 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi addTopButton(effectsTab); lastTab = effectsTab; - if (hasVisualFields) { - GuiMenuTopButton visualTab = new GuiMenuTopButton(94, lastTab, "ability.tab.visual"); - visualTab.active = (activeTab == TAB_VISUAL); - addTopButton(visualTab); + // Custom tabs (Visual, etc.) + for (int i = 0; i < customTabNames.size(); i++) { + GuiMenuTopButton ct = new GuiMenuTopButton(94 + i, lastTab, customTabNames.get(i)); + ct.active = (activeTab == 4 + i); + addTopButton(ct); + lastTab = ct; } GuiMenuTopButton closeBtn = new GuiMenuTopButton(-1000, guiLeft + xSize - 22, guiTop - 17, "X"); addTopButton(closeBtn); - // Scroll window for tab content + // Scroll window int swX = guiLeft + 4; int swY = guiTop + 5; int swW = xSize - 8; int swH = ySize - 10; GuiScrollWindow sw = new GuiScrollWindow(this, swX, swY, swW, swH, 0); + sw.backgroundColor = 0x88000000; + addScrollableGui(0, sw); - TabTarget tabTarget = tabTargetForIndex(activeTab); int y = 5; - int idCounter = DECLARATIVE_ID_START; - int clearCounter = CLEAR_ID_START; + int labelCounter = LABEL_ID_START; - // General tab: show type label at top + // General tab: type label at top if (activeTab == TAB_GENERAL) { - sw.addLabel(new GuiNpcLabel(1, "gui.type", 5, y + 5)); - sw.addLabel(new GuiNpcLabel(2, ability.getTypeId(), 50, y + 5)); - y += 24; + sw.addLabel(new GuiNpcLabel(labelCounter++, "gui.type", 5, y + 5, 0xFFFFFF)); + sw.addLabel(new GuiNpcLabel(labelCounter++, ability.getTypeId(), 55, y + 5, 0xFFFFFF)); + y += ROW_H; } - // Render declarative fields for this tab - List tabFields = getVisibleFieldsForTab(tabTarget); - for (FieldDef def : tabFields) { - int widgetId = idCounter++; - int clearId = clearCounter++; - y = renderField(sw, def, widgetId, clearId, y); - } + // Build declarative fields using the builder + List tabFields = getVisibleFieldsForTab(activeTab); + builder = new FieldDefinitionsBuilder(this, sw, fontRendererObj) + .startIds(DECLARATIVE_ID_START, CLEAR_ID_START, labelCounter) + .startY(y); - // Target tab: append conditions list + y = builder.build(tabFields); + + // Conditions on target tab if (activeTab == TAB_TARGET) { - y = renderConditions(sw, y); + y = renderConditions(sw, y, builder.getNextLabelId()); } sw.maxScrollY = Math.max(y - swH, 0); - addScrollableGui(0, sw); - } - private TabTarget tabTargetForIndex(int tab) { - switch (tab) { - case TAB_GENERAL: return TabTarget.GENERAL; - case TAB_TYPE: return TabTarget.TYPE; - case TAB_TARGET: return TabTarget.TARGET; - case TAB_EFFECTS: return TabTarget.EFFECTS; - case TAB_VISUAL: return TabTarget.VISUAL; - default: return TabTarget.TYPE; + // Restore scroll position + if (activeTab < tabScrollY.length) { + float restored = Math.min(tabScrollY[activeTab], sw.maxScrollY); + sw.nextScrollY = restored; + sw.scrollY = restored; } } - private List getVisibleFieldsForTab(TabTarget target) { + private List getVisibleFieldsForTab(int tabIndex) { List result = new ArrayList<>(); - for (FieldDef def : fieldDefs) { - if (def.getTab() == target && def.isVisible()) { - result.add(def); + + if (tabIndex >= 4) { + // Custom tab — match by custom tab name + int customIndex = tabIndex - 4; + if (customIndex >= 0 && customIndex < customTabNames.size()) { + String tabName = customTabNames.get(customIndex); + for (FieldDef def : fieldDefs) { + if (def.getTab() == TabTarget.CUSTOM + && tabName.equals(def.getCustomTabName()) + && def.isVisible()) { + result.add(def); + } + } + } + } else { + // Fixed tab + TabTarget target; + switch (tabIndex) { + case TAB_GENERAL: target = TabTarget.GENERAL; break; + case TAB_TYPE: target = TabTarget.TYPE; break; + case TAB_TARGET: target = TabTarget.TARGET; break; + case TAB_EFFECTS: target = TabTarget.EFFECTS; break; + default: target = TabTarget.TYPE; break; + } + for (FieldDef def : fieldDefs) { + if (def.getTab() == target && def.isVisible()) { + result.add(def); + } } } + return result; } // ═══════════════════════════════════════════════════════════════════════════ - // FIELD RENDERING + // CONDITIONS (Target tab) // ═══════════════════════════════════════════════════════════════════════════ - @SuppressWarnings({"unchecked", "rawtypes"}) - private int renderField(GuiScrollWindow sw, FieldDef def, int widgetId, int clearId, int y) { - int labelX = 5; - int fieldX = 100; - int fieldW = 60; - - sw.addLabel(new GuiNpcLabel(widgetId, def.getLabel(), labelX, y + 5)); - - switch (def.getType()) { - case FLOAT: { - float fVal = def.getValue() instanceof Number ? ((Number) def.getValue()).floatValue() : 0f; - GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW, 20, String.format("%.2f", fVal)); - tf.setFloatsOnly(); - if (def.hasRange()) tf.setMinMaxDefaultFloat(def.getMin(), def.getMax(), fVal); - if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); - sw.addTextField(tf); - textFieldMap.put(widgetId, def); - break; - } - case INT: { - int iVal = def.getValue() instanceof Number ? ((Number) def.getValue()).intValue() : 0; - GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW, 20, String.valueOf(iVal)); - tf.setIntegersOnly(); - if (def.hasRange()) tf.setMinMaxDefault((int) def.getMin(), (int) def.getMax(), iVal); - if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); - sw.addTextField(tf); - textFieldMap.put(widgetId, def); - break; - } - case STRING: { - String sVal = def.getValue() != null ? def.getValue().toString() : ""; - GuiNpcTextField tf = new GuiNpcTextField(widgetId, this, fontRendererObj, fieldX, y, fieldW + 40, 20, sVal); - if (def.getTooltip() != null) tf.setHoverText(def.getTooltip()); - sw.addTextField(tf); - textFieldMap.put(widgetId, def); - break; - } - case BOOLEAN: { - boolean bVal = def.getValue() instanceof Boolean ? (Boolean) def.getValue() : false; - GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 40, 20, new String[]{"gui.no", "gui.yes"}, bVal ? 1 : 0); - if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); - sw.addButton(btn); - buttonFieldMap.put(widgetId, def); - break; - } - case ENUM: { - Class> enumClass = def.getEnumClass(); - if (enumClass != null) { - Enum[] constants = enumClass.getEnumConstants(); - String[] names = new String[constants.length]; - for (int i = 0; i < constants.length; i++) names[i] = constants[i].toString(); - int selected = def.getValue() instanceof Enum ? ((Enum) def.getValue()).ordinal() : 0; - GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 80, 20, names, selected); - if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); - sw.addButton(btn); - buttonFieldMap.put(widgetId, def); - } - break; - } - case STRING_ENUM: { - String[] values = def.getStringEnumValues(); - if (values != null && values.length > 0) { - String curVal = def.getStringEnumValue(); - int selected = 0; - for (int i = 0; i < values.length; i++) { - if (values[i].equals(curVal)) { selected = i; break; } - } - GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, 80, 20, values, selected); - if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); - sw.addButton(btn); - buttonFieldMap.put(widgetId, def); - } - break; - } - case SUB_GUI: { - String btnText = def.getButtonLabel(); - int btnW = def.hasClearAction() ? 60 : 80; - GuiNpcButton btn = new GuiNpcButton(widgetId, fieldX, y, btnW, 20, btnText); - Integer textColor = def.getButtonTextColor(); - if (textColor != null) btn.setTextColor(textColor); - if (def.getHoverText() != null) btn.setHoverText(def.getHoverText()); - sw.addButton(btn); - buttonFieldMap.put(widgetId, def); - - if (def.hasClearAction()) { - GuiNpcButton clearBtn = new GuiNpcButton(clearId, fieldX + btnW + 5, y, 20, 20, "X"); - sw.addButton(clearBtn); - clearFieldMap.put(clearId, def); - } - break; - } - } - return y + 24; - } - - // ═══════════════════════════════════════════════════════════════════════════ - // CONDITIONS (Target tab special handling) - // ═══════════════════════════════════════════════════════════════════════════ - - private int renderConditions(GuiScrollWindow sw, int y) { - int x = 5; - - sw.addLabel(new GuiNpcLabel(50, "ability.conditions", x, y)); - y += 14; + private int renderConditions(GuiScrollWindow sw, int y, int labelCounter) { + y += 3; + sw.addLabel(new GuiNpcLabel(labelCounter, "ability.conditions", L_LABEL_X, y + 2, 0xFFFF55)); + y += 15; for (int i = 0; i < conditions.size() && i < 3; i++) { Condition cond = conditions.get(i); String condName = getConditionDisplayName(cond); - sw.addButton(new GuiNpcButton(50 + i * 10, x, y, 140, 20, condName)); - sw.addButton(new GuiNpcButton(51 + i * 10, x + 145, y, 40, 20, "gui.edit")); - sw.addButton(new GuiNpcButton(52 + i * 10, x + 190, y, 20, 20, "X")); + sw.addButton(new GuiNpcButton(50 + i * 10, L_LABEL_X, y, 140, 20, condName)); + sw.addButton(new GuiNpcButton(51 + i * 10, L_LABEL_X + 145, y, 40, 20, "gui.edit")); + sw.addButton(new GuiNpcButton(52 + i * 10, L_LABEL_X + 190, y, 20, 20, "X")); y += 22; } if (conditions.size() < 3) { - sw.addButton(new GuiNpcButton(80, x, y, 50, 20, "gui.add")); - y += 24; + sw.addButton(new GuiNpcButton(80, L_LABEL_X, y, 50, 20, "gui.add")); + y += ROW_H; } return y; @@ -334,12 +264,17 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi public void buttonEvent(GuiButton guibutton) { int id = guibutton.id; - // Tab switching + // Tab switching — fixed tabs if (id == 90) { activeTab = TAB_GENERAL; initGui(); return; } if (id == 91) { activeTab = TAB_TYPE; initGui(); return; } if (id == 92) { activeTab = TAB_TARGET; initGui(); return; } if (id == 93) { activeTab = TAB_EFFECTS; initGui(); return; } - if (id == 94) { activeTab = TAB_VISUAL; initGui(); return; } + // Custom tabs (94+) + if (id >= 94 && id < 94 + customTabNames.size()) { + activeTab = 4 + (id - 94); + initGui(); + return; + } if (id == -1000) { close(); return; } // Condition buttons (50-80) @@ -367,9 +302,19 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi return; } - // Clear buttons + // Clear buttons (effects delete or SUB_GUI clear) if (id >= CLEAR_ID_START) { - FieldDef def = clearFieldMap.get(id); + // Check effects list delete first + int[] meta = builder.getEffectWidgetMeta().get(id); + if (meta != null && meta[1] == 3) { + FieldDef def = builder.getClearFieldMap().get(id); + if (def != null && def.getType() == FieldType.EFFECTS_LIST) { + handleEffectButton(def, meta, guibutton); + return; + } + } + // SUB_GUI clear + FieldDef def = builder.getClearFieldMap().get(id); if (def != null && def.hasClearAction()) { def.getClearAction().run(); initGui(); @@ -379,9 +324,16 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi // Declarative field buttons if (id >= DECLARATIVE_ID_START) { - FieldDef def = buttonFieldMap.get(id); + FieldDef def = builder.getButtonFieldMap().get(id); if (def == null) return; + // Effects list buttons (type, amp, add) + int[] meta = builder.getEffectWidgetMeta().get(id); + if (meta != null && def.getType() == FieldType.EFFECTS_LIST) { + handleEffectButton(def, meta, guibutton); + return; + } + switch (def.getType()) { case BOOLEAN: def.setValue(((GuiNpcButton) guibutton).getValue() == 1); @@ -412,16 +364,63 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } } + @SuppressWarnings("unchecked") + private void handleEffectButton(FieldDef def, int[] meta, GuiButton btn) { + List effects = (List) def.getValue(); + if (effects == null) return; + int effectIdx = meta[0]; + int action = meta[1]; + + switch (action) { + case 0: // Type changed + if (effectIdx < effects.size()) { + effects.get(effectIdx).setType(AbilityEffect.EffectType.fromOrdinal(((GuiNpcButton) btn).getValue())); + } + break; + case 2: // Amp changed + if (effectIdx < effects.size()) { + effects.get(effectIdx).setAmplifier(((GuiNpcButton) btn).getValue()); + } + break; + case 3: // Delete + if (effectIdx < effects.size()) { + effects.remove(effectIdx); + initGui(); + } + break; + case 4: // Add + if (effects.size() < 5) { + effects.add(new AbilityEffect(AbilityEffect.EffectType.SLOWNESS, 60, 0)); + initGui(); + } + break; + } + } + // ═══════════════════════════════════════════════════════════════════════════ // TEXT FIELD EVENTS // ═══════════════════════════════════════════════════════════════════════════ @Override + @SuppressWarnings("unchecked") public void unFocused(GuiNpcTextField textField) { int id = textField.id; if (id < DECLARATIVE_ID_START) return; - FieldDef def = textFieldMap.get(id); + // Check effects list duration fields + int[] meta = builder.getEffectWidgetMeta().get(id); + if (meta != null && meta[1] == 1) { + FieldDef def = builder.getTextFieldMap().get(id); + if (def != null && def.getType() == FieldType.EFFECTS_LIST) { + List effects = (List) def.getValue(); + if (effects != null && meta[0] < effects.size()) { + effects.get(meta[0]).setDurationTicks(textField.getInteger()); + } + return; + } + } + + FieldDef def = builder.getTextFieldMap().get(id); if (def == null) return; switch (def.getType()) { @@ -480,10 +479,8 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } protected void applyToAbility() { - // Conditions are the only cached values - write them back ability.getConditions().clear(); for (Condition c : conditions) ability.addCondition(c); - // All other fields write directly to ability via FieldDef lambdas } public void loadAbility(Ability loadedAbility) { @@ -494,8 +491,7 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi this.conditions = new ArrayList<>(ability.getConditions()); this.fieldDefs = ability.getAllFieldDefinitions(); - this.hasTypeFields = hasFieldsForTab(TabTarget.TYPE); - this.hasVisualFields = hasFieldsForTab(TabTarget.VISUAL); + discoverCustomTabs(); initGui(); } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java b/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java index d09bddecf..4ebafd54f 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNpcButton.java @@ -2,6 +2,7 @@ package noppes.npcs.client.gui.util; import kamkeel.npcs.util.TextSplitter; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.RenderHelper; @@ -151,8 +152,23 @@ public class GuiNpcButton extends GuiButton { public void drawButton(Minecraft mc, int mouseX, int mouseY) { if (!this.visible) return; + // Auto-truncate display text if wider than button + String original = this.displayString; + FontRenderer fr = mc.fontRenderer; + if (fr != null) { + int maxTextWidth = this.width - 6; + if (fr.getStringWidth(original) > maxTextWidth) { + String ellipsis = "..."; + int targetWidth = maxTextWidth - fr.getStringWidth(ellipsis); + if (targetWidth > 0) { + this.displayString = fr.trimStringToWidth(original, targetWidth) + ellipsis; + } + } + } // First, draw the button normally using the superclass method. super.drawButton(mc, mouseX, mouseY); + // Restore original display string + this.displayString = original; // Then, if an icon texture is set, draw it. if (iconTexture != null) { mc.getTextureManager().bindTexture(iconTexture); diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index fef02e070..3706e3fc1 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1537,6 +1537,48 @@ ability.target.aggro_target=Target ability.target.self=Self ability.target.aoe_self=AOE Self ability.target.aoe_target=AOE Target +ability.syncWindup=Sync Windup + +# Anchor Point +ability.anchor.front=Front +ability.anchor.center=Center +ability.anchor.rightHand=Right Hand +ability.anchor.leftHand=Left Hand +ability.anchor.aboveHead=Above Head +ability.anchor.chest=Chest + +# Sweep Mode +ability.sweep.swipe=Swipe +ability.sweep.spin=Spin + +# Dash Mode +ability.dash.aggressive=Aggressive +ability.dash.defensive=Defensive + +# Counter Type +ability.counter.flat=Flat +ability.counter.percent=Percent + +# Hazard Shape +ability.shape.circle=Circle +ability.shape.ring=Ring +ability.shape.cone=Cone + +# Placement Mode +ability.placement.atCaster=At Caster +ability.placement.atTarget=At Target +ability.placement.followCaster=Follow Caster +ability.placement.followTarget=Follow Target + +# Teleport Mode +ability.teleport.blink=Blink +ability.teleport.behind=Behind +ability.teleport.single=Single + +# Trap Placement +ability.trapPlace.atCaster=At Caster +ability.trapPlace.atTarget=At Target +ability.trapPlace.aheadOfCaster=Ahead of Caster telegraph.circle=Circle telegraph.ring=Ring @@ -1577,136 +1619,173 @@ ability.cnpc.disc=Disc ability.cnpc.laser_shot=Laser Shot ability.cnpc.sweeper=Sweeper -# Ability GUI - Type Tab +# ═══════════════════════════════════════════════════════════════ +# Ability Config GUI +# ═══════════════════════════════════════════════════════════════ + +# General Tab +ability.weight=Weight +ability.windUpTicks=Wind Up +ability.cooldownTicks=Cooldown +ability.lockMovement=Lock Movement +ability.interruptible=Interruptible +ability.dazedTicks=Dazed Ticks +ability.targetingMode=Targeting + +# Target Tab +ability.minRange=Min Range +ability.maxRange=Max Range +ability.conditions=Conditions + +# Effects Tab +ability.windUpSound=Wind Up Sound +ability.activeSound=Active Sound +ability.windUpAnimation=Wind Up Animation +ability.activeAnimation=Active Animation +ability.showTelegraph=Show Telegraph +ability.windUpColor=Wind Up Color +ability.activeColor=Active Color + +# Section Headers +ability.section.timing=Timing +ability.section.movement=Movement +ability.section.sounds=Sounds +ability.section.animations=Animations +ability.section.telegraph=Telegraph +ability.section.beam=Beam +ability.section.sweep=Sweep +ability.section.push=Push +ability.section.leap=Leap +ability.section.disc=Disc +ability.section.homing=Homing +ability.section.boomerang=Boomerang +ability.section.explosive=Explosive +ability.section.colors=Colors +ability.section.effects=Effects +ability.section.counter=Counter +ability.section.area=Area +ability.section.damage=Damage +ability.section.debuffs=Debuffs +ability.section.healing=Healing +ability.section.trigger=Trigger +ability.section.aoe=AOE +ability.section.pullDamage=Pull Damage + +# Shared Sub-Section Labels (used under section headers) +gui.radius=Radius +gui.thickness=Thickness +gui.rotationSpeed=Rotation Speed +gui.strength=Strength +gui.range=Range +gui.delay=Delay +gui.density=Density +gui.length=Length +gui.width=Width +gui.height=Height +gui.value=Value +gui.chance=Chance +gui.sound=Sound +gui.animation=Animation +gui.duration=Duration +gui.amp=Amp # Common Type Settings ability.radius=Radius ability.knockback=Knockback -ability.knockbackUp=KB Up -ability.maxDist=Max Dist -ability.minDist=Min Dist +ability.knockbackUp=Knockback Up ability.distance=Distance +ability.maxDistance=Max Distance ability.lifetime=Lifetime -ability.stunTicks=Stun -ability.leapHeight=Leap Height +ability.stunTicks=Stun Ticks ability.hitWidth=Hit Width ability.effects=Effects -gui.duration=Duration -gui.amp=Amp +ability.mode=Mode +ability.duration=Duration +ability.anchorPoint=Anchor Point +ability.rotationSpeed=Rotation Speed -# Slam Settings +# Slam ability.leapSpeed=Leap Speed +ability.leapHeight=Leap Height -# Charge Settings -ability.hitRadius=Hit Radius - -# Cutter Settings +# Cutter +ability.range=Range +ability.sweepMode=Sweep Mode +ability.spinDuration=Spin Duration ability.arcAngle=Arc Angle -ability.sweepWaves=Waves -ability.rotSpeed=Rot Speed -ability.piercing=Piercing +ability.innerRadius=Inner Radius -# Orb Settings -ability.homing=Homing -ability.explosive=Explosive +# Projectile +ability.projectileType=Projectile Type -# Vortex Settings -ability.pullRadius=Radius -ability.pullStrength=Strength -ability.pullTo=Pull To -ability.aoe=AOE +# Charge (no unique keys) + +# Dash (no unique keys) + +# Teleport +ability.blinkRadius=Blink Radius +ability.blinkCount=Blink Count +ability.blinkDelay=Blink Delay +ability.behindDistance=Behind Distance +ability.lineOfSight=Line of Sight +ability.damageAtStart=Damage At Start +ability.damageAtEnd=Damage At End + +# Vortex +ability.pullRadius=Pull Radius +ability.pullStrength=Pull Strength ability.maxTargets=Max Targets -# Dash Settings -ability.dash.aggressive=Aggressive -ability.dash.defensive=Defensive -ability.mode=Mode -ability.behindDistance=Behind Dist +# Shockwave +ability.pushStrength=Push Strength -# Teleport Settings -ability.blinkCount=Blinks -ability.blinkDelay=Delay -ability.blinkRadius=Radius -ability.minRadius=Min Rad -ability.dmgRadius=Dmg Radius -ability.lineOfSight=Line Sight -ability.dmgAtStart=Dmg Start +# Guard +ability.damageReduction=Damage Reduction -# Projectile Settings -ability.explRadius=Expl Rad - -# Beam Settings -ability.beamLength=Length -ability.beamWidth=Width -ability.beamHeight=Height -ability.dmgInterval=Interval -ability.sweepAngle=Sweep Ang -ability.sweepSpeed=Sweep Spd -ability.lockTarget=Lock Tgt -ability.rotations=Rotations - -# Guard Settings -ability.dmgReduce=Dmg Reduce -ability.counterDmg=Counter Dmg -ability.canCounter=Counter -ability.counterChance=Counter % -ability.counterType=Counter Type -ability.counterValue=Counter Value -ability.counterSound=Counter Sound -ability.counterAnim=Counter Anim - -# Heal Settings -ability.healAmount=Amount -ability.healPercent=Percent -ability.healRadius=Radius +# Heal +ability.instantHeal=Instant Heal +ability.healAmount=Heal Amount +ability.healPercent=Heal Percent +ability.healRadius=Heal Radius ability.healSelf=Heal Self ability.healAllies=Heal Allies -# Hazard Settings -ability.dmgPerSec=Dmg/Sec -ability.debuffDur=Debuff Dur +# Hazard ability.shape=Shape ability.placement=Placement -ability.affectsCaster=Hit Caster -ability.ignoreInvuln=Ign Invuln -ability.place.caster=At Caster -ability.place.target=At Target -ability.place.followCaster=Follow Caster -ability.place.followTarget=Follow Target -ability.place.ahead=Ahead +ability.damagePerSecond=Damage/Sec +ability.damageInterval=Damage Interval +ability.slownessLevel=Slowness Level +ability.debuffDuration=Debuff Duration +ability.poisonLevel=Poison Level +ability.affectsCaster=Affects Caster -# Trap Settings -ability.triggerRadius=Trig Rad +# Trap ability.armTime=Arm Time -ability.maxTriggers=Max Trig +ability.maxTriggers=Max Triggers +ability.triggerCooldown=Trigger Cooldown -# Disc Settings -ability.discRadius=Disc Rad -ability.discThickness=Thickness -ability.boomerang=Boomerang -ability.boomerangDelay=Return Delay -ability.homingStr=Homing Str -ability.homingRange=Homing Rng -ability.explosionRad=Expl Rad -ability.rotationSpeed=Rot Speed +# Sweeper +ability.sweepSpeed=Sweep Speed +ability.rotations=Rotations +ability.piercing=Piercing +ability.lockTarget=Lock Target + +# Beam / Laser +ability.beamWidth=Beam Width +ability.headSize=Head Size +ability.attachedToOwner=Attached to Owner +ability.laserWidth=Laser Width +ability.expansionSpeed=Expansion Speed +ability.lingerTicks=Linger Ticks + +# Visual Settings ability.innerColor=Inner Color ability.outerColor=Outer Color ability.outerEnabled=Outer Glow ability.outerWidth=Outer Width +ability.outerAlpha=Outer Alpha ability.lightning=Lightning -ability.lightningDensity=Density -ability.lightningRadius=Radius -ability.anchorPoint=Anchor Point -ability.noVisualSettings=No visual settings for this ability type - -# Laser Shot Settings -ability.laserWidth=Laser Width -ability.expansionSpeed=Expansion Spd -ability.lingerTicks=Linger Ticks - -# Energy Beam Settings -ability.headSize=Head Size -ability.attachedToOwner=Attached # Ability Save/Load ability.save.confirm=Save ability preset @@ -1718,25 +1797,9 @@ gui.load=Load # Global Abilities Manager ability.manager.title=Ability Manager -# Explosive Hover Text -ability.explosive.noBlockDamage=Explosions do not destroy blocks - -# Additional Orb Settings -ability.explRadius=Expl Radius - -# Telegraph Colors (for abilities that support separate colors) -ability.windUpColor=Wind Up Color -ability.activeColor=Active Color - -# Shockwave Settings -ability.pushRadius=Push Radius -ability.pushStrength=Push Str -ability.shockwaveFalloff=Damage/knockback drop off with distance - -# Ability Config GUI -ability.typeId=Type ID -ability.conditions=Conditions -ability.noTypeSettings=No type-specific settings +# ═══════════════════════════════════════════════════════════════ +# Ability Hover Tooltips +# ═══════════════════════════════════════════════════════════════ ability.hover.weight=Higher weight = more likely to be chosen when multiple abilities available ability.hover.lockMove=Prevents NPC from moving while ability is charging or active From f6342b23353fd23d9a8fb42d8799674490d9d6a2 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Tue, 3 Feb 2026 01:04:34 +0100 Subject: [PATCH 79/85] Fix integration with bukkit and plugins codewise --- dependencies.gradle | 3 + src/api | 2 +- .../java/kamkeel/npcs/util/BukkitUtil.java | 124 +++++------ .../java/kamkeel/npcs/util/VaultUtil.java | 199 ++++++++---------- .../noppes/npcs/CustomNpcsPermissions.java | 23 +- tools/bukkit-api/Vault-1.4.1.jar | Bin 0 -> 337004 bytes tools/bukkit-api/spigot-api-ONLY.jar | Bin 0 -> 4907652 bytes 7 files changed, 146 insertions(+), 205 deletions(-) create mode 100644 tools/bukkit-api/Vault-1.4.1.jar create mode 100644 tools/bukkit-api/spigot-api-ONLY.jar diff --git a/dependencies.gradle b/dependencies.gradle index a7c959872..cf25adedf 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,6 +38,9 @@ dependencies { runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.5.4-GTNH:dev") runtimeOnlyNonPublishable("curse.maven:Nashorn-374413:2924946") + compileOnly(files("./tools/bukkit-api/spigot-api-ONLY.jar")) + compileOnly(files("./tools/bukkit-api/Vault-1.4.1.jar")) + if(embedMixin){ // Normal Jar will include built in Mixins shadowImplementation("org.spongepowered:mixin:0.7.11-SNAPSHOT"){ diff --git a/src/api b/src/api index 339e0f164..bf650319d 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 339e0f164e8c7b08c3469f61027fa25aa9e5c118 +Subproject commit bf650319da422790bff294d570dd879143fe8d4c diff --git a/src/main/java/kamkeel/npcs/util/BukkitUtil.java b/src/main/java/kamkeel/npcs/util/BukkitUtil.java index 78cd49c82..61b4deff5 100644 --- a/src/main/java/kamkeel/npcs/util/BukkitUtil.java +++ b/src/main/java/kamkeel/npcs/util/BukkitUtil.java @@ -2,8 +2,8 @@ package kamkeel.npcs.util; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - -import java.lang.reflect.Method; +import org.bukkit.Bukkit; +import org.bukkit.plugin.RegisteredServiceProvider; /** * Utility class for Bukkit integration detection and common operations. @@ -15,24 +15,6 @@ public class BukkitUtil { private static boolean initialized = false; private static boolean bukkitEnabled = false; - // Bukkit classes - private static Class bukkitClass; - private static Class serverClass; - private static Class servicesManagerClass; - private static Class registeredServiceProviderClass; - private static Class offlinePlayerClass; - private static Class playerClass; - - // Bukkit methods - private static Method getServer; - private static Method getServicesManager; - private static Method getRegistration; - private static Method getProvider; - private static Method getOfflinePlayer; - private static Method getPlayer; - private static Method getPluginManager; - private static Method isPluginEnabled; - /** * Initializes Bukkit integration using reflection. * Should be called during FMLServerStartedEvent to ensure Bukkit is fully loaded. @@ -44,25 +26,24 @@ public class BukkitUtil { initialized = true; try { - // Load Bukkit classes - bukkitClass = Class.forName("org.bukkit.Bukkit"); - serverClass = Class.forName("org.bukkit.Server"); - servicesManagerClass = Class.forName("org.bukkit.plugin.ServicesManager"); - registeredServiceProviderClass = Class.forName("org.bukkit.plugin.RegisteredServiceProvider"); - offlinePlayerClass = Class.forName("org.bukkit.OfflinePlayer"); - playerClass = Class.forName("org.bukkit.entity.Player"); + // Make sure all necessary bukkit methods and classes are available. + Class bukkitClass = Class.forName("org.bukkit.Bukkit"); + Class.forName("org.bukkit.Server"); + Class servicesManagerClass =Class.forName("org.bukkit.plugin.ServicesManager"); + Class registeredServiceProviderClass = Class.forName("org.bukkit.plugin.RegisteredServiceProvider"); + Class.forName("org.bukkit.OfflinePlayer"); + Class.forName("org.bukkit.entity.Player"); - // Get Bukkit methods - getServer = bukkitClass.getMethod("getServer"); - getServicesManager = bukkitClass.getMethod("getServicesManager"); - getRegistration = servicesManagerClass.getMethod("getRegistration", Class.class); - getProvider = registeredServiceProviderClass.getMethod("getProvider"); - getOfflinePlayer = bukkitClass.getMethod("getOfflinePlayer", String.class); - getPlayer = bukkitClass.getMethod("getPlayer", String.class); - getPluginManager = bukkitClass.getMethod("getPluginManager"); + bukkitClass.getMethod("getServer"); + bukkitClass.getMethod("getServicesManager"); + servicesManagerClass.getMethod("getRegistration", Class.class); + registeredServiceProviderClass.getMethod("getProvider"); + bukkitClass.getMethod("getOfflinePlayer", String.class); + bukkitClass.getMethod("getPlayer", String.class); + bukkitClass.getMethod("getPluginManager"); Class pluginManagerClass = Class.forName("org.bukkit.plugin.PluginManager"); - isPluginEnabled = pluginManagerClass.getMethod("isPluginEnabled", String.class); + pluginManagerClass.getMethod("isPluginEnabled", String.class); bukkitEnabled = true; logger.info("Bukkit integration enabled"); @@ -99,29 +80,44 @@ public class BukkitUtil { * @return true if the plugin is enabled */ public static boolean isPluginEnabled(String pluginName) { - if (!bukkitEnabled) return false; + if (!isEnabled()) return false; try { - Object pluginManager = getPluginManager.invoke(null); - return (Boolean) isPluginEnabled.invoke(pluginManager, pluginName); + return Bukkit.getPluginManager().isPluginEnabled(pluginName); } catch (Exception e) { - logger.error("Error checking if plugin is enabled: " + pluginName, e); + logger.error("Error checking if plugin is enabled: {}", pluginName, e); return false; } } + /** + * @param pluginName name of the plugin to get. + * @return {@linkplain org.bukkit.plugin.Plugin Plugin} object for the name. Cast to correct class manually. + */ + public static Object getPlugin(String pluginName) { + if (!isEnabled()) return null; + + try { + return Bukkit.getPluginManager().getPlugin(pluginName); + } catch (Exception e) { + logger.error("Error getting plugin object: {}", pluginName, e); + return null; + } + } + /** * Gets a Bukkit OfflinePlayer by name. * @param playerName the player name - * @return the OfflinePlayer object, or null if not available + * @return the {@link org.bukkit.OfflinePlayer} object, or null if not available */ + @SuppressWarnings({"deprecation"}) public static Object getOfflinePlayer(String playerName) { - if (!bukkitEnabled) return null; + if (!isEnabled()) return null; try { - return getOfflinePlayer.invoke(null, playerName); + return Bukkit.getOfflinePlayer(playerName); } catch (Exception e) { - logger.error("Error getting OfflinePlayer: " + playerName, e); + logger.error("Error getting OfflinePlayer: {}", playerName, e); return null; } } @@ -129,15 +125,15 @@ public class BukkitUtil { /** * Gets a Bukkit Player by name (online players only). * @param playerName the player name - * @return the Player object, or null if not online or not available + * @return the {@link org.bukkit.entity.Player} object, or null if not online or not available */ public static Object getPlayer(String playerName) { - if (!bukkitEnabled) return null; + if (!isEnabled()) return null; try { - return getPlayer.invoke(null, playerName); + return Bukkit.getPlayer(playerName); } catch (Exception e) { - logger.error("Error getting Player: " + playerName, e); + logger.error("Error getting Player: {}", playerName, e); return null; } } @@ -147,39 +143,17 @@ public class BukkitUtil { * @param serviceClass the service class to get * @return the service provider, or null if not available */ - public static Object getServiceProvider(Class serviceClass) { - if (!bukkitEnabled) return null; + public static T getServiceProvider(Class serviceClass) { + if (!isEnabled()) return null; try { - Object servicesManager = getServicesManager.invoke(null); - Object registration = getRegistration.invoke(servicesManager, serviceClass); + RegisteredServiceProvider registration = Bukkit.getServicesManager().getRegistration(serviceClass); if (registration != null) { - return getProvider.invoke(registration); + return registration.getProvider(); } } catch (Exception e) { - logger.error("Error getting service provider: " + serviceClass.getName(), e); + logger.error("Error getting service provider: {}", serviceClass.getName(), e); } return null; } - - // Getters for classes (for use by other utils like VaultUtil) - public static Class getBukkitClass() { - return bukkitClass; - } - - public static Class getServicesManagerClass() { - return servicesManagerClass; - } - - public static Class getRegisteredServiceProviderClass() { - return registeredServiceProviderClass; - } - - public static Class getOfflinePlayerClass() { - return offlinePlayerClass; - } - - public static Class getPlayerClass() { - return playerClass; - } } diff --git a/src/main/java/kamkeel/npcs/util/VaultUtil.java b/src/main/java/kamkeel/npcs/util/VaultUtil.java index c7ef92e97..4db7e4693 100644 --- a/src/main/java/kamkeel/npcs/util/VaultUtil.java +++ b/src/main/java/kamkeel/npcs/util/VaultUtil.java @@ -1,8 +1,14 @@ package kamkeel.npcs.util; +import net.milkbowl.vault.economy.Economy; +import net.milkbowl.vault.economy.EconomyResponse; import net.minecraft.entity.player.EntityPlayer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.RegisteredServiceProvider; import java.lang.reflect.Method; @@ -16,41 +22,43 @@ public class VaultUtil { private static boolean initialized = false; private static boolean vaultEnabled = false; +// +// // Vault classes +// private static Class economyClass; +// private static Class economyResponseClass; +// +// // Economy methods +// private static Method isEnabled; +// private static Method getName; +// private static Method hasAccount; +// private static Method hasAccountOffline; +// private static Method getBalance; +// private static Method getBalanceOffline; +// private static Method has; +// private static Method hasOffline; +// private static Method withdrawPlayer; +// private static Method withdrawPlayerOffline; +// private static Method depositPlayer; +// private static Method depositPlayerOffline; +// private static Method format; +// private static Method currencyNamePlural; +// private static Method currencyNameSingular; +// private static Method createPlayerAccount; +// private static Method createPlayerAccountOffline; +// private static Method hasBankSupport; +// private static Method getBanks; +// private static Method bankBalance; +// private static Method bankHas; +// private static Method bankWithdraw; +// private static Method bankDeposit; +// +// // EconomyResponse methods +// private static Method transactionSuccess; +// +// // Cached economy instance +// private static Object economyInstance; - // Vault classes - private static Class economyClass; - private static Class economyResponseClass; - - // Economy methods - private static Method isEnabled; - private static Method getName; - private static Method hasAccount; - private static Method hasAccountOffline; - private static Method getBalance; - private static Method getBalanceOffline; - private static Method has; - private static Method hasOffline; - private static Method withdrawPlayer; - private static Method withdrawPlayerOffline; - private static Method depositPlayer; - private static Method depositPlayerOffline; - private static Method format; - private static Method currencyNamePlural; - private static Method currencyNameSingular; - private static Method createPlayerAccount; - private static Method createPlayerAccountOffline; - private static Method hasBankSupport; - private static Method getBanks; - private static Method bankBalance; - private static Method bankHas; - private static Method bankWithdraw; - private static Method bankDeposit; - - // EconomyResponse methods - private static Method transactionSuccess; - - // Cached economy instance - private static Object economyInstance; + private static Economy economyInstance; /** * Initializes the Vault integration using reflection. @@ -68,47 +76,9 @@ public class VaultUtil { } try { - Class offlinePlayerClass = BukkitUtil.getOfflinePlayerClass(); - if (offlinePlayerClass == null) { - logger.error("Could not get OfflinePlayer class from BukkitUtil"); - return; - } - - // Load Vault classes - economyClass = Class.forName("net.milkbowl.vault.economy.Economy"); - economyResponseClass = Class.forName("net.milkbowl.vault.economy.EconomyResponse"); - - // Get Economy methods (using deprecated String methods for broader compatibility) - isEnabled = economyClass.getMethod("isEnabled"); - getName = economyClass.getMethod("getName"); - hasAccount = economyClass.getMethod("hasAccount", String.class); - hasAccountOffline = economyClass.getMethod("hasAccount", offlinePlayerClass); - getBalance = economyClass.getMethod("getBalance", String.class); - getBalanceOffline = economyClass.getMethod("getBalance", offlinePlayerClass); - has = economyClass.getMethod("has", String.class, double.class); - hasOffline = economyClass.getMethod("has", offlinePlayerClass, double.class); - withdrawPlayer = economyClass.getMethod("withdrawPlayer", String.class, double.class); - withdrawPlayerOffline = economyClass.getMethod("withdrawPlayer", offlinePlayerClass, double.class); - depositPlayer = economyClass.getMethod("depositPlayer", String.class, double.class); - depositPlayerOffline = economyClass.getMethod("depositPlayer", offlinePlayerClass, double.class); - format = economyClass.getMethod("format", double.class); - currencyNamePlural = economyClass.getMethod("currencyNamePlural"); - currencyNameSingular = economyClass.getMethod("currencyNameSingular"); - createPlayerAccount = economyClass.getMethod("createPlayerAccount", String.class); - createPlayerAccountOffline = economyClass.getMethod("createPlayerAccount", offlinePlayerClass); - hasBankSupport = economyClass.getMethod("hasBankSupport"); - getBanks = economyClass.getMethod("getBanks"); - bankBalance = economyClass.getMethod("bankBalance", String.class); - bankHas = economyClass.getMethod("bankHas", String.class, double.class); - bankWithdraw = economyClass.getMethod("bankWithdraw", String.class, double.class); - bankDeposit = economyClass.getMethod("bankDeposit", String.class, double.class); - - // Get EconomyResponse methods - transactionSuccess = economyResponseClass.getMethod("transactionSuccess"); - // Get the economy instance - economyInstance = BukkitUtil.getServiceProvider(economyClass); - + RegisteredServiceProvider economyRegistration = Bukkit.getServicesManager().getRegistration(Economy.class); + economyInstance = economyRegistration.getProvider(); if (economyInstance != null) { vaultEnabled = true; logger.info("Vault Economy integration enabled - Provider: " + getEconomyName()); @@ -116,10 +86,6 @@ public class VaultUtil { logger.info("Vault found but no Economy provider registered"); } - } catch (ClassNotFoundException e) { - logger.debug("Vault not found, economy integration disabled"); - } catch (NoSuchMethodException e) { - logger.error("Vault API method not found, economy integration disabled", e); } catch (Exception e) { logger.error("Error initializing Vault integration", e); } @@ -134,7 +100,8 @@ public class VaultUtil { } try { - economyInstance = BukkitUtil.getServiceProvider(economyClass); + RegisteredServiceProvider economyRegistration = Bukkit.getServicesManager().getRegistration(Economy.class); + economyInstance = economyRegistration.getProvider(); if (economyInstance != null) { vaultEnabled = true; logger.info("Vault Economy provider refreshed: " + getEconomyName()); @@ -151,7 +118,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - return (Boolean) isEnabled.invoke(economyInstance); + return economyInstance.isEnabled(); } catch (Exception e) { logger.error("Error checking if economy is enabled", e); return false; @@ -165,7 +132,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return null; try { - return (String) getName.invoke(economyInstance); + return economyInstance.getName(); } catch (Exception e) { logger.error("Error getting economy name", e); return null; @@ -190,11 +157,11 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); if (offlinePlayer != null) { - return (Boolean) hasAccountOffline.invoke(economyInstance, offlinePlayer); + return economyInstance.hasAccount(offlinePlayer); } - return (Boolean) hasAccount.invoke(economyInstance, playerName); + return economyInstance.hasAccount(playerName); } catch (Exception e) { logger.error("Error checking if player has account: " + playerName, e); return false; @@ -219,11 +186,11 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return 0; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); if (offlinePlayer != null) { - return (Double) getBalanceOffline.invoke(economyInstance, offlinePlayer); + return economyInstance.getBalance(offlinePlayer); } - return (Double) getBalance.invoke(economyInstance, playerName); + return economyInstance.getBalance(playerName); } catch (Exception e) { logger.error("Error getting balance for player: " + playerName, e); return 0; @@ -250,11 +217,11 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); if (offlinePlayer != null) { - return (Boolean) hasOffline.invoke(economyInstance, offlinePlayer, amount); + return economyInstance.has(offlinePlayer, amount); } - return (Boolean) has.invoke(economyInstance, playerName, amount); + return economyInstance.has(playerName, amount); } catch (Exception e) { logger.error("Error checking if player has amount: " + playerName, e); return false; @@ -281,14 +248,14 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); - Object response; + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); + EconomyResponse response; if (offlinePlayer != null) { - response = withdrawPlayerOffline.invoke(economyInstance, offlinePlayer, amount); + response = economyInstance.withdrawPlayer(offlinePlayer, amount); } else { - response = withdrawPlayer.invoke(economyInstance, playerName, amount); + response = economyInstance.withdrawPlayer(playerName, amount); } - return (Boolean) transactionSuccess.invoke(response); + return response.transactionSuccess(); } catch (Exception e) { logger.error("Error withdrawing money from player: " + playerName, e); return false; @@ -315,14 +282,14 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); - Object response; + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); + EconomyResponse response; if (offlinePlayer != null) { - response = depositPlayerOffline.invoke(economyInstance, offlinePlayer, amount); + response = economyInstance.depositPlayer(offlinePlayer, amount); } else { - response = depositPlayer.invoke(economyInstance, playerName, amount); + response = economyInstance.depositPlayer(playerName, amount); } - return (Boolean) transactionSuccess.invoke(response); + return response.transactionSuccess(); } catch (Exception e) { logger.error("Error adding money to player: " + playerName, e); return false; @@ -371,7 +338,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return String.valueOf(amount); try { - return (String) format.invoke(economyInstance, amount); + return economyInstance.format(amount); } catch (Exception e) { logger.error("Error formatting amount", e); return String.valueOf(amount); @@ -386,7 +353,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return "coins"; try { - return (String) currencyNamePlural.invoke(economyInstance); + return economyInstance.currencyNamePlural(); } catch (Exception e) { logger.error("Error getting currency name plural", e); return "coins"; @@ -401,7 +368,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return "coin"; try { - return (String) currencyNameSingular.invoke(economyInstance); + return economyInstance.currencyNameSingular(); } catch (Exception e) { logger.error("Error getting currency name singular", e); return "coin"; @@ -428,11 +395,11 @@ public class VaultUtil { if (hasAccount(playerName)) return true; try { - Object offlinePlayer = BukkitUtil.getOfflinePlayer(playerName); + OfflinePlayer offlinePlayer = (OfflinePlayer) BukkitUtil.getOfflinePlayer(playerName); if (offlinePlayer != null) { - return (Boolean) createPlayerAccountOffline.invoke(economyInstance, offlinePlayer); + return economyInstance.createPlayerAccount(offlinePlayer); } - return (Boolean) createPlayerAccount.invoke(economyInstance, playerName); + return economyInstance.createPlayerAccount(playerName); } catch (Exception e) { logger.error("Error creating account for player: " + playerName, e); return false; @@ -446,7 +413,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - return (Boolean) hasBankSupport.invoke(economyInstance); + return economyInstance.hasBankSupport(); } catch (Exception e) { logger.error("Error checking bank support", e); return false; @@ -462,7 +429,7 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return java.util.Collections.emptyList(); try { - return (java.util.List) getBanks.invoke(economyInstance); + return economyInstance.getBanks(); } catch (Exception e) { logger.error("Error getting banks", e); return java.util.Collections.emptyList(); @@ -478,8 +445,8 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return 0; try { - Object response = bankBalance.invoke(economyInstance, bankName); - return economyResponseClass.getField("balance").getDouble(response); + EconomyResponse response = economyInstance.bankBalance(bankName); + return response.balance; } catch (Exception e) { logger.error("Error getting bank balance: " + bankName, e); return 0; @@ -496,8 +463,8 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object response = bankHas.invoke(economyInstance, bankName, amount); - return (Boolean) transactionSuccess.invoke(response); + EconomyResponse response = economyInstance.bankHas(bankName, amount); + return response.transactionSuccess(); } catch (Exception e) { logger.error("Error checking bank balance: " + bankName, e); return false; @@ -514,8 +481,8 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object response = bankWithdraw.invoke(economyInstance, bankName, amount); - return (Boolean) transactionSuccess.invoke(response); + EconomyResponse response = economyInstance.bankWithdraw(bankName, amount); + return response.transactionSuccess(); } catch (Exception e) { logger.error("Error withdrawing from bank: " + bankName, e); return false; @@ -532,8 +499,8 @@ public class VaultUtil { if (!vaultEnabled || economyInstance == null) return false; try { - Object response = bankDeposit.invoke(economyInstance, bankName, amount); - return (Boolean) transactionSuccess.invoke(response); + EconomyResponse response = economyInstance.bankDeposit(bankName, amount); + return response.transactionSuccess(); } catch (Exception e) { logger.error("Error depositing to bank: " + bankName, e); return false; diff --git a/src/main/java/noppes/npcs/CustomNpcsPermissions.java b/src/main/java/noppes/npcs/CustomNpcsPermissions.java index c83e92c22..119f3e42e 100644 --- a/src/main/java/noppes/npcs/CustomNpcsPermissions.java +++ b/src/main/java/noppes/npcs/CustomNpcsPermissions.java @@ -7,6 +7,7 @@ import kamkeel.npcs.util.BukkitUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import org.apache.logging.log4j.LogManager; +import org.bukkit.entity.Player; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -111,7 +112,7 @@ public class CustomNpcsPermissions { public static final Permission PROFILE_MAX = new Permission("customnpcs.profile.max.*"); public static CustomNpcsPermissions Instance; - private Method hasPermission; + private static boolean isEnabled; public CustomNpcsPermissions() { Instance = this; @@ -127,16 +128,16 @@ public class CustomNpcsPermissions { } try { - hasPermission = BukkitUtil.getPlayerClass().getMethod("hasPermission", String.class); + Class.forName("org.bukkit.entity.Player").getMethod("hasPermission", String.class); + isEnabled = true; + LogManager.getLogger(CustomNpcs.class).info("Bukkit permissions enabled"); LogManager.getLogger(CustomNpcs.class).info("Permissions available:"); Collections.sort(Permission.permissions, String.CASE_INSENSITIVE_ORDER); for (String p : Permission.permissions) { LogManager.getLogger(CustomNpcs.class).info(p); } - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (SecurityException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -170,17 +171,13 @@ public class CustomNpcsPermissions { } private boolean bukkitPermission(String username, String permission) { - if (hasPermission == null) return false; + if (!BukkitUtil.isEnabled() || !isEnabled) return false; try { Object player = BukkitUtil.getPlayer(username); if (player == null) return false; - return (Boolean) hasPermission.invoke(player, permission); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { + return ((Player) player).hasPermission(permission); + } catch (Exception e) { e.printStackTrace(); } return false; @@ -205,6 +202,6 @@ public class CustomNpcsPermissions { } public static boolean enabled() { - return BukkitUtil.isEnabled(); + return BukkitUtil.isEnabled() && isEnabled; } } diff --git a/tools/bukkit-api/Vault-1.4.1.jar b/tools/bukkit-api/Vault-1.4.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..d4d4ecc7625670b29d5dc98b4129fe3f3e16edf3 GIT binary patch literal 337004 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 z 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 L!Qo^e3$_s)rTSKJ+O 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�W-4+ivPMJz&!NG9pXv3&OsiNbqG4h&x z=_K1r58@UA2xJe8z0OBW9D%a=Cc{{bw>wg3 zK8ZFR>;W2WKRWMrzf$eEVHa^KxLW_1X!pRvU?p7naXwCV_rmg>NFUj{o{>Hxoh>P6 zN?O8nT5!5Ls>CD)FO3(Mm517*C{md_HxDmA)N`%QI*Tb?>3!R%#>^h^_VT_3^>Q3Q zc+DFv;bT10i;9RHPPshGfbysl;7h*d4(FFwswrd_mx1dRYxr&RcOm+XXZ9X$fc*OW zWue&A2KYpDgEIwdzgZgs@(tKdpn`{6Mr`{n`*j$X@fk5A>V>d~*!A0Q7dtew1^$xq zsyvU%!xauYI9u?y5*&64(&g`K#=~TX>zjOudAXJRAc=hh-#PSV;C3g_5(=~5Hzg=T1rP|0AoGUf@;-Lj&D>XYjh{JL{KNQFz|M4AU7iyIA z#Bp3)cHi?FhsWPWaN2E;g48JYbox8ogmwJX%0he3MOsbjJKrHw^e8aeaUt_&-68AL z`!K~)zoCe7BosK8hO?}ND{{<8FxDZ$W@!zG6eN)1+zs{s3Byo>$f-N)mVDcC5YH~0 zBgeD-Ucg1)=sCz}sZHcWI0XxIuBTG=}f3uCeV|8yqsYw#6c# z&6p*FCYfkuop>dKqM3N+2Sz$~G>M6~Sijf4=&a-!9toeFxC#w42PeAg*0tn5K(N2U zqPyn@`tdNJx59~ZUrk$h&#Iz7ApU9CjdR`d>fg=!?!W%*>Hei*E9tu!%l!xaQ04!e zlfn~Aix+EyW6^FIzyRXo$u%oL<-?WBfXd5$mHkN=J*B5l>rG=C(VOMlk-~q-OM1=a zePepZq)lm?mKM(wFm7emIREFK)b{%Rl8Nu@^8?|B$!>`qO_V}Ma^HC;Mz1zBD$8_9 zZEUf-0-SB(Eom}iOY|Y^R$n-ljhP!)0B=V^p9L1%tqt@d^HObgpD6U7IX8rB%Tn`} z$r&cw_GWFPlPNh{M&jho;9n;-Yt`xq8P2=gN6sO{qKize4Wr&#ms)*+8+9PT28;Jq z4m=y{4aTbv=`vTWV{rB{A9tRcGmmkVv%RS#`S%ses(UV@Ifq99KUbF?Hy8QL$Pf_GQw6PuNEllqS5?oTVpLJ1kP zUrm`|+c00d><;4%@A*Z}e+U`xc8Qn@nf^3xkx$sz(As}ffMfCMiH+-!wSU6RD|a~N zs~8LOs&M&9;TAt!J5Lo-ypqy<432fO=4sh{=z#f((*5E)m~*YHK`ecmj{aKQqA$kG zHJBXF_;U!9IP+E;*KoxEL(5*})L;AOJIL;_8#&M1PhU>n0cN4{4c3-|r+s_cB2`)v zXH7sHGVc1yoIN_e`Lp^k*|T!LDJT1x6BDO2vlHZoA%}YSVDSGd# zYD4n(tSeGi>)~B%Paln&)2%oWKro$E}nVWT!oFqI`Pk~<_czZ&Q51TP0x`Yi|?|+GA~`iy^?6A8!`?5 zFe3>_Yv@|D3YE1H(ORX5c`FwJvgY&sk556^pdZh{A9;q%y~15soMxdhs4yKSNP(bB&McC{X;$FqLuJio^1g%9;0fg}GV z+JGK#JFo&ZhgQwqqy}r1M5IK~1kxzH2Ucte90zqx{U!Yi00ou{CR?T3qYUZ>Qv$@R1=)0M}ZU!7<0;xUnS8wq|#!JB!Zp9=x5etpq+CIykNUj#Ee@q z?qd|#A~okj{T5!9tch1yf!M*45#gv|dG>Z4RPRsT73hfh2B4k6V4`RhH45E4`f1(ijA<)_~&}`@+`XuVxa z5>+SdrCS*QNu@)jy|%tMHD@(4EyF-@F&k!MzFHEjsbnEMCLGYJL}m zmsl2;EX{^JaPVmS@$y~L(N;F{k#)^1q792)(t5rILcn`Db+Zl(toBxd3sd33xYA}k zXPoh=YEifR8Y*9?mrhHQ7smtcpJuzaLd#dQN!s^xtlI&SC~_~~O#M#g30@++Pd27CsL z9+4F|%j`p^44Co8HK*%$@dfHvdP{aWt9iCU#12D`oR%wKc5Z3v>I7KIb!M zdlakAi(L%x&xmjWo<-xjlk?c}v7Vl^*8P6HvI|Kr?NnalzYd!{*?^jm zEtu@!5?OFXVM%Y>Xt!M!%<3?3jeucMy=as=y;~lICJ{tD5+`F{Fw@gN)+lH5AjPcF z2j@r*(64}I~f6CUQL%rfM$NEDxwRyWGbcnV? zZuNcV)^7PN+VofrkVCZOWSQsvH63UQ*vNbOk-#Ju*YSc;7DBIi!t|!ap6~$&rAPzI z-TMo{03s{aKY7+9yT>SZy-J%PI}Cq{%;27Tay|^AmhqN3hw21#5=RjTlcs>`gUGa- z`>R2zABR*;v|#NLzMH7C2zTaJ9pna%zz=Y!^e`aUS$7P4WW!^~J!qgZ`2|{m$I&ja z8y`YZ)Eh3)YC%j>2Joy;n62S<46^)ceE_ms%*a~qJ+X#%+zf%ZhEi&@czX=>;gj$Z z?BG!8FUr92jSoS_hGy=yFJ1^mAX^-AQ+-&7p8t=>h{=5Lc<9!Z& zs|}am(&YbLZTL5Cvy#61|CA(EHyx2xP`<1iPK!qc35tq6xd!iv$)`N6Fq_m-yq6|JR{y!T;hu1mLwRIW0<|m83f3{g)#yGp!mdDW=okOG;%NUC%0(q zKJnjjXXt|kq%8`LHaRzN+F6vDjY~kq%WgA_4c#J0t~@*K1C%EltZmxb;j%ag2T7VK zL`>8qmKXaNjFtAI`^yt$48lBC=A(Kh>*L28PXj8i8bqCw5FItr^2@Nb0#m{qIDPCHWz8;73fLw3JTT!p*6qMeCT~bqzDF+7n_aVSw&qhiXb@i zp2c+VE0J+psSe)frkey?N2o9#waAWT?Uj}D_D?DYJfgq^3QVeG4zp4k_{o-lqyK#I z@(~|wtbw{4XS*AJ(}g{uw4f)c{7eB37uS{lRaUz14~;Ec>>!P?odnQQ3ktymyDo1b zkDS~Ce%zyg@}}Wn!5!a;QIOKn+Ixyrf1u?Q^e$^}2!aZj4F9>+9~u6afhg}%Ivl4E z#VdDD$cs3St2SXS)m+o2d_t+%6a$*JtR<4l$oY@XqlMA*3xx1s#Y)+ZA!^P}dEn%< zOGFu^9Iz~-5*zFisIAw)d8+;mB@Q&a$GMN)(`!dpTh>S2)9D)UPHZ^Nh&^(=FxjhM(+z8>khc4hs&N2OAt z;WF&gp~j!}&Uz1VRf3E480(=f9O>!+^gNp20?`X404hYNHy~8hXK7_Zt{1> z?;-mW)AB`Sn5hY3SN#?yrQH%7Vspko*=lxrC6^`8^R0xCcuA3(S@^r zIOm~P%!nzn(EBqt&q$|0t@ijiCE+wDTnLbIg+!l2jJNHXS_z$)fYeLLj{HGFuce*CpZ@e$S+32OQ z`CF$cn0rDz>iqz|UK|&=a(L7&$VzZ5xIQR*h2R?Ec)y*WQdvzPQO$KhRUKS}?fa1( zOHt~n?y22%`o9=E#~{hVEnRnYS5=p7+qP{Z%eHOXwr$($vTfT{UAAt`IWsrnPRu!T zBXVc#ojd=mjGghl-&*f_79-gSTFE^>un_sBOl2=i<)EaPKHRz84{|J$A=!v8sZgt! z(pCW>FPVE!{sT|(`;9-!5R?%)*96{0^ZrBl`DYfDgwj)_Z~Osrbz=oP3Gcqw>!n2c zO<7#QBl{+<=rw#Iyy6|XLi4b3%C!Zok8t9runm>&IfubeKW&Z%QQxD&(hNZwinqaVKu1;d#)Osh5o#How7=M@!vYI@gQtx+ zU~$8NTm!oY?OG5V;_r&MRk=%T^zK~|++yb1fwYaE;gYo90fmSX~)nGPf~_-Wqhn{uZxBlXH$g!dp)=jsdUb5-*`f(z{QDu zb=6$FnkKuq|G}PRG65jD;Ka0>>2G?6hsuQAkIfXt^*14!{igNB^fYIw0RRJVLre}N84o$D*+Nx=qeKj89(>UhZ9dGl)OXv;$FpD z35BQVYtn85PY0~V4RFVeWf0o?9Sw&Cj#8~t%u1+-Z-S3IiXGDQAD9!7-0-PrYWM1# zGaAaM1gS5rSIczGJnH1tZU<*#$?3}}p}bwb^cerjpyaLoZqf_>I25iZ?K(0ht<%9u zvl5H2cYBlC%_os=NtmHfRfTg;ScWH#K4L96EDcqx>o#RmY2`za$!IasWF&7T{-!JA-~dpH@8 ztj~8#-Q3)o4o)|y%8(&lOwwR<95uW)cbZALoQRxQ(|z%Sk{H}Jim|n|m4U;-yn6Gu z@^z38rcV=`f}3FNc5e*=Q=e#>3&(oa!o6HcEv%^E7)YX!VA1hzMDY7Dd}#23ys1g2 z8MS3f-?TIM&qPN6K_JCv(5ysNwhnNIZO3sVw95f@VrQU2qWptcqcf7x@a|Jqd50qw za}z53h6m80NnVV;w&^DsiqJIvA8RD!eN|QeIYp-;%yX}%eK7LUr)90%9AD+*b=51_ zx8d4S9yl1T5+Mne3cYPK6dPsPKAjqB`Qh3|ZAgo01JM=KaxCFRyNLp%;`>s^mP&2T zFr@`eR%YjqgB5%B;;cbv`yg9gtVIZ%;Tv1L%BX%aem@3|G(J-hgXFU$h#U<_0albk zTLjpkUrn;QlZiJJW|dL;O-xz|tk{B+;#jE+VVd1rYi-6-!g9J;S#%^z=fwf4JWbA7 zSWl=zC!B*`Yrp+~U78oxkAKTgIV6yg$ntX@v2;!A(*`wbW+m3~HjYsMnS)Gn|r;YdYDJn^sEk|qBIu+?) z@RvFCzEH+FDvy`_bIa{pQi`|`y?>DG2ei-y_B$kWQC+i#Xfsaocn}Wr>OC_ z*Mw<>eW?6n{3B;#hb<~GZ+nvRh0zAk#qm7}0GN=rKw%K*^9z-|s*J64&sx?_R=a8s zPA7{Z@D>(OaiW4+*4<;EV%Wc3TTCRi?I|`}!=-S1(mUMU#M0;uRo6ZvZMhu8BK8u0 z1zawE-mu~d&w6FV8Z8a6z1tG0cgMJ5zh>a(*66IY31Z339jqbiQ1sqinW)B?@}pq} z-6wQbW%mcmF5a0P>mA#H9_pk=j!?)PFh}A97f0gl$;i7G*(#GwJ{Q!CsC_wGWpU6u zE3KneDFc8vIJl(tCer1P5g(AvEZjQ3P5r|^dWpq=!sWcaGg1`r|8CpK_`l`MZS`EN zZEeh~{~O*+`NKz11^p|VWU@<~wsxy|<_9L~ifKlyF`bpx`r<6Ah$sX$dM(3Ir#Q_i zHS5!mhfS`qe5Ps3X(r;f^0u5~R(L{JY;vBHLp!_A4eT839XqSp$eJ7p?&NWTL-t+f z@rUQM!(U$O&Mq)r)^EV9BN*(?9l-)#l_J5M=Tzv708`G6pz@zUur8nkHgtc#%pZ(_ zO|?P?FYh2cE6`xQH=8GCoW};Z-7e9T?a*X9NF_3msSx;)Wgy=b0bSGLzT4t9aS{cbQMp@Y@JC0$|%i5d__Yd&Jp;E`qJT zSK!axzPNP2ua1f?Z|I(v*rI6f0m>of2F0$OBP!5(pO#Qnw%Kd-wq^{hv_9qY)a?TCu{50N{!pwIk9o?9!K1= zSO#mG#stV`yOOgMH+Rb#lUdlGj00TMr<%@87B}DkS$7W-}|b z=qB`Re2wdDOT>AH<0m#kIIFK$I6&3t_)W`H3n|DL3HFuHjn|TwwMFMs5GOXVhm+K*bE$n3Mm8C0`uxj@SO8e(_Sg&nf;&^9JYLJ?bk;cTBdJQ^TH>hqp^$4Dv3}M{5_R*MF-HjpP_0F`e+mkf&|{vS3}(C&kkO*$BN(`u??S3q&al;vd0`u-O^@+@afCm=M?2J@Sz=d&9Q~| ztav!OnW5QiS9V==)|QMqtl?PWLh-X&f=pk#?`O5RE9Uac7B2C7m|{dL&CWE!R&Ph< z2kMz%2sU%Y1DRuzB%9(~xtV%({2Wq)F51tnglm=eD2TSPZSxm`Pd-xji>kFXtTr5Wiotqh$0KfhG1UJ{!q`x zRYDrEph5Xh#lxp>`m{x-ab0?POY6@z zY)*4`Lc(E=6Ylttxl)cM+4%;<>L+K!yI#)55hpj(q`8*nnn-U`(@?^^Fc=TMao133 zz*euV$7IMg+VYMGOCe{c5tf{Tp_jwkhp51bXpyDlWTBGDX)!?mZ+F1~x2>Wt ztK#bQO+khG!Uxe)pvpOZ_P~s}xb5oAoX{WZY6dp8JcWy3VX$j#3=+w6#3pBt6#RQ# za|Owc3WA06pXS=qvZmUf$)}0HF*6An@-O`~aseDW50%XrLl!9|QI>-Z$w|z~6LW@W zg>bl|hY&PhkEq7zb_PYaW*04_2co(j`LZG11 zY5l}tp>uCj?+}XdP^4h{-A0N89TL8xdSi>7G1UJ+-6s{nHjj{*Hf(I~-U6HS=WkxD zE1pK{tcY4(UJyi!($)}pod8H!{tRlZ7Yt*a@E0-H;Nst+=U;k0Y_=W^yL|9Z$aVb< z!>Cq^5zgvVt2P=8cc2{Mp(B9Tp%D!*fYP+fs!v+9DMHFg1%XuQj_5lS5(evB+-88& zia-%nrG6V8xp@g zir(EE*U+Gu>7|{9N^sbQ$(4R*U0-Sa*h9Jj?EyLu@HZ~DtYHkx;#3>~-gm~?Lt_V~*u|&R48G}%=xK3kwDL||x?jLO~0ej$11~T?0SVF8)A@1-GU<(;y zI*DxOI>73>-IDa$Z}1C)!baR)Ifv`*6S(UYQ8r-yKlni6KrxVPQd~fec4@u^thLGX zkMPk1wFP5@A1K*TrLC|J@qT^1rU}|G@^4v($4lvi~n?$UjLTU8-)LiHBKV zpGWSb39Jc*3^okEzzo{#;qv(d5`LhBVqpk{`SVlCkR;GCq=hjevNu*(l{Ib-eh+p+ zHs?0AYDS)>Ai{CIQ0};V~dWTp|qWdFbS^(nRdU)eC4?slCLoIa5p3RlI@r?r+>E+?v->^E8+H3>?>DHnLILjU zHR1b8h|jQWcpU^S>OS&20Q)uV>_hXxJ1_m~dM}0N9ir!v;A-%J=NbqhzTEM-GM;ws)A45X%(9B(cc zVn>*JX@`jnt~oWEb!;;M9Aw|BS*^X6`d<$7ZL++cZK$P4}fDx&UM7o zYN6&qV{T;0C#J^ZhEYe^@uU)&Mav>CuUCTJ$QvQVQ%{DTj$UK`6v_CWhmEZH1CT3s z4-{Zyy*%orG_j~N2d>`$ajJE}B!E;ePR+)k4yBI=@K&`U4X)&H*$-Cgh5ni}>4R5< zn|GryRa&#wyGIqWWW9(%`BgT`<~ZQdb{FING8(G_di>^6b{dq+wZc*xvEtQj#%i6^ zm`jWd6)zo`^$PB`5G>>((+5w6grmVEm1xp!Wz`+%!E~?niJxDgnuLf+h}L1VC~avmkbsxupNc=Ho* z8i{rx-7FCilN9@JXD+su&5J<0#_G4@Yw)l6=K1oJvvrHAXPLN%b zpK`od*RI~ET(;VUZQp0!Fdiy!&Afb4dihip+3@iyD{G9|s+eVqQ$yO7U_zNLi4+2;_=L%5`GM z9|n68X@sd(xFf<4^Kq&y^ErRR2MD~<3^{BhfbZ|4gTYM*$DOM}sn+{*xHr}Le#+26 zF%8sm;v5jXSo-V@{Z*wXQMP1=8;n4$p*xgv>ZQ_{8wAp_9(+{ z&Kjt|=2}4=KO(HN9xBnEw<{+I7;>1@*;tu`%OQYDJlED8!%(vr;Yc|B5KyFvXDMog zF4nAc$2>$(q*0nAF=L(et18wcv6{ds)}+aRUezB%p3`GE)FubZqH&gPlh`sCSuD0p zun2W19xz2cO>E^@HIndO5U*WN#96f#n=`at(PQwUQ<-ETrbbtMJ>cjY3WbcU7)$N> zoO73u+TsL@GOiR=sYdiH<*1D3aE0?%b)zJ|s>*;<45HDsD$O84MlU(A$JEwna zc^VHG_ns-Tmd8skb``jj>%*8&-k;}Fy{aJZPe>(tp6WO$XHiLNF3a+1ZYLBoRz{N> zX3q7M{~i1 zGv|w5h7>>&De=f0D7^{}=L=l^=+af8nhG0KRJTq49bRq>fnOxWCaiT8>Et9mHy1jf z@n8`>DEzXr_UgzpTkvyzMtDa=-_+>g^=6Fx!ZZ!;jnG<8sU>>bLe{~;^h`n{NdNRi z(6@P#q@BbDhq6aQv{rb23vS#-C8)u@u(iT!+Fl-8#k7nqRldraO$&b@OGAmf5Vp0P znbN$Fv}XM1Qat{q2(d$CQ#(oTJf3?U9IOI>aHg8Z%iXhZaWT&c2TxN{cBMJ|s=lAa z-0J}`KNidlu~Ql5j3y|pgb|%zpt~g`iuOCxphKO+|1HtOa;&*xHP&Mbn4i_zr6E)b z$@9k11tlA8@J5OQSF+dvmDpJ^xBIh`#3h_<{`XPo1mqSdhA3-$ha!4V+uyT?^CbSx z7a@w-lu;Rj=BoMhs5axw)itYrDVB^6mTMBxJGsL^>V0jbGdm}GY$?vF+pb0&seyfe zCN@M3TaX{G&E?|vK1^ZdnycL*1j2gtuu1ovo9k=5(guli@sMq_l&gOhuFM`88unlP)1}4YK+x8@r%r!ISERa ze7J#)C-hZ(c)B*GBYWrqhE%rY+pO=mghw#xZASCJlB8zzFbtDdw?#oXY{HTfGOiP7 z@`JIzh_(+Z1$I}<|7fmO$LW}(*2pFe3d%>RO2GkNWn>wV8q#fnG*{%tR4!_7R-)qI z$HZFg7ugZ?AJj)!z3yCc047b7KwiBZ9ukxi&Y=Ghor%C!T$=4O84Al}tufnQeo3v| zwV4f#JpP47msTWcn_TA~fBCdLLO2gF2J#_MjLkulTN*n|X@poDz_eb4E%ri-*5Kr$ztVLC(qgtUY8 zLvt9CZX@CjDczE5Qs)e@xPdQ^#K5I&Y{B!Rwo#-0l0FfE z9Rr9V_enoAJG7i^HLdjeDs>^b?+R5Iz|4)vFbN`Y*%ul&sN=CO1{Q%oTcD`MIW_ne zqjm5P&o5ktYdz90Ul5zTa04}agzpdNuUqT|Cf~J2?U1lT))}P`Q>1xHWL7$?C@c)o z&gJMoSe&025hE{JlfGP~wpQt<0}U=FAeQaL(u{sV;4r?u%5^wJ~5pso?as&6dk4jqrvRm+}IXq-}K?S@Cx5 zo0^%h4CnVv{Ml_HxRI3R;#1cwKpu^vb60VMFXbg$HRBW}VHQQ4 z8VGqpjpQi}Uu=3HA;mPSLMr>rm{(4hFIl;5(nd0f3qcKU&%UEd-AD&wq1{JW0Vl7*6znfzQ8h|(3zqYqg* zx2~;Irl{f$n=N$8jJUBlsWzO2dfvE1Kv0Rv)1#HkkUVWX=|sXf-AVU3fP%8y3Gg=8 zWy=YpVFdA>h4C)C=h+PLT3?D+sDv1* z{MKdsur&qGN6h`&>~zq?5cO|D#Om?^4qm9)=W14+QcVsrW(g0E0 z(Q+^aOJ#SQ!fXU;B44v&#4WP7Xyo2TW zHZ?Ku*{l=sovskdi|>i`$np^``#8;k#>3PLa_mhv#k^OcKl_;gM6~88pS1?&ZZ2cfUa?h4EhO`ASLTZP?s2}&# zoxH^zZhnX;XGHY#U?1=5_buQpfz!&)m@-7n#59t`ko(o!Kp2hR+JvxP#-qa1mU z*HD~-?C!abZ@c1_Uqp|A6y?pumf8EYEz35#k{`gN-IRLR!2iAzwAN_%N-O0&@HTBU z?o2oS-7T~749dNqF`>R~Ean+fd*h`X&Z~?3ELdq2s@WS}iAmeAF(Opo;@HD1vc6pl1OE~(3?tAC3sfYy0=X(2q8 z8(;{#-nRKx!Ie5UA5fIpjsDslJ{aevXV``l!Je}o{d(sP4YAxVl*oMTYSV|qWLSs z)}Y|PWxRg2!`Mu|1@jSosht^wmv2=S)jh5(Q3_K3lga&C2ds`{&*;~_KRahzXS4?1IDku`1nyWPUgCqN`F?Hcohf}s7J7Y+ zu1Ep1P#df# z6SW|-*}>15aYkOq;wX#n6z3jp`b4#a(Xitt$-d-GZb9k0ff>n9n~nDI72cN4CihN6 zbG+_xhg$m%|G^6*!4PwVKk_JEbzbrb^&d9sMLK5zGlU;M7>NE|GV5QoZ_8OanV9`o zZ-<(mm8G1Xy@Qece*$k+Rz3d1E4gWwktS743Bn;qEM_&&+-eXmh8k;5ZW`oIId3TS z`x8>7-93s!TCExb+ziP(+B8Qz@K2H_yWu#oGn9F< z0zHAh+xP>$!C>!p;o&`gnf9gzioU#~k@8H1kUn1*hL#9j7+hDeQ1z?z%b}QWj>&DM zM4mz|1_T$u8X*+4dsVTRBNSQFp)XEUrCVKlWvl*;L^lhL?k&WIjWKqN~?=z>!{%nubHC52u(dnOt&zRc-nBk{)#{!JhZAgf+^d| zCnYOtMRP+M#{WSck4XY|C^hoBzT=% zh<%?g(in41kL*aqrkn1r$r#{ekX|KRRyq&C(>qK6L-~v(ispa!fQ^$=0Kv1L4M1Tp z+i~#Zhc;?g=0w!4Q*cN246F1v7-0Y)lg5}g4WPDw$9}`MN_H%;RIZ_;$)1xLTe92? zs34kL&__Gdq@(imsxw5a^#5iEXAd})^wh>Qg{U8QHi7VY!=8RK@$nPeiOI(-ih=={ z=2^3mL@n4b=Q5}CaqSTbhx$YYV=uzO*ZwlJ(PpRkAI`&Gqtyj1qxP&13D0}1{h}n= zMT&&U`QqcVP!UjC7!-WBoUE1G>9bX(Ta$;2D6QM)G7CUrW3|>-N2?mDSW+*X4Pq2UAh7IKTUbKN4cIKcm^hp$Bs~#G*Yy{-l0~+7^sXtT__1e_Os5c!Ez|LWF#gc564Hzvbii7C3Ie2S0 zo0`%~^9`->MYD=yy0Rv8f)gSj^lwNVD*#prC!pmL#{DxGJ(!`1+dQHbf3pa9rT^yUwfI{4xxy5fTj@!PO@Yknu%JJ6C0jxg|aB+ zfvNRs#j+^lfN9{I6=cJesinW4lNgY-gnTt6-c?zO@K%4Z3lFM`R%TGH+pfd;g%m-; zZ%>?ZqfW4?5@#)LI)rzcTcTz591M zQ@}rf0OZ_56#k>6-L4NfEB1 zoOC3xo*cjM60{{?L#&6jts;}`Tgr3l*qFIP5GDa)`R7L+dKI$d>{%& zRyK~`jY-xHHkSX@pQLDHZTMd+E9ZmFG7l&yDB<@$2$aPc)Y%ynMg+8a=Y1~!0MIg# z2@nB&$z9lZj|UvTckaDo;U#5cq^2Nbrl-WK7p5esCXbBdX6PhV=K#{Pvefc(pyHN? ztHR>=e-ujdlG4*^ZS#^-GPecB@dHJ`leMp)p`)Rv`lhA<0i&U-`Vt}jqWni0?6iRw z-T%AD_2>Ke*Bur#|8p7aoAqL)=jix<=Zx}On&~e>Q-L6N zBKFaOb6&>ewQ1gagm=cqDtPbnuLKK8=pRSREN+jfw(kPi7Vp;krqd4#TjD@A2L4Ll zGJQ5++Isx%NU;e8JHA0vFbaFUNc@_7I03X(yl_{3ediy7ZTu8Dbok0}nSHifl<#|T ziIm?E5T%VZZ47kUqqPB~ z)Uxuj@bJXF3b+^hIN2;^4nBNYZS;7#+lo{QcDXl~wyc@-a&Fpms`K=R@Ixct40;`8 zNIB1WgOIaqf|+_omSV8+$|D1hy>T{d9KyA#&_X)t&%1K>vFN083HD+uHV_Sxu7g*S z+WW1~dDAF*U8pqneGZaGBq$=1K=7Y$bXBfd)Zr9}^qYgptm%Ozb~ ze$XyQr702^pxA`m?UQ8fCYv&EG@Po!zmNN{16fb5F1+v5RM8s~==ge1FBG?J7qSM^w2wcdviM$-=&l^&Y z`!m&1rpB)F!4mdjN)*Ufk@tT16#UHV6nqU_-E5L*408y83Hl7_b ziXXk$E>-?o7Od#1(QlTiH_I%wQyJ`HCzE?RA6@#K7Mx=cAEsHni|Q)d@Aj_H5ArVI zuOqo;!_*lQ@lBaHR;vPh;-T`9uv7%!8!b$9tSa631#j=g2gBOM4Xzj`NzAREeuknq z0R{^TkilsjdN!|K^M*QLi})_I5yz{Xj%OTb&LjOai?>=Kqoj@$890MsQq6|7r1L6I zEg2<=1)GmLT{q>y$FuAuO_NhT2!rQ!M#M=wJDR^|Rr6z4Z%B&Noyf?VaEtO71aq8& zJfYtLmC$tw{#ud>SKq&Ucq-!1Pi)Qz!DiK%2#I&mv7Q#1l=eGPo3*mXeOETBRG77$ zBV=^aeDd+)EOc7bLi?USp`hpu@_q{6|F=MmINSW{xTFYxL$SDLb!c3s!N;wgv!y;P zHrCWPEwhAfm(aI-q(&L=D?2Hx)INHw*wJZ_n*zW|VA20jD~f}t3Yad^P|`%Y>fywc zbkz&HdmV6#J&#Ql;POif%<^0ZhpiFdYbCTp&o?*>xz;?W_+0^Z+*(QUJQE3r?07@1 zj67`41=YHOQCY+gCjJX&FJ{L<>0wWY36;dAF9T5B+i}H^Xsz@8mv8@o|9U7qlLo!_ ztu8oyTB+2#y;*vu0Dp`;})v_NUfoedx<`OKq4 zJ+aNSt~rKQunV{nCe)+s&w_=99I+zwAty%3$Bd{2m*)!mO*e)W6Q|Q>-{}|9daP_q z-qJCOA^OW`nIOz5wq==`s|$s{c<;A0NwMcouf)676_T^N+bg8kx-|L`+IbX9qZ=GTodVCKTVVx-!V7-gaFGBC z9F?2Ea3JLM!0^jk{!K+FT0qLM3fx7j-%Fs?m)|q1C+m*N%>k)v?ACRII(1KrUo%s4 z?|E4A3o_M7l)FqsO1?O;I|MhlmOKNpP%xOjYKZd z(Wlw~6@PxfHBxnb?`L4wGvoSejpc36jq;5wS4;+){$1gqrs05osy=(LFsaA@N4L!Y z&<&c%pv=J_KGL9F;(&$i063Q8@F^J+eGVaum`LmIQn7ObiC(^L~_dCKO4^ScTlkD8814}9{=ylS6X%q)5?z=)>B$QP8 zpyRD`b9&s~Uk3CQ^7CIc$Uh@MD6$b>NlovWr0FffIr;xSUweveRhmb*=vdvbG*M^z zE;XNMm5vc1T?M6`J#WJEa#)HELA6nGef(pb@B^fk z73H_%mh<1basEXgI6zPTKl?j{U5yN!9BuwHcVQLVEAfjSN%*S5X-K(ZFlbL%&e7nH zl`x!@3P>;fQ<@pt+!PV<9f5ZSB=4UX1f4A5K@8W}jE#Q3r)r#gj?SMPqELD$&*;XC^$s z-}N%$1v|>Jri`dw3F%Z zvuUtJWBdAgYRFZBR%c-S%wMU~(!GK6J~OT~v(TBiK+sh=P%k6``tY9b_)$1_aWR4LVHn!U!*Uo2^%D>Jl|9Vu^z~C*t?avd z1`0xzx!^>BUp`(XSsjq68V}z1!w@nxB{5-aXynhxAK<_VC@Ltt?=uLZG_;j}$X8&K zc$nnxfOo!+e=T3hzVF)Do6zbzSy-4k(i+%US?O6D(*BPR&Hp3I|EbBR-nsr66Ou?U z6Lil16G|-)fP;;hmbhsIBL>1E=RczT$QQha6nv@ka`?i* zT>Lu$cPxqsDDehLFMxpo3@`FYc1%K=M$f=d*HBmg2aw43O=D0LxClRFF$Vftpnrti zv+ER}^&QaHzYUrEe-2sE%*yuv?nb2bZ2u|NtJJ|=0gK2y$416m2a^Vnz-Wfx7S2EO zbAe{jehLZj{T$$Dfb zEm!JT*;KATD*S4@n#=$WCc0dv-G2JZ`IP1Hm;E^VYs2B{;D+_eCpL6y=?Kj+@%WT$ z8!ze@c}~!?nF|HYH52i`!AaXxF7_C_OYHa#3IhD?1vDzQc_~+Zjt1ryAzEV(f4)ddZ$`>Y1%pXrO(Z~~sB0kC z-b@7@KyH=5zc^RTQYx}$9B?GrF_a53SIvB)X-3Oz8rOIZ#i6r?5`ZGvv6Ty1xT!l6 zG-u6JDzl~>a8}eckqc_J4yBHNNfLljv}rj*VYaP5V{S&vY8usO!+fG()`GS`aET0R z6}!Yxs%S1M4lOQTF(&#xt=AGpcmuQiRI5cD(-QKG{VtQWO?=6G z>)PVjBTCe*qWq;EuswW*y1IFJdnkFNB^{pwTT<$DY-j_ULzFo!5?V>ePPl2 z$cJj*+@ZbEesLAWXX~-NR(Y;qFwWuniv-d`GT{Q^))U&Tfd&)!jMJ?$@)lS@JMz2e zSS}X!_ltKx%=L277m)np6do@bPY2-$thfi@IHc$!nE&aHRd}eyFkaNr8*n`A_{lPV z(&Ti$%vx!&RbT8TIlk8Z3R-MCpR~kMQOt@MwODvT;~_e!PMJ`rcrz$P*gS-|zW)%G zjYGK=XN<8JKI(FMHJ{_~F5Z+YU2W_eV>kVD8zt5KDilKPF0$|JU?ba+ zrEb$SJfpaf7^+$qrA$H5xPChRjR{}8@HB4{@`$HjSDLD8BC|3{Ud>Xrp-ONN=TDp9 zM9E3ks8j7gUQK^P@#iftd#1Q%>!-~ICMPy5Y#?njYN-arkJfSMK`v7ItN1#lA zBaOOnd{E7(=PckHxSuaJf)L@N7R@OKe&?Lg;7m}9ndA;~8I_~t$S3}#w8KlxcYH;+ z2zwcVKMe%8y=k$r`_L;h9Z4eh#sm>zA$OByPcaARUP_32= z559%^jaGWik)xxYA-y_6xT;b8%GHDlV-ycE;4HK_L78N3va!?>u8rEc^Vi52t!9Hu zCJ^V}lVEIk&a^NRq6DO;gt~6dq!pUo9X#z~-E{g!j30?_{5#O!$u^o)7H5ax`hh<>wgaq{K5{EPAA-)STjnFa{EJORwlBSD~ms%g;EPOcj{9@psW!73a!^2EBe*)Yvypr&^pjmvq)z|&|aFG5H{ zMYimVtMqoj*xD%!1kq+hg8NVtw;_~S>6Ui?`@dTN5~?nK0W6if$lCk4|JM9L<9NY>M>F-@sEb=az!$< zU4>|K2rP0-gzi*qQAYbeDz)b@D2Bf*S~xl>a&w$epF|8`&fb#~1b?nqs@6|N4eIiD`P<(S^7mB2p?_7Q1~kbSdM;J z-==j7r3FfX5IN^A?1qFefU&E+iV(LLRBsq@bI7qTibct=Dl?ja1uI0E>K7WC<}XeZ zOzp->oMP#U{0}0Svqj{UcIAC62Cg>B%N4qSB0bS)yU*Mq()M=!M+U6T11h@C3qLU| z-`a-XqS5XzS5Q`Umzu$4H~`Pa21bnD^Qqm_Epv@DYffgaU21U)53aP(A%|v|@Q+t- zrCmA{Z!Mb%oa`m&8?lx}*@)hR;;bnu*@JsDCN(BU=lo{0Vorjv#La9zcXS+><)O-~ zm8gC8N4EeEP9qI$2C$4-x{#H$B_WEXJQQ#dilR0U2r= zsn4K9Jj5wE%d~gNPvo;5^@JQ0yXos1{OBBEZi`!o_jfsDUu4nvdagt7e%jP`f*!+L z8{xGpzB$&D434j@1K#U#lHaPVZP{O?j7*=5++}wM}bQ1 zVN=kR=Zu2Im>QczA@-`KV~{W~FEJ@n?vOf7nwWc2>zZ?9R)91KXfaAr7p4`n2w<9- z7c|aZH?a&I2vmW|bF~WEDpxqmD$tcP#!-+nw?&d>tf^XMRwHMuxmx*`Ngw#6sjFrH zJ4r}gQdu#aJ-rIqR2B$LjN_n609LjAE1`OXDz_T75GE6a5N;xa2&#bN^j*~I5Qy>; zk%4^Fmy1)^0Nw&f*}->S$U{@poJ&ywj^f4ZV~LJL3!RTJQW}s!5{C3DTgU(EAQ&=wc}pYSV5?#`+4FarX?hf!rWsO@jvXn;`UuSd;htGRF#&D=^@*2uFgt*&>;&X;sfmHKs+do=dM zoHL`FVxslOTcZY9(uDElH05~2^3+gDChgaT8fjoq&SJfC3L<7b`+Sj&~9X!txGE5txfCH1N1<)867Aid)djJv zI&m>bCt_eA6-bVMc@Icj;6{wiG7%I0WCe3tOZ07#J3m9HvJm;SISCfwrjd~nRG5>> zE-|`ub%T-@CJ_eb{NpwZCuzK%IqQ$Bnt>bPEk9_}t~%!;qV%|34>3jn_StbTJ}Un^ zrY|}Kae@pqoXH%t>mU(D^4$0G?_!{WMO=_zED_@5R$XiSfB5?5=uEfd>yB-7Y}>Yt zj&0jX2OZnCZQJOuV_O|N=@{R8@tc`D-`tz5=bvOH>pkaG)l+BhT~#gwEs-@fRu;>% z%j>h#>$9!h4n_mXtf$GWl?i${&s$N1Bn=w%99vnKzK7C#>)~9jXY+~4da>@+3>$0N zuFMOMOo0x3k6_zf)iNzoWA+#8%=s;h{9bGCc6B+2W@(%5^7+K8Wj;xx9>gU-%UYt% zIwNtMR;SF4#y5<=YJC^L;ouJdYhHzy@LwSrcV0|Oz*+28Kqj9oWE$TGLN+=Is$-p0 zgUoR+wu5{1P`07MG2)kE~Sr_-LC4 zIO~0j`?h=~OBP;!0fh*DF>pG`5GPVp0=D!WZ@60&UI9^C=irOP9k1Nh(5+`K-7qAa zP3ta!!w}N!D*Tr|@BNC>&Y0IDnDwe)e!oNa8yMoJD>mr4$btrQBH7~03OgytH(wu# z!cAi)Cw;h3u!H`8|4xS~>Y(e@Xf83nS zCBO(GiE2(p++vBP7~c$T7SE6RN_K8RL@D<`*>2S$SBl4ys}vKD6=j|#CLPW)T0F_0 z>bBHT0S!+Ds(h@VT=2)QQY?jA9!tK`23|{`QYW4hZ3P%!OQh0Uo)a&HCcGw$dE}V( zPxD`5+7ahP@l+sA3}eb6nkEXc1ZW>h(Q;M4DifDV^H`#llErAkm9G>m`f8pkrub_f zD$?dIdd`C@VDpxv&70sYfLkVr+kpQu5*W$H=DW&Ea175gLL{h-TGYL4s!O-T-M|y1im7F$L#~J={s)*a1@Yf8H?>!Ib^3xs8 z!mOS-BW?*P%|{7yT=ET0d+bzR#G_&PUXwFpPtpme*!Uxr<@Tus=avlhV?<*-f&wvq zk@VwBV|Y$6nNOPP?dg0an7J%nA?pUran7`SUYou%|EynbXZ?vHRSlPnM8c1S5Gd>w zTj)K~u@PpqMIzonZ^PTo1p4rmZXYN^kkY7LRq87zOqs31VjhUCV#Qb=G5H-&$V>hb zJ$)vbpQKSz&!lfsc~$Y*#b&v)HN3BqQw>KR@Rx+M(Ml2}hcPqC>|Jl*GW63Cw#62M zs6<@KK&{qQgT&2KTA9A_Zb7rv59ZsE%Bm&%mJ78u@wW`3z#30mn&il=r&%g@gB- zNK6AN7`Zu{5v`PTtgv1#e_J;fjG;4wwvGe+llC5oF}Qljr;c`C%?iBYmP068KgJ4j4N845+@jM;XbR$`AT*NNwQ`|9n|g01<;TFy=p z@GmmHJHZpfpPc;0YCt{meWz2DQ%?ucJc13|Wj*LZV_Qd;@VgvP@M#uHKwsHaKX`vE zAY33-l*7dKdit_luX>VZ;w4M~#LnDytA&K*5knP7XeZV7wt9Oy}r(b(-A z;>$;HPgZND$on3PR0&|#nR{0Bz$u{VdAjpgC%i0W4#Oh`T%m>qN&NjWsYOXd+~ODp zmUjvzrJ{)4vLw1-JIyG_m(;O0q<9vPG&02s|1) zG_+gxqJCGfL0zCEZ?PhIQp260{^ zd^TKe=_%Kj!r$Bs$Ujx-$&RYEP%i4 z9gTZ9prYdRna~rb>xmXhdcsmT0`F0sX$6jP_#QFWy+jW+b0Ae`M}MLaCDRD}Vav?c zOJ@xj;^~1E_Dg4kYsrYZ9qs9->qrL*r#nB>1mQC^&y8E)GBsq4T3u+3;0ZQ{2dp;v z^evf!Q+zaGbu@DY=~l?lxlnODk1FIS^Flm!suNfUVx*v@fNrAxeBNBh%0AL`Cn~0L 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

>a~1-MVby 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

`u^7Ziqew%fM_)HbT-?nF*>VlwQJkkcaO{C zXbC#vLt8Of2X)3js*?9zmleGRf&#x>gwVdjqsOW81BCXoNh4gn-l-3!2s9eFHy7jE zEwuuaRnyJq&ct54{%|^XmqID=TAjyyJ2!cquuFOEo0Y;um__Xxm1(euSoriLIE~_< z%Eg8oT>@&MmnlV`L_10bFH89~axjfW^^kCe62^8oU%;8PpB^kS#9>N2ss}HAXSJM0 z%=z08dB+3oNvWH2G)>kAD}wG@l{0}_L86_qEk|c{Hogh{oHRaaGMZ9t6?s`i?%3c| zAF`l(aW?@un&b+pbMK?s^u8X$rhdZj6231qh^m_-`ay!W_}MG1reOp8&h>7=XSyOQ zK)YbYf?B#i@4i$hzHRg|Z)$pE{>{$v*mr%bm-CkXJZQQuU`TIHU+zkj(M zRjy+oCVZvlYwn?lT0w3qS9;9WoA(kZpKyAD`vB(%gUh8gQuO8Z{&FWCv|Zp|tG z%gy*~?#74WwRUQ5$VNx8DH-?RU4mriBD^*L-MrOIk!M>2FnE!l`w?VbGC@G$I}i-M zzvCz0>5(CYmt6LGpFJH6=d$7s@?;;(uqA58D5emS`3pq^uSrM_Tf|uo7M8~`h0L8B(_@wV6HHgQe`ke%5^dS_>?=b-X0X{dKV;B$gC@K&cBN zDLn3odb3RJ15{V29b2Nj#)VR*&WS)*KF~$iv=GHbjhYkC32xAgzws}c(@NF=XHDnqf%7z_)*p%qOXpg?kO=O*c?)Oxqa|_xmd*i`3=X@IkxTclU)7 z0Uq)SyP%F%$`8>vy%f9%2_liN&_?CV`sQqMX7rYYfDr0B;zZI>s|hB_40*-~k(d2o z@b}v+l?yGFkO^*gb0{@n#+=DbA2;LgwKB|#5-YcCS%YMf`i!fpSxq-YR_y0|4GOm1 zL5fOecWpzC)VKX6VFw{<$x*v)zP7GEW1p(IQ!3+3kO(cZl<6zQE~qD}QTpyne}{^M zm6=d2wrQp!o%+WpEZ!<{(#Jl@wtWz54GLJZ-KP3wwrg8&!*5ks3^5v=NFSOq$8HE; z*kU~2+Ob=Av2h2Q-9T3M%$NHf+JNcze{}_A-Z9w}?`^P<+o&$pVJwsx)=U)2NHZ(p z!=3B=w6rxj237l&X|6Jeg5n@6JBF7L*J&zf!4$Z(iuXFDw5oNbrA@mH#h>X0*aT_YHY*I@|R#3}A|b zT0&66vRgt_VR-z86x+(8sh;c;tD+(;MR7UGoQfT&c{K^asifwBI@>HY@jg?yq1rVR#^jkAMd)*yH`b{0V-2 zava|T#q1kVjQGStZUBraLGFBp>Na_IMK@>W8Sb5@eFqnm#?<`rL+#V}jNKM{)NZuk zTx0vaWH>^8u}2M8Ue?hY#l8?vtZo_g74p&vJ!z9nJz8^^oK8|v40D9X1U8WL)yQc)t$%!S*(}dQ%3=KfAC9f6WXMM;ebp@kAy!5UN)ZKQj zUVQpv7CmyUpA#ALVTZeo)vfVyFRckg;sW@gW8YJ%5BbnTm#HLGL@2EArP5|IbvK5L zT(mGfDX8PH;m^-#%!>5bqN)U&<4}^}-kplXaOyI~sMGBjStm2qbmpCC_!XiHef) zWFl@R@q4~ZI_S?8tWLo6$kbS>8JpGsebh=MLT?qO$tgiQ0KE< z&7$u{^A-pJjc1@EVDwe4U-VV2{|6TuPd_ERw^y^jcjY|`e?d(lW^%X*qK9jBaN7AY+U%J*+4vaUEvZ;}6LY$G*>^I} z@FKK&?2cZGucvb+$BAVJ$OW}wU1KOQ^`5D}QnmZBj-jt}`iJ%#Qkq=^jV0NM<`l%W zPq5VI;kcYt&Gdb8WVv6D$LDy3m>*OGCPAn2s5Rvzia!)}J2qPP(9|v{duA8#1r_>0K1MIc{DND< zcygP6P1}}BwCQaInu3;2BWpXbvGBt--{o1cwCU}IfLHU@CsX;~@;&#XMy6cY!ud%vesIVuLH&q<#r37KuL8CErj{@9ct z$8^g)#bG=Dnam|u46jtiD~5c;_H;soBd7a=L$&pb^W3Ko*#83D2C+?kHxPs!dXvU3 zvacGX71~Q|_XUiP#;&tZ)a{sruq6--C^SEAkqnnmoX1-9%=)xQkt@X9qm(o%a-Zz; zpNkr*_ilp!Skh4akIWZ}|D0JB|COx&HB<_YW3&VjKn&g)io~JMFyo@`SId${x6JfI z=73U5qf)tG(t4!x+jjA{@k4}ls7+Jy0Wd@7Tz*H4Fh^<^SS=~r=sz=B>Z9f`;EAL zA8!A?W@7wby|e#;U+zxWkzM?WINIyjZJ%=8E$Jz2Vzk`Npg6ItRt4v zz)9V$-LR$j+UQ2a7{c$zKf$rZ=KV8}kdg0l+SSzbgqeA*GIxg_xNFD(2muzDtZsI| z09G>SOe;gl2-N&usj?fv7Wy%sp}knyCb$7KKDxNqy{>B`(w7BlYNcGlI`;NT{6oYG zO`dF#;aoGZLZ5xv1T#Ba9{orHSF*H-ab0+00N3@aKd=-uptU%bM4w6~c@rxZzW9v< zp80ulh-*&;jD6^2;%sfkTt@8+g-SL^VP5#}d=IzuVfYcF6LhsOHMOjD{8K9xl>WEN zxwzV!Bth2okQtrn5IwbW&tp=HR?!E-Ak8m~$EQ`2dv6UXlV^{OnaCt-FevECR!j{2 zt6xn#>pQD47j`_y2&Z?UB$I=piPn*_aGQG~;5jdBo=iQK4c7dc+L||RcwZn+*F@y* z2&*7SqP>0ED&0)zifIs89idp$N@eeEy9FC*#ydfZ2x}*tPhs9Y#52l9{q0^Y`r;+9 zEH!~Ubz643s>Wt;@RoLJfrHq%DtdyW###Sb1zBf1rm6W3gq;8AJ;VCH3I=g&J1Y_) zGh1uB|0BFfR-F2WZO7-by}@XkbfVmVtiPb7d0@~Ia~ZO5g%KrH=&$(Q7RJiOD-Z28 znPNVPTt8S05*TF27+g1KpCWvYTbMBQjae~T5IXM0&WFE~Re$eBJ70j7?N2uDf&-J+e%i)>u+Bt;e)eK?cc)+XJym%!6q!zq8^0~LWnF+W4gx-tGz8SxgA;gNR z1PSl>g3|1i2fxh7Heqa0Dpe181kG;8*alqz!PW00UBF=n-lZ^j7`Y#{ye<6t;8AfjDy5lw4+3=6rkYhKoJ0BpuBv-MJkNO=nx6J1jL| z+xHLYp9OI~tgDDT27yAW94y9mJhZhsx0YmI#X%xoujn2KP+IHEh7=c>Ij}+-Ee%t% zmn14GRGh6=y)DmCh7Q=#vaX5zM$SpFOIe1inX(OC21{R&z-bIv%;Q;zd#T@bJPU#l zM;MH{6FdcFH(XmQ419XOLfIK&_0s9}RCGR5D$khSNmA`##VGsj&SagYdS|`4Q)>c$ zlV+>VD~F!|Uf)sMGy>qX##bs?@Z}mGHRpb2*!ld^6^0~OcHr_moPz#iIQ^S@p#LtK z|0^H=Bb@$~le@hjy_7|sztYn;?(dNYV1Wfef-+>xAfQANW__Eh!w z5-^mM4g&b!>dSA;pX2MM7+-9v@Vx?GZUQ)$uGny-lg=+Rj0>-D*pge0z+Ax>MM}=- zgklI?6T8~!)J{Dn`qBwBt{1GX1hUQn@J4sErz9zHXA<3UNvEC(a9B4u(#rA_sgFmB zM2*0eIq%?pS#pDO=WV^)Ul?xgDDgcZKXoKom)rHwbY*#S1;*2xEKJWntf=@zPfj}Y zSa*Il&lIxbIQ#U#%9JK>dL>TN+X)cw{N&XU8y68C9_H#D0>5~J$ksg%V4hk@m3L^L zuC?oLe>|4J$TIC|k672Lez4TC1MXhC42V4K83s?ig@f3UNUm9WbEazxn5cE_S61qg zKAEChl@i&|u3I9xhsc<>3%r?qi>5PU6KxAm$WCgKb6_Uzq*#+4#}C{QB-zC7*L<^1 z>f8!$=LYzc_P;1R(@9*jz4A6Oy@U1Lh?ZY>FM9ANZ;7_Q!}<7KTSM5Ez6(gepM3yh zG(8M1?g|9*8{LMQj}tJyB6aXv+>V-!@z1^UD@KmOeFpXClE}DC?8+`M@dzEwDBNQN z@{7LoVt?2=`EKvhV}6JPer@g2V|^G0_7*(&w(XLBR!r+U_EUc-2lm?BvI9O#`gfRK zHz0gPPi{JPtv_?7cU=2BKS0kVe~l`Eev8U8aPtbD3&1#p(wT?@sKgLAxxnt)*%j|LrjA%LNZK) z0z$I0eIsot6TL&#rJ9<`=UTm8y4!c}r#IH^5C~n+9?Bf;4yTbtk#@j7tg6R~TVn=x zrDempH?`MA!?7C~h)+fw!I14>H@Q95`DE_&5UDYO83?-$F4Y4W@@GNyS-k^wmXv+h;x z?Hdl(sR@KAHf{|Lr%1otYEm5R`jhU;$LOmv{590IcV^w9f-hE~R6DvVS~{|V?8l(t0;SYX9@1HuFq0D2 zNi*})YHwLJ;0pfo>59l(ch@fN8^sF-xmG^1rl>koi1w{v540pE?ZZ|fW2hh_HJ|qb zJizKDfm1wjERQhEPt}Su&J#4G4J-eKy2gS-#&Ia{3(tUp;sI7 z%Qm`p!Lq;&Z3)}MKq@RxNmGgO6l;R_;=&3(1JMLo|A>nxb(Ga@#ffYQ-6PRIKF(w3 zOnT|52PR9a+t%57mF$}AOJfllJjF*&0j7wj>Up`=V3r?OyywrKb&sS)4+VsRE_7wJ zpjM(HNG&%wU6$%!w}vE;X~?1L1^AU^(PT3K4q)_1cniKIU40Cxe)nW{m0AHB@Rpw@ zOp%tqGgXMOmVYu51~<6R#1WBnbZlx-lNvKlb!j>ag~||NpX!hR&v}2sFq=LzM?c~e zTt1|}SDo8W!z!5=;a1;o%eebkOT!`QUbO0nsImtwU(J;}ihEj()&!cMuGf3*xpcsR z#GFe%u`k!Q8Z+0Hw0I>e8;l{3W6-5*?^c`NuOYOvF6p3#iaqql{wdzJQ8*_h_-O)5 z`o6OIRI;?Jga|nT1|hVhc90x)g0gQRbl{Ny-RJ|Ifa8{-ut9QEtOB19 zNl>m6=r&-8?z9^cCm1fyu8s=gPs2zUr;Y>irWd^uJ=DdVs_1yb$r1Yi$hdO8a(jS4-FGB4}E0*?ntqg<>uf)XX+y@o(z+1FpcOB)sh-4oZShVON{PK1qqWkF_xJ6XJl_%{SiArN_VF$H{ok2xA z6tmFiDq@b3QF@n>6?_`iU&busM^!zqz&&yAfn2moDj+wl(}V1vcWpTfDy$SKkFw(a zJG}3{g6yjTg4_Z+fUmZ^W90Fm9yyqo;urZT5PZu)(H(M;1Ix&~(yzSPRTD)`8Ozz9 z!Q0L*`d*=L+{Z8%Qx_STpB&D=+EM1ff4l2g(+Z08J)eomGtfJGP?qX*>f2M6>thhs z2o>_chUT1#23aFY!v#qD_cRSKp`4#dH%IeHVt`ewUTpmA(7W?3R1irN$d>WTlQdRkJZg+4O!MkDMZ` z)418dL-DhvFMr}p>8Urp_xHK0k9Tu3P+Dfh3s->{W4@j{R8sG}XpD9qf+DPJWwq{= zbyi2srmE=W<XCN%o7kO3TKHxf$DAR)`PpsIf6eXbYs~&DMhTn^A=YaK#k%_@!uA zr-as?xzx~L1u0VWVBjkgDT>>_^+ zbmXFFgFxCU=Ri$bowWIDTu0)%peUMZCy-N~Bx38*h)o@%amyektuoTx#wCSfPNZCO zvb3BY5!U)cNJv=F7>UkI6v8EvseTorqftUshi8~J1u8x39KF;&rh=rHg`GZGp#1SH zVd9E0A%um56v13f#-i$;jST5zk&SE|ig5fwHZm@Ql<@2U_Yx%o+a3D`Id zTd=Tv)ofpK%OL%>K+UPT4X^#DzR;G!fn)-joq|K%2$e3fNGBPuO}$nUv10_x_q~#Y zcAf`;7g2wSrV?Rnn1zIjLPJEgQQWNlPg{jRt2mN_!=d~2k_;G5PZX}54z8@+S|UnL zaxC}w{6DxJQfNvkno5`~t?BIo-sH;cBx{7$3e~+3uvCc^IOS=_)UBeE(8Q|^WnJYx z_yV#-1fj>VQ7!RqR;>1)AbaGqmRkifSu%nRW3=bt%^j}y5L*TQ`Jb|UEp6(A!oid- ztL$`UiE5YVmO~m4=A$;4sF<2WoiT_KXB8rPRgkMN>>C3u9m5_i;Q}M|nju3%D!UH2 z^8rMpmStBQFx;u9zqwo*WAbZRXKxQ$p~4HQ_iUKRg9nXsX6@MW0U_C|dj1fj{TtzF z)fGb6Rm$y%B9{TiT(X%07O7U~KTP^89M4Gz z_MkcG?i+d;BGINj)TQNU)uPr(ru7)c$bLe!juH`OwbcJfluvHnrLRxjx>Vjj*;vD~ zc_#DxJ#}5O*_y;XA!i#tIVr{NDU($m*|@oHWe=}j>$qhQ$bp~>kHZF#7CIj1#FCWZ zeYg}5T7bx6rF7qo8~?p&P{@&sTs15^Z67JU57OF(nE7y>)wzZ=4~5VuI$QYz?a(B) zVYIGye)G)cnZ|Q+N~g$mbPt)l!-1tw#Kyj!1G0Nx=DdNZj+J43E@nHUgX+dX*U;G= znaYk|LWkD`uQM^escU?>%&0W3RSm|NZdj^9Q;TfcDe|{H-=+C8fKD<`7uN>dLj01& zUCqIceY7Gu372aX4NSvev?AZR2356v?coxM-P7MM!mi}>7)F&51WwH#e#8v*vb zr^|)49Is%QTG=%rDq2unwfop6>A1N-R#r6aubSn&FR1M;14P4oxhXMd{w9Iv-4xWS z`dek}?^_3)sRZUZF+zt}8C;^s1JE>Sn0^{895V9a-2nus^5n((W&5Gkn1=9e%Z@7Z z8LP%j?-4%NNLms)-8l!}sUH2=mo~y+I=N_F>KeyJ-+EtWprpPcD3a}9jE3o_!v$;N z(R~i6%=iQ$(MGzK&SAJq$=22W9$^qJ!nQ0H9JDb+`v6ddIGmKjOV!m+LEd#Q-TAOd z`+g31Q-%?9o6%A6e0=S^$`Cm=I8*XijKGCM8>h%jG5gyhih0YE&NYNfQTBHP=oB%0 zH<*DC%ioX%y&WjpfD~E%0bw?A3|bre#?|7;Et`5#kahK^F*8=hk#RJ59^k#_@ie+| zM*HSuj&R_z;T8Al-Bcq;(2iaAV=-{MNX<4xVNV=fTa zbLF~Dx>!=ViU$vDvm{<)I?B<}&YbG%&KKs|#WVFS9?H#51`n2&7JtEg95uIPA?4;7 zzw1MfN=xhzB&pU;PU4NmpPT+NrsN)iNymQhTyHWBS{`L4+5ELX+7jrVJBGFQZSHMv z`iD=6NKE5!HWfK!FxS8devE5SQRxub<+iC}yl?IE+4Fm_kmDX3CZP+0*NlD4o2MIw z55vo89qTx(-%i@Mr!RD+Cu3GNhr4X(ry@0>aTmJbuK76>92oD4oRcBbv+Kyak?yi0 zQuDe1lhRVC-q^NDm$Zh)$_$KIxfQSF@87XjIzLbR;Bq=hoj$`Usj0CnS{O&;<5HHO z6oYHUI&P5FgQbeQtwFG!O4OO+fd}v}F_<2j&Dv*qT?otOI~urKWyA(a^xCpr4bCoG zrF9pU#T|I#;*L`0b2`gHZ{Lm-%uY1O%*1gCoOI_*7mGgJ&Xey7nZSN`p6tiFi4!LY+05wL@4g^e?sQQStcu# zVMW0T$)s&9*1?t>Xk>C*fetV$jX~Gl#M&}`-tmrubFeb^<()w`3hz#$n4cll;1>Tz zM}8L$GcmJKU%&t~Nk`9hS9a*;s7Sfyks)V1a1?ShS6V^OvFACStg z1YNMO0dTT@*hX}$b8-3Jv1>powrgiYWdXGhXbO~)IZMMSkLr1F)zgX+i!l(jRzEGP zj;V*#t_#?5^01w9RG?fL3l*kL^BY8*V4%}YQEO>*G}Yy~S#0xgsq*-z98Aq1-kTrf z1b}gw|I$|$=Uqf@e$!WRt$%V};mExMP~5KVfJ$8u(`2Q`O~Wl&f01>9i{d7 zd!T&LPeu#?X|wB`fJo>roC1vgD%`46dOE@e?6|95J7||@Q)mss5%;qhpeMLN1xdT z)Z5wo>`7Tu=EH8ksiYV6s@ZbYAk}(hzKxCv=8 zc)v>cyYQ5Z>CwW45J&f*9<2g(L<|&m9z$LI$%(sf#x%=E$oe&6eMq0Vf)E15q;^2@ zwnYp0gZOS`PZ0?EfnEXRPn?H+7;&(=f_%rYySfRdEF`8ZLyYuvp?wZma!JNb1IL)%Q;ceQs0aeTIoi_wa-{tGrC_nm%UF?12X!oql9y?i>SVV8 z-~9k!jRqqhZ~yK*uvh~2RDzm9!0iPXZuA0zE7BhdJ(A-2=ZA+7NF)L_`yiGpS|#Hs znvRvYweRpW%Ha==fNhBItJ#&wr_4CJQn1|U1ZL*1t3FGh6r@1-p?8KZg#HVY37fg> zuIT}ftveq!og1R5zc<4q$n{Nbf`Xz zMQC}Bxitf?j(H%KwVd1{jK;+rB#Hr%Mqa8iaHZ_a0^{d>|n7LGBdJprx#&{e2c zW*lf)!f(*W$iPEcuCCzK2U8}HZA17ioyF;k8lP8y$15xwT8~kqTpR4(juqQS-*I1T z6_`j3>gOPO0f62BfTdtunrBC2C{OXaC4b0k1U;;Yt0t6>;Xkv?#4Bqs6=As+0?-#S67uqi%G^AMBPi>yh}H zQTZ1ADHEEtm@iwsmpVKv{?2ebJ?=IA<$=!;8>*OcqYED~t8qUOUV48VMej-@!EBu@ioYB>YtR(%7W7rCVn zN?=j{HpM-qRp^aaX&W$1(STNDEd4i9=66GQsJ?)@K>&DYaO_eg^WO=BfYcCPC~CQi zN-!FL+I_xRufKN`rWZ{4r6lHXPcZH?9$nvy+>nnS#50OkpN~C2A1TThXBN@H>}PDq zY~E7W>@mAquol12w09x%OY=8j!ekT-$pNZDJe!6>$`=Hp2(nhkV{{1?k-8e=c`=ar zbcWN&k#(#Z(-3J66heF;EbL*8EE4JwlcYQ`+|NW#jJE>XQ?H0s0ckC@j7`lQOr=?1 z3b>u8X0WbkDi|rD(!RH@9$divR^7^rDAX%GQ(e*A20}mXU1n|S8}?-P)2FY zH*HXf_FZ1Lx0D>qN~RgBk*q2H*Wl7=`rhmo-PC3pkKU=Q=WLdXSu8RT*=m|`LR754 zA!@(|*rbfo{X=m#6Wq59^gziNf?)IkW;%fGS1qG>1+Azzh79@u`!1TW3Eaqu&#@P> zZ`IO6s^IDiUL~p?mDpQPoiOIJKZ-3*031 zLu}L8xs=i3V#=#Jw%OLm^?QiRPDZhDi8cETo>&e`B)tUAy39w=~s5Y;4KpOhsHA&h_(e_uxf$2IoY>ECfcc44*#cgfDVRVvG0)ObIxqf1>aVM+gktD-q0ZaY)e1M91$(tnvQ9{SNs?Io0}LKsW7Y=UM3`QKN+W1mSe}Ed$3wo;yeM$6l z$)v7xR+~8j_kO=~xhYUYtK}fQg=k?Xk^BhZ^J3ZtvyCiN5z5}=79c$3d< zX-+J4Y*mycDp`3Yn8YO-m6MY-QZ5aYuFVs!)!jIp>0mQ;K&6p;>A`ozVUW*#@LTv&Gu)WPlkyb07(9g%oo7|v|`Vi zPD-Yer~Gp%RCO8ebQ{`+?HuLdx>*^5I*fjs(T1s=c+y9@zvVh&`A1jiT{0CD8@Op# zgJZg4_f1__-TV0y?uwku7LS!U?+1E*_9F|pX~}`iZ;>!!qsVVF;_J!yd-H*X;A!Mw z*d<^9XMEXx`ikd9^a%O;E39sqs~ zeUW<+3xRrAy*1bZA+Dgi1AV-D4>g0K(CB3gXlI0Dn5QPRMh$%tSm!y;;0!nR(VX*G zZq91WR73$MyMpJtS2}Iq!mTDZ%&&56Iw`-jX?hl5 z1Il6+Zbcg!5u4Wj95P)AI@v>gEwr6YmPjZ^^n$Qft#3|f~^hu zOZ0uk(ST3HkoCz3`~t^q1J}LQ@zlPaqxZfqhgkLnFl}v@@viIwF^!;BCQg-U*)KsC z!?P`0SvS_N?CIxD3!7RbeH5_DxLd9Y$9tIVY+S_sUN0{0-L|_fpA_8f&>zpB)~wRz zuF&)gZ!(RpM)aD%GS^nOA1|V@>H4vZ;ShA`ocLho9vz<6Q>KC4UM8i?e;3H8zy#VV z!qy$KvO};QW)dx0I<5Qph=732Dw@$lPSgv=991G)t1$hM5Lt$X(#7W_!v8}nN(oy7 z_UCNI3f{_Bq-;5~;dKDg)CZB)hI`#&DXESI!yRrm8|%`<&tqbn_6Yg+A6@cZj+}?% zKR;vCf7r0pVPqH80=|+l^LiN&L&~XY2iIZRuSls}^(_mnG!aMq(#%I)Vi=ipmSYs(swYu7-)e zjvXSeZpq^g-rVaLpb)+}pNjW|7ykVuy2bBGTtTyD=QUjh*i$96rV>-3T0Kzmb6uhT z;*RBk$a>9cQ5MAl0*2pB#ju?Z`k0rkobJikXf`MEmhiS`u9z;%hvh)!xZ)iMm}H7K z^i~PA;2mnl75g>;C0qH0okB*_m+rtoxu6}Oh`g#7{eV&6OtP8BMI4_2#>I%`(V{h_ zE?pfBGND-3y?JG)R-AIk{-;Fs=|IoQdG$K$6_immhzcIbWM!4gZM3};wqcYqNl}^< z`8twzi|E^qj8=&a$FQ)J$=S@5jJUxV}I&J?hemtN(lH+EzMp;&L9cR1&1kxL7X z!Nanz-4NC>3Svd7G-fpvi_Xn#dO2>cbSMKuIYbI-X?9&G@N2- zQ#e#DuQg<)y}{+!Oi{|}4k2FkCJYSXlgI_xZ&#~^m<6@x`fB*&xR1*b!i&{|sLk7g zkfU1)?Q40eJuDxm6PgNeH?N?aU&x=33iqp<>|4nk`3G>kxX>OAkY7B(Eoc|`PcPUU z+(frULsn;yEg2k$s0mwXB&@fMxdGzV$=hSmjNmg4uq79|N;|4bJM3_UqHbjeGASGM zak(P?5;g*3Q;3WbO8Z4ejyDLblOE;csm!=g(yF=D)ZbnXi;q^$oL1x{%^R!s$!Ui! zz{EG@oIRo*da;hZ{?Ov@Nt5Z+3!+B>lc43<_WTQS>OC*8c~sq`)cz}{yV)OkEtB(y zY-NhL2>?N;!wrZ)MOh9i`d5uoaAOj+S>&gD`hBpT>M;|?*8~2lKKpOkO{!oJ3kkfQ zZYlh(Dg3YMVfIqo%XN^vp}+Z=Kj60Xu4z4@pc9B=zIe@pxP~2vPu5iKz8+vqKSfc! zyj3C8EBI^Jv3BQygOxCJyjy|k78;@pD*Z-IU6Ttl!3IuOs(Cm;q-3WAZPtG<7pM6? zKN5lDq+ya*_u0xJXJ0a-JR#a&eOjvcBrT5-nX2QO+DoLNw=(jrrz`>l9$6jhxMVg# zZ4ueCVMY{oS>}mOqa*A=@k)n(!R;V-k(V%xUr=ZVKLfL9bu6q!DL=`i`sbpd z3}l$mSM=CgR!ja-J`dSoyl{RMBYJ02SXB>GvruUG_^me&j>SG0l39Q zoAOxgs)XLKkZ||K{$wyp8A*fLhWmE0)}EU%U7{7wUb9H`cI;BrO%`7693;iPP-3ym z(@U4Roo>bCD*ZCw=bae=(&`TcJ>cwg@?l37xho8b)ADCPhH&KdRTUa89a9p_gl#H;L$ToOy74B`q5@~zg1YL`N8 zmIcPShc|yDNcxeC=%Y_QNj@e%bgYmLE7LAteSp!%$uyB5$TkIsAomY2=|A!n!Np(A zHOW|9^EMLUa1&1P{z)`AvuUk`VECS0ZZp(2Ao3bL8tg<) zFi{0nOR&2^cE~*%5SB>17jq#NX4lY1oRO;QFjd5AX%9(YPzfO7AJW0P{PzrMNH5Ovlkngt)G;!l*s6bgeBc{5!J*I{HNu5y>TquB8c z`3p&rJ!&UaA80*KKlx1z*u}M^w^Nok+z(X%V^w?s(+^xRabFgTANO;>J+Kxu`lkHa z^-PF^W+l;81-w3q&;hDM*W-SCX9@X!D;wbSK%H}zqX1>~GLcfwlv67VH*Ex$VKI7iHFTj4s8(d| zElWLez5Vzenu@`X!~&$8<3HlP5to=W`gr(%m_$!W8R6(j3A^0aNXwK$CJ!anN!L&S z9M%=w`Wc|CPcVdaeuRscT@Eh1gnL-N@Kq@jvvMlKW$CNQ{Fch;z(d)bRnv}fvAYQJ zLTd2s#QDT>CBr`(gWVNtJ<{H%DYMc39EgOkNuz=5O?5{N8m&7U( zi4kjPZTj=@r2mp2MKz%FoI{ak#r}@Ez0Wv}!umq7y}FWZe1uD!1p&4Sj9Q!lQnLCo zJc5EttObhD5T;$~NQ-EegbShtp0JuAQ=|cPR&Tb=VL`8+ZQ)~h;c7h7*mGfQzS?kc zUF`_SQMnPk>P*a0b-`!Rj=?qmNR#BK)@|4KP~%bE)DtaAo=7RlS5fc{IV3#asZm*f`~8PR$&}(CJ96>yBeTcL{PkGK>m6jm_f@ z!=LzwE3t^}YqCl}BhT*p%mp3RK&+keNH}jS-NU$A$D4VnI5f9$>fD+}DeY9#U_z>m zCKi8j;yKY-1CT0R?)T<^d=o%qY5&=T<5}xO=Vj@qm3n|;ZV20o;98KT7Bz>my6~O5 zV0$A&Lfj%%Av1!xhCU9LnodB)L{ofY-b25~i*_o(DQZ63sjfkB?6cM;=6LA%%hqK#dxV7tS_`tL;cUZX^^iTHDcxC;lr8KgU zH&n%cVd(%3><-iNasrMS$C9Oj#$WRd*q>_o=*oS0+w;6V+OYA~u2`OQZI!a{>_o*F*6 zMtAzfPnZc@u~ANTLMf8ldhi#&$kKOqhq zs1-!ut$md0wP_i2jaH}I8Y){>A5nsB--BpSbkN|qtak%5ueK^n&~ZL?&LSfmrK~k* zEw453iupdu?@llVi$xjC^mHPom{4xc59`g&+DzEmLqb*Kda(-~soVWS zjO9-kIN5z!Pn8zn+5JQ{?-l^c$x?5^tAllfC#U&b8WyA6Pm|e(-$*Wbc|w-FsUUT*2t}`M<-A0(9%u}cZY>{V#fw83@pqbb&}AAMk>iRuXiSiVi5xVF&oRM zYdbYf&vc;`B&t2ribyMu*chzAs^srv2|kt=*B3GD?rV6=6Ym@H>Bw<&03GHV<>X@$ z?~P+qCxZ0Ox+;(jc-7TS!IEsY_ne1q?sX6T(~C9bZ3>tC=RQj*9Z)amMUfygttm`lnMp)*mjYRb4-f zPO1A?U%9p8KH1hQyTINanzmIwIGr`Ua6T)&K&wu_{GINjw#7g6o;AOIc`k740X|U6 z=y?pt-B)4Zp}}OSs5t>9;}3W<9SpLt)2SqWq4b?!^>Ua8AC%ndcog8|WmAP6@o?(` zNO}1W&+=32Vx3MzcLmKL?}?fsG>u&+yJ5H{&ud!B@>o+pBZO(eBbXO?cb zn|QEMx2gw>tV*D6Zi4y(K$z`E9*%3%|)C{8;^V6h2u95lLVGUtXzlE z!f4Wq?eOb$-jNdV9UU)69aOT#v5qzOu`6b`z*aV5`oSEy6p!geqVsF9E{JIk%$DsJ+t4{w8Xdvtko0ny%N1en#^qQ?5@TwMX(N>C| z7%=?I8)J#zNe|EF;tJy}BhDXyrn!f}+6ILO&?yHYx95!}u+1f&Lq6E4{m|L1ht`OS#i)ZKh#JiE zaE8tj6MXB|l0%5f*=fzUhxaV5*#LPI0bVzE+WU8Zv!gG04!im^z=`rafU+*&2EYt- z>Ex1W=G4<~dug$lidZ?dZrgXJnW@I799o-YO;1^EjtKKFNJ7-9UYb4X;0Z0A+8d62 z3~F31YW%h@td)<0Y?#wT);Gqma+p)dOB=3YH`z=pKsD?!Iq2H?H&pKN+0j*%R}Y%a zN!q|2{c&qZSUr`%moYiA>rvlvo*r8j8VZ?d5{Oy=AWw>GcWh@(0&++gM1@gbI3HhE z6&gC3?Kq%303gx%BNU$_pW5DIo*q&K9o6j?WknWJnQ8@OeGqVPgPvrb9!wRQMKWy) zLoDRt+afSWQG~=}yx(^^9QJ#^ZZ)MewQz7ENGM7tk%fR zJD4n3Ox;57T|i7d*v+ue-2>MwgB4ZX2iI`wVBEQ@%-Zx}K@}8Gl|~5JDM)=#sO*3cQ~u#JI%MR0WpRK{lYSUIag*!ZodAehblXb+M0Y5{=yyqi5~iIl-mB2!e#PJ z-ZBt3_?PK?g#4Nmf-Is&QPN5Myf4x|m0(M~U%hwes3cH0R=f*QQ!`w#BX=BE@@QM7@ij-{2lrOtBtqoJv)t)Jt2F26dILHE!vt6RnnvC{;Z zo>n+OcXWP{AuCYSXc^Y!>Lz@oh6payButvC% zTBto*HCnqk(qDY1{!1#Pp!$+&?OWK8_ghW#-!rPQ{|$-Oz}7^^+{E>Ns1`!=|6EP} zKNtSrdYa;Y*he}cd!l_ucN-ows|OJletG@CE#U?mMD z(0BRKUl8r#0iX{V6+=nPTOL-L^Fzm9-`H!+fVQjNEupwr_z=MI2buuG+lY zfxwbQ*~U6fhyJ)rtmwu#O4?Tf#*f*Z!cYAMCAVH7F__~x=A006Q70(p@w*)nE0RVd z(|Pmm*(}uiRYCxb9f}h>|IIu;1xq$D$aX&^%k}*1A)ao$>jQw1DiaU3dWc)ZW+Z2iYD8)o>#!%w z!KtF_i+6v|GEv2;=WS6|Ne)+i{7u7kR6=S!_@?1f{38vQ>VFVI|3Sp9PzG~WUvT)G zGIp7rn=^GmTU+i;eEF-i(`ejLw#e2_X+M*k<}#Oxyf|R4D{?1^4q!S2RB9c z7P|A20Mh34Oc(t%0Rs7rUYzOYWK&X?}? z5z*pqxZ_uu=jTLsSJ}Lm@g6sX4eXbJ?XDNbb3lkBiy9#;X>9cVG4WC~2mh_4x^G<| zDiKv2zz1Tgu2_sG#RuY9QGc`?0;O{eCkizgYV*ddynNv`CfnVt_G1ehdp$}*mg zJn|SkeeB8J=ma1iT}I)a;iKxjEbek!g(Lde+x2md6q4Z`Mh3_8Ce z20ZOdp5L2&^dVII_Yu-tH9AdetIN{rA)apmg ztHOHcfQ{Lwu?M}lo7Q-XvP`tST*xvW5-YU`A-($6i4uwYIVM`Lpj+-qWqpRkT!$Nw zU`pqqb5%E{1Z!J{K3QrohMcszCqFEhs{Wexmv`JcZS-NhLIZaa1e!wK+-06lfd$9~ zzvG8C8+w^l69|jqGSWrZ+DT77!7`1Feb`d?%1!5Mr9B<`RhzTvRKdJ#s%@++J2L0t zy(6J(hUl3+tI4DabB&QW>}NChQW>~Xh0c&0G-0ellLK9KN`RlN>iUL#URiBIXM!TH zr!+;3?Q$}+l)f20oSpeYTEa^Bq=4^Ro%yT5iN@sA7JP*8ToO2Tc?yEXp-{Yv6PxuQ zYUM&3P>ZDbX`{fN)R6WU7jcU`94Of;Jg1|1)5M3~+SRxuPH-NA&eDU2{#V|*K@k38;=YVw742WL5^X5x*BKPWR|8E!D=Gf-O&$;>bNMX%}Ao+RI{pLW*GW;0SwS;wW3UFEC51sFQ|5v_3|LjrpnDw zP10!E%F4}v!j$faPO8tSm$lZ+mpTAxJqRcHdQWX2RcFw<@i1t!+9LzC1JU9XE%B!N zbRX(e5&Jjlb~;QUF^zf%rMV?!SJg8Kjo^t=n00#nb8huwcRAQ1VMNeF2q)(<6XuFH zr`s!plD0Y86Zdybzg>afRML)vEReB#iYQDHks-W-iwy1cg#;aC$(nnk$tg_+_yg4q zMjTD(^EZ0)X7Q9+EzB7V^D?fd>6-;TTfTjq)U^`8SwDpZ6_2Xlj?BWx65rk)n7k8O?`O zxB;oS+$?X<4j8{k5ie{1JKa#c{)i5%?y#)Jo$~de#DrKPX40C%uA?|txqFIFdx|8M zux1NCSMDrM2J53oPYp|pd{SwKX7AQUO@i;nc1sm0To`Q?J)pC>GH2N)Wc2nj^f(=Y zuWpdn9B3`8OslKMwVV$O=w{?bL2k(FBGz85+JZT_GrEBM1i}_e`^im$Jjdcyhuv$s zy<-C-qtDQ0eH6y1YgF3pIHk_|9no{RQ|yR9EPZU#ugsghz=v>{(D)H2m(A?@FdNkN z?53^FkutWiqIPCy-zJ7e2S)k1$w>{0TTyv-p|-=NddbbRu!S&$*AMZS)5b>^bSF2I znLV6oAh)AVjJWkG?OXXsrw|sWz%|9gl-dVBzCXVQ5U^7(>3eJ95MI|F4%J0=jr~s- ztPN<624fw~s7LDE6G<6tp;behEsOMq+Rv>o&B@CIr13Kw^KRxHJ+$}lOa2@I#ps%% z6v05+z8-p?*eSr4T(V(GJ{>cP!=#uFC}jw$Uf@?uvf$cdWi1HduV6&1(K4^EP)%Py zeqZt734MTwkMv`M3w$UcX%Qm)8tiB!D}1y)0CX(%tNP&q*gDXk#J@-+$zosF1f&R@ zxug#Jo~S)ern8>8=u9@@1Vl_dc?{#~MnU+rmUm!^s#su3 zN~|6u0eOm7J@$cz-!yn|{hnIptHr@VgE^7xz+1yzFxEwTOiz+=-KsoMEjo>qec*RA zhS}Dn1h~by=x0SF?|Cqd1JquseME6ZCp4q5>}CW?@U@h}#f|W10?~GJy?{P~zF_{` zp-D7kBY~^*#B1kQE+bZT9MhKL>1z%y@zlfxFLlS)6&8fR1$xr$m8hnFeLsAVhuV>J zwZr*SZJu2%!!^eX_s&Flxp9Q&6;;3ki#LfkzQS=`Tm!g=OD*I{-W;X8=LkrV+HDJ1 z4{eiY`j@+b;Tq227uMb&cdu6`{RUfBs^!QMk+`4T<-pL($L~f@Z_NFgb}l-Aka=i4 zL=}4fbde33Z!_p3gHKpUWFYEXku)HFlKELo-8Y8vOE^TB9RCG5#j!vc>=86RL4iOT zYWTv~QR=obFW)WT_-i*-+nHcKbAvK4h-#>@>F__syjYd}!1cC+f0ie^%4PyJjE5YK zyFKFDhxq(%D4JX-8QV||c_G2rNL+Lzq1$`f?URnXfsLv7 zOX+zw4TB*|2U$SVsR6U%yl>try755VL-GbGw8QDF73PPH@`sAABYqiukz_gNA5 z9`}l!_p|X?bz`S4UHCS&2Y6g}4SEGUp1prXP_*-NwNGGkSS=j1E}|w2SI_fn9OQB_ z`>{#P>jfhdY&rP&V8}#bgj^Hhx1yz0TVbY7{50kYk$y4W6!tlreJjkq$u3XcMuC|Z z^VOw{`U-fbM(1q+sdoHTwk#`(zF^84euv-C@6}1Hv^RoApnNgm1^zoPI9PF1SavLQ z)|4&@6TLYL_)!Opz!V8OR+hH57>9j0oO8b)Dx5eXf9<&=t>zvKvK3l+J0`iM}fMe-)KsG2tcT5oTax>bbhVinZMFY);SOWi`Ao!H{C7-Jyl z7gWp6x-0`Iibg&oQR7if0UkB{WL}n;iXq76ln)>(28l{WBdKjeIW z`CM=N+(@~d|7T|goHKFWrQJA-R(9af$(8*5GfCdP!{CWp_>2=;))nn9Pob@^bnK;# z7KnlQwjWWu^z~nMgm*?EEK%r*d%ry6*zb`KYrb^k?lodxnv}`&2M3-l+%waif1i zT|TSa@0phcM#Nke$;7zPhrBX0HZB~(AUVP0wR|wBCKFW^H`}6CtWPfL zs6XuIXM6Z>dc>c9LQ=j{e0Ttm8;7_SjH(R`sraIEgis^&fh){PJt&BHf#3BqA2D#! zWtBn{9h3{tK}Rq)Hj?}GX|gmrEScDvIO*NwyZ2?y!ljNXm0%7nfv6WoH>sNl^HUAj zO6`~yY%{)JnGa)Z#pQ9n6wNG12C(78j-7b+4%zxmP8Yi;iVLl&hge*^hm@EwRPUp4Q6GtrqQ0W+)$*<8}D5A6yZYx zhj*B%b067lGqB-J36*5poft62L3prZi!;Jj@$yp*u5#KtqexJX-++*VTD^3HLH#6= zc&hWXqG?NT>8KP3Vo#dxkFSp|9Rr!j1sQ&oo(MzCI##|%Dk8U#@0N6E7Ve0UXw{Nv zxf4ylHHJZM&E*5E2p?oO(qo7{E3qCD5UUaP=f?M6TQN^Jsp&mV{6No{;1Mw=y!0#Ml zi7h|1L^Z~OkMD}3kCHv@HCZD^{7{Jo)z_(;c1(z}Inr@+WfyO0$=I(UrRW9Qsm`vE z+!Mg|IaN*z{rKQ$uPI<4;uJglj!-WJ>n|jk1(oX$f4+WV>(1mq3a2aam9=i%%ZaVA zeSa6?C5iqncPSAtqpn8gOL#}s(yKnypAGBkO=|Wn+Os)D^@9AU!O+$^>M306hlObY zSP9 zpU=N!`f7tnDOyO{ieW=*>cs>sO!N%y7f#@OCPD2a^Y#Re^C@#X$1U4gtL9!Be&RW0 z*NdV1-zr)YV+Y`XVZB!LlVL43t@%sLt&8yC$*5}HyJ4A73li%VA|_K|fHm&DB#jd` zkrADP3J~ELuhE+{i0&5n?t-S-a6i3MOxU#szFQNNhPCgrKAU zAx>Y$2)#}A5ib5<|Dj{&E2L^x?&aZ(9gb219i#;fs~E$Z=oU!~LPdbSYL{V9*puGJ z*;Mxijh@f$QmHwrsM6xgDwHsTd?@=vPNARAwJhEg+3R~y_U!`ci3P#*J*W6fGVI?E z&d~qw(AZm<8Ccp;1OC0z_g{W|PvHLk{QH&u&D8o|EAg6}=-4Uzwd#LNI|>y3LjyXE z#m0OcSPYM{i4W9bmx(q>mi+0XIc#R=BGQNuA@b^ zn4ero(n`uk3cb-(`N!VT($x>_?HDKwCko}_)Mhh+C{?hh`PRzuz<{&jG~;AzG;m># zWYEBZOLoux4(}lTsw5F^OfEwbt{Z-Cm%-_>EY3?I+vAR-z3wo6F8EahIicCL16zix z<{2ZJ#=M^mR8Ai$5V19}4jYu6l_S&<6Df)^x}^eBtKc4s(;;{Y3ngb^NRu zG>EqB+cp%4W_+*ARvH>-=dg_%VMMn)?e_}_V_wwravYcx+G9OHERYE%y3|CTG_Z09 z3?}xjmC{)C+pNt|NI{x|{DG@3^8`JI(FVnnUC{h(pI=pkT1t(>Ffb+pkP~RqH|Ozm zv?9}T@C9o3iw{tues|%%`?bgH0LQFk10(dqTHW|7bb?mLYIMd9>lKG!$!#w{Em4R^ z)-mV!835!Yx(TIKJMe;*snX6#KQBnt3p)(dbHolbep5@gA(cw8yVRGK`@W&Iz<8-5 zJ{(FyW%MG_8T+MvQd!D3vVFVGe?EYP7xdDGf(Iw+CC^ze$Xh2sM#6omp{bMa>ALfo zv^wr7RKzSCRu^7a;DgV`%}fmqMjVxO{T+e+@iqx$-yvA_k9yJM-w|qMYeem$V_{Bh zXQ^Xm@b|C(6@iv|##Xlf_Yl-whbV|nRKt@@6HiMXBS3*u#S;{B5k&$kpmRoO#&tMThq|U(P%QAv+i+9Ys>S8b9fOl1;;o+RBnhQgh{;Z z^6Xh7(*eh2wr;Lz?qD?Q-lj55dHvQM{iU-ybh=crI;-$WM&Rr9I=&Eq>)gQjVlTsu}&WB}X#kfy-kl}*)HLfM}F9H{iV zcMb;x%Y6_Zu$26xl)FPQpl%inUnSp0gpM9G7O?!VXL=e&a5Y9*t!l~S>_B07A$qtl zU!cH9E{*BxY1*=mNW&v((f7lCH*6RHUe-1Ld#hbphmr>AWyK+!vP|c_Q+8_U_2Qh6 zW##V52(xN5@VRl#D2*!W_{oyF>)esf>KSjnJ-9`4R}5*?#>#vgQKld&ew)t#)YOD8 zFOrkcMioz2F@D|RDd&i!qxfRp*h4<eGk+D+oy~aQ6Yai( zZ~&~C4`3+x>*H5tj5RG60kei$W-(*zDk2m9n|HA9z5YF5t@YEwtJPom^xZo;g8VxM z>;5qYDgQAB`OK~K%mgj<|4S4`#Eyye$-oAFh1As0Zk|?{3c}q)_B7yc;>m0%w{ly+ zpkpAghyrbiZGcjJtKf^J+o=NaO4KFOH@V-zj1L{Hv3qk;v{uu~_p=yc#bb@bfrIE^ z8V33AMVRJVz6;ynyqHj|&N|DL2)rcmH9XmkraAa}q}CJal%o&cmfCGamlC1F8Hp|A zljgR{w(x+E}av}FVV*`!}ubl^{N6k3U{cAi!>b#n>K$G-@VLmhQ$V!y{`5K z*XfwraL!0y@lSAf@XxWL&}qnWcqRjWCb>8Askd!}7XEnz^6b#q=%mRzRj3nOF-A=@ z7GZ$6qITJ65Qrq{3x_Cw@fSXSl#x1n)(57b`qpQ(-OMlvf&zKq%*o~57YS@(s&__L60R=Qz$hE1pxYfk~@t{jj+q^u-LpEJ2%R4bId zg_eFX=ON_66)_*bYahFDS^|IwDa`YRWm4R@RZRxn13y;4MYmy+a~P)N?6GXvpdSXh z<6UcsI?P9hM$&>7@|3ELHmXIK1hI!@^{_=lABimDwPsNfkQ2djbCE(3nIaxY8-+9% z!cqD&J5#_i$W1dDOQcHod?Bz3I+ zQqYyR*Ri$#FF+=Idk_N1B62Db6I+bd!%#-x6V~&US->U0Ln>qBeTd^Qu}%!9(H?94 zNy`@G&c;F7U=~XwG(&#cTW3GY0DRiJyTIz^T9l)yPVeWiCAuY21Pvh=vg_6BHEB61 zv%HX9Z)@mA;6(c)N2;|z<$sDLg{o8uCbV%S!qz~g_%UTk;WSzg0@>QN$zoS61(CJ!GcFUgNtRg({scOmzk z|GF#0=wlo-!be9yHcSyvvQsx%Wk43H|1;@o*pB;nKamn#t=n$|bwtpKik#Q%Z+_2o zXm`zY*HXo7QFdM zBBU4mlM!|oUQZ!d6u}-)$14D%oYJD5lISy`mDXklPhEu@~PK_!bx(a^zc4r%x|%&UP)SZJ_jj+GH)W88fQV|NNFbDcXGP%C2dspyC#+IB3bS+xi*H=9s+~!qlj8%ZY8*k)plx z*k3(R6>C{K>4+3Mv^*E>1gK1N0`hW?7TpgT9aFzNc1}q*?O!dI4+bKR2o`oLNe8Ckr~5k zj+}~ECB_f1)jnb)y53N@EVLzJcXUPkwor41w3(PQWj0dxzw0wQ+Oih&Z$Ll(5zv2g zC;Bfy1x#!W^z2O>4gSlvEcl~gHz$P1X*QNh)A>rBQ312n z*9%HF(0h6}3Dp3t@0jp4W94vi0&Nn{uRB_b;G48x$T0{rascqRxlXKsWwh!D^p#2Q6|Yjy|rrc7Z0%5ReD<)UM3>Gqq)_dL5c`nDSdYn*A1QwGBuc zn`jD|tJxX*72q|jstgjHtL0X9ZTVJ9?Hwux9gR6_fzB|ov2WAXsB|CR8fHOhk&Wid z?dRxi?Sz{Hg;+{W8a23mB|pPa^(__OH*5TUVKb`|*7H|w&ff26lYT5dEy-8fIxWx- ziMW<#aq7-j@30fDoF3l~-(>2Wp@2_}uPhj5q)}n<`D%7(Ad}H4qVWY7oRTIJHQh08 z*swh0gPw2by3`RvjQM+*RN5E#U93J5#M(IOOzWqnC^w}#rfAXk&tS3_f4TS+Zxb#e zhVL|o;~>5VWAvY8@L3)zhAMec-UXT|6P3(VY|G6R|7oV=SwfpF(4ttl0gqI*VykSO zSO~PZKu6M)g_^Tz(Uh$KDfNZ799@>NhG;@E$0vZjBw_LSCf4k-O~w7GD|K=?x*}^1 zbJLymfM+VBt9}D-yhfmOQND{=11TP|HoV@U*`K|#8q4uZ%uPE-?V9lkn3D&(66KWb zn8{unqS-iVy?1400juq{{`O4sDcV~Fe4Q+S__*>hYe*G-s}T0@-M_~6?oQR9@H_vi z32%xD(z&H+^8LgmxCi{nCj$N^7mw)qv(G>2Blr_K-29$)AWP;D>4OiS;gEiAZ zaGjoR%4}Rei$H?v4XXqtnn??{wk66~Zj*n!>OF#Gz)j?QZ+J}N5iOn@j3`|GKAk5% zlNfJ~4xEyncf}>W2Y!;TU{ugcG`$eBT|~w}lW;h&{g{FXOj;mIju21qMp=eEV#+s# z*jPMA+s>pnnJ+L?*Nhb%$dK?3F^AZ~R+c*DHkibdpNG%^mjGFtCCEHmfjE5@Dv1>_ zeabfV(YABq7N!@DQw`ve@s_fH8`lBI20fPFv)n&x&luDVRmu}pKi`q)Bx^8^>rSwB z!fAL;A+Ii_$H9HG$E_^rNl^_LO6!+93Lsj3mvy;Xz!;XX984-=b^st2)vmbJd#Lgc zu+tR0Gfid8FPOiM^LC%E{rT_r6HxzXE%9%j;ry?BVWsC_VPI+h-^=MOF#uk~!LGct zv{r)^tuYe5T#4AqFp^sBo>tLz9EWPjjDQu!>@e)?pwP*1c(|C0ffV{J*0;2) zZkI1-4?yeS2uMtdBHAD%lrk!C|9P8i-)Dd8Ml~3RrdM3x57T@B=~W3+tkctk>5e?G zgASq|Rv7l!=rRy7O&Ac$5{%phqu*LEYq?v9Y&1_b$Nf#b0>$sZk$ss8vJJ?ML4YN@ z5DO-#2f@*ix;c7xgx_NyVqfw1IO??=kNSu&Zqmw zl1$)V82+E<_x~=(#%p03!oSNg0TT;>oL_*8LN;HsL6VX5*M^XytU?co2}f1qSu7&tV@_D zMs`s4S|F1*m~K-bOq2S_15al$6sHt-)1aVXb3qqt@#eAf=>J`f0Y+R8f`K+<1@n6m zc4TkfzQxtt_ezl{EH5bgMMK&b;ru?Ilog~YU{1a)47459fsrtW({&8fUdbf>Gl#^B zt1`~pavPR@d=^cvVYua-*RCy*6*WU;CDcxfJUv>4#KZ5wr z2e**9m6M?5e`}27G`<@nM9%MB*l1w#cVDFXS6^h@>-*goah+@rN6jE_aQEpH0MVdPNWR;mrL0FHVElPZ$E|*B{(egu<;Ej0 z6{qjg3*J_a;)6i2i)tAvS91MLZv{b8*dpe$qUQGhBkdc*>|C2Q(@fiD+O}=mwrwM6 zyVJJqv~AnAopxGj%u4qDuKCW)**SC0{8&HNdarjqPgUJ@*IiY^+08+y{nY0~Q}Wub zT$<)R&cS;F&&T)^9+*&L*22k%g?;jRpwbp(R*I&`cqDd7a#NcHKYM++t?yFmbE> zD$Cb@J5pr?`x9fp`K|o%{Fwe|gul-3@3iPY`qIR>HOW4H05xG@WMpN{qt%cnj(A4l zUKzRz1iXM9@nF?9zuX)vqwG!fL-eZm<5h0|iVY%YOt}F%=vy%M zlu;wlIoeTLQ;3#K`JfY8gU^L{XN~Wls)+a$@`!9m8=@ON6FQr<$+fu3+QaQ85htAH z#uYa$p)0cWi}a7G^Vo(TYadUqd*#LJ21E9|LuL%(mLk2ghhNI|Pso(4ij^(U@3InP z7YG&~s`LutYk{hjsWvrDCzYCj(xBG`O52NH0T&kVh6=}tyVkWU{v7!F+J=S0*l3To zby~y?H$i@YA8D%_#_}!!_Mx^b=7g`y5*5jWxW+47A)ZO#Q|plQ4~e*Lbe+a!O8F zu^ummhZU+d+~2e=uNhOS9gvLfZFUP?>08-uA%FQ(f$o^oUrEuQw|M`)e4T1?`=EkDjM!%jY+=lDZZXWzPe(m;Lx))+Lt*G>7J%mlW3H5oH%-{J2_prNC+XK^qJ@VI;8^xC2~7h8*l@*$TPJwrVzS~D zpU_2mzUQrcS~VWZ9Pu;P9F_LXogc;RI^tACSgQF79B?i7&DbssEqL$15_6XC1T*|| zjYJozWVUD~M2e%JLjEK%x1OJWkX@_@JEP*=0}=5jrVPtMRX_>~Iu^O+B@L)r8Q(n@ zz5X^IvE2iImEWHwarMd28GeIjfrmxKy6ba$C(v?_BOIJ*T}pRGga1* zH4CASiVs3&H5S!OQe&K^SgR+YvzHrxo40_yrGgaFAhusz@y2A~{LwC>G4WPt8euyE zC;bucG4Yas^zvI6d)TVtz``DVD_?w*PHEbWc*7)YtJLsd*mRgjQZ*w#dQW26Li&Wx zNWbGF4LWpSf*zTBr=sGLAmUKmK}GUt7esASgm0#WlbM1V+ku0AJBqKOW(%TQZyy39 z9$F0mMNLtpW9I}`v#L|Q$Jm_*?&@*h3>J78j3)zQ;^XM>K1CLDv|*=f0nCz%ew<+l zGi9&G!?;EBdlUn&p@p_Ph6$2Vl!J-+5W_-or9CUp5oYNS-DKoI5_R^{*~61!N}~g~ z$4}O4L#`BVa_`@V+3@~SV+ApvdmpQ)!`cKNTv{J#zJHv!CpY-D6q-)ZHOBaWzt z;Zhzts|caYhWfB{uV`fC&sMstSBl*egug8o<}|lEXviGlk&&9=1@{*N>_fdq&yYL> z8jf~IlK{~|#CI2O)O#YzqiFM>unumE6CN#1RjORD&Xmg;g1I*#<*yN@87E)zGne~v zQ&+-;pbA*D=u|-oG+FSe^)kTJ@%vC*e5}FwqW^I&!DTC>^{6PJvSaSGkRb13 zrf*7hTyCWPNcF;6!&>doP6IVH0?ao_`*!+-GNe%UBx-XXqg!-|lP!~PqxG&tr)5PI zPpcEV`ju^LySnTcqLV#@Nf2J|E@R+K^9YNzKafa2Um=fvb{I`&>JQ2111adRuW!D^ zz~8mDvAJyb&zcKDjAk{<8IHIec4}DFGV*3Ftl8F&lyGL5Oe~_&Zb}c z8M$6SjNA&6EJRay`GAto(EkMsYYHRZFNHY|9r8hhRh`17mWK3&>WATO5B~O7#z|Uy zG7z5e@yT)CTU#c+F1@V}wD$Tv-L_cR!|CKHD{F)QQ2bM|k(-l8@x55QC{*?v8Iv~-ZMP0k5I{*p_aorU95fd1?L=K1mpl<) zioM#%-uuV`97g)~;d8?E`Woj*Nn{}1Lx$5O$C1aRkL{{nSJyizeL$W+?Kt`Ipmj$3 zPw&*du>f*B%20jYV6k=H=pD!=Xa;J>w*KS;cG7F+@I-P|%zdE^OAMH>-H)&GOVk@x zmLy9I-%o*Y@zh%_n5r3{Tpot=gpgg_B+|mV2}keH&(L@ zmKu;$P9{m=%`4nD7I2gM7z$Re3_`J72gZER>201Y_YR+$Ysz*yf7o(nOeS`s2P3UKVrKfkMy zmWe^1ffglL!kR5D({pGqrM6`pjw=&0^d`55gW8rH3w#Uby<@s-V$`!rQ5~>%XT1&! zZE7mm#bh-vC^fiV7k<(1-yI2i3qBLv?BV~Erh^?Y7*o>2pbh_5Z6@qncL zR$V~9LXHu}!G9(b?)=<2Y|K>~-!ZF9>kV}u)Qey{Qx*eONPz+y$97b>%NqP)#{q)0 z9VJ-A_2WehIvU=`B+&Ix_=i|oLgV|^v%9efTPaHB zYto zEIS=5&!flN(}1jPcfjriE^6gCZnzqfde0%LH?yM2^|?s(#!6^D=-Y$&hc{o0*Opd> z2F9z8zlT!-{YBp^`@>|*5$(g-&pqUB4mfIzWf?9BH-P$qfZeJ9Fu#@9{~isWlL6bwydY1tGk`FcL_;E);9 zdgwOLI`Xdskn;Uk0>~+o*RcAgd_PcG-Z=cSsP3~bw>}7k#CorwPfpW@OM}9Yxx=oB z|C$d*C*+VCbg%#@4TkmH`=s%ACzpKJ{d{yy*JTf+u|j2z$A8^e+Jxacxul zf1LpSnMwQW{Qgf|5*0Tk2`GsHn6&tKP7{ryU$xCN^2#Xk1pV$+@{4aCH4>SATt?Gc zze-~8(?TLg(EuiGa`z>B>lH5Jce+r#EZ5yFi-SF!Hk>+)Y-kpJ26_}Yrnsim_ne;+ zdDclK${1Oom{q0+&0j0 z7{$}H}_8NIH9grE5D(19#otz{;ytHf5)6XQ<-r7#?IlXQJ}V-NZecCnB;hAJ|l zNJwZan3)+)F|737MI0@oZ(f7YgmPQs>grU1+*XU(w}i`ZHsB{$HoHQs)gH0$zrp20 zjb(uWAh!LPMEf%!Q8qC9H$al8q$P(efbv$P(`uu^PdO?g(hp^0(YC8IrV?5M`K&0& zeA>q!((2kKW$G68M#Td4cUT*DB`82Z*E8*OI^=p_>Uw{91k=Z((tt4}4FDQHB{z;0 zW{8SwJ*p+oj}ukdFvV(0bmR@7Sf6oF8{!G>^s)WuPtdh9n)DRrW$ zFk;ipwZ6GKtLRuT|MHN8t`{k&EIoMJa;HKbe8$j1f81-~+H#U~)zoT}PJuGD#2#R+ zYC?4kF;omAHhclHbyPHwnY40Mcu*gjNTQme(^0y|E0otMTjVl?=s0nhMb^F?b2_@T zlvo#xJ&b!ju9%6*Ue;FDi-j==0wUDhO~0BxG}m35E=V~kM9HNcGr$Ipw^I{M25y;B zFg~gTj)r1*2}5l-+l`cjS+vI`HxWJZzGa&Sg{eBV-t)fp%~&9lqO(bC&!hxJ_Upl2 zK_1+K;h0KaF;9Le?~&{+1e^bc&Kc47*h|+}1+4z)m9_ky*{}FH@bJ_4^2o#mhQ@TmwBz1UcjZh$BZ^i_fMcai# zNg+riyuj4*#Ys297u24E`;YbzO65IhoNb&TW38g<<72O>49lBN<%sq01;>8iek#Pl z((@UnK_wyQ;0soLHjruO_KWLd*KGC`0{u? zT76xH3K|K+_+E>N?notR}D3FQ%)$V@nFF;kAfHjUIld%R@B85njq@B$`~V8l*QB` zDD3fKUvIMkqG*Z8GZ!|&sxzbDvi zU<|9KySC`?G{OefMmZMSa@mY5IUP+>57esEm1ObPY}8k_28PIHPXRYoLVe$eRymtid^O@q?d{W^>3+Q-4J<|G28GPHR<@Amz$u|aEZg=A^b2n0Gl2;^*8a-O<4F6W2h)5zmN?GO|! zrRR{PDo5$$xl2XsgwOkkBx*sKY(s~&{uN97;T{)rYloiAHK{69^uh%*MZ8%YmvWi* zT)@#})C5PS=P6^kPSHugfM~Hs<5GG1WRCO3p|XMZaJC_DB(nGA5Inf(Rt7_)%nODn z;+m$ZJzJzk5(i)d09cYp5=j!VRQLhj7~>d}R2oTN?P%>_oXJQ{MV<9FZRTo3;+zHL z5*D1w93LiM6O~rm$2$@E0V2DSzV7oUHUfNy8<(S<-S&|?m<=$uV?k_jc&D8Y4ysPF zPP$G4P6|#EOr@!_?Zqt>EqSSnx$hUAZ2>c7FGAZ4px@Q7zF>7usE z|A2&-g7O|nS>D@^Tyfg6=cBm)R^#^q>iV|kHkN0l7kKY!VadF(LAtcZ{75&`B~3}0 zx{*vSw+jxZ!}IgE=hr8yFBI+b^nsXQY|88N2)&iI{q|acTu`PguNPQ3PT{M5r!n?h7vusK_TwMg0ekEU~(9OEz|*7b<`KssxV6jv_eg1n9)s! z>|8MDH;qb@?M!8fkye;o+NSFc)?`FjrkE(Ui7%VS85XIV+|r za+~#!mX(^@ldTFR@+3)35uzr2_RJw>ioPT%qWJmc%G)TKUQ=l z8Q&%il@WbA9AEN|XXj)<(skE3?8Y{|Q&0a9!+{~p|c-tE9Zz3{;nX%viXNDQ9 zDdQv0L`8BzU(JDA?q0TsnMLKEYXobgEORU#Mx2nbt7-kwV~6x4TJn0D>}hHAl!}LPRCaP#wVmIm0D3qPAaUE*uMfx z#rK$+*N#|r>k8o&Ly$RcCSf3OiMh;p!9zQTU62Xg!1Igy=?CgpkkLmuoOl0eQ)=%o z!%fPb_&TN6KEiyGwd@0Pp^Drg5HrWZ%;F177$mI`C<6J!1uG={rh*^hQ)3YFGB!0n zZ5L*MoY2X$!siUO0$i>OPPtGqwd;Cz7J>(S5T_>}bAd34v$SpbPv)LR7_}IP#^Gu5 z#a6}a=>;fR7QZ&EZDTF_dQ|Qea2!N6rVnzU+xF+iRL(_^SogVzqBlbaZ_Y9x;YWc` zGwd;M(aTdy6<$F8QtB~hF^GaNSorG_ucI&P7uJt7raY>i4)h1WZwq0X zq359+o%~YJKBwEoJ-v9of3Oecfd+4MQWu&L9uZC@@VWrg_3p7(ISX{$=e`cR6b8bF z#)YI1I$5{puq916;{ne{g##1n+ymQn$ zz>X%cf7i^1s)Ndg>8LPnQW4B>PF7+-FG8R3Lz4*6DwvD8rZ2{E4W{R&1wF*J=<}A%aJ)Xava-4rdCG&Msmgv#LVm<*5Lq zvtOe)8U+9pfm%V<=M;_1a`P+zMc_eUZP^y&pEYr;4_l#^^cOyBQH>M*rG6gyBR<3U z&poJ%vxW74s}1NMaNh6V5pZ-g@Br`(Mpl30JVhJ3SpW%3ivraU-66L!Z9o7>av?gsG)VlsS1iGR>~<4hr^5& zV|ry8slLKE54}odRyE0aO@j-qwr|jHDyN%HOoch*$u>}UW{WF^W0?C!Nq;$K#|;*d z$qtUP@cfcQbLmmO_W)6Ka!H|ECvySLmN$KqxG{3t%Pd%U?!1xq)QfamBx+;>T@kLa zuCJbQV@=3XEI8nS3V#IvINYi=5gFkyRi(|eP;BpAyumBiRpwB--`z2GbI8ShjUk5`H~HFK%ZKREkrjB&e_ko!btx{w(=xhGO^^y0xW zpHtO|42H0Ff+pU6OaGO7ytf`T^oP8v?`7kBDO|$#wLz`UD`?&Ew?pcgf~`K zYB7a$Dg6W|Wi zhOaf}Z$pE*sgw+ts0*mlK7hycmGxIqG~*9|p!Pi~_NYPKzyuu3p6>D(EUWC$OCM!l zWjEWVHrk#$6_aT5oL%CIrwP!Qsyel;{7e;$HJDc`aVjrD*BPp}3~Y{Rs7xB8aZ6uX z^A|v*31BOHZD{{Ke|OZbu%w0duHa5~J&qbZaMo(Tc9&+ebSn5wrDg0#qm}1uu+0hT zCX(kQn=mioSdmGq8-`%mKC2MB)Hz1*O%Vy}YE-zrWV<4IT#n7vGpn2Q(*|PjhELr9 z0<_`Y6E&CVBqtO*VLOo!w*%v@z&W}SFE{vJ+{_o{n`k!gX3C-OJfz9 zRhuD%@*?Rac{*I^*@WPSYro(zce$S6V3~eq?cP9t8dwMK%AB0sP^6l|-84OA`6Nfr z!ex(8gq<8h2b{GTH^#FkTKU;W(ViwO*DLuxBJbkun&8Wt@|}4{{$_N9!#Yf;$!3_o2}9p9zS zh8^!^VU*17IQ!PS&@RGuv7r%^R9YJKHemL`y3;O?5&awqwp=q)f5SU9@t;>Yn%o(T7*gOVGtNl)WT`%=wx$A6g7de>`_((?!&13XvhexsB z$O=uuQ8pPIKVz__dE^qFPf!M5VVa(&DU~7igFBK8xb}v=1vjhcJ84$zI*bd4@RzC8mjXJ8DTaaJ)(BCDz{nv^`+@Lv-|koGgXjRnYyf~~4F8x}{K7LbBFX|Z60)LnHU_RH zwsb~zHne7Tc4pQlzuW??rIVd4jnnU;jQ_1j`AahJ|NhJW)29gkkDp=>cujjpJ9`sH z!02ozmGByjgeFY-q| zQ~Ts$QClMygWZ1>Yb8Z17(Efvzf#SN;3g!9AH*r+nK4+`%$;;0>2wcH2{cz>9Ks~G zd^0hD=5~VU0~!IhU#`!YP<;fEfmvq2)Oi2>+h5rr!fvIlKj4j$0iS>79C`k~-r3#8 zdO%gdZtW9-@7A}gpQh%mmT8n@iYg6?tKcm|M3KShhm@+#fw&^HLWS`v1EJ;N?gJq{B{K--ZQ6*UyWU@?ag@Y2niZNrR z%aRDIG&CI2w*8FM5DHh~jIq8zj`h*h5U!-5NTZx65jhHBB90*x6r6nTOZH;MI6>fA zx%Z_-ctKj1U7xhbq)@d8&=z)eahB3VvY>cMJ29tFF_tDs5lFv#|X`SyG`fOK* z%*f|JLK&wOcWB0n5cc!?h|(ELmF$;tBV(9d;nIRY&{hkfEX46OxjqhQF@uxxk3o$IM;sVdE<{KDB#D((Cm$KY}_Dnq^&2WL9MYFsM#>?IuE;3x1%~KHmcqD^;9#92qVn_V@7

O?lzkA5-lv!i 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

uUbJ53QVDd?=eV+X3y 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

D)Rs_V)S2J&^MMP$qwP4ErD2~O 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%0D{Q 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

1b6p8)6n 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%0D%hI&m|N_0?gB&<3bLluK2G0#&& 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%0A@_CyI!gIbSHYjRu9oZ}D1QB#T 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ðH)g&!m@g%Bl2jPRy*x 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

gB{U1Sy3ojN-jV>p_I&XpljB2YO?x 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

)BMaM3 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

GcPV<$nvkaPJEA=WsHi--> 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%0AAvdYdeD@`^Zi;M7Ic^wYz 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%0DIJ#aFl|rYqhN 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

#Px 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

)f8{uvLVH8|Y>ALL3^#s?qK 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

8fKGsle4>1x*I?wD@pTJelr_^8sVXl;_ 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 z zG7EL9F*6Sx&ZP)!Ri+@rFjjBKZJJ0yO&aS4Lyz{9ta+K;8~n;>0#d?F=DDVrhL_eI zRR~1o`eI_l2v7<0Ww=SaSPoKb2b#=jOVdgn7EX52mgB~)rt<*PQBfDH19~-dJqFvBvk-*SYAjXbknuQuDz9FR!BwhQ*w&3mXc=RJ)iJ{3&Lb_c-kWz$ zmzM0*FU!U=j#S37wr4112l4fLb*PIX+0utO9*i7{zi^kOwPq6~NSKU?FWF1%P@*uP z8ojqx>I5cAuO*W1#0hOJrXKaZv;~BO0t~64HN7Px6-h-Pl83DEq{eEq&(ElnTz{)K zA`;HBw4*qidUr%%LY~Yf)MSI8qbk!(Z7e2=rz2z+i#0|o5MLvQr zuxPC4whV}_Y(hioa)*-Au|n00gjEX$*Xab44}0P0U)$d&1GgDBg98^t7zjpD^axNA zPwn-cmV_~7hA|A`GAyPIASluzf!8yQCvua^rC~xb({r--K|vjcBQPM155=M6g?>J$ zlkW@nO#3?r(%?5Dv4D29k$d|9r3w!ppMe^74C{AM%$(iLl_3$P%8!$dvTbisvqR30psOL3C@IbPwkJEen(KA&LV z6F8;qz@aRsH~TvnT&dk~kJ!W0Jl-EP3X+qP(Y?+a_hC$Fs3hns@u3G7yDzG;a` zdN~;r&9hwpdoy!=;sRXkhu)qbj*gB<;bU3J!Q^RRZj5b#l-xo*tD;v{hHfTs#x1Z| zh#3uRzbPTA1N9?Yg2G6k*cEGGFdML7boCK_*g7bNEJ)|v1XBP?lGR+jmVB?IP%`HT zldvQ5StLxyws+o2a^C{c>;Z_T++&m}>-LW8sX#+%f1q0VZ z9>Ybu;d79bs8GWNCE|aA96f(1rf>2IXJXmx0p>s{D?0;c7wueA&3DEQm8*Y*0;;m(0ncRXG zc>rgbw-1@ko)YspQ17iRwYfsNEKt+bK-a#*Rw8fpAR4InEDGEGxlbil z%0kJ?eVw{uBI(UT?7hq9)1Ul^)(hCRc!2{wm6Na}nqH1~#Vc#h1 z9>{wUMC~SBzn0X4YG`=T^p1$yEL6c_-$}2XcTvFiy6+&Wc661AhmdnXa2*7?kE*Kd z*Y2y}M5*NR!H3rV`7DRW=>Qgln#~WM6Ge0)D?#muUkLU5`WL$J7Y(6#)A#>>`M&;r zm*_uTAz>3!0~c%O|6Zv7y<=9aDxriWhWtm9nklT`|Hnc0tspf4zbiIbOFwLVbfbj- zx?x~8eHbVV?lgHd0y>!ktJymQ$I(e7oUURZ7A!2pa^(^WJE#g z>h8O4Z}INQDqrs>Zl8oVhA%O(pN>JdwM@ct+CfnkprSB1fqi#thVCf*8O4Q5$*AK< z&)qqeNNb^blz=*@`!)94*4mI+w_>=j;qEN6!l(xSxp>#&swAsD`oz67a8_#wTgu%` zF*}P}8xY-b#Bn^ykK3JUoT=t?E!c{xKWXATF|*ace0PKcvM7CqHjZzn?1`*eP%+R* zR+jh`MM>1l?+E-!QV|BhIX=XOFn^Df8pdJ`dINB`C{HeW5N&3tHyLLZz-?k99}oCMWdS zL9-tR2Je?pXpG+&kdRaewR|XBaUsVh%VO8z%~tTVoyiz&?jl%-eehKT%4x>=Ndv8q z9OGdwFI`qsZ!@Go^smAMchfHS6cN%!C1Z3$Bv)3lwj9S4x26-SlOl#+_fol@-G#bv z89L(~+|_2miF*S&@x~gqVZ`xqa#>rX`QDjHzhX^(VNIf==lw#0al54uIqKyzhsh-< z-E;Epw?EsROFCsDN9Ll`t4R56f4hw)sp%SNXiTxaC;l2q$d3bn7&6KOzw`D~+Ik}F zY6;LRN;+t>e^%ayvQ9|Z71zV)oo{j(tfn)H#?Tbn3J6he*2znY6~=Qdk5}P5I$mH3 z0yfUKsOxB}=*6M6*MrhwTck*|!kvCP^dY;94`mr;25rz5^Rh`q*P)&`tzI%|-?b23 zO69Su0-!;NAqQcm;hVz!GucFFEhk@ba|bKGMjC}t(VZOH%=Py+>!OcuF)W6~6`BqM zTK6WJWU(DR>|$-ODLuE)*SqmSu^y^QQ%Q`hQIab|#;H$1i51EP0S(|uN&O1al^|Sn z1{^*yFEZJ>u%61 zn^NyNFF(g1vGeMaIrnWNthw^x@_@i76n@&LtA5L3MIgH3h}j4I#=s5=kTpCluv0^J z3p=u!nDm(#VPls;l{Jk1?UFTs#Qjt61~6wI+INuSBZl`Q;9eK?x**_U`Ip83$XJBr z+M+TvPOw*wGoUd{kz0x?=$VB}jOsI+eJh*26;>M=7JEg2pwE~J-dnj~4&t-N0?ZuG zhJC-0!tK83sf(uz2y@dfbKKFDxmWZvq1quiJ^iaz%h}VoMC=3gYk*8Z059aT%*4u&|G>lmtfb;iIh(1p#P7?)9k4FM5&$U8 zg}oh_gR`F@pGUHZw5mOtb&-cg zdXnpDldMAKP0AEXjhZs@u%neAh%C$+A^Fqy)DYw6a#owASbEJTQDnsC5J z`N9$9XDFMJDS`)k@LA?W{z?Oh^CBb_oGqY-iHi9`J;}h+*B9!*$>UZaX_@!91a==w8NBJzXmcpsva2q6iORcpknMt58SA%~^5)qiCnAB>EuxIZS?Fcx;DL>(`u%hFi9al}|^acK0fY zw3`Q$-(P4Ay?BzH*l+mv)<43(zqO?PZKU$oZvWp|OH;T-Df6S&c^>QrwzCPW;_o3sKvB%~!hpIH`lLsN7cpwL3 zpp=vq1ZNVeqSnxwwgzKJ8F5E%LQhm(ZWx3JOrWh`7!Ph9LSL$E9>o@VM!(NaWe7={ zEjLP=Z9mxT;YB*O8G%6`RU9q5IL&Syan?F4HgCth*PNaxm~(X)th5`Y0r-t&gFc&~ zH{_#5O7*DeIkC0lsprT&hTbphP!@8PbXM1f_FUS|BF{)dPZg}{i*xKyT|spe5ohk0 zfU>-qKn))Y90o)Cn59sQYH2a#beVBFSJj|Ns4T0{-O=E2RXe3iE-%@9E!G3rw6g{QV?lv;&rIQ zQ)Wg?r9v?M>jQf-4H8rm=lJCq#JOnd=;{-J>)ZX>r2M(ICkUEZID8c`t|L-KDn$}C zPVdNdMcXb26U~|Ke*Io*miRyZQ^pl(GA#2Q3KyvqS~dkXMtGDShEJM?@4I|xnR7eY zeNjk&VH`qBmqibVD<}gP#CeQ+(s7Kjyl*9Mw_*Eo@sa&hz-pwuu@A`A$4^8SfMdsfJu>WK&|9Wu# zD{>Waw|6vga{4AIOItYom$huxgm710M&WfM9hWxMbsfND1`myc2Mhxz7M8%r1h>Km zADWQ*9nYOM1>Fd2U%s!JTG4z}y&+k-RK0B37iP6h>7u9k+_6+qt=Zbqq~bNRY3gx3 zBlW1)v{V-8bFRkOw8&7zfoweW8zlc35Z6`veWYE^6GF zd8tn(e=bZ&#<4z5`y}KVk(e!c&6Rz@?3r_AY&Lfl%PXxfTNa2Z<03;gupjGF)5mP?0bdp*?F1MYx9ej){ENGF)5e5KY)u z;!u;YGwdT`tTtR*?9h|2GyEfT3`W?NINjE+chKsX2gjyS$Fj9caqgK!qnBWCPgSQr1!jL?tZjxatotV{Y3g|HUUBYNyy z_|KWX9X&a$gn-6_t7L!N#dEcV)|fwysr=mjbI3pe-4=x>k>VAL-jw%SRqZDo{n+h9 zK7G*L)AYW-Iv&L2&KpR7URxnfCl>ml+gLX*12%*tbVl_EbIbF~`+2=zqcWX~RDs-6 zNO7Lr!%8GTdk+yl-3BhWBmrVcJ_N>Z+i3BA9B5IJnMyqgJbU4g$JCMKN)*r#00#2c zfuR;1gzg1qUdVC_2lEI5&TDLlP7G;j#x9i$h<6l@Z00tdhet+o6`F(L)VCOW`KQNy zw*czSzT;EyNCD)<;%?eI5A?R?)M4NCQT$qkr|~^f(EADwRf*#LBw6I1;cEdpl;%lZ z3yq>)EyxnmGy6CWo67cKa6jT;l@qG z*|q7ZfLxou!Pr+zH|Fhemv&meL>9X?1~w>w{jn@HH(I5-<2yg&MW_9P7 zo*eYB&P7QggA799q{py6>U)DRF%1oSv&Xt4I)>5(Q)G-MSc8%Q+f)-YxtN%iVPaQQ zY$u+~LDZE+=N{ROvq)^6>g+vC3Uqpjtw%4nl?A`+IZJdz1>ar3dlYNSjA~4)%i>{1 z?v(ga&CVaF?O`mdX0c`R5{GVbr`DlI67Vl6<<$&z+3VM>DMYhM@XlF=Kn1qOg{ivx zRe+U?Rh4bvwSp*7D5d(=+Wbn`W7m-Wjvm8#0FFT{h$1MRsKOKFGlGGf2p4wHDR3z) zSm6afOl6&chQlW;$ak5{afm#Nlb8U{qJZcxByCum6JWl>pB;f*L6zXSI5E-5D#@)M zEXyN(mL%wqCS`i{tgHZ`Sik_`2uaO2;`bh~U&0s+NSe1Fa#kTNEgE&|a;lOv-1IwS z&I{S?LJlV%LNVDQiY7c!t&#`Zn5C=-&Ri}u$WUT`SPv~(DBRnAAtl0p(0p|%4kFY$ zntA<4S#^TB1YFe_LNPx)-!rnwP$>VAV zI+Wob{$7>x*W8^w|LFl$VupFD8imcsTv>aeu5EPxwMo6Hq%DGCYH6}ntDa(7%OK)b z%GMiHZZ8rf>h#45CJ~dn;Qd@2dsb3@teDAsbv>|rElO4!xh!6Oc_+jRgxEC`0aQ)LE-nJT{-^UMv$cYB3_=7KPr$&a3d#yCpV7foL}{4#U{}c1*B@YfkGq}Y^qVzfCf__BN54XoWcWJ z0EI6YBV#J$LsfwiBPxSabTE4fwda_EE`A*9zL_%1xo;nAI`3NFuAS&<$T&q2nX}KppR%-2OrYs`)r{D199;-#w5&$F{ zT};Tu^%22-E%-FZA7??#eDVmse@##jB||`!bRAsSVTI>wB@`f1_5BSV;^~EIT@lCG z3OVwLqy({BZB&b;s2P@$LP?Vx&(u;tE-I!i4Ax~3&uE;z=dX?dT06L;+$YAm7S+0^ zW_Dk1V5iyWoFwESDOsjDvOg!tFkdX3`-KedeG<$SLPQZs1p^*+A?OXptzmO{J6?zFD8WmnX(g`B&pvbk9`#2!;9f0r4m;{+j(uswZ9p-d5m z78I}(=aM$5lu(*z)(U~V9DA{IaEU%Q?X{)XQ?hRrP|7Y(FAg0`o;3^#wlwTaN(RY4 zCp-Ce$8#qE9Kc1KjZAD(m7I;fIV?uCH>hq4q!b0_8|TPAz-<EV#v83NP-8tjhziUL^rhf4Vj#KshPq$wfHKe~zzU=t z;ik}GE6^vd4VoUpGlU%}3}hYr^{-u?Lpb;7dT(SP zj`Xd8-c)t6tEE66QQkClzJ;P|Xp8R&-bZ@6(3iZ654sHVVg!Y2=>E~A%lwzVVX!-p zR!AQrdWm<*%8j<5EYbQq`YZ^m*jUJ`UYXK*Q%ps{8qnp=`<-^=qJ-G1RJh z6ISj(n&RG-VNR>qLRmuhpe=L9NNHk4nLW=4z_C-*b<#o}<+ZWzMw!3ssEI;Sb-I~W zBp2S-Sld!bYUsd@Qrffo!gMBbt>LBLIn^HFu`hpS=y>ptf9s2cD(lKAf>oAjF+E z={tiQe$Qte(ga?&CS9ZtG`73&aUSN^Km`IFqIi-j_~9As9QYc9b>ERmv~{U+m*duC zJJIKViHk=}oG`J}gk0Lz9i%N9JG2emW$#Sr!(!Ba;lfFlubEhW#8iFPkgd%bX^5Bt zY53xkZyt-kVq{kO`)qM@5AK@fdV1xF}VS{^YKIl``qepzyq*A@R2VWyyB{C6TZe6r{DG9?9}5jZp#j4KvS|< zr7F~yaLF#^a5kTqk2eCJWWky4W-;DT1F`FknDR?oUm?(eDZT_;v0T;-sEcW{!RV2s zIED7b)+v|6g*5JA0~8lS2~#7DfSn9SbIhPOZ=pLA#3%%R)f0@rWsvRcS7Cd(EM0iAWQ}z*noz6vC|+N^D!~?eocXih!N%_4HjC3wm; zWLGb6f+3&_sA?gQ8~rerg!-ZP*rAcMIYwucDkF?47R^m(aeB*Eb zA}CBfeCx)UrEl8#$CJ<^Q^9!om)36`HuT(31De@^$q;^b=8nX}a)zRs0Lxvph~$dh zRJ&@DW{U+1K?}_0iBY6K{mZp`9Ma1!Q-6oZaz5m>3_I_9tw==rm(#?^ScC=awTQH0 zy@BgC2zs%@tq3tdR&DEUzyxnqqN^iU;rjStklb&=_O2N2T+)SxfpeH|0;jrUr~O{0 zR$V2*x?D|0v1W=eZ<5yw9Fc9Mj*?lB9~cc)vNysASwG=kf>)JKVglQh2^1?1aBwVF?F8g)>HH7g1C;hcGWE{o6q4yzu~`_nA2WD;yM z#+T2lzjMH4C{6#+Lk+wwtGAPQo5XyB$#~NT>}{J^F>@ zP_VNqj}621yxax(#nZq7qVKj2fR@ZXRKqvq&*0T?z@Fv%bAdd2SI~iOh-%eS1>?mN zADBmXgm-P@-;gk%7|Nbg)KzK$8}XV;s22lUrMx z>u>BHI*0Gn)pw|#-tS)D#M39<%a0IM$r<|6Yr3y4-$HZgc|jVR-JAl^u=-7?$2hbmKo3!+9`Rp>*KOY7Msv)eAI&~+I2NeA zo#8Zmr>@~=`b^H9mj+{MmU@g^NtNZ?>LxWV46c={%1Y^hVveLD5~Ag1JC)I32E4JT zS?1Q_7-Uim-vn@Yl*`T3KR8g-_zPfal)&L6238h~ftjw}8hvnilgabyy~NkcD}%m4 zWI@|7U8*r{7%{0)V_LDCF9&%;%NHC~$;JErl3>CRsTWWQ0^b8-6JUqfn1y_*QsYE& z#k9FFBCcYh(cysQo>+yL!e24>m=06D&SN`5v5uKv?$Hc&}Y4?V)EEG?QOlEi=1+Z!^n^8WIC^p=(nkj?zc2)8YYv8+g`Y8Ivo5f?^T|DO*6n z@E_`^5eqB{gGR+jj%&h#*@!hUWZJkHQ4fQX4gq?&lFk5XbR14SxeO4ePbGeEpcD(% zYWgO?vdXI6%;?gHFB?!=%!eDUH&?@7F~nZtC(O)0oekQl%$J+PM?1=>(Jo3dT#Scf zA4lK9kUov7C+mbZAzvT-WiLJ4P%3}$STsc;_va4$Ja3r@E+cS!N*H`f5S%$L@VFrG z7``zOuAgp}QtyeUttrH2x$K;MJqF_uU2)w6n(l&m#ArrgAgUN$$l^_LoaD!XC55-x zevTWlp0r-DebpNKQe}{bgV{yk3^i6ecr`Kcv^y=Z8>D_Cl>f$pMR*{kNpc$r)e|CR zwJKj#uU{RbQ85L5mbfZpX&4oQSfp#dwOpiY8UK+a9u~d7u`wk1Qd;qCNv(%_j6Y zLj$RpCErIM7X}oPGESO)k4^%)6v8$4?Q*ou4!xMaawmqNAFvX6Im-yNW;bZS1SXVv zpbkhg0aK572f&Ak??+lJ+0ZYA2+T~JuD72EOzp=t8w8e)4hBpui3rr$u1=Qk5;+tf zw3(z&XR40}v|bhm?6NR%)e9E<17?uN5#7oM#`2(eTSn%b8+_nOOXgfV$`gq8iN@qg zq>Nhl)Yz&W%sT>1TDbWD5xx5BC*j7ST`}0}(qtV&z_vt^eCrF-_G_LBRtwMxLVX;f z-(SMmUn1`b+j_p(zpMue)<_>jyI|{S!}hixqI)$^M!I~$zN|#}IM?sJ)~jT`^n>&S z2LI3)+)hUFgtdyS#FdPW>$Po*Jr^BnjzAf4C_dd6v*(tm=PX9Kusb*uuaB{&D>@Cx zCL6NX;>8~Mk@rm6KV~X=Nr53-rdtY?cf|g~jGg zDr9?*{xQ<*G?gu6JIihk&DN~rbR*$#c78(snOW)iNuRCBEfKvVHt_E+gFjP!&n9|i zwh4n&j&(c2moEwir81K`J~^9{_V?hYhw$t&&n1(If5lZ6e#JE8<~8Kv-dfDR2;eDx z0mOoS{nI@|O?K_W4ix}^QQ_ZJb^o1o_5Zu7t6*&JZ2aGa-E0+WMPyYJ9~&gK26YfX zd2??|Y7#6Xa%GS}HQ<89TN4y0Z^uNf1BMBkO)KnI@W0@HA^*<9a~L|UPd{3kz87+E zyShT+6A8PfwR`?psBxXNpJaKC@_v8aq509?2@C_I5Lb9NNws3q5t6i)0^MIPA$ zxpN`TE7n_$t`4>etRu;6^uKcAd(-ZLL-IJ^?CfFE z+HEmVrE;d&SSVk2?Z>Dz;nW;a4p%gGZXc%Whn++>6n8R*G8zf=PgXbvIZ3!t-CE4i zQ`B71No9km?xQYjuQZ5$LYR{z70wVSP}612T*bAToU5o$bjIi>H!=@U*#pv`!BjTo zX9{KQMcJx3!YX#2u)X_C-!>#zl;&CsXj5O_7GxqKqUKIzTqAIXVBv}R!PKz32rrgJLly!(X?V?OBWn+9&y~#? zMXX;srFX8SgmPv}1$%d-$JKltToE!{h>~nvCEjt&v~cEUdvk1g6!%vn4H#@FI0Y6t+f<-2rDv0k2Q|90LN1;T*-1oNwC|lWD)2x4PNxjniEAq>w>D@ zMG?57A42i;mBIvC8&J0SMM8zxi2(IU?WF`bveoV~)QFLhkr@c|nZ9cEQAt3t$z^~v|1D!Gy?)cwv&cYK{;lE~i7_b~gs33^u2NB|eY!TL$pN`X8WmSTD!IXWX~ z&3Gj`brFhr`4o2o%Y6wNo^aQ=!Y0lx-0B^J2FCXPvBhI*NkAhPKw z=N&2Zj+1m${|CR=SJ>*Z*_6g?R42@SaO{qbIWRgd@bSVm0pP&s4OJX5!FJaK!62dv z6jpf4BXWDS@ruL4*HX{b(^L_+MphNlF5PXKABlNAypg7W{Ev-&&(`54D%*!^Hpv!D zHXityIcWL?L<0U6)ip?KI%)K%NC2NfQk`O^g=IlQQrKI`IuT~Lgj||4uAV zMehBCo7tU=s-+U6C#LZy1W9WK>Sm4;PLp@6dG7n7P2YdCxhAu&=F5IsTq^(8)q(Xt zwRHcBkNyAZat*1fdtwivc2k=(&6fpR>r+_;ruorpz!+NnZlS`aQtxMANTF5-G)!5R z61Si~$9;MfW3Uep{Ecql(wNB{L`~!ma=`Z1bI9&KnLCO%>e!RDv9OhKcAg{5b;z%} z)M}IMSaH5wo#FfSLhDOduyH04&~f_o%cC&4rj+$(3jO#Bq+9T&Wlq>5cIv~5NACeY zGj`Q$@_5CHNB;qfC3pC&5yU!g=IsEQMYrLNI<`Z4Fzbxxj;MD){RJGRMzkPq-jG z&rhCRUMIf|lOqqi7O7XCLBR$ToMIbD;~nR%k$j9k$Qry=Ru72H*=DyMypibX58PtR zz~IJkwj7`&PRZR@98%I1&2BJ7JTJC+3bE4TfpYujVCGLe+*Qc`VBN8*oWJnZYJeKk z1a}aKwllVu8~lhM*GG76YT+_KhiHq(qXovdD#6~fX`~gFbpQuu1v@vaD6f;VcgNe~ zx(f}2Sdm5gOJaiW@Y$YOL|Znlwh-LFj`E3LSpY;%=G#f1%I;2DS7Kj=E2bMc&tZ0Y zif9iZ_rp+$o~Rn)y7bSYLGSLI3bU`dI(g_6x!YBBg3pl^I<6xX1=%Jh&FXKU z!plhGNY_7;Yeluw8c*`P6&p`wP;VaminqL zjC;O*BX(N;;D=W@(dvWVbnaMn}Pa@D?BQv>>_~V>2z5AknyZF4Mbi^gk zX&L(rVNjBc*ap%XLbNA;jcK%NRVpbVopOv}9oZn@O2pfVv8MPaLnRV9fiMQjRZWNjQa1Zm$aq zZCiBEfmR=fp6EWbPGst#kPeLb8GGM{J%h(QH7KtP``8Bp>V@gmebz48@IAo(_^<6X@#@!E znG6vH$zMC16i*7d5?hOf^DG_gGCSo>q0hr-4H6$`q7<<6aS{Ve1@rir%4a;7if29? z74!5QHS>@e3TGpaeiEc-_;C$>$x1Q4X}8Z7_u`1t8oXuo1?2x*>zNhAQl%L8wT;dJf2ZeM%t1lSt+FNjF&`l7wN%vQhl z!0Mj(&jx+3JX3HcO%y%4FliMGZ}&(pE_z-NM|cPJh)DF=6rf+qL@aDA#^lc6G(~cl zvvPqLfdg-A3&}*Xqn0*jUIU=Ds;Lrgo#`>R-MO~kZR9o0Eqw|`2{rUL^h3I_bu_T7yqR4>YY01PBm5SA_#58gmY6^hvbe7DmMgXn(jPQ^6t z0Mfw4wD-EExJTHrDP2e4IzF`k(k#0M@57>ibe9TQXV$jBe)TXkThn;itE-X5R7*1M zSIE#!p<2ijr34bsBPToxVLbD{%E9*6YZ_k)I_vE~<3&iZxd;s7Rsw&}d6jAJty(iY zyWy;g?h1;-jHno2j&anD>4VJ%t32CC%vtfySuxL4JmJ!mMGBmohmm@s1k2S9k)u8- zOI|))p&Q*U`(hjC-h>;vt~@+U5!Et~Mm3yFN5gg$tqG<98}G=3GpvPU*^WdnN+>5c z;r?rHz>t`0qb8;CN(yJqgmbmM4mgHWztF39Mg;p-V2IPdv<^kwFU*$ zKj8R8+59%i#T*yv@~xR+N)wSuc7f3tHE*gGVDm-t4-i-6a{DOJ1{JbS)NijEiv(`G zb}vn%40u8_A7$sa+Xcb^lS-)vageFVM+MM~)IHCkKQ=%^M;z^KUOJ-o?kK)P%axBA z58wUYKV%nhh>u_P+x0&lAj_ElE=~G(o*n;8lm4j``VW7f{~~(*w=jQl)W0;2%$P8N zOKt&vr6drWA_zmv&q7=6BOtS6)`^4En(P5`CAIZUPrprmdzrY^z8paQ4!G%e-b3tC zT+0YzO*iPjB#Wk+eu-$UqF~Xdu}z@Uz7R@wE?MAaUAf;k5P(Q*KzPn-+)XQ>iR0T!er?@P6!i7;{Lgft|Cl)b-+$!C0?Yj$Kj>dlxk}cu3vwtvG*`C+wsz&mXZfI{=e=?ob>iR9u5q{!#v-zuxIfCk>H-e}U$fMY$srLZL|&q4F@( zSJ=(ZJmIF@B8W3YuU13`;5K>5n2RD%7zfcZMtgY zpKxw)?ZPU*D!hIWq(RlTo6l_RCD1Tx9L9vLcz zZWdm%K;gjF3r115X+&Kdf|eD>`yzB!xm#^3i7^-+W~9Q(%LtA+wUWxyJD?#kWc1U= zA{;MD#u%a#yg3>}M{@o{p4?=0-M^^W%q%g1Z&^seH265cYYFy;beg zkr%!cr2vZ%Gnf`*ucZH-rt!=8TudKkrH@W#8%N+t&AKl3lq2xjpDP5*C{eyD^Pbd> zaaxyeEwBcvg9dezz;fi<7CAU#L1!#RbO$Ng$B&+w+b81ij&~e(Q*qs% zcibHSS-s&z;@KSONvVgg77lZrd=j~cU}T=Kl+)o-=)-AD$ca z4>S1xM_~U0)Z#WKw*Lj}YUM431v!K-8O_WVp@>iNGP1DM5CcHrK_CKUkZMry5R7hn z0rq7*G5VsIDA@wq-DtFPh{@9^_+3HvYZ8A0y)5#9DU(LimyKLo$NP_&SY3dSTPA-Z z8{*lZIX3fF^{An_C{9Qub{-s6x_CaALMjr&wuu??UoS{$!`z@Rs9XqP)fdal^UEPh zbb_|BpR9n+(+x%0tWQ(Y?c{VCWXj8p@0#AyCPxvA)B_Gh)@LRy=jbLb{H;&Ua9PR6 zAx)kyb`C*f+qlQ+{h0Vh(pwa!+D05Pw3x<{t`#iVtza`F&EgK>F<2>kQczqnIE@j4 z?h6w@@m|Ks2_(=V#F0x+sOGe1lqBjI(8&olG#4#>H$C+GT?}S$^uw8rIx6S5V>-W? z7r$(QIBpYBWGnb_v0u{YSS*u56wgk8V2#fftqjW_>(h;k&b%EoAz;1?j>P{p02KISfB+nsT%n!72==gndD}M4 zTyZ++{;QE#;qk__0Y*c_dC^Qh^ zh=#0xiAKd+GPAnFd2ogG%G3MsQ4N`I`p_G}mbCm^Nk!)4Tyrs0Uxq{1xV*QaphhJS zuqZqBI=Qb=yWgKbcHa-OU@qdn6=h9NOR(C*YpxNrXN2g@rzRPyU)WdH{mH~NfD_P0 z?=y1rJxH3hgPOjqgPJE<2y}l$O@vvw1R9c!u=YWg#Pqa{+Ao9mkcxvU?K$==vgm?v z=a;-C!PUEvYT}|!8WDF@SFvlBJpr zwd7Gs$?-bg_ksj*#ev{y#>)~|#~bY16{BlA3Dc{^h_-qpensuN&BT~>$@AiSksZvr zBDj7^HnUmvAHOZS*?mNlwXPzzbTVBB57y|ANM1^Sa}&>WgHY#P<8o(YjabfI3x35c zV?PVA%$eYkh63}>KzZ+Gl&*q30P_#FTNpye?_ift8=WaMt_ZBV7jnxQA5}!G|MQRg zw`#XPo9f4v0uSQfZOZ>hwEn+tn}6*^70n+r3Y0H6@iaONU@L5tu+F4U^tcYV3DcneE6lR-qo`vfiSY^mHI z_uig2jxsub|9&_E5Wb2C^OB%?)er=bvrAE?o%I8lD1*?U34k9Lzm`a>QMYT$)s^kG zFm(~5-jI!svzPv+Js}32fV!qoL-g}&F;frW)|`KNiT3v2Jul=ooLi@$B(qChs1{Wq zm}S@3C}AYujT~A5`D{FrmgsCOF+Qa1#0u%IuuURk&!$Fun$NJwbkIe9&%Tl3kTs4x z+G_d=>@h5gh81j;nxMCmq%Ee5QJ0{-Xz8IWq((319+-v*YJok0i0j=_a|sGlrMmfp$)nWPv>|&)b!Y&!gNNRw3c+GV4+qdZGD6y0cM>Z z_+E~ZHkX4wiqK}V$*|dIA}cXsgT2}F_KzejO9&wfVbU5%>s@lSK!>eFPe%MRTNmPq zIUGNCOT5gyIRcFPmBIuWq#b_2WO>br+0#!}xe@mZ2I`Lu;_)LlEPSzD8BP|L04#tc z7Uv{T<@&FMco)TmvOm0kl5){r*`H&Ud!U^7xxP5=ueW7QI-=Rn-E0v!+3c}Bm(Ly26^$hwy8;3g+BxI{2nL zf_Q6;7Xqf8qwa$f2Ci09gs{&dSyms;A#8Cs(B5s`7<3IKYcNV64CFGY+uzS6 ziUDa33E!Ei?S4ce@UmwzguxcR??~pFp3F+F!uf2xM zbIbzt2r|YRKz8U`2r(@!{Qb}CKXp{)57bZn&-=$x{C~dw|0B&^(bmC9!2M@F)7jCO zNY26b$Hvpi{a-^tikhER*Fgl- zD{w3^yge6&V&pxP=uniLpWLlDHJC2Uw?!6{jE8NyXcm#b7L5{@DV(r<#aUV~-emyC zYc3#aAmY{IB*0|RC59SdSq*;|I~T~=w}uJ4L?{_BZ&pLzpw_Y@lDEo;?m7L|Xk}6C zYk9;|J_Jm~Uwz8{0KO56Zr#$#3o?LNbmhBTK*IBbE~jIn$XDe2E!W}aqC&hj3~ z*lFpMwP**M(9oNIA3_9QGGzY{(Lr?7muD|7ydt$Q-2{0pV~oyceu<>k(R`~0xyuDA ziwAJ0cM9F^UJ=}l@Rt|#5V~E3P820CGGsTP`vJ!re`KW^8%@*?q=pO6>o z--f)j|EcEve`5Y$`P;vsZqjMIQM?(E=l19Kb3m0AN>dO>1jHDaSOxJri#4h7XoKW) zLEp|{APHu`eIJV8!mbTOsNN zFcX+b%rwJMtB-B}+X2Cl&5#SIKj*i<5dZ~U9-^&RmRWVG84s_xzj8F;TsKsxAB#6? z=pL21Ss~i7mfMlTVRDc(vkYyojBcawo3$!U=w|Y2dz6-e0^MiHNtJ{9;4D!jMjDI} zkW5=hHfZ1pb?K_I*>##Sw|j(Zxb?$Bc59pj_c}Mvf)=@Wwb+ZE3;CkHm6g>A=5vJ4 z#_hr}DNrsJrI#!b|N2pD*JE6<27PC+V&^M)NMA3u)1qE;JlUx#)E-5ml}32{=8b6E z2Ae9U?!OAU^vZYBd3|R;DLyK3s~n>HF+=Ogfalap>y%>9ww;RnEKy6ea1b0TBPXT_ zy=d#B^P+HCdwI)O$Q&T6!F0Wp%-3wJ#~y|~%w<=9lo*!YP0PCpNmE0gB2pLhon=-z+p_o*?d=ZrBQvG`}C4CLyDb@qYb>31hfh+yvqjXR2!E~7=!En%s@o2zujCD2W@|L8`7oWzIw4cQw zTtU@g(D4g-jrSjjt`#D*asELx<-bKV^Zy3X|EIr8v5MtSLmS;EWs}7o6$U6kL9x~! zL~+id5@lRj4ulCpxY)(tTCL-9cq@8U!?XE$JKe`z^iT5vjBXa(RTG_}$?3@SBkyBv zllL?Uk&>e5WoXugXU>az?hCi+!-(#m8bG#yT7fnM|DYx_5kj;6A&6l*+~db&1QG&> zy@Du7gS&>hb^;ZWp+{v5RY5mu5as|1eJ0{}a}36U6{9YicPWr$v57QPQ73;o(hODs zIs&u7E*Qm2HGLy{=@4oU(GW^P(u0mDPz+W9H${O}6}0)3D;IlgoGiuKN^(JF#_}f1 z3zOrdAU>659BBd3&$+FVK66W+p(S?eVrlb=^2{2O%!>H&_Kx`R0~aid>AA4On-&uY zCHAt+bvYX!iAK>SazSLDYV##@MQiOz=*VPY19t$(K9;S;Ef+}Uqq3+uf6huyq!=#t zN<_p=X&dUhsUZSm;!(nu}Z%6ZuaFbX9U2C2i9J`YyknJ%zYxx z^`=Tq5=bRonpBA)Nn;LM;{5M#V<*CgxJEckwYp0T28c}d0lW97Nvbug+XZ8FFnxED zDvpH=cEQ@Hcce4ZaMq$}#sy6$(=w+|IrW^Q-+%kr=Z?963~ATyJXvWSq#|;BP2j z0q`8SN%Hei=7Y1&&L1>xqRpu@X9Twf?p%(X3`H7=FVDNj~*sB5gKhf5r6s0`cRiaDLw%6APn4Fb9cDPBPapr&`L0`OrZ&9=O@Agp<`Ym?MV zH2O@@;r1Lsb@O6D_pH&E0|ID=y2^#R)U@a)re(pZgON;i^2KR!A$e3VpbbTkw{n02 zjE6ZEw)U-LX+L03DkK_UWvAv+Anfm2l(?%(-E6F~lUoS4m7cep8bYqWM4wW+b9kIX zhCB(rm{jHDU@$Y%?M=Cd_fh2=)tCRcZQ%O)ektP})^qaQwpp(=FQbOB)mU^+x6yR5 zB-=ZdPclC(F4i0=4PcC>rBpjt7R)?_E8#{GtP6tJM3GeDZfH z+!(}%|8|66l%->rU;K7d-sSZii{TsTD_g2f#dxJs%nKBMM(^rHJ zQ%B@5tG1iI{h9ljnG{R&%m!3b=KbRDAHueG<94CbVQ zU$A8d>oOkIrLEdV3XzFn?w2uhH~bCUeW<)Hc3x1{Iw;nl!wes(vpR9jz_gx7x7}lo zsU6`6MOy?*s~+%x=H!T5Bx$58pF8+jTF~2~6BHDrD)K|CEuw`JWhK_mPT-k`>kJkJ z&Dhk1HlUooi6NgOf5mk##sFq^Mz)LoFl+pY3h7*3p1gx{fu$B0gLhqUp#B{NgcSuu zT*$X=h8m6hKfBK|Mm2G+u;( zLLi!Nvk$u27x|ijv{i^LF#OyFGDJjMup#My+9MoGs?PhPE4a$DuhVBf{Z|OjRG64d zFW8L&ddM!8g#hsH9Cs4A3tE2e?WKZ~t$l;7x%T+q3k6&~LJN^7XoDQ&4AS7Dp)f42 z6z-^&RAaXcq~p@7Qtc&ao63C#Wu~tecc2n)nD=c zao%@G+(<|Nob|r{c9fs$Kb`j~`c}@y%0E`!{}sMOD@n>C%cFC*GF~MyaDjR$qg2mM z|0YE7xlb6E@3=4(6 zk$&@W{lfLKx#9Eu=8n}%W@2C#TCT4)5UfImKBp(XGK3yzh>1ksgkOzM{?ryV%bvfN zz-KgG-L@U&mmozARkn7HESg7nqLTIT1$rjM=eZ1GEl z(Q3IRlBe;SeX}iP()1n!QohaW1|kRw1Zmu~h`FWocc;}#K!6nwCA7d>6`xg)MlEW# zW{uGN_My2D+{&E4j6W`(*xGYSbyO$Q3CdOjQSHg^MGl&S2*2wQiWpOFkF*7Q)D5}I|knJ&E z%o`ICZ1LrFd~G~Kzn4~=`$7S+0J6@uhB8p+)mMPK91)1EB*YzzK12y_F+O;Ya?RP$ zLjL-;UaR09*aNKfN!!^)=`x8x6*Y78W6q$ZkUP|TSeUdP4ihhb2iw(85aytj&bJ6D zDBHY&Re{07PEhHN0<5sio^xaEq*#oyShM&$HH28uJ9IooIlQ^?JIz@vkkVJIj*AJF z>z?c#nVOEad_p!E_XJH2Ny=bk^gRo(ziGuMEJ$f5=^N<%n1!@@yQm@F3e%&!(9i6{ z9dSi|&7|HwkP#`p)$Ry*UfMxd6~u|lM1=Qm^h;yuR%yl!e1ni)hT1m{BXmm{2jgaG*8~{M+k53e0R}V z4-UTj>4n*)u~*j2Q`l?}Mx14`IZ;F#!U@lII+J$hUSa>S&)hUhE#Q9YaIyb3uEO}) zXVSt-{M6zyBDB`}F2**rwhpE=`Y!qw#HkJUUNaGY{UM?uoB3b<2a%gB?Gp&Ceb%ZltDylYW}4+Xgyf_m z@!vfIp+@J@q&?&|sQ{ov_i03(U7nSuSRSRa3Q~9x(DI+kH&6wb7!tv z2Xsqja-|g#vaSDgu)hU)_r4y)@D?2mCdz`d{l-Mu6Of!>dg zhuhtWcZb2j314;^CuHmB1Y8glLk!>tC@`@V>D|)Z!XT?W;2YO}5BhcUe0tnI^|lv( zA&AxQ+9DD2!2J}tX?NzFLTgeO;dlj_M#no~{mH|nIIU8B);GNF?4d%oN-HolpU?|TG znHG4gVq&L;#<8<*czRSK43!{6ypIP?gWU|nRN(4Ql5uR2^iW1Md1YXnMA$J~~gSf^I?T0=mTT<3+BDq<&p4>!-Y&&9A=7k6Q2t&M2 zePQRwyJ!{-hGomyc1_ZwcR>t*<){|5{PYSin?fctx&s4cn^MB-ws8^4=mJDx!$Ayw zdf|XGk}zFHqY$g90TjALV0GEPq!s^IZyM;Yn!w9gj)*ai!O0*7Pz#EfddF8$IWm~q zN1n1ckiO+~@OoW1(PB5JXqyvQCzvKXrfqe;I*s>=4+$Y5W{f&{D%zc{?lQG~!c5Tk_#w+)5|r*Qz{jwl5kdS0K@{3(D-i*3$AHn{NehuUzqLm0_|oC) z$`ArmrhG+`RP!``5u@wh9ad4K$qWlfvazL&>e%ROIY5`C4|OYu3{vUwzg-IkB?(NK zpAiKeg`%bGm{}UTRi{r+mj=w&!!wxjt;Fg6+L|Ttn9cr0>2`*@Vg)BWSguQg;~3tYJSgLClv=1~8QO*xxix z%dUk%EwAhR8M9t4J<7}<`MY=Mf;0yT3@3ob-tw}`1|AFu3B?SNiZMWq(eLnrqCLH2 z4VywpkIL5^P-?fx+0V9ww#V`26#Q_yc+im$WsrsxaJ+jIb*X_OCi6C?~mnPp3|ePhbBS@5VlTT9vREtaFzf7Th5aPyr60Mg69tq=K}pw8vj4Es8! z{KwTlFOIo&@~Dg!K%v~X)o^Uo%GYC-wDQx?tOfWg7j3KgtL4-7%K5Z;Sn6Ak$bwA> z7qC2QhN$wMa7%NAMx=0cFv}t9>isX4i|0u5R^ZVP2-jlcW-jo^b64P#XMXc4`ldSI zvkf8?TVqn?M<}~PD?5zuNjSk|sBz8SB7O#i3kwwN96fK;xJS1tEv9uXdsOhLr0H>Zcu!B?84z#W!NBd}G&y!v_Di~-d%$I8e?v%#W zgGR#ADRwdUQ6t;AOEX%?WPx+-#!6porNFwyED40OC@05jq9x!`LkW|Oc~zdjWpLG) z@e9G;HHZy)M^^9REfS`n5lGN4NyK`6Q*(mCF`@{hyp1=dU>&nln>KCHx`?&|lDgA?F# z@)Zx~x0gwNxxXJhUhwivPhW4gQ%H1ak%Nkjh_JiN^Q@(%2fqyCK}W&S6-hCz{pY6psFX6gfJS^K`%nloI}?{Va$n_rwkv6Hq@qr z_6kEKRY9QbRd)mqpl*YmYFk(DH>&cJ$EL{|=4zNgl5p`O#)Qk8tN!Y^5A6f;#G)N^ z37TixojS)ITH!5hen~>9lBd?$rAs86q!aAIT8nRhPRTm^s>5i2+fYYR@t+Aq7!U8U zc*vhFTP-_Il7n%<%OASF)Pk?$H@_>RhA_5IewCud(3O^lG$=5wzCMv0VLfxLRY z$=EoeAxQgOtJ=T?tv0-=v6b`S$y%AeDqn<2LGh=&E)aHeqg&Zh%)1Ju_+^P0gf?20 ztWYLNi?rm5e-HTz6%IeK`3YX6gj+xzqs0}%zLu-bzjN1|_}*Jn;#fP!qNQ=%wVlCyi~Zv29z8ZQHhOHnx+-XspI|8r#YDcFwi-+54QidY$wAc(445 z?%{ikXABNq`tOH}OY5%@6N$F??v65{fP=H45=2RuVVAJcR9N_5^Bg=PodxCUE|G z@WrFFGgy|XZL3-?Pt-#f?4|cpnLR7mfNWPHF%0uzjxcmDo!F6SPt2z>>4t7p98eXC z+!EQ!g)K(>*;zQ@YFh9M zW6bYD31_yC3C$)=@UxPS@ZQO#J|g-VJEgVyt)A4Cce9rW7bkCwu7z_PPXB}Gd$IX>0!Wwv3Od2e5mew3c} zQo3$}UUE^2MrvGge_xV@>W8$HG~K6&60%}4;0aJb*9`*FfA$5{9Pk(Z{`}`I9O{4n zAEYIOL}Zmj=$zb~CbYC1S6dT&9%_2VR5es0SY4P*>D(2KIJYr1u4jyymf6&Utj6=j zaRV9)-&&r?Uz|Y*1R@-=c(|GpB}rN7qrX3diaIiNx1~=FsN8C?WN&T=HzZ?BRS&3i zYSZpKoTx-)&bc8^q{Or5YU{{A?69d|WSj07+&-V48jw`atD3eCkTMs*w6gqYsGoLK zN&jq6YGe|WkO`6BAk6oxD50zeE;+fKJM3B@#XyNdgGwls?Oo?p^PsirR7aC(Ga{3F zMyo4+!Xx$Uj@#2k$A@Qg{kXD(KlLE^`*5)`&5iXF3CtJN7s1^#baw^JC zJJpd>28^A}pdU?}D?fy1v}l%f(Tg{f%V-3##vic_UKP;P`x~}fc~b+GtY)8G1Meg5 zf0;~^pQ)D0lTfPkNiM%J%3KwVh3+15QXh@4*bztf(PuVF9+i3Ps^`}^1h6UG#QDNra{-58KN6!3G7*>zK~-ntc}Z6FXMC5HMRQ{R1?^{R>RJ2h`v z`PG+HJIqJ8Qnz-k@GD89vOZ{WK~(xq)Oe`+r6oRXbO*16cYly?JwlOthF%UKqp^1s z{Em30M?#HFbp~6Uw7wJd;a1WFH)?=FrH*+)fXnNZ{knTWaW|Y~Q<+PAEcSH|A4>V1 z0RM-uFm^p(5~}P&@c3vxLS^=Af$LA%Z}g;){`!V28~B2pg9m=_>0i2(c%2#>K$VCX zWt>gtyQvVxktj2LRj?v3>h&pkjWV9q(qUZc#hm@NiqNweKlozX1(Y+{F2Tt#T2q{H zVnn-#Smowkp&ULOTv+kK8QVT54 zyF(+2kGdqJTsPE-*vNkq%T_C)-Rfv)cu47z<^iMOvl zy0#QVWk1bfX+tlr+D&ttWTe-P^>}=ynq5&$z_E3bA&1%!4sLYupYu~5%pz8FEw z8s_v|I!YM*gH1Ex$s4>5&xUl!SUy0JT_fGXkU7N|1?|L9H{5Y;=wmQ%!Hyh4D!$zF z^~j;_xga8%wMaS@cqvHLl0??yG6H@s_@P68bzujK8uYd)pd_4@+^?xsYo*lu(JLoG zB*rN}$37^z1qsB^jy$Nbqz2LT6 zfwy-@C#Iq%fkLhBi{mzgTpTD*;5ALKL#0w=8Er*BZ-JL(XM=w^L{Ow$WYi(aqC}9l zEz?_)k?;vy8n9^nRaker9}=(`TBy&r1D#7&16Xt#js7H1vcLVaSw7-g^j^~2KNs`u zTO6|budkC7%2hCT4O?sP+&~<3l>9$x4GUcA9}n{qiDJ@>TgpZzgMrVAR<^`q9zfjF zmrIfPwgg7egk}?Vy;W%MR;}*olq2R2ObzhSpfRHC=>Hq^BhF zeLcXR7AZN%0q0N#iUf^lKrVGn7cP1d(lfD!%NqMchBcWJg7qsB(jJ*J9ykYBh~4Kb z6!3gup#9s&Z-aHwZ_+IeC_QI~t&~Ud$yOp`Y}BvrOo$DgBpr)wz2W_{aj35Rb*ShY zxn2Fono!+gH<7)Iw6C~%aynL&b zG6qMWS_Q05l!XPctV8mdof`C}@Gj-Xqxxknyh=cjB+mvCDLZEyN*h!OYQx%Dx@3}5 z7P#RdH}F6))2%HMZP~8Ce>|t-SfLEVke)Oha%Ec6d-lHt2Yv8(ceb)>Kd`iE z9Nfl{P(B-DIF*BB{Z_R<_Jix-cw*~>jal$3eRN8^tEhs#dmZdIy`=>m_s>L6hvIb) z&Y^d3gim#M7}>KW(2c9KoE9uNjPt0^WMcU4rdtt+d8_zKDwj6t892pttGUxvy!qZ6 z_l9++Gq@#ArNFvC5DmAh1Yx9GE$jElSM@(0LeB#i(EOGngzUcJIx2PuiRsWUDn|mC z#r49ClXm*#pLgd=V(nBZYsS7n=RFpBxW@F|h4Ay{$YMkanIPQaiKfkO6b<9(3gzbr zBD(8_hOu4t1r^y#epfhY{E7FJerq4JMM}bSRg8 z5sqHAoZhnIIulepDIcChuUE5$A<|C&VOY3vGg%q|W(K%w$ z#pHdnWcspd{|Q_+K26e@n!-@CUE{D0^LI7ZOF|2Thvw~+=^Q-2;d~Ltq_(VwkPA-N zB#3j1&lahC^+-Up$#NerATTVafgv&7&zGNO|aFMQz;rK zZ*!zf%f2V==sHqsr^qA}j;1#Go9W&@K&r3W#)Cfioln3Up0*FWIf=;bC0(HEGa{f> z;qGE;jz4K0sQL())oG|FYOid^Y`G|D_KS}p1g{l>kgQkk2}2_X-Ovb%XT4zESmQYu zphoC#tY4|doCIlgDE0+08*`lm|01cX zW)1};qJWR-CK1c1)mXhKxh{nzd?J{u+D}2dpm#Ur*^uL6gR0O=RN`3vl|W^l zLu6Uh*soY`*L?Zo&bJWc+$_hpN0-%8UZ)yQ-A=YLmUNU!Q?{q;b~q= zj89=6N-j_A2v+~|ZJ62CeY|D)Sm2c0IVlN06G=jPfAs{G7v1HzvQ*vA@SnHV&pym~ zEoqckGa*>5a+wlv(&Mu5F=fy0*VwmiBFK;)NK9p&tMvrH=ujPM|iuEC1{Dei|>8OapB(|W&hu*3U=o!MdJ zXgrKng;T}T(XiO8!a4_+Q1Qd^h-o^wOIPvwG$77HS!x*Xh}uT1;lLJ5!S(^X@eH1f0PKhTOjUy#D_tyxT9WzVw$&r zEEO`rGbjlbqAd^_J`dMhxQYQ0Sg=;|+J2dUx^lSN z7+h@&wIsH-MliFoQkkt-B6qE)kUvSK(gKycPI6b0V~bq z`+~SX@Q!FRNdcn1vFR2grT9PGJ?_jys_ zq?6;ws&ioPlfxS`_nrv!t^Jx&x2#>%*1hek54s!}-p8?k@fUG^v%5t^kFD^BQ1`@I zN|~T7zkI2wIx)7nKs;PtDFxS7xibQm)Q7K+(%4@#&y}S(3-<24ib@6TNjF*gJzqoS zRM@^gs$$}auzWM@G(2hJpga2BBxSm8{qlYEv~g{X3+^*V8>OvZ2S0qQi~Y z)GG%H-oc94o4fK7N$M!m+`*cwQws{BHL&=jhgFeA?SLaM!kx@jbDV7x?o8=LwX0Jh zA!Dq~feOY6OL(3^cFlnBE9ej5g4pd75!9J-wHap?4S&)Rj;AoT;fvB4dF^3p`)K3g z9hXk^!NfbKPQ;dz!Luw-&9G&!d#W5Az(%(B7`JrDv4BS+-FL~^>I1Jk{F5t|kRTRK z4{TcgTflFMk~w1EqV2vqUI10esOyD3W_G2;t&c)euxdX( zKz1`2z@9!Oy72n;E+j>(c4g5O5WIzMw1wFq8qut2?ge3INVhOHax-08b%mu{8}TQ} zf^l?W+XRk5wJL|IJhmDUK{KH6Jz0NbSI1M0 zN*UVwtN2z@P(uY2h{x$-LpX8Lu?Po3HI6-+l`#dSao~6^=aKAI-MsHkW_V_TP+>Pn z&JoEj8n*sLjO9Qv*E-dgt$jJO4nu&|?csgJg1`g#1NbTqQ*siX1S~!G0g5W_1@1Gv z&mKQEipd^t{iHwJS;khTafJPN%9JE-8jfn+KQ`_PU58-FC_X#`XYC0% z?`g)pCHSmdk8GS*jBFt`#5p2vqmr&TB30hZEtb1{aK_N?10$N}T4OTAPfKKavXjjH zh=}(D1%7W!EN}jGq3mpWUXV7gs8;ks@R|X4I7fL`KIvTqBwc)1>wG*Vcd;M)D{qv# zz%?{{F{MgWPyO!>e5dsHLI@zgVs#I+t2&&UeQesklj1aAf?^$-(t@{1AF98Uv7p}zZ8;!?F@ZAS6&+v5Rw;Uqrl zZDF%dcZ;3KLJb1ZeVX?ddL7#19Y0jd-JwK(WBK|@l~VC^MypGRySY|v9)4oatwWD- zu^v^rc(Ob&>rxO$D{-P*!3IjG#eFj?r3iD%fMTClIW=j7KkR37LEO$oY$a~CNF>BR zVQlqQrrJ=*eN9ld_<~~`;A5zM!mLryCIQ_RF~pzt*oy^0Gu+T!^BERzaSqLW{m#G# z#jXQ(ZJK!X=mE`_Sp<(!KT&QtS9}V;_uj&M)5Z-nBO653AluCyt%1sa^dM#G*y;TT zQm{rU&1?a&-Yz-$I;ifKmUi=_xO8Aaw%sY~pNP}ETrcJ%3&a%nAnxx`eBhB3s{YQY z=SO#~RhEzZUM+=4wn>aS9_I2sWeC4dy zjRv(*`6;T`$+)eD>T~LjSNK_FVn`^kL`J&@i&fijc>Dp;63(03)ARLD5pOfyuO8Hs zAG*e)C*jETU(i~#+xSHYnpqpQT)r}9S**-{(tP5FODsJ2{z5c-4%`kyvzG2O>UffY zfS_1Kg*Vfp6iKlmAI)@sgTG4KiAOxBd)0l{8d=!;wU)i}9P3#kU`IBXQoWU;1`zm9h?hHv0M8r|>vA3(`@ns7tc?kS^CPRlg(a`Cv|M|` zi4TR{AXautwFRynrJ2ehQHl4S2;6e_#grwkohVt+SG$OQw)2}x>6sR?diF<5u3yfe z%3PT(873{Xxxfl-I&=6c`7#C8g{ch5XJA+Sp&-^>rPn-(GcwfVdK~QeL*+vH-C31W z!_sqEh09}D*|jc$8?A7iU}e`T-@QeE=i8a@xk^zfR&eXlp?hN32;4U}&Saa0Ex9zm z@!gg~w~A%h7GW=Nc_e7#eXCLYNI3|Z5YWrGK@7yzCytVO>d#K`&!CjK)S0b)=qE8* zV++Lwy0T5KclBSw1Y4p1V&vKB&#r0cC^$!Y4(cnoOOftP(C~sN(GU5~ zKnk8jL&Hh}WjwligW#Tn0S!ST)|-u&Ri?6IB?d3i5BH$*D@4AHP0dqcZZvV(oAe@? zr@pG&zYI?5u8@YR92oxnX30pu`@BB(it*UzqQ8Rcc6ajbm!lRJ)z}TRP9P5cKBqUW z)O!Zz^}#%XI8YjtyywHM!EC5t_5K##T`rOU@rF;6?5k_c`FK@<_k0p|@qolz}D=6^fS%cF9kc1G)5W90d0NZXS@X*cO|3`#oy`%x!k=;usii)D!w3QL zi1Zhsn&m3d55<58*4T+6~U$8-u^Fe|la$3Hibg&X#K+M+y?tWr&?(GUw4ECYU;7 zZC;zpI%`jLznmcI4rAe{!Yw-2$&76Jc=Oj(ZGClVzcOH1RE)r%SXsasFdz%StcTnG z(`*Lve|;C=se~ioCV;Vx;s4vP2=zby1i(2KTSIewC%~lvITvFG2Xmu;y)6z_kdo`; zM|@9FL-WepInnbXL2O-eyBBU0hK2OEFknySB$QgAHE$7q&w%jt;~Qn)2O?v=s%1`G zzNlkEq>uqAI|rt}S0S;} zu#HOj=ISV_PeLp+N_t}-tS@ShF_14sdtCQRf;j?MjZ+i6oUN20$<`?w5;6gSTPAe7nD_*^dC@oTkX_A%nzq~_1e26mG^XIj9))y90c z=jm$}TDX&+kM}-Z$x95*ukgkBY)QEG@*7^h8ntv-DZO>%B;i6PEsl0wC27;z0XkB; z(lY!6{p4f0X+N%vMnJM)7!u%FQ|wVhCRM5>qt>wqrIvq*y>PFa__4|?&pVv$W9Yg7I3TuheSZ8yFz*IdNP0kyDS*IsP* z^yl;Qr2a?%t){OT>PjEq_pHqur!bTlMs19iFeI&#ydx;3QL=R+pZ1bW)sV(bX1Hku zHMCiyIFC+QDd*^-C?tbwYLd17!~#qntQ{xL1Gi^O9A?ByI!1K3|HhEdVUAseeooqS zgNLX6&NU$SNW@0!O(*IVR?Wk5|5SL_brP=#wNz{AhKrdB^P~&j`N(_(1pJq z+z06|Az}g`KL&jMGvt*247rn&gSmmTlkxv<0{;zfP3nLG3iK`vZcnNVgZ!rA=m58s zAwnw&R?=nEmqqSJkXMDBqA)bg%Ub6CanBnQ6Ta>ZJ|JzwO~IdiIl&qH0%LKY<)2f} z;n4a7Z-HYdxYs1XWS?!T1*pQ~7693UtO ztwRmgc@$SfQQ1w)H7OAClnKLuSeW5rnkyHf_!shBU$^LWFx~&C6|^S`Ov=oq8|L^F zTolcPixLQP?l`r5%oXFg*=6X^u-~|xOGEw;zW9TvWZ}dAwt(MV30(7S7^3B;etN@T zKaDnj9@E7tZp;WX@UT?zfoT~Gw)wRR4E^_}?|ZBzmFd`O}U7>ddSzYz_~a zblr3Yav=ea^{#w#QD%Zwz?&uB>!)`L``JJqjOqSKSgwnSRkoL>yZ299;9{)z);LS- zsNeRPM#b~i&!Zri)5q9M1tiK9g*Zt{Eu{;{(h2EHNfc_FsHfec8c2$ABGO!6Vd8Z^ z8-mKd0?O=C)8ujqVVx>N;^+uxD!cXs2cojlm{)Ulf9Vn<^__yw3sDww>wx_Nw@|ds zC~g1eX}I$)uIAa34v@*ieWTnZMFqyDI|w6GF)D4Q>HA!~fcH3Kx{o>>mj!KvdopI| z=pK!-1rL1MPyW!kR39<5OBfc~D)L`Nu(7jhT33vszKAAI_oyN@N7e?e?*MfFfbBQr z+QJ(r*Z|0P|ET-Fk2d|E?nY4G(cJKF{}L=eCfmo4%F|yFMt>Qch7kq>jE%im&45b! ziLt4@=jXI`ZBb*8Z1`&i3|~(y(*`32jD-65+9Jn;J?~%2zCF%A(^KZ3!0#bG>WxOR z_$#|EYmCiNvSB0=6^t&OR>uilsU4kyC4fL#(OrMKC_l=Z)b6`~Vl!4t3T+%*X$HBs zzfskO+%=XU!2`w+bE;;J9M0Ovh$Fo-pML@_#AxPp!)JGpT-C(F&GZubzbvXH-#}CS)6b}A*7I{mp?^GYlK$m2X8ZG zS7F`KAl@pp=Zp4aH-P}f7Qb&O`z&Q2qwM#;-bPCMSkZC=L_qaN%_sgxF#yh68R{Du z|F7L1!AgJc_BdatT0hc@vhD$OM{>sQOY^hM1Qm=(fHhrcGrCfubWTZ%ISoF#xQrbU zA24I_x);No>SEz6sAuJn%gu4jdC6K`#pmnxf`}WQLnNUIu8YcwN{UKmFc`V9``W9X zmQc}YAR`d4+a5qN3;{jF!K=*Bdlerw4EtWC7_ML9WR`_-;V`UPVco)&VyW3?U1*I3 zp?ddLr=l14)dJ01t%eEozHyW}noxb_e)Nk+9QBH<$XxE+oS=2Zt>hf0$yWqr*c=Sm zMGNNfQs%&l;6uZ35aKUtK zbzMXIVoot4-|2MiPqwYLOI_q4eV;4DAtWAGOEMBiV8I_3M$j)HAPO2j8W2Ub8TRDq z1azW^AmqU_EhJn6;fXPG;($>2jJb4tVJ#7_FwKorpDdWNgS=21K+6OurcCN6E;s0Z zI}r$zpTgDv%?$y(?)}dJ6z`w4*Vf9}+U8$gB>pci5;El{4@U1c3=?1$Wn-n?!2}!+ zN-yA)Uy+Y@lBTb@S~jERxDE0s{|gheH)KF$m3i~^W0S*?mv?jH(-u%O?NVc&RWEuV z;~>|Fp1y0%)ktm|ZJWcH6fWdG9#a~R;^>?*Wu&UI_#HfonFg^#9j z99zui)nNiu!XG$|zR$&xI6>Jh_%r#-sA2~Qbo!w)MaZ{lV-ry`kA%ht5*0>}=>GO; zM}e8uL|m|BP|}0FPB`NOLXP$fFpl2xq3*yi{XMTPR|t8`^a|;I#v^kr!at#{Yc>Rd z_2CvKDuA%T2~qQJ|C&titEx3k0QjbpKl&z;KS)>6*b#72_g^xOlaT^pL=4$1tD1TK z832j*%8u66>UJ(6EN~fVeYZoY6GBRwIYLJH{IATY5@J=Tx8G=EoZCHdeDPtJ+|ThA ztr^V))g!2R4h_XcPS&>6qlCFaCq3H0TAPE!NsRX=*jH?7>5th}<+d!L`m4%(s26vK z8Rb{2fOPfmc9UYb(XRe>wOijlu$I*qNyQj1#v5gJJUg?-IO;8v@&bM1#B61*=m1v` z&xhGu)q?sD2DI)+of!mb0~!V&P&^#RLVqN|P~y^d8NZi(@}EvnkLOU-DhZAGhOX+X z7X0OhXTd`7@%IsvLZm1et2cm2KtOKik(1v5AoBTRoc-rQOW54e(81i=+(zHY)WtLIQd6J~b;sIMy}{mc{)G`gP?P3nIn8=v9a@>Ws#WpygB*VS&9rIB z3PGiOu5>f%xC*z$&!KA_Ds}i}{FvtbBc4_b<0fhcz1B*o6-xK%@AJA2#J zDspgP_TJ>l1=>THsC2}E))tI1?sW+onsg>=I|_Qld8CPQW0DS{(S5@3IxSC&3c=7V z!|SN>sL?7yN^*Xx>)mN#T~};-Fj*w*H#y*zp`>gcO>xbm#?|Q{EXVdNyf|78oXM?o&N zPV$T|tRb-J(k{AD%DA0hFo@vhSTlBg7VR`O7Yo?x3Ao&bFS&_ZuTxAOu78a%p6OC@ zk$ZPCPJgMW;vh54R+MU9U~@aiqMeXuwRUVAi+dGY^k|kjn(<6DxvemX<&4HPa4>c2 zQ(LH_d|ZZYHi>=NZ`(Up{P5$%;A+2`-4je)v~XdM4FK~YM25!Oh3bFCS%XfwR2G1K zC?N~@7J$KKFO1ozcE{xAWT}@JBuvJ|JSOlkGA%~Z!0ySZB83ev_3SGytroYXB_5z3U-0GH3ye%Jce~y11w{n5<%fp|9T*>BO6i?Q z>%i(3aM9XlH#!1)zZ2*!c#ZvfSn5{lYbREt&w~g@C2%8cXUUFka<+bBty4{gD)W`S zq0aefa~Ld8Uz2U)IPI6c;Wsf~i6F&^AS3v%!U*=>WaB*r7b}Qm5S6)dpag#bB5$t$ zZh!+CVUhV3?FyxZ=Q4LR+%}sp$ZwD0D1HgU2GB&YKL*`@E|&g>HvaWA@88Z@?l(;^ zxH&&>_NFF+h@>DKp^L@siCjtWSXxv^kkhOWsnwiW52#yzazB20mERc%M1yr(T4x)- zn7F*(y*b0}0doDnT|G^h#@Z{EdJ@Ifzpr+V z=j54DeOiN~Hf*^@yx*Pm;MvZnyB)bqZfaB0J!~exdC#cu!BQyD9@16Knt$*NA-D2o z%B|-YxL&(JiaA+M>&hz#I(-eibu64~^V5I5ja%Coo1YuK!jf4=Ye%HnKeAO6^kjUr zXE~ThiLr2{-EoBs3dtgUa)Ty;$SA;4fB!C2IpRrRp^~-*HejX?ccL=5)N}CpH@pwx z)!7gLV{iPU!zTL2s3&4=U~FWhZ(#LrLM-+#HsE*6tGFw?qo9fi#na*TyhaoNcx8&P zQW?%9+DsV<*1`8L2*1~nuwUuXeS$D?;mz?5eR_U>1hoqX3HA<-?@I&hBKXC$i+z&D z5OJMk%ACmgT|F(C5ND_ff%WjSmd3HJ=T}e^t8MDOA3FVJrmxzW-Tt!D9EWxy7?n{K zB6ppckvNB^LiM`!J#Tx?SV)uY%V~jm2~ZqQ5b5ZXCYGO6US9ziM*gzD+0~(MtF$6j zA8PMPVz2?jp93@Xw_9l|e?ZUJ=-(>YD+y4^kdNr*8H*+lCB(>3Jh&VlsP$PvOHxt#9Kc0 z((G!nCbfTLZN04NZMhUKwnr_i>*(=X3b5K-22@miB>&r&0C6-JhX>%QCMLA0PV)mm z)ma(IN^Q^z=nS~=8dMy|*YVr3+2GMr+5;~}vz>m|Cm`6m+7RmEKK&R#U&(sWep=&l3lw7)E`=9kua1S( z$@2Qk#$n@k7oGqh#r+Y+KPjQHk;H!i*)7}8fEelv-{^l`8Vm;|JUAU6mJS7_CTu|o z?H~L@LN=LtxD2_ppk}BCSRP$__o&3Kp3ox(!C4tpC zMZO$zxU}xMs-`_0s=1`#&);@s#T7wN7M>XgHHpu(ea&XA~5%v#YU zY?rw1Wse@2O7!*vU6Ip_!}a6!qX{VNkB6>^OCKklZ$G-DmxLnT(fP1Ir%19(%Ow@$ zrPGPS)FhD^#Ni_RBo3g_DYS4hDd-f8dK_TC#V2-|H!ukrB*+)%B!3iOUMgR#Ku3IE%5~WZ((0PZ`8&!_3TVE?|}DDnhFB?9{_A?wiXnUFYD^MC-Pa~iw^ zH3MHKWj2{anO^Jb!*~?^Q(8oHS;5IL$x$t6K}i=KbJIeJx$bU7jpvM8i*C($0tG%n zagzMCAR7QTYc(z~w3gn%e;Z3n?g$$w0NCn38Vl(kfCX&x z)i*VE_?M9=uG-A;Bl2iD9FyLPYMs+g&vLF2;UOZI^$F$6(W*!cfY?SdGh$~sH*N^; zExK)iJW>p}?TVW3Bx%;im>i6!?_z#Dy_~T5ExIWTG!W&$pmrD;plSKbTolp1)FVsc zDo=iI`qA?9`m?`Rs5C$Di^kn?QjeexnC42(cF9@)P=~qfge6P4u@4w@2&Y1BdRxk@ zjDO3nQj8$x@K4Jao(x6{#f!MZg?i!aTt)tS=BAOj`(>5yX!ko8z-*mHXvJx#_6h9K z8QN>u79W*GT+*6Ug&u~}q%A$d4waUR)E_O;i%6pH2>xuCQd38~`q#zjB0{u6;WwT5 z2`s=jK1Ef^oH_Q#HNaBe3C)i?#Y_k;9kNtfM33___Sa^XuYT3OB%aDMC#!deYy9kv zt1=#u&3-NCxTryI4Vg=JDRSx;$CcVF7r#lp3Fnm;|I~rDbjjq)uwjJi*p|1`Kxh7- zbh(hy_K>h7aNy5pQE{plH4+hd_s!IcQ^Je$jqx8=Mu_rkJxuX#;o7 z*$v?Vmsk918?r@d&Hj<%%rlA{-gV9mK@RtP*RKoGZBpS0|F;gA=zwNj0raQukNN*U zHwyoDxc|~2QGG)Iukf!GdeJdm5x@e7K^4yHclg@{kzg7q5HitU6k$OF#|}b7MN^iI zT~NKhfZ+FpBAY^>5TE5$V1F<8_1?MxBt0WHEi+C0N-;Kj)yIBDXKB8dL#v+_qXyxg zV5(3{>wLUKfo?mU#UKSj5+iGBKpXkQRuVFLod5+G%p)FXUqiL(dl56Uy(v`boKGkB z*{qZ*)3%{cr1EEYM!YS63Y=z0G@)nxfKa6)L$vrt7U4xl633-wdH}ZbyN&vv-PZ4=YyT+}$=W)J+B(}9{qMo(zkGhDM{})54oxk1F7Z2r( zJUM}Tp6V3S(vxmBDYR`7 zy=NPd&ad zCk468(yl~kjmcX#SC@KCdJoDf1-P@qR zq!T{^Luh%c$b|3TzIdygoRZho+<+@3A~`ymO4={PigHQFPb~fzJHT)l0a1pzgw&Cm z7J#lSd<0WZI+_G;!n87ow8(C^E*L8kAvFhek^h@_L=s9+<^l);lGpqlV3uh_dr)Yzcp!yojubQwcK8UmfC>dWAo$>=JmuO! z-U&0&8xOu5Aasn7qfiXQj5@$O{rS=c5W+b36mvNQ9p$smrA2t1F z#Ho#1k~K9E)64s*g5^!DG(*%UP2CqT`q^9jHiu=c(0xS%w44=v=7-72RL_yfqQ+EA zePlCavdOof{N;t*1pfYK%+1O{sjV9w~dNZXe8zY1OaRZ^K`hzPd>Ods}-+DY&q zoP)FV|Kjd~l`d>&fbh7O!Ye2z*KOBi@hQH++EN(l+$D#hy`%jU^lD2*x4 z3O?5QUo#as}k50M$*E}jfZ1*Z=7vbn(4vIHRVId{q$k=;8>{5w5>1uzDh{i z3~xExS7d{RhD|qTGlt5}?_drloS*QSD$#DWB=-Y*u_xoqm*{N4-{>AzOcwJ|NcYUT zjF;$wP>qM3JdOJwtXkB5nl_kVgN!+GmYBlSLlvH8c+)w2)W+{*oUOdm_0Rfd{JewD ze{*G(Nn$w7v3&LylU5WU+4(Y-?kAow*M zN1BA`z{YH@-q#%RG9o7pZ4QT7ggLu-#~@5=x}{h%7{FWH^pj^hMb5*eq?FHYe7n|T z?);-(^?}N%f~7rTcB9@5K5hzKk#bT$r}Nvp7;eZhaj? zO9ZHlv#VlvptxIxwx9NE)DfD|r!Z}hHR6isv2Pl5<8z!NbRoXs!t{BlE!U}G*;9Vh z>PRcc(({#sG0yddq%s-8+{HC94TVrSfBL{eM_W5 zi5ASIuu1HbABT1Dre%XRAHjado}XHKpO65y_VbS^^M9z=ZJe!*9rT_4i~0b#K0w8e zliKWmZ8jz)xT9eIZ8SKHxl~d{q?lJ8Qk%U^zf8MLHklpm?F&30+5|5F6{JGK-=BN9 za_3yV44+{8QR8qfIo4im@#i(hagzGaEr|G1eZC&dR?7M|kO1}LPMQ-Y#jzdzTT66! zWg`_6u188)Gw`slP*(irG2E)R|ENyV5TSFjNx229U|r*_Q~EYo%p6>uOCw@W14Q*vj1#`1 zHpEqZ#$%LdAcX@{w{HA`CuHRPBV|L{teLh%o>0_D%d_ki+7dR0<1 z>!)MgJ``6jT?vgHvp42I(3}UW{*%gO(CK?1tb=8JupgCsyPWMs(TV%FG%=-_rukI+ z+fXY()1Pnp><8m0vKA24E;FQvSPqMbvLF-tt9|WDLRU$9thxeGGL3a;L_@4DK7R#s zx{#^5-@HlgAKm5e_3;0YOZ^S2k~3gN&Cp8U(ea;v#$nrRbr$W^}RBE{r)#E8mbg-7>*Ji!|$m*pr|yZ zj@&A(wld_3H4K)#LUr*n1mU3kyqc~_<=;Tlu6J;2(3!68VOI@FmDcC(AL%nlqS|I& z-~%I3JxUqu>A#@3JVLd2r)^;_OSg9d#<({ARjjN>g(nl~qkJ?C0BsbsDJ7E)iX&qr2ZIb_VU{^TkZZMb4;{CT}~ffiq;*G_3quiYop_f|Hr zLG|&iag^Em2xI<+_MMXz{sjPB@gJcj{6}a-jhzh5{wWk`NMPQXUP8N%Ib% zA%&`CimrN1j_JR+6+bdXEZH9oaIxJ*NZ#($tDxh^jzj`279G>Cvt`sSik&j;p-wz$X$yPLAc}U$qin==wzBI^@Z!EeTek> z-IIRz+)i)Z`t?yXay(9#DaAe!{9MCZvw5)pNz2#}>WWp@$&zkAyml{ZL6UbzzsNZ~ z=d8B9H`|)A`m0z=s%YT!cDNKXDQ(Nysy-h986`Qg#o(2wo+GT*%}e&EaC*nQT0{F= z&o)FgV%ql~XkfC#m5&*YoDmF|s$_P@>I2O&Xq7SJu(O;@;wZ<~61O6_H780f!C8!C z58s?ev*S?DqUiND8$7$NKkh$5n>y7BB8%s&lkQW59sRsSAD4|8!Htb*2qWF)O(XCU zK8s=dd5fN6&5}o8oX5!sw*e=x{9IRfgEyF2o#)0@~Z9Uci~2WBbAwNRMxB3~!q@@+4U45{=H&Vji?Tuq)nJ_=YSCP4X> zOJvrMPD%-nz*r|hXH7aaM%ZdDB`0wJ_zIzeJ1-mZ4`q`sa}% zQFCJ}qyLeG$92dGF~Wv?BsKdxP(uiNOr2-T_Vu)O8CNbJ&=V&pe~=+2dmm$&EOueKeTE=62xqwzS+M_vTx z3pc*>gzeJ8VxpULaA06sUh2+C)y&i|_@3rWTGPFYu81$qFQ<2DI=%;b#9TrD?%ref zlGgk-)#yK(>Ob=}qE^n1W-_+_eLxG)^_5%seSC=)RT50(u*A`kv&0V@SL+d!5vw2^ zY6K!~;8f}OytV{&?sLOiMfeZxW~-|kpZR)6m}Mhdhs>7^ZNJwT9} z*J#G<+cML<7w-yu7c%=8C|E|OtvJN+*+NcCLJ4>K**LtF%2w+sJ6*Fu<(%nJQ6;dI z;kAiO#EkM(&|{f~Hq2d`51Flhhb{{j=~lhXt2$%?P6=mTgrS&tjZsj-WB2Vukj_`g zqrr1jru%yJe$lG`hU$Ye_G@KwHu5@Wbai=S14#zR-dx`lU8Dj9u^|-Zcp#@zqpU8C zGvxiJcuVmMN`qD*R`dfW60`D--Df7E?ZrLry*@GF-xg~GY!_R}N>ykwrk~Rcu-M1X z5&(%Wi~Q&T9Q;|iVyM&*!HFG-Ny3>WF+k%J;+>?JMcYXg5Avr96<~S}CNdZQ ze5j5`wA>Eb@yMY=g?bg>QYMY;yo2woQOJYze)ZQNay6k*KPtdv@BV1AWd9fu#D3GP zzjMd`*3JdYhx}_Q(~lm}OV5C02yuO>)kQ>50T~e_IJzQWv7|^^f{XOuwR44v^uUpU z$@y-UBmT|x^DXQaFa*{;%cjRinzIWpqpn30;*fhUx<|2P z$E_st5lu%vW^IJoVyOO-^hu-Xv(r#n@ls>W!2bQV^$Ti(Y_x!l8fddO;ztcv`0V|~ zloDucImZ|W&Mm!_CSztdS~?TIkmT?*{y)yX`mgGB>sIORZjcs1y1TneIu_j^9n#&M z(%mJEbVzrnbT^2=UEtpD+2_0-@BQ2#*7^hHe7-Zs7;~uT;dSGcrg4jI<_zvqQdvYt zar^Q642{f6w4(@ertN9MveFt&5$RJFRQH&lH^FFLpc99HIZ0F|L-sg99t1MbQhHbJ zPJPhSpDObU8xHFT&;rPd)j(FbiESw}bmD06^SAj)<_rZx$XyW+D%woim<)Zgn(l=T?Uv3)u zAF{-c6SY?1Rj~q|s=tfarZ#o4(jL*8HgUG$JAx{NUm;g%up{{{j3tne_0*!8 zg5PI;|D8yOGGo5a$UKpgxDi-wG8|+q?K6668B)5X>{10jQ`0}rhH-uyNdC1i=9UF^p8-0M z9|Z5HgZy91(>rwQ8wr?ElhmR4f9?F9UoaSdpcJe)-roBaaZQwX1kNGYk8CyFee?q1 z@ddRI$_T8@%e#yCb{Y%6r3LiHe3CL^g>9Vy!8AQ;QJ*L&8k(ADwfCQ0K`TdTzylXi zKiZafdZ(2Cjs1?(d*;Jp%4B(JRL-;N=#*WN+11m-j2vA%lZTVOzN|$$U<@Ov$vAHz2Cv^NWbPuuwwoPDnC-%c~0l zscw-J1I?|hLVg|&0_jj!vgt04~TSZGxWS5 zi|v^OA{`|U1Lxq!VX8z6N8_lHY-}7oIaL_Zu>qpv;qoI|$T*Se(FIGBB2h+9mM)(1 zc7BeUY84beOMh*-E(Q;VfLks?x+{$!l=#TG&=b>-t>(Zj7sUk?EE*}DFYS76O87i1 zwM732Z$A+uM>;H4uk4NZlZ@sfpwEqIYsr*CZE$?l*>7g>2-r3PAvAC4)P|Rck<3uc z&%4n2H{~&vyMEZgR}tUIP36DucpEhS6(eOUqAEPy`uP<`kt^psAF)jTqbYx1fr?w1 z0PIX1^ng^gzjj>mT9P3AXxs)1De9&=NW{X?Q<9RS+}M`HNx@e9mq?p-iz2=1^Xc)| z6<1@3yQ0FgL5KXsfqKX58SFb5oYp6F6|ZC}_jHFlntb8C_4N%*sfNH15F$T-vL}ol z2W<$EB}nmEO>)VXmVRFt6>*@Jv&2GGH&r$q*^|#-fH{0R05r~8=+w7Bw%g8}gGsbf zhJ!ZArGQcM?)IV5dzV?6mEug4Nhs+|PO%^tdf+sDNEwS?g`Z8d6-y|CF(^_@SWX?j zV1gf*t7trb)C%00Pai%)*-2I!Dt+SL6Z!y-jhcQey=bjnWp*?>Y;#()@zIO#wY9x* z{s5Dg79UZcam172clK8>VcXc~PzWJQnz~Vf(4p?u_R2<`6Wm~W*l!D^kg`IiUn+@) zR@iscK(k}~F<1S5bNdg||1(*gJOdRyU?KY=eL>2~%IX#{G&1Yd;%~k4sYq~!z{3Jb zyAi*Ct!v$OW$GK>^#Yjchl@-;XRG;mlM>~5Nh2%A?N*N()|;!vKDt*d@=$^uW?s4ccG1M@Q;YI&+nd_>;H|-QP!p zgiK1zBft9F&xJ6u&EW_hvZNExyMliCMyMgMJ!OrK>m%5eixolz?_?XPch=s5V`Qt- z1!5I81crhW)0rEk8>FK&h_t)FEsFPfAmbo=WqwC1k`!ZPRdSx?{$XR4XM}EMV}v~1 zByC$`J{cY6)%ifQEcE9j)bwB&6nF4R-J~p&;1;!L;yJh5ku@(-{^_kPo(>2;-+zw3nFgv_e1-PT5x^`c1II zTjMS&@x~ymiK$Z#74a}@2WOlwxjJ_U&k=#ZRVH5m_$0;un3qU?8(bxGlZD-{`q;&9!|5%Pn$NrtW zau0cAuFJb(nE0d~i6G@$6cYu5{jk!1DtRdd3)LN;y8Er51a*G*mxQv zQtSq@rzUvg%ynQYWQCeN-S#rHqlN+ooNb%1{79y@Yto$^epEE9O)KJZFG%T?iu@!b z6M;?6G;oZT7~_i~wT|I>3zqt6iZUu-i1qZ9BAC<@gb`E{KKQnX_o2!765%I~6bgF~ z3?kVRTJ=ygZC5Z@J#3YsI~`EenJ^hy4lHM6s>K(I%K|=_~9<*;$Q^+S+(|Uax@^lj9}H(XU7G zi`Zgf#~p;P_{lbsHR5Q19>FrV8OpW%;@Q-lCI>$AZ1TI96IYVFk=f{W?I0S1DU>E- zvr0f9`mTCyj&H15vk8Ova_q+TA8q@aNvGn>=Cm*{1j$weEL^F_crYbU9TP0Bu?%7W zj%)sHzWBsc3Oo$;cVZhZq(+sii18S-Ji&ZOO+g~u#gcn>Ivv%GyuJM{fI)y*KE*&w zy%1)6y>W$@;by(1&gvJj=|Xr+4}F~X+x5elG434~ z{ctd_?f2tg_^ypP-58;6Y=FypDjd@v!Idp%`s&x4sMW*+WHMr{pG>@OE^WU}DB3?(q<`|yI>;P^aa?gaE;&mX@P+~0ap z%3A;L;_@#TqR?W|RRs*KW>AlC;xh_SktSC~-(k}Xg%&XAkWU(`uk#mQ{IfvIsH=6bg_B<5?xLa3Gjddq3pB9|(!PD6P__+f$xxdhcLdb}?vf zZ0;S(^u9{ok)WiVKdr<}=20cHMkQabxx|r{zLxahVi-8@l!^VR=Qvt?Mk?Nju&9jf zf??a2GS1r{%hz@t;8gUS%ecj2%VVgNTR&YfyQd?u<;UTnt(rk0>8%=NLd@0 z|K}X;*-zb2!Y`_gCD`L9GT>9FrW}p@ znBj8|ciz@`m!wzaXo9bCA|bkT!ruDHjfHNy>3Y$4S+(WtF-R3_gYMc1hupV%VyTpy z^#D$it}h3rF9G+Qpv!LMHqy=|bp@M&xo@*sub}54VA^gk6y@x&)yO$6(nO+st4{Lj zt5b_(57uZ}&YWFp!UX?dYwy>&Ygd`9QY zO^)qABM?*k=N&F)-8lB5)of12q>F*jjrKv*;_JN+xXZzov-?-TIb7&!X?!@tGD~`S zVJ-bz;2e&zQ+6a+95{!=V3+ddP;>}wQTsr6_(p#xibt;7#@~Wu(2`hOQ44>jf*8X? zTAH8MUEn8P^{Z~$SLM;ukbo%*+QCW3sPu?Of?xtZs?w3q#I|nqcy8Y0K-!tB0`l^F|^(LT@Nj{Z1@`+b=L1XZ~xSwH{(^`-ubwA@`?*&Cp%lp(fyhR=~!Aefv8 z;%#s>&OW;NU|g+lw2u8cnzG2ZqSW!u9or=}$?v2VT#)-CY41wjiGCMrqnU>2ua-wj*b717#v}M$C&&3%=ycqvQ~d{IphaqfPHAGk?qnAJUTrAoMxKywV{I?Dw6LTNH*q8!M<8< zKhvcVr%bpOn#EKHCpa>>sg3Feh1z) zY@a2kjkSt~&H%IXC2y}2mPCk~_qwfha@?0ndmqe)HTxlGNZ&)8c&ZEvfG#5t$ytiyyB`%Ud zJR6s~F*dpJ&NfLpK5H3MlSK)nSSz|qLfBv>^$sDKRQj<-G`@}^A2RUH5~hJ?{zzlr zijIJ))`RmI60eN0b)3(qGWgv+u&o#H!$0(VLGS!X$3AfdIg;g94<%Shsz{sb-LP1K#h2V=l)GQ55SvWo8{XYr z$0LU=qf*z)FG%EBHbe(j zFdM^Kaw$b&0OUsA6LgdE)bIlPkh#>0@P}D)2k>Uq4dv%zvz}0S#4IhIkxg@9qtefE z>h92HYVCXkR>Du~5Pgv+r3XFB-}hyJgMe2F|BU3D0RH|vl8^GYr3%p6HUPta?f(C+ zTmB79!4(uVAsC5}!R=B=r1ox68A*1MIgV;_9$;KQr+NW|Da+~4_=2myj}i~~dG7!H z;@|=FD;Wa%H97*2{d-JWF&JiDYS1~}j|Sc@Q|$9?C>e=%+sG8EPkbv!>ogYLasPJV zo-4(~o)D_Qi8&|zjM35)mV@<%jC{kl+DTzIUabt zRDTC=KbsSa26SOe-~FW{Y4JnTrt~+f4u}qh8Lu0%%b9A#Np|CCn;AA!4?iFS7-f~u z@?EXh3IYpRhFE@X{S}D5MNVk?kG{E{m6v5~1aS(-bKMgCM@#;mtS6&q2{4oa>MS_| zx4f9j^g zu63^1F@Kmc<|-3Pv#nv7YxzW&$$p|j>*rfpDMRtI*q)og-N14mOwv+@Ekzb4ta_90 z0o_LoVBpBGQQNk{m{$35++q;KWqdJHlEFyU1^N_7nwcCJXDG83=+o~RSzhHL#L z6)9C#>w8Z;X*Nf{%?0()+h;(%x$vV8*T648eRCu;`!k?^6Q2JCP`~^PsDFW7ISPsv zKml#r_ecBw{-yqhegBRS3Ij4-d~jEB0hK2j>cErj@vz9oGC{&b{N5}?SsD2qaYgx) zQBu@D%<+KO6qqvZae}gDVB%)tVCpSkRc1)GB@({M;Iqqt=rk{dMKz zAO|?O#3phdCGQl2NQb*lGaQ)c5=_e7cjbBQ{`cKzKE1_9q%gNarf^May)8F@u&H$^ zFV<;fr9#r)VvN;dwQ1&?ZILhGgstD5IxhfIYYr?0Z$5$?ZRoC4ZDZgbI0-_qpR8)( z8*Ftf!5Cakf!f~_4k~MuWWr`^G*aCgW6HgI(u+7dm1hfvkUNN-SEm%RWx78e6 z$L&O1`(6dk9u$BK-}4;=>os3x4%2mfA>b>UwEOGV(jZCuZ~ga~mhgthXby2&*mHNx zNs};4q7x>9Op{f3UQkA7kBFG2K-YcxV_5%vS^wg`fB!J#nt`rEN`prTIF;B%+E5o7 z)6L7zhC)H{(}hEk_()%}n|;AvJ&JtC90Ekmp;yU7Ghv`Pv6dvKFE@VfxxwRu4CFy@ zXY#0px+-D-N2M(f8e7*?IbR~AI1Fdvkjq@!}7)dj7AIZRGNLic0W z33_LGAqudE5?uWdnfnDBTZZ=He!_x3)csP5>9@=5Hj7*2oyZCdxoPvZAQ?El#G z?~mc7=t1%r-k_xYw1L5lg9t_|1Kgb<=LC~2}C~P&sYy*C;l{qE${LBxi%7n*VJXit73+14MW$!l;jYEu zIzNOFeZ?xK}ZfGDlAttTK7%qZbblG! zlw|WrK2s4e|M<9nFB>3Z{R@Tj--!s>Kq5lD8**O0Zd6l=! z<&Ix8s)SjLRTtVi(V}&H_=_1Y9cM+012p*RA7B3a-g_^rnVme z|1Wl*Nrz=sP^1@IR&GKD@;_9XKlcJJx5TDMrlZ^FMYqPvW2 zPFR5J+K8G)3vYbD+3{_^lpW3wgs?#6f_QqeHembUZ|%8njTBfoNs*!m%4md!zwa7{ zy%o^@%I#gnEM-&N>(44pY6XKD0!*u!7GNzBx_r5MmhH`aM_&XY`!5vqyu_7({Eu!G z(-j)0`d|DHJ!>j8VxZ|S|7d>V-tLc#Zqs53_!q&Ap7z(J3xNeQOheYzXBqe`7{Z}8LGn@Vx zz=;04L;tOL24V_4tf2K)Z_4~Z&FF;E*sF3sfuY5J_0EvOl88DG3J=|_uzg`DV&PB= zks;LgS+9icaJPH4w7s6|NeJ}`%?_3JrhlUW&(Ovay$3avFla1$uI?(aAK+AIm~sp) zbz+W>YnrV_IPPol_6?C0*pgg+Rttr9nL^{E^6duMltj){6v6=K&k@LUzlQJ&K5}<7 zN(aKb;j%fy#KuS2m9v}3hm@~!X>(b*DE*0pUtAI>uq+2jv+hA>7;hv;<4uK|Inm}XURoBk zlu??76#e_~WH>SUZ-_&-NnKnRw={OO{d;*Fc7A};IZJeN43biV%@?!?4=QEkv%u5Z zAN~7#=)5eDt8ED+`I;I$k5~UQO~tIrpvnUw5Q0yoTB>rnJ|Q64`OCt%IokaD{;!#d zF+kTv8s=yzwsf1xnl*a9ObAVO!vdLw3?pgW>JrQ3xqF9c^U163#zs#+AFgn}GICYx zt@EUkv3#>op{CsQ_E&~Q1RrFOQaV@Gb-eF>I%I9~oHMOmpkNT2**gk=QJz4foZ7z! z>6v|aL-oF0|lsI?Or<_&0j^NDE4D7l(cgfh*V>8bjrl1NnuDmFy*IES=S zBm#A2r);XRcP<}qZp8FLP{cB+f}U}@h6XowpQorcni&e%Qd)I%|BCI@Q)e+#3EHi1 zlGyYToVWi%_XOnvmXhBTMjBfXrKud8+< zmq{q@&{{_fvsp=w-a1ja#q`cs9imrT`HTLcdq(#L+ZDXHJ10L$jY2SNKpjAhW%S#X zXSTyg>P+zmrds@z%RuD(bb8BH|2UV$_lSk%{em(TM?3>ro}|o>wRM8hA18l??Hk@W z4L!_n%7BNgbZAW$MO)rON~~660Pwj6moKwNnr>d832W(YmCp>Bx<9aEm_gpw|=#a!Y)a;%vE5XR6-L2mwCL5YX5{eXeg7g zm>$2`mQRL_Yo*ei`(qCAgxtgPUUxTg&gq--Yjq6U?vxeYxIncMlP;lWL54ts&pZ9- z)+-?~N_kSD{rA{PnaWD3Ll|ghDl(F|Xp=W!C&TNC>%2(H-qdDk)9fX=HrNXrV;w9w zhs}6L?=?LF1Woi=S>5JFE1=%hw!c)KE=!+E34kB=F!1-^=QqD!%gX&rEBe>yCSLW< z3(XkclYHKgC3by~AN9K!`@#~eFbz2s)Lw7CVPX=W*;k*gV^ZuU&YGc-3Asb9x;kpJ z*1{WXd7+72a?{GG&>2^a1LYImPQsp@^m%E=SZ@WM?;fiz?I-swt0x!SD^5Chs~2>y z<^rB58}RFWz7T75^cD$0Q1t9PF!c8H6-jV?n#^|j90vI|i|E}ZF*f2`H3-fiQK6?o z69UD|4O?*8wTJ9GJ|se=Q_>8DQ(~@nn_V#bx~dy*ZVOFD`frnb>TVmtWc!^(Iw0H? zI$Yf)@E%QV&yCUCF^mCRZ(s3HWb)AEw-arKGPIFye$&5GMYHHo_21V~JpJe{*uhFq zoMH`bD2%7+wt&yGz+356cr$YP$*;I=b3y!F+}P0g zSf&B)wn>3sNStLl(?(NzLS?5$lx>)hiJX(4!x$DbGljtcN>fPQ%8oN-PnpQV_;3<| zL_wI`Q>T*`LX$mE-z+&{-jXb~Y46fJB4;t*?+1vO2H|v{AUpDGq7!!h`eBUR!Wt~c=SmW!4%7&lO@Bi*o-D)5QO-!mzz}P`t{}Pu5%7> zJ4!-~b@I!{^Vw=k>Z6{ zui)NJHS=;2Oe#j`K_mFO>`0inpdQD_>020Kp%+d|R+wjk( zb1euo@d4+L-|pdFozntx96}<5?mZdK{HHtliy=}(+CpHSD#VO z;3#GDQSr5^9%C$8n5!;;T+sKe3TEGVkrGda_0{Tv@=%mmjkKrw2Q&-)cn0f`vA2X| zBz%+H_3?OP+|4OCI|D1J*x2Ki+{eLo#2?hCb8~fgM42d9wi)EDcK8m;{Re8L-#3#j z+2-_VcQxs%(nP-{7|i_U8A+_Bsg87bq+bx?q#GIHv|)vgzZ-YPjgCoQv_W+J-peCK zqQ^cd=F9_~mrtdK$*6w<-Z;Teqg*3uJ2FcVL!+M6fK)T6Oui&bS5|Pv4gO8SvRs@2 zJW1&WJhjnTO9;Cr%JrjMFDy0frZ75hXQVpsn{`mP1=k$ztXiwjOjt$4*u3&*ikdNJ zjOePTD4{nXM^2`D^a^yF0CZkVycQBRIapBn9=cOWk(zc?Y;qoK;HcZD9c8#eIZR)w z$NE$QyIt|jZ9OVJlwJOe`Z05Zd8qLA%_C{ndbkPKR>I||w=h^96xy3>!Go7w4Y8fX~QjvGgCi*LdMBQ2V~Ha(#ZeV&vMvA-Ds>kw3! ze=i>kNhQZm+LR!%XQU~x$Xp@&xdFrUKy778fA_9WqKt4u4jC1)S16qrwJOZ=qAdD} zR^-wMe53H#K_g$#7Y2q^u-3%IR$8Y@jL#=%WBItQEj5WylfKdhy;d_7=kr04L%F*QEn~o=`t~e?rS(#ue?X)5`*x}MB|4OT38v5;3>PUE9wuhJE)dje z721emuZ+R3aO69XN}EtQ@x4euGoAgqzJ))n;Twn6=JAb!ijWsoyc!yEBNAExq`%kw z(jqBew_#f*t%uo!oA^mgOl2!lnVVD%0MS7ywU!wC(8g8KzA(^q0(($XkSQ8Q^6DXC2k3FK zr%%(f8akan*bBSt)mXT~x0K&jtIZF!)2K-2?Asj(XEedRm6z7ydS{(u#Yfmq5_eco zO2~}0cGAI*;`GT7KR4rM?AS^1Ua#ABuFeD#*=+7)b48(CyXQfEp&B7vXm1D4a&Z2w z$O#F#PW}?F*c8g6^Y=w>ZuTf`G8J}J>CsG%&=ikhmn-ukSLQex6*m^cJC-y-e83g* zLYs(Ob)xSVD2W-7#cH)#WRvtRR}|oBV4nBk0j5h_zTq`ha*##JyG7}3P*WDmCTz(*}|oYi@$X^Boc3KWR>#EX^52erhpVbR2JOOudNXnsd zx+I7gkxO*jt9&Ihd6j_*XuF7zBb2*_TaipB%jTAD<=kt*+EJ~!F+6ig9%)1#1WBVR zpmonilJvU=mjF3*+FqLL+qJ-t(BwBT$FP+0cDyEDA1E`fD)xV18QDo{|MB6QFl#e- zATF|@Tgs6yTw7paUzb{>XeD^0J|}@OnRDk>cJfY{=sR`pV~8yoyA)kQ!wmv^^Det` z@d>L@g6QH5sU4FJmX%Goc43sG-*h$-y`ti(x zd6igM(N&J%#$kwM5_1#H&yd=@cSg)gL)$E($S&YmfmOPdSBtLNnIP=`JtGh6m2V-1 zf3b{T3J#(P=jVOV-dFgl4KM)6aMvhIiz1s`DgD@!d9Qxkn&=9a3-B6+5{4jnyi`Mp zOi7-3%>(0-ADnJdJXQHe?D#aWp#*6^w2wPk^`oqu6@qzIU{!11!IAS_F?Y=B>s&4FXqt6dHVK*2XYH3C-(#NhR%iK3hS3fRhX9-`0P>K+f zl&w)^h^xg^=JEOW3XAmm2#nA~_78~JJZN^Z2$nt+FHDuxU3-=cL|NitQ}mjy&z%E> z7rtmtQsZg1&O(%1r~f#L>{AKmFK;)UO?A8ChM-z5V$q)c7_hYHLPSClz*rpsxA?)R zT&Rl0*_fUbr{0`d^Z|(02`?99RroaLIx05~^3}(nq1ETut$y(>V7n;V0#2%H4=ZCh ztKc@<{PNxLJ#185rr zerzq;mm@(76NYh3x|-V8alXTV1DaFD8%mEag!+e%&5QrX-a3Yv?mNmqW6 z(f>vtUYy34I`%4wiFXj|kWnBJi6^?pCeV=dG!H4S{8(nw2?@r^;2Tnn4pN(6KdQhi z%5k(3g`ScH_vs{?SUH$i4j&>Bz&;f-DD8nltJ7lyAJHc%FzPJmyPtS0$2!Fm{Dz(a z3N6v+H#k@!SXfo3PSt+&M^jmBB2v7NocEJjTtw0NRF=p+XzQ}YxhCYAymv2>)v|G& z^Tfc1$Nk41^Y?1Y|NHU%wQmJV(fyMCD=QlRp{hki5~5p$>uau>r-bwq8n|zrX3`vt z+sh@5ooGvWo?@U_H@$}iZAwaJT(TZXXS{g1B!L6TbM0R1afq5?4}c+eplj~B4^Al& ze!odG+h~w#gQU{*`9mM9lb{KAfpEfU8H?TNDQk>Qyog^;VWo`ho$`*WVS};de%xfy zFf>Jpk+-}fUg2i}q!NoEK;*@bA74-7%0d$vG5SMSJ72GtW`wKJDpM14dJ*ZFIaH&K zMQRglHbdIB-j14!#W-&LWJ#|51h zi<6APeG?2#FA{!JXQc~Yn+v&B*FtjkJXsH8w0r|WUnTvRy!?1EY;p54TZeZ1Xjs{! zU{qA8#B5nEnY0jjsi3R`o1{v}h56|%rHHku#Q7+usX#t5;HqWO z;3iX+D;V<8LOApftc2OJ3F~LrNH7ma$%Sard)IKybZ$FLBz+7fZT)0~M<5-Y7Fbub zOXGJWTyLF((Z#m-mAnyKLybw_EW?%mjpGwmv^tkQeJPd4%ZMOt=#0hz=*jy(hUx$7 zmm+6pZ3D3TACXMp0v1Sp!V4q~IE6tGkRvh)%IpA&mLQXo5)?>gX4%P<#J=gnymJR` zU}1PZMTV#;+MrR$&oP!HUzOgN0}nvy27v~12YUp!@h$GLL*r>{a}QlAye-ix@9n@% zT!nH-SWuz4=@s5$Y+_6Z-Sl%e9pt0U>BfXT*ZYW{3NAA-2+mlbs+dxgr?C@~=}V0*qF_uld8&o05Pt@E=#- zMklcW{A;E3rH_+*e3?DQzF!v1E@;PJV>KhINAup0*JDK{UCk|eZ0d8ObRszZ8o6*h zuEpH|liHtkMt@Jd`N!7*+(G@Vm;d+bl_dz5(h71jM(lEXikr<;l=JR>@&1kWyNAcK9}sI0fe6=lhn#Fk{if`1y!W@1&8aab;Bzw? zKvAi<8_^4wO!09{l?o3oX=1-Z@nt5N0628ICy1o7>6w*um0i(#s9AFRm<;>t;?dal zDHaN`xeL|8K_r+Byf+B}TQ|N3-%JDoIQ!`gqbe`&%+fH&!fMYF?SaR$ybfJJ{OfmC zoerd|m|8Jb3rYq&He|~Bo{wi~V-=poc*}UrouyjR+8bfh9do76KQOlQu`3@%VJ+cC!+Dg=Gtu2cD?V>DH^AEmz1QhGiG z#?d09GIXEf8N;c6-8ahweAsY*eAvH7g#3pi{>IzLKgWNpw2FKYpmya8bZIQKqlN-y8H^{HR%Y~08q-z( zwqs$4s(?`giFSrQOWqNun3qIKiD!#Cb9U$kessRcuud1*Wx#EULX+9tAOTldEUp7W zJPtd(Txhp1XUFiCw7fO^gowGR?&zCgZ_yh~7V_yWP>?J#1IadTE>rLNOpN;3nn-;0 zQShUXUR+-+{6oF=1$qRVTi9o#Hj&#_J^^2M=O1G~(eH~oYkLPNYrVhKh(|k~*^v-y zUd5KRAIe10<+(0*H|As4Bw)+l9qjigHX)FaNe^26jRV^#&1|K?5@XP7OMd@Z=Y;T8 zxoxgZrcL1(SuLSQva!204Jrq!j$hVng{pn)gx_YaLkG?6JerZ&-3&XS!}}FWWsF6P8l4EPrj+Xcc^WZM0Yo&1$T`fg8A!C%NV zV3h_Y1v#*K{9=nY-hHssP7+Y-9Y4wSJI-Hr=GdV@8Zq~p3tN4Igj4-Rt_-5yYlQrR z-Dinh(k~Yv`iI%!t@}N5qB}3wtzZT0%uax&@%^Lm{>wBLXuQ8(&9^TOthM_!~dl=+l z@NV>@=RO7j_EIA@2f|=v(ph<`llgRj5!M{GuCDUoXmR({b1?e*!pK`NJxr~`X^KuB zgtix$P`}%E)-#|5ga2qjlK=Yr6abdij(_8L$6BAowIENQ&=>gbOt6uOkOW0ZjL35# z>QM5Op=hM69EvsB9pl-MJ(wW~J_QPBV)dgyOV*Dzt^O^C-6Q^K^Of%_L4l|Fc$Y!M zh4*@uHvW<9_UNmn%6U))wx+Ekx5}8Vrnf5}cH(D8F#JOM7W_o!l?xwH^s>*Pm& zDCEbL&mPe-q*YxFIClBC)leo6_4$=J;@4o(M9+=$8m@=Qd;#&j-J(h!A?b9{IwP=R zqjMmp*{XDTt2f7#MmL-0+6g$oABGHr@{1V4pUUxFUabqwI5b89k6CmBrN18U@wO7{`YGX9Kpr@({TB%Ya#| z_WqxZtp_iLB`nd_nP|&q%{|BcwXxd1%(!gT)qt;WR51Xf9(HlNP*S1$z+=SN3ZJRX0?^~&GqBa4^r8Dc5W3!y*y29g)(7+c)#=% z_4*vT&i{WcXb1R@Z}>T(AoV>dTB;t19>^=9A#yi4Uz1|VSF&{P_Dr(C0lql`@tai@ z+a1qJ;=w+RV0d$PKab!TUqT?QZDwV~dpRtWAF?jWhVJJ0s1UXt^q6_?x_XvM;nv?5 zxmUt^R^_F0v|R&1+jC2aezAcm<0H4pEMDO0Df+$ZA!AzDs^YU3jhJPyyf zw6YUqGcQ0z012fy+$AI(Ngtj8DgJ&(-%2RzxA~(lRr`^)kH=v7Py&kuo&pGijp49N zAIH-bB69d{nVEpV;^lzJT_w6fRb<)fgSEJ8P!REa7T~3KSiHE)e?ANF=l4ha`w!R- zh{^fK_xsNTVpb+f1ym3F6#;$f09vii5{X&4hBW}z=D&c%8>NBQ)w)Cjes@Nl?oaNX zuN!)UJNeet^u%`Czbi+dw|(b8Gjjm!Iv?KaXh zZe|hAP0R%g6b||xA7BE}z*QBW{N{+sJ~9_**s9;rDjvrrbpnNX#Ia4JMpCuu)lcKZ zq6MpTc3^+b77Ue>zad!BKxs)u18BvLf4_8{I+BzHCLnr^kTTtIygDx| zdmJq!Vdr)Ne0x9GOthch-V4i;`PSUvIf4B7sKS4>-oJgkf3n`P>seg+v-H}xf2804 zZ9M_mb+s(n-8REt*4vea$=E(2Kb`IbzCEUL_ex36y1aDuwksZ3^0}czznX%Dmx~nA z0u=d4_6@|fs=dk+m(}ya5sAQy6eH?3#%N@So1C4(H4*Gkz)$y-kYONAdKN^P%R`1h z6j@JB)qOWDbRwZsVJ1}``oXgO%%a1TD2>&#D&0$rsMhc#Q~TZFW4fiocLFhB`n`eB zKgiD=_nAO-z_{|sn3&-Ni~0tyVPD>_gk&<*YVkgShT5yFvF;bo<@u`} zxsSSi-dd2?Sl`hQqxrYKUs??nEX8YvFSU&egwtZh(Zz?rv63i!#5)(lf#5R<7n~{t zac>JTL@B;56{ku9_d}CVL-5t-m2mh3Ph6yZWQJ^)zM}7n3VkKaU1Lx*BN>NG%oC&r zM>?|83wQ0s74C(p`S}1D#}(i?2oQLP#MtBtCZ^sjKqY-H*6|e+AibtrH3HB?C3PL z2bhJaL<7}o%Z%(Vnfn!$D&^r2$PymO6THZRG)Y-O-&RUoC$%tBSMc&<=z&UHQ!kpM z)>{x{fh@kzuOz;2j>-Wul*k`T_uroqko%3N{+{3b`wd)hc`)GI1?Z|2{kpn55q{T& zfGmr73yEr~?FyGu$lIK5al~ts=R=^3C&Qb=o-Y?LIx~DNAvqBo!HeyS6j2)3tiziW z*%MEW!+z;U922Qzh1G}-5|99_-lPX?f5?2q%d_RP%u9Ba1CyY=0D#o8Q-3NcXFk%zivmZYV5Uh^5V+-3WJ9}_)c~L4T?QJ5V0R8>OY6_z1&|g_C zY%&k&=~b^7;)7-Ws{87Q^S8BKh{h-D6S%LGzM1~pfP1PWmsJ12T9TKwy z1fnGT@K04HVM}if%)oUqyKx|1j3J`py8SzdFG1qdU?E3%dpf`UOl1c4qR!zAgTl|m zeG&!PGWp2z@x~fH&Zox`je5qA+`x}IQK~aaB~>Z>F5;-Zoj0h%?{%YmZmT98YKYFEqnMY(lRy`3oJQO`1v*>(di?GK$k;MTAp$RD`0rl$PoKnF=+%JkY5XHI zk@&X>^uU2kOT!~ggoEHb&*5+xuimuF#%9hm?$-@`PWUN zF;`0G{uWjjYonN7;+p}M{^gws0+C~vMxB1?o3V>k$v8m4#7iQGgHU?`b2H6%cE)lu z#5->fNcVWA@r-6?`X-eG=DwK`9{K5507N6`TIh0u>o3vQ*JL#qF)zpbd~&4NK9n2d z%~OykJn|;=P0YKKi^OxU0?(DuLf;o{XtmoGT9DPJUHu&QTghJSG8t;r#HYotx)uM- zXVR}84bPHN&071a!%;wf%38B0Wv#q2!g;YGrj()+c-QF#euQj!^Kyvq(;pxC@6p%_ z))p4}djA{d77di9kq45=VhJ^_^^#LO_>tpH4JWh$SXGe3gd}eIj&uv^wdS?HwNJ;7 z3G-$Wq7Rpb`s36>t|Z$#?<8YiKLfJ)uv4MCt2$#0)B);@l~%ffM4tJUN2=f?cfOq7 zCc}-YAOlVH(;sgd^Oo{0)GuR-IrD3eb4%_Bctjo`kDw1{2)9BH<2eSeYIoi)D&=YP zRezXpZ`w^R-ZbwkhcZ0(t}+yF)-t;-uU|yBGUIwX8he!aEr~z#eb(Wu^)UiTo%cX*sa#fwVpvfITQ`k4p%g8q{lLyJ}W#%4>RN z3AX$cJHCDdO=9mFQVieiTD$%x0Y3y?w2(j#ArZX-B_(KG4bVj-Bfs|}3Tou629vQO zVG#=EOdEHEZx}*FhrpQUUkGaA@!5usKu13QF;o0rl1&j{U~Odx%BM(ri?FuV_34{Yklrj{+XuE$p@k)MK=By+6CV zMtCJEC(&U96GAnokEFUJ2;nbrRon-;6rCnL!$M2VV(9GRM1~UR z)9W{JBVm7Hue3OB#u}i2&PnO#j`7|1+lpUd04n4EQ4Re^`6Vu)4NpOE^Gqx8UyX?i$?P-Q6v?ySuvt zcXxMpcMTFOK=^iY-t*r3-9G2^z1_{T`2(B9v*)Z;b5)HRW8hR)Q`!g*fU7wf+Fg!` zfcAb)i}rU)icSIOZjDJ5vv(i$!2=xFxU|&*{b=Je4>B`7WpCf^o2U2H_T{9hF^-EEScSOpi)zHqToW(osaby=>+7e}Cf!C#TB$=~D zM9FWcNXDjNg((^diG(l(DJ4%o<+Wr}I{ga)E;BhHhBDl{Elo3oo*{rtrxwST%P*Kq zQR=t&jBOyjBqVU24+(}Z3XQe$)g_X~>iu`UVE9Ro2o$ig-Tw!vPSF^^fdGha{YzHT z_FqmjLGr(6F0+CN!$WgJ^O2%Nfzhx!Js9)IA$9#E41UvQsWq*dgG3wEOFArMoGLF~s9O0Gi< zhoNy*k^{?fpE9b~f!_j*ubLnvP0NKn1_G4^<#N8!0D56dVigmz(;#&42}ywPGAuWE zg&-2w@>^4jKoIV7l`Afoe(bl85)p_GfpkBRj+b}?`UKT}dg`xjVC5EX)Q+kqCLD50 z?m;9ql^7D&>2EjFfKkDYcUdcoX;rE_mk*B*;w%&vMHdeGkXx%lnMw?}9aotzV;VVP zQf5ywcywJmv$s5(g22q(xoW-LD#G%a%{cJFf%}CA1P^<#y>K0&gdXt^t3R{Z+33)9Ig> z0(MUOAMcC5MrIW4t^VMzC>lHcBI26cnEqL={B|PDYOE}~uUITcMI1CRrvsbL7AAsF zkwgMLHOCsNGp-LCEnWe5#^UY7Adw-a`y;}?+#gMPGS&a?I@rO{fVjY{u;|4IsN3UV zFt>NML*_UrIB)%{1${ziGIRCpkGwSrMjs?xD&=ObOr)=8kSQz<94b=q zJJR@ghN;W$2LnSF8&>^usby@>F)AIII4*=uP(h#OSox`WCEdsJGmHTqRj>5vxt{}gD4EBPXY_mY!c@Y#I+cn=bAkDf z8PNk(6rECmsN^(1kejlsFY9GZfwWo6xj90>%j~f$2`7>l&`!r=3&eKr-VENU<*gnu66KjL z*;b|bd6bgYcUXQp3Jc1ju4~uh{hx-kSya9bHr{)P(yg6_3j!OIWh0015;K#?i5SB_Z4)K5N9Qx2SX&E#If0$}|zJa<44m3I(`w+PX zLoFRV`4|XXrOS`kmP0M;%Ccta7Ba}B)ER8Hh4419`e$@EBdYn?S{hjWFBs?Xvj_dD}Q^u`x!cu3ZxOhn?1ChRAsfq@S)U zwai_r-^T$~*yAg)52HM?#&x+~L;#oThazQ`eRXH>LJC1-(e(@vLnwC$I>y0r}tzBHa8zU*D^ zan@3L?#)%YDohEIyn)L&ogI_uT&51AY+oHWdI8P96_=jkb5a=~Q z2V^~FalTSFE%T2XR2~)ACcs}8ga&BL3`v|^a zeWMlS>Y+Uiz&|}Z#75S35ebC)(i(4Pp~0LBbgH_(rovcO7bAb1qBb3QfjJjF;@cS$ zcw{jRRkcpRgXfaITKrlp#8rO4;oe_kDVCmT*m{}Cac$MCJt1YfRI!rZxi@ z!HFS;| ziXr4j$gThm`U%BEQaTm4j}M4Us@Gp~Lw9LceJ3jMg;666y?~e;*chQnULb!`k>~3j ziT3i;t+BvJw$R-HT*Z$Mw+{>8ZT%lcVG4li!Q8?4zxwAT$pNYddUS6n!+8!7 z`3}d~FvtM60Xqf{jY!14&PbD`NVs-^C(Udz?kA8}`JraRSz#n(Pq(cYUOegFG6LUc zob-1``1=9oD#&0j8kA}9=;c2LQ+wOQOZ@Y2B}lH&>ceJ;c*V`;ApoRx!>XdR@uDQY z(a1b3-a8UqP{%x`v_nA=LUi*gM%+V2<(NHVg2vRXDnbUf2wtIiI%a`BWo#Hn8s!bP z=P4;8jF^ZX8sGpfDKt(b*SW&xpJONJjUkv;Ah<%uKDI{e>z}w^zi$gS$Q8k}lmMFm zL*k@Yl`@t$K44xnwrmkNl>r|U-_%NGH51Hw$CNW%O9TKhz%JY9R>?nK&XAZ?+p%xf zNPy2@?&m^Oqow!%Mk#>DKp61=cmIcfJYEU@egn*n|J~q={g(js*QN?(%X?D7Pw+gy zyxiN0f|kZG|3JtJSL-rp{$;P@w3i1Mu}I~cc$C z@WB!-dHMAC+Q@?|Bflx{EvKg3NXh0#s)zR(WQ5QaI0T)*e!gw~1jCg2RL{?Np%BAn zpsxP&a)g}Kn^7lH474jw-oubt zX}4t7_S|0^&k$uQ*8_10h(NBsfdkZbK1%|1>Mg*3!y9Z=RO$G^1Q7Xw{#5(!sw3!W z{KA~(K%6%}CR6eG1POvg-SQS(DTQJN0if{xc%?5iWhkG~$2<&ZF=zt(<01iiT))Q$ zA>0-skpOG_&n%yeF7@pR6h(`o&N@mnScu zxwSpxJP8o1l*g0)q{YmNk}*?RPYV<#b>ZiZF;~nkH=|Fy$N`PPgN*TYu{yyOUx)}X+mEXekzpWlkY#jhD zbbmaXW&KJa0PnMeHW%x+05n~Jg@A%%RCr}*K>_{Fdjsr!Mq`&^Ba@=8bnxGXuxO2Q z38|7@uVS}B9l!YcJroxQHEI2y`tYGzuMdhuTli8ZPSO%dRLh_x38c7r>QK7vFa}%7 z)vRBE{hWzNyGk{0;sCQo+CS1Gsfr8wPa*W(8fUm|-ADAfR#S={P_XnrzWKb=7u@mb z%KZ>!j){^^_T2ow`3S8Ry-ou0Vy#iiAxTeAH~+P7qjb?GaPyFW4Zi*$#I8*L7>;%FRzT~1udELNEEZJf}R3Ug4<{zrY`U(g$zr4=| z|8ZyN0Ppx;tpI+l>3f1(;AU zkY0EWLnlg z^Awxu5L$X3dCdrZrLs>5@QyK5dw#K{uF6y2Gr#RyE98@1QQSK5B^S1ZTBo-Et3B4SL@gGtGJDc?H{WZ z75`hSI9OJ`7ppWEVoMGU%)nrON_bz?FkgTfn06!Tawd|3$(a-XkGXrsY>aUJu&~X{ ziHY~Olc^Tb=17`kTTGXej5fF$ zbD68UQ}V~PDCxYAg1^v5ga;FI6Gt2Pvu%NNaEEPpxX=e)((AcUyGIU0j-R*|jF89| z(sIrTH1}0&KAo-iqbVKBX#@0CPS!P%KCbkm-j&fZ4@iL1xS-r!QmXiYIXWNN=W`;} z20-?%9!O0gj-6nJEo@1j7To{TB`z7W;Z=fF&dhuZK!C!jIrr=R&=ZwP%6?P&!et|s zRKhd-ttIqjt@OPZuXrqp40?_;429ig@VmAC*ScNFg`m6&{~ejyo?0Kh1M!Hk^K|3J zKr71|{pT21EE{1D4fh5;>2G0OEM{Ejk{sK*Y1za}m>E+nwqZnB1O8*(KS^PCs6%)* zc)I0218^REpdaH>`?-3UANHkC5@H$cKOISB#_R!86Q+n#>bDfd-7#jX;#)ekrrMw` zO?<&!lBVXL9e`b7wwKI_TVWlT`VF|z00q;w17f1+A1g)9|IS_XD=z+%9qoTqI$8h8 ziZvi=^7QD{PY7H}0I7r_);Lh_Xbz?xcyte3(PEIcD7K0Ehb~7ld%^5Qy-(szmmqdT z8+^wvGuD?Y4uBc!<8NA!1owpQ0_!XXn+W`Ir zO9hPVBGH@LyBv0Em8pBzDZ0rlmfD~yn*Dg~YjFivw#}2uwz)TUs&VjufVO1=oW(tx zMS+SkMxj)DdD9tYfBka3zi70xrWrpd+YsyW4Vm)KMnx zJezWJeF^&$)KgKZ_iOz#)G|^zh*5~+a@(C-nSyKdA8`N!vy;-!n}|AgYf-!}zC20lX8nxlL8CNDYwrJ(kaLD4COTlW?MKo2@b;FTY+ zi?SjfDMBo$s*;_uB|y0tLL)fp#`l7YLkpxu-N3Jij6nntC`;^PwV}3}`0?-$*_Nje zI9l_y`e>?fngf_z5eBsZF0C&Mkh(#(2=I#WcEKkU1_JmI0toOvC1U8aSzIWeLoG}6 z$b8x)KN2!B7s1A-lD;xXrknJ={rC+VLK2qDPytTMh<~hdpaCIiXlqSpYHMq1W&A%n zXOaH@e+syYwXMzn=nB8QdH&Ns|JM}^0RXhIq0|59O25whzrT_l0M6DoHKsBDce<61 zVz2=gfDw8BpzlYS*vij|URuTi$+Z|7qucrd!4H4eu3OJta|lcd57?yM zll`tc^HYunOUkmH5n~n__cDS7!uo0sywYTL1~*rY6)hIDrqNHQ17#5HX73?b9b3AZ zd9mw@KU3YX=*@QWz|wshgHjgO!-&0p&qh@GX<0P_KI|6Y`|lrte#w6Q{c?!7*;$zz znmhd#8u>SBQlx6GiL8p^9rBShP=Eo7Qo}Bfl~^xuPk~>{F2cChU+t2!2SGGJT#7W* zrM`0WvD4*wgU-8VdftDDxAJY___X^3&-`U8LmwX+GdsN1F~xEEB^#in?|M}2-A$B~@ynN3afzLJLV+gWBko9Y~W| z9hFJ&tj^3tS?i_%7nxTJbsBBpAR_-U9-c1Zn2NHh%uU%ZeW@}cz(Yd7PLD7xbRd3I zZ6mZMLrlYKV1FnOCyW$HT@x<`EAc{Jj>lk#dUL8678HDZV~LA%jmb_RXO_r*Gh8G; z*?J(-NfvK$(Kxc9YEDRih0R<)ftH_AWSd9be%KpIq=73jQx-5@il28Ye0Ti7HB;!PCmqJq z=At{`UtS}pFIf`e5Y;g!E8tMy#TYZP>7&!~V;9ggIutMRS)xbfElEwCvMVo1#HiP@ z!mzuo9wVrmCb0{X)dhQrplX7>v1btmY-T&E@-Q@+zwi2npJQ(IWI!#UWHtN0!LxRe zSR7J@_QV^%pIijSAq}7~({_`)brkJdXD-@de=BuU?e}!k9R$bZ9r%pNJ4A-bJ7|i@ zJB)_eHJ}P5co-5Nte-hYA6yT$gofLkF$MI94P)vf*T3A7w~OUP<+076ugSt4<`_8+ z?inzvObLT>p{3q8USsUMCBMZQJ`8iT7OlXcUM`U$rL*@eb$q2VgF)S_K}}&(aa$2B zcao^IRR!&?s%8N)SWn$Lu|r_El$?!VJQyGFdf4|9eZ?sk03^hc*-n@RaccpJj_rTFYarSAgQO*rFDUX#kfld2>attcjdd`I6 zn9#xvX464i2;LJF$y2_3KIzQ4$b%xuur`Np$u?xrIYdP9gv_nqv9t}`x#m*V%ypOR zv%z9_^JH)L2o=As@7IqqIL}sv(`X#5t=JiMat;eE1@Ix*(H!s0t=K_I)#o|=-_dNb zLRPC6$az1u*%X-c)blxkr~BtUaFr_Cfn=q&gx)r$I-9sI+s!ZoyUBJKplqOo* zaCl}F!)YJ&fdA5#68eG;y&3O_ww&%Z-kz88W5;vZnYCdtXSI`ia<0zo+K%IMVdr%~mexz~ZN;9a7J47pson zS|6t-Vsdo5K}z@R0n*rd| z-ER~;q@AQ<_G{pKjdmtqgOn}43|WG?jMQi?Q_^dtB}YZ+|DYepksz6L4363}Xj6zF z&{)<+(zKQ!*@Anq-p#pgLK{1WgS3w?_(p-wf@jndYgrn71>a&jD|b6N9F2}n8P;n~ zPV(9|9Ket8D3VZWBYU1rrls-FNO^Z{(Mcj1r0b@3ZVUNXZ&l%1FoG0Zqd zawa27{U3wGd-D;lmJ<8}pl~(nkM;1XNcbG=U}b=ngH7LAK!RU8itTEgaZ@F`iA36y z?0L~47L8ZhJC+l0Es8+R)>JN`d|X(6_Q_)M_@OUFL=3DY&9hecN^CqoV$0=@#}@au z2eNSSX&lx>qH<1DC?>{D?{GdlYh)1$lGkYe1atB5E0QvbG&7D|LBD|}9!sJV%MQuI zGExnN%QQsJi5)gII;G+g=U1ccU|Y|lpG4Kv*UCn~ml>hCWjk$jWeWmt@jLk4SZ)e$ zWJ3Zx^B(6LoTLWn1`Kg1MTx6zGJWLxQ$LpRS z&QquH!#ey%VGKq};(8kVFhJ^ITI)I$d1}X9?iy^qU9Bz_fCLLp-f$(Kzf>W8O2XMD zl9OQfQ(iU|l$_o)5yO*Q-WQOC4xZ%0rdV2g_16sdtWvgZJY9APvx*lv9nBq>Y3`WQ z3srq(Vw_kiB#ZXQN}eI>C<+~2^a`l}TV~woj=R~>a>2MY-i-G<`f=O2npa(_M_-Xm z<|J}sqZ(WD6p|T)H$iS$ep1@pkY?Cjf>TS^j}G!}tnoUW^oKrXs^Q9$EL-rdZ6+iL zMR4VNi7EPzAFnVG-7ornMX&QJH-1WO$P+bnyk^3$>rWbu(AP5UE=N2L;S#k=IAAB$r> zem7=o9@gf5IbPiUBaXoRf4JSm4FBp6Dp|@R15(X=GA(rkP442;C#vsx)Z~QKdYFlY z;z{u6NN-J>aO3ft7>t`Fx7Eyu^uLl#WLWo*n<<4DIb?Ch#6}v|adw*H@zl@PyGw9i zb81+<5BsE2Qt0GqVg+A$PtMFvoX8fz~vI9;%x{VpYT zha~I~S7nHWwi_+O%8(cKE#e5Ute-Cl?YRxntICS;C_Z0SmVHv~x<>!nhM-mXQKo%z z9i|>uHMoha2+hs_UWj7kBakc63vua+NWr7}Z4e#}(?p6#0l6)`k&00S(*b7Jj_rQU z=pt7MMyzQefi~HSU1Ieyj;W}m;fH=LSE$_PEO#KLbu4WZPYj+T z&viwaG9-e3h-te8-$<&-_?5*d!hoE2k!6yr5FZJ#odL^BmrPzRsJjG#IJ^5E_V?@4uBF>825gGZETbu0ml zT&dDyFJ*|Bau?AX@0ZXC-XFa45>TLLlOLUhJG$+%L_ZBGqS)+^exJ`fKc(*?uBZ)2 zqC4T@f1rw#En!|IzHk+kXAgEJ|9%2@<$q`?>{2b%#E%{|rcw@m!Z+>c6inthmO%16 zAk>FT{KUX5WrY|sViH^6ow^3`?BFH=c}Au_`iS-ms9dp^7H|Q?wmRrPov6RMN`GJM z{h7Ro|Ce<3ujp2mw8c_J`B}yDuwod}k_Q*0Ku*%&9SBE2f`AP?L>#qVNFk27aM(C z89rSd@OofaV5IaF`~H6DCa@j;95~gOVtP9EIn2&e+xud-8Z_V@K`79VaJ{udt5{t%jy(2@ z&3+^S$!y+;NREsVVu;hKMIX{J4nPlDJE%Ci20EB<>`BbnK(r2GvD%ZWY?3xNw>B(v zjxW4wN95vEj0GP`(sG?Ud=?uwXD~XCCNi2l$|mCusy=O+Og?Y2(nnf#!Qr&Zh)v@u zDibn+$dT!5ZiTwh(l?URmZ_Dgv9j-1jfL-IBraTBD;iFW5A!!JjE7sD<)H{dTag%Y zWqTvf+z;CGZ48xMa#)JC^BVv5)y|e}ZVKM7jGtsP*2L`+q6}SuPnp_q9@a>aT9fkG zkZ1Q!B6;^flwWQw|7xR_JK{{y8GHG->yT5)H;q8&83f3YYfjzeF!|aGRr{0d&d2_= z_s^11O+&VjWriFP5o&pid=g0|Cg`~xi}fvm=Tb~Nz*N+(R|GOpwJq|B+W%U)%=^guIp2XugqCzcR>K~%X02S6kNd|ygx&HSJp3$pbuHz_ zfc&0>d>~7(*jB_1&%~{p-@PSvcUXgx+c(^InbR8gPAzGl_5QpG5rwh%E}8* z+qXSQ>cxnOn<)N zV`DD?KQy1bod`E^KWN=seYUQP{_&^q$ZnWVj9&x%ZTIn7^L-Sqr=QR;(*1n~yX{5Zt9JOVb6#({ zQC``8hD^WFb-&_udxhxg$fKhdG*5^;FtFi?fA@DsIWoSbTpIAINbOU(i5Symz8kkl zYoz~*F^0Ds@vQXoBJZ^!dAYtG#)2?o@wPurDK8h*Xlbk_FZfK4RtO}mQhz0Jq}b8% zuFUJqO*BKo_)|k1leu+Q>2VzlO##u(sA1SaEeJA^Py!LMk%fPrJ9`QZisEWMzAN%= zWS%pj{Z4My(i_y9er$c&o*-|M{tE6IheWxDiDT<(=uX=80r>%N9}Jl61z=H z3`2upB+ijB+}Qt+%0Vw+~QIFr&O;*8<}pQ4b41Li#I@D2_2tLd@i1sjLM04W(L z`QtF@1Ea3{+zf4)nFO=g91(2$;7Av#7Hmg92aHoW1k5*pYA!jkQGw^jBp? zl8ln%=?unaiJlfRC8~$6wK6asB}R>My+pdMHj4p-9(QZnBGWLha-_&cI1P*qBht!; zmw`(?9E1}RGPSVvE~PRjCSfcpOSp7*DKx0>4vZ<(m{dh!sxcdaF6rZqwZ!4+^1@ic z4$7@i@)}i+@dI`l{Z7<-T9R!+#~TNG@vRMn`c!@!SOqm`j|x&kTqWeigUFojO-;E) zj;rQS12vTwVCQ8#)WT7NaGzTjIF0A=Ehkuoax<4@%%6cttZk{yLv12?%opmkTm-48 zjlx4r(BasXEBDL%mymTwirur!TRu#u!oc8+j~PMGeMZiRgcqGK%Zwbvs%&vKVg{4b zGP4{tGyU#l!w z9gcmk$Ezdl#*lYIlY}+MUbLJkdPd~}W7y4SXsP2dH1g3gXe=N9wqa#g4Hk*Z^3hk> zJx)^S*(*lqi@L<1~HMh;p75 z_C1m<6cr>7=gH8U7Omc<)C=w28_i_|=435Q0p+Eiy*UY(C9C~@R9awh>F&m>`qmkj zEd^kF&^YjH&7}|GqNk2So{nVc%+V2AL?)$S)%iHQxlLF+()`*DY#6*DcK`MhVuhv(Ozr zVrWdJG!dJQ6k`)J3P9CXNs&kdP1B@%(not`9m*J#myAGbP25KY`hf1`*{UAisU8Or zSCJC$Hbt^mQ$mOzEwxDZ{&&fF?nU8nsazw5RpZw~%f%W8S3{PqQQszs+F?KYzev&lJk&?!iDNA=p^N{wW`jM~F#+Iv`YwpS0$QW&B$VrRIBgzM9 zx+dq!O@7veI(fX`LfvO-9l?y6#Esc%bHiWky2sY+)lAqN4cX`@ELW_8FYB6SKs!pD z1;db?W(4ZGMj#6m>m@sk#i<{%XzpoUvMXWQ&+Z~sny6s)c}<)NjBiI64?1Ki6sxyb zJ4NWMMlI?ay0i1Yn^nrtq&b&cVXary;ZPITXHi1ehfcI9Elt`e-$*_gr`?xcuvnqR zs8mnbD5~SNYY$?;RJdVnRqY{im+ujDh?u-lV(GOjYZYbL%YlrXl$O|)~iqd)Wie#hZg@n@- z8t>_pCzh7Hv+;{EQp8;H3BGJ8^`5ALVZIT|%{w>1N?%Ay$-qcsbGVopypISQTzn9c z{W2MHX?o0f)}HLU7H3>@1ty#QxBw~g_Tkd(f(la}SL^53<*SI)>NT$| z3#;!=lnYc%d7S=6YO)b;O=D0-DTWF_nA&Qj!8F5z^!T;Q%^{%BfLmv}@j z>q})vY7y#S(?xSAty2Kkg7BAVciIj`f0%KjM`ybRZOdVo%A04s;I)EMh_74+`H}5*ce&B#t!WH~*!8Y9{Ce`Mps&5=8siLuauy`|MdG|AA!(EzT z@)o#-b7z!Ok(Bo5(1F3UzBmzPnm*OabN`vfE&M+F!XQ~*DWQVLebjFzUtR0JPtExB zjjCqV4Jc=kNH{0I#!>7E?6IFFs#cVDub6A?r($=ly zs|VOV&WSH)WI0*yw6Ut3bG}*ly-|>9165fnHde89Q)(ma57T)VBfK(u2VYIndc3H_ zEes`1Sp;)XOKEg6yZT(~kIa#XT{UGC9wTt?!O`aPw1#F-Y_jpi&=_tm`=iyiWmq_V zc1fgM&vYd0ehO&V~0-qJ;0g_cZa{(uw>SV#E$#+CtAHxl%0Poof`QQnIb3y1* zGdw$(%}>`J$aB#jT3=$v_5u;#;BJosCnySk^OJg!Crry?XnJ;}|FV(s%DW>#0u;F* zr=)T=2o7d1OZa$b(~QZT!{2jMQD}`r^4BYoGS+@79>7Qw^AXUSGQ79(JETjl zDTKNJd-p+=cw%h&?4MFwz}b|8qGQcaYGqk`;Ah~m)8PR#p83`8roUBvgHH%|)CtcF zo;SKn?*(KI>xE}mtY-6DtG`@#O0ah|^JNOTjd!(fn{TpRpb4%Sn&P2_I}=*Jj&DdO zMA8>1tQBV~V>Sen98tcPuc-J*eLtv-nnGM&Cf(qp+yr6Ou3$s;=ovh!?P6lKJ`**g z+ozCZjDsYPgAjfsNx>`LCURS_OAsHJA3zfvpt~34af)hqBqh28l4V@^2KzAX-TDU1 zIl|J)w$mD!6{E+}dYXcU=shxy8^2nlsuSJt()s=3k=NM$3l$An&2;ZLZ;Z(UXhSVs z-?UEOh^2zwF91OLo{A|1ng!c5}RE_wj27BY2;473DETR(BVmDZu89u1M)!~f$j;j(A2~V+Uv8E?egQZI1ZC8h^ z&aO#lLl!@y(RpaW1`q2nN;HPbj(~T=-t-ygZ89w|O46YRay`ZvuZWl*EuWm{F*UzA zV>Hv|msmu#EvbIjAwl*kh6LQh#a~?ylb)HQc*A4T&bmbE+=IeIvU@GjuP!~n+R=*y z*+CZ_iG;0SJ!(uJ5 zJhazmkD>H?8j#8=U%8Kc?02HwDOhBw288S(KFz*3vnJh;;ArjCF%I7U1*tO*w&Rb zcaM`;^{vo}=kw{0E7ZdCDAeNfsB))H9Xjn7a_tvPvE{BGrygogMRz?V$-%Q zP$P268(RGS8**c6_?cV?fZN;v64QS_4Z{16mA|-?@o$vPkyzQr+SbV2#QYcL_UBLk zY=K+b&dH&8)9Puq^&uRuYlld-_D~Lw5k3nH;cOhX(jbx` z8Y4cU6K~F1H5!`1Kt~DP7icgm)vJDeS%nhnD0`Gz#8^|R!&XqRZlq)>M=ozG<6;Sx zVuc}JHVM7d01sr`o{_#Btl6HuNM7dLtZ6HsRk6;>c{7@DuZ9m@>RN4v`|f(B%%fMa zAgx&M3hPWiQ)*E%+xTNJ+xQ-)QcQoFaTFtX$r%_f;GUj5zl(kA=UoV5P|2|dk>Gb%vOcqt5BfENpe+?Z;Xq4+aZ-4wd;@=lahQQBa#EI!%OoyddZnd5USL zFJrWeBPB>|#=(;q+Xikb)|Z)PFLjP$EJ8UQw@RH$^`CO(_39Y(C)#GePwP4_N@1p{|f`6~&nIfau`xm4WcN zk4-q{1Z7a9PW-lqw{w=Xa5?ZJwZ~$MFyh9D&~)S`4XA5a?j55Dvst%omQ2I0*g-ep z4`ha5yq0ScGn$qZ+l}OK)syClNaN%U`FLwxc7~a6!uqFh=dVaS$s*wk@%3z zJ*18Ai0cah;{*rL!+M{Q-Kw=ZuyjQ5qkT22*ts?OISF3B5j)txV!;;zGW4O z^Fu-7FWMqV-hPiffeY3-x&yl4WB_dW?}PjoNBr;GTYrYL)Hoi#_ zN6?(E>@7TKH_G%#xgCMQ;DgI>$Gi;p!2!#R$c)DYc<7FG?Km@n&lQM6Tm`BggC2rC z7Y^%$%$cgyQzAF#&!8e>?hcGLZg!c5#L0fPp(e(0;hZEY`ZVTp(yo)^U?(0KkeNGB zD(#okc6=b`C_qblAK4V?71Hgh+(4z8{jCfqvB))>$cVoW&&`e06Z4ETyFh>MlZw8qSvV{SxJ zF5{jvGF|Ks(F&AsW|KTlk5De7j4{$i<*!1G&)OSA$qFkaNk2+d zy93^Yf1FSJ)U)W$zMvb-gzYOm3L~?Hl+T>AHR9FP6CaI=!x5r7V~&i=P{x&}NI^Q3 z%6~(M*>gvZG5ikMRP*UGe<#fS$@_1dG3RcNl>!if=KnZK`QME|#((8hMQz)8dK8|m zI`2aLLx!~$Z#o?wh(}&KDz_4^v1T27sDhi@IlXh4ny1&YlAzHsF$7MC(ZUg|F)gfh zc_-ZFrSbhjY|cRs;-TTwX!M>rWog|~#6$}+7Bbaro}CpltVGyIc2x>1UR-g!QyB|n zze2?qYN~n#oc>aoR0rLm^mXby60FwT%3eLkjM#hR+vT}vuwq-}GQ(g~rqR)J9)gD# zQc1#Es!dzE><4Zq1+(_-bFs9LS+dg&(j&de*7qBujIKy{lp!%!vLXVEH| zE#UG7Q4Y6I()9I|7+C6wSN-vu1>z;wULW(surrz-9)iJ#H~9 zK?CSmJ;fx*-fas>c_1aFGUH_)0k}san_(!Axl^2LGF7Ia}M3U_)l5&+v@ALx{yeyO*k&z$e)V%M&5u1I1GhN`$)i$Pkc4CcEi@ zFU(R0v26N%j5Wr4jLFhpcQ8+1x%MH)3zO9r*DGMKOy`pF?7J{AmZm?D-ivto9<`&s zeACKUbSz(wJC7K(%?)dIc2c-OSg?PiHXa_8d*I1)@y+m z=O$V4G5I7b_-fXcT$n8Np-&`{S(?g6LT|rwjjINkn!Y2Oz$-^G_nV+j`b;?FAOpeZ zHE0=fA;#83thZELIK!#Lfn(#fFq>dz0xGg%BRstc!8~Y@ff(b^*If_ht)9sd59nrl z3W*Hipf1KgylVYjhD&e(>C5*2N!T&}nZDL-kQoqoWRk7oX(xk_G{`~M5|0GiMfQLa zOX*N^#h{TS%yKr3#3NZ**PMU!sQL*H9{R!W6d>$Nhf=PDhBhuS;pU_<;l}v9zCPge z2w@+^_G&Y2j`t5eK)J|G8lpW~U#yk_e5|=kp)NySsjo4XI+|ZI+ksMqnwjdG(CffZ z!yW_maDt^Y#qwg%mn_AfWZnXMIaNUX(YOiTQW9>`@E(d$jAifL?fQiDmzWBQJ`);z zAX$i;gO35h72#EX=;*?17b*(&`xeis5-*JK^o55kvOGpA`i7zb3WKuo2Xl4Ur(P6M zm%f8G1M=4FK;hOL2n*dhcfz?#ooZ*{0ExSdE2R^8S!ZYRgV^0g1xV6o+Tt z=|GCfGww0JUPbYoG4EW$@aw*1B9zy= zjND$k$qZK1`;w}5ao`(g1jU1o{69(93^+}GS9$){>7zJ*h;)CapwFLBbA+KH=Ol81Xz16hMi0yT3wnqJf-bRlL=+)s26Xl7H0 zP$kg8l_(5y3AF%s7^g3RjQSeHlR9NLkQY?cUFb^x#yZ|%rQ114#;g28*77kTE(@}t+CS>WX#t4Lz3VBE^ELTW^~9;zGVI@e6jtT zufG~Jv=4w9#<3Rtl2((NRoQ`|O!TZdp^wEv+>cqov%4fbg9&CM*HHfF3f8)t+ik>a z3G8WFNt|HGjmasl*Gac(r^AtHyDgB70bc;sM*X-c2E8qV0c;U%v%|oa`B7!S&eKj6+2g5q#Lg0!T=uNk+MNTF6Op6+Wmm)i-#xXVPUB*FcU z(=B>S?|Toi)D4_})@oHp-Qi$kM_B}+Qq0Hu3{6rN#&xhrO*(04ix;n6up=B7ExjQ; zX=MnhyU9|j=I$&CLr>Lb6Hu?u7SvMYNUvucl%?{Gm!$A3bqPxB@3b+3U38SXm*yW5 zMMs6wrtrGAo*6C=m{hi}G_1RXTm);4ULX6>7_MmbCQ-YO_~<<|c$gQ)YcVYx!p)sK z$fjHbq5s)@bpv%COzLg8t^EDN{;n!^LGkrgj<-=6_I!TP@uZyW)??l0J1O3GvEw`Y zcyiD5#*zD6()5a@sowH4Gf5QzlHW|^hvss~$lM217Hb0?C-C$3i=0UlhYaiX8F1U4;s~b04d0?t>H3-=+H8K{1)XlVCvcT ze+&EUW>@cFJ`q#;uOP<$Z^Zsn!fc&Ll4SA(Gn=Kf+7BR{kE)!mp);o)t2mrJ3mq4fdB&ZC2L=mC*i?m<77q9)1hY|f_u)ypTQ=F6U21Qz#Py}Lg zxxJL~X|mdn=&|A;Hf=bt+~>|X5<#@nKexusXJ#)b#+>daDfLnec(!*>qk z9$2htEm??w%-)t}8kyeTE%7jT_51BH-uq2V|S6 z+3DwYHy-}}j-d%iMd?9ZNGSc1?lWBQyx`LCsi@=t$)-_h^A<#jkTRfrYokQNp4KCh z$jaexz-vme`};~_pSkFGI$mDTs>$_x;hPNh0~o+e;VG6X#R&0z;N&jz)p_}e~34W`0PRvG1I5&HGyLk&r(cW8b3o5q+kuz3t&(pE&&(m z>jRu$f#UL4%3^GbIj-o9B3W~!LT;SDXm*9xF>hey=h=iRT{?i(nMl)$exnjK2fwPmiH zbdiHo_|xJWvd9ILqCu@=YCK$!t|y-FMprtxUF$jfK@Y?W^-TarY5v2r{*`Tk&jIDk zdHB1HryYG)k4l+wCTLty_X^ZIesw|^>^@(CM}~D>odaNLg;%8f2I544saDb`t*JfM8#yYZ^`5IwRQfhic?=J+wSVurgQOkwozj`q){>Lc4kCzXy zUMK5=xIQBe+M}JlQCzjpUJPBqr}B3x6WX-94j)^)pLy_3wg#h0#?>=6qEU7G4r%)U z5?nkOx@H;rfFsM?du@da2L@4_PgOsHf~Y%Vh@!NqI<>_URi?m^50Xa6dE#8(N!LykH6%e-}QWUfr>yZEzQ7N}dJLf=4>_tRbW}A3i z>8xAu zT?TP(&4HnYgPp|i`NcP!6wbJG0hKCI`+Ja^OBB2pz*uYX2_tpB^B#hNuUy~I_S(=s zuQ-nr4V=m@i=uZ``-UWA15YBVcBr`)i>I$&GA>xU;^*0x)ertGSEq;v%YFQ8+dyv^ zYs(6z^UUJsTT-bzwgihSx^0De2eAb*Oea1C99q-|55I6}813Pf4PzDx!23hsuz-u6 z@=&9;Gl>OB8@>od^;5*6@?SK@yKFRp*%^`Bl01IeoEN0XMN z|B`KF3rfbz%z`oMJwzq{y@@}vcxtw(n??SgVG2Dqi-L#0ycL;qG|fez#dpbhjwal? zozl6?d_VJ=PxSdF>a#o7uh`m_;~t)N zlP>5YONtDN|DAN zArvkSKU8RM;zQNWwob~TlYCR25CRdGek&%GZTY!*A3Pdscfy-F8tXgvY~iX18rhGFHCQXZe_&tD9yUkfvDF&G(_b5XUP zNAnb}oQ%$>p<91APO4V1J`1x|Bu{1P?^*P6LvDnjmBG7SldQ(kOqrhlT46icBE~}6 zjNee(Og;|pL9(*L^hJt3XNsqwol82q#JCHGRU}lvt>`1Kxt%Iq$c5o022-?JPx~+* z-x|j~Kobl*3J0st158sE3u~AQjB7*xCmw1Q_+qiL-o1O^tD(d4&U!z*HyDRQq`|qy zF3LlZsh6`B_!ZRG5%9^*b$({JT-pqA=XT4Gn@d9Mmze3Zp#se}KmO8vp>~1=GD>HM zQrLU!6rXT9w(w5sE=`@{Qkq835Eb0ax`qd1O0t?cc|xa2?1XJ3H=GXvK}(Q`C^DD%OD>_}#iD5Z&?!-?l#Vm7C- zo*^!VKwc2EzrVww%MdvX)r{9=^AjW)hKw-Auc3P*|q7t)1FdKI?M7w_F$dRrGrni*FL9UU%gO^0T5 z1tGf&j7rFF@_sQ7y17IAORj67`%zf=c@94Q@f`f~M*IKqp27I<8og>euZYCQ!S1k| zL0U-mYZXNr!yIQRU*$qXwNTPORkY0ASvOJV^jWQ0IlKonyqp$=pjU$Ea7{|FFAPfN zG3qFXt6?MkN}$^tY^K*0hiW4^7aq@IBU1z$9Zz+Ebz?bx5DY#O=M-)@{Upg<-|H~m zh=sOsE5pq67t=4_F1BWNY)6!Xm=KBPW%O)R-?3gTxKX^zTm4jnGTfu(@_VcW9|zgN zRd%-vbz~7V>Me|vlY80N@jrD+@PG}oFJw!Oy6fw1vRf^qKwE7?jVst$xAV`t^GICo9g80#yx7q1?ZW-V0Rm(`nBV; z3@47iqh%(qBz3>XQ>=>l* zoa)MmG=kF%hm#NraGtVF`&|y@p%=qs=Jd z08q~$5x|{W(>rAL9ZRmqU3tqj`x7Ibdj3Z%aNKCIe5U+-lDF3ZEg8SrJbk`#BV0%R z+gHH^TY0VHNkSQ(M3M`xcN)@$#WgMsmkZqRQ-~x)qH7$VMDQR(B87G$7sqS~5XY0_ zM`$t&`5z&JXN$4=xp~ZuR)ysJJ7YWQq>SBEF(0*~>7rR4_W2 zVe^=)J79K@U#8b$SF-3ew!xtO5eXZ31;TB9FQO(ivh^@vdeGRQH@)4mwVMK{{ zomL?d;=(gMdWOq_C2^ay-2@Ula5O(El@?{{kpYJNyt|^%x;Y&kf^(MyqLPd`V&F*n z#tJ`bhzQE%Kte@=++HYeEGrzwsF(^p?^+{~oYL?uNfvAAe5$gxY}YV^gvWqd1b?VI zgFMNJ1k;%j=K&FVwLR=3pyEanLA8G`Z0AP!VgL6x@M?quR_Oi`ou@9(lZFzRJP*Eb zFe2rC0oX;2oQz`)`25a((FI3UMz0_$#$Q}MUDjWa^ zLr{1B*dl1>3$u_0*`8vsWH8b6b>-(ixorY#ZLp0FQI%9P%DsB=X0!b-O25A~3f!J= zhL4|*9ti&(p8n_cELwT}lP4s;_0Q-6IU{L{Ji6uLA%`D%VI}RSGT=Z`kzgFL-B}0q zY8o^3+oI3WO(_c0f*C&yQ}cW=jCg&~!_-s`AB&mm<5TWc&zEz9mT+!-3&k6aAyo8f z)`i-l{3=83A%sBR%a9Agop>Guu7L=r!<>$;8FXJe#)mbyhd@E_QKEqiO~7#!R#G=F zQ9ueR)CW;^lm{yQM_MmhUK7P<;iy$HPn%u_x}1b9Y7eBAX;m z#1L`@KfCt1zin)K$w{%@HlkuPRc2%p*L)HID&gDD8Vjb^Dutso5e=N_vo|L|srM3D znSGAhT_pq7%&gVPlEn7FGBe36hhLadltS4BV~%kmeR$<$jeUNEOWN_Vx$t})RHQ*q z#8fw$12<7lES17<{o*ITuT|;2-W0Hp0R|;nO4w1qiD%y5wIM>PV1nS>IxASsD5`D| zsINLQRApBeINV#eUe?pu$ry_^Wx7dbso{Qm-91 z3((I=a|QILy2Vr*$pCfL*ljB7ed_aW)AsznNAcaJv(yMDmRIG*9YDXt$J?ijIjv*e zYR>drqSItdj>4}JU{L1Qui&BXfamr^v57C@B4L?+!CVP$^8Jx0u)!=QOuw3;={YSn zgcv)D3iE}0_cV@TZj(Zuf+vLvOtQCoiFj3+R}R7>z}Hy(*Gig3IDI-v!HJ@@=&EXW zW7B(v=pxK&x)fGQ;G>3mjuhK)d@kby7`9c;0rY_m4a5Z;pi5WSwHp1=!d>{cCt1R;J{%>ngmi;_0)~bMlu5qI5~>H)p!8gR-4!uW5?A(b51uHl)-&j55u3HW8Tvpyx1i zlu#zvn{$&NRzYU^TS^AcfTKJ3gh(sWXz0-{&;~d&!>Vmx2mW5_Y=ot2q&qR7xXDV% z+-c<7%qJ-Y|35at|I=js<&)`R^J$gy8877WFKv|bztbX$l-K1^mC$rcl)1a$ z=m_(-$&w=*1DUtk^5jr~eQ~TvA_K3^oJmCU*jYJ5&+2KVq6BYW^kf$xAB>`2Wykf) zX2tcUHqG>w*1WRQ5d}88AZw#WEK1W9NWz69It>Bb7%Cg_I~~-YeJY&DG#I{p$n2WG zhcS+SE#6)_Trw7L-F2Q#Y+KoP*RWfsCY4$xiE_P~jv8(+m_KY6L8SBa0_az5+TqP& z&ep2O@fAUA*fPh2o2S@r+=~MX^VKzTr95XHL92Nk&YvCpNp9yi+*-()W6x>Y1$#-m z@7q4|?p8ofO7?a!{M;5By5f)Kl!8p`BH%ia-8dLW}5 zj7cwB20v_421X4>WNryde}i;j<)oa^yu+$|%=E08!)`SWicQX~f7{mf{*@9N7p;Lo z)*519eBhuU0%L*xc@yhJ6Zx=1v2YKgLXX8#`*_#HzVCZ7Nc$?u3n(H~oz`_{da3f> zyp8!O<>2OKbrnt}8$Q8MO5KZI%%Hxuwq}%uzb8jf4wi0j3Ksl2$3Xoft&W4~`<=j~^9Ry5*nUID%d8Eqqm7gM zzayg2V^n^w0PCXhAUa?k(au>!VfvAU;)TYHzrs1L`s~9wh;Y7DFWWfQ*s|LgCWNdr zUxb{5e|+R71vXz}0~f!0`5X#?U$kq(^6qHBX)QXmsyEAR9W5lYXxXZ_=q%T_$(t;@ zKv`$Dfcj8w=T0S#u@q8V=;eeU+oq_|EztZXmXZim+EpR9a-J|#Zjl?AlQ^u)sKsSD z_SjdaR&g}qdzwVxI*4poz+!PG;4WutIcj>YI!3Hzm-bi{$Rh$3>+=tB!DZHA;K36y zwHW!u_3+>JgRV#*=Qg9LZOH1@xRpw9SOz-FOSQ z*QpQTQGZi}8Cp??p?-Y55$+7@`c}D{soELT)f3zWxjHZZh-Rn&Mtw?+P~IAOvpJd3 zU!*wHs{`{G`6?O%@`BhX4#b6q(UiOSHKs!{S8T!O5zx;gT<4))0*+U@k zeYxyeNT9O6LiH_Lo?nu(H zF-V_locj6ehY)q$Y4#kyqTW(1y;-0O6zrP4*W$IH?;WkYySo17?eOkHT)&QtdPETS z3R~TgNAKAWjr>Ws@MeOJnA%U~j`{kAUVN2(eo`^?%tn5AM!k6vD#V+=TT0-%Hxl6> zJLL6N8@hw9ep5=2FWckw&S;Ib+YRImd1@F3^W}{}tS<>w@zxl!D}9C%HZcRnLb{3H zWKqr0Fs;p;#w>CRvz9wy83vOPOTepDPs1P8=#>SsM+MsMz4 z+JhQ=Q>SEKXs5wgN1xR`aiGK~(k9IhO{lVv3TF?9a}1tAJ8oxfu|?cxo|;jl9xdg-g5S|#&D^Yls29>u(}-QJS*QITQ zvi^lFnaFX}MVUD>Z{br2s)6M<%;@0+p(VDyH;YG>IwcA_VsEZCs|>Ga=Q&J{a5>pc zS#`5Hilr(}v`F$m1M-g9WVd25oLA(y+68TX8+kEeZKEB^2g@yjxzJ$kQ(98*ZCfbv z1T|1UNgR3VTzTohCao%l1zVw|kZ(yV2s#j&Dxq-K#iJkfF|}CQd;3 ztBxKv%CBu7#O^Y?FN)SR-Sj9z8gT=K@@(nuJ+mz&_+N!7F|{Z>4c9$b`sX&*S~b2q zkcmzV;l@W(Srs8M2Du^-XPv}wIDI*XBfnp&a_}LX09}Y<&hjN=k>7ymv(aA-S7Sg5 zFY1}0O=hqHc&lmonLb|h9Sd5U>rxg{py=*^2XEYdA8M_nQt;AH?)}Xw2ah=U(eQ&8D`gz zhF;!0`7%MvxKUwJpmR2+hGBZPOHVdgP07iqUjd(GUQb30R|kcQbsVk<)Kaki)hpOe zJc?!kK6@DMRMDXP*t^T+z*w!9GFOlX2B8w29gJ=ydI^gMRo5hI)H`&rnj+ht6_;YB zlo{=>Q;|kY9d3alWdBgt;kVJJANS!}pFCuR)h+*eB-qVo*9$>;6SIu`R#wLLoUuSX zsK=Tl{-L+P$0owM4(JzMLklh#pkhZV*YQ$XvbRcAR%qs;kSNhv!R&AypNf1~)eK{B ztQ&)vpgc{exzn_^E^f&5U zz^Ls~VLaAezzN(Yk*64{8#qDPEu?{an!)N zXQck&072Knd@hb0w&rz1+a*jy7|)=2a^rLx^jQPhU#Jfh@7!y1PFHLdJUSEV-=%mQ z(-y=GtC>z$izphBe`i+?t-Da7c80b`~sHsT6 zpHpJIw9Y1+kR}^k4`*|vZLxI-WW*p*mUP=#U;qpfN=(>QB)Ddop45D<5Ua{k0assK zS-iB|uG{A)59tHC_%0%-`^s6QQ)WX$5+S4L#^za?H+3Gqsr8g0YeM8}RxP+l4wJvdX8>gfHZPE2gV*R|5Nka4VVL=O$kaYRtF&xx=W;UGfTw zGf_APmEr+$(2bmXU!zyd?5J6GL9y+mm>Q{ z`u#A@RG6R@|8jUIz>MZMw~c7u6ydjYjs6x1sHsiuv3%xu^U66-*_Ucb8hr~5`7`Ku zuxf;Tc5}rWo_ZwJ62SDXkTXbwedEVgX*$asty{b&EQdCA8DlmYh z|Iw@53FUN`hD9Zot}GvzaZkg;i3jLye z6|kCGnYBomYB8y7j8wI3A&I&u;}%j!Y9|hoKx>fesFRl>;y&?RoxkGtB;&$Opu|j} zNktJZXb3u#ynLKA6J^5Du)m*aJjDLnlC6HzVvfg(Vu%e- z7Hm~p?uSg5&aP0Nizr$OwDa`juI;>eCRx?uVWX z$qUxv!!bcKvx0^cV@O0~J}i!>s(NaRjLt1ya~JOuN7M0UZ%MKh)!*C`RZcOY`ZL#H zJTQg3rQHfyIqVuFBP;l)&H_%btvTbZ32G1<>t<$@6&g_QG z0+@?A2Gz~mruUh3FJWgl(k7VKxM8tuvNbU=y3RQQSEqZJRp{MVDOTbOo~gz=!?B?8 z;XTmK03-Q|*3VzoX|?vIxD~{0G?lSm-vQH0XS*H1VMLrxf8QluzVR5*E31{Z)5%At z@Cm&6Z%%sk+gXS03?2~^w-ewcS$IySm>|0A-h@~I6 z*I}FA^X2#FC(vkMfRC>*uNymWI@tD;)2g;W&*-kK$(Ik(+|k$7tLA`V)?Ju(?wPCI z>~H)R#@70ZcUji!I7@Y!@fIxoO+0Cg_8tXqYNn#O;9mCqlC+yvmw(L(6s6m2Am~-T6|$WU#1){qeh=Ipy)*QZ?Ap(sO{s3G zqj$V#(iR6|I;I%1*9+|Vo z{*YWN&AuAx%%1J+3D5EqRiq@*;QQAXzvj8aNh8@pR$0KkK@})^{sbYk22sq+!?EI` z6!QxhjP8YB$PMQar<+i`gL7Dv-6&2uWST+aY+N1q_zKLF$U8?uwlbcSP8+K3!;^wi z8068JW<#8sQMJ6yTKs`Z%7psC;u)@i39l_D2LQ3 z=a9wP8Rw-X(cK-&DkfA__{6iTqVFr34@;a+{Ev-zf+QH8q%wKR7E^ymO2{M;1WLF5 zRPZDkh@>w&J{TRFv2P(gys0b7R7fZndWKpAl>3mHOkh}T8a>)=qZQtAlT8icc~f4;)QI1Twl8Y%t;*TbqWY{6bx)~gmp4JnpIom! z5s2gvwizhc`-BruakFaVPd1xI5%C!5(N(@gO75gmC?Q_xn5K6(t?B zPCAdg)Lt3G9jQ@n1S8`*FHWZi1+U^FCRe>McFC!gtSxP2W8?5YZ8(I}gSv8ydt)j( zYc@Yl6|CUrG+W~T*y#ECrQWwQ4dwItLrF$ARkfcKSyz9r*C^d(t*8t`V` z#uCz#ANb`?tO0zF7WR2`MpVz`iJ7{QY65gT-9gHnwrIpUO< z-lBETlBZ|eZOp>;il&oaZ3(2v4?{u6wVE5B_}+Z~ zK)3r&8LWn}S;FIPG#b=7S$58o_2eej-J_^cp@MMkA%CcfA(A|%qXVI+@>?-jxfi(;W?|#qosGAh@h8q@P>;SE7a9f}*F=%p?8CX|jhJk~3P^ zgOK|1Odj<4DMPdc;X(8Tp5f5l83&^0MAt_m5SKqD+(8=kd&tJr$G&S>lySoGR5yB@ zKc&~bLuwY-lKWSV8-FW^8JOcQcTP>Wy<;)JDhR`GZnbp`IV0zhp0$!3CJ2VJqH6a> zQ{xQW<<_Qpp}>KD1l}v4omouzk>A(!>KR+?9t@Wr9BV??4!ALt`s5T}^4mE*QC8vx zvt$k2kpmACjc+sQmMVjLV62vab4?WLj~792rtKeBxMKp~NwKJC7`b^K#Qu(943g_s9D&@<$O z(FEBFurp9sCA{yi5g5kb+4~dKnBB7k1tfnEL4}==EJ%QP#Y$rWI+$C zTlogBkDO}eO(O+K`*PBS#zw?NJ1h^sTzzO7A0uus$ys?}Rn7%!#v>jBgyt`TDW+V+ zAY@}kT%3uppGXO{tds(wh<_gS2-h1Ks&R|Zlif{?doC)W?S>lE>fjf+LZPTa1VqOa;FzXD z`YLFy;E)F`C1e585=DY8%Ft@#2dbudF4YCZs{NWUbS3bW!6`lmDgpD3P~M5k`fn~s zoOou&=qo2bF~`trs!NaNxq)~4Ex%EOz=)vq3k2%$50p-RwHfE# zhs>_d<(nBLPH4*#1fH5mnV8m^2FwJ&_O4`X(7R%unQel*?A2D;;Wj_v`CmrlbnLvP zyNO)=s@;Rqv7gvzVy%4TyQYrqvp#?x&r+Rc`qHv2jNG;yuBs3m|05m#c+Sn;3HHtp z+JPp}X30~~BZpQYv9{8SgpMWcou=>*UD#>KRJ?U(9tK+#y}9+< zKE`sS6D|5{cEQC}%_|T&^{2^opzwzlN%yISw~JDj9}%!ij~f9qK9rtcymoV9_X5SJ z<{m}-216^QC{<2KBFY0zk*^W|#yxLrFHkEM#);Qt=9nrpIESisL)k)eRpky3HYiwy ziFU|jquYw^pWHha0_?Nj$ZbTRWO_4ixXco(lu>}+BAyBp(cz?4!Wa=TB4B! zeHT+Sx+MpzDZ+7F&PA>J()sWDa}SkA9eS^CG+u|-9l7r+63;#bl<4CbbL$%7z`Bu~ z5l=%!a@UkiGb=7?iC1jnKP)C~&Y2qDXxYT~qVsjiv9KV1)x)-1-~wJPwPJd!2li?+ zQdBs31hNA z8*s0tpstZ-K^6l&>DmzkL`W=$eZT2R@M{cE_X->Tln`K~8P{p&8r&BvV|W2dTxAJy z92^iE-2BRjSUe22cSf&{i8|an+#>f*%rQPhWnO;68%^Ee_LeCR@Ib2@YX|TKgt<_O z0wlMP{w?cJi7CbFaK+lJo^9^e->}sq@WP{2!iq&q{lkR*_JJD=&7%*Vw4X>Js~sN1l+i4c68sDQ4@`K+>(@d7)U!9hx25HRFoH z%~T^d==2^IZ)^P5A2hlQd*maCQZ+>lUo;C%zD6?MW4i za210-O|3QPPcFONLL2KtT{0VxLq097SIAGLt%zTr{(?Bo6Fp!<29nEA|{+ zh{H;5WRa$Kxwx`aen8BIF>ysfn)4Gu@`WkSnS)b7lz=hXlYeK=N;XvPBZ4^jveXaM zr%6LobRHkY@>Ki5=PS-rBIX!lAnwVGO-H~{FR${0$e@sRa@54xzddka3bxcIrO3=v zjxIB~xT8zf2)$p(#<9W*=PPzt3~9lyH}uk2?35j6*o6@81kmnpUIAXLBk(c=V?`tP z6JhM8z&V_j5jK`G6S&_xC@)#_fEKmKBRD7FX{ht4*!2_1v1a9B{2gW+?JQYk0ykox z6X&UTR}{(7fG=vQJW~o&Tw4vYdL~-?%;`?x33EyojMlQDEcI4S^~!lO+E&a z`d-XLCwUepa6K7DM_I=WOlo57OL_F5Q>oGsRtQhwMeHurXBW@9?`vHVfmc>hRiHNL z46nF+1zgQCd{uH|x1|80+S!H~?$I9&q6Rii;)@-k=Ci4PNX%V~fTTzWbc@i@u5_Ah zh9$$w*gO}&6gi68mW0^#{&7Jh`}w_Q#*V!~Vks>qKS)=jrPiNws6L=)ypx7IwW43s z%{*U4cBQTLulg+&Jb$(yvGio$@r1crpO|-QvBuRpr8~UG5h13hjPbcj+MsLKs`lMc zGyg1ag>|E`SJ}6h@AE*%j8ne>r>Axo8v69@92##e+(t*Q*=2*Msc;9gD|d%Yg;4WU zRKH=TuW*+@Sg#WiV?dyES06&ZXJm_nBr(uP;%-(A*XZ-2-W-8Mxeul0?;inO$9!@S zRXC8PQ$7*W@+Gb{^3WZA$t2Ls0f~H#OYV&nZo0oa=#bK9^O}6^UTxU6#UxOAp?%7;nUZp0StxNf6WlcQ zrB4{@s3>a>^dMS^x=Q&Y8NQK)Z4i=qY`VgH2PwxV*AJREwmnHD&R16n?LjU9P;fY( z^T&e8zWx~!8pR?1^Y!{%(vYQRj{W*B)`gZQ>rR}1aT|ZZVG`{7URM%sv8=t?01MKN z=7M+R8pCg$NE_TtPB8VIfg>o#ZUsw>2V~(iC$r?j@n7+}3N>@D9&0j)lRI{b>#J*`4LMwNFrE|yfDs4-zm#AGn*w8y%iKR3Y5@ACjHUiMqipExmp;Z#d(EG@hUv(!v}*FYBI}gnrP)lGedT5LvzOdBuo}7plGWIq zAx#CkEE;aG``rEDzWxDvnyEd=Q&(`k1ch(vZImyw-vc@KZ8P-61g12FvivV;f^E^a z(3@VywZKfY99}4^0ZjW-1G1sAI`ENpXql%6f5b_S1qc3i;&odet_FU-z;nU>Q_bf2 z-`8wq6GsaJYYR^kWAV?#%KuUNs%a~0f0k}n6iy_BnPRlya4nh?B&|8(CJp*U$Js_I z)w$xr2UnJ)aB6#DhTJi*?u)%v7n0lgC@hvH>@i#uZrd)Md7?|b2MB}l z%DWN%!JOR57NF|MkHsi<*cz;Hm|;GY92KAvwg*d<@HBfGwp>mw9&#xG(EdyC<7HB| z1m)6O%~=8W70pNArl(-SWI(f7aPc!e&QL`l0@82P3I*M!Tn~h+>S^DtEVT*a@1)`Ekin0lhcHe6 zALJu#FXpDY>MtxYs#Vkz5@%7C{ujnr`hvN{Wnp}TGk1fg>~Y=b?)*=NedTiV)t$vw zezfX`d_BbW^rVsgze4V@sx;0(^BQ_P*WT(uyE>@ss_o`4t%j|bvvZ1XM&lfCM%M3K zSDOMd6k5`2v6`x0nz+3!s%Xc`kF009DcBY&gQ5;HE-EE+*M@8^oL8*bX^)HT1rtZ# zH6Ck@(UN`=D;9$`7%10*RZ<-^1-3&&H(S)YZ&v&!wB<&a`6qP`d9EIEIr=Ch=6{g&CSe#?v`*-$F-yuBK3 zKijy>-r=xUJKoY^dL@^%(ldsk)l?39TOdf%CACtW<9zvI|P%SqimVSd38CB@#`=TwYZuacP|p{z{nwpIqx)1K|(m0c*K`CxTI}ag0EjQ$p~dy z(Jy6fE30C;IL-GeaGry>Xh_?=n4~pJ87v4V-1m_4X4T)q(Z^jv1Ax&Hwj63P%iN} zjVcz9{*BTFE$16fgB+vVli%?CMVD)+{WTPC(4mQ@oBYI%wS4pC1Q5X9xJx@Vn;K!| zSXmRL9B4Tv9$|+XD$I|SEnRNS_k!>~z-?2&tyiGU=`2EV#tcL}1RhrN|2&}Rp`m^A*& z^ebdGy5Q|o1Hu6PPetbcV}IcPXbk^VRVFoF{m|6W|4en8x}}o}t|bX(2#biUK(H(R z=*VPclM{&!5=>+zYlKOhjDuVKwR$-fB2iY=v|FK7QS>R8v{Z_eu1NTj5`ehy;`_dT zw70d*!0)Sg*5+nv_ZXgu^`16uc9qrkv~k6CiVK-9tMCP0KYHX^5{II&Qck+pk4RprM7)sX2 zvdOs_-|R7QC29Hp^c5z!w*Jl&j=*haX;?K61CbXs!f@-!~?wj)M8_;ET9qgegp}w zzkH;{L&;$ci|W9}r!gknhmAC)VV}y7))#YQEW4JKAwXB-8|fq}F4s^r`CA*x${;of zL3b1R5SL}FvW~{OTt+<-0817Xb>!rOTx0Qw3uEG$eRNgVFL5_lnRw@B#rWYGlR=Xo zCrC;U-o<63V@n5d9#%oPirE|DQFL(9i{nH3xg?a^Jmejdnn)I6CIg{px*=xbt0Q8> ziYJ(wf{}$L_dAVr>D|FOS)*R_yf`f_Z`jryxgHep8T zKxv?(z8D{o$(TPK4^$b)ptWStJq01;7c3{-*!JP?vv6#xOWVRKMJImj-JA?^Az|$Y zWJ%XWh{Vy(J{43t4=VPkC)#MNs{u`_IASqtG9X4F>FP}3BnFg3(7j_Lh1UvnB$7>lVEwZ;ikvKg>Z zY-viYcjCQ%-Eis#O5a8rnzus>v7W~au_d#2R+@RDQr%G^`Vh3?vLqCjQ?T%?9=0}R zIn1>?F=nzp1hMCvITJg@W~iZNlofR(N)4#U{gOoSsd(NXAyRb?0o31c8s&D@jAG-| zJ?1(Ilhk*4$09P-jYTq?plInWj%9Pm3FW}4V75Z$oeEj-=Z-}}4|TV-m+`4VDv2bv zOuNaO(R($GG+6Qu+^LcE@B#FwpdZAjkf0bJa6WZ(rgI!W!>aMfrzjRD3Lka^xdb5w ztZ+nBuoF;GY%RtWWGhk$lLjn)EdZKSbfPVWw1|CDn+{SXt@6~+?$HNp)O&u@Tu35Y z*z#4`{(?H-Z$Cf3L&RQnmR-+lunRExt!jXpDKu(j=C0?sHg*%Ru&H61cR0t3>Umwe zYD5aWH%(V&_BhPGU!<;6Q83;sFN+>;t={%}<|orRI3OV2-OI2bz4J-F0fP`2ObT$= zAgrNQAXp&(sln~XTqKd6{X_qY7uIGhsddJd(xfSJ<|e7l?P6nSnpL7Go8Qq_k>ObM zH*l{~a5YFe0}-~bGm@y$h1J{O%rG%KB+Q#C*UE3QeE@5fYbV~4ZOlsS5eBl#Oqtx! z#B^)wArRM+MpnI^O%f)$A#jMEen>Q2i0o1}2xBG^g`dw&0cLTk*S^J%U*FXFo2j{I z-YCA@ow>o}^v}cO45Ff>U{G+{)H{~Z5^1awGMooHd%glfLOLKlJ;#sihtiVJoV$U9z6b%!#tSx&PHLEDfD|q-$L@ljp{9p}?CX;o^#Ok#^FSt!LA#4!A zp;KJ*$MPkrI2PlpRQ5k)3DAMuiO*ceWPSW4YK^M*pI$)^mGmub3ewe6k7PhmRhbjE zI@uF=H6K(RfnBXY?#e*0N%MkyCmwHWo|#v2Ppbg%$0JYpIS91`r2M4;uZ~&yDzMDo zQFM<{VD|Cgv|XSh=K2^@gzu)?h7H*s4Q{)(mS1Ugt%ulc&8V6aNq2Gr>T0nfXVOgA z#{MtX-Z@C}cFPv-vTfV8%`Pj;wr#7+UAAr8w$)|ZW*7Ra_netCGZ7Q-cW&HUfBb6a z&WMbRj0an5tt!_QRlQ&t*RgFH`Ow-{r1;W%{b0NCf}&klem&jP&x%xjcotTNIg5Jt`}SDk-=US1afUoOx@T z(LoQqX#>1$Pk(`)%*f?E6vN%x(ynt?17G zcm&(ivAf!{<2SCv0xw>dd{P<>Xp!L*I2N?bsRg9a9v|lZpmq<3*3A!0DcvFampKKK zuq79tBJD%^%Bkkm+~2P%x&jTOg=9cOYb_RBRa=XO^p`W(TI0Pds4(lKrNM$t0-{rG z2PZ3_r}dN9W@b%H(wPA1am3=+&)z$-28F;0tI{knn=hpU`ceUe@ZT)zN`Cmrk7kTD zpRjQ?11chwP1%L&8jWVa%ZhH$G$(ZrtjS>2a}+K&#K~D9JnlsHP!p%WWzy`S9^thI z=sx-?YF0Y?qtVre_Cc>whpI5t(crjSw1q(cE>E4Zz$PQGs@nEj>!_Wc=x$&cmAgRn zv+j#%)@v&#hTk75MYx}r2-JbWVeY6RG%f##Ugjvq^yrg)N&(KVS)UO0{?N7ie0R=q zAR=jV(7xLVCf)b&6rg$)1uLfj7r%jg^~^lz;@y^0*ruFm0nH+RyP=FZgT)`ju{EaWg064)Fdg%1D5!sH6Y^$6j0uhIE&r*6s+<0Es3&)cS4Bpm6?%aPC z8m0=;LIddZppQsq6(4qX!2tz9^_a}A8^R&3Gs0$|-fC4c_9rQl#p=qNoi!-+ioSGO zkIx3;J(wrM^)dimZ_?37? z65m=D%KE22TUoPaBkX$PBDneXmTv*Dtr|X8Q(&g1uEZTi?ouKQgmq6O{r>$p64e;$Jetb3(P?x@$lQiQE^G5Z3-?=&ekB}WU z)@$OktCil0d9h0V9E?LL)w-e&dufQ#NTx+8rbX#}brL+(F+KUYu9Wxyhgo7y^S%Z! zw8eSPoLOoEkPELU24Ek;aO=9Ir3u{5Ft(uwii*i(ggp^5GDCDX^eix?_HyLD>8NAt zR^9ZOVQ;lrW+{M~4b#CGucRJS;Y^_R+7!QtG;d*Qqv$|6)^9g%tSgDb@|BC0<&061fRT%ri=)afT%2+r#lPa0Gnm9U{eE-j2^dHXu01Or-&d8%EB98Rb z&{=DtYgvi?>`|bxhM5nf%x@wN8yk)gj}2-ud83qWejB}N-urVPgrd0LC(!HH>wdG- z7XW!2TErV3rjQr#pXvHRv?8$U{$yIiak9VgM@-MkblggD& zYme?Lr{$X;UZHu*dJUa2LO`phW}SUHG3QO1o7=h*xo6P>n_TNRyjM(#@Q{o3EDacP zA+(y&hbfq6nr@{9nVcPyh-oNj)3KCV@Oq`os;wQQ%S?si{j6V%u5eFmSx6otu==T| z)SHu>Sw6XJ{S`kiDL3mzNVPOrI>EZXqrq6MVk{Coye}TYNiS0U2}9|WvRb`spJTjh z-c`AmS6!m|cKMS|6EJdfPG2-%V3KlFB!4xV1-%U$#x3G(1hL#>!;T?CkcTM-t(-4- zE2iis`#B43IqS)oMw4W@#bmRqA@|7iyeujvhU5kywHFo>h%S>XC^SUG0BFY=Vx|Dh zF_jz;Sg7g8Mk+A#k1neNVNpT_iUZ$ZhiritVAneQVU^Rf`PMp>i7bHkLM$9(j=B}} zQ!gE1T~@IN@Q6z#eIAfNgvSbL@dVS)B=LWIT4WXq;Sio92}35x9f&vgIu>YsMKy%) z$=U{)#H%n|iFyv{)_}EOuAqj(nI`vXk!kuSF_d@zMsJL%E|C*H;+plaZC9j%KS%{U zgMA-ie3ygQc*te4r?Xy&UfYdGe$Jwu#5Gu0cZ%27?MpkRVUwS8Niku~CGQObR(M+s zhw5JAJ@9Gut_tI~d`h32isNynVYH3`_SE|KvYA?QNMT z`NCdQ{;mF!@c-q;_-C3{r7o?E`&Im*kFhX4>6Bzng+)f5g9RBwj0%SeLnh>g2D&Fi zC@4;|kPOYfTG>p9eTklF(o&=MR!O5avgl<7oC#x?7QoQ?g~4E`YGf}sm84;C0+sDO zbvuzyx zpZ2V~mo~tXVwN4K4NBKK9_fK!T^BzUG%|6{+gZ7T237;jIP@1s-~D_OKxr$ z(^$`DdnA=@Xci+_SX|I$PMSL6wOLzyHSZC831+gg(4C$Gds-^zuy<_qi%rDQ-se6I zPZTuot%bEy$feM2c&w%h#B62(tuvUceK2afXuQfaZWEkH&03nInqqRN`n5CKb!0)u_r;Iv@nBAsXO#j|7_w|!f;i#B zHbPg^*QbmJWp47|5h2I>ORUVC^=<-AiQA$h#B3$mpV$qweg9dBw5utHzI7q7nNFUC zc6?yzWrgfABAJ!Vik*weC*1jW$F$f`95g@L&_brhrW4l$03ps3 z&?gv}Wm5q^B}}j>KRP(coR^!(raa|Y)=xDwC3|dTE6P0RuZHVNPb#K$&hZw0}QcGqseVzav8;Bgc^m03MCmwC!_!8>>GTQ zaMjL5@0mG7U4#=d+5p~^?o;)vmDC&eKvDT4tR;4cZ&G`5PDqh(99Kog^`QX)z^PMM z_h9?!1-hS{L{g~nKzlANELrZndVO_W8a!rk!?xT_qGurrHVVJGGCKXumdHB}#dZ4o zxddF#bqen4#0ho$37`(9rp$ccgPPkuFf@xAekV5qh_~1fbbvZqU%l@O_0XF^{af7v zRRX{p^+9dBLx(26kA-G;Z;d;060R-{%S~mXuX$a{8LmuS?2b9oK|Q_CM_u0J4|7qi zxXHlb3Cm40BX3omo$2g+7KA0zJV|#N>FHU0L;ivnNFd!ltC9uUFqRUN?y1_syDEs? z=18?om(&j2#-=)NY0HDcSG!lxC|qz-p~0k(Z@4b!X9wi+;xCN|eEDe!QB{U$(Vgb& zwhOd&UYI7f&HcNX6kRdpr2FS@(Pv<6+k#u^wW^UIS`iRJe(|6eP=i}4_VAe-#7l|$ z^p&5WJ2UM*k$hzJd;!)Hy`~Hw^ME`yr_@;7{_vW)mDq3-Tkv8LXVATSVyE3+?bOfW zO{%Ff@9C7wTet_Xoqc3&gBz(6hKSsxZ<=NPs-%rOJk&-UqBO~D$j%>C%sVySJDrXN zpjT9@2Cd$l_<4Mmh{(;HxQ~fZ3S7rSCjGaR@Bp|GgQFRhHy?;nnD5eN6SP!^$yc;S z7Kkw^2VA%ZX(sZZ9!HRh6$wX2CtC8`sutC!b|+80PB>LF_;_aqE&7yb+drgs|e&Sn|5KB?n;iQ9)U;+f86 zhRxM}a{)THO^SO>8{MEIUcisF7)kIQy1OW2X1*jFO3vr=)FF+52_C?T8opy)%6alY z1grChJACpZdh0>|CCXY$P}Rybhg@OQD8Z1{=qcj4O;lwITN%HfF?^kSXq|6{l#y~# zb9}$YQU8Z0e=jB<(-{<(n>3WNE~~dNN+{bR)Hor9Puj~vcjT0}Yrb9sb^B!aZsNvF zmP7Lfg=SZrR2#*s#h>ml%nyx-9YDwqmSSniHCXladO5JwAq@JqQIuEqH?BAtl9iTV zW9LsF71YzcPj_+E3}M;A#y=6?i_Lu#5{W-Vv|bN$WnWW66aJJ^m3$VY68wCqcBVt>9i)0UYe1W1@74} zzdxzvWUzlmVNoF=$^0x%Q9{LjoOjk%Z&5!QdU7FI+w~@Yx#=4H$z9Nyv@~7G4jO8j zNtREeledhUqva9C%`Wm%`g;Ys?&kW(XXgs#==4&TjzY z?s}QFb7fMX7z$5kr5 z2b1^19^zU10+82&hf|v6a&4rHfNj$oi>H5RTPWq$S8+?3P^~Z{PVWZf^nv^Vnhs#S znFXnNr-WyzuUv6=iY9UYl1Fem%CIvtHG8h<@$&=I$96>(amO4YIrz;O7E|CJ<&7$> zu3FpwVJXnBemF-#+de$S&4Ht6ZAc>}wZ7p!K80fI+PVt3QRzEICKg+FbpGl=wI*&a zchAqej4&>&S^{_`aoEgMg}2)kn^{YAf00E+7&GI*G&qrBPGctTPJTZLr)Va9m|iDS z;!5G5^=Z?kI{5`xr9VG8)Ty&LNmpfg)5EcPet{(_+@{Ad8Lyj^dqgW;Go7JXRlLye z+-Iyr4TZWoq>$s)wLPxqUdS2rEzY&XfmV4o?m5pHlon#!Bf9B{I3 zCG*LH(tRI3feU*suNh@1v)?EbA=42u+k{(3gd#H#ZRi^8Yf$XyF?CrI=Uh5;>CPfU zyfPZa-pJRLkOoQv8B};dKD7I50|O(7rJ$YBP~7Dp1Xa9M66;F(d%Gh@>uEi6BnYV8 z^ZG@_hG?02Sq5Yyz_#{}@Ssjv@V|kn@Y_M$1qIhFJg$JF>HM1Sd9pKyB1!z%JNL;) zDbM}&@L&ljX%QOJABa-hScqguwlQm)ULIpJNQQ*o&h4e{ViP^%`2zh8x3s_ckABCT zt-|i&K57D~GUp6!#GbhwFszrBU$|6jM1WVLTw85@$>x@xYI7)7pWC;I%{KUELTN_$ zNb*3j@A9yaik!H{VQ!jqM0)n?Kw5IlXtXE)*zEUpU&bQ50)hv8*PYITvR@h*&Ye4q zT4~Q3JIj@3VKAwRID-NMi`*T?Lt*rsSMaRs9R-2Fc*Pw_spIqzzOAI!3U7PJcj3;p zX7;O^p${K2b5V)@hBuO36em(8KjL=~`jSsU_i(NoH_*f1c43n4uEE{LXJq+Ri6KbD zowAg7=yPksXs=M@hj=Ml>!bq^zqxH&jgk51Ky8UHk@(`$?}~E?@LZr8$x7-uH7n~Ze| zNzT*Ru}29qXOQnQQ`R*QxDt8$dwUGbH1$RBYV*Kp`xIXvckZ&S`o|WLro(TsaS-0* zp!P|&so)OmVH{P1y}P{*9;im0?ZRRioMXJtRSrCm?uM@7D8xn!*CBU6Xj?ysvxpT= zA#)5WTdoQII`9NEgT11^7(+7Q|L$(2`}YsLf2LxaT2SuV05pEL_{ogU z&ccPp!mMIxsrh&rsS+5AJgR^?Svv_4EgVfu=(VwfCKl&pPH7AkdmuC+P|>>l+}0gA zA=!eyK%TwsywWh5E8>W^z~e2qLQs*`|RTCAE|Z^$q)0*42ut)apcEtsYYt(T@ngc#0EOy1Is zsbuzTWE}~yB(a0sy0fETN2Za?Ifn$0w8aSd*=v@~Z@?vl1K$_H3(b}zYb{ZVa&-TSKpi5mm+Yof1 z>cGJR5E^gacl(G$c{*A)Wa+HeCE|A#tlc1g^-2w?uo#(c$QTbEGhf4UN7zKm99&?> zq6P{6Sh+Ep+O=tcvNHwZnf$d^7t$wblKrRv2M}{9K3L8tr#RF>cy!KMG{c_6f_3Ew zFg^}C{Su(dP7@Dvny;oNuA~^v`13<(n)Sj3mcEky!jsr{R3iHH z&lm3i+KCMKOu1ODC+qJGzbtVUz$LA=gQZFp{x1G20ivy`5_@We8WU!X&V=WI_q(6c zG!{&hR`rJqly>NF<^CVh{kwENmMh4OC+>ta$ZTiK$vTITT&hH=AJIEZrZF3n6la(0 z?{4yZB*vv~A&TvbyI>@X92qE7EV$#T`>@%%MDgwFp01`SY33Unc(M|=2?BAFrow6F z%yH-=1-w$(->|s`#==R~Zv{Q%3_`$}O{H3Es7Bjd;W24z%eGc(IIpV+1x+&2O>Sw- zR%KX^){UD)6)mBwzQB81O{vZ+1S|IL#Yn;1fs2%oUscU2B}NL-u!8^WGT_p@uowOVcF82wsIHqsf#PcTH?31| z`UN`ELbjnBU&wbC%iH%Zl0@hs*#{-oI5(;Ffo?>=Z_&Wgwq`PP;RD>*_l=NSy($k4p^7yP`$15?^6id=6(+X?z&VWmd0?qOESuutq zr}{kgc46kQ(gdTFJ@cQz^GN4c=n_mvVcEHJ9kx4eJWwapS;nt?CK{k7;Di#{k zCO>^doVmR@t>sEVS>TK8BUUWr289iRv(~L>LfMl$26eT%VEN9Da4uV>9;&&HX(((Y zqRmc$S=5RhKb5a)J>8SscZhNuS}weHe=mB)$An%Kl#+)8s-z$#`X>UeV9ACP9Q-(~ zix=`I#1mFkRyL5))HW`~#w$_9F_Y6}fy0B?-})A8IFCva8)FE@t)+%3Zc^ClFfATi zpaSNC@D}c`Dru&a2Y^cWPM8zcj(N;@AOim4A090@qUZ!@SYuT-SG6(FUnT?v`Ux zhsZGN73b6n0s+rJc*dL@K*zL)(~f*=8{cwEe^bm;(HP9)biGH4eD#uGPVeo^4;aDwmxA0{f?b*Mh-rMp6qm~30@@mfZ@cF!YZya- zJS+}ETZ-KjE3kZ!TMJ8QT)AhyS+k+CDF^OXljka_Q&@Yr>@6^6X2PGU!gsuv z>R38#_JeBFkWW^F=MrFEu(HR&frn~SRpG2s<#cLF;V_-Wmfgpv3DRifvBZz3p{4JX zre;BMjKp++*vDYj|vJ=B01rMhwHD*>$Qfk?k_Q56Q&q=*-}y&xV359qSk>( zJnxzfBm3sI5SqudvV#Z5{uCo8q)a8OKk=Sf7M#OcXEYk$Ys(Sdbp4GE)m1eny<%9#%@Pq#}0eP0J=V?;$OhoJq^2;aGoQZZWq_c6zP) zAQ18>=k3-Z{g(Lxp_5JCL72@DgjqjH6=n;apAmRcOxO-U%y$M#PB-TCAjtH#zv~-= zp!mypFaUGSgQYD6_QKRMf4Op6FOui4&0RlrSo`s;gtetQ0rg{9V)s$e-3L{d;Ky=F zKT1(#?LlI|QJ2Hr@E8t-U1sM$3<*2cQ7_|BjEdMl{x&);*;SR+0Yn?z3@(O zFH`^uFa@X_WF{gfk-ccGG4%Je;Y67a^BSX%T&)_#;@pna1#5~Wts?a|+7{9!!f-Z8 zL%4YLp#Nq{(JDe4m1&G8kL-P6mLpNnDQM-?Gix~w9QwZ;NE68R+R*0IKw#(SmCqeo zXUL2vOMLBFQEpOL6tu^r1v$nK2~ocBbMnl;zl#fuolszXkQV5TQA)kl7D@}ceI}0F6{V{`5 z+TYb`(2gJ%5Yr3%LP^{A=!oTw>lU5k&vx^j6NdlC-*G`BVm zdxPO96mprI|BDepLQzqJ;)qE$_a}A|gxrJGqePGf4;lgOq9B8j3qf#~UvqKr_5&9y z{*V{U!Xyi*ZehA#XiY;)PzUm$z4r~toFBSMeW@h(5T3D<05qr%weg7SL@AkoXu1H5 zw;l0O0SQ6TDHRhpt~7;e5kntlw+I4gJzBWrncqAkScBvvVTT{u^AGA|HwgAy3{l*w z$AK%=XF@I$cta{ka;^B<^-TYuH$AUB@iXDwJzC0p%f#tA+Ta;j{4W@^iYX}=jQ(Z} zBI!*HE1^#Mhx`0|cd@C+vHPTXCnb+=+_Xsc^G=E_GS4FU=DJUfZ-hN`*@0Xm2Xkcx zKRJ0lC=BS~oALuF(e&^2iS7k4&VzlMOZ^wx>$TNO9EnoE+FSFKGqSIu$rQ-YsG=`X{o(WI=rC5cB7nme!7h!>?&>MO0pHM-WyM{hzXhho>^hPV zBRk;j0Q!iVQ0#F!{S5=>8%HE7C-dIWhA+Q!!apsT5$D#?SrlzezUCk{Fv zC7Iypw{}O_sK$)=nKkOT%t|{@t?6qAH39;5?3%JiDbK9m= zUbGfxB)aL4SM61oGZ|Z9{K_ufR3i=y^ORz;MKp1ao8czYorb-IOL{7kr?k$trn3d$ zti5gWQOCXoyPre~xdek^qT3DQZ3w|bD3de{WlKU0FfoerQ*;V+Adk-^uCaOB}vkxM2^lbbs^hTg=?{VJ?`%1B~g}Ume zg*w(?_^2DMYSQSXx_a*xrI8)wpQ#&zjcCn_jz!BKX)V|+cCuq8MFkQr(_OYbFF0yx z!3nj^&Ot7wY{>Z?S`Gx(Z5`h(hhpbDvtTH8VZB0^N*5#r;96$C{@auIG-11hl#c~$ z1mj%H2cOaA*r17f2>Ub|2Xn#j`t^(doIlLtW;@}(OmGKBynefdC9GD%$_Bx`NsGL} zyy3d#gc)?r15(}RdY8HBmGZXxb}JA8x6`Ne&q-HPgX9X`FL~Qj_P8f-r3_{)$ad#<3C!gDq40Z5~!cUDU}S;_6hODMTzz;Mx)5khsYfI zGD@^7kZ}$r0A2vg3|EWuv`%Blpm?bJ1B} zvEPK7U^TbufTtVZl$hb#?^mlndq)weKIaC)fahzg;Z1FJ#&Y(mGmACb`h}V#_RPsNKXvo1*J{H@*Z2(@i_598aZ9wrxqo`Lx~?flaT_ z`U@ofCQih}AB@+^;)A8QUIDdHrBv9}%>KL99+G%7(__0*e4JB^JgkX@D(9NJsq7&^ z*Rgg6tCt=+PKu-SvgA9aq%xt=eAw9B)doTmKw@x_+`fW<5g{3-#Jz*U#Xn}fSaNV; zgZi)Qx-p9R?R!XO`H)%3eNn2e zLf1#lkL4yAhh01nNZQPi|LA(aQyiwCr1E#{HG9!Ux*QONsMf&iS@-U z@NT0^m67z2e8nYSN5X|$SRIZFcY4q2C8`_ge^!fACBmqv!56A1UUdX06`~DMR`m*~ zd~hrdx2!YMiesTWWcrduonTo|EmRX&{^(vP9bWJWu;yKK<0=iwk zY&qH^Q&V>IQ8^R0cHoJ>-xxh72fu&`7f%#gp7;j&SGCTbdT_?;t2H6{x8v>q=bK*0 z(b3@VHof%MxDo1SaShe}jRI(-JnC#SB$#)uq$G8+x-tP0siNwFV_C{%(4-98i`7P( zLtc19Trk0ofPEglcB}pFaMSJNW#cJKAykIf6_?ZWbC%Op+WqTw3EsDaRK;Av)d2V? z>eetOtbJ%<$+1)g#J)mdy<%hScn1yP#M4Rr;&aIpov|vbna0HGw4ue1cW#{sh(2s)E(wN(PS41?)&QrD#XNnHsLCEOvrl4d| zO<<&^ao{fIF_eEiPRydJHJbI4V=dYc)(G~x-7A^`g*3IHt2i}DwiaS9Na_6PM@h?U zoCRcBc)xN9vNkX(uHX0pErnoI&<8k$_cWIScEL}0U4@S+T@I)t-yCQPM$Wq7RC-(h zX)z0zpmOu4w_BuCaZ#k(M78(r<5);b1cB0YUN72p+!Ow#m#A`Y?oRx=gezf>4d67h z!Dyw1bEvO;ZHGo;T^szwFU3H&YH)^)P)uhe$rb$4$6T(Z14LbX%`D~oznEG2uN#!~f9o0-so4A_ z(Bf;qZD1+{@k!C$r-U&#mgHK7@y71-|4kBZ&R%!aJ+D zsA!mqsN~)sBOKC}GEF70pM2muW7#M#M&UWhh!W9zSWgx>3;0yLqyq7pW;CG@h-xKh zYQ2br4M7lb9eLa|Pcg{j?AI$Bifsm{G0N~%Gd#WNYJtjbB?qJ8{vslm^LEA$JUwZW z?mI+CVBBcQ*8&8L=r4Kefi@o)P@ecMpHj}8QT9s(^zhjnO6JGT~NwMRjmENZ|r5=$o^M!gQQv zMBzx}za>jeC8m|H53%q>Qp=3xiZ6GLMk?@zSKWF6zBJ0`khj98(qymz_9Gtgw{q6R zG+*!~!6GCvFo2qw%9}AW#vqwEoSCKHB6@}@drtj`esGBL7CXXSMesAPuVY?7em?58 zKhYhiGS(R;z66VRmb&HM%ju`S>VNsigeh_dTrt_#q7?XBdiQ@5KKb7k<^SwY17wxI zRwG}HEEEBt5Eb!#M@t$;RZuZcHE##js1FRbv=Z2uP%hnE5>JPFKW4THr=@+a4@{sp zXYU1P@jjkaX&r9JHQj65=Q+!3+UL4x+s}swm@&LawKUaI45fJ89)x3^F-YsqL2IZo zf-9gn(*Vm>moOcB9Z>=LshWOPmzCD1NqcQ6%f)8hm{hURjnzrS36={!Frvc_7qS$_ zWMJbLUcgJe$*El5B0Rja+y?d4O3_8O&2^e*vh7&2xs39*L&HRo(rOYTn1KGulBBXeDrphu6uT_clnN%K*CC24sHlvyOjd~H! zdn$BG#Pa^S)V1F^4=S6B((Q-ie3b!*_?FQu#IqVD*ls+<35|pR+6yRiUuQBrU2brOG~IOLzO*DHnl>q@7_wY)oGZRj{fY8 ztx33dVXPSwb6_nXias0!cdl~qqeRp2xO@(qTsQP#Y7yVjQXICi!CR^C#Yz#*j}`~{cB83$_;`-hzRpd?(t73zYji%e4p zN80bliws2sJHHkZkSKD*iE!qAYfdl=r^LD<+IN48`r{~PCUhZ=E&B}-`Q#TFnn-vv z)!~@CIjkb-wg;fieVy?|YuZhmx4_XOEiv!+50Vcm(pZ0C;N>{fgjPWw%3?lZ4`H&h z171%J-ay}nU0@qnjMuKgUsIWFGV*a`ApP^_X4yBT2#gaWm^<78G)Sg!A7VH5>p)Cc|Dcc>&$ibAOi11U8mn+xhU zE7c5mMDf+4>mKimj?KvWD=UcB6GvQW_1^+j4WCSb)A3HDMiwYu8$u4iH3!MV`EMm% z-y%hXyJ*?45r6ZfKpxK%{e-RfX+(^xN78<6;;`9}VE!zJ`G?0I!YnCS;IH`1wAe71 z_bWboh5Wmu?B5(8`EQ%_KjyxZqWItg1rdL2Q$`SnCnlpex9`G=qCgw%LZNRE8n1qT zxwS{f?-jvm>BDJm>>xkd1 zp68HNztXX7qtkI<-ArQOM+Z%Es)9c1Pv5Ov4fn?Xg)mP}?vGeJokm{QZX+ul2Hsu2 zhIW<+h$prF(=Ton5Pefs$2#bd8s?cgo;~r!<gP^h936jba8_71g{c}*Pezp`l?i79 zA%iWUs6>TfSXI{YT{5)C_e?o#+39w0Zs@x82unvfy=M^^sTr9Iww;Fs#&0(^r^sd5 z$xdaSwz`h9?|EvxrZ+#|wh8=zSE99mD*dqq!Lj{LfSieOdZihGNBa(HJoqz^m~aG9 z7RfcaMp9-V?12~{ZlHA!8XS{9QYT+P2Vdqr=?9Iw|&i zkO(0Czfo0NOoo*^(vLV2^P>`8&Cpn;V*#W8WE6=590E%toQaDMq5)-rgb?M#m@#`O zXDex_r~#6h(R4_ZXcO4FzS9^hBgJY^B#tOf{Q$-e+AIL}R^*dKr+h>3uYL7XXh;@DouY*4XY#@ zV5{{^XvN`E094f!7mJZGS-ss%&9`r+)O_gSk&1d{PGfV4~>XznE+D9d|9!5tZ`2K>Kb2Czc?5bZ9HbeTb z?}Vf$`GTzX{RMklvNggAm>tbVAn)*QwbC}WahKMOfM|HSNIhAe)R~0T0J%ien`W1r zz)tc7Uitmd>kNqvbThg(SjRoS;&+h0q|Twoz{b{u$p$K;dQOxjT$=QoV*mb%q(P~4 zq5skyY(DFwR9?TM#&3m=nwgMGVArLQ-7USd2i3=nso}FgYXbGk#Dyt2=}5DBY6fZm zb&FZdSxtS%5qhgHzEc*q5Vb2rmu0A1Nyf-keqft!d;b@8%=(i(npOETvtD%krX`yL zb?^^WBWW1GeW4o4nu?Ju`fP4av6i+^3x<-4(Q%kZ&hle!G&%Bp`^KUN+EL3W{ERd* zk}K$WLbCx+-RshPN@viKan*FVSxG%K zb;NdrU3yt;q~c>?E2b!$hr|oGhr@=r;Vmv2AAk8Bzy_Fmps9)w&7gqbKo;|D#~15o z__}OhTdN{A4yRw~F%b5|;iJ|a_XS=wFaLT_m*{nt$hngRlG>vW>-mT>{8DhxudREI zHR0zSl2I@a!1=gh!TH~$9?C``a`9`^m zziP0@Y;~e>S`YEWyY0N|eqzC&$ibQ0lu%z0r~G3ATKKuL*kL~jmaK?uLu`mjn`J71 zU1DnE29Sn7JFi*N`W9Csf6CH+`U5W?g$@|~fEg9WZs@Jq1V|%BGU(^B2^DOmhkr6p zC+_AzK7_jWF_GrTi3`-P>*oAq8&bH|aJJSTa4+FYwkfToO1tr41qB6IOg(}ofq%wQ z9W#ByjPJYVMQED{uZ=WTZ_$CtD3!n>j0+m!6-FchDlqkBotmIl<>u!|4>4l%V%8P{2E%uNBz6o^Z!S*DdNK2J-tXN{VW8u7)(ffBdRUcZK% zX)07{mh%S>Vgq-O9oYAvw}7X;b%GJO*ULaN_~1G3@2!3>iW^Y z$1a3h9AXXCvz6n^cF6%W8dZi=Sq?i@$>Z<3zn3k-aFFYboV9FC>pS8u-y z%$-*r+q{_fY1c)ZB@Sog6|EVj8cCZEog=5u5%0l4flW%C3=oAJb!CfbCo+a|h-t^$ zV-;?cQC!kOiMY!Rb_TcHu#4ow<8t6-Uh*Kr?_-4&JbJicC+SuN_)PLmmGu%w79YCI z7uuEZ`i81OX{gh!TZX4^Sq$g5$=Jr$+y{3I+7LVDrGI zw$K|Ppra8wKZ_q>7V?P+^a%=krQ{^H3w{|}J`cy<6gMd^^a%Oql}62e-1yeLV~Dsf zy4<`Na}U{44(0`>x#(LYSaE6-%nozhRa>BK(D&)(thYgeK2ZumD|QWbu+$7 z$m8bloh-gEJphroB_av_o_`R(q?d&KqETB|Y=NqoBS`-YmQRxix&r|!e@>Z*!3$KU zf>fi8d5pCHVxr)kPbQ#WM?NQ@FgH_IF66d|zL4 z8a!U2Mi?KCIle{usHl*5ojf?!tsQX!=!>TwKPa9erYP}A7A5l8V;MOakH#;O3k1J$NX=-kE!Nd1<|EY7eP> z_wIet2^IY^Vqm^chGIWZ9z5!!<3GEqis79rn!XLSyOgRg|4Zo|YbS0JU}4 zD=XFQ_%_oDBT*hIEcm|=iw=8rS7OTbMc8VI5ZF(EViJbEWeO%dxKr=7U7+Lsd}SRF zkYcWnUK?LElVX^^J4eO;y)5Lfb5zCAz}Ct1i*d@t_+M?Zzx@Bg=Ke!`G31Y|_OY?~ z#yqMySLjZmLQ7mLaRhYHmzXCcSt3j|uGe|{9ndO{$`*7XFfs=3x9b3Rn8C{L3eZKu zgY%wdZmvfeX?)(VpQkMTvW?QI1CPuq85jv=qv1h*6g_M-^_i!8Jch9mH}40-zFpEfRE%W6U8t&u43n6KhJ+6ZEhLj~?k=zrJs8k4F# zXN^MbEyi??XkUy}hoCR9qAJYg?ly<;s4wdWo;9*r^nPd7@bKZioe$sJh7d;CWl>`7P z9783?6&LJ7t_C#Xv*$SFeTtf%@GF~sBel7)P8wx@QXh1^Mo^D6P1XYAMGBH<4Ioeb zVs^8x)GF5P^Ux;z>HH^<_d8FQi|AGv9#PNy=eNU4yI4DA#19P75wXBpsxbbLO5?Oj zX232U#llC zSc%OAQ#t`8>o-XdjihZ-FHH_rb+WM z)=#HS1ib2~y}4($F|fCIF!GVD2C#P1`LkGuxaF|TI9--n?@X8T5ms<*{$PREc6)8N zzEk3Y*`>11y}EzB`2H!}*SJ5+It0bjZy~BMLGrwDgOKq|VaHqYK&f5mLoG|c&V{Cv z?&w-E8)dB<&69ti(v~;$&${h|mYZ!D-Euw~sPB;<1GNN?iiq9xGo2xG9!|LBd;)2F z<~T0+&{;2>Coy(F0xV9V0wu@v6GP?6d&S)MF|Izx!e3-GgoiR`idO4+3$!jazq1_K zfUKFydg;;X77{NaTJ@yiQx?qKhQCKw8Q@A|J7O*|hWHd7bwSx$h5+F{(7}x`4l&Mm zfWVRKD%Mrzg-ByVbC&O#oWLe^0m!MY;RPX+Y=r>Z=R;^Ir(A#<{y4ZU6pQ6g!uZ&@ zcNH?wLtq!DFkKBOlJ`VGJhTSIdT0Fuvr|7@6x0mT8d-KR*Og8LQ}k;g=KJT^-%-L; z7bOl+x~8?)gbmkm1_-f60z2P^V6sfyfjk7=vm7_}e~{u5`^8&RoZDxzVJC1CJ7pH! zzLVWag0VVU-Wzjm`M+`%UdkJagYb^~qS7|Xi4X40DkJ@Wq`g&8q>Gj`+PJ$rjk~)x z?(XjHPUBiY;qLD4E{(gpySp_F4KzRd?3sIJZrrOJ3A7 z8CpU5r}6t@DEUt#DQ3(w2I~#-bJ&lRSJ?Z`5@JuH@lyV_AFg}Hza3pr>@98}hh))7 zYbMb5xHGKmjdpFybR>Tje5{Ao{LHsuw&@T=xqwnUg;M1{ec5;agV<#J2hQ}|gIRPT zHXrlBw%C*0O*H_oE<)c0A^+~ec5{W&E1^RCV>xZiJt_!aEnQUTx8 ze~;-E58?@V;Sy!s^khvi=#F~d5nh5xjwYTvQ&U7O3msS4F_5JV09yn=9a7e_t{Ar7 zf2kclPycEbJ#?NPDX;VOyc>$4zGj))w_0T%wDEmE-n%|&E8M~~X7E9qsF@!ADd)Vk zvmgcdUjYUP89|#(_%4FnBIC*{o~{LH$t!8B~;n2GlH2ej3dU1kM6Jfg9E^~WHxfs zd)d4fYflmdv!dd3F^NPp;Dbn@mw0)Cm#kGu)pu@B65<@#tP8EgqxnOV@)Om*dsI#D zvZ!$)xF%lOH^gDkqnzx7-eW}^FAfEYq@FmmDOnRs6ZwR!kqdIIX#-jYdlS{9{O!3W zhXqk$d~6Xbg$X*+KYt9dH^?%yco)!_Wvlj5m+^5C5=?V=TTza@{aY(ZS&X_bu6H-H!ngm5Hg|~NQ}6wp)YAN;^6`IZsr(mE z{`+Dn)lLIX41MIIGtL%OeOv?L@!CNdPT9;KR?A_&q4Du zc|>6^(hrJXg8FxX#Ln-0zU?*JlxUo3sRBlpMpl;-j}PyY>&e5vm5-R_;7UH|eIuix z%;5?oni2v*2(}Hzkr*43hdm)s{Lqa#RPLJfczva-k+Vf%RnJivv6}TWKronCa-Xln zs-OK9`z0`-^2OxHhFq_ioj<#o?ue~c?NSV6kKk%n@v@>A7JF~a)LjEBb(AS>4t`1> zbrwV666RE&Lx$~0TAy`s%DO#IyHi@IG$-({zLS4wUUTC!!6}vv_3KupwU<;g_$c>) zVzrrGxvDB|+8EZ9^Y2+UBsX@sShIyZ>6N8|?CInQwM-*-RqsuRxSV`(!BR>$0~fo7 zbH>%;Bxz9f{bu4*pi|m54gNyakm&0Tb3B72dH%4iZ z8fEQJA;kFQ>t2*jY{6$F>tOWFsv0=WhY?PTO3cjJi0g3Pnsi7RK;)#})9*2w@dpax z;pQ2#^iOqJlI*x|>?_~PwPk62dDx)R0h8UrIT@J}Vd-6CjR$8pvP07X7A(4^&Nr5A znm~$T9gdpLbUQn75dm9Q!V9<<#>4$qR;*b>=M1=hjLbZ zUusfb^Cg-J8{CcF*Y`;NDc!MfBhmg;mYe`w4Q8@@;==F*aJ6BsoN=zfczA@7s_(Hq z5Zh1;q|tP=*OHzTA`)7|BrH`HIT)Yq(4-BI%08O272h?Q#UuKI}X3y!*_oSPrud$QrPAJ$nmeb85nK= z6lt>Ad$740-gkLeNyOJ)Lgn$n0?sKC*EZQc7pN=*RD90<7l-9CV-tM$-!2ZN2-A<3 zF&!Z)<-5ht;681$h~J&?i$4;Sd}8LVZ~wKfgNc+ePx$N&qyAC+_`h@u{j7O^lj~+p z7$5W{oR1%u%$=DqA#n({{V3pUYoaZ5$adj#$f#qu&cz{I zKbM8=)S8Han2e~!1uZnz)z#fd)h&e0&8c=*dRM>9%`IYOnItj|{8$~fUt>Ogb>Db8 z7`)xy6@EEpjYNa`lotQm%L{nbtJ?(uF>o{DK)f3XW>~$AgF`w%!4l;g7es=?-X#it zyTi8luG@=(1$)OX!wuuM2ZP_7B}599Wpv}Dtq%`a!6|Va z44Qj3|DDvKLlSRF(nd|!ECU1Lz$9xOJ`}{uQYtli4`{~Y!A)u6u(Nc~S{dy9RFC2& zTk@eqQSb!s6%86X=x)s|Z%)RQ+M3_0tF{1=!fPdzy!sPj0Vw3swT_yw*`uo8cpkxQ+veTV1ZUZ=M!_4u)@ zvWnSI&WU|PUX6>z&Y~@Ed9;8FGaOM#g_GP$QB1LgQ0<%**Uqjx7J~m&P9Lq{60MuH z>_B1qz^s~ax0vpka9Bk!JaTX=G2VwJ(hWpi@d`1oYc42G(5^vF{q!`jDHqLwgFsW} z6q#^T9Ik86QA1a87ClcoV5w#kEtDon`*bq-jweGabwNqtEqS&vC$9HHfOSP1RXIwA zNRAIZ^NuwsLv}^&ERGZ2-4i7U%NOg%POO+Ra13WR;Kha^Ak=zn0QQB#6L`qR9``>7tbcbjw+ zb|0@ftQIO59Ub3dQ5$tPm`!`EmIMrV`Nd1qFd}NjQbK+>#V%DAq7>_FSLK+q_P-=4 zu@>`D+egMnd3-{|u2UmzloXGrL~Ge>WDroEZ5YC>bFg$WUI!rf}gh zg%K?(CoWr|&4O+Uo>QqOH7u;$IGMRyBpda>#eda8h)O@_m&jwEVtv*Y{yM#xVyQ~v z`&cX%hP`qVryCK<&=W<(Lo&w1_yOwobw9NX?Y1QRb3PmF;K{pjL^VZ`WJzI;k~_c) zAKFfcRuA(P#c5WuuNu^kd|&U+oy{iIKIEokDQTkL)X=;5p!YL9(R<7!0pScyd018W zQNc@hfMEDDDOEdg0Y*1RG0C~$Iv%`>abMxNG5mqMf58dTpKUJNV9>x3&naCE2ZSj6 znfA|cI|JIS2Z}*2!P|i`$OrPB!kf&XT3giKVEhoN$WKY=WbCU1>(w7l{H@myBsBv+ zLI05Mi};YuQ%63z%t5;lzn*}jj@)A(M>7Pr?RCa>GE%(sD#j(lEhbBpxuqHKV#^cc ze@QeDHAgVJiX21X{`yPC$sp1zgYNK0MwPA3LX)+K&I2HZ-40%Dz{VE%Nba1(rLF#X zVpL^m%j4&P-{0<;Rx)P=(HkLEjssSauWnTn@JA>~QdQu!ok}n8N<~CS zCpV8@%5EBSjFeNFWvv&$l!v9h2I;q#Y5*zM3+7SN@mVd(FfxOj##$3%ilm!#mM?UL z$~0iJSCB8Htf$(FjI-M{Z1d|-lVdVH&%Q;yj!}PYR?$Fm*(5j)S7A#^GdjNI`OZ$t zI#|{;Rc8OG0uNJqxR4LTF9j0{a&A#cXT(I^;GC|1e+gfdYV_mQe z{m>#3-u}9sTo;n#?&c1GtCmwtBat{g2OimR&Ic-!>hVQ=+I-AVC(_&th>J2k$l}#% zIt6}O{YfM+wkjgGp=qN7gg4OY+_bu`^p-20gjQYHLsSvSap_Ykai1+AqSGp9yD^!T zL7Pgf>{Oa-7MtxUtGm8pZLl`EuT@O3NvKU7;dbY@YpzU6SS(N}48@heVyl7#(|l9K z%}}Gsa3`2@3mKNaDHle}V0axf4|gvM@4}4@w5<62#DvH4Seh!;7oUMa`u64_VLyTt ztSHu~E4iOjAtC>W-d-S}py~vVU4lPnz&IC8!vn<^;hb{zzdiGgtTxxs||-B zC{7bd`+T2njO4|B-&MJnjxgIzx#i6gFH2Syn!2b&pDINQvNG2 zc6nj6Bt{_AW%NTG_LqxP&Ns=7y1--n3We0UsFJUSmeAO^pa4KX{@-6Y5+J8$gm`@C zB2*q+ww*I_zdhV|$07=s(UMX!GB&!eG=7?s51W_QcV6k=AF=DVZW+*eh733^a%~=p zQT}>(%x15#Zk;g5ycrV&ILH3vKJ>228gB+1^9y%w9J||A)nAP$D+uJy>_mqWUNF<~ zfYwiVyMBStjX%ZQdg@NwcZ>Y94w|6YOMZ#^l5!QMvelXCzIKLlG8yC{h);N7BwKbA zZ`2KDAG;;|?AiAKZNKq_f{>hYY&KY{}gkaod?+W3(Yrxg?E=Sat z!`qSD&=1H)H%1K&k@ONlcXdN|FI6#ooV6C%Q<|-W+||`BQg;e;d=e?)hFSt#EZ#OH z5-J%K+o^*^mcDwg7I0+ybcvMBo&U(i;7}f|4(7O-|G$t$j`v1qmaPi(6KH zUOk2oryK2889&ZEukZ^eVVV}DR+3M5LM9UU)UU=9KGt#t_4)mmaNTv-lJX&;sFc#3 zP;%;xWIS$fZDI}QD4c^*z9(;?NiwNac%FJEvXV0aLR0^W?Y5BYShY2gDbt24RFmnH zZIQ>14807Hjj|)lOvSVhr5@x*d^nk=PR>hI z=}|4!d?N(5=70tkR9~YM76F&|eB08BOJlt?Wxe#^rb*mEnD&GdGfDTjECmaxW7bsc z1V%M-gA$pZ5UMsji+G$y4-=a18C=f!HFwRxFO&TvI@r7xse-?MVU(gmlH_j?`7;kDG$7Jt!}6 zIX0x%WhJEUFhR_@OBm6s!p0@xAbq(TT;Peysc*%S5P~^}b#=_&ZfkX8uFS9SU%o7p z{L{kip9e{5_I3`YR_0cJ#dArynmHS}IynE`TqP$+DGV?nhvs&wjQ6M@IvU3lJMIcs zN@Jj_mKUHxkj27@ zCBs|@59vr6bVk(zi0ac=!NSi)PsspQ^X;Jl5kS>_Hph#8!4tQztTSLsyUUm_&aob= zxxHzmQLC}dinaBYYlv8WB}T*n^oAzZ_!7eRt#TT?J(t3F`~e@v>%Ld<>yN}_LB=Ck zaM|bnB|FflMN<_gv}bgzhvMLIdIy(@y$UO}i`I}a49IFmN~Zbx-+gBph(0>_6Lp=% zM)a2j-*C==4b~GWMeha5>yD(&1vqv{FARUYdwJSf!`6RN6^`pdN)=%*`{Q*h zR`)(MIfxdXf2z{e&bBf2v6(L49IW9J-&ykv__#t=ag84xExR6pB+&kb^DNNXMMcS#8+2|o#d%OleT}1K?%U+Zt zviYvV9|Jr{fU++sOXK@L*ymHEDyWPy_D})v82Z>J495 zSU1FrHcy-Sm{_S^$X`f1?})sng53+n3K)s5+dNu5}YR^7f{O2zdD&wGV8_H$~l%FBg#d ztt9X+-t8cJ^<_Xpu$@2iba*XcD$gl5r6QDQml#Rs)A$-Oh!%BTr1LH?&VKfto zqNU;?oe})0npZP{l2v`T=TA3-b$*?+h5jsW9nvyXbEPGz1w_{ga#M+%;@cEoN%6IK zp6E>{> zsA&-TN7(%PFxZ8KOx()$vs##${`;T*&sttp=P&&HDbedls!>G76p6ETF9ECQgN1nslD8tDd}#IrRE&q1B!aqcP$In;f~Rq=-TBww%+Ih$J-83OlF@Wf{^!j#fsq?~{480d%tjK-nnMAgzS_mlWp1V`F z{LF@BC0kLql&c*tId-Bfa#a>{UUP{o{goSU6)e&3ub?#+Fk&1r&49MsTX7Z=m=^`( z^lXV?1}A-GFc-)Yzc|H7vdxA^NVuC1g`|Z9HtLBzOo|kHH#p!X+u?a`gp$anliCIj zxEupw-=8EO?&JL2?{8Y%RBW1T@ytgb@Vp}mmU@@Ryz(sBfEt8XIeE&|=J&!R7V$T9 zoh&Zd%l`A@FuqiyFqeWqT9m`a0fbmeLzqz}sK+Qu@sY-=c1%72pJwVhF!}f?j>=c; z9Q8?M^neQ(CtZT$ zP}{UkQ*w>XP>%Y!jXA%Lc$=zs24u*1Y+)FsY3+80wc3s zj$3-vdihuHzuuMOfAD84$*xYpVBX(mRAq*zOrc$xvf5*{6c_fL*xO zF-Xp28mlqL(@beG>cDMXA2_4eLaF& zpPj#z&td!?wNM#f@X2b%&8O(Ukex}Nn$@4;3CDD4NO{Y>f{)3zH^8aqY=^4-0Ss!e zkjIs>OF;$hV3#aio#UW8Mjwu%Oi)eMigC&YKyr~-m0c%!^tu~r^c2qYOB`A`%u!hF zq2a%>UJj<3nEH2^hIZc)rq9{$QoKmSJc}dww2pFaSKn}4=5PoRl18@4%$H!fCL}

pV4CHG7KJYVVOExVVrW1{riUhbHO__?72TcO2>IAOnGY>U^<@+#%MPKmiwpM39i>i7v7j+Q5Sr6f^b7jG(nAP`}=C>)+KXqig%DFd5xS1VpeW;p^G~M2k;+IXCfs zF)`3lagbIhX_q+hIH(r#4p$#(AE9fE(4oFtgyb*%M}Xmv9=Ro1@)B2=w9R$enGWUrEmxbbocS!=k=1?*dZxoT>5 zwrE^0xl()$YjsM~)6m&)VFVYutu=&-nv6(@#jvix7~5Ls?tpKJb7H5%%@rN<+eBBY z#sto#;=E|u(cx9qsU|c!8<`-D64485&KoiwlQ41Gu6hydR?d7iaZ#!7;pErCIJNW& zOKLM&f`h-m8G!c9&sEBanzgqMR2|5I_4;sfpsHAwj)l7?{0e8$k%%$yJ<@v-n@`rO zyosyeH0j?AT?^THbH>_oO1R>eTkf<`cY8{Z^*y2hDJY;;663^iQ3gLXQx+~lnCmTS zl+q|HfuWKg(5E<5nSelVo7RC&x5Z_iM~`YN<6Pp+Q{%XuX9H=SPA{$sFBxSP#xZu9 ziooumuH>oLB&JMlzh2m`wW>r=qa>c{B$du3NI7Fb$pMjb-gJdKBv;i=eHunHH!Ljy z!E1>FT6b};TOc}CHBBqo`c4v;J+@fQ(xJwn3=dZ~~oiEpI5w|U$#)_d!Gu=z{@SYvluaK$c ziwSd^%RuKV4|alL#_(8u>V)=ueR`YJBf04Ipm9alkK+~eX2M(N8drAj5qrC7zkmy7ScVX@K9lt?!4Ot#+DMW91C>Kk~zHbW|j zoyH$rjoVWcKNwlU@|^L}cE`4}{N^H_;8usRSracmxK@FQm-T6}GBpX=1TOXx@QOs* zo4Yqu*UAxI&r#!)RMsvOil=r&`+sZC2pkMvuur4Qj_B0C+NAwLpdU5)I6y8JOR0?R zwVm}7IRAL8z0`)&Dgf~0HL?Lw+pf^fjA7ccC>Y_e5ga&mAM~#fhg8<|V%7A3evq%OG-@NT5J?b@quhrCHD2ID#74SYlTa z`tkx=&M!vM$`n#&MNwy`1E%D@@VdMr;cZ}Zw$yK4%;d-Qe{y*49wsY#vL^UsA`-C@ zmdK;|MD37GICZ6+*C!TP zken40$Zf&O@EQi9V5)95DjZg25!9NQhn6;>MidQs4e@ot16iS;XIk(4?QI~BhCBtP z#e1R)LdwAK3myhsy+Rs}sj>+R;RsI3&bi*l>k@R24!E09tFtO>mxq4>@JmAzK<&EQ z2jd&A=dQt@>j-v%MPINeK>2>rP~c0Xe7vP^_(NQSFG&xgp(iC$4N*%ME!6ZvX7|dw zfa>fSRyjhrH@LL)a_bz0xUf$Vj^J*bTwFS0vQiq1h=Qog!o^VPW+z3T=o-<>!`Rdx zApTx&+=@4p^-GA58jJAjE9MatbL**I?-=4)*U6=Jq4+R3hM#|t<9SbMyCcZnCaK)n zVLi5WOmhh!nYvaIEv|DMkVChF*U%GT?o6u9K&5a0^7hTruSoc{vC^;;E@>#jNp(3_ zl4kW<*{psbVf_@{b~sVaDn8lKRArvzH8k#Bn#aFWVwA%qlHk>hjm7UUq}KSHxP%<- z$pfp>Sy?mrKs2yt#4eiFHu`(Y@R^2EhU}7{p7euq(s6r|eKSGZ&^2#Db<;V`ctZ1^ zt8>T^MP`>XpN%)j=@EKMibz|M&0q|8gPy??&uDIqQbMzTGtu5G@dH zKp+1?85X>pim48}D`4(E@KJu8%~ow9YpD@_&#t*d#(h8)o5Dw^U79(Q(sV~(9==kOt-NS)#3 zyf=KZn%lY$#hXxm->m_^{#r4FT$`3)e}!YNw`SKYOLx{`jLA0E zfF5+@i$2QGC05$pvMZB%L~ps^=;~Qf=t*t9O*k`{@WaC%?4yuib6j6bg)H%F+%B(B zbIuCV6{*Dsz+9*qL!|)$G>RgDzBQ$br#$_ZfAqU{aLR9er&DS8%=Z0`$R)Dwl<#W% z#7ApD1^OM~cBN)pm4vHhPPZ}A4e^1bf+$f-6(0J-Pe2XQLqBVRAZ~^<xl}F2qYs5Wsp%ZW3y*stON=FF{zkjql0k`fG^ozFDQpU83znIh_qS^mpaER zD9&Dx9ISLd=iCYKOGv$MbC0QH<2Y6f0p}a;MjsDzO=>Q`D1YokHGh5>5*|$ zWy;!6es)TM9B@k`+JIQ=0NfVp+AI9cx6CagOM@jIz_6JaJl;n;(V9>5@5hp5cw6b; zvBPL$4!>(#((g}#6t3x7ct!XMb3P+m=>pktua_6c;n=Lp(7d7xu$tT@yEk58m)`-Q zGZ2({f@Vq<-GgpGFf5g27WKXL>Igiu(6Xw!`3pag*8ppmJJPQ0QW>*?g2{D=X1ard z%r>!C!Yi&ncAM14Zkxqx1N@s3g`6}t(b=T!T zrUluWFB*8C;aG$)ve+f`B-QTq#X;B!CH2+KEfG|pbHw1V)JYXXM%aeyW3sXoP1l6K ze0R=!Rv?<)K&)r(77gBc-*^{aDH7v)!RxZX9FDtRuivk`cRGI|_`g5A5`B3x?7^gT zR33Djg(wpBGz@2o$8`J=0PjDuoDZ22kQIP~;>Is_Fe1jb4}+qxPmS`KUexncg*4-IGy~_EkNZND`|gPM4)jD}bgEDF^$flFuGVV< zs&BEHHaRNpK0jHs7$L8+qBb-y8!QCG17w^n9@(l-v9JxYZ7H)JvETs`2qJ1?`fBQP z{&*I6#~De~8kh8|lyDbU8hOd4i+k!$SL_k0kh-A&GRn*?)p>(Qb~q+?uh=M6=NDxr zB6O{Fr^t?+vdup`FR|sYqp0DXY^hrIY831rkr?E$v|ZthovE3bO-`)v&)y27tj=5( zR$dW`MX0+V_i8GpGSN-#4yMR1!$oKq0J-EM>jelo_>~&_Xd9Y`w?Nmv*XkOIg0X8! z??Ha5qmII_5}(-0WHF^p{aVaAcP;Y0yTevC^fL@5Ze6m|yXn4V*?N@U5u!_3Jx7&S zZXkg@*crDfDc5XuJ%*V{xTo86?AWR_tGPpg*198(s5qpOy`(!6%_dzOFm-bxYo|IX@m!GZd+Uo;fYM!eC9LNT5s{?Mxd}6g=1a~F&(MoMqXi}RqhLL@NHIT0h7(BN7r~RFq$5ZWqZfuEYKTlKTm4Bs%+MkcC1lLr zRXr%#!d?8TjX`!6XB*#ZLj>K_ zLPzriIJ?FM*r6ny+`j)pJczcSu7(s zUpP>BjfV_zh32w-_FQw}N6eD=3akpShcX@oB(+sJf1As(t)@xZO!@#kNt~S?tXD~( zgCDxS7pOLvf4>W)@-8Z0AGha>UWf%-UBJ0a8O(Yx6VeWM!sF`t$^ta}w_fCPW?P-L zq?Hi7`kg;$U{jBVEa@@4)X=ruVW1mAO@JoD-K4M z;UR#Ze5L2H4@+K3;-cG^9|4AQd5z;A+jwBCcts-qLb(S2P2in7cUsIm2qqvbUu$x@ z@tG8cGi}JqZ)+$CF6_>8KMDVo<2JD8&h*^B{+H-wBox&PQkZ>YJ3nl#dR0-90$`;?0w7S zvG|d-1|E{3z$pp3-3cV~*l|g+?vK89#=w#c)!_PA`^M~~F*ynX_xFu}D=y$%Ls#hd zy?fLbr4bMLextC*DII};U4FRQQlkgZ7Tv++IeG<7zFpdqUnBjG2g0xds7P z_kzPJwgtO=t`7_7;c(OM{=7h_Xv869aeQiCOBQBS^0JpGWl?@1>!tmdEi0MXdfPU4 zkf|TL;}1_p2CBYE@N(;TrA$|o)@=F;KXfdsV_-#T%O7V?OY50G9J2n_hElO;8zFzP zG9}c1>U{YBk(tREIf`1Dn}2Sd>`lzb)QxQ2%>MoN-%U?+tc(m8GkU1Q?=-6s37hH; zN6H{pykJ@(u{faOZD_Jqo6N|Dl{CeitoWN9!yCvSsyq3+z-qY0cJ8o;qr;x=A6=lm zgtpJKcSg}dDtn_t!Wg4@c;Y8$cVum-JVzP>FcjBuBw*>*d$2O`Uf5g1hY;!|2aMAL zBf@1_ecD_z5+3j^_OMr`fcnWJ#l7Y_5|OYcQJaI1L~*n(ZnNC>XO0)M{3PN4SUi*X zSnuPU^9rLy3uM9}s0X_de|ltiStB&QMBwRks3%u)A&T}Q%yo(r(K5~@CB;EGbGfkm zO4K=8A$oVOKgz~Ju|Heza#rK&3a*_(1fRru75^(GB=3jq12$9Hx9`^M+62}`7ezF? z@lO`6U>QYV^L{W4$YMVN$yq9L>&-0XEbuzmz^Ghk>(1H#Rz`X;8QAiC(joj$3jP0Y zBlOP+HUI4){rym~l{V!2zaeL<6$N0S->g8HkO){FBt{^k1*ak_MWGV<=$tDq+j=x_ zdA+a`y?qfJ=b{%azBjaONartQwV0Xg^6%;a>1C+Wsc<$v`D(oGx^t+J}KZ@HbS@tUojvGp(6)sE0b^utAnD<6o`S zEZ2x`MA%SEM#Mz0^x$ntvgyZMi2~-an`NqJFgx!PXjf`luO$o7D{b68(xQpng z0`I)S^GLvll7J598+|Q$c35iBQ9;<*^15k{guT)F&@14}(iHA3toM=WpT%-Tf0oj> zEvS)X-fIY5Fe5#e(+irH7D#u;Z5(EpbgKy(OL;qpltsx0qY?raZ~fToO2-4%C|cxY z<-$ZX0-;%yR#HU{Bz1LmB`Qgjwh#pQixr#jOE^}2!oct!S@EYC@;|sqeZs(n?7v|_ z%FfaDZ#-0M*!^WF(Qm)S1vbjmtr|Y%Ew=OT{gm3lEwqrXaX0F;Za2ZE+>! zywm$5*XI+g%ZG!sQ@+7$xB&H)V$}*k?~9DemP2ZiCakq~ZB2mX5RF`_OjAKMi1Au% z2)|D|It(9xxa#v^*-mZDosQzHY~H%NjyqMgy$J2^+=06x?Pbn|Y$E(B)YFyAQ7pA8 zWCCUkR9^D+Y){>Wv--xg#GGp1SZ;nA z9;($!xKeifKF-huO6{24sg8taE^jJ=NYN58rd-k%NfxUrM~f-@H&!Dlo*6cJzXbf0 z16JISqCT$hLKXm!c{JS~2l9eLCF)1U?1d8E_yzoHXKtz=7A%WzzCey`ODyyM2ApL| zZUsr&83@T(8$tvw?!pF@=j_4?m*>pF_8ZJ*d;wT)3fU5Giz;@7s^4*NM0(VTbwv{1 z5xN6^)#olpb*4R%9!vGsr*%5gneXgtPV(+*PI8@UPO^stn-Ue(M&2cb)kjve|6tYH zO0T+>T|jIdFQs0QhhG?FC(LI&K`gc}IPz+aV}crjLNr>_+eHy*qv$__*wLsp`{@{n zC(stV0&&uSpTBCUvYJQql!(x8p3x6@t6SlK=3PeTxD0!@1*jQ_Fr&^hKn`D5Urc()W9 zvIfc;baj{pBbSuS{u`>n{B*747-u|IYc?oqlRaE_*QX)K+?KA|j7wTCbHSvT+gw)X zxu;t)Z91CgH0=ebRg#Q?vl>|3}34dRf080WS{qTKPy0|l8#uZ{HI&d`^R z<{yFQqL?!WNh|8DT|pZ9y($yv^1M5&NpRtbOA<3m{%Iei9pPZ%fBWSsrq{=Ee%?C> zApFxC`k$}A{#Ba)U+n4M#kp90$6-Si{f~Xts?>2csZL^_VF+{Cg9!pHj)~3bDGy|5 z3!WT|sfe(>SEiTq`f7dWF=S#;#oK{=;k5Y}#U_gzUn(ae+kBqNsoa-sq zPXyD%)oi1Qj!{pLp%e6B7YywqxE*UJsnI{(t{p4I2;H_D+E^{ly9sZYy9yC32%pd~ zwcShSTdrEhXieR1BMD2SERw~#y%|5sCHec&a~oH{6CeimW!|T0Jk%f65+idiQ|vih zN0488(+OPtX1BOKJD1y-;BCbVd(Iji0@yqFM5q)Pe$lU--U8-W%eL9K=6E-crmM`> zYOZlx#7qf(ed#io6R|KWcgO%GE{?MSn6yJvYhEjt*MG#-V2ZTP!KD*aNn`I zqXj7XOUv3TFDl;h3@ir6Y7SBJk*AnpNHEvzV-I62;!Izml>$-6VbxW;0s%m&BpgHu zEk!3x2bRMEQT=ngV_XmHw32;#wjts9@Z^U>nli4i6CC-=?P5+=)bl|?JnVEwwVS&y zwB)j$>st?;X~-7Mc%+DuQVrWz&Nk6|O&oNEMrIHpvJ(3PJ3Ic75;@yU`^BWBfT%RO zH7zfKp}4~L`oQiWGQ#1)xLfS+HKg+T#J*TnT6A`#PcT3&e85$mRr@ES;dXpj^j1|b@NBw2^VlP~gg^n!w4m{|e(1UGS>{BMA8L{0xSRTy-gT=XhrW-hRxc)A@AvBQ+fbh zRB@?-Vf~I!V>+V|2~7$R-sFFn_vcHRaPt3Xbll;oKJk{U5`Fziqb3+k?eM(h2(8A) zOAIeqfh!Kv6=WG2ik>^<(gZs@p(@XoBIgs~s)FixG1c}>>qjtHCW`Z)uGp+gWbU;* zY_uPwLVwr?yI8Ln7LPd)%@OV5FU!U;5iJPsuR`irO&#_mUGe?5G?efv${;X`4T(>j z`n=^2+9b@P8g%R@|^4yjd^*2Zr&r1>eX2BRh>EO(Z#c8zD@q-W(A9QPvc`dK==$p;0^~3*T`qFZnrjaCd4M*^Y(fs|w1NK(Je0SddYED%D*B zHiD?vFjNAc3_pR>+KH9%GFoYJE@cuj{6)89Y`^A(CNOR?UY$*fx?t0El!sUR8{Ivr zP>{ykwPxTU4Wa@h7I>lWFSZDbnaHFv8^2$d;XZD_GZ!scU0>%b{rHPD;t3VPqohW@ zMZ$Q+S%FY?dAE4+{qM#}o#Klog@K6PWhCW|qC+Djf-53WJz)%>NQlRLo~!qDK`CJz z+VD0XJX9jLAHVT!S?LtYAqUQvBCs*x*yjfh)wJTJW}l+wr!6BY9Do8J8x%Q;Q0t3P zRcmaV-_(-@kRDV|Y)r2Tgc)a{TLgk33>04^D`7D$n_z;+b=W4L%@s8V8;n>zB+Hn= z@NOV-dwUATZ}*S@9xB*1scCqJHZ#Tzf6ToE6VE8BBHZ9wCteV*=WUHJenG?0#n;Bj zwY9v^PN{tS%S{_4G8X0JvzsXY$8Lh>e}>L~y;>HtcXhThbNSDc)9mDbot%z*ENnbA zNCv{{gER|MCqsaDDGK!uAp`jwrF?YP>*?06**bMXYK47n`;hV?!skSNpG0tGl1S{< zkS!CZv-nw0JQ!Tef6eUN2!cczF$7_YALfbW8>=Fkz!FL@2TDPxC{Zcn44`rIsol!< zxj?!pa3(_7-xpjv14QjLb{3j}Hfie(6Lwn|Pi!KiTg+L9WuOV29MuU_*bWH38;6l8 zHh7y~ryI2C|JbrJ6x+ zVf`#4zcMkxCh2-l*F9fITV-zG%}3?4Qr>s87jLM^%HhO~u>=@Zgc2v1BuRLX{>t+i zw-4nai2#Yb>4X<5=QTW)LRcb~Nf|o_wTr646O-|v<@kQ_u${c6nZCW6krNNm`d#XB zPTgM`lg4KmW(%Rkt()nrJ+6B;-Zh!4nbobbtlI8IdAdlyJC8)B->-B7Vt__}Th3Ka z^^(tk#k8HYp@eikMBaaHJhT7nDvgJSsE`;Y7|r@zaRI`LDp{QBTx3!Z*5VPNANpij z+K>#OuThkPzEqh3ZsRDlxdDD2d3oP2C$*UP`#TMxaX^hIZTJ5n?Jc9?P`52n2o8n2 zySoKyMwVmQciiA*Sth&$l#~o*H6tHnOxHQ{=p8b;-;e{+S7-aAj6uIq{XkzHgc3(%vyVO6o4Ul-NOY3fOdNJTk9*>Ac#<-6 zWdXn`A20<*nsBy1b)&ujr%I@fo_VcK2{<%^HxhNW1VKb3I*~r#I9!w-V3N3oVBc-X z0!zuiPsaCgx(MGXGp@Diw)Wg&KcqvvYJW$_?t{YrL>M(W5>Nx>1AL8;X1}{+TYC5; z0Sb+54k;*9+942a=S3!0n;*P_&7xQ*v&a;5BvdcPQ4A1?DqzNV{F^9{lV1ow{xOBY z{>Me;zftG?FOudzn{d5<`BHV^mmrOYHgk{)=XMEaHiPB|DHYIRS>aHII1u@1npuvA z6Qok)Zit`2eqVxh=OMclD?sz^U;l!5p#e6eRBBH=B>;AD&!%}SC-1Yys?P%7UjJ}` zVPBbJl+@z&zzXin=)#85yl5kvkVlYc7MMMT2niyZB-Tj0Ex~W!pq#UXV0`F%i+Wge zTA797*cIgF+2nx5wB~Z0w+v!tYE{Se^BkDKUu?7|d^OO<)hy4Vtb2mguIpX5l^EX6mrKhRW{dojR);zw>`q#2>iz(2VKI zeAak7r+Hmiq+`Wfow1dacr7>AbvSHQronHLpJypgPav(cIBIO1;_e%)G}cN<9fWAq zatz*AM44m+>vMNr2tFQ+M60GrS50OlbEb+voo}}lkPqfV*JK<>V(cqC6%f%R6nKn^ zoKJ;1?)j<}LKA%dxF;LBD7=@Zu(69?P0N|?0))#$?o&5H0pglCEq)7z3?IlZ{)21g z5|Og*39Q%|EQF!*D;Syrtc>77j;52T$@#+xiixO|;UZfFQDw%ZS8B22cihwFXC+T3 zJj(EymiYE;IFv9RB<+Mu-jih3^Qhp+Y5vhni!*0PFa9}1OX(?|8y+Ie=z%!wQOcS( z->t@Qy>Sr16`Oto=b*5{G}Gsu{^!oir{Hvd0diF?KhD280<-T$@-uz8p}+)cv;&?( zLuF;@3suDBiA9WKxXC93)_zvJzKpaYxr+zSxl;+~OW{=jHj>)%4F0&!Ityb_y~-g> zk{6Q@1HC&_zZ0_eTPtQSl7@k>5D+qf_4n2vlrG~|H$PK=>kvJ8pY9GtYS)p?t|iq* zty!li&A?q@j2D`D+Ig(xa_rPShj2**SNK9INTHV-Btn@(@raq=VV!IhU5xZg6=WHg zJ(YoMdE_0TDZSat?EgLNR$wB*Vdid-Clf|DfzW^SONNL2F4MK`t?xIVoh_z>?DkmU zW7@(TgJBXaS)s;U)8=3Z&i!d8Fuqg#!UAx&-W0fy#4t79u3p!N7BvtABocW38pCVY z*IP9yL1!2W;XB-)`yRDqLH~hi@I8|@ImJ{J zi~TU?{o4QCe&Sxps2g1SS0W&xHL=HFO|9l`bD`57La9^PBs%7*Wtt z1{njE4Io@2P>ThiRYd)n%u@Os^`X-|}*;=9kaGERou9r@SviLBw!uzWrhaanq5zmumWt055^moY*szkkx@t9tN(wNWD62p8*_u zl&6Kems93)!%bXr^FpLvlWCikX*OxuJm4m)vIspVBx%<0Y?zHQc_Rri_PdI(H^bg@ zq$ay`xF@P-=|-JqZC@ww)x|O=ff=iLq-U`nZT>sJs6U?bqRA21~H za8`Z0`u@9^7|Q)hzg$9^{=pm5v?s)VCr{#iC_j{vpRMk9ty_$QiS}tX5il=CRGzep`Rtd`h*cYpa_%(e8l z4CyIK@l{!_8887VXcH2Jna^3!S!K&@%*HuQ0%8|YGk8LA905C@{9}g@ud{V|dGk4=fj2Pmtfyiu&y?Ur(Y24vDd zBT*_FrMEJ+B%}$aBNRF(#zo4FnoG(kMn^DsyTQ>a{k%bbfcV)9utv!GCS~!!!|wvB zrKc@7_uat|BFJj!u)JS=_3(f5x*MwjtKPlgc&bYqgn6jNre(Nt$w=L&ptHU;W(`jk z1Q>HF^l~ov^$)ps)%Vo98-7k)lFd)=H-IZKC~!EpzUOq8!uFhlmZ3wQ^KaVYO*bU# zX$;vwtgxh&F3R<&IoVa-(HnEnNJ^lZ6)8I^k{O_Nl~54$x-rkI>sh zU7%to-*-L+>b#rt9P z`+Iajs~YoZRhi1U#|Pv554A-`q^I{fCqWfcd3u$~7U#U`NiXU`rAb=MF-n1YIBM); zZ~`8@9DQ{)yXq&dxUrT$?@kq!Z6_BQ3)R}Lgm7H0UCGsWO*6+65WU>%Od~Ck6#ZQo z$Uk(j%LsJgwq*oEXn+G)}* zex5(bxH;x8Fp>g4c;$??3O}(!#C(VWFqQr|FC^1?P4Jjv(h&``<}r0_B4wyq#6t3r z23~;59elx$~pg zmSK@i@NAdE$8Uzw5v@rpQp=%tp|~HX)AltERL2(#c@~EGCA^wd4No>W29vhDE9$|1ID{5Ujpb98ffm(k} zn(7qY)meW}V^G35@hS{I$S23vl|b_nvV=_9PJ}f`fgHVq4{1e3h8A-w<(*~bxHbN( ziYSTn4~D>MZ2U{rfUA;Pb{Weg#zyaI_63H+Of}D>dK$G}C%UdesJCKb6cvfElkfxg zzVpX*X4C|&SBO8U!5R@X~cJy-Dg-7s<0BhyYE7v@p+tm4(FpG zc_seq=@J4MP-uOi^zQ%d1m{0UZpmtTj%Xi}I3QFr!fHgRm!sSOe4|I?RZpP;x|pnK z;e27py$N5DUMg;VD%A_U0*55=U+ebWAB^@%4iti?6F)B2x?F$cba%ajO^J?)VkyB7 z=V|t59dKhrJ0A&&Vx8t}~XK*i-xwFbfki-HO6Ac@O zlq)8i9By&z?cEu09NYwGk#?trAq504;b=XR$6f`I`TcW(mXGETaE0eKq-leiC;OC9 z>QfSaYjiQM4fAa6*4_oRGD?7_ZimB5KC{770cwud*#jmBbH?&+9GoN<_!i>_-NSkw zNT|}yBIu+HBE#+WFW{+m$LOLyB5v&NiIKOG+>yo`1Ex^BGEuTG+RzA{iIU$pwNm2O zrC{h)=8R?Vsbb<0fp1cgQ{m1pOhP5shQ_g!2@$d7)an{hB_w2VxAGVT4tqP}SztI6 zK2~+CZ{+x-amJ>x*=2n7ATcSgOxQd^gEcJU z`d}7?9V%u5TdSN4WnO{%eYM*?oNwHek2I8lbZlK_COrmrh-MuSO~$;pUgiaA)Nr8S z=byjz$Gs1vb@U&|8TAo@|2?(fpU*Y@y}0;m^5gwKXzwon0#1MBF~twB0)mzz(mdKw zdNi2+yiVgHYH?IFQIfoCRs8*PNh+89rD1237d#ljud$-ss7@rPf?k~s4Gp`m4}QKd zC?<_6@C~wgY+aLIFS5v%V`;Rxi*mptW~*dx^7^7%a$gpT5-OgKY+lz&){nCd?D{m^vDIb^(Ce{=mJ zKQ=c;Z^?sIn3DZh?M2|dlY4zF zV<~1OH~uVdKn$0L9*4>@iPG4jL7#$knFbD+iKwPONTAY7F=hRIFeb^V!5S4&TsT~b z$IF>soOCvquHRq^rM6Jj0@TrHPH|sV$Bf+4<`wI|DX(790m}b0NSG!QGagw|#cBWe zs&cV{a)4o&GCD5%r%FmwzFqmtDinkt2f)>yjyD{cfO?~fFrj6PcS476Pgh~JD8;vw zF!IoI@7|@{p#m>9hR4fd4!ww_2zB8d`8^I>&`5h6BLXC!!W))hBawR6E(0;*V?+Gs zPCkD-+ih4<|C7Q3eOdGj()ceEW%~ZDXO{zLSQ; z1MBZx(d{~#E_6l;@yyHIv3cuFm8qP4s((h)O&#&|(CWR&@(={je6G}cKVeZanCJ*A z_PSO|dxcAYSD;;Mqt`N-K-56~v^e@REZXZ1P+@KApvBFnrj9gu$Xqr}vsQ{FEnJD9 zT?NVvpg67r=$RBEjXeKl?0fz9L6E3#?xtFli(N%=n0I*=H!y6y-`Y*Z z(i^@?`RQkfB2bx$G(9xGa^702hzVzWYX0}I0Ir2V#EHHTNwY_BAc`3d%nnjVH&K$tuJ1(5Opze!y(3Dy}r2lED@ zPnFT2%&gy|VN*jW2HnFdV3YJ z<|yTmE3!4}Y?}t%N3c!4X*}y0>DMxHx2@>*O*Oo&Z`J8LHC2KTX@JN>;hIQf=28-R zxLbd+ZIqhZ{-^5S0{vMY7;rFWl4z;Jvbn*hgUmb4WJEiXaYpa6UO*Isw^=V#jDPvG zY%Upu0Y1jxO#gVRj{kq(A^$gd_n*zf*z=jL2UtM@t`4o7qn}(UN4d_;K-B=vf37~e9!4wnW?qCEUHcFeH-jm zRGS7|1aiA~DL%h)?Qo!5WZP|4*DSOv=f*9XP0|swEJy6pq21djP83rvJ?g0yzL{cj zin(gyYO21`Sa{+DQM#tG_tT~K7&WJJI%v$ND`txiR8~C2*jVp$>;fY8S-+YrYYm&l zxW)SXKt^sqed9iaw9KVt<4a4g`l-2DzMN73TJ}iEU)AkX&PtI0r<#btuE+>IR_v;k z{S|iLBS+dD!N13CyFdSO-~LIT{U%~kQ~-I zE!$2Af1KzKJ6SzI5_>a(I}=qp6xsN!r8zj%KN}((t=j4vkN%8G`8h;i@^~1K*7sn8Y3^^3a1mI>vhrq{?Df z?1SlpjL12EuRzcBcX(%Baxvc(4+(F{?LCvTN~O&elInx=A!PJ=weiw>((eu6z+$89GrITAfQ z5+!UuxxL+nek^_CYy2EkJx43z8}f@a2rvZ8s?KJF5+Jctq!jjoNQ24&F{TAmq^?_Ds|2PN#KhB*06l|#J+5YWV(lPScxe438O2v0t zeHNqL9#usZ9!(czwu@uWza4ire)&gzs_1)i5ZS{P^5x;jB9?s_R)JB&!}xx!+x6p& z2yu7U$1XBd5(){c!l`c0WVsI==;A|`_*DG81mL=!cCyzQPCmUkYt10x@=FQ#rA0Tg zwaP0YEM(i9nnQ(!#UfW+*v52!D$>M3Tb{c9_XNiR zFYyB|a=m&viDj7!1x$L0jy$4`)-K<=XO)9vN0Tk+)H!(>V)Mw2L41#Y7o9);ko5f}?_v1IqVwNaJ^nA> z-G9BhMOp@~=;jy!pEF{qbe>S{@}T6B(XKT_>BuPazQ)^FuLMO;YpQ<+eKuG+Wy?^o zyre#2zQpz-<#ij3(Igl`uuSX0t(ha_=o>Wiz9c1M+{rOwiYoC@7L6h-vQ( zz1Hv2AK5RVWw1HQU(uhv1s1vbf&~ozZ$#Pc3SJ~&BDjK{zt)0A4;Kza2?ahDWG!&!B)r1^tP@h6-{bozYVNhZw;6bHdJ z(K^o`TnlFuT3KaG=k8PV{Km)O(kzN|K8A-l8fY<0oQ;U^h;tY+a|*rvg3{{pdB_wA zgsLT;pvJmU1wG^O6wwkF1Jud$Zw1xtOjohz+b(;79W0)8&k@O)sm?Qf-0RSRO)G_y zD&tNVCPiTk){LE03Sv?kLo&ms z_0xZv*wz5YW}y`BP5&xq#~D5Lsd}sYD>_aA7N4|G)FJoRs~QBHp|aq7c^7WaxR25( zTjJ1ZNsOLgup?1@pg5^BPj1ejf(;$gKQv^eUA?0t7Z-t1f)vD`h4u6E8+8W(M3>;X-myko)8B2>G15R#6`#6UiG?BZ}Y0yu}LKM;Hca`uP4xR)Q2(EZd1u?f$kRM_=q3ntgD)9?~Oz84&}wK?XZ zX?oqVcGpj}nNI^oE)TS~Q4G8ridOv;W_tO8UMvlCH)?w3J4h8?TIM^SQw^YRRqBbi z+MiXRkTMAG1A|!JZ(Ic#{0~nv+{5-!zAN5!^J5neJi6CsIo0ZU%md*%T9N|fl^$UI z$L6?R$BGzli#^qJ{IBUhy*Ro>Z#sv(7gSmGd8~jnxlP;6SB`luTxGef+#%{l@20~f zeS4x*`B>6L;;iB=%zvX2 zrn3lH)PyH7GBJ_O<7#2S)&2hR0B4Li$x+&BBuunVR$q#dmsh?c@@)-Sqq3Amqmm7W zdX3Q^qto*nw-W;q9I&W(pE#rWVzruOg#S*UVO-4Qj@2Eg-*=U1m1xq&Phe=xN~8A% z9v{m|sPq#=)FM$kxys}{n9((`j)hFnrj#k`b`%0Io-*>yhHcg-0+PvNTRv9PR}Qc3 zXVo?;?$rOBb@pv^@Kq5$k#Fz|hv;Q0KDY=jiYbHKahd$Q*&JJ%y_ECVNT=rpiZZ#VcRixO z(>ji;NAL~cs_mzjS|}ZfsUAkbTWhv#3pnz+s}4hYg}}7^coz+%z$FNIKfCb{q7$m6 zXm-EKbxhcI^tTB+f*xnG@dO(_{n6jeO1*bRz5V zEvl@|kXxjboj**n zjda?B0`hU3ih`Um!?S@ph_gIr%zuSypRcBt)<-D_`bRMTH$s);{}ZYiyZuF^_M&Z# zNeQA%$}K2Ns-l#o5$f@uRP*^So1IhUlD|kbt4#+UBcNd?!}PNgho-qJDC<_ln_rxs z{$RJX^mu)q{BZMXzSIv5dd4kOnIH@QVA7Ps6PXRaD)#_C8T3$zy@lyf`V8%K(mxgV z`1jN%u-)JrdUU|?3yUG z5^gjMCpz*#x3sTu?(@4*y+F)<0Sj)nT)+-YpzofZlmQvn~J$dD{qT`CrC zvPZHzk2UD6mORM$S`;G+Th}TuwfP6hTIie5olG-m2T$xd-_?RTJ@q3}+3hV)@phVM z?@LD`9EMSB)~fBbV=PyK{kMs^{h{>mh_>s1fO2vtN}mw9I6CbfQC#rUvois3&wC772OleMI=jVVr93y$(G(vu4H4p6)) zuFU2wVol7w`Zi5>2qTWtS>h1_a`}o0rLEB#x=JC1p0!v}o+|mQ-`v;wKIwR0(~5|v zzgcl&s2v;q6{@|*YEgfM>cu~Xs>uJo-xo1;b#pQK;`X0ri+@eo{$_6f7xS$sY4gKu z5oM@*m8kQsb!CPOFVJ|t+`cDULM5I!oHPzaP66_HYqi;6EdGSBZ58b?$8Sp9ltt42 za^yp2#aesKxLJUTyElm;=q#FT^MuYg}Q=*M`X&;^>0FzLS zmxw*e&Xt;3A9PVEz3mEm1Qg6Gbd6V4Hxk+!XPJkMAo2~X?Qw|RnUlu}I*yvJk|Iy* z?&|>#B2M4~r?*8&J`pO>7EfeV!{S&}DAasu5~w+Yjhu@)OmHHYPQn_1enkKJXjm&N zVA;{EZ|tSk3U*j%k9h)E$zMbRl$D=F=(fzFyzx46n~kV{H`D*g^ z(zHk4SW(yakX0oTf$((ebNrklGG!_;+vPfJ)X8E=L)^NRH5Q+ZXd;c6(>KsoInV7XH5)ZF7b{e?Y zquuHp>m-Z&T@--*kSUSW;lgOVt_L>OP!W$KYw!1!CtyTOfkIzz7-gI#z(-?v8k<7I zC`p>Psu(h^Fg~7A_MJfzgr!e)hDnx3sgb?}MXzv9rur0dbU5W4wSdDT`W!=Fm?0|# zujL%Q_eU%RUl}`cLYVlcylN-AtP#p`@ZjYY?9Cx~v2&F5DLY77B|bvugq>aB0Hu$) z|1Ou^kGJ>D|7#Y{;Kc26i$<^$jIL2fq#w=2wxA56HGgg=>8ioh*Vr!tW#0d;W1F{?Bf8e~*;^`%wSab3LG?C#x zTok~9AlAzy0}C8RlZK}Ff)XTWIYWV%bloZYILyvnmi!^9b^W-10n_Y(i_n8-b_t|RfhwlNe3Se?qEj^RP{&L(JJZahxcwLa$XwGJFaR_wq(bEx zg0avo3D5+RW_SWjJ_^zajP^=eu9m_KN4AQTaeazn8>KJm?yWIdHDN(gp=Bz2!S~B-RL;~KpQ`)}oX;EK zhP`LIL~<22Pg^O%wc%%9t0_j4?N&?~WnwQo>Xem5cU>F~Wrrlj<-vTk!iJ8u(OxBZEj?|T1&NVEY`M&APem^cuoqI{W3UnJE*v*m0Tv47cy7eoqO_jSE??J7OBmc zzAuv=o{UFv&%?m76lwn}UncpCd><8xw2!OvLKpW;GC}^)F&JvTzG~Do0;2rH+L!T@mb`Jg1zTVddeWQ)EUJ0xfnwEpH<-5itYX{5GdHMheY7q&*

vO3*O(8Gw{SrBZCGqX{j6}vBVIVM!(JG%GG6+F=vFCp z&=nN?w7azYjN7=llleNmu58&u2xx{$)8ULeb;%~S31>hYAZ^l znsAB_lNo-9Zw|AwoTkY`On8WPXOqhc#2U@SCyBfTUcm-!7MYYMu5QgYl$w24${dR zrod|hU0n+K&vRlPLTIi)tKs{8*HtmBwFE5>9zj1O+WYprn6B)(sYTMy_UT6iw^+IF zkEJl2WIn55WKVINX#R){F3=JsR+>@JJ}GF>egp_4PY@0FOyXgKPT7=XFOf{**&&m! zTg{Wp@w3KXXoz4ek9fZ)7{njpCUqS{!NTGQeTRPo5}Ktnj3cUwd|X2yUEKcJ6xOmJ zZYyW48Df4b**S(eFH=CGwT&8wqiC3a;uljL@yP%)o9P%>y?Xws#T-z=q;kV#_O_wX zUQFbxGq@ibwb?D(Vmo!(-YJ~K9laW|Itv>`K5R@Zb-&|03>d0QFr>rT=uPtC_#9IP zuw*^sw#g)%9Z}a2uO;cRP`=^z-r3iGM;AQ`9#p}1mD#2K}{lT=2!wKP#d|vH>218}cUK+XgS$L%5qM~$682nC7 zK}aBYcwo5A8|LxjV%U`<%HbwiPq!HJJ5k32a`P>wIHP2Kh?_H(fA+0lr4$TYeB7_` zC1JAi5wZkjJ8BV%@#VIORop8Nhr%qRuJB7mTsyMWgLgK@8vQT20fmh(;?|EpX08#6 z_O)ck9FtNuX&D2Rb>BXI_|sh&+GXAWFohQt1uYnY=@qCebAb|=*7fB-C)0&Rq<#vR zM&^x*nRpNpJc{D|Lf?Zsq{O?cbU9RdvApiUv>vf#c5u4vntdZU>B}ec_HeSn3(o`!XTb(CBUlQ(CYv?x61{G8@xVT+b(B3@)a}sUQi#Qi8aB zu^43U0R18C2YDmkWOj^o8t*!YbbNEJ6dYbjHOeZQq9(P7@(~H|09iVgu-&#yeFC*2 zRT(DM)`SGz19V3o&*^^FMn%JfltOJCwK<%u2zD=vBzeV|QHdX<%H0`hSz(h@yL|*2 zxx2EuGq6pTY*~|oY>$4D$zM3e4_xb#)Dyl~F0i`gg3J`@nbP_oqD4tRaEt6B z;qNw9>Cq=~0?FT_*JEa}ISAlEeoSm!<>iGnb*65X<^`><9^dk2k&0qX^u`akDaB{5 zCC+71xNKwXrO7EsO%H4>#oBG|Jva~Q+eh{vXC5=DXxnBWV{135sC@d_*d*+7)~gNt zK6wZWXgUo9WSm%-JZhe^f&+|ciG9=R=(WIJ>l zZoBDW)GQ1;j6cr?`N*nw4Y)SYuLLK;9>D0`1Xc?*`w=U{T1UR4Mn!l5@w5Ar!e(E# zbOcvpN&2Q?F0KW4%MSzAOmTdiAk-t@+yq2^yNsBoKUmhE(Q?~}aGhKLJMxo(v% zUaKj9UE`$cuQ%{Dq-YBXhH3?C4e zIQFZXvnf5Z3k$!fBhqP}XSwHzKXJ5r(1I^4kq;0x&pXLt@d#9CY5PE3>tu!*=ei|7@Su|&4k3$A;?8AA$`0{6EV-ePC^CDL7Pqauc76C1iBMI*NG zg+o;;J->RE)>J~zjQ52+6Jojph0e-lOHVE(H5WxNNbEs775y`kw#&*TH`0l?J+~-3 zjK8jPlEnm`iG2!746jArPNOZXTpVIMp1g^cbym*Jck*e@*7IJ4CxUn@sBuNVO_Fo; zh{Y1lx@*0imlW=9T8COBPP4ontm8Dyirq%Z#b{bkHf}|{G!zjK{wF|@MEl%9;7pS|^A#c?CiCfate? z0(N{sZ-s-NcFex9hLlw7TRfOg+rxM-Eh7Sbt7k}a9hNA5TIf?>_jQfMgdwOj=A&P| z77Bl7;GU6{|1#V2bPEX_jB$0_KF!pV_-aKStzsaNSgR?vZm!BT{TvmLfw*vnsN+jo zQE5>{6o4f2`pEAw+mN`x2fA2i`u6^QT&Vx`t)*z{;`(12YC0#Jso9Tq1^FLOQL_K< zyYv6-%H_M_rnRC!LGf{J zGwLO_EpOm~-|(?{3wFP3FW?3y?ebWMBVy3EAC0#iKCZiV72Xd`)@*`h_7rgYICbIE zVR^Ov8XJIQA{|l{j2Y851HqqEU)Lx7;$#?dA_r!CIxemha@#{MsO(VP($2GUw8n4l zG?9(&XI!0;_0h2DQc}$IonNYTYdKIBF8?AN;A2nOB5h(YzH{MXdQM~aMMQi$ zFT*jvp{cOU9dI%lfCv!8NZY^`gF3hiL_0Rhn1=g(@!rwX2!exD5u@wg><{mpMkPKv zL9ze2^l4F*uk{{#z_X5XnHJbJ=u>36@E#WR45WB%yPYypNekdmfh8cJ4GGY-ZhZ>~ zS(r|F#UZ;T7$QwTPP~m^tCbu#D-jYgQw$V8>P)>4OZ{<8-x)^dFHHl(BGNA3N1VtF z?}c_1cHPh~Et<_Cp^8KO>5ba|U9Bsy`yz+z9eR*MCp=Lhgjsr0aEP54g~_aYR~cA1 zj7{^2LR^Ua?t#455oM(7=GzdDIBrlrz&H0hK5cp~=8Sn~aVG4N;!`tfw@HZ%o;^Zw z1*Uup4AmUi>^#zM$ZtPhs9C-UrdcN(MHeRbR3-vD69J^pP**61U*b%rsCqKAL*ha< zpQQ8GJSo?M$Uu{<;X3V09Ll8|ehCT~tFAne-WT36ra#0?05by?G^5yACwt?b`6p?S z{r{q~F^t5YTYb=KsQ>Zcy6C^3$bWMS|C+J={o$|6+W$pqE7I^)LsP+cHz2Cs!Yd3n zFH*GTM>w;^F2hwo^g7>jVzvn+-~Yd+0= zUX;%6;k3l!31%+9^=r~(a-uK6a7(x~lh>HOi6{zxSNK>Q4#stf()}s_RJGNSTmYse zLWDh>B~g8oV2Z98$bB7)QEO-XJk!NJal_&wW0mKq%0E={^{Vgt4X>Id&33zou3;s+n7K%6#bVkv{uHf0o4 zNdpzj-Qo?BMuA0=EHn^hhKp%0WLB^%p&^t9H_*?jSzHh*xA-NK_PN zrL1;hT?``bJ!%4L6iM{G2Guu{Q!-3huc4{cVjTc`s#0+A%2tlOjhr@v_!obfW1%xK zM!xI(uc<`p$CJ0_{;@L|#?ty6;LbmiT04J(2pRxa2<@}-^vMy5mI5mla4VGqRANVV zQ9-KvSMHG&#VT`l;~Yo4AkCK6C+7va`BAqMRiWODeDrn3EDIc7p)Zgiq*Tzk=fkUM z8hAd(GKKRry0FmtAXm5^5JEA(%gTK0|9hQehBtCMdSOzHs!!sjih6Z29e^9k*I7JyzOK30K1e78{V5%>i=fMYj}NO&SCvp7s~np5(L zd_0kl_7ZGk7Rup8>svLI6Gj~`VP9W+BlhkkIyU8)t#scaso+wykyfIj%E`gB%;qI6 z!>_BqC99S=ze|Zevhm~}sXD^{SK0V4jLp)pSNg!%fb-_+N;ijVwmEL$taeQOtQuH! zi4bWV5|f0Zmil>>Q{5SN@wY@`7S!-`9HHles6&tSHDe|dg#}k%!|cOs*GYlr*TZKe zFdhae5|RCy4m9X^{Cv|%p8C*5(VS0E*>(Wv0(2Dsjvy9}YrZOz@=+EB4nGMvtSx(Q{aCTCeW}EzCcK|W< z+2xsO%}3a4$r}`z&o@h_6&t!}L{t|k?iQujWpX=e1LeMEfZj~n_mh?_U>R4;vq&{r z82md8*Qc}co4+Jjlp3dUxazqA-p=U7enJC`hwnR+)ni;_-9Ao9ap67WLeXT)2Dxe>fC01BKED%5H!-yqIZ}aPZX#(S7#Wn;!Eli z_e}YG5nuehOb65bi)HK#`5(#Hy-jV64!fWC$MgI>eoA?hrrsyq|7 z3G8dRwlhK~Vt0N`=ymE-K#<`3SUUn-HpI}W|J;-Lz$6w|ObGWljo+f*Xde0IBx ztBm#Q2lHaQUB7CQbLN6_l5+hd_DZFqL)af-1x1EoG+FjXtkq*8e(S-XBbT=rE0>|T4u5AL$#rtPxS^Cm~^#P9c<4Kh1$|| zzjkxYf0*gJayq%0(+yr&iz)#*0=urNB7Vj43D;F1Z73*AN+skfjgKM1i_A2f^t6kM zF1#=dAjV*sR(*a{VRrV$jbfkqH`%S4t7*xswJ_?+t1-9J zJ!+vWB0OZ!|sgCQCUYyv6wnefmoAl;>Pek4-l6La1eq~B_Q)9Me+Ww=YaCqMs zo387Qs8;pk!=8P4X05y+GWQM6kV33}o^!TVV5ECO%7~1O27A1Tu)LJkXKXQXQrY*9 zKEAtUZ)h_^)~;m6PJI&)uX*66B13+huA;{CemDW^DheDBdTv>vCOn$a_3MzLy9kGh z7ly?ydpD^eODSEAt@1i_f}!1BD=S~od)7;wyN>}m9#yP6is;rE)b@d15yPWlyPpxC z%`FAucbsh5s<(OjcFaw1sF;_)P)`6hsr+OvfM9#xA(RU@UO*3RKz^NPbgtoqza>%U z1{G9aM)l#zE#u62+fH~?PV7<=B<;~x@>|go>)3&Zt3(XRuSyW(?_g&xjR;eC8Wvro zxdh}7$sQsApX}Q-Sb7{XodY&fg8|s80)=!|T`@ms*zhma@u8~}`>@~0L%JGCEbvi^ z*uxTHy@IR39O7eub5d`@{QRq^#E&qLz!&C_O*-}=6s7R|HH9VNnp#ji;$p8~y*)F{{R zt~ZzVb8yrmzaKvnEeF=`L<^@J6h)ri0HvS+W+LMSJq`UljXVOg!m=-D55&+LLm6HX zS5AQGjLeq zyRqRB@OG*yT!-QxC$V&lPrtRnY{Kj36*kK0Vg0p;?H~9Jv)k}jdiAb>HJEXL1WFD! zZrToqI$vK8Kk7tt^)F#$%)p>1oCxPiV-3J0g_X0oa>}J>uN?HgHkT`Kh;Y4u5a`xf zLwvF_#V&8}Y3e_Qa^(ZeATQwr?!}nQ06vJ_+3YK`v9R^FI%~^p?u+}?A?_}vS1O6V z0Q^7A0#ohH>zr+p$G<)RiOSIz@3Fm2N7vz$_H)%o;%VUC-9(DMr7CR4kv5upa*O3V zX#Zp-Xl!-OZIQ1pb?>Ok_}=~{>>`|%qW@z0o8ki*x~A-d$!{M!531*>&i5 z@gk%H1Y#QPv3Kc1gxx)b^<$goD#0Er_eyIw#&vw&Mtg1}?$UVsvxKuvJ&2Akez)X; z6~>`I%lD|c&hlmtFbH}~$)*yP;z!%j5;WFUQ zO>}zv%_vcr+&Ads^KV3ksAB%1q<2;jfl6G^avIA#EBo(Dgm^V+fRV-01XMHckS6shOun#J*p#?$NG3D! zF5C!8f|qPtk5OHSR;#3hLV`!uf;ejc8O^pg#U1uvGw?BV&I5;!$j<-A?d!imkN%%f z<6n{eA91a9riEdS@h&hnfz-iQK@%2FQfP)iUs?L&Dn;C8F9Ius_KuB#9Kgia$VZcw zlANB*tn(O@ewXKZocR)Wh$EXd3(D;J^ZnLR{eI#%Qpaf_Y39w(_2-xK*LB|s7;`9aIgs82Ec@K13n+g@%t5$I<6QgWZd333$kvQ*>`OdiYS#M(x`1G9NJQo zDDv^(9xHSPe=SL>C>JxGo;|rl6M`O+L!&Jb$?glz$W!|jl$dviY$6c(vJcCXO5 z#PCUHQ)Q}p0(U8yeQ`IHz4Qj@&ZqqIJ(2y_dgSAw(9C;;88zWbwjI%XJMMq}dz0&1n;G6|F z8$7q{#BA+y8RxU|->M>;bR0J+hUgKlN~m2vH#1^2bOvhay$kDEHbfefCkENz;j*FI zOGlMS%{>&BmFx&i@PO34h~==#e^DWSSOwv_)~UNLfV4=KN@5E&T-n6wBtSudrY@Bh|1n~< zJBa!TX(h5+T{f34{ZP7vPS=DS+iw{ma)vt>@qVmGcz-@)686EW@cvQa=OgS%CDjGk_{-bkS%rIbHX$~duOuf0Gz6aN8SADO&7GfX@;n>nUdR@^MuvOizL zuuv(^#9mFRrC^M&83d~-6W=>9d3K>dbJ^V2#%YWXdM`ol}VAhp44Fyp^`&vMeH_+y{Lg= zFE3S?6EG*r&(wpyxz6IX8U|$tqI!$jgEX62{r7}3`fMA8VhLB4jHzF0$Fc98k!W~O z)pypG`qR~2D`&)PRfCV_tc?QI&J+cZ6{Hd^e|Giz&vX9pEAK8kl&fK=6y!2hntQiU z&07N(;@+%mRFEI;%T%3%x~lUV){PLOElbhkcEH7i6)H;)-|3x6ZFAVC2QW_^L^9JQ zk=-u*Etm@|!@a3BUh^K(-V92cz}7%=HbIT!H> zE$2J)b8Ektcx0wQD;UGeo0&mS=zF3Dz|tMmH0ZnDH3H^_LywKq4hv-)Rj`S(qR+}v zw+gep16K*+993}1e0k!OVTud;v`36hXX(g4PgDlZ!E2HNX;zLw0;0yc;viajSD1B!K&_#hB1LCGYX!r&!f6iPYdejMi+!c7lK9?kd`^Ifnu3dkt`{7ndr6z zTt8akyDy(#GTRB)Mrek@EWE_gjI{ck>`aDI@?kw4n=l<&9;*kZ*ns@Hb}_>l;vG>t zgmH-KF}GjMYr1|Co>cD5Ji0|XBjqz|zSXqR zKIdcsH?rg|UC)E zbKD~j@>MD#!K4SZe*Swbf-_C3Q2MXZ-vsV49NR|9&V?$qip&m)J0~r~~ZDcD6 zf}Su*O!U-PKpszq)9td)TvejeF%^9Ef!S?cctdwn74a20Y}d93kUe6R^P1**?Bspy z-1z$%H*EkyYp65$t@eJOx;7-=NNUiP7WOpMqlQwlQZXK7LJq)f6x3qk(e@CA@SfN5Nf0^yPIMc^ojS`-QOuxvkZhG@ zm$_?Qy$E2|p~OEPRIade%ozzvtT~E-Stgt%o(SB%{UaMoT(7jYzeig-NvMi=yRpi4 ziy;--R1#=(05^>0qle{?myw(wg3tv^Hoga;5&UIqt|BYASh*=_WOHi0KKz^Hbp?yw zWq2CN4#HE@?%VHK8exG?xCC_vIi52;rV@I0y36?$`?t?-XQdg`h71y4DxOZ|mhyq6OTl8fn7(0@bEy{~BW*Ro%@%pHj{x@f7Pv&Kz)Jye3gpVxig3IJe z`JeOTDLkZbhoVsMWlRNzBK=q>IClGqfpYLV?L|gdB*MIX^&2McqPQvy8{5l_^x3oz zr^RkHlp~DCd~3|Ke{<<7mBLP$;lAX>-UkLI?tdSRpn&aoHY&3HNH%9p-R%x*v}mT- zJ@HWwJ_Rl;n%AMbh-Jvya7kZKP+}J`*!?V5DDkXduv>CFzvwaF(oh`7P1y)&A$A16 z$O6q?h$(Gu`ujHw1s`ETkvIHUU(p@D;x_&0rh9(+`(m<@FNCSsESqH2bTW16EmB7{1Oi~mC6fzi@e2?Co1-gnJ#SLC2(dg0QsI%T#%G`XVF$61DuP}Jt!V#2t3yuvQc5CTQV z<#D%bihpj6^(<-j6kkYP-oNdK{s*$CFV|ovdp9%F|6)-51D*e;!Dmj=_CI3Oq3#0U zW-G0tAkAluc5`wu&CszJH1roO6@~-gC9o+!)^jP}#6z}QLpq!8u?vQ^Pl7$&%vNBD z)-igS?R+?KmHq5?xIWEb0CJw6Ee3Xh_#hQ z0b<*NRSmX?4Cm~M9ns{sg5j9d1{O)XkTM;F5m#~}AvA9L)y-d#Q);di#b{FUS_@yeKEyt#C6<^gYNcm_iOW1wrREY79U1++(gRkeKkPr zAJCC;hF^^HbtIj{Xe2MQu8c1XOCT&472i}Tm{uDWgU+J2HP!obo%r!g3d-#Z0aU*Q_W8nbG+A+_pROJo~->_+wQoFNuY_0Z~FlZ0+lGr#{}d%9H`FU@@k>d^l! zvHAb!&iQ}DnE#ozc5a^J(qf>!UfE);{UyfK79~`MA=9KR^|cy#HDxJQF}LXR1Ao)N zK*MJSq6cNidjy~q&K)D)E*RverVTO&x&lf9W2bEhIn2w@eF_wmxOkG1bg-4+ zjno4NDSTxULyIgTmi}@n@yaD5r`$X$oHJd;pcRIz*v6rr7)ul#s?*|bL-U8nTm!Dj zxBeITHusJ-XIs|N9aoW?f)Jx)j`3d4(!_SDNgO|dA;ltP2CE{{zC-|HrZOpN*>8zdUJ5H_ePfmh|%nWolX%Q`hE} zfQBtU*ow;|0Fw8BUg%nSU^^|_y8^$ZF`KpVLV9|+0)K@<*DGPP1x80BL=2s&`;^%f z*LL<5oX^|CEn9%6t{QT$FqBcY;)$!WWEonvI`MwB;uIBU-H-65zMQonR(i_z@*NbB z_^jC94P*GBTW@>-J((r^P02*!K_u7|AORCXzVv!E{#me?dg1a zwzXWmXG$v^T#Mp+8*c0VNTzq%oB2Kstt;eW{rq8ZSwa4efQF*u7Tc0j+xGhn^N|vb zDGpG$Nm>efw5!<<)q)^E1DX9%XnB?TCjE_>9xDeaHz$p-rJ>!DoJ8Gq_OIGym(%w| zEA3cv2jo>2e9M^+TSd=^{^@TCbf`l} zq3&rWLPQyg4rI|*cpC9$nk$|-p_ap2)S9Kh86$nHDcQ?I=5Sc-n;5kIk?y-E&=H~- z<@q1?s?RtpuN*}_fnIR<;)4$dAC?$r&C5pa$rxzs3^oXo|yZ}=sg`8yEdcF@SWggU+1>C5CcK%mZT@XNVj{t2q%2SbC3a3x?JLMQga()2H4@zmC zgRv?MO6w5Cil!gfKd-8rmRp0^*9~Fp-%ca`+aMrk z(*GSGjZxK8SyM#f!~8*vm0~^U_pB6^DJYY_O&808FJXb#z%O~>+{42pFPTp2lHXnF zYsqsVQa1grlygZ|L6X_f(?f6JKE1lRF@7Z=;0Id1+Y$)ZjAweB6t9?g!zeLAf{l(H z8ci)i&f5}XtTtqF`}n*Q9tL-sd*Y6N@()Xnet&D(MXPq25kp5SG5(fJMMlX9DX z3*yfeZxGKx7q5Wa^mj2yR0SUmUcKN3Yvi#zPFidk%6RT&^(wds|FefwcZPhLUTcQe zIu$Opa9eK9-w6WW!r|s^$J5N`ez!I?5~<}Rp+9YZr>DdFP0aS!kIG}H^LD_OI%S!AXSc$= za1T1SQjxL57-w3QcNi9%0s9a|Rdu5epS#9{04DV9-~=o6lO;D=1J1^TiqZ5U{?+{W z+2xJ(z0dfsakhHG(g6I3CT}ryXqNUKNhS_Bel>U9;#eF3U;1d+n0Sw%nTlZ1I)ho7y(~TC(n|$qo zOJW)bJkmSb{?z{f+oA1ZV~kaRJMS&y(iPbC!%ZK?#M9pyPJ3$~C{fGx zHQTYFJ#C)|#*sMXPIb{mpP_EG33CQL>5~;9YTDUU0R^76R;8}hl-_Dgl!_$WbXa7_ z_um6P2)?uI`tlHo%K>Ps6b0!!YHu;|SfJ1b6&C60)U@w9*(6dd*KT!j@FcX1P9lF1 z$VyzLK#;$l;GXHglNUM5T?gXDDyPq*A~mVt?D~Z)?c7L z_DuO88Z98C*oWpSoSo9>MDMFQGcxrek(+|PeqZF869d^qpl?~~kC}Sp32x)%U__-dfN6f+CY z$eWcU`DR~c{|ZsGR<~019_qVx#n<>;YwIV-zMWD+7}h@TZla}??fbJ~+2e@I z?P6nzkk4oJK*mS#^O)qr?b3nc(P&xc$kMILW^?@g_bOfeg+UP4n!$**KjLDZOSJtoY!m>HcEjbcTFqz2#dh!Is)RW+$A;WDmA5F*vk5l8Ku z$|yh~eTQ8`x(}|2;@4Zm*LfPabC(^1#SSBm=Jq%X@wI`SxM;7QY{o0~dORDZl-MMP z>2i=}<2-0^D)8&*_FfcpyM))NA|o#SHqK?EzB-pCiV5f}0lj!~MeXt_=#Uliz|UiG z(hA8$rmYL^vSvGAfkKrPYwWYP-GlIYLhm3{U54+%uHEpO4L)kp1p0gS>Hu2kGpW!1 zj_XCf);ei-tG&A}!C#+BPcEfL-j!mC{z}JR(F0@3gq2PU(7A1Cy}?#39z@k%(}1wn zBRgF!tqmEw?XzcqQriLS%%5Z$=BU`7)^)ee9ycD~58hh@SKdAod>nEY*}aI^GLO zl0M3)-HwE(L~=+RbItY+NZMIGjgwf@-dj&D!50z9d3zL<;KR{M5-|fJ4QhW78efr9 zXEf)ST-vXP!B@yih0s@!$|YNm&euz5x5n4Gx7ah(;C7iS8c_CG9_dw}aHEen1@1422#{(T`XiIpJIybETfS7Y;f} z(>fy#TI%&$2OrjpC*;%5o7S1=jwT9!7Uf5O5ug8q6GG5!ssB$6bN;`rVgK5}|LT!i z)YqNA{AxaZ0gdbAIt?@GI`mFdGo^yxgz9SswRI=~B33f(T&L`MnIV&QlI$~k5LbKf zSD5-f*CA<@jQf(Xkec#P&id73j&tksXNM1Z z54jIYAIyM=X6(BWUQaJ0!ft)^urSo#4N`7TQg!|qmaBZ9q+v8+W;BVBsu6E6smm6= z*{caLmgFeo>KF`h%)Sw=aA-_Zwc*{=-aOuw6D?0~T+&IDE>}yT1^}u5E)KxB{A;kmjb9j}wd{NAtO{R9~ zxMGu*pWb?2z4EN%I1WcMB|s%rD$2+bnuj~Tv?-=mFH2Cb;c@idHrUdNeof+KO?(f4 z|EH3-q!gkuEAut3l48MfY6*U+IBCqtcSH3;H}q|3+fRR|K)9_X+FA#DtV*(GIVow% zcss~#Iw*Noc?lXuW&Mveb|n|VCW}|{oSh9nDbj*04~vvd8*mAOV*WUMR4HSNQgJ^o zkmz#~;_@+LRhJuJW(%-Y$ZT;LKhKr4wA!lg8f@dF!2em|*9-ep?lS9w19_*Ozj2@s z4zy52Z)N)$Fe&DO1|b1X2h$NC#97l$9+n`D5F|D1?WU+vF0Tmb*7bb>YzATP8Cyr#VR-MmQGeO zC=ZFM#KsUkzY;u^E9 z`7mDQm`e)Dg2VQje(BnnC}|yG!Zd#P@gV2>7v`8>O2E{b!o6a(*csR&hQ1T=EK(dB zqck5tAR=;r=nX`o$;JTojlK%p*$gb@w}H$JmK!r=Ux=_!HN7F4p$ zC=;gl>VeK{Iv}{(_5=b~i#y<6!BmdyH!1UOXQa#Tne`wum~#S2eG#-?K#@;mY}4rT zH9Er6?^A*dVYNiVZ@<^)aF!Px1zD1LXOPR{u2E@>E%Xlq!)AmWv8?cOex>rH>qkZ1E@ZiOFxpN-pbuHzwqmJj*y2GZZEhV*-~Cw?stv`qqBCHF%#Os!IE(1{Z9Y_+pVvbs$boiPDtK z`oPHjgz4A^Q^ii1LM!U-{tx(8yLPJY>8qIB{@bL6|G|~$zxeV0Dk(8)Ix4tkSbklm zO@vaZ!UcjN;{|jWP$iO!V->2A%_Vr+A<8vn^jYYw!JDkBisfZqOE0ibUwqV|tX7ZR z1sV%Hi_U9?;}A^leXAkZ;g>ETF)1lGW53^(-_?odR{vp^f7cU=AOn9?KJ>Jh1Jbkv zQ;?RQZfbhek6@a&TTmGWaR+pUo3rsZkB|!kvy&FeTA?^Yf>6;wlMIwP38k12N(`f$ zeQuqzY8~T2TW~4bro72GvWVmXco5f-Mml#*qLo=Liu`D9Xq9~HxyH$p^V`mh+{L3L z7ZsKhEH5W{1)aBCpz4Mg4T&O?Iq;+fdmepe2(T_2NB$r?L@IYwyi5B?%Q+=HcTViM z+HfLCF4upNF{hHzN;fU^^JNdtrlN-SHxQngm4}Iwhl5kLH*nlb+R$F&=#Q(f*wtu< zdLlpyHMar7c5||n%E|W26)7;W!7f8zYY0MEd~RWWV8Ovwqs_KZeR&s1?&@7|wD;yJ z%(CK{A}c2@a+L1Bgl=)&%iKri95b$s60ECnZ<^`^8%C7sOc*)Lmk6#VsGZSpkPJLD zBKu~&rt79Y!gmf!GD^xq7tV5uIqhVN=-6Y8x}uR!=swwe$!&#TM~lMBB4jwCoW3y! z7)ZPLQnxzI)n>G(8xz8CwOXfBF|e=VZY(uML}dVILV3-&LOP@&Nmd1Ibjp>zMlG za)n}V!x^F<;m*1-1oP0UOUDMc-z@k_53JbL>!i5p3Pt2x4U0Ymm6!1;-Zk+l+*O(K z2m`%z(z0S1TT;ny3>SdE4?K~-ZahCbrfs9|h4{;@ZAUnsp%MR_-EBBoqIvWXozXOT z&AdHw%4&LH7MN!6dAx+#CsIA<;FTTOE&36lj-dzD{Qf;t#wsb0oYoG^Xf9f8UNh5e zcKh6AmZ*ETK_|>% zb(LZkRFge~z&^bnCVxm%&t z3^P?+?S&y3^9Rs6s*yYbuDOkw4s2A9781TK5vKqZ195u+g)yS&r*-kC_A?9HN>v{} zF&-46EBrl)@`{^rUK|69zgeI7z)*~~g$N4BCHCbzp=q8L@$4p8k2?_DZYz^ka=+~9Au2u~Ej~85n@D3{ zu8G!MXSPT92ClW_m2h{!unn3Nc$atc`8>`d%Hb01Q!>?2ofpE1Bq8@z7f7qmDU1_j zCodBGHJTf?0%BP}!7s#ESOU>hXT7p}%ZICBr;R82H_|MYBz(CvdM1`#|F|CARk6v> zh0ulWA?2tFW39vCvX_Q$`w>j8xIoWe@~Xs@4{eAn)PS_`lpek;VD+Q`+_ilS&r|y?ItE(BSKlQ>Zy7PEg9&^2?KC_*#ejV{Y-TDjM5Pe%{IP1h34#rI4 zq!&S>AmybF!lf_`-(mV-r`nhEXgb3wbldd0*%Qd^jbhj)u=7aDsz?gCX~R_w@#hnfZfPb$L0PrGYjdORRO`bNv} znH`*$b`8sX-pe5UM27uxjjaD+2HpLm|C`?;?B)|2c6aRdj(wbySr^rA8|P%3?-TwT z{pT~mQm{hLIuDZ(}-BOaIp1ub|01_HJ zY=!ZyxsxS_f`Ue;cCh+7@e3T3W2!^~ODL&j(UnY;>WLPAs1ZwJ{v8aO9r$who5cxR z08f#5lK9e?mYnTF-93tvG!)D@P=0S;y30~Cp ziWw+u2@8a7Q70*9l*Ap0jVZ9C`~}~u)>2E@yNQCUEG7C~%{@i}q2h)g0j;2&gdGd+ z@%uh#yZ*6!Y$ys84gMeap*|y5MlG2}6jJfnN(pxe)S^t^swLMAtZb;ISPGF{?ceF) zoxckbEE%~7D3*9|*U#7r9T>Tl*L{!0_m*a^6k8`FbW9AqMGXA=+4r<_G5Cs5w5QEQ6Ke0(`YSA<9ef~v5K~%PJ2lya&}qIz zZfIAdLyjG#P!!8+sd!C%zLE$TZ6ao35Eaikx3ZTn=FO*Op*B4QFyB;vjFw0$2wx+V z4jx$tR+x#FXf;vc#E=DzD$-_3{^V1~WreW;4)q(&@--tY;o!#|{}XEU#A^?dKhJh; z6}pE#8S>@AFgs_4S0`e-Kha#75p8U-|83Yb4qLXNVCv$)N)R>Y!(Ch^wO(aDf(I@aq(W~}A~?c> zhBCibiD%h#%Od2rYa1wDYij`}NWiQt5X|oFK7Q=WVs3Oon;2JK&n-*krq9dDEIqxf zAL(fy3e6;8NIprTm7GK058z`a$bV{N>aVWlpcZjt1skl|Ol1$RBBjIWjqeutk(sc30U72ylq)Sx?s=>ml*LPP9KmEs zu4Xe=DqhK+3t{2)!~#k3#AO*AE7sAEpyphMgvn=np7&aZK6@#gcP>Gj>e&cPvrt+k zl3fF;sFoTJBroPs=Le&Z7_FlCex_`1c^>!6rSx$|%|eA=fLUn3T+2j@{BKgeD{||s zMbr3nG|`C-WbvxM7TCIJv{Sr%uCS#!2HC}L=m0ZlUG-2PM3$htdTD|A3LE?qQEQ%HcS z_w4?I==nf(SYFV?2E?H?Yf_V4`PhIHRgOwI7exs&Vhe!R!(L-}@6<3J0}E<PNQ@dp}Hp}CNUf>~rp>3|mpedZjWv{SaK+LCJo%E-~MPe(M-Bl)RNMx6ojed9g zxJc_&a3!9k4Cc33kZatawP|oolc`1H_PInXSm4n@e@Oq0rl~tGd+AUTF@aw#6PT37 z#1LO?KkqPenc?qI4@z!fwQ_A1n69PW4r^o?0u~S|*P)+^mm6KP(+?+kHBHP)=BW-t z{nK;wT(Fgsi74m1nYK}pdSRxLSvb<1c@KCiUQHCRB2+hC=Ic9XWGvE4T1N&XpE;9W z%4Y_#*|NTMd97Krzf~hPz9(PIxw zi9^_IyB!-`!?G95tlOM9R9w4s%41dnBQ) zk3v4{s)Rf7lUN-v{K%(Q!_oo9oABJDe;kNA90mmaZPG6SQ5zZ|i%nVW_ja-qB5_Ba zdO;gpl(ZFQTNP1%?iCh(y&eFkg7}yY{?kyluMa>e^DaScO;J+J;td!KC{ z@3;0Ntma<4D~U>#l>J7vE85Y3Gy$#xdq{ugz1ph$-ji5mFb;uu`z{K&lTCvax{z@s zbe6j<4Uop=LKI`Qy;geh@VTi5gHbRdd?&X3@@+cY@=X)JMD5 zVuv33vvx;dhaN&7p^m7_D&eKK4s>`Ipc?g=d~E>pf&1An@PTNgl)2!>VEGW;(8%JU z8AJ1Az-fhCwynG~!7zsiCR5{wRm*4^ZEF^#nY|?j$pXmHQm7+4RM#Z9lay7~PG9q%|#p(HTe|z@Vv) zPNA`d)~T#Fv;Eblj)eKd_Xc7llA2L8@5i8MOoQGUS#zlU75hfjE@?vRtdqX{CS{Bc z^P?(x#SBJg94kz*q~3Lcp&_8JQY&U)iKaUBtoi2|>oh+pn))#N*Dp7Em1g-?uohfT z6{Rk}Ope})op$>-jih>Ft_uN#^Ca~ga-zLubX_k&Z$MnWO|3UZ^2K&a_}n8QnWdc> zm@k)IOJKBr?hFOtz9S!;NlSOpW&}&imlkC|g5cZ~NGIu5HL0X|%1&>wU2cfGBy&z3 z0x;2_X-D5GsJD62)Zm z&MeyI6_WhSgBm<2QKUo37eoO%tfSuI7W1y(-P{qI|Kc5QIp*8v^RVGs5p!m$N^sIJ zP@LJHuB=z;eU`{;F!?qrIR90Y6kw;p!c+T>$T27}M8c|av-IkDHlZ5{QvxNI(YF~@ z_RCmG)NFoJqnKL^>MWA%8G?V^^>;=pBpJfvOZcYQyiVt`3!AL&5la1Q(>8*$aB>a2 zS=>CUARdMN=T&?A@Y(`x@l46>E8pTyM*ontqPKOBI+b$j_~i8fK%F)b-rZtCoZWZ zKT!4xU2u%fY-5vcU*Lz-8qx*gN#eL5VY<{2$h1jJ-YP$Y%fwJ!zIrTka6aJ#riHR%OqC5EJ*TF!g%4S()i&-tmeiSQg-uQE%uc&sndKkQuc)gK=FG?6+lxXZqx5u~(p{VT}W0$)qSzU3Rw%6Po z{_UGZuPfniMi2CNFVS6j54LNw-$Vh+JvJvN2S7&ALEO4xiqABEf{oWH;Vmm-%1u9p zP9X;$k`^!2PA&Tu2;D;U-I}qo9%qc=dG=8f@==&hh|9vVp|hI!Y4>)Qr!W_N^n+Y) zL!sw&A*Vd>HXE4R@y+iFDVW|@AoiZWD15F}8+^v%mE@Jb4M~=fFcR+7BPG^@4;i83 zv5nTu95}^n*P7Tb9(Z!OF=xbqxn~4)_YL&Gy7%)OKg-LELW`uh&prZob7f7aO(#Hs zOjmO{za^Tz?8%8jz^I$SxVc~juZpg`D?*06Vh~2$2_m6pI$0REV^2`M`X5#L5qrL~ zuu+wU!k*W3<+r`WTe?!KBpKIAMd&46t+PHmgpw07u|Ag@`ev^2H0WDeyz{`Gz3%wo zemzVe&%W>M-zPuSbCFO__a)Z~1L@0-d6O^i6nYE83~#h3n`FG#NNb>`63{2-JVrf5 z)+j;(6wKDjlWCOgOk!%QxBO-d->qK!pa`a1)=-?*l(Xg)XLWo-wfR8v7IoObP_y~` zvIEWBSQp7z37+tLwgN-be0l}%#P(jvo*Jjz32$~iIzM{QX!8Qm-InA6T`R=F4Ui*m z+v?_UVTeyUP{lW)E9VD%<-%V(mV`7}LIOdl{hKqh*%={dfKN{dGf%bd^BTScpEvDo zk{{0XFrz|M$ftMXx6{2i#g?q2+tl&ZT3T0hcez31<=Te~HYbCalu6S<=p=nr;~Q_j z_(5JJ9TOU**&v^el=R~?N#j08L_2{$lj=uW#HjDC6Pe9mDpdyWD%yuc-ERhAOZFMN zCwvjCIicuo0iy=#1|rJ0W4tQ${D2le7^i?`5rVC6`ab-$Jz(`%h<(g(ebRWr7yIn88;$~IAfXGaff%n34S6PgYrl3Uqi`5F?2%0>@rq|+4mIv zSwryP_et6^h57W})ww?m!hkv64!ug8wAo>QB7i^eu>jl!3cmwaGQa=WpCYvJPu1%hMqWr&7(q= z4#UeTB$C39LWBLY7~n`T|7&%VlWKRrz`vfE&DLFqW+KAlv|8ZaI+ zVBKTFy%?b8gnq;oU#MJD;NLvl|5@NaeMqK8`6I_3UOmDJ=X-7O6cunB)ZMpD+aJHo z2Uy@Uf$Q&v{rO3R{;LO?dN&`YW#!kerc6`)+*B%OeOt0WO=`lI(lMDH0@NOur%rd! zn*z|Vs8DmNpUmaCOy#-cmHtsq@U#9qpDq_4G73#BTys$!Rs^KE8|`Oc+C3|CC(9;6 zzYKx{Yfl9yx!MDTCb3tfgC0gtSscu?lMWWJ1N0C)ZDBoD(G@3Jg|UGs^d=8z_&C9C z8@^_W0i85X@JmUM+nAEeXI@?fD9D=~xmGX3D);FYGXf?v-r@SkktiX7KKG|hq#=j} zDs&a|y8>VjIcVNE?ea3mB?)0|RUM#gesh*tr3v0^~n!C+Dov0 zt;>p*R8NZHge}*~q-ynoE^*ql13$bvh>6go-SK0r34U9--l^z)j|y@231|=4rj$2? zwrWC>iHNspBHRdU@gb<)Ix182i}`(pknvI*-MAHIYGm)cec-BqEM zlKY5YN0-f65Al^W)5ynV)m=&Yi7RA=fx9$td6)O8^S=l#^KAP`W@c$ zS?7sd!3VA5mW+|FKmC$S@mL?gtb{LcjEZ!6EnST{R@V#Z#gY}SqQ_W{17BGMhYBDW z(ZG$rh&|hne}ox+SXa6rRRuz+wGBGzzz^#c72TTVQ!^<#R+0x%$5du0wqTXpE#bGR z=QFP|5S?rI5J1Ac=7gNt?hp6|2Mo#O>e&S7(&T6G0ha=X&RTJE0b~kSJvrR@m?%WG zk`{*dma`MZtX$pUe%Klq^aK5$V`(@Z-1kmt=o$4sV?KFuESS0C#+GK zyBLlZ`!EZ*Md5(}-a~)bZSwLX zOV6?%S0Dgmgu1i7o%a$@d`l+DJ9Wu%g4}Tw>7qdFB$&?rc8~Mz1*%8?d>N$NE3t|4 zno+eYrf-bOKj8L>%HxBJQ_!ROeYpvXQ~~>^rtv9Gl*6|=)I!W%{wz!VwrwO|z6d{k z`9ehV$XfDQHqs8asX}|ki4XD3^OTRC-wU$}$bq^0_2~nTF4i{L);Hdefn~Z@M8=_y zwm*5N(ZLU;Deo8hK^4HNZ*){o zRT@LBVGv4Y!>`X)?J^wBW%O73cqBU!XRRgn`AQj>HBhgFro1h;CM^Un+6hC!l0T#2 zzz;Wtw=E18Fa~)q6#twA59ZP*(Wsv_Mp**bL}{p+Xw-ES;ZP%ywGFH&1cs(Y{q(8Bp4|bY&#~8tML#0Fw@_3FIO#0b!kSHd?MYEQ(cWO250RG zT5=9E=s-DeghY${m0b|!U3>GH)u%m3tQ^w0lTtamBup*7WxXNbR7=|AQwb(8xMV;6 zO2YKFKGhz~4mtYPD*&~aOSIq_Doc%qO|6PUZOhEPOg=ivJjF=82P%=?y6W$(Ex(vgOLd^SlJ#6^IUvGQ#hYx~Y zd)8UqB$f3ql!8f|V()t}5hOB}^N~n)F0>c<377mdv=>3i(Ko(0rR*({X(=4*&HK(# zIuRZ|`_fy?nLCWQG)Tu_a{=tkV^5ltZSiT$**iC{uJqiNdmm^%gUIgSv{{@|6t5kg zh0C-j%%_y$D7Y&zf{QlTmRqB=kMo5*-?h8X|CoZ;Evts7V14`6r~H3m9PDcAVg)dA za3&RTb#}1_$o=Q%e~ms$)W2ffMbSRk-F_5OKFUaGbI`*NHi&@BQ7L96@30R}*05TQ zwGfT#Xw=YRTcs$Pr&C?`IJ`12g6-b++-DFDI;bn-@i-=8oHw{VW;Y$ZPKg0OUh@P# zL9dx*(cjZG9I@@GHIKy!w@!sX#UM0Pbq5Q5bXBC@S|d?v$A=RG&8W1L>PvSZgPfKb zL(ce2Ih$-d*nXdOsAZk8*8GaqXZNYC`~J`YaAcUC`E93$F9J?r(e9J&OWfwOy~2Di zsM)IT0?5khbIR!(GWW~vf&=4!r0w7OldEv6Q$hoG&Mjg;>*`~~X*^#KwiWTz?{I6r z164I7GnIOvW0u9h8A}6qvS2Z@e$Dh3?%rm-@K1cFyv>@-Q;rTw05P3aDGBq^QGsXX z-x6P#fd}w9Mi+G2VU#;K=Zw;P^=Pk;m1;SAX3{9Tkbsvoy0ALP7UoBGxV;|6=JU*C zkf3}keAuMDTrrRbbTEVVmXw~-{21;abtk+_bU^yP`z zZU(r}26bx0GoTC1CrDX+Lo(tS?b%!)DckV=n>oF+^~i1u(sn zV4WAvm=hdU$|6@@-t1v{E+oTktebUhn(GclTSB+BY=?j`y-hctVGIz0Z@Z!ImjwQx z_E6}5eG&|cMP%~{=7Hf~x{gTJO$K`Dbf^Ro?~cPA<$drOjqrQ&V}-igsA}7|2>bYn zX(1qnscF!5{8X`G#$NNc9ZgigPprTt;Ls~G9{gTqzO{b{=G1|+!ruRDqPJ3>5N%dS zQY?w)zC#oEwO56QENzsp=4=OVt`juH_`KVZft_0vogq>TE$=Z zb2C5s)5S~0eh`y9Hr>zPpj@O~RyCjIJF>Qckx?+YUCYt~gY0k~3khIQAHs7D66fnE zs|>>8O=b_p{}kO1AM^ga{24d2<9siZ_^0m!r&E}oes3{-n!^!7c|c-vu84wKkab?Y zk%i}YbDs_J8Sy~p_6^^)=TUW+u)JJ=U5#vUC-sM29r7WxbY``JY6@kb>ICzgnG`!F zd0Ws^S6AK*nG@at^H)4|*H0=OHRVSmbc=!y*nb2KD(TF4ieJh(@_(D({@+-={2!;5 ztd+CN|9*1is6X4|ilKdww>Ax|>e|J!%PFUY?yV5hH{Ulx!^^8|a7sxjr{ON0MF1zg zme)v1BqiU5y1`I_ML^X+Ne2+|1RUQP!a0Drd0dt#7ZX!i99OT0zV;Sxcir1Q-*-H1 z#hAizm1uX+p??v;88%=NZzR{F4bpW|XZj>hv=wQJ3$fCmsE3%zvAUC1%d8m2|1Zwo zxxex++ZL{hu~V^a+qUhBZQD+EY*uXBu2gK>X2q!(H{Jd8dHSAv?(g=e_doml0@fUB ztTD$Nvl(T9u}U0Z23xKnt1i=!f6LOPCQGcNWSzZfZ^f#!rv}V36RyCB*!x_7w5s^N zqOucEUr?wcJ~szG;aZh}yCd!j_C;75A?n4r z5uW#fqbhQ(5q!?k{YM^m1!g+)ls)52V-{*r3MZ2uvnbGhk_LHNK#=*dT#MGhN}2E* zpf0dX2?8as*g+q_{lL1aKy$Pjqk+n)<>0c~s$>**3;b1;S-s3go>TGCQ&C*)v>tSuq@DFhqvU1Q`Y9bjE+Zap9*(q=Zw_O9pNp~1yiQwfMvQF z$4WxD*lw63Wrz1h&Kzn164(^VL)`?vk_Ig4C_74jpEGSTy+yvz%b5uWIfJoG z9>q>})Y3IXxPyqvFouxKV1|1nQByhfjt%DJwhkuxRd&=vo&?2+LdZeH)uk1s5~c}? z2~Q{|w8+`bbvHJ!ja(YGFPxY3*6NQZ^dvj~&gQQ=OD^eRtE3EV!}FnZil`G%B-f$c za*L#W;ckkss_(2`Mb zx4&GHvX|-+o{LU zi3bC&aCFLH)U8-oPb3QZ36CO)^LNi6k9Idwj;`oFaJmKA{(cJk{ACdDL|Gq$VDA=6 zCiRmx39UNB2|%kvK&n9(Ai{|)Uv zliL0}*l8$ZizB>4NLnMnBDF*#4l@pNF*q7>bEE_c2Rj&l8b>+Z>NVkRb{DFpIwJQ% zRSszV$jc%|uH$Z;d{wA;J0j`8`UTE$czHMU9+sF3{NCTr?7mzY@JCVbeKSJMkr;+2 z2y7AryHe=&#E88rGlwxi;{Rp@nvuVfP)kd~o$ozQX5DGn+Fq94B(uO$ z!8J8qYl`)w-tbyxrfkV2n!O$XDq3Yp(LA>ec$l1bSPS2)vAhB#>|rEN_ytgqQ7pAXodlNt(wqCHU0^PD z6JwIWI=Ylnpgb*=B}j(>VYlxxP|s0D^Kez2{+Uh8?bJDv&TkM30^fQ_r1OhG#uda< zl^^2IwqdoS7q&*K%`dr7=DJz35wGU35;Yebl1;}kQCLNL6jkic+*C|b2&54?pZHu` zjY)XBD-+>{C%GqoSLX4jX;$XFa95m;i)GP_%z16Uw-j#EG*0P6!q+Rv#5i;1WP8w@*_Qv-YWk2(=BE#)!@O!=m#*>GNPi z5ng>VbGc=c3}!xenHy_J4V%eX#ls-WIXsfmP~K4c`}uRP1sojT?K2g^WS6fYQx3{IDn2ed{=* z4k5_>)|62^(gEvD!pHwPUgg=Xc77NC*ej^V3e1nx;EQ@0E*gwA7$I8(1$JKtNu*bX zJsj-C3uhpwd|lKXSq?`bL4rdio4huIqi`pa<9L_)^~j<*0=io?{hjIDf8`hpF{vP2pz{f{-NJlFMoIW8%gmmd2CV?AHt7KX)-C^h{)h zvggFnht*pfV$Wxn{O@24(d3MGyL}k-t@H+MxV+y_1gOp5`}`qOs-bIaMsfIC2Fl0mpY!casO*Zwd+f>kcC1Eq7bbtu|vA0NC6aRja#W+j%H zs;!e(y4QT7Np)R-`DxQ28KF_bm+A)e8PJn2fXwCq-4^wW|S5=_C2wz5& zDLulF2HbyT-2H8dGO^uh#cf)a{-LT~GM)UH2f+%koj8lIaYE``0}HY|~`DSJ!GzcHQVJO7GEOg~*sWVR#OK8o}0~C1Q0RdwAj~mIeYGv1~ zOksU#yo=IvUUl)>HWFd$YwG0GuCMV|;C;1m*|Xzid$S}m(s_Y9O2oiQL?FWrQg<*t zCa|~r^bx?jqvCmDGp<)e(obcYa{0)k!x$0Jcc+G|*|1kL+vVgjij`GCf42I4k{cz3 zg%QTA;*F0KX9Q!Q8BFt5p-ig8IVZ~LI8pJ72G>%do$>GOlqkW>RE4BESlL0F-y_SR zba^Cw2uT`wo0#dam}Jc+F0M=hVHCTm#dG?;V> z6v$`S-1{Tcu($~m;c2SV#ROqDztp#nE%-3CAD(jcHT7TL#Nw0BAb#JUpY{na9#7MJ zDE?edk_P1&a7mFAApWOdH67vW9ea?_-FIEZ2iAgCDo3;nj}H_)E(f3l-&Knud$M9i zIYCr(x6lk?iF|~vXH)YoLE1a$b!Vep6(`H)Z zdz*IKJ=|Gz)5u0E#LjTyMtP`X@i1AE*l9s4BcZXdTJpFbA$+D@bdcT$mO?MrbQf`R z>9_Aa9_iIkicHbqKc&e`uXX*8N^;kkgT>`$tC&k&eblJIA6CrN6BEUc%L8zWEB$ei zmTP7Px_@E3pe6q1mT9;=Yu7J^@dOI|l-DPdl)nqw0{1m%{_36M7G!Qge@2TktZhVr z?@S-p%VX1v$}Qw(G=TS0YJkTH_9KIH_DV}1QF_x8UQ*MDWG+aaF=mNKJqfi?~|J{>fPr6&fV68k#ywbap zAfg6kmM4ZNkesIK_TZCQ3_q$7T%H^63P-vxVRUI>R zBSTHp)%dsTYj~P0&f|!?fgNV--N3a-uQmjuC+X>ovmTq-%*{tu8)!W(G_5y2Act9g z1Fy6&O*RN!drn-7z84tkg$10Oo90{EtdZ`O<=Lch6-L!;Fl9S=xNG)EtM{M)`5ivXc|ue6l%p(U`u23N@= zILwsy-1e?Kbu~^A{aSr=RwvmCcZ6=H;SLmkf$lRZq!k?gBC@*;Gf2$#p)BKd2}$-p z^@m8aKlUHvOOk9BvLtHNGO_ylP&e`#K_0ZCH|97L4lSfetzwEzlbOe`wf0l7FGWsz zVxQ^w%ZL#{r0Omx5V*=-)pnvT`SK`A?GAPm$Vvb)tPCAu+0OU&dasX z5t@4zCX?CSgr6-U2ANhCo9zL6hv%bCRZ5>(-Y2d3mCFlKiaG3QqdqR(a*il)E19Y+ zHlZ`lZgX^Hk6$rSjlwEgqo}Enrd2WrI5Dw1O-)c#lX5E_zc4ojxQ?juh-!!e(7_!) z++0nu^s zo>QQL&&aXInRsN9y%aj(gnwS7K|#kk{MGXDPl)d1w|Q?`rDlnqz|7C(iyjD+kiFuR z=n)^2RlaH$SYf=Pxkr+WP>mfAam+T#u~<}l4IrpP#RZrR_ckk>vP=AI?0K8}g3bkk zezRlAokoN!8wP)d5F>Ji8VH9rYsZkV3s!@Ol6da9!KP_<0GD7+@G9i`HaPG}XIYJ*{Rrz>t|98(zk2MVdTK^0Op}Xt z5e-`A`6ANzgvCO2!*{ic%FA0)kRPThH~7f3YjU=XhCAoHC7H$Gq@5pp7Crnm928uWP&$&Js^K3sHVotl$1Hg~s^ZpeIUo!iGVScc<2C;9C%NZrF71zgi z!%K8t8S5>v>XT^!?~P;;`*EhPKShfiJSB;AQM{fClam4=#%l^@>X!`z-)w-T!iIPAvXao?D009u_ zM218W4H-j{-~jAg*);iQuX@ucB>w!( zuba&5?CcAT1R&Mzw9jRm+0%vF6lV)L|J%#C+n4q$QLr<6HV|Af3{%!cBILnOH)ZC* zNE<2Ct~c1NJ3$mAao9E?8vppNI8m#=xW^qvEZ$KFx%;y*nEZ}KHecVI*~%+tHs917 zy8E+Xa4~(zwIfDN@O8O=Ii^N(Vge!*yXXsVb*jp9ZZcy=pSDsW(YM`eHtr~Rxe^s7eg>cHVwXt}c-alduLv6RaBWy~%K~*w z0k&|y81glwRUgVjsdX=y729bAiZM#aIn258ru^t6f;|r0rUicY#KiURwR)BtDN+wC z1yxIZSZ-`4lPsrSOy%@V1p2bj4tgE383WcH;I3y4ZgHjymCDbI{G`)zbxs1G0RzUH zy@ryhW=)(#wOrh_7?CfNo!X}~3kQu@M9Ltp~JG z?XA3Q!zW{CjSmo!%cVP~1ipg81W_NVGl?0Bou_X~c(rrXOw}fL!JT?Lo7#IU+ZYv* z%OP(DorJrxouvA6yW}*6yle`S2a5Qzm_M8~=VU!hX=Hhr&|fCW_gUaYob#pozpf(= zt`PyRzSa2^ED1}eeqq>m6SWp%<_Gq<%lC_R(i@@}5%Fy+VmIFy5k`wBc7)$+jnT_XY6nE|>`)A!PEz)aHIC z>PAC~#JJD=Wz)LxY&&^w&|+rOqp^0py%GddZOi@qWuz>K z0Obt}Rga61T7%-%HUy~w#B2^U{xK4e1k1FJjO-piL7&KPP( zJ~;TN0_|%w#16jox5}0;Eb(%nmSvD`8ktS23PMR=A*-0z&u30u8zFG2Y(rOsS@Q3# zK(ooI7i~#0i9mHRCx~=M!>llhj|1B>W55Gsp}^A>am|0N_Mj~ZvUByQDG!@YeSX-x zS1klE3lX<}vF3PKwNUFLSgpxt6QDSSk>f#d8K`tfsDKD{C?PkEPSoyn?GNXaBW^d5 zQm7r5{pDD!53XEW85W44h(Hd*6&`p|k7BLkA6N={L=k-)LH)I46V8mZ&qAN$kEp#X zLS`128TzjiO4t&kuN-SQ9Bwnm7{%5cR9!&_RwUDxh34I2?n%6`c(^5sJ(4rt8^%pB z9GY&4YG}Wp6E=(v0`bAT&_ogXeE1Oh?SBRd)Fa5OLB*_SXngzi6@AYZEIiQkC?=yP zs;^b1AhEx7TSUwJXJ~cMb+25qGnI{VJa2UJigNd0XLkcPrzjJ6iBI-=|A)P!nFJd3 z%BEUdqy;PboUFD?MMT622I?FN>YM{rF*5u7=I-Q7xr^5cUPeKUl zUG6yt_=IOkUC5@D#Ae`9ZCk=ew8z)CZNCsrzkhW8F`Ae84?ZKPrBMIsLKXfG9tVO> zpV_zndr(kO^4~Y@41Ku4J0}r=d(4LA%Pd1w_nB>c83_*N*aoi^*-F0Pl4@_Z;11jx zK~E2Rj4Q2qQy6p-52%APsweAuxW8N9dfIZju<`qNx(Dsy`HT{Se-KGb&J#Ej=6B5h zk!r6u2+EUmB_RfqF2ff~$`gO3(#s5SAkdOv+QZ9h&jZ|(|bj4X`|kDp-sM$b?s1hX4XfKhb{?FQml$wV(AbKWF0D= ztZzj$KXajGuxdXer_T$|1)pOJ5(S>Cs29pfOQm8Oik9?ZLP!-)u%9;RT-ZdG0fb41 zrmN~NSQYXZ$&`A&0E=wrNscT`3eZ72o#ca@LndJw8%tiWUm5hnif8R4nm61rGV`P~95YFLzs-C{tfOTA|Q7ouWDoAo4$e;vPecX zuQ1?=ZkK^%a_Y}=!J^a9ZPn8OZq8fi_?j@rPCJ8kS(&zI${fbBR}v)#X+mXQgF#H+yd&5`c-sBk z@XF@+g*YBjH!#WijREJ`{^^^sk^gMS_}*JvJ88SKl2Eb~g^-!e zZ6hJg4t|SgEGlB1h8R-HkdO39i=1>j_Ll1pm5QhOvvem+-6WYI@$~gcQPJ#j5`9ev z6qV1y?DEHohpDNV^-rINQ#gNA6&3B?RH_R?egIqu;`)#$61)l^uN0}CFeTwT+rUlo z_vVC0vTz%q%0_Jz!~+2M;|BRX>1Z|E;y^0K1e0~j`8QABRrgA5+mh>uxvHf~TtTv> zZx$X<+y>8`>cHYR{%Xexn>ewxW}7}*jm`z6nujsgk{?zaa(zsWjW%3t(ER@Ea%(r^ zWc;?Y->y>77fzse_gj&N2SsrpNe#azE*;#pN960wFb7qiPkvd@NKIzq?K{ZcQ<~+a zYZlJ5o^^B=1<4U@p*r9=Q<-&&s2-EYDE>3P*R#CqO5Eah6>L2sv_x9F?i>bLU0k^O zxF;3T@15s(`Sa98$DBDpvixuvkNrF)OiJh-8PrLHU;4WkmswQaWzxlFW9#*f?~DMkAj z7vP_Gf7-{mmtwO#w}B4V93$v~z>vieafVZ_mROj@sYvLKc7u)4y}=#O_rDVm04+4d zC50Ff)W79X!i^)aA>;Izcz=29@Yin^XGcFFBf5b{MAt!4LWeGi=~K9u@Ar+RKn78f z$&rEu2$iqki6DU4@)Je1^E-QqkPwA6+P}c>0uGiio*6stkis8m%4-#AN~Id8%bbS` zXPIN=JrkrtGXrc1r7YuJb9T9^x+J><>iNrZrjnEF-H2t1v2^8$I_^NqeEp_6gycmY z;{9V}Hn#iIg$Kp)&HNS zlPWbGJ7jSbUZWx125T7@LWNb}m#?p1IRdUMmgYIYgk(U792WRgRyl$++BchAmk?jU z3)Pb2o)!LxH_}VOA|3p|SN$`2VcO8loFhbwhL=4?T}Ce_l9CD4f!|_ zHJa+nZ2<=ev9&(0s?+K@_k+(zM-lIm>me5vRLuw%7+n+V4R$sAWK4 zx{9JTOd93}WE)Y~g1-eZ`Mso?q72XZt4kMxcmYhrLcdgs_>cVql1TW2%8MEoGumx1y6 zjh-rd?d{z>LKnGx6<0DMhI&B!v2B(xX=6b0!A?1(Cvm^~^P5THw|dDv9wwcY!XWE@ zZMI=D@dEFjw%<<0n?ldF*kyj6%f4`RMIg;8VYE~=u*LutN(;5{0~jd zEoE%g&pqox^@JN>t3)=6)F`XANF)mLi)5nlO5h-+!RA&~bURorwyw+>aC7gpd>jRP z8O-nQUn-bSKX>l!wPl#B$fl$Pj@w^uI88luU#{~$Siip?weWu#Hy{r;SV!*bK-!cx zgrYV>7_daLq6lB`M8aN9y7EN|dKBRBrU241Rz?`;^fm{>^w}qBrI)L>F3igqc^%M! zYMDsT{t%l}gX_pYrNs++8A7191e($_7$++&R32FsYs`6Mr?|}JN-lXUOxihkbrr2? z>e!$#^)uBPUpNBu5=^h6)qFy=OkBjt$J!D!NL`azrW>qqYJbkB1JIkJ+uJI9cC4Qe zF!xdWwigqs*)lS5F7Ff^G3GP5AgX%emJhgU%Geb3E}1ETGr2b<(ZZhrbc)I}HK?P> zy&#DDFNwR680)i^K+6^yC5M8krM-~Ir6ffrpCkUIni_fi#z7mPWYOLC4dvT*%lVrO z?%0u^aTXbx&Bc-5cV1Bas7?#UlAEF8cM^n@#kFTh6Iut|obP^ir=K4%3aEPKCx4O(WB0DDqH ze|~pYr+$j(Xe!~pD&iHOxT?WPBYfWi)1?UvqUO+j)A$w@pYi)NG7Fw~e7cD-0%UF} z=%$~Es_>?9@;I|6aQ)w8Dk$h?(ohzMTf#)UiNO$e+;>E^U45bY%bW+HU5IMk2G%kP zyC_4isj5oHwYxj+`pxBx;Sru-XL5K3TWiI;-In*8W5?JKYoTJ;Zd~dW&)bJ%*JWl` zd;t5|@s6(%?&ROfzWqPH_cBILEFY6LxZ>XdSmvF8I8Ex%g z*u6MAge}Of6GeslFQHCZt=@VjcCNzM!qX=Nf}BHv<12o`RDIitPv!|vx1Bc#iM)Ss zKD9tEuDt(mO`NYHOtIjph0ZERFL8aG?N*)34sj0f8qnf$S$G~0c5TCvwk`vu?Xx>Q z=iA@aRR?%Do^gVE;4*P+uRq}`%$1i$Q48UgNw?S|>bEe(9;u~Jg9@(GwVtCkgiT?*wNBMs?WHhPU{0+N&Ke6k?6?*tfl`4!>kw=h1lTZdr zMBaBP7*$=%x9xGHYKJpZ_J$RP^N(xDWAs|r;)NfR90mBV;xR|IY-3~^N+3y?_nW*A znMa&<595cIAHIIj+YoqTVMZD}7gFEj8N+Jmh@!lh)ExAB(*e+=gdPNwivvc&JQtFW zn!W6RJ{Mby^6tK>c2lgiiZQ@%zCQgKmeXd-W$yCLZNyeTz)Yv9xody{pCVPpg7p9k zHP_T^vn5vJF&F*XitJqd(@DVfKBH(|pKSZY35(OGLY7jgu1n{Z+Y%%FjjQ&$Y2@dt5c8 zY;BBd>S=(z^E#f2rdsH03&Xz^YyIaPlCpxD)xyc4Fn~I?^9Lw(R3>SQaef0eez` zO!xwWHpm$jpovGZWDCs8NQ>zrZBuHy}G1+KTldmPoBBmmy?J&%_Pv zu>Xiv9b(wbmkQ*gxaFjH$XbIP5rgOK76)<~qZ)&awg9Bf@Rk5=%p|KP zaN@*9m5BR9!eodX)-kwc(1J`pf$j{VTj&nYDo}GDr~resMYrQU!eB&C&;zfi`@P1O zm_>xD8I@;*-|DL&4&mALaX?)nB+rnsJHE~N-VXPzCqTGTR}Ips@!Cp~+x^!ppJN8O zxfsvB1Fd3qF)JFEuxWg#k6lKw5T3h|zG4;^?dB1-@NIJbTZ^Ps@gQTH`}# zC`&XW$9SzcTva=GI3FB1%CcE>-|8|-YUbnmTnkwbEQ)xlVkIk1evy+DoE>}C?k>up z{qTu_1!QTwEvd7%RaiP|Ip@I9D>}nE6V>7)##~8C6){7`aR=x<1}1iHlhCyPl59Ny zFKI;zjgnw$Jx@rANq_x<9>m#>?Oj(Op$P9mhM~d9%`~Bd?lB_kDMG@F(Q1KnGV0cU zWd2UenGP++7rH;WGr4vd4UIC%Jca!Dy1qS}@1dA-Rn&lXjaNn7h}|!Yb+lV@DD3_9 z$?tC%H5=0QO#g{dLErvLgrWX7G3x)@(G{H}ZMQ0bF!V7trk^PwnLaE2EFl3(GB91t z%R+%9RE7e+Dva#0uBQ?G`Om0!s4X--&rl4x}s|qR*N=rA^Z1AVY@8zE# zuaD5VKr>1bMTPiYH7pCBq_O6}{0O)tmHK4V-xSLx5<2!31lC(V1-ZQl{7FPXuEuM< zHk#|V!9(_4E`#)~c#p+JEl(Z>`%P1Er5Vj9_ze4z%)C-M!0&S>ut1ry#(^>YWn|mX z2b$S^&6r{;^|kE$q#!DeYcVLb!l8;BvT9B+Sg%%$GceKy`6A+ovm*) zbBxN}+Fu}z?R4Ue3XY!W*u75&OEFy{yuf94=aI?n;jVj=vcA9T8H;v{;_@`Yja|!l zO{2Y+&8g>FmF5=<4%7nycvh_eoxrtWWqQ+)*()%w*`05Fi$don6!g0Jfh7QHW{3a- zrvP(+RRFK^^WoWy2ur7*HgJRUmeq`|K$O#iiXE_{h`2x{T*Tp(cy#eLOUlB^C7FW^ zXUazXBC8Zt4X9@+Uy@iA4we(3z4V5l_7mMF<`s=AU=`#G>mGm^Nlyx|jbN2bNGz&FSeT9=$S%xUz-VIUGJhJ26)mp1qAr!c8>%+}R=r1Eco}Z^^b9W`wbt z`y4!Y1s`QGuCH{53J*!^Xk~BT8VZVc1~*x~&0DFxgM3 zu=Dez{@}){;O#4cd77isk0U)PX9FE6eVdX&k3LmeXOy;(S9`)yaKZ4rvw&; zMMzaKK`{fW`0PFOW}AW~k;x<#yOSrwS|Eqm#fGN#-J4O&38_|H+dFu@?%k^Y7Q_Dz zqK_o6Btb|XTE{YraXDxsQ#xE?aVeMHuk6@bv6~(70$62p18}48!Sm)A=XM-QD_n+Hqy24-`~4(}mvBV~btjApKAbHL zH=54Ea;3VRr}Cw+aJY{fa3FCY6d47;ggfXRRkBh$y2owgZKn_ir{TF$@sjer)?~mFevFB5 zN|Aq}BV`ZVxQwP3t|ouyE0FbWI|^uPj>Y6&x*HF)Vo*V-=I@0^1&51OOwwFp)$V23 zD4kr5F?iLR?Nd1J$NRH0(}y%Q`jW!Aq66Ty`NbTS*-N47uayD?VnmfwQd=JnhqmF` zDh02fjyIN8J?8j@McGCof0{nXw|xh+QBw%ukpALm)S=&Yt<&#_kKiYr&oMchMk3n( zz#w5ITRjs>m|5~9l(A1V0j(hjB6US`KFmw{@U4!0$bL)HeiS-$wqGaZU71A2RUBE% z($FRREf}m%odQ3e$96|N68tR~ylbL2jE}mb@kc!I(3UW7%m#P#-ZS&4FiQ2=Py3`r zAAY-SQ={$>YvI*M#R!q?usP3!(P>fDtq%$Y2htzU;C};f^s*5Avd_|B{>zO@|B0UV zuch%18NEvVpW~+_S`J9*9E4p+vjQgAR8nJAj1Y-r^Zk-idl;+sKcZ>1U5qJ*nWlgC z*zJ5Z%?)8n!o<@DisQL&2SEBl^=U|=rBJ&uIh`<4X^?ccnhk z0SlA66-Y%Zk&&z*k{vZk8x=4DV^gst5vUL9xFrwOVQpZB$Q?a(Wl!dj$F3F_aguPzr zG=wk}z;Lq36t>n|z0jO7NS%ib8{K6aMVNwv@%ZKFCVXLczL3O$(StYT>$oin*Q}b;!Mz(6S{7mu)6AL{n=Ek8(i*}W9nN9cXrYmj z&&eacLHSxPMCmd4PQGKEU(B>y1T(dTLv~Gc=W>xsE==!^QZh8sM zAwVXirQf5DK8SOkDXq6LY6FmBpJH31Set!`s~h1)!@8N_XvpMOro!~5)0XdE#U1){fzlf z(4JVrXfP8_X(fLW8&^v_qD)Es;A!+8zZq>!D}%tY$jwCc%S({q5oA4L4oR|IYVCo^ zecc>=@a4+qMn0`4yivZ35Q3!Zp-s$;AsM{gGW>mppoG-hPmiZE$PSe&Cr$#=E|EtWVkq#XF3B;Bo(%vJC~_o zL0;(!Ck2Zr2p9BOeFZ-pDvBLCbTDOjOX34qH$wR5mxkDOltp17ybvfC%F57bUUVhD zY_+32@c9xvOK^mTTX49 z#ZKU!U(G4@VsE~ZnOg7(-WavUU`oE~Ee}c-mWp;x{heWAnL8vh{_WoWOXDo(zj=3m zcEkUv{*y5N^TN(j`TK?a-W=Tzl%NIy*;JrvK1fj8&nM7DXj&!G><=KHtDS?G3zk%Z z@QdJiI*f$p3VOiwc@XE!ru_soUxP_xt6kbdB~V2nBhl;kJllo&fi_eU7b8EdRxHF+=GOhj~F4BS3HUl3*g$WNOqws~d- z?1d9QlBZ%6YM3Q6i#Qce991L}xuO5b7v(cf46N2@*O|>mS)%x+Ar50YviMdm9X5nC zGC-;*n5v!$rwc1^fMI>Nwo>+7Tx8;NaoW8nmv{!?qy{fJ#d__gbTnTh<|5)LEp}=) z;LNs2y;-N{uAsWuu8vUVsLIENMkSxAHbiq`!Yg$TtBeqLry(vOiuFK6cL>kB#DDHo zF2y?Fj8tzupR&R7-eAYo8bGEQb}!$>grTa|4@f_O8tOyfPUB(~G`ax%5EeJ%u)Sz= zJI9;su2t?pCz+VmJd&{wJ&&fuj0CI_c9nu!ewgEODn*j5O;lAGqjncS_lCA$UgfJ_Qmy?Kv&@OlE5^c2xddT5_^aCZl=GP&}MHrX8s1w5z3B0 z`jQ}I3%{pBDU^NMpS?D8DVAdgs#Ep`z1{hgImRyU4XZ6vJ?qgR2M{Aerc*0>mx_K&lk_%OI7l@`UBB+CpkL$InY&bJyNBf#0ffy?ZJA zW1-!o8(0+Qr?yW1mjr_SKdH}uu!dxnzx!2uFVs%BU_eoJ!B7oO+2WWKy}wEV0*nJr zAnn6_JE+>Sm-7uG2S(EaVYqBDbY9h|yQ$LT(m$?V8 zx>!_Sgt8F10S%ZPP)ar^hkUF@EQ{-~6fb4Ab|p6ttzJ&zdfM^Bq%$W!Jp^8Q3X;5; z%9g(APYnvwtkg0Z5=RPR7r2YCl3(cOc5Ty-Z!@ zmU`k(=wW$7rg;`G6cfAK`ATv^GLlg2g<{kQr!KiBMAf`M>QthC@T6Qgx)t}11zI!X z{=;yY|)_d8!X@2VVm}6EGO=D61^`N>ceyE31fzDKa=+^z_Ima{a4V1FB`-gYw-pJEt(uOsO-y8teCE>MSakP2-J4knjXjYDSVf0%hBA6`#O>7Xqhi-#~H{fh}am*fZ z%=+Lsl_5EdgK<8gKSLKb)Sd?j#e(;^In)pz<+)Z8x5}@8_(1Iy=DY(zp1>;H)8kHF zzV}O0rHidnZ~uK9-n8AGzu~h?RQ?kD|6O6_U&-13UMBx#!&096j^ayK*k6oDRZr1f zlhTx=W4VN`LbWQYP`lku(D8fR7m8GQw-`FHFy@uiMGRLFGRxuZcdX-mn?)(yLD2GK zcwtGH(x zk8GgG3pugz40@54Us-{XJT9G`?eNT1e<2F)tIwi?jNK@k_tu^2dO_j-oZ%`o<(A zaog_Vjp|a>s%iFG`k8&5O#{-toBpc|tZDI|&V4$~7*rXUr1~tuXc}f*kCK=SNx`q|$3Tt?#;r4FG6*%aRX}0?W`pO-mdt^*I;O`q z)@CO#fGPLF7gNI0{%E4;=$BR#M+YdJs|U8pUwMI$mvIhkP`T)6PaTSF3G8p?QKzm2 zE(<-NCE1XGHO~-VL7Y-+y6my|v3dx3L=@gcMfuCo5N(TR?xlxI0ttsmxrui(cBovi zH0Et^5ZpKW&*QNUL}7~;fn}_WD`=ejkC1_4?zV?yIQF!+F- z3xHYYS0C}GN0Oz)LWPCl27djFi`AxMt8ol+`BF}op;us4u2DZ(d97^2PRV$T}K52d2vOM zJW;2_PzP^G^uvVuGs3V<;^Gb?!E-w?`nWmrF&r|WJMhF%tFNNvP{~ovKw-bTF31$Z zzx1KdmbdRWZJ*G)rV24+6q#cqEI6`-8kNr1XiLx4Wq^vN8_d$#0H8&Ou~lEm^NTuWrt7ct+Q+(%p>~CpHs* zlp}H52kmXsa|%$~nBp2QZ&YsKUU|{dwCd2h^qxXkscGAuXM6NoMEUJhch8XpX-5cH zzntQTRUJ_>`~^g|u= z&aanQH5_vwU${#9&xjA3s1%gRAvB@hmz4Snvg2-@!gZgiVi7gn>fSP zFltkfE%6P9?v{SAD_;#p;)q9>ABBIQ@0Z#{3-$pFsz<{V%ha{!@24~|oM(MrXUH=+ zVSE^b)W;sbMF?ENfN1ENd2G?RzA6>otwcY;Cp_k8pH}3XNCHXAPs%sMv2zv(mUU)v z_rNU*yuiWw6>Ag$@h>i1-k8SEqR_htOGKVU7bi4@m5KPGr8)dPyc&`Z0EiV+5Yi69 zmf;R*SnnZE2`1A|i`cKqt3anrqf_vH2V1?`{`Cnv8S%P4Z zieV4nO8jE)xgoJ1C4_c=L_MaN;|1?PFe|d5KO*pIT z{iVe4t%3SM(Q`uhf2uuEjR7APAMZRmu_Ok>mO8nn-4+b3p?z2C<(i_8^p z%XYsa^=VdpO;#ZvqXBA16q$_`_AoW%XRg9H?YP2Nf=?Y4UC6UUQLe@i=o+IGRfgh- z&=qH{R$6&#)x)3E38my@si{VjFDyQDGr_%5A>eCKPTd>Wq_SKcH^nS2IqmSc|L$bml(U&w^(n#th!15^RYR4*1ixA!ZMc`7Ckl2Y{=+p^Hm1x+xHkiu^S;Bk9wgW01AsX)-t3YLc*%nmdRqYk+yw&Vg?uP5HdBp_? z-UnltnL7mLsrXCkkyT5|A?GJkGFv28LtcvJSe0dZ^X9IbCNtWk(N|QEN_SMtL0q75 z19rAcxa=*%AATdmk2GmRa#G*wW7a(xVQS&Ez_GLQE@%0c+-x9fI#W?mH9p5!d6WQO3K}Q6myC42QJ2S zJEJuKL83_kg89A2lUb1QlELe;{=#k($d-7Nr~U1MdBPkuADM_Ubn_dz2CA1_Ig{71 z4jCcL>9T@z$P{q_GPLEHeGOi|(oZ8iVzL-6iEAH)=YXrXJ=_{KnCc8gfu%f}OvU6+ z_f&kuc$B#8y5Cz+sA8Pn6mz>S;hx zZS04`Iw*-yzmEZQ7`F@$)7SkGed@DKOVZ03YyUI0{Q4f!=M~xwMe63Fy7UA-?X8oz z?ztGB;+<8;D*WvGK9A+|^?QShh18g2+_P?+C$p6B-a$mwl9_HrZG#T@59Ep1ap{?hAy5HgF*v#jcaMU*9IRK`ck|_dqput~?62t8h znd3(J+>GoTXUGKlUA3HBQ?fpCteo*Fou8~CH)dYp|d2nu$Zg&o7Mm#3}3`~6W2qwHd z9D;tj7DDC^Rv~|4;wRZIAQ=8ax~+svv19acs%qO2dDJ1rHB{3nMxyWa%ViIG%g=(? z+VEHzkJ%tAUh?hyP`|`R;FpmC8Q!-3EdHKYg|=&IWd7(Wk1IC*F&TkFA^04}-CMe6 zaDlGj)2{wl#@k)m*QYXEgWF$PyoZBJ&u@sFT_f<_GT<~uU1gkrs1IfvWb{!2qv74Vzz-DDj?2r1e_$Uy3=?k36c=Zg0rm=eQ%+i zCsf}FFQGBCda*HiYy(~7fEEh(RROYsL^`BmvlZ4EI8mW@4h6L_8f~kK&2CLLNmslp z`Q)}_;UH3L$KphzJ`^pog9mef zp=aDX&{YNR@%d07PN=!no@m2alVXBB zm13cw+#&HP%0or@jCrdmD=`{tY78uUNV6LUn~4%T8H2H1wdsOL0#eoUIGK6nYses~ zRKHer=-jIHU`S<)1}xd|VtCQ#|YWO2?C~k4+Kc z)s>h*>|!EGZ2M)kw;WcKQWFwk#-);<9NC4 z8)e;nO{)xXqY{_p>O2|T;+)@r6^jHyY7!%)+S#C;>k^lq+%gZIMTaxJse238qU_H> zk(VKqCF#m-*AQqd6KpGRhMmDvH8D-6PqUq-wL>Q@2dpryJ9b7IV_p;&;y4aV5~_^$ zoXG_@@L$-eY0YV5sub?ylHSigRDazP1}irhoEa6=5`D!D%2>dTWvgmu!L6eVwQ)rn zd)`$jO<1Ut4TzIZT<;fwt{C=eyAx$AsX}y=$oksc30c8V0KqBs6dy&n3rWLnIYMf} zUX@S_)G@Ug-~cXddjWZ#uF>&Qu2g^meN*JG!h?*Cd>=emrY-#d-1sjI)gOtQ_HaXJ z@nHnf<-Vt+7!F9bV_n~IwgaPlZOZ7R?r=tN;h=Y4Gb{|^u5pVzU^quS_-D4Uaw2aWr^2uA!wLYO(9ndCWS}J=cTildz$YrJf3+1h%Kp{*dfeKV?R- zdqhWd?-H_gzM+i$q2ASBr`+YhOF@cO(_2IV6kE6)j*atxrD7*}xNtk0Wd#hTV(R?{=d1qtyDVUYD}wy~g7=hD zRIN?mKBU5l3>td=SCu^9q*xe__@;5ZAD6Q;F(=QQS-}@+{#i?SL?ntGJj_TP5hKnf zUA^zb=N>o@8>EjyVAk-Zi^q=#cy7<;r?&g4BFCo%@Vm>E@iy&t^94}3KQ^Pp^$gLw zj9>TCch_Gd6U4Zh(!88CH!>IT7EfjhK>@(MTPj~us~qYZ-Eh%)2SQS|SkNzy`!-jw ziOmkL^jyV)Pm@#PKsEn^5{rlv*ia)W`DrB$w7aCvyr)mT$AG0d26o|2fhzR9vg?8$ zzL8#N%*hWUyxAt?B!|#eM{9n-h#EXvqWq+GY_)z32r}zlBZjw!OLJA{w;zt|RYJ5Q zYY5NWvc>Mu+?E|V;t+QX`R=8cc%O6q0b7)0 zRXyS^V1vVZv)LTYBRSS}p7+yXI1GF%FWL@r(7atk#5tiVKdINMA}vHmYA7?cQ#vo$ zV0At$s)vIvW+tPM#6o6l7>?XJS;v3_V))X*zS zG}l?-?o+bf>jrcz914WO7PFqs7e4LQo_i?wCTFdgPL;Y5Y)BUP-Ap$W&twAI84Y(9 zozw1AL5=Lx`mMIsc5Afm5gJmJa!n~#*4LiQz+lNH^maJYX>JM##2`qfX_O}55mZpv zfMH~^=rh2jNR&6Z$4+#PB*)5~)7Y(lmn}b2JMfR&8{z9;3+*Nru9j}<_MVVhom-P9 z-t>`w;HlP5ctdYuOu1SJCtv377cWP|zQjh5*i z3Lz?JQHLAmUDg&#qc|ibYX{ob)acNk!E!t>6`A*5$_M7gK?)Ef{=rI^;Z(9anX4DyIWK(5?49ik%7Tx}l??tQ6_)z2uP+mw#q7 z8gzVm!)7k%;|xx}KXgnFKu?nv&=(W1`ix+-=qR~Eih^H^H)5hCXB6nc6Syu^?{1v$ zfsr_1qDir7mK!#b7Svwyg}EE^VMQ~rxv&vN<+QR1%ln$+#omX0)3)%E@4?q3x>3Py zvzT~%vI5<`_$-0PI(7Xa@O!l;{57D`Vs7kwZP2l0^f0T5k*%+Up6^TW*c#!0Znve| zrn!HsJB+KymDytGZ{kSgY4%g0aWukSpKH<4KlIHo6Zu>ALp-yqf1DDvEz!yME3q0W z#4s!C*wEsmVJ;Tgy>ZpCyWfa{xJ8g*RuHx-u1ew*mIYZ47i^Dc6-m& zcwB+dbbAx(11Ua#UWn<25pC5CMnEZaUkN(r?3C-snN@y9L!WD(a+ZK4jzRQkYIc2v zi5yEs*p3)tdW?#vA9-zyl}(2})$1>2uBTqr zpv-}%va?T3Ry4~0UonOR?0@!1K2`+#@&0MN{7-$UEdOdflU4K-(1kGg=Ipdq85-3q zw}_O#6D~KN1i=PlgNN6Chn3qZ9#h0>Vx91dyECxNXMXvGd?f+Ar28>b7x+@c<38Ex ze9`KB`TFv z9Qux$(*gz|xynNw(!G04gc4jqN#>k%2us=UNXqB}?E_HNkN+ur>C zuQbDfd^>Eu7YtvmJ(!8ad(Z>U$O5iG&&gKY3*M0CU9pN_Q6OX;z3p5nxSfbV588!d zk~vC4k>$ivcYv*r1b2u+gWS8=OcZsFUT`#ZgDdu<@hb1A=?{n8GbcKU-vqKg$gtiR zV_ve5dYTHgfNGh3c;VD*Jh3|IU?B55uUYl>i0;GR1gj!6juPjGP;&8?ljVQAtp1=k$%5j`QxQKAA_=INvlpmyC|CAQ}94wj8H2!TEH*1gO8jC6-X{~ zPAhkXcsJxuyZ(jBlknA<5H16VI)Sv1XK>&YKE z>Ed@%Oaa^bVf&_V{dPMZG3xcH7OHpT(FFSwMRI)EQ%HII6;nz$L4x&k$*w*=8jF~Z z5UH{s2?hJo`_0ZO;*pOq1|rKK_V&vcfmRs$(z zt1*;nz7kK~@)P|ma1;puPE?6rQ8-!(f?x50loaaMNl>=)`b>pT)Xd{qeIq|vLD4hH zbJV~2D6avtr7`4JKWuH?0;pZ9{e#Rw4(bZ7b;vZjJ4K02(*Bun7KmvKo=m0_pYn9x zfnw+98nX|~6*;5V>(5!gL+j1c_}j(DXZ5~L6Z(MVsY)wg2qp|hUW}o1QtOh~XEZD| zASL2WG2#X8W5=S5`inimr}wtVZUJmX??|iS?5wf{t9EckPKW3cr!@vK>`=Z#RVjAJ zCr=W7!zU3YX}Ch1Vd6(N^tUomaB*|5ZFEZz|D7L;Cu(%(`thTS{bMS_f5VUd?>G5}+Lk?< z5Xv7cDvim+*)mn@%7uJkp{ifiG|Q?|nE)X|>6c$?$yIkJwM*;x(Z08>$baZFzRLM9 z@&A?pS|CTz6O@4UUaXIwao$c$A`1BVy+M5sa6(WrRihd%Rdm!5(kG9uGL#Y$>cIz< zG@GDG*P<+8$nSTRquHl6VeRHL>3-*F)MP%bE zq|zy_xpcqtc}lY)az!6a!blmzaT7i;3j~@uOThRa_4!@%FuRiS9# zBrUm2SyvspCU+c2A#H2#!0tPAj-9G8hT2^4kVpVdr?wpgk>ES=l*vNCTg2N??RQeT zi{q~wX|P7nlMK@K+P^?N=Po=)6@=l=EHnN^fbp1f5X62!VEZ2-pz|LRVE^#e|F56^ zr=g@#P3NNk0QlzC9_pq+nHp5a3%0El->Kk8K!V2FcY)f3J{c*sbmGBsHavliE?D~^~5n~HF?ZgsfOqrs7Vb=j+8oTZCCx+Tr(7P z4cdMqazc1vn!&#>@g(phBF6rc2=aa^CjbQIqhuw-3I(XQ zTca#cly6nS7oiopB^Sr#Ls z*1}an&+C*L8AzVuJf;%R34Sj2Qsz-oZUZVUuP4SII5vb7PLG-e3Z{rkNT&TM02K5& zWOa}TgC#JG=LBFL$fMBseC+WtIeyDw&Imi=)Fn00;GfYQLagI#kJC{+q=ij~!Mx_^ zEUh)&2IQ%T0{HcIUL6BjSNhUzoaIYN;>c~<`rZOP=CkM=>rF&?h$piEebfyO3O{qP z!OgwF&D+5@g$mCne%Tp1w@7dZr_TE##B+-HMO?7(6){xR8+6znUgOc$_7nb%5=)(x z><^S&{Ub`W{_mjV-&C^tznz5u+H6P)n6B%57DpRNU{`xMk+3lUt-e*X+qEDjp(@)} zV$a|hnoP*#_3ST8VM>p9dO|DtDIXu>)JH>KT>N(b`wBXMOS`jC6sytGNWgrKw~8qm%>J~lG zu#ejW!{loP--;J1p;}$eam&) zIkjhDl6`~V;X6F16_1{kU=*-&4K`-pZ2wd_-*p#rmM752rX?YzEit@+K%w&6aAd_d zI05?Td52rS$T}Er#ygCbOh%WYro2V|R5Q^W%_l%56paYlPr-iUV-M9Hrdy^6Y5I37 z zVjg#Q+%XZxueV$*WwfYwX*{_QBQp3&3O<;YILJ@>lqAQ9s<)fFW9y3+1r^0N=oYD$ zn&Lly_h49maJc3_pjGsbZVrwA8_@a}uqsn@{tC_+dfzqW3-1JAqd`c)^*Ev%B%~GY ztK&L5CZ-I+{$M_cSxy_E)4t5#a3v$-7wi@m5Hj#6?WeB{J~C0#x&MKE->1q~Z_R^b zvrc3(QeW>pnRUy<>O47l>hJFXYlzegRSPcxjXF@v6tnwzXawaY9-jCcuLLnd%v?Sf zI!ShYJ{Pt)YOW)lgU=+2%Y~)e4$P1zD8B9o;6ZP$tlS+7VQ5y>yETtTThH?+Q7$LK z0?oF zXq&)R*}6-YQ3Je09^fY%xl6ImCyV>aHI9yE$dh_Yo2$*xM*IkWJTUCm#12K z?T!sor$2LHm|f=?8b(>e8SaCwG_-q!`FQB}N0Yf;rVioiyYBR2qY3T(Kv9zol?mZJ zYL(_x@_i&b#!IYq=-$R-&}Bv2R2f3v99eW58jHylRe;8`kjCGpl&NilM5Vn*eApd_ zHN}e#YnM1v145o-pZmbNVV_;JMKK!Y+gjzfKQCc+6356_h_oMt6r@9y#yrE_ zR5k)HH1Fh?`wAGw8cHpuD18nOeOEFw^@eR3F%`jS8>~1g%Gyf8Rj@1xe`ql)4ceV0 zEA_GrMMS|rMX(%pQpy|0fU$sT6xgu2y3ChP`{+$D&48(*Dm`XE4Tt32j3}Tii>}Y5 zF5VLGrqc##2oWS~Z-~bUth-E;x|3?LPQRaE6g7t44?+@oeQyM`td`~fPAol7*q$rw z?hiGQt6exV?z_SeoxNPG`<>*?zM!Q{-59Ek)J$>pX@r)9&(f+~pDnT{Nnz%Sk<`~T znD|`7v$V6bESSG1TqGyl|e1gXT<&`~iiYH`OmLE7rXCN4q6*Mr1_^##B zG1CHBFP-QOoZ$^l>jiOl_L5=l%ZONKn(!!jSo86YB&i62j!Vv>i;j!~ixOLg>Q;QP z57EAoT!+v-!gewc*%rd-Q?>)Mhu5{gUxTrr@30Cpcd?&75hLu%^ncsg1pbJIncld; zNVp^DA<>hBUS~Rf{JUnO;@~{Ze@MFp{}{gY-!R;<{+q>6`&i6TMEN7HgEI?7rHG;k zmS@Z;P30k^gIb~*PlD`n;;d~9n@EvOX7*8_5l(&u?bZv7Ix67O(4#u8%1+t2O(2%PyD`%-?pCigY zwHk<@iauN3!Z(NE{5k!)1*9eA=PURj|n_M;-vw9rr;qq9&G z$KO2!EQb>Uz~TKlwo;K{Hyc2C@0_LI$>?!P!Yg)A zNgJ>u@W$Ao`^l)PSxEeViW%h7DapMfC&&x1g?bhMD}h)QYVT`2ndw-vISh;@wu%pOs49h4gA6fD z`em{x4R+IrxL1hN!MhPkbwg8y!Jwbpd-EP(G57n759vM}Vq4MuVzf^}!YF!PH57&#ed7C{_hfYm(0 z*k_Ivl}AC5GE439hp)D|W#JiRYNyn;=(a@Et3k!QvHl_0`X1XM*qa`6Lyy_%Z*Fex zSQPv5k?HoEmv5Vok2&4GPiqpFUC`f=o4!M@z{sWfYn&!hV@2Fcm*QVdvPr2cp2v6yfcmLfX44qyVBZso&tdjw6j8E4xklk=3!G}**)#*35e!AOz_BSW=koM3slcQ}8@p=0DL+pO9>ODMgRWi%G z@e9hWD#td;xhtuo7Q0?{4ROOmiQ3}dyr`0A>-%8oQ|Fw~GRi!|4^=s`>F|#M;Xe{P z>yPhjgfD-Xv1I3KkmL>Bbc$7h!Mg5VuOy`~n!3XBF~lIq;}N8#o#6uV>+e0mNNMxp z~&=UG}~MoGzBF3)p-XT*|xQI^JaTR+LITb0~;UgGCgI~H|@htPeJ+}u)B zmI1hC%c|%K#ZYoebh0y%NOq2<_=+{6G>EEb7tUB3Rf}vrccx0w{`xW)nlfL>1^YPx z3In$yXfdH1pP!l_rrD``IJ0tQR(!9M_|+xlPgh`VxrLI7;$38AWUW@d`0I!o_%Y<@ zklSHp=}MfF5gJ0Lh8qlHs6|yNxiMQt%8$2P>ru}wWyGJ&aVyd8mDK=ugHtlj`B;22 zK64ds3#PJaeS3`R`gvWFAfi*~6T-$Kdo}QhA2oDafN`~;Es-qyST!7ZF6Y&<4v_xI zH9baTv-SyAW^>x|m%d-h=jd|6>mi;}Wo_hRvw<>)LvZUy+}50JHGXmVMe7Ae}o3kspzg|cvJuRxdTxm=;urTY7`C*4g%$}BO46fI6Fm4 z3=AGJdbD|H$S$yML*&w75C60Mww>3rUA}%V%RIHyW*hETK)7f%DWG$djy#y&6l~Ap z`|uPAS$7o2GiJkBHBOk0q&W;6zeR9dq0TaL()l@>chs^dr#xGR$eqvhRjTRLXF1JN z@}zt$)Abv%`H@tF?6MKdIo13cAK1jF4s!RL$(Lo;_#+aWA+I+39VFx`)!{CL?$-=r z9%CmS@n2smc`>R3P~odtL&eRNxIdvTyyXL*nNsUWBW(SSrXA&D$#L_e zmBpY+v8yB8{F#28ygOR`IpgQFEZ4PIK_OS_*zLgj8tH@d^9_0aO!9!R>#XnsAY5C2 zW3PwgqN1X_dyUQ>BZYGnPiK{f>S0i{edep!66V;#@3HzjhSJfwcZc*mm*2H?rE#rV z!aoq-UC8J9y(7N5lsctsXw&~TXeQ>7Z1D%Hz z)V-)Q##9L#!3=xORMf;Z8*w>3utWAZS^(irI{%S(HGdY z)b!kW)Ka(Ftz6T&amH?r=w`4SCiO7h0^db22q|&izByE#RH~_+Yv`%p#~o!nSguhN zopatTO_@iUILj}K9e!UHyzSvUcu$|J`n6q5XDSlSrv&|)1 zg=A*Qsq-O-@PoM|ZxB76WRu?AP23oaHbl+V=pZKqG*i5D2+t!eYz0pIkw-;OHs4B2 zny|5!6r~i!IeS~!d&&64(s|zy_ESXtGkBB{>Kg4EVePYk;{JO;oMiWU7CDHP)jgCp zTz|}atI*@-x0cJCH>YPSe76Y3Yj-un-E>S;szYoy62xAIkQZ%$n&*K*`}51+gT~30 zSWxi?dy#_sPjcyhD&PNmn)rX@dj>k&RORwTdlaf^EK~X?L-6eoL1Q{A;kn0SH>$|B zbaMg8muj{dfbU;RmQn60P5)o=J+~VxQ%%MI!YEgT(MCTgJR%$?$aSRiM(f}5{dP&t zhFaO_hkT!t;Fby9%TEA0V;;X~pG8Clj3(<8l+#1)D!P8|6Yfji(VMr1?;cqrARYiY zwJhy)l|PD1!%S@ifRUX?C-n;4d7!`ubD$+~jot>MuTsWixAAQvkG7LB5x(d`S&Uxd zk4zIXbyTr2Jdro^F|43wYE7MO-v?9L2kjB8gKT*>)$a_nzVOJd>`%l z!#|4n(*M7Cwf}bl^?zkkRH}aHI7%NQu)Xyd9400trXtP5H@X2_@EgI9e$BhUqVU+_ zeN800DGqPqZ4GMJ{-Yp)pM+*vbD7FkGs_ek>DgSj6F#ir z^;^fhp`u=Io9gVAp+_nK)GyDJbQY1qUuUqO+I-a=ImK$2=6>3yX+6iXbp~gRlgB3J z{Px~YpmXA+q*3&-@OsY}oNV2`;hGXwQO^RSxvaxEU+ro82PN%j!Fu|CY55p`YxxaL zX43m+P90we*NYGScUt~&j2jodl`782zqEW?iKpL_IpO4ca#4okqIj_AQgoRf!IV%r z>6$&x+8svY!Ne;vkwypL`cUdXj&}h**R@MLL(Oy6+LXV zTcmnlw$WI#Z%XdksRh1Hxb$=qTSLKYybMv{I5Z~|#TxC$o-wRXw{{<~ZRiA9_tR~} zLHUlQqDWKR%Y%_w_8eg$&Ip9l?%`9Ovv-C{#h88U#jk{@1lQ%F@>8e)G>(A>tNz(T82vi9Bzk%+OwL(t7E^=YL{GER_z{QyNl+#lh@%5#bCL6P)c*JcypU;Oba6 zm)b0j-;8mt+;0$Xxg<^^kl5N{xo6%G97u|nv|)%#W#;=(U^%8Y0JOUia&{c){-FOg zp>iHALU@1t@;d*h(n$Wd{PO?ijy2w#al`v7-=II|ZNk2QvuKpG@&ihoMTEd%TfNZJb?>dYvU)#~~>bqwo=R&YXkt7!8t=iE*-a!ptv=)X9lQ6Wd*ICBs=ku}+0nKal zas(?lpwh|bOSKFF-dDndl*!6sr)M%>EM=L}9`KF9YvwVDY*nuq@u|kSm*$3qyk+*t zA~WPuJDI)`@TWhwks-#KQRW6z?b5;;QOd^kSKk7Zqa`O6??j6NE7QfTis;81XLLKZ z%DjD+9*Cv`*VOKC1Y}e$zOtnSGiN#bX4~QTu}W(NDYvQp$mI8yDVsoXOwSn;opj3R zQuLFd&ul-5sABC0eZqiH(6$oOh_Kqc-cdKGKaFSCX?*f?SMgY-j}2}Qp1Y=ak52Kf z0{Vt9;){G8+VRq#yp_0d=;H>_6Iye+31%Hvf>&BSaCdeskHsmpL1OEElNqWIxnMt% z4DGIE3Z$<$$6WZ0Qyo$Kd7r(CElkQserA&W2O((2+9DVW4euQus1Vc=!5H)t_*W?`|H%Vr%#+uKgouqMil`U zF$}33S6@&29n4x9Mgb$r9#>bwemsz22bYOygVEY&VEe9!Za)6#XvE^fvttxv5X&f-eLKcMzL-mzNx~4p4^yUYEQKC}fv}R)Tz=+LH0+lV#bRLK5N%_LPU( zEw5v4IW@6M-1TY>yfxpdD*W+AaVn;2Mpl1$ZGFF9g; zzx7e_KE!)-^6)-{bG-x)@t&q!J@rk)QEL`*>h|n5@ioU9K9Y5x)^91td;(e$6CH`3 zfQJRsw2CDBK(I^1h`ih_XAHx-W>e{-YR~^;OexEM z_>9Szd47aF{#S+mE1%|Xt6f896W(+ZwtTLY{Qb52Dyu_F~5<%LE`YK&96{t#?Y#SWe>SU#m3<@=$s=}@0ifaqdzV}70P$PHN?Q#10^iLsG(~JxdkY_ z#=P|G$9$7vAvvbUL#58nYyPRvX5&WNeC{?QhDplSlL2-JHHB?SL}Hb`ix6X}pLn3; z2y(4)pQJBSnK2OCiQ1l(%z87%5Ky*OwG5+!xNUz85=jx>sBfvC@YOjtF;RB3D7lN{ zHs)J|b!&M?uE8#h5FTX@(RCA*X-P0DRJFrCaA>ydvOQA*JezW!7mb-6seDr{?PwHl zLKs-+P!zjQ9xX?Jkck$2Sx<0$JYXi7} zP{yb6W1GD13i7ts&?Ps=d;pX12S}qoW7UN#I*~B=MI5=dEYVMR@@iygzYil zc%@2Ot8-c_;5LN@ym^Epa3t+cJWB7YNio2W*cTys`!*f#QemGeYfLH3nQWJCj!OIn z=|X&w_rfTE4T8GOiBMRerFMJ=tSAA4HoUCT~m!rt9XldGvcAv)TGgny?ymHx&m>6v+IAkS-XDdF?=lv zK4jvU6E8{GcO7h!vP&&;*=5y#Yh|Rt87UKEULIq{dbjU3@5`>{=tAl`nr#HbwdTde zKM-#QQ}Gqr49atajoo`vam*|_M!L!{Sy^n121h%hiF}OA7@*xFRjH03!C30O-@=6H z0Nj|*)&kk|wrjNyCuCwwWi|d_cG-7P(J4>5$>_{GK-{_8tN3PRQ`W>V$-qj)V)Usm z*kb9LZ2-?&lxLYo>@J3t+Tp25TYrw93*nFG4IiZGY@kUDaf>1M0~i=Z!l6(KJEi^t zh2V;9zV(KGk$m}yzMgFxzCeAgQ&W{QJ7JrdIR}S@`SBQv{!(PoiK>k>yKms|=Y|^O z744DLrLtq?<`F|FRkPJ-ooNt0^De?dK4ODfC5k|6fxT> z^1lQ~QV3Hm5#vdoSgNM=1rumKoTxKBP?ISAzePm$!5PsoS)`u9w>Uoo_&JRZCJm+O z)0FWOLE+yp(%NCBkpLw|P(VN8q~BnF^!-_&+K(JpU)~`m37!<>L1IxFzy0q-CqiIRBlHVROjcv|g0Q-Vms$-Rycs!O$R= z$6<-iLroEz!VREO7?=TIYQd$f6OUg3u#$!lyxq>0UBFm*Dd^JbjAjT29AfBb{U$UG zV_mB+_zr(hx?gZ55Wd|G<$lTu;Rx*WU(~)o z*FWaiUpq*9%DWb~oYX?jbkR}0Rtk^S4B2bFnnV9RNlwKY3vr=|y=|gmsY1NUPRmtf zY^K5JuQUvGXD3|xz8Tz;s%+yW-X2UB6?ZJigV~-9^YVVZ1~<0AzSFi++a{bfZD*Mc zj<04`8)c>9YPKgnm-HYmtB9lx4cX#WjTyW^+CXZRjTj8Kx>Qs9W)T;9CQ~D8`fjxe z#>qz^30xa%H)hzd^`P&v5+aYYc}z?PL6gfkPh`kMYQhu}z0r9c+iRkOKe^F97S3Q?_>l~|DDt~NR5 z$ji&PU!OQ{4^Fp83|ox(YFhfdE{b#O<}$Vi!KZl?Ls_4fB zKmOjTjkFz4cf9OrN9hnYHs{rs^U7=QoqPLHz|(gC@Cmg zbuB55Q~P&OJieKi0}2>X#!US~hF@c9bB`H|0(P zlI0MS4eI9OZ$_H>1wNG`SIt0T0|O#G9Ey)PL30f$y+Guqy&iGk1849{yug`o3=)xq zcihwrj%$2sF#q0F5dWS!k!cU#C2PQpI@(q?&t^Ur@Z97ltj?kWi*wCT(a1Ih9l@;9*aF6Md?j`-;+m_(*O!_py9j=5 z8EW`0kvR6Cah!)yKNCs;6QX&?%ykaW(#H@~?N<_BMuK9yjL}Q`G3xag?U1`1A!j;s z)dke;AfI(`DCI^7Lbrg|8A z5jh7sDSf9M%x8#2&*2q6zWs@$U3V6{Q9$w8f2URtXEVpk>~j%i=?T^-Y(EENaGBwB znCW!6f#Li9@d4Zot7|FVEiNcx3ki8c$r>AAUAnAjP`Yd?4sw{7wV_%wmW>@&IhBpa z5qSk`eevp_`0UtclOnTZv)W7CbiiqBt;GyfH(LW-Hn8TaT8J8AJLOoepJgzI&PSt0 zbPoI|O+Ow_Bi4RVf6`la(<(D;y<%hEHpnAYDI_1G!t~R?$U5bWb|DGF^tADlF>>iaCG&I*IsIubW#15 z$xS{gA}TM5%vPK#0?9;gu#%qaCS%GBfKZV^Tjv2Y6(PIZlrwj)5e{adOa7JckP^4j zb-DqqpyUwEdd?o#$Fsh8lJFO|9TU!EZvH!jCSAspjz6VL=u(Qa{ncm2Jl+>%RVXKcAH3!wd;;O&X=siIkK#__b&{hpw0CT`lslyz+WSHlq zBaW66tkuC)Zwke^i*pI+432E|#4}1jzDM~3*^<@s{Z+|w_*IVBd{wex|5(Y={tr^^ zzq6~_ryBMG$|tw$%FqSucOrR2bKwE!XGGR%?>KpALIfaTal*u8UkpHu^m0be%9quA z*UGA;RhN0iR@a@moD@$`-Zi$2e+llrxl<%x{ox(ok=;Ah>LwSHw5b~z2;w#N;( zF7FGUM;N`g$KO%k?slUn>UX>(*8MMw%;i0jrG)ytF*$K1jlLI=gd)krrwI81pq$K>mV^LRoibB_|2SS9iCEX3wJm#C~&CuCo(zG=c4%neEz7X-gY;T}2?CoE1v`1V+}pLM7S+)+vCw0TICktfH7L$2 z2kmyY*@7xW>-TmAduSymQAf{AAi8E2HqvU5I+ukRAu)lkl+Gd@Yd-G2=v3Mg-C=hD zjlsU`pvZrciAXyR`Tf^gB#O*vF0TW{(5#1sgoI|O5sb0~2kH=MmQ91YoKaA-19^DeYa%RokrOr<`e_YV)J z$tkrip+1{eZC(|wnoFobXMwqHa{WwX7+Dnww9~02StKz4>HMDl+=~q2bWtj2`#{88(qAvNh|A3AZh~6)O`Ny|pZWx@%R8sxIUYMnUfY%2Jo1lN8-9k9t6k zxsR}98rQVew8DS-&MvO%CAIkC-(Uxd05|K72K$^H`I@~L_$Cffo(Rf`2U%Z9IL*0* z{DgQ7jD4LWtt;S}$XFO}P^`$NwY8`Hc*(?5eR#}rS7x_+@!7kFKQ)a>sGdr~;Itckk>mDAj)*5A-U zT*73LNGa@@`Mf(x1mO0L?!N8l@sHLqLtzN+1xndPB$=N znsW1s>pkIPcEaI__1*>c{KN7f%{`G-6UFO5%NE}2Xu4j(m5g4Z z@_xn%`LQJkV5UUd`U>p)7&L9N-;pu*OBrNx$bLOchZ-rNpKI#{(%2jHdf9}zsWaTz zY)Qmgs{&-_2y*uQdYO{1tui-N6fMH%dU5axOa92Fts9clwFTm|D)L;4nN)L2__pzc zr5>ESyIy7cIzat-%MWv}Y+nG0T zk4vOZ$vj8anQvi^I%8LXb7>)5`rDlco_Xd(G+Wsr0ftCzU~6h$btLn@$pk%1i2{bQg&Yz z+ALP{A)C$ndN%?$yXOr6Y zIBq#$%r5A34n=g@X%5ERg9kFi<$jIp(~A07*tg=jO_%;}k^k4@~ltNK3w5Hg=wL4dw4wFvXeGRJlXA-f*(KFQdE4< zkDELQ646|@#j;Cn1IeD7p{cWR>bg`cZqfE_Bk(#3t*j&a@$E#wVf8ZHwIceIlA}yZ zcFQINMv1h`KHWgWQ=Vw)Jn_Jt8JlItEgc7D>Pov0C>E1>+)7+v$sT5jWu0I3`*$U> z8q4;gs)RfAa4@ z`DYCy3j-GEaRP3TlEjztBiU(f)6~xV48QSZ$#e_Y$w&LD zn{U7r4lY|9;UWmv2Qz-Phpl&Gis7P(YZ2RG%SD5W9Q6X^(0@?w9R0ls@Ydp7^ZTkQ z4gayK{7)OCe?9Mi&qtNl6ulE>Xaeo;o0KdP|BruHi%8T z+onmY*3{Q&-qUCl^`mfCz~0qwAb8%>YGaubh)8j>)ha8;$H%-yQ_g05@1CCs-P{+Y z!Tf4DyM_UcNrdX%x&C96z0HI?Y6qvO-ZT{ARLzsq38;zoNf`bi$J|2XR(vezxf})< zX$y`$_KhAr#BzF*w2n+uI0TQKO#8e@D80i@b(YaN6&i^<#xlAk!{^qO=1KRlHc8S# zWOdeB^~r?_&i4_e$Dxc{75!Et6aaOmfz1noiCqNy*|pP>b8pL(tJbj(j6P+Ut@*53IgZ@vLxsP-pq^@0Y^BmOpiP&V{l zs>IVX2I~3{akeMcC);(XiY3A_3>z)M)hZTcgevH&Q!8cnnMQ3|>XQ}y+(cu?vivQ& zv*`KxJER|`V;JTfhRN>A4M&9G?Zx0Hi@+CGwF1T%W3@ULkXpHso+)%Lx^5?FDs%DY zB*FGG%=%;;P>Tj8hk;I~n=c;VPlhy$1TE!D!Nbw5o=Hu;CQ-=SrkNdaY#lJ%CzsNDL z8?H@bs_^8Y_=Na(K;^~mISrZ+#Nq-(`EZ>Xi*c>SZBmU|gdZTEzdnDV=`la)-z{_* z8>ZLk(85F{_RBnspQWeRb+#D$eSEyYbQ5MC9}T3#;@ozq|12@AL4&*)-m9!%j~j~R zz9{>04?_^5w&O_D(+|#{HThvO;6sG|BAH0kn0g<2tXz;n+6LBjp<;I^bu; zf=LFq% zE&=-xiA19VLf%yuvqo_U2~xb!Ck04RZiRvm4YAW=33`=@x}kMOaVE`~t=TvAp_qq zv$*Y5S)tw%>VjeZ25aolBc5v+(kvN;3TA6h#jjw2Lo)Vq__aAEwxjc$wWCzMZXZaS zGv&rVoJk+wU>mZsRGpPRlmP{qaryfkKW-EZ^8Pi59L)GAQD8tQq0j@6*8u%PQ)uzl z=MN+CdWU@2rGPF1^E;t>E1VzYGd?M6GM0k7?peJiDd*M78B5lsVT=h7!=FLkhIfj; z1$@XV#A9Q^O*?=35R&+Jc87$Y(A|Me{sN{o3O25tV1#~oA6AGl39#mA7R8L94$yXtJwm(%9uO0kHS^VFb@mriUc%OuDU@ z)CO}cF9q6!2Hq$9fP4#Pf`SF`ot~!eWX{9YVO|UmVo!43*CT^qen0s}-A&QtX-TiD zZzs|@4!I7woF0}g@%X-D?|DEna7!A%y?S!cUoCed0doM{MKov27|Zu>XaGkg?*jDY zO9dpfZ@yaWGMlQ#EjmqH+6~P__a5fqo=LMN;_bEEhouDE0OyI?0H@OCQ^;0|1uoaE zvsG6$h`2_dH9~nwXYSi|wal~IUtaW(bWFyibJ{SXCA!oD$`+XkX%&tM=txQH9ndN< z{g@P}cs`ZI%@f)kLwpWO4rNxI7LUQD>3(vyu5Cr2Q`(GY9k(=+B$~4c%8ObTSDjY@ zPKFwdLp&B*{b?|Sd}-d+%yixb^{~0(tj0^bnV0ecfJ!yUCH`LosK`@S1&$AntZr73 z6|MGi)7&$aM|ena(!u~k01q%nUNJ`? zN&`=!M<#ku0d^4?(N)P#*zCuv8N`759zHE7qLXLyW{U5@LUp;>R#Iy-6P4L%a)x^9 zhu*%g>hVtnz*2IyhLOMLGiTlnRZfdV6ez{Ik_Cj*t3JU#&@{`=U@i>`qq3Q2!Qy}~ zLD%Bnwgyv1ULa@~k(VDAZg1r8p&hcY0vwS(Y%F8brd|!R4-~r1ZRXqKdZLQ)IOj4O- zW)pzlw%rxmRW?&-9$e%XL8@_V98_@0;osArM3hIiY$e zA>dWPb0SPVQlK01u{_irf0saL`6Js!af}d`30y0q)o~bK4MwP8v~~8l7zdzTVbKUh zGiQBl`D?t<;!C;Sa*lSst+k>dp-*;nga%Pxf{EGdH$hgXpl)FgJZ0LY3cy{4X`XH4 zq0{o5;+4~5(9%?C1}n7S+HDGBH;_r34rYyWQ^f|*u=A|gK~3pC8|CZ0Y(x$drM9|8 zalsOb^~}4jpZ0j;$*II89~m#Ww0P&gmOEUz$cWr#g)lPu>;k)RNYNIMY7x)={cF8r zT9#;-hKh12Rpsd$ijXdeegX_E=_}iW^J(&D-9XAFO-$LH@OT-PCaQ z%wcsg#X+U*3A%P4&09g-Y&6P0m^iX?K!t`l%y@jZdIUwxx9fn<97 z`9Th_BN1sZA!8U|+SJL~xJGC z0-)=+7lZ!3h}z~hFdaJ+Q!^HA;mP$9Enu_8>c&R1aoaqUZN1XzRXyYbu->Sb>H1Q2 zQEP>sExb);qIQ-}yNvw7b8&IX6Bb<%X>_Ej<|cE^1w``66?e4A31FIjiJWU{79IO# z^e=O~jF^M8FJ4~7kIH#;Rnin#K#;ZCVNuDY-O@u_!;cw?-{xUEiY<&_pey?iX><5pC7i3$>H(Nl}VMy8tp$%ubBZ zMVc|OQEQE!Opg+dm+!k%M7QN<>{~8wlUR6o2>9V~TI2e4b?inCfDb7yPZoo{Xofca zAkSMJOi#|9ce++R28>(g=FDz|Z4?~Kte!xbmDNF;z3`K+t_PheG}PwQ)#Ho#pOs6S z`1_-Znar(WLcjmcZj3^Q1Q@-xT6l?pi5D>f23*vbw_++~02wbkjD3z?^v)wyLlc>Y zZLK?COLs*t4;2=17trMn+EbxcjK4qocNzB|(_^fz5-Bc>7&@I#dnE@LC+V%neI(T2 zxD?el)vj4LW3KrJaG6n->~#iO)orrNcZs~qcYjP4-#u9{K44Hfoen>pxHm-(2SJ}q z9bh!^b3=aaNFdqx?(FZ~odt9(*HZ(+oUWMCd3Y&3{Ycl7CTI4#zFkwyCY^vr4bQ^?)2bO*26gGt>==idY(4#q@uOsq!UOhBL9@&2jT zJ%HXN-2F;EM;R{*hTYN?{gS#r*EMjXQIlgGE^%0x@08;#tdmm{+CW}POF-dJ`vN_? z>SV0wo(z3~2|0StZ$QG0MG?FJ_7t70YgrP5iWGs-@+p(AP+G|&^k7CUs_6*X#cw#G z?>dw(S)*(rS;~yCXwqAmPM(rN^Sqrv!nRA;koz$VRdOhg9!t4VLwQhC8lSb@DT%Ig zR4fT`f!$XHaUtg9z;taYoc@@HjFLOQucVZ}6BY2rE^KQiVzOWyN@av=W)xM|oN&dC#Z)zA%6re3GQvu2jFSc81YAUL z(JVYQ%8E)7SWTD+t~J2Zo-{F&SNA(L|Lt#D$~<$~+w515)$@;QUyA<>F8&1+6PjN- z>kAm4oz|{qOc<=uAmYL6-(zJ2X?tV(@pt5jL&WLRL!}rcP+8j?qWJq?Rpr~|6}&7e z9tJfDf*Z^iC~YbhGF82bzdnttQl|@-6O)sZh-vf_>?YnnuXEjtF_PX8imCHG3>hB=@H)p4Zv34KqrS04>s$4+!mpX@U(-?pcv zD&4OR4Z={Lu(f0_Kd{GztE-Oed&Z{Sb|9eLtuDM z9;B(=vs1!7zhi-2xo_}2b8?3g7u5g?sy3mI6&Ldw8dmLg8kvSWu8)PAy63@KJyN9H zm?p@KVWp?fT6@S)H!A|mo(K+am(+D-d}jqavu_6#n$jt2|d7-j&=1CHHxTPvo8fQ^Hz7w~=|JgiLu3xF>yhw*&Nx!|vsJBwA(YR|E^ z>PLHcVE8E!0(l*@vM=;jxlQe-mp!(2es6sr66@y(8ZdGqcK%CW{frQ9Ple1fvn40|+NiC#;ug=j-{_G(#)!C`e zpIHG@WUc@zBk`OchU;_}!9;HH_13r0?vz9ZRaLS6cJ$S?3rL7mYeetwyjAGdhTByrmbnPhON$%dHXhSe($Ksgl&KoPvB4^>DWWibbfo z7un|-SYi!Q#WqOmgi=qkM`g%H*`1;fR*=@(?O z@U1GcDdAcouDnEC4#k^{t?{Sd!J9`k!x^9)Ub46pj+WX?Lm*U?u5>?tqC;1K|9F9a zBQY&RVB-AJCH^8AV#bc;IkqR(8I~m9F}4rPTPee-0S2;zOsPHpfP)hD$YQ>SO&FNE zhUC!qDiakCGUgV9FB{B{voM*KQ7tbv&bm|`)6Qz@*_mjXGtO~R1`Vevj^w>fXLr@H zplz9P3BEdFVwDsNXrrPfM!yd?sJ6x2!Gh45t3-&Z{-Us1ij z5E{6s)b*>VGlt5WiRiuO(jmS6HY5`fe7?WW>+^8r4%#0vo_# zVGB{Og>#`q{i2jncC(rguH{UaJHhCAi{}}tH!V0gzG|JZfFasjJp2<9V=UDOQ`jo# zd8ewuVv{ahP?{Thov3i}k=OTTEaN9D9mQH?{T5(7WN903iO)DI#{yq4%5IBQu$hTW zxS?$BNPKT9`m5EazO0U=gnNOyk-B_TdQJNMg;?Y23?svozCLsCr3^pTm=D|_uEdRA zC$WqMi%plVs5}qSd5b)XCvV}K$jOgr*R@?K1i~ke%K<<`KvIN&9p9H`}Cw96B6up&%Ld#3EABm5qb` z$fh%*%ePZ(R>GSyf1?ussoI7yr z@21D*Ef+_yAO&_9Q1@$`f985aLcGXt%CNC#M5R+PG-cTzW{4j+482;pNM{!(LxcHP z!&5b>AU6c=!640=wD|@aJAi&gSGd#t;K&C(S1)1M!}IqqF%#OQRW7e$l-?~SsnIl? zG56!&voZoz(pgg=D#1EmDR8C$pfFv9JE)bgQkG+^Gzxv~N4fKk#_8hna*#((_Y*$8 z|4yi#`H@UkDZfGu;4wBXpM{G@uwDvg`+$B0jMz>{Y^2^FDN#4MfY#(4)6#uzX|2Wf zse17b-<9eM|BehK=3vMQ@BA}`HwB>ofm5MIH{%)qHYO(M`%)EJ$)L+e5RB8Hn;CB1 zwzNfZA$&xm5Qu;NI@ioryP09FbBG?C!AS3)kKx?L-Yl5n1O*dsNCnfBQn`%p$L8Mc zNNe=d0(Y8`sT8`njd-SHZx*>FgdM!n{Iws*Oix=?@mi|zS<6CRH7kDB^EaHVBS1^A zI}3KNgXD)UHs0hpVh1yxU4*-j4zD` zwKRn5^}c0kc=dJpLuL73fkiz(cX{KuOqGq+1aZY|dpJ#|kN3g>4Za+82!Y-YA7l`~ z{ad8wCjvACdp9kYJz3CiptHVPi+8I*ygefu6H?CP)C(POCV&{y6;S&$v77|l)db5< zYAMj|1z~_jVd6TFZg|pkwEl{Kj}zm(6lgm%otSyOrOX-@6;0&dat%@K=FAu6ipq;bge^ap96?kKuK=8Q^2&n+6JC#Z4F z4bV3-0e|lB?{Usmzi;|KQdmh!n=HpQfj)hEtoe1$3TuaU1&g_D9==Mqo#BqwD~%+J zAHE=$3tnK_o+QVdlr|HQ;ULR#W3fhmpk5846d^7k||TAuDQ-`L_svi9)BYeC*w;e5V4( z0g)~Tnox3fNjc|LLYlgyg=H1lJn03rR8a#Pq47&W+8d(K(4cuU;W946I)aQZ&Rra4 z*4drda5r`ysGQ*)mQv*1c`4jbpZ8GIB|f^mb#Cf@4Fu2P%L>7LK4<5 zq1>NnzdgYayd5Q61!?X={Ta32MzAWVayrpl{&GxpZYf(Vwfhye_o}8J&_K`Zn@8_? zYCi2d1mGKJiUr!Q4dN6c!!sF#xyM4Ezp@ln8e~-S8OTtMI#)`ALj8%itSOo)O2BkC z47#53m6Fe>*jC16o~VoItP@ITSS`UfPSWQW@rrmJBMn585iXQsp8<$tRC)`l-GWX; zr8Ct$F6g=lXSk^wKla2%f`BFXpxf#tdP#LpwP@sFXr>|0ww#Ccp{)6@W_3s;Bu9HL zctIY(j>Udh=amUja)UMkOD&UtUJ2lhP+tlCtXDsXh?eO3_C&P3yiLmmvi`lbu7uh; zj#@g{Qh+a=tfgBBUhs~)+yhl16K1*&Czg&2!VZ2?uHQ-0UBk0oY_@l;U|Wa(>mi7Q zxVHx+RrCp&X}Y6PxhKJI7T9YLX5#Ne%Ntg9E-m}`3Q6K4(R&qr$a2^F2 zHo@=R>-H?_#j*(mOg8aFD zktsB1=_Ub-W$OcXFvso6)Bd651*7%O6!#VY)eu*elvf5d!zb@w5 zmA|Yq$I2nOhMdwk65d$CxyrZ+rZxyh&$>s1W1}gqnj6%}@cnaRJ#h8%7ey8#@!0h`jOy=w&+UxFT7lE%?%q};Y%h&Cxx zF*s0!)}&U=9q@$jG(i@s;RTSiqT@;i@2rJx1dUt>3{KquhkyWL=+yJH4=JiF@QM1MH?kJR26;`s3G2({87Zq#wh0(QkHjMYQgMF<;@&iwmk$X4R%MIs0+H9gA`$%9WETL7u z4m$QEN+079KT$FA#F6Y_8f?#hpdJt;7ujulkxzS3Ous5;i(J*y(yQM1fZkyM`JhIQ zWEYKO_aYP#@StX|vLu2qvV zpUb`9HoHMif#VC(gU<}}ej#~Fjqb&)NJ6PlL$270R-G@~>b=}I_oefAqiiSjDwgEL zEXdz8*13E5NqX$A^AMEOK23^KHKto_<|j{j!go@w7r;kiP!v*Ar*3$NjKdX4qwkgu zMJpB+nGqyib1N$8`jOr}nHF+J9kXn)ShLqGHZ&u;#?VUHHe*Pld4}Twg?1;Ei#=o#$HDcq#x=tdsLbT`{wesMY{wZ^_Cl2I?Gr z+9r{vS^cBz+9s?!%jWO>xl^&L99ZxkFIgQ3pz1Q9L&5#5noXH8#{o

{rYjx-~6 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
H62QTB=A+rHp^zA%own}pJ*@TVAs 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%0DEe&Zc;@tq>4R&z6R5$ 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≦po3Ap!$x+ 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

H}{TB$J3|{a&;Vb`P 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

?L_Z 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 z%0A=IYG)?A0TXdh64M>kt%p>U;Tfbpvob)B;0iu_0FabDTa-9r_aL5^g`IZy_RI|~ zw9|fwa!JR>JAOvmLph~IDPate42P9u5qn8tUufnq)j6xL3bC~@syAN&QsAl&uqW6x z(^`A4YM9S;N6hI|wvrrGY%B7=)w zOt8hcKPxp*=-R5>^=4Bx2%y1p_c^xzibgt_@K3R<6IUEf^vBAQi}H8R-QTA|{5$jT zakKSrtV8nFUuvh}9uIui4IXH!Tv5n)!ZT2m^jjPEx46nMNSz=Fc%i?bz5@=wBxU=FAoEO*Td!nss1rzdE)3(r)fdps%sGjm+AQ zyR>XR)#Mh1*KKhiN}HLPEJ46Ls54L>eoNJ=Z!G_k09zruhqZ zjz)igABu_ZQLw8Untl)QrBlJH=id%+Js|}`<_(rsyl}}X})qD#AXhke`&Y+l1 zSE)j$UCU*rPQbBIwinq-4y!5I=(6xLuT>@bmR>KqUuxf7xUs0HFPRihE@gy@D-v@8 zfvAwbJNNgOPbpvOVqrQ<8vKd1p-15Z9Ds)ey2Wk~1&y(8RzqG;A7{wMPN$?iPC8_5 zNba9@&;qZ#bGLYN;{_}Sf`(3D4Fg@-YV}7Ukq8d1{Q!8zaXWTMza^msRzqW(ZMwsx zkve3;Jt@gzg#eX};n+(enB*?0?iaiKAmLcTW_ZxU$d!EAV>2H*Y27_@00)2yW zrxWFndFlt(R(AbXcJ(=W&lUjY8-9oux)q;(_!8WdNDDuyU4yxw2#xlis(Jn$Ig z=^tu*UxfS(;|HlPy=lrbr*RQi3JV-+1nMHt_YkCxpJfVD5-GvmZ4W#nXO|zV&zq}I zRgN_G9aOzzFRD*bfg@)ZmXMZP8b|N{R_76{kAf4#XOU!W=BKowrzE#JdDgD|otAo`T&83$3yP_o5ai6YdG74darvNK z5;nT-Ov0HuQbnPRb`|i-u2Mx+tVArB=jg4nqO{AdLOXbb&wb)rV|mtYyhyWuYpPR3 zmRBM*r?Ze9hl&((6#g2a&Ean8LuZ&v zWzB@e)+a6s20G|Mcrfn=`Jdwalaz1YW~K*0GNT32GDOC`aaWzyywyDo>hPWf3K7Fv zpyNNagJ* zh)keTP2a+R{UJzJ)}T@O2^>=pZ#M*}4$-YlBLYK>S&g&Z%L6Y8FG@)xUzrcZdMPOX z9UQW#wdmvwduG2Izep8LrMAZEE8D%a124Cp7p=fV076l^8ezs_WuC;%>0)t9%qAbZ zuMXmcWP0Zs+O=Y$e{R!h^snYN8(|f~sODdaisjaC^5R7?x^rSl#!pzB^SkPcObzTa zRTirgo$hsmtEisWrLc>`pY$+6#~EvqIi`zqq&WWSUp>VHr%j)N-CKICkVfK<9j?Xl z&&i)^8jrZd6$q^Y9(Ppoh!^kh`e3>wGssFppl9SiOtxy~Ig4<&U<6#`3wkj`Na|g@$NzmfbV)`8}G~qHJ=* zef9?^|KQ>Cm( zRA5bFoQL$to{Mg=7}<+~W#V+~yZ|amp@WWmTS|%E7=+g9OCVy$W&&A8*<4@?B7NJR z!XiJXJ9kw)4oc4OM4f?AyIs?4E-fN?Oy>T%);`v>BQ3g{j)AdX0`fQ^@h;q>ZJDOJ z@~HHgY;dGU&IvBu(v6M@&b%P1kA~_#%%CRR>92jZF_2RT3koakiFu~0wy>#3=A`XA z^=wNMRR=+sLr-Ea%}E%m0oe;`<$EV?J-aTUz_?Q7xVGLff{5ifMozzBR*epu#$bm1 z%+I(v^vP}31l^|Ew7DQ$w~005)2Qe`Bj?fh`1dIfcZ%n;9KjrLsa;_h${VY=m_g(rNAfVXYLF9x zERBH4jav#`=+5ww(Yg@Gj8jyzmqx`P_=ep6CSI)$Qv#wzi+y;WN5$ag#trBZw{PiD>Ms(g(Zo{hA{pkAAUWgR+$u^nB5k}klWf@>G(jCij?AkK3#u{G za%o z#sdk%{i*xc3-$7lUDp;EBbMrU-8K>r-511sl?j2gb~TyG!iaQsLdkaa@XaZ_ z6~6jdd6a@(pU*IrkDC$My|UhVw-@8r@#tZHpk)L0QC1_phO15?J^qLm$+Q+LE>^3- zJC9y>M?BT{mmmcj+|{mKbE158v9%AUM73m7y0Q!m#o`%o7oLHyyxLM z?UFC@>vrs-niWMu(TE^8-AcHhgWvJBO;d)SU}3D=TJY&KIO&G>B=SR3!F3>|_=maT zaaYN~2;G&=jaTg!AUf3&4oYkk*F-|XTcm+B80xt)JTKVEG z>0E@9$O@v3Q?Ya0GeZgzBz#3;v;#BKvt#H^J;+A|J`9*!A&d{`GIS3R-IT{Rxdz*i zZyky{`9k2r0Z<}f9Uo^$!fS&+uCm8~S)xhkN%RoOEb_FN2@%m;qwH|vpB+)=Tq$|T zSoNu;$CXhtC%5#yg|bKx*{(r9M0KrZhq*GOKtT4*A4HTa`~40;!MJI!%!7Wo#f*gE zSbc$lN5`=R&&pBH?l**}+6Sss*6ZVgnmR$p-J7r6N61980mZFA73(nCHBHsaop$Bn zc4xxsUq5Ial28c>>OayTYAU^T@}M2AE_$3sC$c*UKf4)MFNEVsqqo1;J*k9&Yrfk` z*E(0;6id*8sSqkDgh&=KDG(rT-?tc3S6LF8^mYjLdbKOW^NH{ry}kXRi!9Q z{SSY|bk;Xy*$m{-)*LmkQ<;PX`x!ZK*<-%tE z)ZnCig5|Z(9=Pic=hx}z>PWe@6)|TJW+2KH>8#jDRt>YTYA=M|xJs_-<V68lcVbm=NgFKWNLb zB&+V+V%1Z6ff_77+>%v17F4a!lkxM=y}UfT+tSB}1VWJ>Ztv@Gl3lXy*uJf;k6sT0 zM`o?Is1jx}7KYnKm2Ayk>%r56Gk()IL!RiRuOmzgnCO1NyRt?_4Ue2AvsdZGHi zZRWq8E=r|oiVqF2YtDa3+=OzwwX9DX^lauKU`3}aVEw`y%4lluh+p7fx+7SIT0|Wf zH&W}_2NRd~Xsh^*0$I99HTiRbs5#pL*8CTj!h+1u0eJ+D8FeW}#0YeGr_ z9EKSNhAO2Klm$kn3h^GF4g-~@nxm4?13~(`tvJ!vDYwpn-0(_c6ic{Hj9i8pHh<0f zgR76I2Pe-elidBE%Wh zOFOCtwV}4+9WHs8qz6p8S{!ymjW)Pyc+-L}XnsHv4@pDr{2Kqht2{eTusKpzX$osm z>j9w};$J{}!3U?S$YJ{(LUEJ$?o1j#X>pzjI|}L;phuQ|Kf09%Q9Pn$$gbo7ocIm) ztj{cYp;huI{H*Mk2I#TI$?Z=U-%-Z!Sg!|=F$)A9wEWxppa%qqe?y{yRXM~FqDSQ9 zb>gCyo>O#*$ar5Qng-U!k%=FLGAm4fk8fz(Sz+eUA)=QEfy-{Mt;}e2aSkU67+BLI z?^;n(-i=K_{VbWTl_E00;3S1Ng%Nh6(FpVm_N2>#LouTxm4xZx-mgWZ9`Etb@2N3N zc>tp*b;3BO97ECVQ{oO!6fg&S3rdY0hUxwD3i(%IboxuhwtN%@?cW|w{U?&04;=5W z^veHn^sa8_u%?Rs)jo4b-dVQ679X$-uh`s~RLJ;)YEoO|0W-zE5*B-nlajr6u!(jU z8|P1<;HQf*0e@8pGgM<3;$VLy-%kS9I@6PGc%1gE)Kw%$x`a8md{bRV**1S3{yYkP zN*nItDy{`e;y6&m_35x|$`eI+>}vLPNR#FLq$1DTPI%HusUyj}B3B%Gl~#4s8p6QV zz&5@tk?=6rA7aO;S;?uf)&X={YqhH|H`!}kv5YUQKA6{;tl_IL&N|LDkE9iEx<|Tc zG%T`PbmcXD@he8kMO7XB5bk_8Vs=^Hw@oD0u3K^gm8BbZ`_CgXW2WdzROK~ zSXN&}MQ}4wY0xcsDK6=OibNA80m{-ZqfCQARi7sgoP=eg*_)JcE*x+5I(y3~hi|S=i1V3#++hWh*{~!dEtF1cMTu2^*`(gWPfBj@E@g zbmd3FxL=C>a)PNg+r5g`cz)6#&Biw4gtu?FtiGuAuNe_11di-+fvjTAN}V&sqVrsn zHq;P)3ShTmrA>`#9<+w*;MMH$_1~b(Z9gHma4$M$Ad5_KpIVMQg%yPJvIrbf5%oLX zgz*a@2-+X&ufT_~B(jgzcD@l`v{N=-g!*wRRSf)#;05=Yqm^XRs8+gjt z6;WSz$Q^qdS!VtpAf(6(EaPliB=hI);5pN&U_J{-*qJU7N3bWJgGh@v=6nwqUZVN% zk6icPe8E4Fa-9k9)!IqYhzZ?t7&|1?2MQrrtTu&hu~_;G`~W?O%!P)x}k$A{J1ApS=#{}1uZA7k+s2dO(_qISG6214X6U>L(|K6y`y3mdT!mSf;K z*aD55fy8iER?^UzDaH$dH$7$v9DN=zIxd}!A>j{rtgIK@U;Sd6|L4}=$CZ`!-wui* z{{hYY-}}YC@3=*3dMa~@$o#2_BBF6LFcA@is#cNBL|Alg(91$HLIp(xbuSireDxQm*^=^Bv?5GWEdYeltj7 zU07onji6T08GmblDUxz4wfY=CSD4Q3RdbY82Zz2Zl^qGBf2~cGN3iqhfvA zY+?rhzJm3^sFrfK$B%HWFXD~Kvp~3bugqtr%TY_N6&C&)8)Z9ih;7o%>|YG3M3Q57zp$IDER$$hFiP z^I2^Ds-`^|1(2XgY@6iZM>DrX#zh)&`wnVAXuY~LD_nY2qy^(LwYA}K7CXL=Nr@2X zPT+fg_q*yqZjSBV0iuz4%}D;(^LNwkxG%$JWH;uh&u!{@`!)Db)Tn+EgK2j}CfUT> z#Vi2v{0_ugVpZ3bW_|i=gc(fE-sy2?`fgksXnx}8e1S%&{5!zOAoMY920)L!P6>AuUtQVgoVpK+< z{aB@mztv~VRdJ>>AIomJd61=l1IqMAmn8*2Pj?y3<2#PWma?leB@Si`w;P*Rea|`RoFY=6Jhe!87NBW6L(lx_2!&;$b>A*1A=0)!C?|USX8wLNy zs1se4P<#O;-c_Pv5+lE2*B5k4rO~00p5IKwW7zyZ*4{bB50gN|R4S)Yprtggg49YTM*|>`$IG-q~R)P5~Oe|={{ zdvhJJG;FaqAjS6$P^1IyrdzTd_tr$In-E|R>QeY)p`xP)Pue`qAhPhlN@WBhMXw}% zTFTIK^qy( zBKc_nis@>SuRn_5FlbP#Sh>@;aiM7Ighk&Y>siLPnT(btWy&|9YXsadyGuqF7*ivs z%2vROG#sG^IA&I}sM5?Tgco<*u?=OI&neBtVWqYd6fv!=Gl{u8U*XVeQuAUX=w(_f z*0>?2x><}`b196C$uYd5#4V6Q3$rA8g@L6QmDHL*?ICX#QUEUUz_|Oj!AF#z?Yl`J z9=b^{nh{uHILtPbdF>?R7eKFc)9VyN7+%wyq>Ct|DpmfbDh=VeB;LW& zAa2;H^(93pn#R}1003tMlL$3b5ded4vmr);>NBO>=Hq$Du!uH95GDnL@-_uRpqrv| zdt{>T{}jHNd7E{Rl9zh`eZid8CU%-}CPcVpaidh=G)!)0#V1`-rZy(GDQV#oRQ@CV z5)v?G$;+*MoI~22g=4k2JY4Q4g7dm&hXcifA>GH1yA2)0>lXyG{mjQm`o2D>n$ZrI z`Nz)h5aGq{Ojs-L(;=)d({UT(=D_aAT8q8`6lF8y&Kh8GA~WNPYPe~g1oL-H)hO7L{IkGb{E$(=KPxA5{%ZlH~P{L0gbNTm}<{KeQVX+6(8zK8+-%%kon+~ z8`}(z#V9*WxWay^SX?o1Ylu~@02A%G+4~MI+%k*?TOZE)&J-NhGmI?zg1$W4rvTe$ zxZS()P754OAR~XMiU%w{Pod#cQoI*sxM)SFD3#x(CDs9LnD@OsCys0AWPTHtYqMBK zJKkp0C&SGp77)HGP7KutDZ|U*{I{Uz)HW~f70%*#6e{0uP@2i2DX&rx@}biynsuE( zyM!L9h3l{R^A)|ou*Y|7L;Y=emi#Zu^I!Ale{}T!^X=cQ{lCR4l`8JC82m_I&`YCj zDoWwpkqQidr$v}GvCg~<_?8f>XaX$V#rplf<=NaD(>mBhhQxmkEFtCnu*J&6qA5PfPHO8Z?aeRu zUDOS3h_tGmcQvP}?qLZ&mmL~0ISMQLS2tqxIhAxG(lj7}Ugj+HL_5$=8-#;{&0yeVP@MdaHm7y28bBX>V{_zxZ|wNXc5j2LE6FSv(6)y zL0m=~H1C@0P5tqQp_Kl#o07>f6^%W34^#_ki$*UxyANrNZh(Y@84P5EzT6HGL~4<4 z18PP0+ADJQH?|;~i0(boCS$0mv?>9sowR_H^vWe5vu_(`90Pp-9DC~=LAu#!FHyub z7s09KA+_$-rh~WVO%*kyMs6M~i^bjm^f6W72lwSdXTZubT<@$`Ox6&ar@Xq+ zbLJlvq6jK7Brh_=Yiz=u&61!Rp*3-^h)7ZXVawHoB9w*6vCKrzn^(ASy|Gw%deOj! zDxe`z=nI=SGAJ3knch1r->kXsFgdv0XF-yoFn_*z6otfo1v62}J$d5LuZ`Uaw zd;HOZMv!XToAUh*Pa(xfFYpPLR}BF|_9PHcP){k{OhyXJewWjL7^G&nfc_?PDRG!; zr0FYUHHDlTqEBQ*WPTrAmm}^?29KFIspulR?T`uLJ7pQZu(1=noS2}Rj<-`r)D6N4 z1JiSM=T2{znf7|z7a|b^6+k8pzJS7DS0uPY(}tp=9_>~R;TNAmRPs)mr%~n9RmO~+ z47mIiDEAY;I)YAI?4i!i2wQhUEHyF4mdg7xOp88yQ5OBSv)o~paI$nc$W%#7P)C@Q z3Pc!r$zHHW8X0t2`f5|r?V)WK3hohA`F@8Tq#3QLwMPC1#ira1Q&g!Vz*Tv@#~S3S z)J^vs3nd2jI@do2$*W=)(W`8i(S92(n(SF?0JWujTQYchk3PnvURZLQn*Cj(<)nWJ zs!!IBOwhJcMWvkJvp;$)^G`CqmZdl`l2@Ny>7hZvwUuSI@3VEAj8!@JuBf6$Db zpA%`LR2%`kTDeTsgQYOF;723BWbp&w#^sHUgySvvtqM@EN%NubhrYL03HhXDko`vy z@zsx0>-B_)=%GDv43G%4lA>RGLOj*f;mm?e`xu|$(xUA03pf;3^M#TCTUQ7csJjVk zb`!>t-1nW7Vq2GLczA6D6G*RD{W^3`Gv`zt*V8S;2p{NF2%WI7og{StL}hDtsIfMLq{S zTL!^$nXi;g@*&pE82miOy{68kedY8rB&G#b*)~-Z=|k{;^wJV*OU|9GlMiLtx~noU zBShNXkaL4o!Vv`J4fO7S6@7sZqZG(`%mo*{;mU+lRpUiqfcPM;FksNb zNDru;>seO!lQ)`K#BgY^G8(eaQ{vx>C%z4cb){?buS6QWL}sF=(g&4pqQAe>D@dfx zf0^8d{rbSx8dxH7=#%a36P+HEm1mj~v+_2oj`~#&hLtg>?dEqXQ3K0PCWtmD-n)~F zNXRCy1tg6D5=?au4q!)p+~6DW~BM zKtpxyjVT-(QAK4FEfT?7NldC z8?gPIa@h3a>mP5oJIV{miSHdo`2Vr#-2bP)`+u)CI{&F0L;93qm>@dQ6C_WhkVyQ| z$~XJNKh}SdOaVN%sgOTmj0t^>JU*2nH33Eb=GT(xJ5a}Uj-`GsP4bxOJN_r6eKzA< zER$bi-q?V_q1NNe1 zbif(vofs3tC3JxfN%G%0cftLq@jMeVr)kMTnTqjpGOc>zeWdXOnnqeM@>oH#z8Nto z_fCn4dgEC9X+y5?8JapE?xOSt`=}k>BihlPB9y`;g(VcX`^G#(<7k5kBxUeshq6Kx z`NHDMx@JNPT3wZ)RH;bR+*IY3w-Yqj$cgP^E7PCT=4tZx>wPyDhUCnQQ5@-o8^y{j z|F-;!o!($PTc}>#v=|CRCGMNbyz>_ACK4{B8nv8hUS5Z|%OJqyG zXq)I(m0*j>0$J%P_#>-#D#2tEjz@$}UB|8T^qy}iv#*y<)v;@E>OGq3W^$0Kp>c zb-IB=_zXdsBlv(@7raHi6i35K&7vF}iZI`-=};ER8&6BiQM_c6umlwnMvg<$E8z7- zH?|&dE9wR#OF3K=0DXum6Ex;SPVy7dq2#|LdRU+++#seXYUrkllZ}@l%IuKlYw-5M z{n-#0P>`v1%KV?~qVyHhI~1;YwpOPbi1)sYvk3~fIjYE?!Enc(g?fsgrFxFAJ|RKA zO}Wr@DW89CjXultJgvVY@1u!)It%KvEt89k9T+WMWa4ky^HlsoCQIDSGy&K!tKECo zu~oS`ozBqT1B|(_fW)XAS0uj-WiHl##D``kW>dE!#FToC8pmyd)^UkAC63%0K5}^Swgp{&j=%H*Y%vSzlw-?vx-f9q3|<%TreoT zB5{Oj<2T#WR1DU^ZC!we{B#S^w;)Mu`dm@9c`Nz3)_l>d_@O*P#b2-bY&6ya5=38E zHR6uFGYDx3YXDPs_Ailv(QWi_p#`9P@U)ie{cU&@evd8N0e!4z-Ot=2Lb=W;CfICr z_)PhfPgdY+_n&k9EQCb+O=BRWU@t`hSpKEzk3Q{zMTqhOIlL$NEaG?!p=7=y;4O8zdE0B zIT5a6pE1I8@orSb-U-5V32v4?MQ`raA061Pltl~VAL5~4)!LOEI&&omsFe}yy@mNe zyvGHz2y`>P_ktZji(S#6+7WGaKXi)8=;=A4zE!hWH^%1=N_@|sq&%S8c={wPj{cWQEZ}|29^L+o;oKD5s z5knd27me*0&01iCcqH@U@^lg(ra+l8s1TtzGqkh?|Ef?WO*(b~O?#^G2ovvs?lvm# zGWwd+d8BUU4eo>FkYn;hFvxF#JHO7SEYHci49BUl>#ehIvT&@hbT3;M!ii!6+)!B{ z^ZH?S^~(_^z!?JY`c4RRl`_KjQ4gr}b(;vEOYmnEzEpmyG>>-kb>&C2edoUEioB`@ z4UO+XUwavaN4g{l*GQVaCaCcQ33a1txthX+Ns&#Ov-a3@lQ~Aiaa+-9YF#B-dw8R! zyhU5m^)>>x61zjidI@IuMiW!;gg*RT;#;c(y=v(pLo2)&L4+Nw#r`W)3!^p4kv5^`sm8uTxhApA>=zKI#!IIWCF zLY#B#T$IUs|3IvYJEJL5$(TfM;(SUG?s{cUsl(Qw=n`wz`^fUQa+mJ>Geu*uKj_^z zzQ^L6MQOp6Op%K}K{GIn+6CQf8;V+G`J+pdik4UHt!0SXYsC`~udxM}XY|xAIw#+_ z#o0XEJ)#l0sMvHw$h1Oi+F)a(u%o=2nN7Sf24ny+isBse%o?2qMzV6^d1t_b%Sn05 zzdnFulYr%<{dan$x8W1t{se zPv@QJ#f=|_mqjE7VXB6oad@Y_IQ!f<%cNmG z^CLxD@C_m6peRkVQn7AH(akSS0aZ(4MS_v88T)RJZE5&&kzkIoF=_-=0Vbk|sV$UHBC`!(G@#Vs z;7)})@|w|){>1D*;T7@yrIgG>vS}~Fc*AxDzAEXIhmxEAbm9~uqopcQn2jIHA#_ci z>EE(%LGTP=aE#BBQ!mA$#SsE)-gzEB9uPxBp;@=n5~H=AIkWF}xIk;~9>>9Y7 zjUyRo2&~HqHHVFv?05A&CfvYvoM_R?Ecs2O$u}BhJa&K-!}fI@9|)*TlqX8?7#FI; zcftyK4;Tjk5JX^$J?*@1$G!wMb8|!-Xgw<3kSugM8nK*=Is@7%R96AoDM4C=ctFn; zvK+y+7=(2p82uWXEbfAc+dAwC#>qd0P^TpE6)`d|+25pi4tG1rD0Z)QV#rcFC=d@8 zQq=Z64K;>B>>H9n)_vTV@N{L=3EB#;mTTj&x6IuyqWqnwm3da#q^hk2Ps*MnYSQCBp(?p(5UymIcF=pOU zI3!a9!MM@AVlOOO85^eW-S-UyKmWP~BP>>we>k=p`xe0UHSUP>t1}&{G@P{4EJ8n* zjk?>0&TNfelWu&0i~R9zqX-PvZH`p73ZMhYAkgPQ&d+2=&^>dHU^7^8UAQII0E3^>ejXL3r1r;xFUZBQ~Km$^2SLaB{8Bv5ET!kAb zqiaP1ET`F0^j0b;U?%ECWPhp-bBZqhL~sH!DSgMTxCaWWZji*2yh0k_^9*sXqc%pA zfmzD=89C}1-W|LpvDGa@*LUp>xbvX|dJBr802R2%<8No8^8)L`xE_;2?Zh34yZXi!20qRsDXs z3fvofSI|+|b;UCj!Lmb1U28_FBvW=a>7RzA=U~AvZL|YDIZFsL__iQMMk(p9Q9)Ny}6+P(w!ec zE$HA&WKQY+j8S%QjRTUrla2zLY0-HO=c6ugkKQL2kPFb9B#YJ@#n71Q%PbCRP4?Ik zEH-*0{fxoortKGZd$UzMI0~3CEG)G~dn`%l8Is9i_`I2jVVx;ReW%2!`HSeGbHkmR z_T4oOUCd%{NsR5u4v0EX=CUP4gZi0iOL5SNcN4=|U(57BsJ;WwvwgkMOq-*{Plprsz{+CLUR{W;uAF!nQTUb*6@3ZA!xw26W+$((`(Iy#mILR7{N1(t}#HMTe+FQ<$P4imO7weXplXu<0^eXR!7vtUGgy)y*_*<9h*K2=B zm{}#-ifmtW0kUiZZoue`60%pbfTLFs>P z*VUQ)Ti|teeqioY6uI|;>+}vpr5|ygM(h#4z+vXDPEJ@QC5U@cJB$^qXmtN0+MeYaDsqL4=HYio4 zx>GDxyF{jZZ_uGS8ZfC=J1M5A4F@gn%o~v9mRdP2u2CC}2dD;nHP2@@y9GrdN!UVhEDDGW6e)hLy&sUk2}s)Gmr{b;&h{PV4LMh4I5aauLS_TijE>C zNF7NaCsS*|=yGrqyph@prW9ql-^EqX!VVM2I0K=^j3gOa8~Qy`+p-cpbYqm~&GegP z%~e)Ls^8EAVjj~Z4?H;|%SUB?R&81XlSf{1<8dQZ%)p1JQP*I)g0J_|uFzA>(D^)V z{jp4GlI4toM+XxL%VSE|*XyT9L$~Jbgc&>)RfhgG8tat)fj>6#m^HgKdc*`-!{&u} zDOt(85v9%KgHdNYMH=M9=tSY(i`GQql%CD1)WARV?TI2#T_rvdc=oM1?A{|n7;lUS z#H^*fzR1zU2B|v3YYIp?j3O#$p?Ipg4u3{;;3ZQ8Kcs` zn1Cr^s_~@08KGwgEVC}9w%l( zkdcS4mcRZ>+fzuk308V=58@-O;^&HI?xYB8(ki?q%{cH1C6H8Ey%Zejb^p1TM;_jj zez|M3y+>;cL&kZId8HL)H@`wmVRN*s5n4YA%2s0ZhTbSY?=A>$jQfNU5scUR$T$F_ zvCoXr2K8C_6eu7-Q_K|~k#~1Et}aO{XMC?RIGpBfW4#IgdGz3fm_#_( zRM}58PDO8W#@{`c$Sxw}tu~q0PW;l;#~Nd=k&XrkDlHuZWRwjNi0iG!>y{c$bQ;0e z+a1z3Ejfot=m1GC!M27noOS8&7Ve0Q9;vDEA~u3-VB`UCj3sjB*)s(LoE)Y~#b%I{ zN8+h_BYkjlH8^$rM=XfwG%o9!m0eZSUK0*!J&|S5S^GvJ7_+EziEA3|(v0)!#I43` zXQXS^0^D3@h$)J8CPx#T%`EBMblmuRg>PEk$ojlPz3O*qOTT^UlsCJ{PDa>j))hL~ zw5^kmq}-QcB5ROL`2+R0m@Ja!mHHgox`YC6AytqU;S$+<52Vy+ zDVFpN65ebbs@`jZu~~GO8<}X!Ksr+ow_sLlPZABF6)IBL>ZInf0@Btkgj*wHpG%BO zmZ;dMCGyWa`&fo9`+0LEBU6-j*px!m3z?wNrwO-JMs+TW)dbP!??GooC{)EF)olBR zWiA;jyE}A>@tCP|C`Wd7?q}xC;epe5j!%&fy;(w@&WvFwG(n^uMfW6Ja;Q!K!o6|z zve~ray>NBQJY4#*E_AK>J-QQT=R{6E+HCtV4ZoyG_W)je7X7i!=EIK-<7wvm4E`^f zFa7BNswvI^lae;-)uE zW121y8jS6(N&zr(P=);!yh7LZ?NA&-!vbfft|pItf=?CA#&?LG8V)FJ8n_6{5eoIo z#@@hmWPUv%+l$^Ia=5FWVC#g$K7cnt>;Z}Cxh4wM?hc$YCGUL8&#+pQ)CHJ0cIY|?ZZ z;gjf~hK!%#6;a~1_p%C8kC)woIOFF^YfwM8>8GO*4^$+X`=WC*C5&Gu z2lyM=dg~32oz}dT=x?{uK7sdzx%AOfAp$5s+{e7PjzrzP&y0yfmj_vpyB*@YB{8KM&rSlkOhBOExr zVH*_l_TciP|DA?YOfS+lyVuu{QdM|H*QFC}n`3;eD^uNlM|pEkaW8Y<=%=_30gOxN znsY&a+kvYnLxnIwin>~9*36%Jp(L0*6P2QFVV$qK$M;({Deb)^$zoQ1pyGsf97dE6c=p{!&6-D( z$V0Z88|quh@`bL%%_3kQA@EJ)c>&ot-DxCc$kiDZ;b1=K1~gblU~y%C1?c9p=h}MS z@i{|!_vvWg6&$XMAfmUDfT}!5KV6k<6f-k%Ezk_x!nJ~NZH*zC($wi!wfknV2q*Fh zHQegyv<_`c2V@TuRZzrn)$O(Ii#W7siBzib)B6`^2t%H&SSRPl;>{{q??1iOo*M6I zw>Rl|7@*|9e{}t~7xY+zi_sc*#WKMPX#!(CE+M)N+ zjG{NuGYLD!_4f`nSzQ*ooqfCOqNe~>RQnm@y+JW zb8u9}NV@Zt^0A=eJyBX6n$$s>iS3?d%$E-ZuS;MFVZDIac!ViW@*9GAetz)aKWN%! zmOF!6dImY;=oZc{OB@d*IUcyHtC`*_Q@E=u#rTfS&a*UgKIcap3&8i1d~aRm8XT_3 zH5&WEhZd|RQ1}J$jVH9f{}yqU2$qmQjL_6ypIT5`r{rp)jspBqS}SWt_;;vL!VWxnLL9TLwN(*BL6FaRLnegP*$D)R06nkj(j8VqQZ&} z;NED^7qSsH&rB1IO&Z%1Xcwt+;|Z-1C{l0ol3^s`CA1R69mJ5uwKey&{#N?<(7%z; z!&*x8uK4=i+#BFLfJf?rS31*^-Mfmit)joG5bv2(?0Ev?agHB4Jr%9EFu21LnOxwKELA!nd`*>=GwrI7Xr*!>_5cKdoNu0 z7|g>DKNxiIgz|r;F7cEHJ!56TtfaMZTAt#VpF+pxt%*P!2_W4#8%twn56m){!C)#CaDe` zKWE04%lr|%joSlkGwJD?~683#L%M1`bD zjI@R~fWk@s`GfpZ4JCZUJcq5K@EL>Qdg%mHA{^~`ObcmvLnffu{7olt-B@_2eN!O# ztPC?;V(CkTRwmlyx8o3sq377WtsIGK+;XkU{I6Xtn9DEi==QyfSQX zTpu&6e7;^@B0_QG*#!%s(9u0g`3&l*dVS|st&7Nv+pYp>jT>2KX)bzZtV_c&W&-}l}I`sV8>L&s$_{Y*m_E+8Wi zg$ExUCBJYSvK$@tUKw5}5E;xPYY6&`WA3(+SGa)3q<^R*vT1CC=B(eUnr#|WOF0%~ z|G^k!Lm8Umy+O(NGch??H*|)5pibhqur}^0J*qTj?Uuad}{6Cc>ow5F3+9cCxP$Tco#Wm!a6xf^(wNw)35`crqw`Mv9!RO|wR z(Ln+FB(_JK?M-u2x6px-B1<8=?GC3>uDZpfhNBhwQ|cXIz{R&G9|+uI}0<4F)cd9A*ToIQT>vSRX}Nhws10@U@D!o zRQ&F=pJ}eSHO{sHuRTz^V71PBVSQQ6>I0m&L!N=G_Ncdqw4cEXHQI~sr7EY)F)d-* zQPo_pBPk-&p=BvDKOp}xPYp_G*zf!vTq*ypM&R%D;QR)TP7eBpPX8A55Pkc7IT`;I zAel;*e_c_k)NGf(v;rg8lxxn7EN_;~b`TTOg>5JSU#^2M&grhG$5E*{JG+0B>Ulx4BguWCw z)D|4s4GpdC7sD(C>6N!jF1Tx4sbCGCh7W7~vvbGYrRL&RXX=u^0wZaQ+QsY7-m0+2 z`74g!*{X_KMT4h)cV!LyDgf+<9)A%TeSu3_yKP>FL}RO>q1YlNbiRtQ9O@&*V0qd| z&EqRYYdq-s1*8dP>w6*s+1jV(spGsImuK;o^;!>&ZTr1QVru#o+9|tXHtu!aSf|Vk z6wuIF!mVm4v;H%R>yz7dD1topz@E0|@@E$HYg zC6NW&f&tKm9%^G>{Q5*Ry=5z6P&DS4ZWx~_ya?bCj^LS`Qgo%xFy~#g7`6lX*p^Un zdf{*dx$mEG{!hDuh#=L!wgI!-AMxP3sTV{$|-IQ)nZCbEl z;h@5@U73P|LilpvTHm-CPI@$a8fIai-;M~~el!Qv0BNn%Y(JOrFso(=)MPZq%$@?P zxUek?HpGWNEU__#HnOApu(QDpK`Npxno9f7d!Xp=;=PjMpY?8a$zbdjmX-G?g6=sc z94MY))Fq!h6F{1hAFJk6%1H%#-ufgK`#VV?Ydiw$H}V22L)uJUOfv>0U!9pT&`fBT z@xU{w82|VPL>dV~^BJ8A0__qkQbpFVI`PbCUM;IYQN_g|uG>A<~$- z1P@It%0G2*6*SkcT{WWPe8^T7-;;^AX6OQChImeIZhE6v%wVIO(5TDRkJZ5MKwgjN z5)s7}gPHyM$@!u28M+SocEHs=_~8kg1Syvre1K)ZZkcmMp$n-*Z`uY`y0IBJL?m_i=a7*Qa3%nwb8$}Tqj$f zE_q|V-oI59n@eAXJF>{B@kP4{13~iu*VqAP@|cZ5%|riE~jc{*)J<>?TYP$qTrch|pSEs5EIW5&Ez9O#*SXwOTxJqw6fOBb- z&y1^0x>$D!nRq+`TI)PwG_c6mX{%f|osL(hI){L>O)+Fb7TH2_W+b@JU5c?W_)Fzw zY{EF#e<0cX0?xoH)g`E5dueRXNDRn{KUpyi!j_!+*;6)dtwd9uvYwE`G$CV)DEv!Y z!2gZaa`P51ZQbO&EU>iyprblDp>=i|`QMkX|HJF*yji_MK zRokXnZKl)2)kFT#c9bU7l~slp&8`bgMOgXu~? z#y>Bbk*z#G(2--bf*^^-Gr<+%exc24)3JRbQvKR^ApSGuol>@#aO~*8xG|uR?_)NcN^Q+9U`k?I``0 zwiW#q=4|z>wVJ+BGnIICRY5LxZ*i?s;e3ycLzTOX6%;ZN*n#6*v|O^iEg@kZidprC z_uz{(89SAcXb_46p!+7NSw!SqTxAwC`ITdHagaUKTt1YA;#6;@dJ)I_TfQl-z=Rc{ zeV)8Oao7XDEQU%!WoDugLlu4a+#cU=7<6(sms##8@Wys4?q6ob43f^px>cZ7lnj1{ ziN7|=7S14CgO9v9`HEoY$$K(+Ka1O=e4DHUUB8T9h1w9fpoV+FI^4rXS_{C(!`4_{ zqK5wQ?)e4$S!&n8+J9H+bQd@D8K!V&2%vW!PT!)0 zLiDX4H@JT!vwscEQ}lw=phGm07q*5tWcfGe^1dBYh}AT1J}ncO^L-;!hcFlXtL%?3 z?RyXzz1RJ5#DDZsyw#g6%ikGe{BL_H%D>GT|L&n2|E;-7l-HKTqDSIR#m;nY`!)Y6 zUn!BBXhAM>Q69llK?!#Ds9&CAyRzcM@>_gVO5|O>>t5U}x9crm;;LU>DAx?Hm6h~p zJ!bvv&!5j9%l#6e@KnHRP&7jlPCdS>UA)OAU_?lfR8(_zvW#Dhc2=)+f4 zi)&sJLjcX>M$3%CC=uN1EKK&Q>muSsF=l6KsamJ|e9O7$z-l&nNC17BsFgJe!rF6` zyZV}8N@i<3F$1uaQ6_5Mv!rxZT-ETwuCic}Q`hF(2W2xwY35SSw*+-ejFDa)z;EKw zA@rhT-_&ysOjh8IZs5@q8G|wepR#_Pi(Nm5qpaC>#jbv*!gm3)7nLvQt7nA9a?saB zZtu?7H@5>d#uR54m^&D6=_9s_*yS$E+RuMhiMo?7`sD8_arE6_{O2n1zx{vzn}?t< z_H8kP#J$(zVj-ZL@RV=cC=4c;Ea$8ULaqQ7p%ixvXucbrQ98&tjHCKN#!^Ay2kglM zVLueLPNpv}$@nyR!~R6?`mL|Kf$Y|_5(T^A>W=`+s<(vqGF=k13S2eyOB4X;20zMp94>S?K(@WdE~WyUP*93q2(+ zevXHl+L|+d=bdU{GnVo0T0d@C(4eqz0%NK!ibQ{!&LG;!9_Nv0^4 z`3uR#Xi~tckuD}w|ARzu>VC{7mR~)v#SomW41je0SJ&oj0N5{{bbVxAbF$YlAF8Ohh830l( zIQ}#v} zNAlOPH&=yP%ymnh>~(`c_Dq-1*Z|CS*CFpevVhe)Sz_lmDy06lclh6;g7IH%gTlW^ zQ!Vy;X$S&2UW#TC7kCSJtBU116cox32h-DnwwR{&O{?b;k8P)Z+5G@SaQ;BNzPLeX z?f4-Exr<4rCPR$2o0H?!TfDyj-NJMb9o_bG{e~db2IB>|oNIUU#L3v(#&xD4!ECdBBpt|X~pZb#$_fOwSl&7Y*l7vN=$ z?Xx(rIg`+VLc6;b2{x3u#(>=yUu#o^!sx>g;8PLv#mR{cILnirb>T@}$LoRYP0&yI z-K1jMxSag2GxByh!Zu-K$>Q_ULl|b(56O|UA$xm#z0$u*A7o_5#ky$Ozbf0M)j1Q6 zu+zAr2C}GZ>evh$brK3;Iu>ggQs+l7^@mLM4HkwND_-pAukypXg^%;2(s?*q25LM? zF&Qg#qp15viG54;-HmT`9tx_L>na^M8gMRrdanH+>-Z^0H7fI1jTTNUd-EIB@GOCt zJpiho-YM0tFfFoAlmcYy`04qgEr~v6A8SG}K{RGo(E&NXmfip#v7LisP~j#i;LT`| zl>N5pyxM%Pa{+f;(CdLsEjD^K6t?=jXJK%*@imOOtO>(S|4JUOCQhA`-!Q5EKYWLV z0rI+D(?Uv2GpxAp@`H>UCL1++RYd`dT&ulny_CqcKg#^hsb@ zh+qb%+XIV2ql7qPF~)Z1)M2YOA%bTx*+CFWpe@*I45dUf1_ok=cf%O-nPuzLC0}T< zJ9VxrRbb;YO|-dh!HoIgIaTg4aIms64E_?q3wKbL`dKGNmuy|l>aTMxguGh+;YA$X zh*jr4|FB^fIc;8f6q`zFw&xHBpi!)?JDv~$Nsv;`S5#DJ=y~U|O~I~Wq2EId-wiJH z(gili-L8aC!OnIuY(PV6yot!ZiBdQfaRg3UfueBA-OGLg(#}M985Af&=@^0kA!gRh zz)Y^At+p%nxM^hE;#F0k;Dyw${0w+uk{*uXLF4?Ns1MFjsC!6lW|aoL%pyV<49-l%vew%L|iCVX%io(f{&!NRHK7 zL*p5ForLrF1d3U^T6a~Nt2>*TdIjnfM!E`q`ci06gQ6Z_#mh-`+NSEK#ToB+hlhsfP; zlOzpu@Z+4Hb^c+OKBA|pzPRqeh*v;!fTUNEsGe$?f&~$+(ZWqN$X32}jxgmOP5Zte zIImcuM{r~_d{;zjCi4UMgFNjIzWp6z+AlH`YY>s3oYdZozvVhlX`b`53&pmbSUfMdP%~c}V4EJLZHWA2q>e$g9W9F4LIjh0V-b zCn=HK>x`h{5;Pf_zt_Xza0wvZ!dlwW92xiTKP8)oq2Wy*?q#zoVZmUJ-(AYD*M3&{ktU z$ehK?CecHKAFfnNiV}~j27UgzN#aYDA3M+;RIqM@A&z)(SK{}ERJCLTkBUkX$5Wx7 z5z4xppZwN{`Va~TTFZoVana;(cqY~01n9fQcY7gr1>o8BP^5tM4 zR<-0|;D~1{&M%b8Xl5)nCQy1kL|GF;lYVF4ieli1Wri9tzHYwVwdD7kTGKY(5Z$Bl zQunlX5=C%aH5l=vH~b4uYkQPv*$tKJ^=P!0eT80&IO>~m3#q)Y73d%009T5UQTrTLm6Rf&~W~;|A)1AimpW4qD3p#if!ArZQB*IVxwZ)w(V3@v2D9z+qv2MoOAE{ zdApsD^Rd3N+WJWAV~jax@1ytWo3ZuJP732Xv|zyAmld8lhpH)33l*;a6h~JMcXVTkg_6oLYWzNC1B^{OP^iH>1v>q^Rk!_82j_JCKFzyXD!7DUJ zco#ro9jm6yX^ytq2&Y4|lCJ>W-BO#ki6^U)ex{jjJ?ahh4mp88eS-zwH+Y5@EIEX9 z3~#*AHa#jp2ip9(#UJ3C{mrG^wo!0-m2`cUjy!k8V;6-bKrwP!d`fwOX$9r2rmVWGbI3yr1G`?{d#BJGykQwF(EBN9x%gKsU*ELYbWv2EJ~scto&vOb$raVHdHI~) zk}^X^y%xUV(d%@E2UqlT8A{EJDDw#9-8LXOBGLsGWYt+`=BA|f3`JUgMn{I^l~qT+ z(H+H(^cSoLox<CJ^L;AI_V83A!iS3mLslLGIQ44Lu#NB z9F<&UT=LKY)+BT0iuFMG2^@y$urgc}^$_FEs+gA$c#Iij$!J(*al*=!5)i1%^!<`X z`1knD06rQBGlmMMO-2Pvd+#(mISyhX=HN}I8n${d9Wx2qx~dkh4q~(_thV!*Hrpwi zyBL*iUn6}+cI@qP8suW&)VEzTj_5zM%f*-4`>{<&jVGs7f&2#54j%1dFc8)mr*VQi3i9>{Rd(vRDCdEn37+{U{)99;kR6L-P6}V zVoqm*VnY-UC&Rnis9VR&F(81~Eo(JrD?=ljnP#nIWE#C68s`G7aFneL6u1zK1^M|# zP^zft&R#M2DsQC)!6ukI{S41?AyW*uKD!J!9uNk>J5OH2;G8JD>eNxuunfxb69#a6#zM2&98ktc{s~7~^NI!KWXo2W)cjynVPB>jOwDSdVqReWi^B65q3pa|rxUG$nM5(SCnN$`KQK zkL*MFqmie9r<|xBDthb|zW+>vWXr`%Pj5x@gEE<2au=}SJGMfyCyUG|6V@iQO01H6 z=Of9&A1(KD6L(nu^KVhV-KCX(+*hUF{7)*K{a=-yrM&UCKb5IAg-wb-1*)&0k8wK~ z+M94-EXI6bp+D4ckn7y}G~LQ1Te~t*%HXH?6;#K72#ebe$P;u|goi1N2nf(F8TVK4 zYO~lub2Kz)kGckm?=-?;*C=F4b{GyB>-e^#&Qt0{ zD5$}XMX+5XS;aSAW^vzjz;;ZpBa^w zdQT=~r<oJsB>h*sE zcT|)@q9A&bb}L<3t;E&2t4gXq5ldvFM)(zuB7Eh;sYK|yz&FELo?4PVE;S9% zy&j&ca)iiX%)^|C<4vr_7s;;VLn}v9QA%Zz#ABB+j%78>pA&&&S8g@gWxGgC71M`y zl^x&C4%572jLbZl#yFdEG{fK$RYsDRP5?B0qE0bFyr?V>y>rP3lw0YiQZ?h78RF zExFArf%;{~O&fP$a)g2FGW=k9qYc(OtyOX=X^c(!a}S|oFEd+{R_wccbg}3P8e3#F zi|FBaM5ODQz%Kj>xb{VVe_T|5APdh2ElLuwy$K(`Sa#g^LE_w9Y|!+)L)m1LI?-2xDq!VslCj9tTM z+|d(y4VQe)hnHD$;Ev_x7n|Pugcl_3S*Z1EY+pAlOrO+&wgw-ht~0nN^#&n$Mp`ep z7I#{H2>-8X)@*RZ8}ao}bn%ZH0{`taxRY zgDw{x)my~|g<%Z>d+LsH2?G6AOS|@Jy%z>10x&>~Cvy>0-ia9zJ49uSQHFm-eBtt) z-)^dM3?PTJ5~p`YJ;I>(sIq25xd0s~ZK*BUGD5s#TS%A~uYX;HU&AynrJ1@!l<11# zU}dS!09f>;dy{0r}kp2S?N|_K7r}WD+fOtL0L!G(^qSsvtfN#5;x^Lnsu4tNm1uH&3mCV{ITiT=sW=!xJ&s z!l*Wxv^K{i=DvQ|t5Qk(VUxxZAZ@hN0nBZP`_yD8ez)V`nmvI&#;VWP- zUfd4CqrrlYa-2x=yn*^_-73!L$qOp)3f|v4TA;6pBI+uxQ1HeDJuf6rE?tpVbh8`X zAr&gMDq!4a`9J`eV^vlP$foU7n1^V4$fB;=B(jklD$jn_JWOe|DWZ`!_&55c8kSHG z&SY-3^feh{(y+xi$s*EdzvK{Ox}T57zm{F7F9xQ5 zCR>mIymkHUX2$H(hm{$gmeMO(eApa%4#>iWaZhQyWM$m}>OVAC?})BL{S%lr9~Ri=9}s zzazEHnvqGQjH=Hn#ad(uL?5@N5HEvZ$A2amow1!eZF6W^^P{H`XSTSLj?=OosNH|+K4waErn+CN7N@nDVu591s{l{MXqu%w}G2dMX_rDMaGsk-%iG3ySG~lw82P*^{_oNO1;D z8P6N+?710yz$oma56ju-ATQy=0SCcz(jM?LRZ8C7*6vJ9Xh@kUCsJhm8=ZbpA z5>do4{0LfIJg-U7E}|yw^qm3&LND;{OiIGYv@ka7b+w`SK}gLqPBfKymU+Q#U=Z4X z46_PU;locJX6sDBG{XgDCcKdS7j;uBpOEoO>NXC`tkEs2c?U%Jg}?%7Tx%ufh9p#7 z7$IWPs*G?=?e^6zQvsmgsT zf}P{J`FR{AoVvoTSPt!R*=y4+6|Qr026Fzw+aYtkBia|HRz{Tf;@6*R#%+^*H$kCoAE*u`q_HJH?I36DJe2n|z&ft|i zKpMY**k?Q-vVz5ppAV^S!?+Z#Fy1A?unBw8P6MB@wVewQ028OOyWzxyW;#5CX@N$J zdu!bvMYD-6wS+gC2?X#dO=M`toN^RQw?#RXjJ3=%B_iOM2^UFLOebjUwX2ZbJbo-I z9UTD&fx*mF(Fp!y+saq*z*&Z5FQj`hree>{n%E`P)kla4u~fK*dANAB94y))L6o*O z1`UqVA-WUg&C6QnMjVlSP;=s`nJCz>tZZNGST@_zi+9rBhm0>@cVGmkijT(ynEJ6u z*LV6!m1uYl4uxR}v3i!N->v7m7+jM!2f;cM#zV2>DJj`tZ!t)0J>B%n$*ppMs*Ow~ zZ%Q~yO`p6`_D6_u!{aWDM$J2FQp0SS;3pMl&vO{rP7+fs6h4eVm{zN(3wneGk+xv7 zWPRbKH@MYruJ@3mC4G@i)VPo}(iw;2PNBd|Hu{m*PZF#Ok}#Tt zF4V7b{Z)fk5#`s`F+So9cf6g3W87jLl0biigb+1PVVuC_4eiNjfTJ-bdMZh_Pt>kM znHdM3f`I=}j{)uTB1u}#kPGg;duAw-V4h`^hgg?z{Y1Sx^Bc$L-VTw1YRI^uK}I1?suDsMyCi+@QFr7Rzs27M%w)#%l2>N zPGw}?_`SEFDM8Zq@9@!h+Jm~@#v0@FoZwpUVR=G*ZcN%g)VYtwKKVnHTm!$9Hxwxm+r%nzdd8%iep<)eEG=D#5 znB2^!8;tx{ns+1I#he~iV1g_2@i(=nrC_QT$8wzL(GiE#L!==kbF+K1rFRh;al}hcuCFg}m(2 zGJPMm`1jA>96kH&A^61Nd=G{)9OAxMt+HV_iO;$!&z;KqO^EKaefq>_^ygf*#y4cP zar>=NU^=5*`T7ViX)jQJA+E6ea2(@nzHR+)5chA2GfC-Rh%44@Yt*d+MjfD5vTwmq zL-GO+gIX+<^n;*+?~rZja~VF9sYl<9xe-K;nt|~B$v^7mQf4l}SeuaLnC95!`2KwQ z3jf6^=?$RZEh_XBaN!wI{?1<3XrB4r>OQI}eME!A_$6)vz;q(}jK0$(jb6TaFB_Ly zOVZBS1dBc*VPD4ftTGAl8aNg?D!(+bxGFQTH;G!I^NpeN!_% z{B(K?KQoqEQyt#8)IEIw#e4Mr#e25%O}^HZi%HmBhvc373eDXnLI1ql*q&f>v?DR? zwsG;McHTc4E>W@&&Q^u}J)RntZD{R!e~ z8DCUZtxPU^Y>F8m%ku?#gYy~+Z=y2LkPGOQZjT`Ber`_rFR$aI0z)*%L&&qUs&~vY z>`?$d9YIHSC_@aHrmR3M2A`gQ8#B<3i($hztMMn&bs^C+O>G(10jOWV3jz5SJ-S z(xs#y|4#rJRssCSw=Y$?oCOx`Yqzb-!Q_VLWajJj>(rF~H$uqqlrKy+X_~3I275%{yc{4Yz5{9;{su!<8d>M zf5|D@>21zB$P|+ZRq{^wWK}@&EQ-ZgKiT z0KrX??|27)2kCnH876Yq^K=%&l)a+6D1;3{?>L#sY1Vb?ZN~Kb^X&=B0MKB_vS*pv zVMVC(BhVk);nzywx4}OS(zZX?x1-0?V&g^-E`k|QdwGMwC(x2DGth)z--_D`Oh=oG z%?>(_NQC#|li5|;t)YUmu_#yK{-ljirfDchM+jMmIfFNkPIsJJn>s0?1WzE?M>sDG zo8i^iglEc%0#TVlnz9NvlwfcrG^I;aFMu~d1Xm25z5*KTqJ)BFo~8s^sO|KD>v-}wDMIJk30C% z9Fm$uX4Vnqnp6}g19vQ3O!M2k%DL|F)x>q8wH}@VQ^xC)kQ>rf{$$E~tLRnb!VnX# zt6zPCw{TeKM{Uei?Qw6U#^@&n6UI=R{xTbO&|(cfZyh7Awp9@InxcW98}v4}Ux=2r zN0Hf!^KT4HHyqBiX8=@@n;1xBX+Z?{oUF4pkuXIh52p>bnOYSKPRWm;ir8B9G@_4k z`N5G^EYxuB)+)CcSFl0h$W|{>6bQm+`m^rdF|z~=isT51P|5pXzf(CkRwM}9c`0qh zxaMcS(K#h-3C97iaMf2G|1da?6P|w;+Wz(iGXNYqLv;y06>tlz)fxu2P9Ct3~EBY?p7`wBDX#DgO;S&_^>8u4YF|6aLo7y%G zV#}9?NHERI8L!6`uO|>@=1eFM<6*=qRUUceg@s$7Z@4RFLD+m7?Os6$o1S>o6=Cno zc(fh$4jIoUaXKNo|9xl@=|i(bo?jHN(<;*hCboOP-Lsxc+^8~R@zKa|14`Y-7m@IQ)ZDgV22{a1;0YPlQes4noE zZ5nSHGsy}|D6JN<$hH`hS*$jiSO^zs8%V_m7Z(vLJ}r_<%@z+kUfuG&SzcdIP{J=jrm`IU(Hki5;-5&7QU2}(ai z?bQlWbN5|iAd8QpPtN7oD8+}~@{F&WEFn`m+Jq#RFnaDSQaSK_3TP1LQxVpO#KcDu|!4dQpl@aA?V}Yg7rQYei!am58b88wH7{$0X%kBG@(yQ_|j`G)K=9l z5I)NuEMEuWR-fKidJ`6b0YrTZb-+IA%125 zhF(Wd=R0Kk`pG~{y*vKx?vUzRApGhT8|sh8o}lG|U0lB9P}llL*D|*jc&@7is?EIs z*(XZWuU{N^vOwkE3$PV?)5O>5y?88h8-_^vUK0NJYJlC&pSv3XNvfOP%#DN%fQ1!D ze9P02k*vn-hGerlW;RrfhlSf;XswI6r#9@1`PI=ISC1C=x^UGK2-F2etA0DS=YMHO;&_j zFIZ|h6vI^*&AljSn@_Ahz>)=`z9c$PA=$9ymAYa~*0+_gB1IIc5mVg5@p$#h)USQI6$Tw=8)*kHRkQie~d#4NqY}8VpA7GPPXV_%b9!cBre9-d9x+Sn4FiDTOAxY z(V$|^dJv63cIqKV3@GoYkl;yw9sZ60+bknlkvg&u**j-Cgn{{89JCQX?|Aw~`hf;L zlMC*TQMG&5&|`{v5rYeQ;-*9vSgnN>no8LU88`nRLm^-_)H&%@O_pa>+Y#{;&d@}p zmp`w^9n|7jU&x3T$gI&AkvHZ&>DkC8vIQ37_+QmIw+)y>O>UM<*+}5n~bD6J3EB1@Yj-5#2SnB}^p9k-#PILTYe2Nyf+iCkiY-lQwaQl3Ei=yM6$6%4N1cn6|@ImuZstowuwPa$dGVXb^>y zY29U@PlZx&ZTO-;H6ZHgtUPgWqK7m05cGXSg=4W~!SNufDNdu@FMQF?_p|@Yin4Zv zs3nxlHcT16mOk?=ma=t~GYLA&S+1J-weaj@|Ca?p-npbzUDrF9bynk^2a;C&`mb8q z_#Y3iuNu$jrR<%DbE%6B^Q|7dBV&WmB^HZb37C^d)<$w!oH8S-Th+3iFy0uOBHXz;4MjSB=EgOLqeoWuhR?}|S2#TfC?n@J$g2OU7@L?ZaTO`l>w z#bm498Aw$K_LQ3I51&LA^C*bpB2s#@ZbWrEED?!PLz;=`S%ZHL5^U&47%9;o1gf!& zgdi@4iMfq7-O#?b>PY{I&v)a5LOI7mtA)6 zis>Mmz;rTXj?Ojq%Ldw?svod(;y*x}s_x>>3le7@zA)EbyvmMB*G!K)_p9D=|DdIk zK7ALle~~9*v-b~O|FmCa(-F!5)t(hiGzl{+*)M&L<{Vv3i(|ad{$VWak~1*4fuV<% z@y3qQ6+Y2Q_XlMYOnla8de;tBV9ZW*O+oCHJJU(VQc$(m*)Y%_CR=UF5Z{$Er2>sc z{M^1n?&SM#Hy0W0YK*w|-NKXX3I}g?g81VZUKC23azEM3Sp|04&R_aaD$&?fj2A`>qR@hv)Y%hOZdLeyyzf;b7A|PS$tnYHeLi zy3rKFDxr@}zOCOAJ`kEDF<0^k!?Hf84$RYB6G)V>!B$3<7`>0c5__-KGF)(i8L|6E zuq>BF72cIRFmMOhF&7bJ#)($#|M^J$Fr?U=piDun=GHR)APE7nYEntff)pVZj#Fs{ zX;Vlxr#xtAdnSAmRW8k{e_gkj|0JCgK10q246aX9@0BE+0m4gF;mPZ>Hy-!7k}eIy z2(uB)RIxMH4*c1V^J}{{2ROA4%FcVxISc`^MIsOV5a97N_-^@H)(lM%vjKw-mlrst zFlHnh1d@0N3rZ@$((D@gpFb2`)zP|t2#po(qhM2*uTaQ)5jMc2ZOVZC2s71l7fTL8 zw9MQxW)LHT&xdL#E|0O;DHO$>%<;ym505`bcG3g7BzV0uysiK}mbQZapjkK3^(S?$ zqdHB#ed6Qax|@Sc_g2eu+<)BgpAv^gpzhnB)xkGBFQ<^Pk-JxLInm)q9P#%qyqX$~ zrj`}7*<9=@efkwr!<{X6XJLcr(yL8H+m;Gc5SsdSoq7g&i!5iNAPyrnZu}hFd@y>_!~!bOx@U?$g;**w%p53!xL#B=jt#6(DaMd z9%GeSCi~KbOo`=VPy)4;w#ATjrEZ5Cqfl1aPvYr-oul-AgY>wum#7_|FLt_Dn2PUs zsN`yl%4Yyxzq{t;+RBYa9+t*zjAx?QcLRQ^y9IHSTr4Ae>uQhvTAPY*FQhZ}s?YJN zK78w8&-JR^nk1XN1=Yt5R_}4|@#@umk|Sd0RWQ5XjCt2g^(_zIH<16KFK35-+&g>B z@rBd+<<^G>mm1;VkD`z=jj@*hs)y+jI)WP8JX}$Nv1%1tIcY*uneGmTZlhM`T~!pk zF<@$|$P#%~fdh#+r?h0Z6DUuLMu4ynZKM&xCo{OnCld@_agS_KYQRc!M0afnWL)Z< z*DEd@R&QcaEWSxBB`$?((xluC%FvLnUpi%9x;2sZ6`B77#W(pf5smH7;j zlyvS-`r9HsziFNANikm2%``UoF`9{l>L48scrHtkb8Kj5jTLyh(y-&0(3(b{ncm{% zAKxV+qE#z}Bg!wJ$?rE6%gppyHyA(UMLUU`#EtkH4Ysf{7fX&&#d?{#if?{ozsOry zl5+>~N9H_&F4G*VQ83RXB$p@*B`kc55>T$} z@v__Zx*~aSBE;=DCRFLS!?uksfgI1G8qI zOt_;&%nQ>lRMdnOw?Vi2GWV(4Jf60H)naRmOh6Gp3p>#VWAulG%U19F__iMN^OV90 zQpT|zw9oLW7f(VaGjG}K42?OypBT)7(TJSl?Yy#^qO}D)J1~E(8`}*yJUTj{Bt@aZ z8aJp$8P2xtg0K=wC@XNz997s~Q{~0dY0C@~bB70G>pk;wp%HwqU5{dL?1{-GJ|g;o zY;IIfi`-f>ElNlDvBlBi{(cMS5~ZQ$k4FdGCaEz_F(Z0kK_fUG7=5pe!q?U&q&7SO z9@o9)z2Qh_cp*q@&=Ef{sU7vmnLY~Ze#8+_Hc z!nzc(wU6|bMQU76ox;%dT^au`c(cLLfR}Cis|}YE)knht0d?_s5U+SAH+Y!>c4NL!o@61zKZBbckx0fl@e$a&41+??eXQNI(+(fkndi4B3(S3!+j-IQ!Vqj9r5R0>hHrF}$@xe!=0FcTW%MNkNbmQq5Gu~zLAEM6!G?DkOV z${I&V)xq+&XV$|5o4B!;a1y`xgfsc2^9skDe?u-t0Rhb`^JOu8*Sv({sN&UdS+S>> z0zE#~X0BHU8>5aEF1p^GE=vh8NkKlhFXggqLP zqyTOOp3MLDdkd)>n-=KpTb?fh-t5dA7j(<0Ag+|BSZKb1Sa7u1wE|xN0t6I|U|~ts z=*h}S=QPc2LScghStvY3BCl_3-aTt_PLCM&m|DWH_K>0J4`RgZpPKsd^(_b<-C()9 zLKJ zJK|S1kEiwb^mkw{#cql4D|*5UR$LmWaki(|<+fI+@Y*qy5mF>!D9s=$K)4Tlq*C#8 zlYv5%WVyZMJ%-|OD_%?BO@m>Ut4JW_qh_81X{ZL!I+&@G6^cW7u{)kRQ$BIc}P z|5FOW_v*psgxx=&&(KVda7>R$D1+RxSBHJ-6z|`BSI7EPf>y3nwTZr~=qIQcDW%CH z57zXt2R^{ToHrqLl;m+4jSe{Y@@^C9dk;XW-r|jIb?O*N3v+7=xId18j$K4#TTij=c}GI(P=k^rxv-izJljb1GHV@@#+i}_&E|%LXI7r>o*SmaLoVIS7c(>HxEMHu zT805V6TJyekx7P^vJ(V~=6z4h9v8$&WC#E*mSZIgxH7}JngZJ%3MH4`8MFDBu`Jq@ zcX7|cNxWoqg(~zRF7!b~=o{6Xv1B4ubWi&72kG6xFPrz>KO2QEM3A5Cc!=aZwGf}! zLpNVPzJV9wHxiOAL1xsS7SW-+O<tD(asipKYlCs->HC(RI2xszVrrJZO{Ai(Xd{3EyR0FPYYI`bsGj?Q+UTj?AL!|cu^Mfc>L^QgTLB|Ux-4mn-xwb!gTT93e z_etlH$s!l{Lz$oyq3Q8UnDhnn($>#W#5Y-Mtj_#VYB+?)qJrt~>Q7l@E(7tpb<5UY zHnm?}W017{_Zs`+Cz1bWvhHZ-_c^WMps6!iW@cx{g3Tgv0N^qGBJ{*CgtaxUb_gTPj*}G z3*^8IEuf`>K+j0K803o~sK=2O$j8s#PpEY?&la2z6Bke4vG13ivzsoDRLN)Iv}YeZ zEAPs!OSJi%<-2EG8PRy>dWs`|EaDt2 z%+c#MpN!mNl~ym6wYh_g>iYVpRrB}pEa@Bgoz^H^zF>pu`li%R7J5q}R%s_Bwn<9p z$~bQsYKk-Vo!*I)yoVO1BlO}9+Vy6XqPLl@3)9mL4DFDgVX|N$N~%wnBAQ zSs2P|dgJjZHH4qnQN3wCu@TcAmVw}VHOREz0>eSIVo{4qY!L7`VksN_q_c{4Q6eFPMN`J9Vo|r23PrOa zmv)IQag}nt(bDRCc-$xm4I@(pQf0u-cY4qxB z#O;(k>N3{VtbSqjFj+4oRF+!UV2nQ$ba{>_Kt+xRfx~r=r7@~wf}mo8o=AyEq3$BB zLX~)hU;7I! zQz&g3MrX1b3<+3{kiF`GU%lb&qHq~DeVu-GF~ZtESXDdFmlIZSL9gZf-BKhA8b~Ww zG|Vb+%(T15iND=8EH0zhV{sd=4JOhf57lT`TECk4DZ#{m6`lmON#L=pMaZayOsp@B=HjGW1u%o?W`S)e zDgA(_>G|Lknq3Wn8nK zYiv(C*}5Hv3o_f|R13+Eb0qCc>Ni4dHr<(-aI>zvZB2Evrt7wtBF3w@w(%ENa2H1l*VYlYln)78sC z?z|Oms&Z-fUU*T2W&e3zfYt2xrvOXO;JNf*0On81M3Ij1=+mAZrOj>U&`;=Rn>(i! zMgJVBFdO@M?1LPSEB)RFShCD^J7dR`yWOgjV*5 z*OlE(vJ3R^S26obgh$z3pSo7ph}WXsF4^Coe|wS%xnaUqqJR7LL++n^75+Kn;Xgc` zlZk_&(+`J#5dkI&Yf^mz2)uKJVO1?!uLtlX@NG}!MGA#ddAScDW+Lp73gjWxr8*J7CAqXmwV;V@=q}Kulb)@F z%&Hx!y;Z4%xFvJQ#)H&4J%m)sdl$wbBwu7O;K|ixLlhHU45@0OQax0qE=LJpqnCei zyQ-#@Y1=HjTy;lSWPFCvHG2m(42^o|mX=lBYtctyX`go7t*)@{cqRW5+MoO*21N&B z7W9T5+8*`Wejpst^`^g(aw?OtqhuLV{wqg9=!pGC7-S%tcy|q)kPrH5B#{_xf8?W! z9mGb}P0Gqpk1Jn4;$djgQ1{1@Yhztck6}148C-k7GcfxNfuASG_=dCt3C%gKa}R=2Da^NLAz**?Acjj7s7Q^#`M4vFvyN zHLW`Axt|h<{xS(%Qllpi%EM;Aae|@CSb|>TghH9Fx$Y$s26s6<2AXy@O3j|3JSg1d zb6}#@=pUaHi0m$T0b;HzA#jAI6s2&3p+iFoNJ*Fjsx5R|V^eMSIIgN;)J2udJztIUKy;nyTNkXIRWEF34 zQ6Z|AZ&_Lf8q%vyB?8Z+meljeA#4zFOS{5UVXWM~_w;85;VjB7qh;rhD0J%3Q#2gY z$XGKhf2KiAteOBT!IflPo@^q_W;gOh^L&o8R3$4XWV}RrXw5Nqdi6MB!SP`|vv4jX z&Pd}n7Wpm(p4d)96kkH9(VQetFHKI563UzV6&^Y*Np#h{U{+p(rNx9riE?-5zvCWQ zv>rxi6!KY=zspsoP;rdeMzV6t0VeXZH-^NOrmvyWgX5)yl0 zYm+eMep0~c|njx^driuQHLeiJx>!7GrIiKNCoy^a}VWgcKtCDNnX2ZX@+M#nD9!c%t{ooo4 zdG&H5FqG@%31~Fc9uPkP?+X)Q`c(2RDjtotEkvVTn^ChM?wd|;P-6|Q?y$9t85{67 zr7r^upsDL<%EuZjuex=eT0ZHRmIioBH(Mqz(zKUWZ8GC(FG=x{1u&VVr)M$GD@hU` zwm+j*q-wQPItxqB)SIWVU@``lvAbZ<;$ZN$v*c)M$;~lmrxh#U zM!d9@ahYUHL-^k|I|jCkH?);;&mr9a#5o>JNs}iSQXpl#KoTvaiS(lVyf>QcJc~+4mZ;Hq~^U7>D$dT`T3~iPUG=O=~KyeYf50P0| zDfrndkebrQn6;?TL1SdT#k?~krv!iN7=}8F2q-uShTPEIGVA>ypkD55jyH>o z#S!6%goeV?qYSpU?gfSnUCbbb>pbl#-OC&t<~sr-Tt1?=#~&K*)S}=Jrd#aWHV6Kg z0N$qgPCc2>bM@xCQArpzy@de@a`(y$5aZX$#jWc2X6~K1X*xXG>U@N}EZ=B7!{v_= zrD*6I!4VaH8eqgB=qMjmlyZ=8*O(hKsLZiPs2zx$r-_Ay_v}9`j<12nvZ?s<5!kES z`L_GHJi=P0vXpA1y=1Ur>5=Qw6E;3YdKY-5w2>F7A)Ckjh*_&;X0TR!JA}&5Axq$w zn1R3bJY&!DjK^6OS#8LOSk#dry7_@-xc%9VjRb8j{QL(hZo82e5@U4xrVpG^Yb46~ zFcJ;h^lCC67#kPR+4ZLi!Qfb*;W97$SPQSn~`f6!Lv%Im2#ODF;~)Mc3|4 zISlc|*q)wI*HWrJhWZE_YPta_OV4j1B%T$5o&;8?Xt#>fR>A{7);49hg8F1`M%xh! zUOxY-Anyyp()7pQLy31_t1;?J0H6u;PeV!Qzij~jx7qh#OcE_WZ5m6ZWpw*WW zOvY7{!Zxlskiqd_JkxBGlegsk{qSptj@b=2ICAK_8$;KlYGz_n?K|Hh2ebubr zRXFDkj@l~=!*f~e;o)iuGOCrhB~x4qV}N%$BhihmL$aj^ulFMjqu3?qtcZNVt%Ba~}em)48$o)U9_!-qNii z0QVu!)$;hK92mfRq!w_N=5J$586Qjp&LqAQSe)I)HF z>Mc_s$Eh=yT4f>ZcvEt%@U3-DvvMJ&;x$LICv*Lub zyuZ#ki)#6L^H-XV7!K*_ivw%6Ve5yp9Ir@L>I4kwy6&DM6`NK-y*~2&QIq^il>2LL z@lny;!3AL_f%4Ur?n3Z_Wwrj$(s6JErb7<)CKHuuTuoVi8PQ=DGwJ+DYmfPb-H-Sn7l$oJ?GgQG(IZiM$OAyAtmqElwzJBZ;jzp#;1`U8Hj zSE*AM5evW^Wi0}i2F6C?_?Me0?|s1(CcRHs*+qibwnvx~hMpXP$D^C+|I?f}7y2vY}kFd5R-F z#F9tIPZp0@e>UOlmOvbvpk$c+Lh`{g))SjV-Yp&kZ(oCWzgqNKRe;;S<0$sM>@t?l z$Q!-(!?)H4Te`K7oNk%Mwig-Q5{>;L42C_Z0FpbxLPq@%^KO>LBOgR_y;x_f#0n2o z2qmQt#org`uTfk6coP}b;PfXz8oz9VAOyYMpx)dQQs+a+_n8Y1C7#* z%{W8%>_3nJ}t2_vUKb1{}7p<4z*fG!|`i_gxgiYs86|Sz^&cio06}6vUJI)c9 z6dz?S8e4yic>_#)LAVXR1w5=e2mL<2B0vZvDND=VgJfn&&&Cgz3vdnS#VX?HZPzW4 zKTXDdX`Dnm4S7q&?woc3d`Bhf(DIN*Sv!9a3O*JA?;9V$dEMZ5pCsj+e{d~-tvUhc zESFt#a9_R+X8(>Q zR~%2K-VRqemRQuAJUMbYocQREyg`z3A*NiM1P3oNf2tC2%gGpskGBrQL4cJOTzwwmFykBUzXKKl<49*=NTK+u{bfal)D5*?5 zt6(aUd*tk=E*P`sJ^NqCHJ8Qd#@5=0o7k$k^*ACA1Ox zg(4*>O{dV(s8g6IRZ4|KL@NMSc&CR#qc zveIC7Fh1$_cDvMa`AzLwCdmI4v+zrxA7+V0WeJUE4Czy9py^j_5R_-vea^&7e7%Uw zJGR|rpka<>tIw{x)EFdZy5)TLe>i)mC{4FzUAIz|wr$%sD{b4hZQHhO+qP}nsLI?q z=2+P6oU_K6dtYU1UtazZy+@CD<9TUtA-pEd=n7e=M($bBQ79A6mS6<+C$8jfH5cp$ zuS<83wKH6-1R$hVcAY~!k~c$i`*#|Gp>$`p*`sfpEqSmY1o9W5R+@wME~r-?gl$4# zgO8ZS>Bm5UK0=qRMqW&_s+eBh09Hi1jV=Z$KwS&oqsfvP(cYkj#C{5%c}9x{e21w4BO341y9gkvl3eJCex8868MS2+IAadcVF+4VvdAeS>)hSObSo)diLYE0DE zG5*4I<7S*mXi9RY!F6TzUy*AyQoEIRl*-w^5F!BlDC8cB)~-deRw zKHwOb%hfep>)7VaaQMyAQF5G@LLW~7m$6y%n0O9ai7VjS*y_<>K9;JsEWkJ$fvXus z7t82}B|QnnUlm;+ ziY@p;It0chz;&e?>sOlOi$-3`R%H+%jf}1F0<6fvo3`~Af*SE#R?CFt&zvV`jU=p6 z(=2(wG=L7H|Ci#O+!9Yl?>lr6|1osA{@wCN#LV)$1!83QUuDqW zubv|1zc9pT+^lBxX7$9fc>F;uRUq*sSK-aRQl(;f>KTCP7$82@-}|>l8B>-l(UG*D zn4duJ;fzp{wuZMupvH@Hpt!DgymCDqYuk<)g;B4wQ(HIR-q3A3f4V!o-d_qveoXI4 zqZPC=M8Z@3YQ-qtv4DTAn-sMXzGYGV2GUh9a+LY;(iZ3if7wM`uH`f&}H@wxiRVhj}n43aCw@jtW%VVb7FU+$% z)|*?bDaPrUj&07O<-2tiYuQ+*Fj;6(qa&eDWf(1yl_yW{Z0*K&m9e5lQ(XjC!N*lG^Sf^A$#bha=G?E z(cct*Lnm0A-`KB?msJ`rhAs*0a?XzwCnZ{k;97^J7&X~vEv$`EG4CYVDM2t-FlkPg z(#=_^>vhi600BS0j$F&2SUF0tWs2XiCS7mRw89_~g4)f?n$74lZ+la|#Y)5Pl1Ij& z5r{z)?Mt;P%;TqZ*p+$9<>OKFDA-u|fMZB{=tL9~EVDi#yrLd{MN(2$H`6y%;=~d*detTWe$o$iF(|QiV+YKMny)( z+=T_o7kO0%ewbPL&EOd6pfO_D84ZG-!nT7F zaF6?Nuoi2|8{AgdLJiuvP~f2~Hzc=&%9LSkZR29zc`eEXU{0Ae+0?;!>{rujr_Q*J zT~s3|^)df^+tg7ut~T>{Q_Rg>v3&8<>hn@}$}U6CJocdAqhk9_J@U#&Kx`J&1?e!W zdl&z`fH4?$#LQ4WQncvI@fd&gh3Sz{WQGo)R~@WgG<3luA9?`16PT?aflWBklPTCv zfRw8g+%FxebRm#K&;WOOKH+?W*)9nV3o*SLb_enG1{{?i$Ap&y=8$FBDfU*VRXxKk zU4M~@=AnK9E8E*Q4+Rj)qs?c12>W^;#-r7Qj0JM&NZYBcU=Z7qU*8mek^1(5#?Lf` zZ;|j8VrUxN&xZc6&>=ZvrbGkHST$q%mdHpQ?Bn)FoDJOQ=D`C}oY$z&%M4@Q7XkYZ z5Alvq5QYzAgG*MT)f=$}-odzWN5`6dX7AO;rsj?x*przKt>Ccc+PNga;kec#oLhX= zFA#1gr>n4NZ9{*Guze2y%nAy<9G}XJ$W(R-B&tH8j;d`4n^+4>PC;HpFy&KDEPaM| z-gOQIu@Ils_T;=aXgy)0?%Nq++wrvT5|QokOMxwR@=Zm&Ps?4-caO2nv!eSveUp-M z3=O%*ZaWHCZP(ts62$#d0&=STT+S()x03bLG7z8-c8eB6#M0#Nvm%r36!1z`!^~Evc zcH&>DMVQPddnT6 z{qUY?PuE79*NApKfdy#EbeMz)IKA}nI&pNcu=QsL1l<&RJUB>p{$0F8`xXckcTWiJ zo`U_XcJW=_5`!(mo}#^v%<8MM2Ie*@Ova^M*yFxG+N4&NR?BM$>DB1efLP2;007fUbJ|M1i_TIioQQEa z%*$1efo6r3+!%`e0K~<0FNe7cU}i)favpRTcQ2v^fAp4Qw!{=mNU)Rxf_D&*Z3vo& z$r61Lr0G_%nXfhyv%-1xO!tti5}*fgh^yaMh#qtEgrADlH;e!WyH%O`ktt^c_O2!F z;pliv&;W2C>oE}TYJJTng9XVmhJl$Rb9om!%`Xx5HR8->^8Dm7rW*#fHoKb3IA>=U z1t?KZ1hzD1#5#Z^*xe-Zc14V$7|71%-<^iU2EjJ_j+>%Lx@+@aK31MA30b84es=T~ zu>?>zUrU>*gqk((>)$uwxDKzRUYJixSs{YjzzO+&f5`UK22pffVl6$UAgx^O99 zljIAmnKrar#{aCIAp`j9h?#___$dS`TUgZ^!vtg;Sg&bDwE{-&M}u~JqpH!l+=hAc zQJR?Km6=nVGO@1lx*_I~&QNH5)rH~jP>_&bd!u3o;AllOSvK~K)3P(AWwwIw^SwML zcTSUIdL5QjDlIuLqeZYe+wo+iF5z<+fPR#5J#k5^tvFe-4$gKUsmr$HY}8fq1x-;0 zC!rzF1m?C#1Xo5iLn@vfWkeiYOLyz%-ds2MnE0|*ROOPPkz&gT5|{;~h;n+Wj5em= z6XlO6#o1(fr5W>t@0J)turK=E-2$L>=~}!+hoo`s?iKMQS+8?*EVa_i=V6-2@L`rR zMwC;1fGl`T#8Z8M&#$OI$JJBKCk@tl$~3xO4i?q7SS{n)$wT&i!GYGM@XWbG%;mJp z3ywlXn#}?$1;PE(isDobY%yBiLl}=PB>j5Iv9&@=BNZ~^MMCRps(sDb;mXvdXy(g= z3gV|;W9P}?>sRNoO@X~9#uD0ld@}|*XR_#l$3+K^* zWqLe-+|%tKDX>-;Yo>u7Wb)guurD%zrfR;Yq`%kHu^hp0+C=y4C`EOAL)MgSg;uez z9^cQAB^i~v)OPl!PS_M&*}3?I1yxiQozA$s2GPU580q4UPl`(hJ# zlO2e@)- zCd^fN_~s52-Dl8&;FIWp)>V602fYT&5n#%VJnqONI<#l(mGiR?$&G(7g5fjF=g4BZ z$a1O2Xfw3WGldGV*3VVtTCU}jZ^A;D~!>%gyYy1^gJN_^9|LBA$($?k3H3!Es zMCWq2V?zH>0u`~9U-b2yuHwy7d`J}*R9W9umRvxRg5iDo-CO?h^}Tx1(+?>x07x)X zPK_MK&=ogkwTfjo#D@aU{EC1rdZi=W?elxG@Pxs^4dz%nWx9>TB|{QsnDHr#4w@t^ zE^Z)P=(++91K-i6L+Y&RE%ZaPmY4dw0>Hsogd0T{^xuqRTD4gmK51$O7g^-!e7{1x zmwwOh7E9j?288tY$}(|Jla60u$=GYsGb3!3t*57UY!pT{z@i>|^{fXcaNB^YB}dQx zKD}DhOec&SwuE@Fc!1iFQ=u!qFL*uY+LN?5sK4P+?__4sr7I{2!Pl|09={L7341p8 z`aNN>UUED1+(E7pR)40{Ua7E3J6g@t<7V#8OJ1JgBA2X8!mxS@;onK;qBVWQD*YZW z8gX)xPk_pXlm#&%i(`9Fj{nd~lsu^5ovoBGRkY+5jE%7?h`q`SE?ilgH(*HK_0|`S zoV)6R)X%+0-p}CP{<_Pc39LMA3)qP=QAXW2)EZd2y5BOu|K*qFG(fiQ3Kc!&B)WHb zON}FPr-$KUt6h|NJT<6C`Q*Vq13Bf?iWG(QJu=HnJ4}o}T-jsT?;!{@5i$n15C+G*D#xEn#&}=i6XM0 zUYBwcR*5xMF#Vlq18fa2Kz4=)B$jnKclyY2A+k#j=tFrdlj6`O)>!WgFPXRMZLZs*ac@8C6^pZARAFgl`t|P&K9ATHlSZhxhU=26k00sH-Re#bby=Lcc-AU zDSp34;R@j_>*n%3v5OU-{3vC@8irKV?-|XiPs!vAb$8570JK32n&deDHCTapQFfB| z!lUU&W8YWgiW#L1&dSIG_=`2WUqoG0lnbY%+zpc5i~?sU!*rS7R7M_;Mc!92ez9ti zl4McT7Wqjt@DE(|Ff$zZ6jHn^w4HGu9iP0EBsWTNZcy1s|Dr^yBvE-#;f%n%4L-P< zm;g$AY>*)*KK%fdBxTvBbnugRzmnwDr9oODZ++wm~!5epl5dPo)cT3+%#%Xw@&=`cpv^uhIM+X-ATMGPOt=a;5<|7ZQhv zL(X4sN4Ipx(Z3-21=xawZNZt%!bJA9fkb05!sIN*LkDt`RR+MbW1Qn1u$tdYaVA7j zZ#^CNROhb9P&iCioQw_&w3K-;`kTfi9k8Dm9_DD|y%W!=QI<5SJR36r5s^>;@eypj zux{{DZzdrecmmpbagL?^*~REwO#IqNX;VFJX)se+SNl5W{N1z|Vw4?HyF+B#V2ipD zOABAhfyg+6$ESGGIsAeGedHk6IrZ>1rAKeXBpR1c&dsBlx#yHMRM$48l=Hn_Tmun0 z3W-|=tp!FEt8TX@!5Q5$?_0sjD{gPVQ)?ZDC2#_O*d|^4Maqq03yyw zA}EZ8Gs3O|I$!W%Qhs#=t-~(VWP4-welqooo(27}3WAj|O=vBBQrPg{xOG20+Y%%^eOA0Nag3ZH|cBjQtSr8Gd7;Gj-B)BVki>g|hb)Cna7 z7b2#~)N*q8nEi1&a=ujQF(0F$X>a|^35`htZF5Gr%%yq6qjszH)HW-L#4Lrc;I@4R)4><+*r|=dZ2d)_mt6QCe^wD2dlx->!|x?>DJM%uGY2Ebzx?v7 z4Zpt$TN+szSvx8iIsQkNM&UmRJsnnBxxW74o@3_X^i^E9ivDGRBt$`=>$g0O2^@wl z!I#te-+&&|{{-}iC+UZs4ZEd&(7${Wda}}Rd3(G-Ya>vF4eu&}K`UsMwJaG9r#R6+ zYS7KEvSBWOszCip6EMt$3BZJA7Bx8BX9~I%0}_bn7*LA&(>~;XIrP?Q{7Px}n%>1a z@77JVkRX;$xD^o6@`jH!$*c0%bhjdxt8*L(uMB7@75EhdBtaH&iTg#p4D z@z+l;Ykf@!U0j>jg2Ao!elRTp+_}MFhB1FpCi{N*1g9ij`Q%1Vb*#n#4M`!u$7Pkp z2LqEeF!9uMks}yOY>HK# zI{)?vf7tMS*U)nv5QK4qrOEDC)pvc!K|Sv;S;?w43$`5MSx_-EXS9@(1Ic&<#eR>j z)NGE5PX;KkhHOL~Gmp!{S1Z5v1gP*9K1NhiOEjHPfKr8r6?>_a)`oQ;nsDKIsI>ry z2sEV6aMYi%Uz*Xy{qoO1515eZJrc2n4H3eHf5Nmvj|sU4&yJ2&7Mq5dFb4C1W<o2@h8ZO>yUEBFa^LV$B)h z<@*B28S&}e8NA74_i%PLW?j2Ffb}@m?0NY^bMi6$dDU~%391X{vt&!kQ;-LnBehS% zHIhzQ>6Xo$V=x7Y!4re3_JDxdJ(*5hi#Stv97NO|suKT-@cp5t_PD}RdT1s7w10)! z6KKb<%cky+3X>Vx3&@6fz2)gc+h&gy+= zkSvGnJu39KqF)=6Y0<1E?hudUBlHgk&2nU^ARu?}6Lp<(AX9%nP>=?Pw}=(^M;eb( z8-_OX({fl*tkTaiog0F?bPuUnP!i~G8ig5Pq)oOojn|w~tQZBiGB0LFnx`sL*pH8A z5P>GtvdP!8mFT+kK+44RP*ubMVOfdH4884L69 zc#HV0IYD$m!G^J>5%TN(RZoW^0h4tG1-e6afF)-BXUYrmrd_Cq%eg>KvlF4Mip z^yB33)PvUSJ+*2_k`*4VGgC?|WmF0R`^w%M zh<+bKoQBhta^XAFurjz2aqz0E%z?i~QLgX}%^q*+^H|_CsD^EzR~dk!7oDS0ri$UP z$#~CH&4v>5VSmIf-vMAP(+74qVF65er7|0^l^XzxDpj7l{uptRG!Pk~(#RMBN9J9+ zV|1nPu0B9*Ej~zTos2F}v2pc)YSO zcM*ZX*u^4x7lYz{S?*LiDwp;Q8SOWKd^TCirv9;T75k{(6iL!gP1h|;iyFkELb3Op znZ1tcVJy3fnHX$p7u|!RMS$()Y2{&iov7hN!fYu;)ZiO;UZ+iQ{&_0~WE(llC9UFiTz}H2ZT}5XvoKs2^0P0cHL>xsFJ8rrGg1Fq?P4wEjX{tpJXpPYtT~jP zRmk|ncp?~{hl~1Y$|Rx_)J=WXlGphw%lNW{Wt#M+55U~X2MC5ha7PfCF@TS17y)C- zGxj+B7XMt%8gU;tKaJ#_WWmA|W0lVVu{wxPgk5ZWhlEe{24_>^!l<j97{fy1d$<$ zQEy2$UglVD?5j;l3o*?g3=Lw@Agd<0(1657B?yH)HZkzQm{}R4L*DTz;UjrAV}a5{ z-B1ftXdrG3Su%JzGJI@04bI8N(u$nb`6WTf**aGND?uHbQ- zAt&AJ?)PeW4Uk~W^!zB9Mu4B=K-O7irMrtI=ks+HKKWcFivP7y^o=>z;-bs<(4XUJ~!c7A0$Q_!wN@}suR;2u`46a%W+eHQK z<%ZeTA!GNLrO%1X>%BEtEXUkE*94neZ`bE1LkWeSQd;Mt*s&rp2y-I)0FpEqMDu7q zc>Zih^fq0H4+w&(fW4R)40swJVjOUKtR+Gou=?0=QT|5%n&iA2Nz;?orFS5Xc1y6u zwGSY1IkSAeII2ZZKyvxJnjHsjSSKKtUhutz4R%WqU(&U^wg+G}nm?Q9QVThtoyX{; zxQ-TFQvS@uB@=e!4rhNo>{95C?Nyjf796dZmA_3`^Qndadi4dhT-mH}xwul%4Y

YLi>YDftFb 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