From 1de1c4e7101325332a120e9e038f2010e91bb413 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 18 Feb 2026 05:13:51 -0500 Subject: [PATCH] Reformat Code --- src/api | 2 +- .../client/renderer/RenderAbilityBeam.java | 30 +- .../client/renderer/RenderAbilityDisc.java | 2 +- .../client/renderer/RenderAbilityLaser.java | 38 +- .../client/renderer/RenderAbilitySweeper.java | 8 +- .../client/renderer/RenderAbilityZone.java | 108 +++-- .../client/renderer/RenderEnergyAbility.java | 11 +- .../client/renderer/RenderEnergyDome.java | 6 +- .../client/renderer/TelegraphRenderer.java | 4 +- .../lightning/AttachedLightningRenderer.java | 8 +- .../renderer/lightning/LightningBolt.java | 2 +- .../renderer/lightning/LightningHandler.java | 15 +- .../kamkeel/npcs/command/AbilityCommand.java | 2 +- .../npcs/command/CommandKamkeelBase.java | 8 +- .../npcs/controllers/AbilityController.java | 31 +- .../npcs/controllers/SyncController.java | 4 +- .../controllers/data/ability/Ability.java | 103 ++-- .../data/ability/AbilityAction.java | 7 +- .../controllers/data/ability/AbilitySlot.java | 7 +- .../data/ability/AbilityVariant.java | 2 +- .../controllers/data/ability/AnchorPoint.java | 24 +- .../data/ability/ChainedAbility.java | 35 +- .../data/ability/ChainedAbilityEntry.java | 17 +- .../data/ability/PreviewEntityHandler.java | 1 + .../data/ability/TargetingMode.java | 15 +- .../data/ability/data/EnergyBarrierData.java | 56 ++- .../data/ability/data/EnergyCombatData.java | 3 +- .../data/ability/data/EnergyDisplayData.java | 3 +- .../data/ability/data/EnergyHomingData.java | 3 +- .../data/ability/data/EnergyLifespanData.java | 3 +- .../ability/data/EnergyLightningData.java | 3 +- .../data/ability/data/EnergyPanelData.java | 66 ++- .../ability/data/EnergyTrajectoryData.java | 10 +- .../data/ability/gui/AbilityFieldBuilder.java | 4 +- .../data/ability/type/AbilityCharge.java | 5 +- .../data/ability/type/AbilityCutter.java | 21 +- .../data/ability/type/AbilityDash.java | 12 +- .../data/ability/type/AbilityGuard.java | 28 +- .../data/ability/type/AbilityHazard.java | 55 ++- .../data/ability/type/AbilityHeal.java | 10 +- .../data/ability/type/AbilityHeavyHit.java | 4 +- .../data/ability/type/AbilityProjectile.java | 13 +- .../data/ability/type/AbilityShockwave.java | 7 +- .../data/ability/type/AbilitySlam.java | 8 +- .../data/ability/type/AbilityTeleport.java | 22 +- .../data/ability/type/AbilityTrap.java | 159 +++++-- .../data/ability/type/AbilityVortex.java | 11 +- .../data/ability/type/AbilityZone.java | 444 ++++++++++++++---- .../data/ability/type/energy/AbilityBeam.java | 37 +- .../data/ability/type/energy/AbilityDisc.java | 64 ++- .../data/ability/type/energy/AbilityDome.java | 19 +- .../ability/type/energy/AbilityEnergy.java | 99 +++- .../type/energy/AbilityEnergyBarrier.java | 104 +++- .../type/energy/AbilityEnergyProjectile.java | 245 +++++++--- .../ability/type/energy/AbilityLaserShot.java | 37 +- .../data/ability/type/energy/AbilityOrb.java | 28 +- .../ability/type/energy/AbilityShield.java | 19 +- .../ability/type/energy/AbilitySlicer.java | 46 +- .../ability/type/energy/AbilitySweeper.java | 91 +++- .../data/ability/type/energy/AbilityWall.java | 68 ++- .../npcs/entity/EntityAbilityBeam.java | 25 +- .../npcs/entity/EntityAbilityDisc.java | 20 +- .../npcs/entity/EntityAbilityLaser.java | 14 +- .../kamkeel/npcs/entity/EntityAbilityOrb.java | 12 +- .../npcs/entity/EntityAbilitySweeper.java | 12 +- .../npcs/entity/EntityAbilityZone.java | 245 +++++++--- .../npcs/entity/EntityEnergyAbility.java | 144 ++++-- .../npcs/entity/EntityEnergyBarrier.java | 34 +- .../kamkeel/npcs/entity/EntityEnergyDome.java | 19 +- .../npcs/entity/EntityEnergyPanel.java | 14 +- .../npcs/entity/EntityEnergyProjectile.java | 178 +++++-- .../npcs/entity/EntityEnergySlicer.java | 35 +- .../kamkeel/npcs/network/PacketHandler.java | 14 +- .../network/packets/data/LoginPacket.java | 2 +- .../ability/PlayerAbilityStatePacket.java | 2 +- .../packets/player/AuctionActionPacket.java | 28 +- .../ability/BuiltInAbilityGetPacket.java | 2 +- .../ability/ChainedAbilityGetPacket.java | 2 +- .../ability/ChainedAbilitySavePacket.java | 2 +- .../ability/CustomAbilityGetPacket.java | 2 +- .../ability/CustomAbilitySavePacket.java | 2 +- .../animation/BuiltInAnimationGetPacket.java | 1 - .../request/clone/CloneTagListPacket.java | 2 +- .../request/script/ScriptFilesPacket.java | 2 - .../kamkeel/npcs/util/AnchorPointHelper.java | 15 +- .../java/kamkeel/npcs/util/BukkitUtil.java | 4 + src/main/java/kamkeel/npcs/util/Register.java | 10 +- .../java/kamkeel/npcs/util/VaultUtil.java | 46 +- .../noppes/npcs/AbstractDataAbilities.java | 184 ++++++-- src/main/java/noppes/npcs/CommonProxy.java | 7 +- src/main/java/noppes/npcs/CustomNpcs.java | 20 +- src/main/java/noppes/npcs/DataAbilities.java | 50 +- src/main/java/noppes/npcs/EventHooks.java | 6 +- .../noppes/npcs/ScriptPlayerEventHandler.java | 2 +- .../java/noppes/npcs/ServerTickHandler.java | 2 +- .../java/noppes/npcs/ai/CombatHandler.java | 1 - .../noppes/npcs/blocks/BlockWaypoint.java | 2 - .../npcs/client/AuctionClientConfig.java | 36 +- .../npcs/client/ClientEventHandler.java | 8 +- .../java/noppes/npcs/client/ClientProxy.java | 62 ++- .../noppes/npcs/client/ClientTickHandler.java | 6 +- .../npcs/client/ScriptClientConfig.java | 50 +- .../noppes/npcs/client/fx/ZoneParticleFX.java | 6 +- .../gui/GuiNpcMobSpawnerFullscreen.java | 6 +- .../client/gui/SubGuiNpcDialogVisual.java | 3 - .../client/gui/advanced/GuiNPCAbilities.java | 98 ++-- .../gui/advanced/SubGuiAbilityConfig.java | 61 ++- .../gui/advanced/SubGuiAbilityLoad.java | 2 +- .../advanced/SubGuiChainedAbilityConfig.java | 89 +++- .../npcs/client/gui/builder/FieldDef.java | 98 +++- .../client/gui/builder/GuiFieldBuilder.java | 103 +++- .../gui/global/GuiNpcManageAbilities.java | 67 ++- .../gui/player/AuctionTooltipHandler.java | 4 +- .../client/gui/player/GuiAuctionBidding.java | 16 +- .../gui/player/GuiAuctionInterface.java | 32 +- .../client/gui/player/GuiAuctionListing.java | 20 +- .../client/gui/player/GuiAuctionSell.java | 20 +- .../client/gui/player/GuiAuctionTrades.java | 30 +- .../gui/select/GuiAnimationSelection.java | 1 - .../gui/util/AbilityPreviewExecutor.java | 60 ++- .../client/gui/util/GuiAbilityInterface.java | 50 +- .../client/gui/util/GuiAuctionNavButton.java | 16 +- .../npcs/client/gui/util/GuiDirectory.java | 56 ++- .../client/gui/util/GuiModelInterface2.java | 2 +- .../npcs/client/gui/util/GuiNpcLabel.java | 9 +- .../npcs/client/gui/util/GuiNpcTextField.java | 34 +- .../npcs/client/gui/util/IClonerGui.java | 2 + .../java/noppes/npcs/config/ConfigMarket.java | 20 +- .../npcs/constants/EnumAuctionLogAction.java | 28 +- .../npcs/constants/EnumAuctionPage.java | 2 - .../npcs/containers/ContainerAuction.java | 1 + .../containers/ContainerAuctionBidding.java | 9 +- .../npcs/containers/ContainerAuctionSell.java | 21 +- .../containers/ContainerAuctionTrades.java | 93 +++- .../npcs/controllers/AnimationController.java | 9 +- .../npcs/controllers/AuctionConfigSync.java | 4 +- .../npcs/controllers/AuctionController.java | 64 ++- .../npcs/controllers/ScriptConfigSync.java | 2 +- .../controllers/ScriptHookController.java | 4 +- .../controllers/data/AuctionBlacklist.java | 2 +- .../npcs/controllers/data/AuctionClaim.java | 16 +- .../npcs/controllers/data/AuctionFilter.java | 33 +- .../controllers/data/BuiltInAnimation.java | 3 + .../controllers/data/PlayerAbilityData.java | 15 +- .../npcs/controllers/data/PlayerData.java | 4 +- .../npcs/controllers/data/action/Action.java | 6 +- .../data/action/action/ConditionalAction.java | 4 +- .../java/noppes/npcs/items/ItemStaff.java | 13 +- .../java/noppes/npcs/scripted/NpcAPI.java | 6 +- .../noppes/npcs/scripted/ScriptWorld.java | 8 +- .../scripted/entity/ScriptEnergyAbility.java | 99 +++- .../scripted/entity/ScriptEnergyBarrier.java | 36 +- .../scripted/entity/ScriptEnergyBeam.java | 31 +- .../scripted/entity/ScriptEnergyDisc.java | 49 +- .../scripted/entity/ScriptEnergyDome.java | 9 +- .../scripted/entity/ScriptEnergyLaser.java | 82 +++- .../scripted/entity/ScriptEnergyPanel.java | 30 +- .../entity/ScriptEnergyProjectile.java | 175 +++++-- .../scripted/entity/ScriptEnergySlicer.java | 27 +- .../npcs/scripted/entity/ScriptNpc.java | 2 +- .../scripted/event/player/AuctionEvent.java | 36 +- .../scripted/wrapper/ScriptDataAbilities.java | 2 +- .../wrapper/ScriptPlayerAbilityData.java | 2 +- .../java/somehussar/gui/AnnotatedGui.java | 2 +- .../somehussar/gui/ImmediateTextField.java | 3 +- .../gui/annotationHandling/GuiEditable.java | 7 +- .../annotationHandling/GuiFieldHandler.java | 6 +- .../constraints/NumericConstraint.java | 1 + .../field/EditableField.java | 51 +- 169 files changed, 3967 insertions(+), 1556 deletions(-) diff --git a/src/api b/src/api index ae4b84f3b..ca2980909 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit ae4b84f3baf19c2998449e4b40ac33bc6a92555f +Subproject commit ca2980909ee597fa5b062ca945a2cce533277afc diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java index 725e440e5..d1b969921 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityBeam.java @@ -14,12 +14,12 @@ 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) @@ -182,7 +182,7 @@ public class RenderAbilityBeam extends RenderEnergyAbility { * Uses averaged perpendicular vectors at connection points to prevent gaps. */ private void renderSmoothTrail(List trail, float width, int innerColor, int outerColor, - boolean outerColorEnabled, float outerColorWidth) { + boolean outerColorEnabled, float outerColorWidth) { if (trail.size() < 2) return; int trailSize = trail.size(); @@ -213,7 +213,7 @@ public class RenderAbilityBeam extends RenderEnergyAbility { * 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) { + boolean outerColorEnabled, float outerColorWidth) { if (trail.size() < 2) return; List ages = beam.getTrailPointAges(); @@ -242,7 +242,7 @@ public class RenderAbilityBeam extends RenderEnergyAbility { * Render trail tube with age-based fading. */ private void renderFadingTrailTube(List trail, List perpFrames, List ages, - int fadeTime, float width, int color, float baseAlpha) { + 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; @@ -392,13 +392,17 @@ public class RenderAbilityBeam extends RenderEnergyAbility { dy /= len; dz /= len; } else { - dx = 0; dy = 0; dz = 1; + 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; + upX = 1; + upY = 0; + upZ = 0; } // Cross product for horizontal perpendicular @@ -417,8 +421,12 @@ public class RenderAbilityBeam extends RenderEnergyAbility { 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; + frame[0] = horzX; + frame[1] = horzY; + frame[2] = horzZ; + frame[3] = vertX; + frame[4] = vertY; + frame[5] = vertZ; frames.add(frame); } @@ -429,7 +437,7 @@ public class RenderAbilityBeam extends RenderEnergyAbility { * 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 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; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java index 76ffc6cfb..7f1a2e12c 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDisc.java @@ -9,7 +9,7 @@ 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) diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java index e26f33489..543dba44c 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityLaser.java @@ -10,7 +10,7 @@ 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) @@ -69,7 +69,9 @@ public class RenderAbilityLaser extends RenderEnergyAbility { // 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; + upX = 1; + upY = 0; + upZ = 0; } // Cross product for horizontal perpendicular @@ -98,29 +100,29 @@ public class RenderAbilityLaser extends RenderEnergyAbility { float outerWidth = innerWidth + laser.getOuterColorWidth() * width; GL11.glDepthMask(false); renderBeamRectangle(renderStartX, renderStartY, renderStartZ, - renderEndX, renderEndY, renderEndZ, - horzX, horzY, horzZ, vertX, vertY, vertZ, - outerWidth, laser.getOuterColor(), alpha * 0.4f); + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + outerWidth, laser.getOuterColor(), alpha * 0.4f); // 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, - midWidth, laser.getOuterColor(), alpha * 0.7f); + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + midWidth, laser.getOuterColor(), alpha * 0.7f); GL11.glDepthMask(true); } // Render inner core (solid) renderBeamRectangle(renderStartX, renderStartY, renderStartZ, - renderEndX, renderEndY, renderEndZ, - horzX, horzY, horzZ, vertX, vertY, vertZ, - innerWidth, laser.getInnerColor(), alpha); + renderEndX, renderEndY, renderEndZ, + horzX, horzY, horzZ, vertX, vertY, vertZ, + 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); + renderEndX, renderEndY, renderEndZ, width); } restoreRenderState(); @@ -179,8 +181,8 @@ public class RenderAbilityLaser extends RenderEnergyAbility { * 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) { + double startX, double startY, double startZ, + double endX, double endY, double endZ, float width) { AttachedLightningRenderer.LightningState state = getLightningState(laser); float density = laser.getLightningDensity(); @@ -229,10 +231,10 @@ public class RenderAbilityLaser extends RenderEnergyAbility { * 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) { + 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]; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java index 10705d762..2dbeac3c0 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilitySweeper.java @@ -104,8 +104,8 @@ public class RenderAbilitySweeper extends Render { * 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) { + 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; @@ -121,7 +121,9 @@ public class RenderAbilitySweeper extends Render { // Calculate perpendicular vectors double upX = 0, upY = 1, upZ = 0; if (Math.abs(dy) > 0.9) { - upX = 1; upY = 0; upZ = 0; + upX = 1; + upY = 0; + upZ = 0; } // Cross product for horizontal perpendicular diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityZone.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityZone.java index e9775c542..ec21a268a 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityZone.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityZone.java @@ -8,13 +8,13 @@ import kamkeel.npcs.entity.EntityAbilityZone.AccentStyle; import kamkeel.npcs.entity.EntityAbilityZone.ParticleMotion; import kamkeel.npcs.entity.EntityAbilityZone.ZoneShape; import kamkeel.npcs.entity.EntityAbilityZone.ZoneType; -import noppes.npcs.client.fx.CustomFX; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; +import noppes.npcs.client.fx.CustomFX; import noppes.npcs.client.fx.ZoneParticleFX; import org.lwjgl.opengl.GL11; @@ -373,11 +373,21 @@ public class RenderAbilityZone extends Render { } } - private float ringR(Ctx c) { return c.outerEnabled ? c.outerR : c.ir; } - private float ringG(Ctx c) { return c.outerEnabled ? c.outerG : c.ig; } - private float ringB(Ctx c) { return c.outerEnabled ? c.outerB : c.ib; } + private float ringR(Ctx c) { + return c.outerEnabled ? c.outerR : c.ir; + } - private static float sin(double v) { return (float) Math.sin(v); } + private float ringG(Ctx c) { + return c.outerEnabled ? c.outerG : c.ig; + } + + private float ringB(Ctx c) { + return c.outerEnabled ? c.outerB : c.ib; + } + + private static float sin(double v) { + return (float) Math.sin(v); + } private void renderSwayingAccents(Ctx c, float r, float g, float b, float a, float height) { if (height <= 0.1f) return; @@ -413,10 +423,22 @@ public class RenderAbilityZone extends Render { float frac = (j + 0.5f) / perSide; double lx, lz; switch (side) { - case 0: lx = -c.radius + frac * 2 * c.radius; lz = -c.radius; break; - case 1: lx = c.radius; lz = -c.radius + frac * 2 * c.radius; break; - case 2: lx = c.radius - frac * 2 * c.radius; lz = c.radius; break; - default: lx = -c.radius; lz = c.radius - frac * 2 * c.radius; break; + case 0: + lx = -c.radius + frac * 2 * c.radius; + lz = -c.radius; + break; + case 1: + lx = c.radius; + lz = -c.radius + frac * 2 * c.radius; + break; + case 2: + lx = c.radius - frac * 2 * c.radius; + lz = c.radius; + break; + default: + lx = -c.radius; + lz = c.radius - frac * 2 * c.radius; + break; } float swayX = 0.15f * sin(c.time * 0.08f + idx * 1.7f); float swayZ = 0.15f * sin(c.time * 0.06f + idx * 2.3f); @@ -467,10 +489,22 @@ public class RenderAbilityZone extends Render { float frac = (j + 0.5f) / perSide; double lx, lz; switch (side) { - case 0: lx = -c.radius + frac * 2 * c.radius; lz = -c.radius; break; - case 1: lx = c.radius; lz = -c.radius + frac * 2 * c.radius; break; - case 2: lx = c.radius - frac * 2 * c.radius; lz = c.radius; break; - default: lx = -c.radius; lz = c.radius - frac * 2 * c.radius; break; + case 0: + lx = -c.radius + frac * 2 * c.radius; + lz = -c.radius; + break; + case 1: + lx = c.radius; + lz = -c.radius + frac * 2 * c.radius; + break; + case 2: + lx = c.radius - frac * 2 * c.radius; + lz = c.radius; + break; + default: + lx = -c.radius; + lz = c.radius - frac * 2 * c.radius; + break; } float flicker = 0.3f + 0.7f * Math.abs(sin(c.time * 0.7f + idx * 3.14f)); float lineAlpha = baseAlpha * flicker; @@ -506,10 +540,14 @@ public class RenderAbilityZone extends Render { int side = RANDOM.nextInt(4); double frac = RANDOM.nextDouble() * 2 - 1; switch (side) { - case 0: return new double[]{frac * c.radius, -c.radius}; - case 1: return new double[]{frac * c.radius, c.radius}; - case 2: return new double[]{-c.radius, frac * c.radius}; - default: return new double[]{c.radius, frac * c.radius}; + case 0: + return new double[]{frac * c.radius, -c.radius}; + case 1: + return new double[]{frac * c.radius, c.radius}; + case 2: + return new double[]{-c.radius, frac * c.radius}; + default: + return new double[]{c.radius, frac * c.radius}; } } else { double angle = RANDOM.nextDouble() * Math.PI * 2; @@ -519,9 +557,9 @@ public class RenderAbilityZone extends Render { } private void spawnParticle(EntityAbilityZone zone, double offsetX, double offsetY, double offsetZ, - double mx, double my, double mz, - float r, float g, float b, float alpha, - float scale, int maxAge, float gravity, boolean glow) { + double mx, double my, double mz, + float r, float g, float b, float alpha, + float scale, int maxAge, float gravity, boolean glow) { ZoneParticleFX particle = new ZoneParticleFX( zone.worldObj, zone.posX + offsetX, zone.posY + offsetY, zone.posZ + offsetZ, @@ -587,7 +625,7 @@ public class RenderAbilityZone extends Render { } private void renderRingLine(ZoneShape shape, float radius, - float r, float g, float b, float a, float yOffset) { + float r, float g, float b, float a, float yOffset) { switch (shape) { case CIRCLE: renderCircleRingLine(radius, r, g, b, a, yOffset); @@ -621,8 +659,8 @@ public class RenderAbilityZone extends Render { } private void renderRotatingBorder(ZoneShape shape, float radius, - float r, float g, float b, float a, - float rotationDeg, float yOffset) { + float r, float g, float b, float a, + float rotationDeg, float yOffset) { int dashCount = 16; if (shape == ZoneShape.SQUARE) { @@ -688,8 +726,8 @@ public class RenderAbilityZone extends Render { } private void renderVerticalAccents(ZoneShape shape, float radius, - float r, float g, float b, float a, - float height, float rotationDeg) { + float r, float g, float b, float a, + float height, float rotationDeg) { if (height <= 0.1f) return; Tessellator tess = Tessellator.instance; @@ -701,10 +739,22 @@ public class RenderAbilityZone extends Render { float frac = (j + 0.5f) / perSide; double lx, lz; switch (side) { - case 0: lx = -radius + frac * 2 * radius; lz = -radius; break; - case 1: lx = radius; lz = -radius + frac * 2 * radius; break; - case 2: lx = radius - frac * 2 * radius; lz = radius; break; - default: lx = -radius; lz = radius - frac * 2 * radius; break; + case 0: + lx = -radius + frac * 2 * radius; + lz = -radius; + break; + case 1: + lx = radius; + lz = -radius + frac * 2 * radius; + break; + case 2: + lx = radius - frac * 2 * radius; + lz = radius; + break; + default: + lx = -radius; + lz = radius - frac * 2 * radius; + break; } tess.startDrawing(GL11.GL_LINES); tess.setColorRGBA_F(r, g, b, a); diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyAbility.java b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyAbility.java index f4aa9c318..9496f06a5 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyAbility.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyAbility.java @@ -15,7 +15,7 @@ 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) @@ -212,8 +212,8 @@ public abstract class RenderEnergyAbility extends Render { * 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) { + 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]; @@ -270,9 +270,10 @@ public abstract class RenderEnergyAbility extends Render { /** * Render attached lightning arcs around an energy entity. - * @param entity the energy entity + * + * @param entity the energy entity * @param innerScale multiplier for inner radius (e.g. 0.3f for projectiles, 0.95f for dome) - * @param baseSize the entity's current render size/scale + * @param baseSize the entity's current render size/scale */ protected void renderAttachedLightning(EntityEnergyAbility entity, float innerScale, float baseSize) { AttachedLightningRenderer.LightningState state = getLightningState(entity); diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java index ecdba16eb..8653bb27d 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java @@ -95,7 +95,11 @@ public class RenderEnergyDome extends RenderEnergyBarrier { float ny = (y1 + y1 + y2 + y2) * 0.25f; float nz = (z1 + z2 + z3 + z4) * 0.25f; float nLen = (float) Math.sqrt(nx * nx + ny * ny + nz * nz); - if (nLen > 0) { nx /= nLen; ny /= nLen; nz /= nLen; } + if (nLen > 0) { + nx /= nLen; + ny /= nLen; + nz /= nLen; + } tess.setNormal(nx, ny, nz); tess.addVertex(x1, y1, z1); diff --git a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java index 78ba58aed..9bcf473ac 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java +++ b/src/main/java/kamkeel/npcs/client/renderer/TelegraphRenderer.java @@ -299,8 +299,8 @@ public class TelegraphRenderer { * @param partialTicks Partial ticks for interpolation */ public void renderTelegraphInGUI(TelegraphInstance instance, - double centerX, double centerY, double centerZ, - float scale, float partialTicks) { + double centerX, double centerY, double centerZ, + float scale, float partialTicks) { if (instance == null) return; Telegraph telegraph = instance.getTelegraph(); diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java index 2910a9566..5e9e2342b 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/AttachedLightningRenderer.java @@ -165,8 +165,8 @@ public class AttachedLightningRenderer { * 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) { + double x2, double y2, double z2, + int segments, float displacement) { List points = new ArrayList<>(); points.add(new double[]{x1, y1, z1}); @@ -257,8 +257,8 @@ public class AttachedLightningRenderer { * Create a lightning arc between two arbitrary points. */ public static LightningArc createArcBetween(double x1, double y1, double z1, - double x2, double y2, double z2, - float displacement, int outerColor, int innerColor, int maxAge) { + double x2, double y2, double z2, + float displacement, int outerColor, int innerColor, int maxAge) { int segments = 4 + rand.nextInt(3); List points = generateLightningPath(x1, y1, z1, x2, y2, z2, segments, displacement); return new LightningArc(points, maxAge, 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 index 6cf6e7d3a..e077189ab 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningBolt.java @@ -243,7 +243,7 @@ public class LightningBolt { 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); + new BoltPoint(end, new Vec3d(0, 0, 0)), 1, 0, 0); } public void calcDiff() { diff --git a/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java index 1951666e4..d3f9aeedd 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java +++ b/src/main/java/kamkeel/npcs/client/renderer/lightning/LightningHandler.java @@ -5,7 +5,6 @@ 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; @@ -19,7 +18,7 @@ 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) @@ -168,13 +167,13 @@ public class LightningHandler { /** * Spawn a lightning bolt between two points. * - * @param world The world - * @param start Start position - * @param end End position + * @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) + * @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); diff --git a/src/main/java/kamkeel/npcs/command/AbilityCommand.java b/src/main/java/kamkeel/npcs/command/AbilityCommand.java index 5c5a69f88..9be809697 100644 --- a/src/main/java/kamkeel/npcs/command/AbilityCommand.java +++ b/src/main/java/kamkeel/npcs/command/AbilityCommand.java @@ -1,7 +1,7 @@ package kamkeel.npcs.command; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.controllers.data.ability.UserType; import net.minecraft.command.ICommandSender; diff --git a/src/main/java/kamkeel/npcs/command/CommandKamkeelBase.java b/src/main/java/kamkeel/npcs/command/CommandKamkeelBase.java index df4d34998..c6ffe7ec1 100644 --- a/src/main/java/kamkeel/npcs/command/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/npcs/command/CommandKamkeelBase.java @@ -11,7 +11,13 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; public abstract class CommandKamkeelBase extends CommandBase { public Map subcommands = new HashMap(); diff --git a/src/main/java/kamkeel/npcs/controllers/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/AbilityController.java index 4356ac271..e872251e5 100644 --- a/src/main/java/kamkeel/npcs/controllers/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/AbilityController.java @@ -9,7 +9,19 @@ import kamkeel.npcs.controllers.data.ability.IAbilityExtender; import kamkeel.npcs.controllers.data.ability.IAbilityFieldProvider; import kamkeel.npcs.controllers.data.ability.IChainedAbilityFieldProvider; import kamkeel.npcs.controllers.data.ability.UserType; -import kamkeel.npcs.controllers.data.ability.type.*; +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.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.energy.AbilityBeam; import kamkeel.npcs.controllers.data.ability.type.energy.AbilityDisc; import kamkeel.npcs.controllers.data.ability.type.energy.AbilityDome; @@ -20,16 +32,22 @@ import kamkeel.npcs.controllers.data.ability.type.energy.AbilitySlicer; import kamkeel.npcs.controllers.data.ability.type.energy.AbilitySweeper; import kamkeel.npcs.controllers.data.ability.type.energy.AbilityWall; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.api.handler.IAbilityHandler; import noppes.npcs.util.NBTJsonUtil; -import net.minecraft.entity.player.EntityPlayer; - import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.regex.Pattern; @@ -794,7 +812,8 @@ public class AbilityController implements IAbilityHandler { // If no built-in variants exist but external ones do, // inject a "Base" variant so the user always gets a choice if (result.isEmpty()) { - result.add(new AbilityVariant("ability.variant.base", a -> {})); + result.add(new AbilityVariant("ability.variant.base", a -> { + })); } result.addAll(ext); } @@ -880,7 +899,7 @@ public class AbilityController implements IAbilityHandler { double knockbackDirX, double knockbackDirZ) { for (IAbilityExtender ext : extenders) { if (ext.onAbilityDamage(ability, caster, target, damage, knockback, knockbackUp, - knockbackDirX, knockbackDirZ)) { + knockbackDirX, knockbackDirZ)) { return true; } } diff --git a/src/main/java/kamkeel/npcs/controllers/SyncController.java b/src/main/java/kamkeel/npcs/controllers/SyncController.java index 014568af3..af7366a3f 100644 --- a/src/main/java/kamkeel/npcs/controllers/SyncController.java +++ b/src/main/java/kamkeel/npcs/controllers/SyncController.java @@ -5,6 +5,8 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import kamkeel.npcs.addon.DBCAddon; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.network.LargeAbstractPacket; import kamkeel.npcs.network.PacketHandler; import kamkeel.npcs.network.enums.EnumSyncAction; @@ -39,8 +41,6 @@ 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.ChainedAbility; import java.io.IOException; import java.util.EnumMap; 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 54529b7f3..c44f1bd47 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -7,38 +7,36 @@ import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.AxisAlignedBB; +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.world.World; import noppes.npcs.DataAbilities; import noppes.npcs.NpcDamageSource; import noppes.npcs.api.INbt; import noppes.npcs.api.ability.IAbility; +import noppes.npcs.api.entity.IPlayer; import noppes.npcs.client.gui.advanced.SubGuiAbilityConfig; +import noppes.npcs.client.gui.builder.FieldDef; 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; +import noppes.npcs.controllers.data.Animation; +import noppes.npcs.controllers.data.Frame; import noppes.npcs.controllers.data.PlayerDataScript; +import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.AbilityEvent; import noppes.npcs.scripted.event.player.PlayerAbilityEvent; -import noppes.npcs.client.gui.builder.FieldDef; - import java.util.ArrayList; import java.util.Collections; import java.util.List; -import net.minecraft.entity.Entity; - public abstract class Ability implements IAbility, IAbilityAction { // ═══════════════════════════════════════════════════════════════════ @@ -115,10 +113,14 @@ public abstract class Ability implements IAbility, IAbilityAction { // TOGGLE CONFIGURATION (saved to NBT for custom abilities) // ═══════════════════════════════════════════════════════════════════ - /** Whether this ability is a toggle (ON/OFF) rather than a phased execution */ + /** + * Whether this ability is a toggle (ON/OFF) rather than a phased execution + */ protected boolean toggleable = false; - /** Whether the toggled-ON state ticks each game tick (e.g., Kaioken drains ki per tick) */ + /** + * Whether the toggled-ON state ticks each game tick (e.g., Kaioken drains ki per tick) + */ protected boolean hasActiveToggle = false; // Configurable potion effects @@ -232,17 +234,20 @@ public abstract class Ability implements IAbility, IAbilityAction { * Called when this toggle ability is turned ON for an entity. * Override to apply effects (e.g., set a DBC flag, apply a buff). */ - public void onToggleOn(EntityLivingBase caster) {} + public void onToggleOn(EntityLivingBase caster) { + } /** * Called when this toggle ability is turned OFF for an entity. * Override to remove effects (e.g., clear a DBC flag, remove a buff). */ - public void onToggleOff(EntityLivingBase caster) {} + public void onToggleOff(EntityLivingBase caster) { + } /** * Called every tick while this toggle is active (only if hasActiveToggle is true). * Override for per-tick effects (e.g., ki drain for Kaioken). + * * @return true to keep the toggle active, false to auto-deactivate */ public boolean onToggleTick(EntityLivingBase caster, int tickCount) { @@ -252,6 +257,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * Whether this ability is ready for auto-completion during burst overlap mode. * Override to delay auto-completion until all staggered projectiles have been fired. + * * @param activeTick the current tick within the ACTIVE phase */ public boolean isReadyForBurstCompletion(int activeTick) { @@ -554,27 +560,36 @@ public abstract class Ability implements IAbility, IAbilityAction { () -> this.getLockMovement().getDisplayKey(), v -> { for (LockMovementType t : LockMovementType.values()) { - if (t.getDisplayKey().equals(v)) { this.setLockMovement(t); break; } + if (t.getDisplayKey().equals(v)) { + this.setLockMovement(t); + break; + } } }) - .hover("ability.hover.lockMovement") - .tab("General")); + .hover("ability.hover.lockMovement") + .tab("General")); defs.add(FieldDef.row( FieldDef.stringEnumField("ability.rotationMode", RotationMode.getDisplayKeys(), - () -> this.getRotationMode().getDisplayKey(), - v -> { - for (RotationMode m : RotationMode.values()) { - if (m.getDisplayKey().equals(v)) { this.setRotationMode(m); break; } - } - }) + () -> this.getRotationMode().getDisplayKey(), + v -> { + for (RotationMode m : RotationMode.values()) { + if (m.getDisplayKey().equals(v)) { + this.setRotationMode(m); + break; + } + } + }) .hover("ability.hover.rotationMode"), FieldDef.stringEnumField("ability.rotationPhase", getRotationPhaseKeys(), - () -> this.getRotationPhase().getDisplayKey(), - v -> { - for (LockMovementType t : LockMovementType.values()) { - if (t.getDisplayKey().equals(v)) { this.setRotationPhase(t); break; } - } - }) + () -> this.getRotationPhase().getDisplayKey(), + v -> { + for (LockMovementType t : LockMovementType.values()) { + if (t.getDisplayKey().equals(v)) { + this.setRotationPhase(t); + break; + } + } + }) .hover("ability.hover.rotationPhase") .visibleWhen(() -> this.rotationMode != RotationMode.FREE) ).tab("General")); @@ -617,15 +632,17 @@ public abstract class Ability implements IAbility, IAbilityAction { allowedKeys[i] = allowed[i].name(); } defs.add(FieldDef.stringEnumField("ability.targetingMode", allowedKeys, - () -> this.getTargetingMode().name(), - v -> { - try { this.setTargetingMode(TargetingMode.valueOf(v)); } - catch (Exception ignored) {} - }) + () -> this.getTargetingMode().name(), + v -> { + try { + this.setTargetingMode(TargetingMode.valueOf(v)); + } catch (Exception ignored) { + } + }) .tab("Target").hover("ability.hover.targeting")); } else { defs.add(FieldDef.enumField("ability.targetingMode", TargetingMode.class, - this::getTargetingMode, this::setTargetingMode) + this::getTargetingMode, this::setTargetingMode) .tab("Target").hover("ability.hover.targeting")); } } @@ -638,12 +655,12 @@ public abstract class Ability implements IAbility, IAbilityAction { .tab("Effects")); defs.add(FieldDef.section("ability.section.animations").tab("Effects")); defs.add(FieldDef.animSubGui("ability.windUpAnimation", - this::getWindUpAnimationId, this::setWindUpAnimationId, - this::getWindUpAnimationName, this::setWindUpAnimationName) + this::getWindUpAnimationId, this::setWindUpAnimationId, + this::getWindUpAnimationName, this::setWindUpAnimationName) .tab("Effects")); defs.add(FieldDef.animSubGui("ability.activeAnimation", - this::getActiveAnimationId, this::setActiveAnimationId, - this::getActiveAnimationName, this::setActiveAnimationName) + this::getActiveAnimationId, this::setActiveAnimationId, + this::getActiveAnimationName, this::setActiveAnimationName) .tab("Effects")); defs.add(FieldDef.animSubGui("ability.dazedAnimation", this::getDazedAnimationId, this::setDazedAnimationId, @@ -699,7 +716,7 @@ public abstract class Ability implements IAbility, IAbilityAction { * Create a telegraph instance for this ability. * Override for custom telegraph shapes. * - * @param caster The caster + * @param caster The caster * @param target The target (for position calculation) * @return The telegraph instance, or null if no telegraph */ @@ -1514,6 +1531,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Get lock movement type as integer. + * * @return 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE */ @Override @@ -1523,6 +1541,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Set lock movement type from integer. + * * @param type 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE */ @Override @@ -1532,6 +1551,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Get rotation mode as integer. + * * @return 0=FREE, 1=LOCKED, 2=TRACK */ @Override @@ -1541,6 +1561,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Set rotation mode from integer. + * * @param type 0=FREE, 1=LOCKED, 2=TRACK */ @Override @@ -1550,6 +1571,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Get rotation phase as integer. + * * @return 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE */ @Override @@ -1559,6 +1581,7 @@ public abstract class Ability implements IAbility, IAbilityAction { /** * API method: Set rotation phase from integer. + * * @param type 0=NO, 1=WINDUP, 2=ACTIVE, 3=WINDUP_AND_ACTIVE */ @Override diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java index e42c52980..830d5d0ec 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java @@ -24,14 +24,17 @@ public class AbilityAction { private ChainedAbility inlineChain; private String referenceId; - /** Per-slot enabled override for reference slots (null = use master's default). */ + /** + * Per-slot enabled override for reference slots (null = use master's default). + */ private Boolean enabledOverride; // Cache private transient IAbilityAction cachedAction; private transient int cachedRevision = -1; - private AbilityAction() {} + private AbilityAction() { + } // ═══════════════════════════════════════════════════════════════════ // FACTORY METHODS diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java index 07295aaf7..1afbf0906 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java @@ -18,13 +18,16 @@ public class AbilitySlot { private Ability inlineAbility; private String referenceId; - /** Per-slot enabled override for reference slots (null = use master's default). */ + /** + * Per-slot enabled override for reference slots (null = use master's default). + */ private Boolean enabledOverride; private transient Ability cachedAbility; private transient int cachedVersion = -1; - private AbilitySlot() {} + private AbilitySlot() { + } /** * Create a slot with an inline (embedded) ability. diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityVariant.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityVariant.java index 797e6b20b..0ef3b9692 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityVariant.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityVariant.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; * Represents a variant/template for an ability type. * When a user creates an ability that has registered variants, * they are presented with a selection dialog before the ability is created. - * + *

* Each variant has a display name (lang key) and a configurator that * applies preset values to the newly created 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 58e54b5aa..959aa2cf4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AnchorPoint.java @@ -50,14 +50,22 @@ public enum AnchorPoint { @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"; - case EYE: return "ability.anchor.eye"; - default: return name(); + 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"; + case EYE: + return "ability.anchor.eye"; + default: + return name(); } } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbility.java b/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbility.java index eff65e8a9..5de37416e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbility.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbility.java @@ -29,31 +29,48 @@ public class ChainedAbility implements IChainedAbility, IAbilityAction { private boolean enabled = true; - /** Weight for NPC weighted random selection. */ + /** + * Weight for NPC weighted random selection. + */ private int weight = 10; - /** Whether each ability in the chain uses its own windup phase. */ + /** + * Whether each ability in the chain uses its own windup phase. + */ private boolean windUpAll = true; - /** Chain-level cooldown in ticks (applied after entire chain completes). */ + /** + * Chain-level cooldown in ticks (applied after entire chain completes). + */ private int cooldownTicks = 100; - /** Minimum range for NPC eligibility check. */ + /** + * Minimum range for NPC eligibility check. + */ private float minRange = 0; - /** Maximum range for NPC eligibility check. */ + /** + * Maximum range for NPC eligibility check. + */ private float maxRange = 20; - /** Chain-level conditions (individual ability conditions are ignored). */ + /** + * Chain-level conditions (individual ability conditions are ignored). + */ private List conditions = new ArrayList<>(); - /** Ordered list of ability entries to execute. */ + /** + * Ordered list of ability entries to execute. + */ private List entries = new ArrayList<>(); - /** Extension data for external mods (e.g., icons, DBC stats). */ + /** + * Extension data for external mods (e.g., icons, DBC stats). + */ private NBTTagCompound customData = new NBTTagCompound(); - public ChainedAbility() {} + public ChainedAbility() { + } public ChainedAbility(String name) { this.name = name != null ? name : ""; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbilityEntry.java b/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbilityEntry.java index 887d85571..be8528ed0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbilityEntry.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/ChainedAbilityEntry.java @@ -12,20 +12,27 @@ import net.minecraft.nbt.NBTTagCompound; */ public class ChainedAbilityEntry { - public enum EntryType { REFERENCE, INLINE } + public enum EntryType {REFERENCE, INLINE} private EntryType entryType = EntryType.REFERENCE; - /** Reference key (built-in name or custom ability name). Used when entryType == REFERENCE. */ + /** + * Reference key (built-in name or custom ability name). Used when entryType == REFERENCE. + */ private String abilityReference = ""; - /** Inline ability data. Used when entryType == INLINE. */ + /** + * Inline ability data. Used when entryType == INLINE. + */ private Ability inlineAbility = null; - /** Delay in ticks BEFORE this ability starts (after previous entry completes). */ + /** + * Delay in ticks BEFORE this ability starts (after previous entry completes). + */ private int delayTicks = 0; - public ChainedAbilityEntry() {} + public ChainedAbilityEntry() { + } public ChainedAbilityEntry(String abilityReference, int delayTicks) { this.entryType = EntryType.REFERENCE; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/PreviewEntityHandler.java b/src/main/java/kamkeel/npcs/controllers/data/ability/PreviewEntityHandler.java index 77fae9774..13c8bc526 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/PreviewEntityHandler.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/PreviewEntityHandler.java @@ -9,5 +9,6 @@ import net.minecraft.entity.Entity; */ public interface PreviewEntityHandler { void onEntitySpawned(Entity entity); + void onEntityRemoved(Entity entity); } 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 9bdbdac6f..7e84c6a14 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/TargetingMode.java @@ -27,11 +27,16 @@ public enum TargetingMode { @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(); + 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/data/EnergyBarrierData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyBarrierData.java index 2d65b6228..f31466329 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyBarrierData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyBarrierData.java @@ -22,7 +22,9 @@ public class EnergyBarrierData { // Knockback settings public boolean knockbackEnabled = false; public float knockbackStrength = 1.0f; - /** 0=Both, 1=Player only, 2=NPC only */ + /** + * 0=Both, 1=Player only, 2=NPC only + */ public int knockbackTarget = 0; // Melee settings @@ -36,7 +38,8 @@ public class EnergyBarrierData { */ private Map damageMultipliers = new HashMap<>(); - public EnergyBarrierData() {} + public EnergyBarrierData() { + } public EnergyBarrierData(float maxHealth, boolean useHealth, int durationTicks, boolean useDuration) { this.maxHealth = maxHealth; @@ -70,23 +73,50 @@ public class EnergyBarrierData { // ==================== GETTERS & SETTERS ==================== - public float getMaxHealth() { return maxHealth; } - public void setMaxHealth(float maxHealth) { this.maxHealth = Math.max(0, maxHealth); } + public float getMaxHealth() { + return maxHealth; + } - public boolean isUseHealth() { return useHealth; } - public void setUseHealth(boolean useHealth) { this.useHealth = useHealth; } + public void setMaxHealth(float maxHealth) { + this.maxHealth = Math.max(0, maxHealth); + } - public int getDurationTicks() { return durationTicks; } - public void setDurationTicks(int durationTicks) { this.durationTicks = Math.max(1, durationTicks); } + public boolean isUseHealth() { + return useHealth; + } - public boolean isUseDuration() { return useDuration; } - public void setUseDuration(boolean useDuration) { this.useDuration = useDuration; } + public void setUseHealth(boolean useHealth) { + this.useHealth = useHealth; + } - public float getDefaultMultiplier() { return defaultMultiplier; } - public void setDefaultMultiplier(float defaultMultiplier) { this.defaultMultiplier = defaultMultiplier; } + public int getDurationTicks() { + return durationTicks; + } + + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + + public boolean isUseDuration() { + return useDuration; + } + + public void setUseDuration(boolean useDuration) { + this.useDuration = useDuration; + } + + public float getDefaultMultiplier() { + return defaultMultiplier; + } + + public void setDefaultMultiplier(float defaultMultiplier) { + this.defaultMultiplier = defaultMultiplier; + } // Knockback target key helpers - public static String[] getKnockbackTargetKeys() { return KNOCKBACK_TARGET_KEYS; } + public static String[] getKnockbackTargetKeys() { + return KNOCKBACK_TARGET_KEYS; + } public String getKnockbackTargetKey() { return KNOCKBACK_TARGET_KEYS[Math.max(0, Math.min(knockbackTarget, 2))]; 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 index e6ccf15a1..2ecbf7cc5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyCombatData.java @@ -15,7 +15,8 @@ public class EnergyCombatData implements IEnergyCombatData { public float explosionRadius = 3.0f; public float explosionDamageFalloff = 0.5f; - public EnergyCombatData() {} + public EnergyCombatData() { + } public EnergyCombatData(float damage, float knockback, float knockbackUp, boolean explosive, float explosionRadius, float explosionDamageFalloff) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyDisplayData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyDisplayData.java index 415c5796c..3b0998602 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyDisplayData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyDisplayData.java @@ -20,7 +20,8 @@ public class EnergyDisplayData implements IEnergyDisplayData { // public boolean skyboxEnabled = false; // public String skyboxTexture = ""; - public EnergyDisplayData() {} + public EnergyDisplayData() { + } public EnergyDisplayData(int innerColor, int outerColor) { this.innerColor = innerColor; 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 index d385c06e7..a03e70525 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyHomingData.java @@ -14,7 +14,8 @@ public class EnergyHomingData implements IEnergyHomingData { public float homingStrength = 0.15f; public float homingRange = 20.0f; - public EnergyHomingData() {} + public EnergyHomingData() { + } public EnergyHomingData(float speed, boolean homing, float homingStrength, float homingRange) { this.speed = speed; 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 index f320acdb0..a18a91021 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLifespanData.java @@ -11,7 +11,8 @@ public class EnergyLifespanData implements IEnergyLifespanData { public float maxDistance = 30.0f; public int maxLifetime = 200; - public EnergyLifespanData() {} + public EnergyLifespanData() { + } public EnergyLifespanData(float maxDistance, int maxLifetime) { this.maxDistance = maxDistance; 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 index 66786a14a..1eb2b001a 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyLightningData.java @@ -13,7 +13,8 @@ public class EnergyLightningData implements IEnergyLightningData { public float lightningRadius = 0.5f; public int lightningFadeTime = 6; - public EnergyLightningData() {} + public EnergyLightningData() { + } public EnergyLightningData(boolean lightningEffect, float lightningDensity, float lightningRadius, int lightningFadeTime) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyPanelData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyPanelData.java index 1fa8586fe..3a5206f21 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyPanelData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyPanelData.java @@ -17,7 +17,8 @@ public class EnergyPanelData { public float launchDamage = 8.0f; public float launchKnockback = 2.0f; - public EnergyPanelData() {} + public EnergyPanelData() { + } public EnergyPanelData(float panelWidth, float panelHeight, float heightOffset) { this.panelWidth = panelWidth; @@ -27,26 +28,61 @@ public class EnergyPanelData { // ==================== GETTERS & SETTERS ==================== - public float getPanelWidth() { return panelWidth; } - public void setPanelWidth(float panelWidth) { this.panelWidth = Math.max(0.5f, panelWidth); } + public float getPanelWidth() { + return panelWidth; + } - public float getPanelHeight() { return panelHeight; } - public void setPanelHeight(float panelHeight) { this.panelHeight = Math.max(0.5f, panelHeight); } + public void setPanelWidth(float panelWidth) { + this.panelWidth = Math.max(0.5f, panelWidth); + } - public float getHeightOffset() { return heightOffset; } - public void setHeightOffset(float heightOffset) { this.heightOffset = heightOffset; } + public float getPanelHeight() { + return panelHeight; + } - public boolean isLaunching() { return launching; } - public void setLaunching(boolean launching) { this.launching = launching; } + public void setPanelHeight(float panelHeight) { + this.panelHeight = Math.max(0.5f, panelHeight); + } - public float getLaunchSpeed() { return launchSpeed; } - public void setLaunchSpeed(float launchSpeed) { this.launchSpeed = Math.max(0.1f, launchSpeed); } + public float getHeightOffset() { + return heightOffset; + } - public float getLaunchDamage() { return launchDamage; } - public void setLaunchDamage(float launchDamage) { this.launchDamage = Math.max(0, launchDamage); } + public void setHeightOffset(float heightOffset) { + this.heightOffset = heightOffset; + } - public float getLaunchKnockback() { return launchKnockback; } - public void setLaunchKnockback(float launchKnockback) { this.launchKnockback = Math.max(0, launchKnockback); } + public boolean isLaunching() { + return launching; + } + + public void setLaunching(boolean launching) { + this.launching = launching; + } + + public float getLaunchSpeed() { + return launchSpeed; + } + + public void setLaunchSpeed(float launchSpeed) { + this.launchSpeed = Math.max(0.1f, launchSpeed); + } + + public float getLaunchDamage() { + return launchDamage; + } + + public void setLaunchDamage(float launchDamage) { + this.launchDamage = Math.max(0, launchDamage); + } + + public float getLaunchKnockback() { + return launchKnockback; + } + + public void setLaunchKnockback(float launchKnockback) { + this.launchKnockback = Math.max(0, launchKnockback); + } // ==================== NBT ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyTrajectoryData.java b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyTrajectoryData.java index 15adb3062..ea7735e11 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyTrajectoryData.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/data/EnergyTrajectoryData.java @@ -15,7 +15,8 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { public int currentPath = 0; private final List trajectory = new ArrayList<>(); - public EnergyTrajectoryData() {} + public EnergyTrajectoryData() { + } public EnergyTrajectoryData(int startingPath, Path... paths) { trajectory.addAll(Arrays.asList(paths)); @@ -85,6 +86,7 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { IPath p = getPath(path); return p == null ? 0 : p.getZ(); } + @Override public void setX(int path, double x) { IPath p = getPath(path); @@ -126,8 +128,8 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { @Override public void setPath(int path, double x, double y, double z, int delay) { Path newPath = new Path( - NpcAPI.Instance().getIPos(x, y, z), - delay + NpcAPI.Instance().getIPos(x, y, z), + delay ); while (trajectory.size() <= path) { @@ -196,7 +198,7 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { } } - public static class Path implements IEnergyTrajectoryData.IPath{ + public static class Path implements IEnergyTrajectoryData.IPath { public IPos pos; public int delayTicks; public boolean concluded; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/AbilityFieldBuilder.java b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/AbilityFieldBuilder.java index d41418d91..2456b161d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/gui/AbilityFieldBuilder.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/gui/AbilityFieldBuilder.java @@ -199,5 +199,7 @@ public class AbilityFieldBuilder extends GuiFieldBuilder { return super.handleTextFieldEvent(textFieldId, field); } - public Map getEffectWidgetMeta() { return effectWidgetMeta; } + public Map getEffectWidgetMeta() { + return effectWidgetMeta; + } } 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 780ddc050..9f063ff72 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 @@ -4,6 +4,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -11,10 +12,8 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; - -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import noppes.npcs.api.ability.type.IAbilityCharge; +import noppes.npcs.client.gui.builder.FieldDef; import java.util.Arrays; import java.util.HashSet; 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 58c92009f..bac7cc234 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,8 +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.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -11,15 +14,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; - import noppes.npcs.api.ability.type.IAbilityCutter; - import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import java.util.Arrays; import java.util.HashSet; @@ -40,9 +36,12 @@ public class AbilityCutter extends Ability implements IAbilityCutter { @Override public String toString() { switch (this) { - case SWIPE: return "ability.sweep.swipe"; - case SPIN: return "ability.sweep.spin"; - default: return name(); + case SWIPE: + return "ability.sweep.swipe"; + case SPIN: + return "ability.sweep.spin"; + default: + return name(); } } } @@ -232,7 +231,7 @@ public class AbilityCutter extends Ability implements IAbilityCutter { * For SWIPE mode, this covers the continuous arc from startAngle to endAngle. */ private void performSweepDamageRange(EntityLivingBase caster, World world, float minDist, float maxDist, - float startAngle, float endAngle) { + float startAngle, float endAngle) { // Calculate the angular range covered this tick float minAngle = Math.min(startAngle, endAngle); float maxAngle = Math.max(startAngle, endAngle); 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 41c5faaa1..84df55642 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,9 +8,8 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; - -import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.api.ability.type.IAbilityDash; +import noppes.npcs.client.gui.builder.FieldDef; import java.util.Arrays; import java.util.List; @@ -32,9 +31,12 @@ public class AbilityDash extends AbilityMovement implements IAbilityDash { @Override public String toString() { switch (this) { - case AGGRESSIVE: return "ability.dash.aggressive"; - case DEFENSIVE: return "ability.dash.defensive"; - default: return name(); + case AGGRESSIVE: + return "ability.dash.aggressive"; + case DEFENSIVE: + return "ability.dash.defensive"; + default: + return name(); } } } 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 331ed0de4..24489b9eb 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,25 +1,26 @@ package kamkeel.npcs.controllers.data.ability.type; -import kamkeel.npcs.controllers.data.ability.*; +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.ability.LockMovementType; +import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.UserType; +import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; +import noppes.npcs.api.ability.type.IAbilityGuard; import noppes.npcs.api.handler.data.IAnimation; +import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.entity.EntityNPCInterface; - -import noppes.npcs.api.ability.type.IAbilityGuard; - -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import noppes.npcs.util.ValueUtil; import java.util.Arrays; @@ -77,9 +78,12 @@ public class AbilityGuard extends Ability implements IAbilityGuard { @Override public String toString() { switch (this) { - case FLAT: return "ability.counter.flat"; - case PERCENT: return "ability.counter.percent"; - default: return name(); + case FLAT: + return "ability.counter.flat"; + case PERCENT: + return "ability.counter.percent"; + default: + return name(); } } } 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 7ca81c95a..a23e38963 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,19 +1,15 @@ 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.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.entity.EntityAbilityZone; import kamkeel.npcs.entity.EntityAbilityZone.ZoneShape; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; - - import noppes.npcs.api.ability.type.IAbilityHazard; - import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.Arrays; @@ -106,20 +102,45 @@ public class AbilityHazard extends AbilityZone implements IAbilityHazard { this.affectsCaster = nbt.getBoolean("affectsCaster"); } - public float getRadius() { return radius; } - public void setRadius(float radius) { this.radius = radius; } + public float getRadius() { + return radius; + } - public float getDamagePerSecond() { return damagePerSecond; } - public void setDamagePerSecond(float damagePerSecond) { this.damagePerSecond = damagePerSecond; } + public void setRadius(float radius) { + this.radius = radius; + } - public int getDamageInterval() { return damageInterval; } - public void setDamageInterval(int damageInterval) { this.damageInterval = damageInterval; } + public float getDamagePerSecond() { + return damagePerSecond; + } - public boolean isIgnoreInvulnFrames() { return ignoreInvulnFrames; } - public void setIgnoreInvulnFrames(boolean ignoreInvulnFrames) { this.ignoreInvulnFrames = ignoreInvulnFrames; } + public void setDamagePerSecond(float damagePerSecond) { + this.damagePerSecond = damagePerSecond; + } - public boolean isAffectsCaster() { return affectsCaster; } - public void setAffectsCaster(boolean affectsCaster) { this.affectsCaster = affectsCaster; } + public int getDamageInterval() { + return damageInterval; + } + + public void setDamageInterval(int damageInterval) { + this.damageInterval = damageInterval; + } + + public boolean isIgnoreInvulnFrames() { + return ignoreInvulnFrames; + } + + public void setIgnoreInvulnFrames(boolean ignoreInvulnFrames) { + this.ignoreInvulnFrames = ignoreInvulnFrames; + } + + public boolean isAffectsCaster() { + return affectsCaster; + } + + public void setAffectsCaster(boolean affectsCaster) { + this.affectsCaster = affectsCaster; + } @SideOnly(Side.CLIENT) @Override 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 6119e1340..89cfd2dbf 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,5 +1,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; @@ -9,13 +11,9 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; - -import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.api.ability.type.IAbilityHeal; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import noppes.npcs.client.gui.builder.FieldDef; +import noppes.npcs.entity.EntityNPCInterface; import java.util.ArrayList; import java.util.Arrays; 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 7c85826a2..d7314b707 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 @@ -5,13 +5,13 @@ 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.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import noppes.npcs.api.ability.type.IAbilityHeavyHit; +import noppes.npcs.client.gui.builder.FieldDef; import java.util.Arrays; import java.util.List; 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 46242fc71..1aba9ff3c 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 @@ -5,18 +5,15 @@ 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.gui.AbilityFieldDefs; 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.Vec3; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; - import noppes.npcs.api.ability.type.IAbilityProjectile; - import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import java.util.Arrays; import java.util.List; @@ -94,7 +91,11 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { 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) { dx /= len; dy /= len; dz /= len; } + if (len > 0) { + dx /= len; + dy /= len; + dz /= len; + } applyAbilityDamageWithDirection(caster, target, damage, knockback, dx, dz); world.playSoundAtEntity(caster, "random.bow", 1.0f, 0.8f); @@ -167,7 +168,7 @@ public class AbilityProjectile extends Ability implements IAbilityProjectile { * Apply explosion splash damage around a point. */ private void applyExplosionDamage(EntityLivingBase caster, EntityLivingBase primaryTarget, World world, - double x, double y, double z) { + double x, double y, double z) { @SuppressWarnings("unchecked") List entities = world.getEntitiesWithinAABBExcludingEntity(primaryTarget, primaryTarget.boundingBox.expand(explosionRadius, explosionRadius, explosionRadius)); 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 1eebdab99..4cca57508 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 @@ -5,16 +5,13 @@ 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.gui.AbilityFieldDefs; 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 noppes.npcs.entity.EntityNPCInterface; - -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import noppes.npcs.api.ability.type.IAbilityShockwave; +import noppes.npcs.client.gui.builder.FieldDef; import java.util.Arrays; import java.util.List; 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 f8a6559ca..1e844271f 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 @@ -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.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -13,13 +14,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; +import noppes.npcs.api.ability.type.IAbilitySlam; +import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.entity.EntityNPCInterface; -import noppes.npcs.api.ability.type.IAbilitySlam; -import somehussar.gui.annotationHandling.GuiEditable; - -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import java.util.Arrays; import java.util.List; 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 70228652e..cc2deb4ea 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,9 +1,12 @@ 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.UserType; +import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -13,15 +16,8 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import noppes.npcs.entity.EntityNPCInterface; - import noppes.npcs.api.ability.type.IAbilityTeleport; - import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import java.util.Arrays; import java.util.List; @@ -43,10 +39,14 @@ public class AbilityTeleport extends Ability implements IAbilityTeleport { @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(); + case BLINK: + return "ability.teleport.blink"; + case BEHIND: + return "ability.teleport.behind"; + case SINGLE: + return "ability.teleport.single"; + default: + return name(); } } } 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 a8782122f..d875353f6 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,5 +1,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.AbilityPotionEffect; import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; @@ -12,9 +14,6 @@ import noppes.npcs.client.gui.SubGuiTrapPresetSelector; import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.constants.EnumPotionType; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -115,51 +114,80 @@ public class AbilityTrap extends AbilityZone implements IAbilityTrap { switch (preset) { case "VENOM": groundAlpha = 0.04f; - particles = true; particleDensity = 0.3f; particleScale = 0.5f; - particleMotion = 1; particleDir = "mc:mobSpell"; - colorData.innerColor = 0x44DD44; colorData.outerColor = 0x116611; - windUpColor = 0x6044DD44; activeColor = 0xC044FF44; + particles = true; + particleDensity = 0.3f; + particleScale = 0.5f; + particleMotion = 1; + particleDir = "mc:mobSpell"; + colorData.innerColor = 0x44DD44; + colorData.outerColor = 0x116611; + windUpColor = 0x6044DD44; + activeColor = 0xC044FF44; effects.add(new AbilityPotionEffect(EnumPotionType.Poison, 100, 0)); break; case "EXPLOSIVE": groundAlpha = 0.04f; - particles = true; particleDensity = 0.3f; particleScale = 0.6f; - particleMotion = 0; particleDir = "mc:smoke"; - colorData.innerColor = 0xFF6611; colorData.outerColor = 0xCC2200; - windUpColor = 0x60FF6611; activeColor = 0xC0FF4400; + particles = true; + particleDensity = 0.3f; + particleScale = 0.6f; + particleMotion = 0; + particleDir = "mc:smoke"; + colorData.innerColor = 0xFF6611; + colorData.outerColor = 0xCC2200; + windUpColor = 0x60FF6611; + activeColor = 0xC0FF4400; effects.add(new AbilityPotionEffect(EnumPotionType.Fire, 60, 0)); break; case "CURSED": groundAlpha = 0.04f; - particles = true; particleDensity = 0.3f; particleScale = 0.5f; - particleMotion = 1; particleDir = "mc:portal"; - colorData.innerColor = 0xAA44FF; colorData.outerColor = 0x6622BB; - windUpColor = 0x60AA44FF; activeColor = 0xC0CC66FF; + particles = true; + particleDensity = 0.3f; + particleScale = 0.5f; + particleMotion = 1; + particleDir = "mc:portal"; + colorData.innerColor = 0xAA44FF; + colorData.outerColor = 0x6622BB; + windUpColor = 0x60AA44FF; + activeColor = 0xC0CC66FF; effects.add(new AbilityPotionEffect(EnumPotionType.Weakness, 100, 0)); break; case "SHOCK": groundAlpha = 0.04f; - particles = true; particleDensity = 0.3f; particleScale = 0.4f; - particleMotion = 2; particleDir = "mc:enchantmenttable"; - colorData.innerColor = 0x4488FF; colorData.outerColor = 0x2244BB; - windUpColor = 0x604488FF; activeColor = 0xC066AAFF; + particles = true; + particleDensity = 0.3f; + particleScale = 0.4f; + particleMotion = 2; + particleDir = "mc:enchantmenttable"; + colorData.innerColor = 0x4488FF; + colorData.outerColor = 0x2244BB; + windUpColor = 0x604488FF; + activeColor = 0xC066AAFF; effects.add(new AbilityPotionEffect(EnumPotionType.MiningFatigue, 80, 1)); break; case "SNARE": groundAlpha = 0.04f; - particles = true; particleDensity = 0.3f; particleScale = 0.5f; - particleMotion = 1; particleDir = "mc:snowshovel"; - colorData.innerColor = 0x88CCFF; colorData.outerColor = 0x4488CC; - windUpColor = 0x6088CCFF; activeColor = 0xC0AADDFF; + particles = true; + particleDensity = 0.3f; + particleScale = 0.5f; + particleMotion = 1; + particleDir = "mc:snowshovel"; + colorData.innerColor = 0x88CCFF; + colorData.outerColor = 0x4488CC; + windUpColor = 0x6088CCFF; + activeColor = 0xC0AADDFF; effects.add(new AbilityPotionEffect(EnumPotionType.Slowness, 100, 1)); break; case "HIDDEN": default: groundAlpha = 0.03f; - particles = false; particleDensity = 0.0f; particleScale = 1.0f; + particles = false; + particleDensity = 0.0f; + particleScale = 1.0f; particleMotion = 0; - colorData.innerColor = 0x888888; colorData.outerColor = 0x444444; - windUpColor = 0x60888888; activeColor = 0xC0AAAAAA; + colorData.innerColor = 0x888888; + colorData.outerColor = 0x444444; + windUpColor = 0x60888888; + activeColor = 0xC0AAAAAA; break; } } @@ -190,22 +218,69 @@ public class AbilityTrap extends AbilityZone implements IAbilityTrap { this.visible = nbt.getBoolean("visible"); } - public float getTriggerRadius() { return triggerRadius; } - public void setTriggerRadius(float triggerRadius) { this.triggerRadius = triggerRadius; } - public int getArmTime() { return armTime; } - public void setArmTime(int armTime) { this.armTime = armTime; } - public int getMaxTriggers() { return maxTriggers; } - public void setMaxTriggers(int maxTriggers) { this.maxTriggers = maxTriggers; } - public int getTriggerCooldown() { return triggerCooldown; } - public void setTriggerCooldown(int triggerCooldown) { this.triggerCooldown = triggerCooldown; } - public float getDamage() { return damage; } - public void setDamage(float damage) { this.damage = damage; } - public float getDamageRadius() { return damageRadius; } - public void setDamageRadius(float damageRadius) { this.damageRadius = damageRadius; } - public float getKnockback() { return knockback; } - public void setKnockback(float knockback) { this.knockback = knockback; } - public boolean isVisible() { return visible; } - public void setVisible(boolean visible) { this.visible = visible; } + public float getTriggerRadius() { + return triggerRadius; + } + + public void setTriggerRadius(float triggerRadius) { + this.triggerRadius = triggerRadius; + } + + public int getArmTime() { + return armTime; + } + + public void setArmTime(int armTime) { + this.armTime = armTime; + } + + public int getMaxTriggers() { + return maxTriggers; + } + + public void setMaxTriggers(int maxTriggers) { + this.maxTriggers = maxTriggers; + } + + public int getTriggerCooldown() { + return triggerCooldown; + } + + public void setTriggerCooldown(int triggerCooldown) { + this.triggerCooldown = triggerCooldown; + } + + public float getDamage() { + return damage; + } + + public void setDamage(float damage) { + this.damage = damage; + } + + public float getDamageRadius() { + return damageRadius; + } + + public void setDamageRadius(float damageRadius) { + this.damageRadius = damageRadius; + } + + public float getKnockback() { + return knockback; + } + + public void setKnockback(float knockback) { + this.knockback = knockback; + } + + public boolean isVisible() { + return visible; + } + + public void setVisible(boolean visible) { + this.visible = visible; + } @SideOnly(Side.CLIENT) @Override 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 f969c27cd..d5f68e013 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,21 +1,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.LockMovementType; import kamkeel.npcs.controllers.data.ability.TargetingMode; +import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; 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.world.World; -import noppes.npcs.entity.EntityNPCInterface; - -import noppes.npcs.client.gui.builder.FieldDef; -import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import noppes.npcs.api.ability.type.IAbilityVortex; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import noppes.npcs.client.gui.builder.FieldDef; import java.util.Arrays; import java.util.HashSet; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityZone.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityZone.java index b75e41c3e..0b233a637 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityZone.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityZone.java @@ -1,5 +1,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.AbilityPotionEffect; import kamkeel.npcs.controllers.data.ability.LockMovementType; @@ -14,15 +16,10 @@ import kamkeel.npcs.entity.EntityAbilityZone.ParticleMotion; import kamkeel.npcs.entity.EntityAbilityZone.ZoneShape; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; -import noppes.npcs.constants.EnumPotionType; import net.minecraft.util.DamageSource; - - import noppes.npcs.client.gui.SubGuiZonePresetSelector; import noppes.npcs.client.gui.builder.FieldDef; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import noppes.npcs.constants.EnumPotionType; import java.util.ArrayList; import java.util.Arrays; @@ -213,57 +210,134 @@ public abstract class AbilityZone extends Ability { particleDir = ""; switch (styleName) { case "TOXIC": - groundFill = true; groundAlpha = 0.30f; rings = true; ringCount = 3; - border = false; borderSpeed = 1.0f; accents = true; accentStyle = 1; - lightning = false; particles = true; particleDensity = 1.5f; particleScale = 0.8f; - particleMotion = 1; particleGlow = true; particleDir = "mc:mobSpell"; - colorData.innerColor = 0x44DD44; colorData.outerColor = 0x116611; - windUpColor = 0x6044DD44; activeColor = 0xC044FF44; + groundFill = true; + groundAlpha = 0.30f; + rings = true; + ringCount = 3; + border = false; + borderSpeed = 1.0f; + accents = true; + accentStyle = 1; + lightning = false; + particles = true; + particleDensity = 1.5f; + particleScale = 0.8f; + particleMotion = 1; + particleGlow = true; + particleDir = "mc:mobSpell"; + colorData.innerColor = 0x44DD44; + colorData.outerColor = 0x116611; + windUpColor = 0x6044DD44; + activeColor = 0xC044FF44; effects.add(new AbilityPotionEffect(EnumPotionType.Poison, 100, 0)); break; case "INFERNO": - groundFill = true; groundAlpha = 0.35f; rings = true; ringCount = 3; - border = true; borderSpeed = 2.0f; accents = true; accentStyle = 2; - lightning = false; particles = true; particleDensity = 2.0f; particleScale = 1.2f; - particleMotion = 0; particleGlow = true; particleDir = "mc:flame"; - colorData.innerColor = 0xFF6611; colorData.outerColor = 0xCC2200; - windUpColor = 0x60FF6611; activeColor = 0xC0FF4400; + groundFill = true; + groundAlpha = 0.35f; + rings = true; + ringCount = 3; + border = true; + borderSpeed = 2.0f; + accents = true; + accentStyle = 2; + lightning = false; + particles = true; + particleDensity = 2.0f; + particleScale = 1.2f; + particleMotion = 0; + particleGlow = true; + particleDir = "mc:flame"; + colorData.innerColor = 0xFF6611; + colorData.outerColor = 0xCC2200; + windUpColor = 0x60FF6611; + activeColor = 0xC0FF4400; effects.add(new AbilityPotionEffect(EnumPotionType.Fire, 60, 0)); break; case "ARCANE": - groundFill = true; groundAlpha = 0.20f; rings = true; ringCount = 1; - border = true; borderSpeed = 0.8f; accents = true; accentStyle = 0; - lightning = false; particles = true; particleDensity = 1.0f; particleScale = 1.0f; - particleMotion = 1; particleGlow = true; particleDir = "mc:portal"; - colorData.innerColor = 0xAA44FF; colorData.outerColor = 0x6622BB; - windUpColor = 0x60AA44FF; activeColor = 0xC0CC66FF; + groundFill = true; + groundAlpha = 0.20f; + rings = true; + ringCount = 1; + border = true; + borderSpeed = 0.8f; + accents = true; + accentStyle = 0; + lightning = false; + particles = true; + particleDensity = 1.0f; + particleScale = 1.0f; + particleMotion = 1; + particleGlow = true; + particleDir = "mc:portal"; + colorData.innerColor = 0xAA44FF; + colorData.outerColor = 0x6622BB; + windUpColor = 0x60AA44FF; + activeColor = 0xC0CC66FF; effects.add(new AbilityPotionEffect(EnumPotionType.Weakness, 100, 0)); break; case "ELECTRIC": - groundFill = true; groundAlpha = 0.15f; rings = false; ringCount = 1; - border = false; borderSpeed = 1.0f; accents = false; accentStyle = 0; - lightning = true; particles = true; particleDensity = 0.8f; particleScale = 0.6f; - particleMotion = 2; particleGlow = true; particleDir = "mc:enchantmenttable"; - colorData.innerColor = 0x4488FF; colorData.outerColor = 0x2244BB; - windUpColor = 0x604488FF; activeColor = 0xC066AAFF; + groundFill = true; + groundAlpha = 0.15f; + rings = false; + ringCount = 1; + border = false; + borderSpeed = 1.0f; + accents = false; + accentStyle = 0; + lightning = true; + particles = true; + particleDensity = 0.8f; + particleScale = 0.6f; + particleMotion = 2; + particleGlow = true; + particleDir = "mc:enchantmenttable"; + colorData.innerColor = 0x4488FF; + colorData.outerColor = 0x2244BB; + windUpColor = 0x604488FF; + activeColor = 0xC066AAFF; effects.add(new AbilityPotionEffect(EnumPotionType.MiningFatigue, 80, 1)); break; case "FROST": - groundFill = true; groundAlpha = 0.25f; rings = true; ringCount = 3; - border = true; borderSpeed = 0.3f; accents = true; accentStyle = 0; - lightning = false; particles = true; particleDensity = 1.5f; particleScale = 1.0f; - particleMotion = 1; particleGlow = true; particleDir = "mc:snowshovel"; - colorData.innerColor = 0x88CCFF; colorData.outerColor = 0x4488CC; - windUpColor = 0x6088CCFF; activeColor = 0xC0AADDFF; + groundFill = true; + groundAlpha = 0.25f; + rings = true; + ringCount = 3; + border = true; + borderSpeed = 0.3f; + accents = true; + accentStyle = 0; + lightning = false; + particles = true; + particleDensity = 1.5f; + particleScale = 1.0f; + particleMotion = 1; + particleGlow = true; + particleDir = "mc:snowshovel"; + colorData.innerColor = 0x88CCFF; + colorData.outerColor = 0x4488CC; + windUpColor = 0x6088CCFF; + activeColor = 0xC0AADDFF; effects.add(new AbilityPotionEffect(EnumPotionType.Slowness, 100, 1)); break; case "DEFAULT": - groundFill = true; groundAlpha = 0.25f; rings = true; ringCount = 3; - border = true; borderSpeed = 1.0f; accents = true; accentStyle = 0; - lightning = false; particles = false; particleDensity = 1.0f; particleScale = 1.0f; - particleMotion = 0; particleGlow = true; - colorData.innerColor = 0xCCCCCC; colorData.outerColor = 0x666666; - windUpColor = 0x60CCCCCC; activeColor = 0xC0FFFFFF; + groundFill = true; + groundAlpha = 0.25f; + rings = true; + ringCount = 3; + border = true; + borderSpeed = 1.0f; + accents = true; + accentStyle = 0; + lightning = false; + particles = false; + particleDensity = 1.0f; + particleScale = 1.0f; + particleMotion = 0; + particleGlow = true; + colorData.innerColor = 0xCCCCCC; + colorData.outerColor = 0x666666; + windUpColor = 0x60CCCCCC; + activeColor = 0xC0FFFFFF; break; default: break; @@ -310,8 +384,11 @@ public abstract class AbilityZone extends Ability { protected void readZoneNBT(NBTTagCompound nbt, int defaultDuration) { this.durationTicks = nbt.getInteger("durationTicks"); - try { this.zoneShape = ZoneShape.valueOf(nbt.getString("zoneShape")); } - catch (Exception e) { this.zoneShape = ZoneShape.CIRCLE; } + try { + this.zoneShape = ZoneShape.valueOf(nbt.getString("zoneShape")); + } catch (Exception e) { + this.zoneShape = ZoneShape.CIRCLE; + } this.spawnRadius = nbt.getFloat("spawnRadius"); this.zoneCount = nbt.getInteger("zoneCount"); this.zoneHeight = nbt.getFloat("zoneHeight"); @@ -337,73 +414,238 @@ public abstract class AbilityZone extends Ability { this.particleGlow = nbt.getBoolean("particleGlow"); } - public int getDurationTicks() { return durationTicks; } - public void setDurationTicks(int durationTicks) { this.durationTicks = Math.max(1, durationTicks); } + public int getDurationTicks() { + return durationTicks; + } - public ZoneShape getZoneShapeEnum() { return zoneShape; } - public void setZoneShapeEnum(ZoneShape shape) { this.zoneShape = shape; } + public void setDurationTicks(int durationTicks) { + this.durationTicks = Math.max(1, durationTicks); + } + + public ZoneShape getZoneShapeEnum() { + return zoneShape; + } + + public void setZoneShapeEnum(ZoneShape shape) { + this.zoneShape = shape; + } + + public int getZoneShapeOrdinal() { + return zoneShape.ordinal(); + } - public int getZoneShapeOrdinal() { return zoneShape.ordinal(); } public void setZoneShapeOrdinal(int shape) { ZoneShape[] values = ZoneShape.values(); this.zoneShape = shape >= 0 && shape < values.length ? values[shape] : ZoneShape.CIRCLE; } - public float getSpawnRadius() { return spawnRadius; } - public void setSpawnRadius(float spawnRadius) { this.spawnRadius = Math.max(0, spawnRadius); } - public int getZoneCount() { return zoneCount; } - public void setZoneCount(int zoneCount) { this.zoneCount = Math.max(1, zoneCount); } - public float getZoneHeight() { return zoneHeight; } - public void setZoneHeight(float zoneHeight) { this.zoneHeight = Math.max(0.5f, zoneHeight); } + public float getSpawnRadius() { + return spawnRadius; + } - public float getParticleDensity() { return particleDensity; } - public void setParticleDensity(float v) { this.particleDensity = Math.max(0, Math.min(5, v)); } - public float getParticleScale() { return particleScale; } - public void setParticleScale(float v) { this.particleScale = Math.max(0.1f, Math.min(5, v)); } - public float getAnimSpeed() { return animSpeed; } - public void setAnimSpeed(float v) { this.animSpeed = Math.max(0.1f, Math.min(5, v)); } - public float getLightningDensity() { return lightningDensity; } - public void setLightningDensity(float v) { this.lightningDensity = Math.max(0, Math.min(3, v)); } + public void setSpawnRadius(float spawnRadius) { + this.spawnRadius = Math.max(0, spawnRadius); + } - public int getInnerColor() { return colorData.innerColor; } - public void setInnerColor(int color) { colorData.innerColor = color; } - public int getOuterColor() { return colorData.outerColor; } - public void setOuterColor(int color) { colorData.outerColor = color; } - public boolean isOuterColorEnabled() { return colorData.outerColorEnabled; } - public void setOuterColorEnabled(boolean enabled) { colorData.outerColorEnabled = enabled; } + public int getZoneCount() { + return zoneCount; + } - public boolean isGroundFill() { return groundFill; } - public void setGroundFill(boolean v) { this.groundFill = v; } - public float getGroundAlpha() { return groundAlpha; } - public void setGroundAlpha(float v) { this.groundAlpha = Math.max(0, Math.min(1, v)); } - public boolean isRings() { return rings; } - public void setRings(boolean v) { this.rings = v; } - public int getRingCount() { return ringCount; } - public void setRingCount(int v) { this.ringCount = Math.max(1, Math.min(5, v)); } - public boolean isBorder() { return border; } - public void setBorder(boolean v) { this.border = v; } - public float getBorderSpeed() { return borderSpeed; } - public void setBorderSpeed(float v) { this.borderSpeed = Math.max(0.1f, Math.min(5, v)); } - public boolean isAccents() { return accents; } - public void setAccents(boolean v) { this.accents = v; } - public int getAccentStyle() { return accentStyle; } - public void setAccentStyle(int v) { this.accentStyle = Math.max(0, Math.min(AccentStyle.values().length - 1, v)); } - public AccentStyle getAccentStyleEnum() { return AccentStyle.values()[Math.max(0, Math.min(accentStyle, AccentStyle.values().length - 1))]; } - public void setAccentStyleEnum(AccentStyle s) { this.accentStyle = s.ordinal(); } - public boolean isLightning() { return lightning; } - public void setLightning(boolean v) { this.lightning = v; } - public boolean isParticles() { return particles; } - public void setParticles(boolean v) { this.particles = v; } - public int getParticleMotion() { return particleMotion; } - public void setParticleMotion(int v) { this.particleMotion = Math.max(0, Math.min(ParticleMotion.values().length - 1, v)); } - public ParticleMotion getParticleMotionEnum() { return ParticleMotion.values()[Math.max(0, Math.min(particleMotion, ParticleMotion.values().length - 1))]; } - public void setParticleMotionEnum(ParticleMotion m) { this.particleMotion = m.ordinal(); } - public String getParticleDir() { return particleDir; } - public void setParticleDir(String v) { this.particleDir = v != null ? v : ""; } - public int getParticleSize() { return particleSize; } - public void setParticleSize(int v) { this.particleSize = Math.max(1, Math.min(256, v)); } - public boolean isParticleGlow() { return particleGlow; } - public void setParticleGlow(boolean v) { this.particleGlow = v; } + public void setZoneCount(int zoneCount) { + this.zoneCount = Math.max(1, zoneCount); + } + + public float getZoneHeight() { + return zoneHeight; + } + + public void setZoneHeight(float zoneHeight) { + this.zoneHeight = Math.max(0.5f, zoneHeight); + } + + public float getParticleDensity() { + return particleDensity; + } + + public void setParticleDensity(float v) { + this.particleDensity = Math.max(0, Math.min(5, v)); + } + + public float getParticleScale() { + return particleScale; + } + + public void setParticleScale(float v) { + this.particleScale = Math.max(0.1f, Math.min(5, v)); + } + + public float getAnimSpeed() { + return animSpeed; + } + + public void setAnimSpeed(float v) { + this.animSpeed = Math.max(0.1f, Math.min(5, v)); + } + + public float getLightningDensity() { + return lightningDensity; + } + + public void setLightningDensity(float v) { + this.lightningDensity = Math.max(0, Math.min(3, v)); + } + + public int getInnerColor() { + return colorData.innerColor; + } + + public void setInnerColor(int color) { + colorData.innerColor = color; + } + + public int getOuterColor() { + return colorData.outerColor; + } + + public void setOuterColor(int color) { + colorData.outerColor = color; + } + + public boolean isOuterColorEnabled() { + return colorData.outerColorEnabled; + } + + public void setOuterColorEnabled(boolean enabled) { + colorData.outerColorEnabled = enabled; + } + + public boolean isGroundFill() { + return groundFill; + } + + public void setGroundFill(boolean v) { + this.groundFill = v; + } + + public float getGroundAlpha() { + return groundAlpha; + } + + public void setGroundAlpha(float v) { + this.groundAlpha = Math.max(0, Math.min(1, v)); + } + + public boolean isRings() { + return rings; + } + + public void setRings(boolean v) { + this.rings = v; + } + + public int getRingCount() { + return ringCount; + } + + public void setRingCount(int v) { + this.ringCount = Math.max(1, Math.min(5, v)); + } + + public boolean isBorder() { + return border; + } + + public void setBorder(boolean v) { + this.border = v; + } + + public float getBorderSpeed() { + return borderSpeed; + } + + public void setBorderSpeed(float v) { + this.borderSpeed = Math.max(0.1f, Math.min(5, v)); + } + + public boolean isAccents() { + return accents; + } + + public void setAccents(boolean v) { + this.accents = v; + } + + public int getAccentStyle() { + return accentStyle; + } + + public void setAccentStyle(int v) { + this.accentStyle = Math.max(0, Math.min(AccentStyle.values().length - 1, v)); + } + + public AccentStyle getAccentStyleEnum() { + return AccentStyle.values()[Math.max(0, Math.min(accentStyle, AccentStyle.values().length - 1))]; + } + + public void setAccentStyleEnum(AccentStyle s) { + this.accentStyle = s.ordinal(); + } + + public boolean isLightning() { + return lightning; + } + + public void setLightning(boolean v) { + this.lightning = v; + } + + public boolean isParticles() { + return particles; + } + + public void setParticles(boolean v) { + this.particles = v; + } + + public int getParticleMotion() { + return particleMotion; + } + + public void setParticleMotion(int v) { + this.particleMotion = Math.max(0, Math.min(ParticleMotion.values().length - 1, v)); + } + + public ParticleMotion getParticleMotionEnum() { + return ParticleMotion.values()[Math.max(0, Math.min(particleMotion, ParticleMotion.values().length - 1))]; + } + + public void setParticleMotionEnum(ParticleMotion m) { + this.particleMotion = m.ordinal(); + } + + public String getParticleDir() { + return particleDir; + } + + public void setParticleDir(String v) { + this.particleDir = v != null ? v : ""; + } + + public int getParticleSize() { + return particleSize; + } + + public void setParticleSize(int v) { + this.particleSize = Math.max(1, Math.min(256, v)); + } + + public boolean isParticleGlow() { + return particleGlow; + } + + public void setParticleGlow(boolean v) { + this.particleGlow = v; + } @SideOnly(Side.CLIENT) protected void addPresetFieldDef(List defs) { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBeam.java index 66e5ef4ac..c565ac9fc 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBeam.java @@ -6,7 +6,11 @@ import kamkeel.npcs.controllers.data.ability.AbilityVariant; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.RotationMode; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.ProjectileData; import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityBeam; @@ -56,7 +60,7 @@ public class AbilityBeam extends AbilityEnergyProjectile impl @Override protected EntityAbilityBeam createEntity(EntityLivingBase caster, EntityLivingBase target, - Vec3 spawnPos, EnergyDisplayData resolved, int index) { + Vec3 spawnPos, EnergyDisplayData resolved, int index) { return new EntityAbilityBeam( caster.worldObj, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, @@ -81,7 +85,7 @@ public class AbilityBeam extends AbilityEnergyProjectile impl @Override protected void setupEntityPreview(EntityAbilityBeam beam, EntityLivingBase caster, - EnergyDisplayData resolved, ProjectileData projData, int index) { + EnergyDisplayData resolved, ProjectileData projData, int index) { beam.setupPreview(caster, beamWidth, headSize, resolved, lightningData, projData.anchor, windUpTicks, 1.0f); } @@ -139,14 +143,29 @@ public class AbilityBeam extends AbilityEnergyProjectile impl // ==================== TYPE-SPECIFIC GETTERS ==================== - public float getSpeed() { return homingData.speed; } - public void setSpeed(float speed) { homingData.speed = speed; } + public float getSpeed() { + return homingData.speed; + } - public float getBeamWidth() { return beamWidth; } - public void setBeamWidth(float beamWidth) { this.beamWidth = beamWidth; } + public void setSpeed(float speed) { + homingData.speed = speed; + } - public float getHeadSize() { return headSize; } - public void setHeadSize(float headSize) { this.headSize = headSize; } + 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; + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDisc.java index cd36eeab3..dc6b18add 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDisc.java @@ -5,7 +5,11 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.AbilityVariant; 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.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.ProjectileData; import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityAbilityDisc; @@ -56,7 +60,7 @@ public class AbilityDisc extends AbilityEnergyProjectile impl @Override protected EntityAbilityDisc createEntity(EntityLivingBase caster, EntityLivingBase target, - Vec3 spawnPos, EnergyDisplayData resolved, int index) { + Vec3 spawnPos, EnergyDisplayData resolved, int index) { return new EntityAbilityDisc( caster.worldObj, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, @@ -81,7 +85,7 @@ public class AbilityDisc extends AbilityEnergyProjectile impl @Override protected void setupEntityPreview(EntityAbilityDisc disc, EntityLivingBase caster, - EnergyDisplayData resolved, ProjectileData projData, int index) { + EnergyDisplayData resolved, ProjectileData projData, int index) { disc.setupPreview(caster, discRadius, discThickness, resolved, lightningData, projData.anchor, windUpTicks, vertical); } @@ -139,23 +143,53 @@ public class AbilityDisc extends AbilityEnergyProjectile impl // ==================== TYPE-SPECIFIC GETTERS ==================== - public float getSpeed() { return homingData.speed; } - public void setSpeed(float speed) { homingData.speed = speed; } + public float getSpeed() { + return homingData.speed; + } - public float getDiscRadius() { return discRadius; } - public void setDiscRadius(float discRadius) { this.discRadius = discRadius; } + public void setSpeed(float speed) { + homingData.speed = speed; + } - public float getDiscThickness() { return discThickness; } - public void setDiscThickness(float discThickness) { this.discThickness = discThickness; } + public float getDiscRadius() { + return discRadius; + } - public boolean isVertical() { return vertical; } - public void setVertical(boolean vertical) { this.vertical = vertical; } + public void setDiscRadius(float discRadius) { + this.discRadius = discRadius; + } - public boolean isBoomerang() { return boomerang; } - public void setBoomerang(boolean boomerang) { this.boomerang = boomerang; } + public float getDiscThickness() { + return discThickness; + } - public int getBoomerangDelay() { return boomerangDelay; } - public void setBoomerangDelay(int boomerangDelay) { this.boomerangDelay = boomerangDelay; } + public void setDiscThickness(float discThickness) { + this.discThickness = discThickness; + } + + public boolean isVertical() { + return vertical; + } + + public void setVertical(boolean vertical) { + this.vertical = vertical; + } + + 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; + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java index b6bb57e96..2fe0c4572 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java @@ -10,7 +10,6 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityEnergyBarrier; import kamkeel.npcs.entity.EntityEnergyDome; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -111,11 +110,21 @@ public class AbilityDome extends AbilityEnergyBarrier { // ==================== GETTERS & SETTERS ==================== - public float getDomeRadius() { return domeRadius; } - public void setDomeRadius(float radius) { this.domeRadius = Math.max(1.0f, radius); } + public float getDomeRadius() { + return domeRadius; + } - public boolean isFollowCaster() { return followCaster; } - public void setFollowCaster(boolean follow) { this.followCaster = follow; } + public void setDomeRadius(float radius) { + this.domeRadius = Math.max(1.0f, radius); + } + + public boolean isFollowCaster() { + return followCaster; + } + + public void setFollowCaster(boolean follow) { + this.followCaster = follow; + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergy.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergy.java index 3e0747160..59917889e 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergy.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergy.java @@ -26,40 +26,95 @@ public abstract class AbilityEnergy extends Ability { // ==================== DISPLAY DATA ==================== - public int getInnerColor() { return displayData.innerColor; } - public void setInnerColor(int color) { displayData.innerColor = color; } + public int getInnerColor() { + return displayData.innerColor; + } - public float getInnerAlpha() { return displayData.innerAlpha; } - public void setInnerAlpha(float alpha) { displayData.innerAlpha = alpha; } + public void setInnerColor(int color) { + displayData.innerColor = color; + } - public int getOuterColor() { return displayData.outerColor; } - public void setOuterColor(int color) { displayData.outerColor = color; } + public float getInnerAlpha() { + return displayData.innerAlpha; + } - public boolean isOuterColorEnabled() { return displayData.outerColorEnabled; } - public void setOuterColorEnabled(boolean enabled) { displayData.outerColorEnabled = enabled; } + public void setInnerAlpha(float alpha) { + displayData.innerAlpha = alpha; + } - public float getOuterColorWidth() { return displayData.outerColorWidth; } - public void setOuterColorWidth(float width) { displayData.outerColorWidth = width; } + public int getOuterColor() { + return displayData.outerColor; + } - public float getOuterColorAlpha() { return displayData.outerColorAlpha; } - public void setOuterColorAlpha(float alpha) { displayData.outerColorAlpha = alpha; } + public void setOuterColor(int color) { + displayData.outerColor = color; + } - public float getRotationSpeed() { return displayData.rotationSpeed; } - public void setRotationSpeed(float speed) { displayData.rotationSpeed = speed; } + public boolean isOuterColorEnabled() { + return displayData.outerColorEnabled; + } + + public void setOuterColorEnabled(boolean enabled) { + displayData.outerColorEnabled = enabled; + } + + public float getOuterColorWidth() { + return displayData.outerColorWidth; + } + + public void setOuterColorWidth(float width) { + displayData.outerColorWidth = width; + } + + public float getOuterColorAlpha() { + return displayData.outerColorAlpha; + } + + public void setOuterColorAlpha(float alpha) { + displayData.outerColorAlpha = alpha; + } + + public float getRotationSpeed() { + return displayData.rotationSpeed; + } + + public void setRotationSpeed(float speed) { + displayData.rotationSpeed = speed; + } // ==================== LIGHTNING DATA ==================== - public boolean hasLightningEffect() { return lightningData.lightningEffect; } - public void setLightningEffect(boolean enabled) { lightningData.lightningEffect = enabled; } + public boolean hasLightningEffect() { + return lightningData.lightningEffect; + } - public float getLightningDensity() { return lightningData.lightningDensity; } - public void setLightningDensity(float density) { lightningData.lightningDensity = density; } + public void setLightningEffect(boolean enabled) { + lightningData.lightningEffect = enabled; + } - public float getLightningRadius() { return lightningData.lightningRadius; } - public void setLightningRadius(float radius) { lightningData.lightningRadius = radius; } + public float getLightningDensity() { + return lightningData.lightningDensity; + } - public int getLightningFadeTime() { return lightningData.lightningFadeTime; } - public void setLightningFadeTime(int fadeTime) { lightningData.lightningFadeTime = fadeTime; } + public void setLightningDensity(float density) { + lightningData.lightningDensity = density; + } + + public float getLightningRadius() { + return lightningData.lightningRadius; + } + + public void setLightningRadius(float radius) { + lightningData.lightningRadius = radius; + } + + public int getLightningFadeTime() { + return lightningData.lightningFadeTime; + } + + public void setLightningFadeTime(int fadeTime) { + lightningData.lightningFadeTime = fadeTime; + } // ==================== NBT HELPERS ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java index 7909f5a56..3319b7dc6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java @@ -142,37 +142,95 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { // Display and lightning data inherited from AbilityEnergy // Barrier data - public float getBarrierMaxHealth() { return barrierData.maxHealth; } - public void setBarrierMaxHealth(float maxHealth) { barrierData.setMaxHealth(maxHealth); } + public float getBarrierMaxHealth() { + return barrierData.maxHealth; + } - public boolean isUseHealth() { return barrierData.useHealth; } - public void setUseHealth(boolean useHealth) { barrierData.useHealth = useHealth; } + public void setBarrierMaxHealth(float maxHealth) { + barrierData.setMaxHealth(maxHealth); + } - public int getBarrierDuration() { return barrierData.durationTicks; } - public void setBarrierDuration(int ticks) { barrierData.setDurationTicks(ticks); } + public boolean isUseHealth() { + return barrierData.useHealth; + } - public boolean isUseDuration() { return barrierData.useDuration; } - public void setUseDuration(boolean useDuration) { barrierData.useDuration = useDuration; } + public void setUseHealth(boolean useHealth) { + barrierData.useHealth = useHealth; + } - public float getDefaultMultiplier() { return barrierData.defaultMultiplier; } - public void setDefaultMultiplier(float mult) { barrierData.defaultMultiplier = mult; } + public int getBarrierDuration() { + return barrierData.durationTicks; + } - public void setDamageMultiplier(String typeId, float mult) { barrierData.setMultiplier(typeId, mult); } - public float getDamageMultiplier(String typeId) { return barrierData.getMultiplier(typeId); } + public void setBarrierDuration(int ticks) { + barrierData.setDurationTicks(ticks); + } + + public boolean isUseDuration() { + return barrierData.useDuration; + } + + public void setUseDuration(boolean useDuration) { + barrierData.useDuration = useDuration; + } + + public float getDefaultMultiplier() { + return barrierData.defaultMultiplier; + } + + public void setDefaultMultiplier(float mult) { + barrierData.defaultMultiplier = mult; + } + + public void setDamageMultiplier(String typeId, float mult) { + barrierData.setMultiplier(typeId, mult); + } + + public float getDamageMultiplier(String typeId) { + return barrierData.getMultiplier(typeId); + } // Knockback data - public boolean isKnockbackEnabled() { return barrierData.knockbackEnabled; } - public void setKnockbackEnabled(boolean enabled) { barrierData.knockbackEnabled = enabled; } - public float getKnockbackStrength() { return barrierData.knockbackStrength; } - public void setKnockbackStrength(float strength) { barrierData.knockbackStrength = strength; } - public String getKnockbackTargetKey() { return barrierData.getKnockbackTargetKey(); } - public void setKnockbackTargetKey(String key) { barrierData.setKnockbackTargetFromKey(key); } + public boolean isKnockbackEnabled() { + return barrierData.knockbackEnabled; + } + + public void setKnockbackEnabled(boolean enabled) { + barrierData.knockbackEnabled = enabled; + } + + public float getKnockbackStrength() { + return barrierData.knockbackStrength; + } + + public void setKnockbackStrength(float strength) { + barrierData.knockbackStrength = strength; + } + + public String getKnockbackTargetKey() { + return barrierData.getKnockbackTargetKey(); + } + + public void setKnockbackTargetKey(String key) { + barrierData.setKnockbackTargetFromKey(key); + } // Melee data - public boolean isMeleeEnabled() { return barrierData.meleeEnabled; } - public void setMeleeEnabled(boolean enabled) { barrierData.meleeEnabled = enabled; } - public float getMeleeDamageMultiplier() { return barrierData.meleeDamageMultiplier; } - public void setMeleeDamageMultiplier(float mult) { barrierData.meleeDamageMultiplier = mult; } + public boolean isMeleeEnabled() { + return barrierData.meleeEnabled; + } + + public void setMeleeEnabled(boolean enabled) { + barrierData.meleeEnabled = enabled; + } + + public float getMeleeDamageMultiplier() { + return barrierData.meleeDamageMultiplier; + } + + public void setMeleeDamageMultiplier(float mult) { + barrierData.meleeDamageMultiplier = mult; + } // ==================== GUI ==================== @@ -199,7 +257,7 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { FieldDef.floatField("ability.knockbackStrength", this::getKnockbackStrength, this::setKnockbackStrength) .range(0, 10).visibleWhen(this::isKnockbackEnabled), FieldDef.stringEnumField("ability.knockbackTarget", EnergyBarrierData.getKnockbackTargetKeys(), - this::getKnockbackTargetKey, this::setKnockbackTargetKey) + this::getKnockbackTargetKey, this::setKnockbackTargetKey) .visibleWhen(this::isKnockbackEnabled) )); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyProjectile.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyProjectile.java index d9ab67646..6575b29c0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyProjectile.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyProjectile.java @@ -2,10 +2,14 @@ package kamkeel.npcs.controllers.data.ability.type.energy; 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.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyTrajectoryData; +import kamkeel.npcs.controllers.data.ability.data.ProjectileData; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -24,7 +28,7 @@ import java.util.List; * Abstract base for energy projectile abilities (Orb, Disc, Beam, LaserShot). * Handles shared lifecycle (windup → execute → active → completion), multi-projectile * support with staggered firing, telegraph creation, NBT persistence, and GUI definitions. - * + *

* Subclasses provide entity creation/firing/charging logic and type-specific fields. * * @param The entity type this ability spawns @@ -74,7 +78,7 @@ public abstract class AbilityEnergyProjectile * Called during windup (tick 1) and burst refire (onExecute when entities are null). */ protected abstract E createEntity(EntityLivingBase caster, EntityLivingBase target, - Vec3 spawnPos, EnergyDisplayData resolved, int index); + Vec3 spawnPos, EnergyDisplayData resolved, int index); /** * Fire an entity (start moving toward target). Entity is guaranteed non-null and alive. @@ -90,7 +94,7 @@ public abstract class AbilityEnergyProjectile * Setup entity for preview mode during windup. */ protected abstract void setupEntityPreview(E entity, EntityLivingBase caster, - EnergyDisplayData resolved, ProjectileData projData, int index); + EnergyDisplayData resolved, ProjectileData projData, int index); /** * Create typed array (Java generics can't create generic arrays). @@ -129,9 +133,12 @@ public abstract class AbilityEnergyProjectile */ protected AnchorPoint getDefaultAnchor(int index) { switch (index) { - case 0: return AnchorPoint.RIGHT_HAND; - case 1: return AnchorPoint.LEFT_HAND; - default: return AnchorPoint.FRONT; + case 0: + return AnchorPoint.RIGHT_HAND; + case 1: + return AnchorPoint.LEFT_HAND; + default: + return AnchorPoint.FRONT; } } @@ -168,15 +175,31 @@ public abstract class AbilityEnergyProjectile } } - public int getProjectileCount() { return projectileCount; } + public int getProjectileCount() { + return projectileCount; + } - public int getFireDelay() { return fireDelay; } - public void setFireDelay(int delay) { this.fireDelay = Math.max(0, delay); } + public int getFireDelay() { + return fireDelay; + } - /** @deprecated Use {@link #getFireDelay()} */ - public int getDualFireDelay() { return fireDelay; } - /** @deprecated Use {@link #setFireDelay(int)} */ - public void setDualFireDelay(int delay) { setFireDelay(delay); } + public void setFireDelay(int delay) { + this.fireDelay = Math.max(0, delay); + } + + /** + * @deprecated Use {@link #getFireDelay()} + */ + public int getDualFireDelay() { + return fireDelay; + } + + /** + * @deprecated Use {@link #setFireDelay(int)} + */ + public void setDualFireDelay(int delay) { + setFireDelay(delay); + } protected int clampIndex(int index) { return Math.max(0, Math.min(index, projectileCount - 1)); @@ -317,7 +340,7 @@ public abstract class AbilityEnergyProjectile // Check if entity was removed from world (chunk unload, etc.) // Skip this check for preview entities - they're not registered in the world if (!isPreview() && tick > 5 && entity.worldObj != null - && entity.worldObj.getEntityByID(entity.getEntityId()) != entity) { + && entity.worldObj.getEntityByID(entity.getEntityId()) != entity) { entity.setDead(); continue; } @@ -449,64 +472,163 @@ public abstract class AbilityEnergyProjectile // ==================== API GETTERS & SETTERS ==================== // Combat data - @Override public float getDamage() { return combatData.damage; } - @Override public void setDamage(float damage) { combatData.damage = damage; } + @Override + public float getDamage() { + return combatData.damage; + } - @Override public float getKnockback() { return combatData.knockback; } - @Override public void setKnockback(float knockback) { combatData.knockback = knockback; } + @Override + public void setDamage(float damage) { + combatData.damage = damage; + } - @Override public float getKnockbackUp() { return combatData.knockbackUp; } - @Override public void setKnockbackUp(float knockbackUp) { combatData.knockbackUp = knockbackUp; } + @Override + public float getKnockback() { + return combatData.knockback; + } - @Override public boolean isExplosive() { return combatData.explosive; } - @Override public void setExplosive(boolean explosive) { combatData.explosive = explosive; } + @Override + public void setKnockback(float knockback) { + combatData.knockback = knockback; + } - @Override public float getExplosionRadius() { return combatData.explosionRadius; } - @Override public void setExplosionRadius(float explosionRadius) { combatData.explosionRadius = explosionRadius; } + @Override + public float getKnockbackUp() { + return combatData.knockbackUp; + } - @Override public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } - @Override public void setExplosionDamageFalloff(float falloff) { combatData.explosionDamageFalloff = falloff; } + @Override + public void setKnockbackUp(float knockbackUp) { + combatData.knockbackUp = knockbackUp; + } + + @Override + public boolean isExplosive() { + return combatData.explosive; + } + + @Override + public void setExplosive(boolean explosive) { + combatData.explosive = explosive; + } + + @Override + public float getExplosionRadius() { + return combatData.explosionRadius; + } + + @Override + public void setExplosionRadius(float explosionRadius) { + combatData.explosionRadius = explosionRadius; + } + + @Override + public float getExplosionDamageFalloff() { + return combatData.explosionDamageFalloff; + } + + @Override + public void setExplosionDamageFalloff(float falloff) { + combatData.explosionDamageFalloff = falloff; + } // Lifespan data - @Override public float getMaxDistance() { return lifespanData.maxDistance; } - @Override public void setMaxDistance(float maxDistance) { lifespanData.maxDistance = maxDistance; } + @Override + public float getMaxDistance() { + return lifespanData.maxDistance; + } - @Override public int getMaxLifetime() { return lifespanData.maxLifetime; } - @Override public void setMaxLifetime(int maxLifetime) { lifespanData.maxLifetime = maxLifetime; } + @Override + public void setMaxDistance(float maxDistance) { + lifespanData.maxDistance = maxDistance; + } + + @Override + public int getMaxLifetime() { + return lifespanData.maxLifetime; + } + + @Override + public void setMaxLifetime(int maxLifetime) { + lifespanData.maxLifetime = maxLifetime; + } // Homing data - public boolean isHoming() { return homingData.homing; } - public void setHoming(boolean homing) { homingData.homing = homing; } + public boolean isHoming() { + return homingData.homing; + } - public float getHomingStrength() { return homingData.homingStrength; } - public void setHomingStrength(float strength) { homingData.homingStrength = strength; } + public void setHoming(boolean homing) { + homingData.homing = homing; + } - public float getHomingRange() { return homingData.homingRange; } - public void setHomingRange(float range) { homingData.homingRange = range; } + public float getHomingStrength() { + return homingData.homingStrength; + } + + public void setHomingStrength(float strength) { + homingData.homingStrength = strength; + } + + public float getHomingRange() { + return homingData.homingRange; + } + + public void setHomingRange(float range) { + homingData.homingRange = range; + } // Display and lightning data inherited from AbilityEnergy // Anchor - default to projectile 0 - public AnchorPoint getAnchorPointEnum() { return projectiles[0].anchor.anchorPoint; } - public void setAnchorPointEnum(AnchorPoint point) { projectiles[0].anchor.anchorPoint = point; } + public AnchorPoint getAnchorPointEnum() { + return projectiles[0].anchor.anchorPoint; + } - public float getAnchorOffsetX() { return projectiles[0].anchor.anchorOffsetX; } - public void setAnchorOffsetX(float x) { projectiles[0].anchor.anchorOffsetX = x; } + public void setAnchorPointEnum(AnchorPoint point) { + projectiles[0].anchor.anchorPoint = point; + } - public float getAnchorOffsetY() { return projectiles[0].anchor.anchorOffsetY; } - public void setAnchorOffsetY(float y) { projectiles[0].anchor.anchorOffsetY = y; } + public float getAnchorOffsetX() { + return projectiles[0].anchor.anchorOffsetX; + } - public float getAnchorOffsetZ() { return projectiles[0].anchor.anchorOffsetZ; } - public void setAnchorOffsetZ(float z) { projectiles[0].anchor.anchorOffsetZ = z; } + public void setAnchorOffsetX(float x) { + projectiles[0].anchor.anchorOffsetX = x; + } - @Override public int getAnchorPoint() { return projectiles[0].anchor.anchorPoint.ordinal(); } - @Override public void setAnchorPoint(int point) { projectiles[0].anchor.anchorPoint = AnchorPoint.fromOrdinal(point); } + public float getAnchorOffsetY() { + return projectiles[0].anchor.anchorOffsetY; + } + + public void setAnchorOffsetY(float y) { + projectiles[0].anchor.anchorOffsetY = y; + } + + public float getAnchorOffsetZ() { + return projectiles[0].anchor.anchorOffsetZ; + } + + public void setAnchorOffsetZ(float z) { + projectiles[0].anchor.anchorOffsetZ = z; + } + + @Override + public int getAnchorPoint() { + return projectiles[0].anchor.anchorPoint.ordinal(); + } + + @Override + public void setAnchorPoint(int point) { + projectiles[0].anchor.anchorPoint = AnchorPoint.fromOrdinal(point); + } // Indexed API methods public int getInnerColor(int index) { ProjectileData p = projectiles[clampIndex(index)]; return p.colorOverride ? p.innerColor : displayData.innerColor; } + public void setInnerColor(int index, int color) { ProjectileData p = projectiles[clampIndex(index)]; p.colorOverride = true; @@ -517,17 +639,32 @@ public abstract class AbilityEnergyProjectile ProjectileData p = projectiles[clampIndex(index)]; return p.colorOverride ? p.outerColor : displayData.outerColor; } + public void setOuterColor(int index, int color) { ProjectileData p = projectiles[clampIndex(index)]; p.colorOverride = true; p.outerColor = color; } - public int getAnchorPoint(int index) { return projectiles[clampIndex(index)].anchor.anchorPoint.ordinal(); } - public void setAnchorPoint(int index, int point) { projectiles[clampIndex(index)].anchor.anchorPoint = AnchorPoint.fromOrdinal(point); } - public void setAnchorOffsetX(int index, float offset) { projectiles[clampIndex(index)].anchor.anchorOffsetX = offset; } - public void setAnchorOffsetY(int index, float offset) { projectiles[clampIndex(index)].anchor.anchorOffsetY = offset; } - public void setAnchorOffsetZ(int index, float offset) { projectiles[clampIndex(index)].anchor.anchorOffsetZ = offset; } + public int getAnchorPoint(int index) { + return projectiles[clampIndex(index)].anchor.anchorPoint.ordinal(); + } + + public void setAnchorPoint(int index, int point) { + projectiles[clampIndex(index)].anchor.anchorPoint = AnchorPoint.fromOrdinal(point); + } + + public void setAnchorOffsetX(int index, float offset) { + projectiles[clampIndex(index)].anchor.anchorOffsetX = offset; + } + + public void setAnchorOffsetY(int index, float offset) { + projectiles[clampIndex(index)].anchor.anchorOffsetY = offset; + } + + public void setAnchorOffsetZ(int index, float offset) { + projectiles[clampIndex(index)].anchor.anchorOffsetZ = offset; + } // ==================== GUI FIELD DEFINITIONS ==================== @@ -555,7 +692,7 @@ public abstract class AbilityEnergyProjectile .visibleWhen(() -> idx < projectileCount)); defs.add(FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, - () -> projectiles[idx].anchor.anchorPoint, v -> projectiles[idx].anchor.anchorPoint = v) + () -> projectiles[idx].anchor.anchorPoint, v -> projectiles[idx].anchor.anchorPoint = v) .tab("ability.tab.visual").visibleWhen(() -> idx < projectileCount)); defs.add(FieldDef.row( FieldDef.floatField("ability.anchor.offsetX", () -> projectiles[idx].anchor.anchorOffsetX, v -> projectiles[idx].anchor.anchorOffsetX = v) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityLaserShot.java index c62c886e7..51f3da8ca 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityLaserShot.java @@ -6,7 +6,11 @@ import kamkeel.npcs.controllers.data.ability.AnchorPoint; import kamkeel.npcs.controllers.data.ability.LockMovementType; import kamkeel.npcs.controllers.data.ability.RotationMode; import kamkeel.npcs.controllers.data.ability.TargetingMode; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.ProjectileData; import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; @@ -111,7 +115,7 @@ public class AbilityLaserShot extends AbilityEnergyProjectile implem @Override protected EntityAbilityOrb createEntity(EntityLivingBase caster, EntityLivingBase target, - Vec3 spawnPos, EnergyDisplayData resolved, int index) { + Vec3 spawnPos, EnergyDisplayData resolved, int index) { return new EntityAbilityOrb( caster.worldObj, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, orbSize, @@ -74,7 +78,7 @@ public class AbilityOrb extends AbilityEnergyProjectile implem @Override protected void setupEntityPreview(EntityAbilityOrb orb, EntityLivingBase caster, - EnergyDisplayData resolved, ProjectileData projData, int index) { + EnergyDisplayData resolved, ProjectileData projData, int index) { orb.setupPreview(caster, orbSize, resolved, lightningData, projData.anchor, windUpTicks); } @@ -137,11 +141,21 @@ public class AbilityOrb extends AbilityEnergyProjectile implem // ==================== TYPE-SPECIFIC GETTERS ==================== - public float getOrbSpeed() { return homingData.speed; } - public void setOrbSpeed(float speed) { homingData.speed = speed; } + public float getOrbSpeed() { + return homingData.speed; + } - public float getOrbSize() { return orbSize; } - public void setOrbSize(float size) { this.orbSize = size; } + public void setOrbSpeed(float speed) { + homingData.speed = speed; + } + + public float getOrbSize() { + return orbSize; + } + + public void setOrbSize(float size) { + this.orbSize = size; + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java index 3cb407ef3..5d78e8c1d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java @@ -12,7 +12,6 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyPanelData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityEnergyBarrier; import kamkeel.npcs.entity.EntityEnergyPanel; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -124,11 +123,21 @@ public class AbilityShield extends AbilityEnergyBarrier { // ==================== GETTERS & SETTERS ==================== - public float getShieldWidth() { return shieldWidth; } - public void setShieldWidth(float width) { this.shieldWidth = Math.max(0.5f, width); } + public float getShieldWidth() { + return shieldWidth; + } - public float getShieldHeight() { return shieldHeight; } - public void setShieldHeight(float height) { this.shieldHeight = Math.max(0.5f, height); } + public void setShieldWidth(float width) { + this.shieldWidth = Math.max(0.5f, width); + } + + public float getShieldHeight() { + return shieldHeight; + } + + public void setShieldHeight(float height) { + this.shieldHeight = Math.max(0.5f, height); + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySlicer.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySlicer.java index c79822f52..387762c9b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySlicer.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySlicer.java @@ -5,7 +5,11 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.AbilityVariant; 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.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyHomingData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.ProjectileData; import kamkeel.npcs.controllers.data.ability.gui.AbilityFieldDefs; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityEnergySlicer; @@ -53,7 +57,7 @@ public class AbilitySlicer extends AbilityEnergyProjectile { @Override protected EntityEnergySlicer createEntity(EntityLivingBase caster, EntityLivingBase target, - Vec3 spawnPos, EnergyDisplayData resolved, int index) { + Vec3 spawnPos, EnergyDisplayData resolved, int index) { return new EntityEnergySlicer( caster.worldObj, caster, target, spawnPos.xCoord, spawnPos.yCoord, spawnPos.zCoord, @@ -79,7 +83,7 @@ public class AbilitySlicer extends AbilityEnergyProjectile { @Override protected void setupEntityPreview(EntityEnergySlicer slicer, EntityLivingBase caster, - EnergyDisplayData resolved, ProjectileData projData, int index) { + EnergyDisplayData resolved, ProjectileData projData, int index) { slicer.setupPreview(caster, sliceWidth, sliceThickness, resolved, lightningData, projData.anchor, windUpTicks); } @@ -130,17 +134,37 @@ public class AbilitySlicer extends AbilityEnergyProjectile { // ==================== TYPE-SPECIFIC GETTERS ==================== - public float getSlicerSpeed() { return homingData.speed; } - public void setSlicerSpeed(float speed) { homingData.speed = speed; } + public float getSlicerSpeed() { + return homingData.speed; + } - public float getSliceWidth() { return sliceWidth; } - public void setSliceWidth(float width) { this.sliceWidth = Math.max(0.5f, width); } + public void setSlicerSpeed(float speed) { + homingData.speed = speed; + } - public float getSliceThickness() { return sliceThickness; } - public void setSliceThickness(float thickness) { this.sliceThickness = Math.max(0.05f, thickness); } + public float getSliceWidth() { + return sliceWidth; + } - public boolean isPiercing() { return piercing; } - public void setPiercing(boolean piercing) { this.piercing = piercing; } + public void setSliceWidth(float width) { + this.sliceWidth = Math.max(0.5f, width); + } + + public float getSliceThickness() { + return sliceThickness; + } + + public void setSliceThickness(float thickness) { + this.sliceThickness = Math.max(0.05f, thickness); + } + + public boolean isPiercing() { + return piercing; + } + + public void setPiercing(boolean piercing) { + this.piercing = piercing; + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySweeper.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySweeper.java index 67f9643d3..1e0302522 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilitySweeper.java @@ -22,7 +22,7 @@ import java.util.List; * 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. */ @@ -173,24 +173,77 @@ public class AbilitySweeper extends AbilityEnergy implements IAbilitySweeper { } // Getters & Setters (type-specific only; color/lightning inherited from AbilityEnergy) - 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 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; + } @Override public int getMaxPreviewDuration() { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java index f6bc037a4..60680888f 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java @@ -11,7 +11,6 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyPanelData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; import kamkeel.npcs.entity.EntityEnergyBarrier; import kamkeel.npcs.entity.EntityEnergyPanel; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -139,28 +138,65 @@ public class AbilityWall extends AbilityEnergyBarrier { // ==================== GETTERS & SETTERS ==================== - public EnergyPanelData getPanelData() { return panelData; } + public EnergyPanelData getPanelData() { + return panelData; + } - public float getPanelWidth() { return panelData.panelWidth; } - public void setPanelWidth(float width) { panelData.setPanelWidth(width); } + public float getPanelWidth() { + return panelData.panelWidth; + } - public float getPanelHeight() { return panelData.panelHeight; } - public void setPanelHeight(float height) { panelData.setPanelHeight(height); } + public void setPanelWidth(float width) { + panelData.setPanelWidth(width); + } - public float getHeightOffset() { return panelData.heightOffset; } - public void setHeightOffset(float offset) { panelData.heightOffset = offset; } + public float getPanelHeight() { + return panelData.panelHeight; + } - public boolean isLaunching() { return panelData.launching; } - public void setLaunching(boolean launching) { panelData.launching = launching; } + public void setPanelHeight(float height) { + panelData.setPanelHeight(height); + } - public float getLaunchSpeed() { return panelData.launchSpeed; } - public void setLaunchSpeed(float speed) { panelData.setLaunchSpeed(speed); } + public float getHeightOffset() { + return panelData.heightOffset; + } - public float getLaunchDamage() { return panelData.launchDamage; } - public void setLaunchDamage(float damage) { panelData.setLaunchDamage(damage); } + public void setHeightOffset(float offset) { + panelData.heightOffset = offset; + } - public float getLaunchKnockback() { return panelData.launchKnockback; } - public void setLaunchKnockback(float kb) { panelData.setLaunchKnockback(kb); } + public boolean isLaunching() { + return panelData.launching; + } + + public void setLaunching(boolean launching) { + panelData.launching = launching; + } + + public float getLaunchSpeed() { + return panelData.launchSpeed; + } + + public void setLaunchSpeed(float speed) { + panelData.setLaunchSpeed(speed); + } + + public float getLaunchDamage() { + return panelData.launchDamage; + } + + public void setLaunchDamage(float damage) { + panelData.setLaunchDamage(damage); + } + + public float getLaunchKnockback() { + return panelData.launchKnockback; + } + + public void setLaunchKnockback(float kb) { + panelData.setLaunchKnockback(kb); + } // ==================== TYPE-SPECIFIC GUI ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java index 4b6b6e18d..87cddc415 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBeam.java @@ -1,9 +1,14 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; -import noppes.npcs.EventHooks; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -11,6 +16,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import noppes.npcs.EventHooks; import noppes.npcs.LogWriter; import java.util.ArrayList; @@ -19,10 +25,10 @@ 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 EntityEnergyProjectile { @@ -63,6 +69,7 @@ public class EntityAbilityBeam extends EntityEnergyProjectile { /** * 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). */ @@ -214,7 +221,7 @@ public class EntityAbilityBeam extends EntityEnergyProjectile { /** * 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 */ @@ -281,8 +288,8 @@ public class EntityAbilityBeam extends EntityEnergyProjectile { // Check distance using head offset (distance from origin) double distFromOrigin = Math.sqrt( headOffsetX * headOffsetX + - headOffsetY * headOffsetY + - headOffsetZ * headOffsetZ + headOffsetY * headOffsetY + + headOffsetZ * headOffsetZ ); boolean exceeded = distFromOrigin >= getMaxDistance(); if (exceeded && !worldObj.isRemote && DEBUG_LOGGING) { @@ -440,8 +447,8 @@ public class EntityAbilityBeam extends EntityEnergyProjectile { 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) + (headOffsetY - lastPoint.yCoord) * (headOffsetY - lastPoint.yCoord) + + (headOffsetZ - lastPoint.zCoord) * (headOffsetZ - lastPoint.zCoord) ); if (dist >= MIN_POINT_DISTANCE) { diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java index 72ebe29ae..2b8a99d07 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDisc.java @@ -1,22 +1,28 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; -import noppes.npcs.EventHooks; 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.EventHooks; 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 EntityEnergyProjectile { @@ -252,8 +258,8 @@ public class EntityAbilityDisc extends EntityEnergyProjectile { protected boolean checkMaxDistance() { double distTraveled = Math.sqrt( (posX - startX) * (posX - startX) + - (posY - startY) * (posY - startY) + - (posZ - startZ) * (posZ - startZ) + (posY - startY) * (posY - startY) + + (posZ - startZ) * (posZ - startZ) ); if (boomerang) { @@ -270,8 +276,8 @@ public class EntityAbilityDisc extends EntityEnergyProjectile { 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) + (posY - owner.posY) * (posY - owner.posY) + + (posZ - owner.posZ) * (posZ - owner.posZ) ); return distToOwner < 1.5; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 391d9466c..1a13c1060 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -1,15 +1,19 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLifespanData; +import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; +import kamkeel.npcs.controllers.data.ability.data.EnergyTrajectoryData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; -import noppes.npcs.EventHooks; 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.EventHooks; import java.util.HashSet; import java.util.List; @@ -18,7 +22,7 @@ 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 EntityEnergyProjectile { @@ -246,8 +250,8 @@ public class EntityAbilityLaser extends EntityEnergyProjectile { // 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) + (blockHit.hitVec.yCoord - startY) * (blockHit.hitVec.yCoord - startY) + + (blockHit.hitVec.zCoord - startZ) * (blockHit.hitVec.zCoord - startZ) ); endX = blockHit.hitVec.xCoord; endY = blockHit.hitVec.yCoord; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java index 61cbe7a0b..82447edd2 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityOrb.java @@ -1,22 +1,28 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; -import noppes.npcs.EventHooks; 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.EventHooks; import java.util.List; /** * Orb projectile - spherical homing energy ball. * Extends EntityEnergyAbility for shared functionality. - * + *

* Design inspired by LouisXIV's energy attack system. */ public class EntityAbilityOrb extends EntityEnergyProjectile { diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java index f8b0aaac1..f215ca6d6 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilitySweeper.java @@ -23,7 +23,7 @@ import java.util.Set; * Unlike other projectiles, this handles its own damage logic since it's * attached to and rotates around the caster. * Extends EntityEnergyAbility for shared visual/owner/charging state. - * + *

* Design: Similar to Beam trail visuals but rotating around origin. */ public class EntityAbilitySweeper extends EntityEnergyAbility { @@ -65,11 +65,11 @@ public class EntityAbilitySweeper extends EntityEnergyAbility { } public EntityAbilitySweeper(World world, EntityLivingBase owner, EntityLivingBase target, - float beamLength, float beamWidth, float beamHeight, - EnergyDisplayData displayData, - float sweepSpeed, int numberOfRotations, - float damage, int damageInterval, boolean piercing, - boolean lockOnTarget) { + float beamLength, float beamWidth, float beamHeight, + EnergyDisplayData displayData, + float sweepSpeed, int numberOfRotations, + float damage, int damageInterval, boolean piercing, + boolean lockOnTarget) { this(world); this.ownerEntityId = owner.getEntityId(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java index 11eaade79..ac42b3b1d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java @@ -34,16 +34,20 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD // ENUMS // ═══════════════════════════════════════════════════════════════════ - public enum ZoneType { TRAP, HAZARD } + public enum ZoneType {TRAP, HAZARD} + public enum ZoneShape { CIRCLE, SQUARE; @Override public String toString() { switch (this) { - case CIRCLE: return "ability.shape.circle"; - case SQUARE: return "ability.shape.square"; - default: return name(); + case CIRCLE: + return "ability.shape.circle"; + case SQUARE: + return "ability.shape.square"; + default: + return name(); } } } @@ -54,10 +58,14 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD @Override public String toString() { switch (this) { - case STATIC: return "ability.accentStyle.static"; - case SWAYING: return "ability.accentStyle.swaying"; - case FLICKERING: return "ability.accentStyle.flickering"; - default: return name(); + case STATIC: + return "ability.accentStyle.static"; + case SWAYING: + return "ability.accentStyle.swaying"; + case FLICKERING: + return "ability.accentStyle.flickering"; + default: + return name(); } } } @@ -68,10 +76,14 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD @Override public String toString() { switch (this) { - case RISING: return "ability.particleMotion.rising"; - case DRIFTING: return "ability.particleMotion.drifting"; - case SPARKS: return "ability.particleMotion.sparks"; - default: return name(); + case RISING: + return "ability.particleMotion.rising"; + case DRIFTING: + return "ability.particleMotion.drifting"; + case SPARKS: + return "ability.particleMotion.sparks"; + default: + return name(); } } } @@ -174,7 +186,7 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD } private EntityAbilityZone(World world, ZoneType type, EntityLivingBase owner, - double x, double y, double z) { + double x, double y, double z) { this(world); this.zoneType = type; this.ownerEntityId = owner.getEntityId(); @@ -184,17 +196,17 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD } public static EntityAbilityZone createTrap(World world, EntityLivingBase owner, - double x, double y, double z, - ZoneShape shape, - float triggerRadius, int armTime, int maxTriggers, - int triggerCooldown, float damage, float damageRadius, - float knockback, int durationTicks, - int innerColor, int outerColor, boolean outerColorEnabled, - float zoneHeight, - float particleDensity, float particleScale, - float animSpeed, float lightningDensity, - boolean visible, - List effects) { + double x, double y, double z, + ZoneShape shape, + float triggerRadius, int armTime, int maxTriggers, + int triggerCooldown, float damage, float damageRadius, + float knockback, int durationTicks, + int innerColor, int outerColor, boolean outerColorEnabled, + float zoneHeight, + float particleDensity, float particleScale, + float animSpeed, float lightningDensity, + boolean visible, + List effects) { EntityAbilityZone zone = new EntityAbilityZone(world, ZoneType.TRAP, owner, x, y, z); zone.shape = shape; zone.radius = triggerRadius; @@ -226,17 +238,17 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD } public static EntityAbilityZone createHazard(World world, EntityLivingBase owner, - double x, double y, double z, - ZoneShape shape, - float radius, - float damagePerSecond, int damageInterval, - boolean ignoreInvulnFrames, boolean affectsCaster, - int durationTicks, - int innerColor, int outerColor, boolean outerColorEnabled, - float zoneHeight, - float particleDensity, float particleScale, - float animSpeed, float lightningDensity, - List effects) { + double x, double y, double z, + ZoneShape shape, + float radius, + float damagePerSecond, int damageInterval, + boolean ignoreInvulnFrames, boolean affectsCaster, + int durationTicks, + int innerColor, int outerColor, boolean outerColorEnabled, + float zoneHeight, + float particleDensity, float particleScale, + float animSpeed, float lightningDensity, + List effects) { EntityAbilityZone zone = new EntityAbilityZone(world, ZoneType.HAZARD, owner, x, y, z); zone.shape = shape; zone.radius = radius; @@ -268,7 +280,8 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD // ═══════════════════════════════════════════════════════════════════ @Override - protected void entityInit() {} + protected void entityInit() { + } @Override public void handleHealthUpdate(byte id) { @@ -549,45 +562,133 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD // GETTERS FOR RENDERER // ═══════════════════════════════════════════════════════════════════ - public ZoneType getZoneType() { return zoneType; } - public ZoneShape getShape() { return shape; } - public float getRadius() { return radius; } - public int getInnerColor() { return innerColor; } - public int getOuterColor() { return outerColor; } - public boolean isOuterColorEnabled() { return outerColorEnabled; } - public float getZoneHeight() { return zoneHeight; } - public boolean isArmed() { return armed || ticksExisted >= armTime; } - public boolean isVisible() { return visible; } - public int getTriggerFlashTick() { return triggerFlashTick; } - public int getDurationTicks() { return durationTicks; } - public int getMaxTicks() { return maxTicks; } - public float getParticleDensity() { return particleDensity; } - public float getParticleScale() { return particleScale; } - public float getAnimSpeed() { return animSpeed; } - public float getLightningDensity() { return lightningDensity; } + public ZoneType getZoneType() { + return zoneType; + } - public boolean isGroundFill() { return groundFill; } - public float getGroundAlpha() { return groundAlpha; } - public boolean isRings() { return rings; } - public int getRingCount() { return ringCount; } - public boolean isBorder() { return border; } - public float getBorderSpeed() { return borderSpeed; } - public boolean isAccents() { return accents; } - public int getAccentStyle() { return accentStyle; } - public boolean isLightning() { return lightning; } - public boolean isParticles() { return particles; } - public int getParticleMotion() { return particleMotion; } - public String getParticleDir() { return particleDir; } - public int getParticleSize() { return particleSize; } - public boolean isParticleGlow() { return particleGlow; } + public ZoneShape getShape() { + return shape; + } + + public float getRadius() { + return radius; + } + + public int getInnerColor() { + return innerColor; + } + + public int getOuterColor() { + return outerColor; + } + + public boolean isOuterColorEnabled() { + return outerColorEnabled; + } + + public float getZoneHeight() { + return zoneHeight; + } + + public boolean isArmed() { + return armed || ticksExisted >= armTime; + } + + public boolean isVisible() { + return visible; + } + + public int getTriggerFlashTick() { + return triggerFlashTick; + } + + public int getDurationTicks() { + return durationTicks; + } + + public int getMaxTicks() { + return maxTicks; + } + + public float getParticleDensity() { + return particleDensity; + } + + public float getParticleScale() { + return particleScale; + } + + public float getAnimSpeed() { + return animSpeed; + } + + public float getLightningDensity() { + return lightningDensity; + } + + public boolean isGroundFill() { + return groundFill; + } + + public float getGroundAlpha() { + return groundAlpha; + } + + public boolean isRings() { + return rings; + } + + public int getRingCount() { + return ringCount; + } + + public boolean isBorder() { + return border; + } + + public float getBorderSpeed() { + return borderSpeed; + } + + public boolean isAccents() { + return accents; + } + + public int getAccentStyle() { + return accentStyle; + } + + public boolean isLightning() { + return lightning; + } + + public boolean isParticles() { + return particles; + } + + public int getParticleMotion() { + return particleMotion; + } + + public String getParticleDir() { + return particleDir; + } + + public int getParticleSize() { + return particleSize; + } + + public boolean isParticleGlow() { + return particleGlow; + } public void applyVisual(boolean groundFill, float groundAlpha, - boolean rings, int ringCount, - boolean border, float borderSpeed, - boolean accents, int accentStyle, - boolean lightning, - boolean particles, int particleMotion, - String particleDir, int particleSize, boolean particleGlow) { + boolean rings, int ringCount, + boolean border, float borderSpeed, + boolean accents, int accentStyle, + boolean lightning, + boolean particles, int particleMotion, + String particleDir, int particleSize, boolean particleGlow) { this.groundFill = groundFill; this.groundAlpha = groundAlpha; this.rings = rings; diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyAbility.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyAbility.java index c98fae96a..9721fb60e 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyAbility.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyAbility.java @@ -30,7 +30,9 @@ public abstract class EntityEnergyAbility extends Entity implements IEntityAddit protected int ownerEntityId = -1; // ==================== STATE ==================== - /** The ability that spawned this entity. Transient, not saved to NBT. */ + /** + * The ability that spawned this entity. Transient, not saved to NBT. + */ protected transient Ability sourceAbility = null; protected boolean previewMode = false; protected EntityLivingBase previewOwner = null; @@ -98,59 +100,137 @@ public abstract class EntityEnergyAbility extends Entity implements IEntityAddit return worldObj.getEntityByID(ownerEntityId); } - public int getOwnerEntityId() { return ownerEntityId; } - public void setOwnerEntityId(int id) { this.ownerEntityId = id; } + public int getOwnerEntityId() { + return ownerEntityId; + } + + public void setOwnerEntityId(int id) { + this.ownerEntityId = id; + } // ==================== SOURCE ABILITY ==================== - public Ability getSourceAbility() { return sourceAbility; } - public void setSourceAbility(Ability ability) { this.sourceAbility = ability; } + public Ability getSourceAbility() { + return sourceAbility; + } + + public void setSourceAbility(Ability ability) { + this.sourceAbility = ability; + } // ==================== PREVIEW MODE ==================== - public boolean isPreviewMode() { return previewMode; } - public void setPreviewMode(boolean preview) { this.previewMode = preview; } - public void setPreviewOwner(EntityLivingBase owner) { this.previewOwner = owner; } + public boolean isPreviewMode() { + return previewMode; + } + + public void setPreviewMode(boolean preview) { + this.previewMode = preview; + } + + public void setPreviewOwner(EntityLivingBase owner) { + this.previewOwner = owner; + } // ==================== DISPLAY GETTERS & SETTERS ==================== - public EnergyDisplayData getDisplayData() { return displayData; } - public EnergyLightningData getLightningData() { return lightningData; } + public EnergyDisplayData getDisplayData() { + return displayData; + } - public int getInnerColor() { return displayData.getInnerColor(); } - public void setInnerColor(int color) { displayData.setInnerColor(color); } + public EnergyLightningData getLightningData() { + return lightningData; + } - public float getInnerAlpha() { return displayData.getInnerAlpha(); } - public void setInnerAlpha(float alpha) { displayData.setInnerAlpha(alpha); } + public int getInnerColor() { + return displayData.getInnerColor(); + } - public int getOuterColor() { return displayData.getOuterColor(); } - public void setOuterColor(int color) { displayData.setOuterColor(color); } + public void setInnerColor(int color) { + displayData.setInnerColor(color); + } - public boolean isOuterColorEnabled() { return displayData.isOuterColorEnabled(); } - public void setOuterColorEnabled(boolean enabled) { displayData.setOuterColorEnabled(enabled); } + public float getInnerAlpha() { + return displayData.getInnerAlpha(); + } - public float getOuterColorWidth() { return displayData.getOuterColorWidth(); } - public void setOuterColorWidth(float width) { displayData.setOuterColorWidth(width); } + public void setInnerAlpha(float alpha) { + displayData.setInnerAlpha(alpha); + } - public float getOuterColorAlpha() { return displayData.getOuterColorAlpha(); } - public void setOuterColorAlpha(float alpha) { displayData.setOuterColorAlpha(alpha); } + public int getOuterColor() { + return displayData.getOuterColor(); + } - public float getRotationSpeed() { return displayData.getRotationSpeed(); } - public void setRotationSpeed(float speed) { displayData.setRotationSpeed(speed); } + public void setOuterColor(int color) { + displayData.setOuterColor(color); + } + + public boolean isOuterColorEnabled() { + return displayData.isOuterColorEnabled(); + } + + public void setOuterColorEnabled(boolean enabled) { + displayData.setOuterColorEnabled(enabled); + } + + public float getOuterColorWidth() { + return displayData.getOuterColorWidth(); + } + + public void setOuterColorWidth(float width) { + displayData.setOuterColorWidth(width); + } + + public float getOuterColorAlpha() { + return displayData.getOuterColorAlpha(); + } + + public void setOuterColorAlpha(float alpha) { + displayData.setOuterColorAlpha(alpha); + } + + public float getRotationSpeed() { + return displayData.getRotationSpeed(); + } + + public void setRotationSpeed(float speed) { + displayData.setRotationSpeed(speed); + } // ==================== LIGHTNING GETTERS & SETTERS ==================== - public boolean hasLightningEffect() { return lightningData.isLightningEffect(); } - public void setLightningEffect(boolean enabled) { lightningData.setLightningEffect(enabled); } + public boolean hasLightningEffect() { + return lightningData.isLightningEffect(); + } - public float getLightningDensity() { return lightningData.getLightningDensity(); } - public void setLightningDensity(float density) { lightningData.setLightningDensity(density); } + public void setLightningEffect(boolean enabled) { + lightningData.setLightningEffect(enabled); + } - public float getLightningRadius() { return lightningData.getLightningRadius(); } - public void setLightningRadius(float radius) { lightningData.setLightningRadius(radius); } + public float getLightningDensity() { + return lightningData.getLightningDensity(); + } - public int getLightningFadeTime() { return lightningData.getLightningFadeTime(); } - public void setLightningFadeTime(int ticks) { lightningData.setLightningFadeTime(ticks); } + public void setLightningDensity(float density) { + lightningData.setLightningDensity(density); + } + + public float getLightningRadius() { + return lightningData.getLightningRadius(); + } + + public void setLightningRadius(float radius) { + lightningData.setLightningRadius(radius); + } + + public int getLightningFadeTime() { + return lightningData.getLightningFadeTime(); + } + + public void setLightningFadeTime(int ticks) { + lightningData.setLightningFadeTime(ticks); + } // ==================== BRIGHTNESS ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java index c295f586d..7ff4b04c2 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java @@ -1,10 +1,6 @@ package kamkeel.npcs.entity; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; -import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; -import kamkeel.npcs.controllers.data.ability.data.EnergyLightningData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -144,6 +140,7 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { * Shared barrier tick logic for onUpdate(). Handles spawned event, owner death, * duration check, hit flash decay, and tick event. * Call this after incrementing ticksAlive in subclass onUpdate(). + * * @return true if barrier died this tick (caller should return early) */ protected boolean updateBarrierTick() { @@ -223,18 +220,33 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { protected boolean isKnockbackTarget(EntityLivingBase entity) { switch (barrierData.knockbackTarget) { - case 1: return entity instanceof EntityPlayer; - case 2: return entity instanceof EntityNPCInterface; - default: return entity instanceof EntityPlayer || entity instanceof EntityNPCInterface; + case 1: + return entity instanceof EntityPlayer; + case 2: + return entity instanceof EntityNPCInterface; + default: + return entity instanceof EntityPlayer || entity instanceof EntityNPCInterface; } } // ==================== GETTERS ==================== - public EnergyBarrierData getBarrierData() { return barrierData; } - public float getCurrentHealth() { return currentHealth; } - public void setCurrentHealth(float health) { this.currentHealth = health; syncHealthPercent(); } - public int getTicksAlive() { return ticksAlive; } + public EnergyBarrierData getBarrierData() { + return barrierData; + } + + public float getCurrentHealth() { + return currentHealth; + } + + public void setCurrentHealth(float health) { + this.currentHealth = health; + syncHealthPercent(); + } + + public int getTicksAlive() { + return ticksAlive; + } // ==================== NBT HELPERS ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java index d0a2a8a96..6ba436914 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java @@ -195,10 +195,21 @@ public class EntityEnergyDome extends EntityEnergyBarrier { // ==================== GETTERS ==================== - public float getDomeRadius() { return domeRadius; } - public void setDomeRadius(float radius) { this.domeRadius = Math.max(0.1f, radius); } - public boolean isFollowCaster() { return followCaster; } - public void setFollowCaster(boolean follow) { this.followCaster = follow; } + public float getDomeRadius() { + return domeRadius; + } + + public void setDomeRadius(float radius) { + this.domeRadius = Math.max(0.1f, radius); + } + + public boolean isFollowCaster() { + return followCaster; + } + + public void setFollowCaster(boolean follow) { + this.followCaster = follow; + } // ==================== NBT ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java index 909e0dda8..98145836e 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java @@ -343,9 +343,17 @@ public class EntityEnergyPanel extends EntityEnergyBarrier { // ==================== GETTERS ==================== - public PanelMode getMode() { return mode; } - public float getPanelYaw() { return panelYaw; } - public EnergyPanelData getPanelData() { return panelData; } + public PanelMode getMode() { + return mode; + } + + public float getPanelYaw() { + return panelYaw; + } + + public EnergyPanelData getPanelData() { + return panelData; + } // ==================== NBT ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java index b4e63bace..b65439f83 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java @@ -5,7 +5,13 @@ import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.data.ability.AbilityPotionEffect; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -37,7 +43,7 @@ import java.util.Map; * Base class for all ability projectiles (Orb, Disc, Beam, Laser, Slicer). * Provides common functionality for combat, effects, homing, and interpolation. * Extends EntityEnergyAbility for shared visual/owner/charging state. - * + *

* Design inspired by LouisXIV's energy attack system. */ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { @@ -274,13 +280,14 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { /** * 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) + (posY - startY) * (posY - startY) + + (posZ - startZ) * (posZ - startZ) ); return distTraveled >= getMaxDistance(); } @@ -295,6 +302,7 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { /** * Check for collision with energy barrier entities. * Barriers only block incoming projectiles from enemies. + * * @return true if projectile was absorbed (caller should stop processing) */ protected boolean checkBarrierCollision() { @@ -455,8 +463,8 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { double dist = Math.sqrt( Math.pow(target.posX - posX, 2) + - Math.pow(target.posY - posY, 2) + - Math.pow(target.posZ - posZ, 2) + Math.pow(target.posY - posY, 2) + + Math.pow(target.posZ - posZ, 2) ); float radius = getExplosionRadius(); @@ -518,7 +526,7 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { * Update during charging state - grow size and follow anchor. * Default implementation grows {@code size} from 0 to {@code targetSize}. * Override in subclasses for type-specific charging (Disc, Beam). - * + *

* Note: Owner death checks are handled by onUpdate() before this is called. */ protected void updateCharging() { @@ -580,7 +588,7 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { * Call from subclass constructors after initProjectile(). */ protected void calculateInitialVelocity(EntityLivingBase owner, EntityLivingBase target, - double x, double y, double z) { + double x, double y, double z) { if (target != null) { double dx = target.posX - x; double dy = (target.posY + target.getEyeHeight()) - y; @@ -701,7 +709,10 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { // ==================== VISUAL GETTERS & SETTERS ==================== - public float getSize() { return size; } + public float getSize() { + return size; + } + public void setProjectileSize(float size) { this.size = size; this.renderCurrentSize = size; @@ -738,64 +749,147 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { // ==================== LIFESPAN GETTERS & SETTERS ==================== - public float getMaxDistance() { return lifespanData.getMaxDistance(); } - public void setMaxDistance(float distance) { lifespanData.setMaxDistance(distance); } + public float getMaxDistance() { + return lifespanData.getMaxDistance(); + } - public int getMaxLifetime() { return lifespanData.getMaxLifetime(); } - public void setMaxLifetime(int ticks) { lifespanData.setMaxLifetime(ticks); } + public void setMaxDistance(float distance) { + lifespanData.setMaxDistance(distance); + } + + public int getMaxLifetime() { + return lifespanData.getMaxLifetime(); + } + + public void setMaxLifetime(int ticks) { + lifespanData.setMaxLifetime(ticks); + } // ==================== COMBAT GETTERS & SETTERS ==================== - public float getDamage() { return combatData.getDamage(); } - public void setCombatDamage(float damage) { combatData.setDamage(damage); } + public float getDamage() { + return combatData.getDamage(); + } - public float getKnockback() { return combatData.knockback; } - public void setCombatKnockback(float knockback) { combatData.setKnockback(knockback); } + public void setCombatDamage(float damage) { + combatData.setDamage(damage); + } - public float getKnockbackUp() { return combatData.knockbackUp; } - public void setCombatKnockbackUp(float knockbackUp) { combatData.setKnockbackUp(knockbackUp); } + public float getKnockback() { + return combatData.knockback; + } - public boolean isExplosive() { return combatData.isExplosive(); } - public void setExplosive(boolean explosive) { combatData.setExplosive(explosive); } + public void setCombatKnockback(float knockback) { + combatData.setKnockback(knockback); + } - public float getExplosionRadius() { return combatData.explosionRadius; } - public void setExplosionRadius(float radius) { combatData.setExplosionRadius(radius); } + public float getKnockbackUp() { + return combatData.knockbackUp; + } - public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } - public void setExplosionDamageFalloff(float falloff) { combatData.setExplosionDamageFalloff(falloff); } + public void setCombatKnockbackUp(float knockbackUp) { + combatData.setKnockbackUp(knockbackUp); + } + + public boolean isExplosive() { + return combatData.isExplosive(); + } + + public void setExplosive(boolean explosive) { + combatData.setExplosive(explosive); + } + + public float getExplosionRadius() { + return combatData.explosionRadius; + } + + public void setExplosionRadius(float radius) { + combatData.setExplosionRadius(radius); + } + + public float getExplosionDamageFalloff() { + return combatData.explosionDamageFalloff; + } + + public void setExplosionDamageFalloff(float falloff) { + combatData.setExplosionDamageFalloff(falloff); + } // ==================== HOMING GETTERS & SETTERS ==================== - public boolean isHoming() { return homingData.isHoming(); } - public void setHomingEnabled(boolean homing) { homingData.setHoming(homing); } + public boolean isHoming() { + return homingData.isHoming(); + } - public float getHomingStrength() { return homingData.getHomingStrength(); } - public void setHomingStrength(float strength) { homingData.setHomingStrength(strength); } + public void setHomingEnabled(boolean homing) { + homingData.setHoming(homing); + } - public float getHomingRange() { return homingData.getHomingRange(); } - public void setHomingRange(float range) { homingData.setHomingRange(range); } + public float getHomingStrength() { + return homingData.getHomingStrength(); + } + + public void setHomingStrength(float strength) { + homingData.setHomingStrength(strength); + } + + public float getHomingRange() { + return homingData.getHomingRange(); + } + + public void setHomingRange(float range) { + homingData.setHomingRange(range); + } // ==================== SPEED & ANCHOR GETTERS & SETTERS ==================== - public float getSpeed() { return homingData.getSpeed(); } - public void setSpeed(float speed) { homingData.setSpeed(speed); } + public float getSpeed() { + return homingData.getSpeed(); + } - public AnchorPoint getAnchorPoint() { return anchorData.getAnchorPoint(); } + public void setSpeed(float speed) { + homingData.setSpeed(speed); + } - public int getAnchor() { return anchorData.getAnchor(); } - public float getAnchorOffsetX() { return anchorData.getAnchorOffsetX(); } - public float getAnchorOffsetY() { return anchorData.getAnchorOffsetY(); } - public float getAnchorOffsetZ() { return anchorData.getAnchorOffsetZ(); } + public AnchorPoint getAnchorPoint() { + return anchorData.getAnchorPoint(); + } + + public int getAnchor() { + return anchorData.getAnchor(); + } + + public float getAnchorOffsetX() { + return anchorData.getAnchorOffsetX(); + } + + public float getAnchorOffsetY() { + return anchorData.getAnchorOffsetY(); + } + + public float getAnchorOffsetZ() { + return anchorData.getAnchorOffsetZ(); + } // ==================== MOVEMENT GETTERS ==================== - public double getStartX() { return startX; } - public double getStartY() { return startY; } - public double getStartZ() { return startZ; } + public double getStartX() { + return startX; + } + + public double getStartY() { + return startY; + } + + public double getStartZ() { + return startZ; + } // ==================== STATE GETTERS ==================== - public boolean getHasHit() { return hasHit; } + public boolean getHasHit() { + return hasHit; + } // ==================== NBT ==================== diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergySlicer.java b/src/main/java/kamkeel/npcs/entity/EntityEnergySlicer.java index c76fc7bad..34fc986e6 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergySlicer.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergySlicer.java @@ -1,6 +1,12 @@ package kamkeel.npcs.entity; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; @@ -293,14 +299,29 @@ public class EntityEnergySlicer extends EntityEnergyProjectile { // ==================== GETTERS ==================== - public float getSliceWidth() { return sliceWidth; } - public void setSliceWidth(float width) { this.sliceWidth = width; } + public float getSliceWidth() { + return sliceWidth; + } - public float getSliceThickness() { return sliceThickness; } - public void setSliceThickness(float thickness) { this.sliceThickness = thickness; } + public void setSliceWidth(float width) { + this.sliceWidth = width; + } - public boolean isPiercing() { return piercing; } - public void setPiercing(boolean piercing) { this.piercing = piercing; } + public float getSliceThickness() { + return sliceThickness; + } + + public void setSliceThickness(float thickness) { + this.sliceThickness = thickness; + } + + public boolean isPiercing() { + return piercing; + } + + public void setPiercing(boolean piercing) { + this.piercing = piercing; + } // ==================== NBT ==================== diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index eca69684d..c3c555d48 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -28,8 +28,6 @@ import kamkeel.npcs.network.packets.data.UpdateAnimationsPacket; import kamkeel.npcs.network.packets.data.VillagerListPacket; import kamkeel.npcs.network.packets.data.ability.PlayerAbilityStatePacket; 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; import kamkeel.npcs.network.packets.data.gui.GuiErrorPacket; import kamkeel.npcs.network.packets.data.gui.GuiOpenBookPacket; @@ -53,6 +51,9 @@ import kamkeel.npcs.network.packets.data.npc.WeaponNpcPacket; import kamkeel.npcs.network.packets.data.script.ScriptOverlayClosePacket; import kamkeel.npcs.network.packets.data.script.ScriptOverlayDataPacket; import kamkeel.npcs.network.packets.data.script.ScriptedParticlePacket; +import kamkeel.npcs.network.packets.data.telegraph.TelegraphRemovePacket; +import kamkeel.npcs.network.packets.data.telegraph.TelegraphSpawnPacket; +import kamkeel.npcs.network.packets.player.AuctionActionPacket; import kamkeel.npcs.network.packets.player.BankActionPacket; import kamkeel.npcs.network.packets.player.CheckPlayerValue; import kamkeel.npcs.network.packets.player.CompanionActionPacket; @@ -61,7 +62,6 @@ import kamkeel.npcs.network.packets.player.FollowerPacket; import kamkeel.npcs.network.packets.player.GetNPCRole; import kamkeel.npcs.network.packets.player.GetTraderData; import kamkeel.npcs.network.packets.player.InputDevicePacket; -import kamkeel.npcs.network.packets.player.AuctionActionPacket; import kamkeel.npcs.network.packets.player.MailActionPacket; import kamkeel.npcs.network.packets.player.SaveBookPacket; import kamkeel.npcs.network.packets.player.SaveSignPacket; @@ -94,14 +94,14 @@ 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.CustomAbilitiesGetPacket; -import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket; -import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket; import kamkeel.npcs.network.packets.request.ability.BuiltInAbilityGetPacket; import kamkeel.npcs.network.packets.request.ability.ChainedAbilitiesGetPacket; import kamkeel.npcs.network.packets.request.ability.ChainedAbilityGetPacket; import kamkeel.npcs.network.packets.request.ability.ChainedAbilityRemovePacket; import kamkeel.npcs.network.packets.request.ability.ChainedAbilitySavePacket; +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; @@ -116,8 +116,8 @@ import kamkeel.npcs.network.packets.request.clone.CloneAllTagsPacket; import kamkeel.npcs.network.packets.request.clone.CloneAllTagsShortPacket; import kamkeel.npcs.network.packets.request.clone.CloneFolderCrudPacket; import kamkeel.npcs.network.packets.request.clone.CloneFolderListPacket; -import kamkeel.npcs.network.packets.request.clone.CloneMovePacket; import kamkeel.npcs.network.packets.request.clone.CloneListPacket; +import kamkeel.npcs.network.packets.request.clone.CloneMovePacket; import kamkeel.npcs.network.packets.request.clone.ClonePreSavePacket; import kamkeel.npcs.network.packets.request.clone.CloneRemovePacket; import kamkeel.npcs.network.packets.request.clone.CloneSavePacket; diff --git a/src/main/java/kamkeel/npcs/network/packets/data/LoginPacket.java b/src/main/java/kamkeel/npcs/network/packets/data/LoginPacket.java index 75e0c40ae..da9eb9aa2 100644 --- a/src/main/java/kamkeel/npcs/network/packets/data/LoginPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/data/LoginPacket.java @@ -15,8 +15,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.AuctionClientConfig; import noppes.npcs.client.ClientCacheHandler; -import noppes.npcs.config.ConfigMain; import noppes.npcs.client.ScriptClientConfig; +import noppes.npcs.config.ConfigMain; import noppes.npcs.controllers.AuctionConfigSync; import noppes.npcs.controllers.ScriptConfigSync; diff --git a/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilityStatePacket.java b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilityStatePacket.java index 03c0b82b4..6de87cb22 100644 --- a/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilityStatePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilityStatePacket.java @@ -16,7 +16,7 @@ import java.io.IOException; /** * Lightweight packet syncing ability lock state from server to client. * Sent every tick during ability execution when flags change, and once when ability ends. - * + *

* Flags byte layout: * bit 0: movement locked (suppress WASD, zero motion) * bit 1: rotation locked (freeze yaw/pitch) diff --git a/src/main/java/kamkeel/npcs/network/packets/player/AuctionActionPacket.java b/src/main/java/kamkeel/npcs/network/packets/player/AuctionActionPacket.java index b15ff8992..5eed2aa93 100644 --- a/src/main/java/kamkeel/npcs/network/packets/player/AuctionActionPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/player/AuctionActionPacket.java @@ -40,7 +40,8 @@ public class AuctionActionPacket extends AbstractPacket { private long amount; private NBTTagCompound data; - public AuctionActionPacket() {} + public AuctionActionPacket() { + } private AuctionActionPacket(Action action) { this.action = action; @@ -58,7 +59,9 @@ public class AuctionActionPacket extends AbstractPacket { } @Override - public boolean needsNPC() { return false; } // Allow opening via command without NPC + public boolean needsNPC() { + return false; + } // Allow opening via command without NPC // ========================================= // Client-side static methods @@ -117,7 +120,9 @@ public class AuctionActionPacket extends AbstractPacket { PacketClient.sendClient(packet); } - /** Request listings from server with filter and page */ + /** + * Request listings from server with filter and page + */ @SideOnly(Side.CLIENT) public static void requestListings(AuctionFilter filter, int page) { AuctionActionPacket packet = new AuctionActionPacket(Action.RequestListings); @@ -131,10 +136,14 @@ public class AuctionActionPacket extends AbstractPacket { // ========================================= @Override - public Enum getType() { return EnumPlayerPacket.AuctionAction; } + public Enum getType() { + return EnumPlayerPacket.AuctionAction; + } @Override - public PacketChannel getChannel() { return PacketHandler.PLAYER_PACKET; } + public PacketChannel getChannel() { + return PacketHandler.PLAYER_PACKET; + } @Override @SideOnly(Side.CLIENT) @@ -291,7 +300,10 @@ public class AuctionActionPacket extends AbstractPacket { long startingPrice = in.readLong(); String buyoutStr = ByteBufUtils.readString(in); long buyoutPrice = 0; - try { buyoutPrice = Long.parseLong(buyoutStr); } catch (NumberFormatException ignored) {} + try { + buyoutPrice = Long.parseLong(buyoutStr); + } catch (NumberFormatException ignored) { + } NBTTagCompound itemNBT = ByteBufUtils.readNBT(in); if (itemNBT == null) return "No item data received."; @@ -329,7 +341,9 @@ public class AuctionActionPacket extends AbstractPacket { } } - /** Send full trades data to player (listings, bids, claims) */ + /** + * Send full trades data to player (listings, bids, claims) + */ private void sendTradesData(EntityPlayerMP player, AuctionController controller) { NBTTagCompound response = new NBTTagCompound(); response.setBoolean("TradesData", true); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/BuiltInAbilityGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/BuiltInAbilityGetPacket.java index 14f22d983..67a8f8241 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/BuiltInAbilityGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/BuiltInAbilityGetPacket.java @@ -3,8 +3,8 @@ 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.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.network.AbstractPacket; import kamkeel.npcs.network.PacketChannel; import kamkeel.npcs.network.PacketHandler; diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilityGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilityGetPacket.java index 9772bc4ad..da8ca9d9f 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilityGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilityGetPacket.java @@ -3,8 +3,8 @@ 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.ChainedAbility; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.network.AbstractPacket; import kamkeel.npcs.network.PacketChannel; import kamkeel.npcs.network.PacketHandler; diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilitySavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilitySavePacket.java index aaaf8d6a9..ca9925bbf 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilitySavePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/ChainedAbilitySavePacket.java @@ -3,8 +3,8 @@ 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.ChainedAbility; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.network.AbstractPacket; import kamkeel.npcs.network.PacketChannel; import kamkeel.npcs.network.PacketHandler; diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java index e53d53d49..b4588935b 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilityGetPacket.java @@ -3,8 +3,8 @@ 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.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.network.AbstractPacket; import kamkeel.npcs.network.PacketChannel; import kamkeel.npcs.network.PacketHandler; diff --git a/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java index b1662e246..f360b0eff 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/ability/CustomAbilitySavePacket.java @@ -3,8 +3,8 @@ 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.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.network.AbstractPacket; import kamkeel.npcs.network.PacketChannel; import kamkeel.npcs.network.PacketHandler; 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 index e214689d8..d25935892 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/animation/BuiltInAnimationGetPacket.java @@ -15,7 +15,6 @@ 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; diff --git a/src/main/java/kamkeel/npcs/network/packets/request/clone/CloneTagListPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/clone/CloneTagListPacket.java index 926c5519c..158896eaf 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/clone/CloneTagListPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/clone/CloneTagListPacket.java @@ -10,10 +10,10 @@ 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 kamkeel.npcs.util.ByteBufUtils; import noppes.npcs.controllers.ServerTagMapController; import noppes.npcs.controllers.data.TagMap; 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 d025fcb26..8930fabc3 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 @@ -1,7 +1,5 @@ package kamkeel.npcs.network.packets.request.script; -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; diff --git a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java index 3c9b10f1d..6a1a17c76 100644 --- a/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java +++ b/src/main/java/kamkeel/npcs/util/AnchorPointHelper.java @@ -411,6 +411,7 @@ public class AnchorPointHelper { /** * Rotate an offset vector by the entity's body yaw so offsets are entity-relative. * +X = entity's right, +Y = up, +Z = entity's forward. + * * @param bodyYawRad body yaw in radians */ private static Vec3 rotateOffsetByYaw(double offsetX, double offsetY, double offsetZ, float bodyYawRad) { @@ -444,19 +445,19 @@ public class AnchorPointHelper { * Apply FULL_MODEL rotation to a world-space offset from entity position. * Converts the offset to model space, applies FULL_MODEL rotation and pivots, * then converts back to world space. - * + *

* The rendering pipeline is: entity_pos * body_yaw * scale(-1,-1,1) * FULL_MODEL * parts * Combined body_yaw + scale maps model space to world space: - * worldX = mx*cos(yaw) + mz*sin(yaw) - * worldY = -my (model Y-down → world Y-up) - * worldZ = mx*sin(yaw) - mz*cos(yaw) + * worldX = mx*cos(yaw) + mz*sin(yaw) + * worldY = -my (model Y-down → world Y-up) + * worldZ = mx*sin(yaw) - mz*cos(yaw) * This transform is its own inverse for X,Z. - * + *

* FULL_MODEL rotation order matches renderer: vertex sees Z, then Y, then X. */ private static Vec3 applyFullModelToWorldOffset(FramePart fullModel, EntityLivingBase entity, - double worldDX, double worldDY, double worldDZ, - float bodyYaw, float scale) { + double worldDX, double worldDY, double worldDZ, + float bodyYaw, float scale) { float[] rotations = getRotations(fullModel, entity); float[] pivots = getPivots(fullModel, entity); diff --git a/src/main/java/kamkeel/npcs/util/BukkitUtil.java b/src/main/java/kamkeel/npcs/util/BukkitUtil.java index 29f4a522f..1252fc67c 100644 --- a/src/main/java/kamkeel/npcs/util/BukkitUtil.java +++ b/src/main/java/kamkeel/npcs/util/BukkitUtil.java @@ -98,6 +98,7 @@ public class BukkitUtil { /** * Checks if a specific Bukkit plugin is enabled. + * * @param pluginName the plugin name to check * @return true if the plugin is enabled */ @@ -115,6 +116,7 @@ public class BukkitUtil { /** * Gets a Bukkit OfflinePlayer by name. + * * @param playerName the player name * @return the OfflinePlayer object, or null if not available */ @@ -131,6 +133,7 @@ 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 */ @@ -147,6 +150,7 @@ public class BukkitUtil { /** * Gets a service provider from Bukkit's ServicesManager. + * * @param serviceClass the service class to get * @return the service provider, or null if not available */ diff --git a/src/main/java/kamkeel/npcs/util/Register.java b/src/main/java/kamkeel/npcs/util/Register.java index 4a0d2bb78..5c28d5e1d 100644 --- a/src/main/java/kamkeel/npcs/util/Register.java +++ b/src/main/java/kamkeel/npcs/util/Register.java @@ -1,13 +1,19 @@ package kamkeel.npcs.util; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityVariant; import noppes.npcs.LogWriter; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Supplier; diff --git a/src/main/java/kamkeel/npcs/util/VaultUtil.java b/src/main/java/kamkeel/npcs/util/VaultUtil.java index c25ea3f3a..47e294e57 100644 --- a/src/main/java/kamkeel/npcs/util/VaultUtil.java +++ b/src/main/java/kamkeel/npcs/util/VaultUtil.java @@ -178,6 +178,7 @@ public class VaultUtil { /** * Checks if a player has an account in the economy system. + * * @param player the player to check * @return true if the player has an account */ @@ -187,6 +188,7 @@ public class VaultUtil { /** * Checks if a player has an account in the economy system. + * * @param playerName the player name to check * @return true if the player has an account */ @@ -207,6 +209,7 @@ public class VaultUtil { /** * Gets the balance of a player. + * * @param player the player * @return the player's balance, or 0 if not available */ @@ -216,6 +219,7 @@ public class VaultUtil { /** * Gets the balance of a player by name. + * * @param playerName the player name * @return the player's balance, or 0 if not available */ @@ -236,6 +240,7 @@ public class VaultUtil { /** * Checks if a player has at least the specified amount. + * * @param player the player * @param amount the amount to check * @return true if the player has at least the specified amount @@ -246,8 +251,9 @@ public class VaultUtil { /** * Checks if a player has at least the specified amount. + * * @param playerName the player name - * @param amount the amount to check + * @param amount the amount to check * @return true if the player has at least the specified amount */ public static boolean has(String playerName, double amount) { @@ -267,6 +273,7 @@ public class VaultUtil { /** * Withdraws money from a player's account. + * * @param player the player * @param amount the amount to withdraw * @return true if the transaction was successful @@ -277,8 +284,9 @@ public class VaultUtil { /** * Withdraws money from a player's account. + * * @param playerName the player name - * @param amount the amount to withdraw + * @param amount the amount to withdraw * @return true if the transaction was successful */ public static boolean withdrawMoney(String playerName, double amount) { @@ -301,6 +309,7 @@ public class VaultUtil { /** * Adds money to a player's account (deposit). + * * @param player the player * @param amount the amount to add * @return true if the transaction was successful @@ -311,8 +320,9 @@ public class VaultUtil { /** * Adds money to a player's account (deposit). + * * @param playerName the player name - * @param amount the amount to add + * @param amount the amount to add * @return true if the transaction was successful */ public static boolean addMoney(String playerName, double amount) { @@ -336,6 +346,7 @@ public class VaultUtil { /** * Sets a player's balance to the specified amount. * This withdraws all money first, then deposits the new amount. + * * @param player the player * @param amount the new balance * @return true if the transaction was successful @@ -347,8 +358,9 @@ public class VaultUtil { /** * Sets a player's balance to the specified amount. * This withdraws all money first, then deposits the new amount. + * * @param playerName the player name - * @param amount the new balance + * @param amount the new balance * @return true if the transaction was successful */ public static boolean setBalance(String playerName, double amount) { @@ -368,6 +380,7 @@ public class VaultUtil { /** * Formats an amount according to the economy plugin's settings. + * * @param amount the amount to format * @return the formatted string, or the raw number as string if not available */ @@ -384,6 +397,7 @@ public class VaultUtil { /** * Gets the plural currency name (e.g., "Dollars"). + * * @return the plural currency name, or "coins" if not available */ public static String getCurrencyNamePlural() { @@ -399,6 +413,7 @@ public class VaultUtil { /** * Gets the singular currency name (e.g., "Dollar"). + * * @return the singular currency name, or "coin" if not available */ public static String getCurrencyNameSingular() { @@ -414,6 +429,7 @@ public class VaultUtil { /** * Creates an account for the player if one doesn't exist. + * * @param player the player * @return true if the account was created or already exists */ @@ -423,6 +439,7 @@ public class VaultUtil { /** * Creates an account for the player if one doesn't exist. + * * @param playerName the player name * @return true if the account was created or already exists */ @@ -459,6 +476,7 @@ public class VaultUtil { /** * Gets a list of all bank names. + * * @return list of bank names, or empty list if not available */ @SuppressWarnings("unchecked") @@ -475,6 +493,7 @@ public class VaultUtil { /** * Gets the balance of a bank. + * * @param bankName the bank name * @return the bank balance, or 0 if not available */ @@ -492,8 +511,9 @@ public class VaultUtil { /** * Checks if a bank has at least the specified amount. + * * @param bankName the bank name - * @param amount the amount to check + * @param amount the amount to check * @return true if the bank has at least the specified amount */ public static boolean bankHas(String bankName, double amount) { @@ -510,8 +530,9 @@ public class VaultUtil { /** * Withdraws money from a bank. + * * @param bankName the bank name - * @param amount the amount to withdraw + * @param amount the amount to withdraw * @return true if the transaction was successful */ public static boolean bankWithdraw(String bankName, double amount) { @@ -528,8 +549,9 @@ public class VaultUtil { /** * Deposits money into a bank. + * * @param bankName the bank name - * @param amount the amount to deposit + * @param amount the amount to deposit * @return true if the transaction was successful */ public static boolean bankDeposit(String bankName, double amount) { @@ -546,8 +568,9 @@ public class VaultUtil { /** * Transfers money from one player to another. - * @param from the player to take money from - * @param to the player to give money to + * + * @param from the player to take money from + * @param to the player to give money to * @param amount the amount to transfer * @return true if the transfer was successful */ @@ -557,9 +580,10 @@ public class VaultUtil { /** * Transfers money from one player to another. + * * @param fromPlayerName the player name to take money from - * @param toPlayerName the player name to give money to - * @param amount the amount to transfer + * @param toPlayerName the player name to give money to + * @param amount the amount to transfer * @return true if the transfer was successful */ public static boolean transfer(String fromPlayerName, String toPlayerName, double amount) { diff --git a/src/main/java/noppes/npcs/AbstractDataAbilities.java b/src/main/java/noppes/npcs/AbstractDataAbilities.java index 341ed4e08..dea49be68 100644 --- a/src/main/java/noppes/npcs/AbstractDataAbilities.java +++ b/src/main/java/noppes/npcs/AbstractDataAbilities.java @@ -1,7 +1,7 @@ package noppes.npcs; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityPhase; import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.controllers.data.ability.ChainedAbilityEntry; @@ -12,7 +12,12 @@ import net.minecraft.util.DamageSource; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.data.Animation; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Shared base class for NPC and Player ability data management. @@ -31,81 +36,119 @@ public abstract class AbstractDataAbilities { // SHARED RUNTIME STATE (not saved to NBT) // ═══════════════════════════════════════════════════════════════════ - /** Currently executing ability (null if none) */ + /** + * Currently executing ability (null if none) + */ protected Ability currentAbility; - /** World time when cooldown ends */ + /** + * World time when cooldown ends + */ protected long cooldownEndTime = 0; - /** Rotation lock state */ + /** + * Rotation lock state + */ protected boolean rotationLocked = false; protected float lockedYaw = 0; protected float lockedPitch = 0; - /** Position lock state */ + /** + * Position lock state + */ protected boolean positionLocked = false; protected double lockedPosX = 0; protected double lockedPosY = 0; protected double lockedPosZ = 0; - /** Chained ability execution state */ + /** + * Chained ability execution state + */ protected ChainedAbility currentChain; protected int chainEntryIndex = -1; protected int chainDelayRemaining = -1; - /** Set when interrupt already rolled cooldown (prevents double cooldown on NPC dazed completion). */ + /** + * Set when interrupt already rolled cooldown (prevents double cooldown on NPC dazed completion). + */ protected boolean interruptCooldownRolled = false; // ═══════════════════════════════════════════════════════════════════ // ABSTRACT METHODS - Subclasses must implement // ═══════════════════════════════════════════════════════════════════ - /** Get the entity this ability data belongs to (NPC or Player). */ + /** + * Get the entity this ability data belongs to (NPC or Player). + */ protected abstract EntityLivingBase getEntity(); - /** Get the current target for ability execution. */ + /** + * Get the current target for ability execution. + */ protected abstract EntityLivingBase getTarget(); - /** Get the current world time. */ + /** + * Get the current world time. + */ protected abstract long getWorldTime(); // -- Event Firing -- - /** Fire tick event. Implementation differs between NPC (NpcAPI) and Player (ScriptController). */ + /** + * Fire tick event. Implementation differs between NPC (NpcAPI) and Player (ScriptController). + */ protected abstract void fireTickEvent(Ability ability, EntityLivingBase target); - /** Fire execute event. Returns true if cancelled. */ + /** + * Fire execute event. Returns true if cancelled. + */ protected abstract boolean fireExecuteEvent(Ability ability, EntityLivingBase target); - /** Fire complete event. */ + /** + * Fire complete event. + */ protected abstract void fireCompleteEvent(Ability ability, EntityLivingBase target); - /** Fire interrupt event. */ + /** + * Fire interrupt event. + */ protected abstract void fireInterruptEvent(Ability ability, EntityLivingBase target, DamageSource source, float damage); // -- Telegraph -- - /** Spawn telegraphs for an ability. */ + /** + * Spawn telegraphs for an ability. + */ protected abstract void spawnTelegraph(Ability ability, EntityLivingBase target); - /** Remove telegraphs for an ability. */ + /** + * Remove telegraphs for an ability. + */ protected abstract void removeTelegraph(Ability ability); // -- Animation/Sound Data Access -- - /** Set animation data on the entity. */ + /** + * Set animation data on the entity. + */ protected abstract void setAnimationData(Animation animation); - /** Clear animation data on the entity. */ + /** + * Clear animation data on the entity. + */ protected abstract void clearAnimationData(); - /** Play a sound at the entity's location. */ + /** + * Play a sound at the entity's location. + */ protected abstract void playAbilitySound(String sound); // -- Rotation (subclass handles extra fields and application) -- - /** Capture rotation values for locking. NPC captures 4 fields, Player captures 2. */ + /** + * Capture rotation values for locking. NPC captures 4 fields, Player captures 2. + */ protected abstract void captureLockedRotation(); // -- Completion -- @@ -116,7 +159,9 @@ public abstract class AbstractDataAbilities { */ protected abstract void rollCooldown(Ability ability); - /** Additional completion logic (NPC clears lastTarget, Player clears key/target and syncs). */ + /** + * Additional completion logic (NPC clears lastTarget, Player clears key/target and syncs). + */ protected abstract void onAbilityComplete(); /** @@ -128,17 +173,30 @@ public abstract class AbstractDataAbilities { // -- Hooks (optional overrides) -- - /** Called before onExecute in ACTIVE phase. NPC uses this for faceTarget/hitScan. */ - protected void onPreExecute(Ability ability, EntityLivingBase target) {} + /** + * Called before onExecute in ACTIVE phase. NPC uses this for faceTarget/hitScan. + */ + protected void onPreExecute(Ability ability, EntityLivingBase target) { + } - /** Called after the phase switch. NPC uses this for hit scan updates and movement control. */ - protected void onPostPhaseTick(Ability ability, EntityLivingBase target) {} + /** + * Called after the phase switch. NPC uses this for hit scan updates and movement control. + */ + protected void onPostPhaseTick(Ability ability, EntityLivingBase target) { + } - /** Additional lock releases in BURST_DELAY. NPC releases hitScan. */ - protected void onBurstDelayReleaseLocks() {} + /** + * Additional lock releases in BURST_DELAY. NPC releases hitScan. + */ + protected void onBurstDelayReleaseLocks() { + } - /** Hook for retargeting during chain execution when target dies. NPC overrides, Player returns null. */ - protected EntityLivingBase retargetForChain() { return null; } + /** + * Hook for retargeting during chain execution when target dies. NPC overrides, Player returns null. + */ + protected EntityLivingBase retargetForChain() { + return null; + } // ═══════════════════════════════════════════════════════════════════ // SHARED ANIMATION METHODS @@ -178,22 +236,30 @@ public abstract class AbstractDataAbilities { // STATE QUERIES // ═══════════════════════════════════════════════════════════════════ - /** Check if an ability is currently executing. */ + /** + * Check if an ability is currently executing. + */ public boolean isExecutingAbility() { return currentAbility != null && currentAbility.isExecuting(); } - /** Get the currently executing ability. */ + /** + * Get the currently executing ability. + */ public Ability getCurrentAbility() { return currentAbility; } - /** Check if a chained ability is currently executing. */ + /** + * Check if a chained ability is currently executing. + */ public boolean isExecutingChain() { return currentChain != null; } - /** Get the currently executing chained ability. */ + /** + * Get the currently executing chained ability. + */ public ChainedAbility getCurrentChain() { return currentChain; } @@ -202,11 +268,14 @@ public abstract class AbstractDataAbilities { // TOGGLE STATE (active toggles, independent of currentAbility) // ═══════════════════════════════════════════════════════════════════ - /** Currently active toggles. Key = ability key, Value = toggle entry with tick counter. */ + /** + * Currently active toggles. Key = ability key, Value = toggle entry with tick counter. + */ protected Map activeToggles = new LinkedHashMap<>(); /** * Toggle an ability ON or OFF. If currently on, turns off; if off, turns on. + * * @param key The ability key (e.g., "npcdbc:ki_fist") * @return true if the toggle is now ON, false if OFF */ @@ -221,8 +290,9 @@ public abstract class AbstractDataAbilities { /** * Set a toggle to a specific state. + * * @param key The ability key - * @param on true to activate, false to deactivate + * @param on true to activate, false to deactivate */ public void setAbilityToggled(String key, boolean on) { if (on && !activeToggles.containsKey(key)) { @@ -300,8 +370,11 @@ public abstract class AbstractDataAbilities { } } - /** Hook for subclass to react to toggle state changes (sync packets, script events). */ - protected void onToggleStateChanged(String key, boolean active) {} + /** + * Hook for subclass to react to toggle state changes (sync packets, script events). + */ + protected void onToggleStateChanged(String key, boolean active) { + } /** * Clear all active toggles (e.g., on death/reset). @@ -336,23 +409,31 @@ public abstract class AbstractDataAbilities { // COOLDOWN MANAGEMENT // ═══════════════════════════════════════════════════════════════════ - /** Check if on cooldown. */ + /** + * Check if on cooldown. + */ public boolean isOnCooldown() { return getWorldTime() < cooldownEndTime; } - /** Get remaining cooldown ticks. */ + /** + * Get remaining cooldown ticks. + */ public long getRemainingCooldown() { long remaining = cooldownEndTime - getWorldTime(); return remaining > 0 ? remaining : 0; } - /** Reset cooldown (allow immediate ability use). */ + /** + * Reset cooldown (allow immediate ability use). + */ public void resetCooldown() { cooldownEndTime = 0; } - /** Set the cooldown end time directly. */ + /** + * Set the cooldown end time directly. + */ public void setCooldownEndTime(long endTime) { cooldownEndTime = endTime; } @@ -381,8 +462,11 @@ public abstract class AbstractDataAbilities { onPositionLockChanged(false); } - /** Hook for subclass to react to position lock state changes (e.g., NPC sets data watcher flag). */ - protected void onPositionLockChanged(boolean locked) {} + /** + * Hook for subclass to react to position lock state changes (e.g., NPC sets data watcher flag). + */ + protected void onPositionLockChanged(boolean locked) { + } // ═══════════════════════════════════════════════════════════════════ // ROTATION LOCKING @@ -396,8 +480,11 @@ public abstract class AbstractDataAbilities { onRotationLockChanged(false); } - /** Hook for subclass to react to rotation lock state changes (e.g., NPC sets flag, clears hitScan). */ - protected void onRotationLockChanged(boolean locked) {} + /** + * Hook for subclass to react to rotation lock state changes (e.g., NPC sets flag, clears hitScan). + */ + protected void onRotationLockChanged(boolean locked) { + } // ═══════════════════════════════════════════════════════════════════ // CORE TICK - Phase transition logic shared between NPC and Player @@ -441,7 +528,7 @@ public abstract class AbstractDataAbilities { // Fire extender tick hook (e.g., per-tick resource drain) if (!AbilityController.Instance.fireOnAbilityTick(currentAbility, entity, target, - currentAbility.getPhase(), currentAbility.getCurrentTick())) { + currentAbility.getPhase(), currentAbility.getCurrentTick())) { interruptCurrentAbility(null, 0); return; } @@ -711,7 +798,8 @@ public abstract class AbstractDataAbilities { * Hook called after interrupt completes. Subclass handles clearing state and syncing. * NPC: keeps currentAbility (ticks through DAZED). Player: clears immediately. */ - protected void onInterruptComplete() {} + protected void onInterruptComplete() { + } // ═══════════════════════════════════════════════════════════════════ // CHAINED ABILITY EXECUTION diff --git a/src/main/java/noppes/npcs/CommonProxy.java b/src/main/java/noppes/npcs/CommonProxy.java index ee65ad6a5..e059e9104 100644 --- a/src/main/java/noppes/npcs/CommonProxy.java +++ b/src/main/java/noppes/npcs/CommonProxy.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; import noppes.npcs.api.IWorld; import noppes.npcs.blocks.tiles.TileNpcContainer; +import noppes.npcs.config.ConfigScript; import noppes.npcs.constants.EnumGuiType; -import noppes.npcs.containers.ContainerAuction; +import noppes.npcs.containers.ContainerAnvilRepair; import noppes.npcs.containers.ContainerAuctionBidding; -import noppes.npcs.containers.ContainerAuctionTrades; import noppes.npcs.containers.ContainerAuctionListing; import noppes.npcs.containers.ContainerAuctionSell; -import noppes.npcs.containers.ContainerAnvilRepair; +import noppes.npcs.containers.ContainerAuctionTrades; import noppes.npcs.containers.ContainerCarpentryBench; import noppes.npcs.containers.ContainerCrate; import noppes.npcs.containers.ContainerCustomGui; @@ -43,7 +43,6 @@ import noppes.npcs.containers.ContainerNpcQuestReward; import noppes.npcs.containers.ContainerNpcQuestTypeItem; import noppes.npcs.controllers.data.AnimationData; import noppes.npcs.controllers.data.PlayerData; -import noppes.npcs.config.ConfigScript; import noppes.npcs.entity.EntityNPCInterface; public class CommonProxy implements IGuiHandler { diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index b063c790d..185131a15 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -21,13 +21,22 @@ import io.github.somehussar.janinoloader.api.IDynamicCompilerBuilder; import kamkeel.npcs.addon.AddonManager; import kamkeel.npcs.command.CommandKamkeel; import kamkeel.npcs.command.profile.CommandProfile; +import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.AttributeController; import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.SyncController; import kamkeel.npcs.controllers.TelegraphController; -import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.data.profile.CNPCData; import kamkeel.npcs.developer.Developer; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilitySweeper; +import kamkeel.npcs.entity.EntityAbilityZone; +import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityEnergySlicer; import kamkeel.npcs.network.PacketHandler; import kamkeel.npcs.util.BukkitUtil; import net.minecraft.block.Block; @@ -86,15 +95,6 @@ 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 kamkeel.npcs.entity.EntityAbilityZone; -import kamkeel.npcs.entity.EntityEnergyDome; -import kamkeel.npcs.entity.EntityEnergyPanel; -import kamkeel.npcs.entity.EntityEnergySlicer; import noppes.npcs.entity.old.EntityNPCDwarfFemale; import noppes.npcs.entity.old.EntityNPCDwarfMale; import noppes.npcs.entity.old.EntityNPCElfFemale; diff --git a/src/main/java/noppes/npcs/DataAbilities.java b/src/main/java/noppes/npcs/DataAbilities.java index 29e4822b1..1caca740a 100644 --- a/src/main/java/noppes/npcs/DataAbilities.java +++ b/src/main/java/noppes/npcs/DataAbilities.java @@ -1,9 +1,9 @@ package noppes.npcs; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; -import kamkeel.npcs.controllers.data.ability.AbilityPhase; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityAction; +import kamkeel.npcs.controllers.data.ability.AbilityPhase; import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.controllers.data.ability.IAbilityAction; import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; @@ -86,10 +86,14 @@ public class DataAbilities extends AbstractDataAbilities { private transient boolean hitScanActive = false; private transient EntityLivingBase hitScanTarget = null; - /** Bit flag for rotation control (LOCKED or TRACK) in data watcher slot 15 */ + /** + * Bit flag for rotation control (LOCKED or TRACK) in data watcher slot 15 + */ private static final int ROTATION_CONTROLLED_FLAG = 16; - /** Bit flag for position lock in data watcher slot 15 */ + /** + * Bit flag for position lock in data watcher slot 15 + */ private static final int POSITION_LOCKED_FLAG = 32; // ═══════════════════════════════════════════════════════════════════ @@ -143,7 +147,7 @@ public class DataAbilities extends AbstractDataAbilities { @Override protected void fireInterruptEvent(Ability ability, EntityLivingBase target, - DamageSource source, float damage) { + DamageSource source, float damage) { AbilityEvent.InterruptEvent interruptEvent = new AbilityEvent.InterruptEvent( npc.wrappedNPC, ability, target, source, damage); NpcAPI.EVENT_BUS.post(interruptEvent); @@ -247,7 +251,7 @@ public class DataAbilities extends AbstractDataAbilities { // Update hit scan state - actual facing is deferred to applyRotationControl() // which runs AFTER super.onLivingUpdate() to override AI look helper if (ability != null && ability.isExecuting() - && ability.isHitScanForCurrentPhase() && target != null) { + && ability.isHitScanForCurrentPhase() && target != null) { enableHitScan(target); } else if (hitScanActive) { releaseRotationControl(); @@ -613,7 +617,7 @@ public class DataAbilities extends AbstractDataAbilities { * 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) + * @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) { @@ -640,7 +644,7 @@ public class DataAbilities extends AbstractDataAbilities { * 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 key The ability key (built-in name or custom UUID) + * @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 */ @@ -729,7 +733,9 @@ public class DataAbilities extends AbstractDataAbilities { // ACTION SLOT MANAGEMENT // ═══════════════════════════════════════════════════════════════════ - /** Get the unified action slot list. */ + /** + * Get the unified action slot list. + */ public List getAbilityActions() { return actionSlots; } @@ -748,17 +754,23 @@ public class DataAbilities extends AbstractDataAbilities { return resolved; } - /** Add an inline ability. */ + /** + * Add an inline ability. + */ public void addAbility(Ability ability) { actionSlots.add(AbilityAction.inline(ability)); } - /** Add a reference ability by key (built-in name or custom ability name). */ + /** + * Add a reference ability by key (built-in name or custom ability name). + */ public void addAbilityReference(String key) { actionSlots.add(AbilityAction.abilityReference(key)); } - /** Add a chained ability reference by name. */ + /** + * Add a chained ability reference by name. + */ public void addChainReference(String name) { if (name != null && !name.isEmpty()) { for (AbilityAction slot : actionSlots) { @@ -770,7 +782,9 @@ public class DataAbilities extends AbstractDataAbilities { } } - /** Remove an action slot by index. */ + /** + * Remove an action slot by index. + */ public void removeAction(int index) { if (index >= 0 && index < actionSlots.size()) { actionSlots.remove(index); @@ -804,13 +818,17 @@ public class DataAbilities extends AbstractDataAbilities { return null; } - /** Check if a slot at a given index is a reference. */ + /** + * Check if a slot at a given index is a reference. + */ public boolean isSlotReference(int index) { if (index < 0 || index >= actionSlots.size()) return false; return actionSlots.get(index).isReference(); } - /** Convert a reference slot to inline. Returns false if resolution fails or is a chain. */ + /** + * Convert a reference slot to inline. Returns false if resolution fails or is a chain. + */ public boolean convertToInline(int index) { if (index < 0 || index >= actionSlots.size()) return false; return actionSlots.get(index).convertToInline(); @@ -934,7 +952,7 @@ public class DataAbilities extends AbstractDataAbilities { /** * Apply rotation control after super.onLivingUpdate() and super.onUpdate(). * Handles both LOCKED (freeze at captured values) and TRACK (face target) modes. - * + *

* Server: computes the correct rotation (locked values or target facing). * Client: trusts the server-synced rotation values and prevents body smoothing override. */ diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 2d2496fc6..2b9ebaabe 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -20,9 +20,9 @@ import net.minecraftforge.event.world.WorldEvent; import noppes.npcs.api.IBlock; import noppes.npcs.api.IPos; import noppes.npcs.api.IWorld; -import noppes.npcs.api.entity.IEnergyProjectile; import noppes.npcs.api.entity.IAnimatable; import noppes.npcs.api.entity.ICustomNpc; +import noppes.npcs.api.entity.IEnergyProjectile; import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.entity.IProjectile; @@ -64,10 +64,10 @@ import noppes.npcs.scripted.event.NpcEvent; import noppes.npcs.scripted.event.PartyEvent; import noppes.npcs.scripted.event.ProjectileEvent; import noppes.npcs.scripted.event.RecipeScriptEvent; +import noppes.npcs.scripted.event.player.AuctionEvent; 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.AuctionEvent; import noppes.npcs.scripted.event.player.PlayerAbilityEvent; import noppes.npcs.scripted.event.player.PlayerEvent; import noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent; @@ -561,7 +561,7 @@ public class EventHooks { // ==================== ENERGY BARRIER EVENTS ==================== private static void dispatchBarrierEvent(net.minecraft.entity.Entity barrierEntity, int ownerEntityId, - noppes.npcs.scripted.event.EnergyBarrierEvent event, EnumScriptType type) { + noppes.npcs.scripted.event.EnergyBarrierEvent event, EnumScriptType type) { ScriptController.Instance.globalNpcScripts.callScript(type, event); net.minecraft.entity.Entity owner = barrierEntity.worldObj.getEntityByID(ownerEntityId); diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index a0c2ad0cc..d793dcea9 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -6,10 +6,10 @@ import cpw.mods.fml.common.gameevent.PlayerEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import kamkeel.npcs.addon.DBCAddon; +import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.AttributeController; import kamkeel.npcs.controllers.SyncController; import kamkeel.npcs.controllers.data.ability.Ability; -import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.util.AttributeAttackUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/noppes/npcs/ServerTickHandler.java b/src/main/java/noppes/npcs/ServerTickHandler.java index 2639c6ab5..220a0e6ef 100644 --- a/src/main/java/noppes/npcs/ServerTickHandler.java +++ b/src/main/java/noppes/npcs/ServerTickHandler.java @@ -6,9 +6,9 @@ import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.SyncController; -import noppes.npcs.controllers.AuctionController; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.world.WorldServer; +import noppes.npcs.controllers.AuctionController; import noppes.npcs.controllers.ScriptController; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.action.ActionManager; diff --git a/src/main/java/noppes/npcs/ai/CombatHandler.java b/src/main/java/noppes/npcs/ai/CombatHandler.java index ff81e4821..97d9a90eb 100644 --- a/src/main/java/noppes/npcs/ai/CombatHandler.java +++ b/src/main/java/noppes/npcs/ai/CombatHandler.java @@ -1,7 +1,6 @@ package noppes.npcs.ai; import kamkeel.npcs.addon.DBCAddon; -import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/noppes/npcs/blocks/BlockWaypoint.java b/src/main/java/noppes/npcs/blocks/BlockWaypoint.java index 7e2dd87d3..e91f43d25 100644 --- a/src/main/java/noppes/npcs/blocks/BlockWaypoint.java +++ b/src/main/java/noppes/npcs/blocks/BlockWaypoint.java @@ -12,10 +12,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import noppes.npcs.CustomItems; -import noppes.npcs.CustomNpcs; import noppes.npcs.CustomNpcsPermissions; import noppes.npcs.blocks.tiles.TileWaypoint; -import noppes.npcs.constants.EnumGuiType; public class BlockWaypoint extends BlockContainer { diff --git a/src/main/java/noppes/npcs/client/AuctionClientConfig.java b/src/main/java/noppes/npcs/client/AuctionClientConfig.java index f993318ed..a94bab504 100644 --- a/src/main/java/noppes/npcs/client/AuctionClientConfig.java +++ b/src/main/java/noppes/npcs/client/AuctionClientConfig.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; /** * Client-side cache for auction configuration synced from server. * Prevents client from using local ConfigMarket which may differ from server settings. - * + *

* IMPORTANT: This class is CLIENT-ONLY. Server-side NBT writing is done in * AuctionConfigSync to avoid @SideOnly crashes on dedicated servers. */ @@ -56,11 +56,31 @@ public class AuctionClientConfig { } // Getters - public static boolean isAuctionEnabled() { return auctionEnabled; } - public static long getListingFee() { return listingFee; } - public static String getCurrencyName() { return currencyName; } - public static int getAuctionDurationHours() { return auctionDurationHours; } - public static double getMinBidIncrement() { return minBidIncrement; } - public static int getMaxActiveListings() { return maxActiveListings; } - public static int getClaimExpirationDays() { return claimExpirationDays; } + public static boolean isAuctionEnabled() { + return auctionEnabled; + } + + public static long getListingFee() { + return listingFee; + } + + public static String getCurrencyName() { + return currencyName; + } + + public static int getAuctionDurationHours() { + return auctionDurationHours; + } + + public static double getMinBidIncrement() { + return minBidIncrement; + } + + public static int getMaxActiveListings() { + return maxActiveListings; + } + + public static int getClaimExpirationDays() { + return claimExpirationDays; + } } diff --git a/src/main/java/noppes/npcs/client/ClientEventHandler.java b/src/main/java/noppes/npcs/client/ClientEventHandler.java index 6fc690b5a..a73ccf707 100644 --- a/src/main/java/noppes/npcs/client/ClientEventHandler.java +++ b/src/main/java/noppes/npcs/client/ClientEventHandler.java @@ -20,12 +20,12 @@ import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import noppes.npcs.client.gui.player.AuctionTooltipHandler; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.client.gui.hud.ClientHudManager; import noppes.npcs.client.gui.hud.CompassHudComponent; import noppes.npcs.client.gui.hud.EnumHudComponent; import noppes.npcs.client.gui.hud.QuestTrackingComponent; +import noppes.npcs.client.gui.player.AuctionTooltipHandler; import noppes.npcs.client.renderer.MarkRenderer; import noppes.npcs.client.renderer.RenderCNPCPlayer; import noppes.npcs.constants.EnumAnimationPart; @@ -91,9 +91,9 @@ public class ClientEventHandler { // Block mouse movement during ability rotation lock. // Allow clicks (button >= 0) and scroll (dwheel != 0) to pass through. if (mc.theWorld != null && mc.thePlayer != null - && ClientAbilityState.shouldLockRotation() - && (event.dx != 0 || event.dy != 0) - && event.button == -1 && event.dwheel == 0) { + && ClientAbilityState.shouldLockRotation() + && (event.dx != 0 || event.dy != 0) + && event.button == -1 && event.dwheel == 0) { event.setCanceled(true); return; } diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 28e028afe..a0a5ce060 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -6,8 +6,27 @@ import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ObfuscationReflectionHelper; import kamkeel.npcs.addon.client.DBCClient; +import kamkeel.npcs.client.renderer.RenderAbilityBeam; +import kamkeel.npcs.client.renderer.RenderAbilityDisc; +import kamkeel.npcs.client.renderer.RenderAbilityLaser; +import kamkeel.npcs.client.renderer.RenderAbilityOrb; +import kamkeel.npcs.client.renderer.RenderAbilitySweeper; +import kamkeel.npcs.client.renderer.RenderAbilityZone; +import kamkeel.npcs.client.renderer.RenderEnergyDome; +import kamkeel.npcs.client.renderer.RenderEnergyPanel; +import kamkeel.npcs.client.renderer.RenderEnergySlicer; import kamkeel.npcs.client.renderer.TelegraphRenderer; +import kamkeel.npcs.client.renderer.lightning.LightningHandler; import kamkeel.npcs.controllers.data.telegraph.TelegraphManager; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilitySweeper; +import kamkeel.npcs.entity.EntityAbilityZone; +import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityEnergySlicer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.model.ModelBiped; @@ -88,12 +107,12 @@ 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; import noppes.npcs.client.gui.global.GuiNPCManageTags; import noppes.npcs.client.gui.global.GuiNPCManageTransporters; +import noppes.npcs.client.gui.global.GuiNpcManageAbilities; import noppes.npcs.client.gui.global.GuiNpcManageMagic; import noppes.npcs.client.gui.global.GuiNpcManageRecipes; import noppes.npcs.client.gui.global.GuiNpcQuestReward; @@ -105,15 +124,15 @@ import noppes.npcs.client.gui.mainmenu.GuiNpcAI; import noppes.npcs.client.gui.mainmenu.GuiNpcAdvanced; import noppes.npcs.client.gui.mainmenu.GuiNpcDisplay; import noppes.npcs.client.gui.mainmenu.GuiNpcStats; +import noppes.npcs.client.gui.player.GuiAuctionBidding; +import noppes.npcs.client.gui.player.GuiAuctionListing; +import noppes.npcs.client.gui.player.GuiAuctionSell; +import noppes.npcs.client.gui.player.GuiAuctionTrades; import noppes.npcs.client.gui.player.GuiBigSign; import noppes.npcs.client.gui.player.GuiCrate; import noppes.npcs.client.gui.player.GuiMailbox; import noppes.npcs.client.gui.player.GuiMailmanWrite; import noppes.npcs.client.gui.player.GuiNPCBankChest; -import noppes.npcs.client.gui.player.GuiAuctionBidding; -import noppes.npcs.client.gui.player.GuiAuctionTrades; -import noppes.npcs.client.gui.player.GuiAuctionListing; -import noppes.npcs.client.gui.player.GuiAuctionSell; import noppes.npcs.client.gui.player.GuiNPCTrader; import noppes.npcs.client.gui.player.GuiNpcAnvil; import noppes.npcs.client.gui.player.GuiNpcCarpentryBench; @@ -146,25 +165,6 @@ 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.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.RenderAbilityZone; -import kamkeel.npcs.client.renderer.RenderEnergyDome; -import kamkeel.npcs.client.renderer.RenderEnergyPanel; -import kamkeel.npcs.client.renderer.RenderEnergySlicer; -import kamkeel.npcs.client.renderer.lightning.LightningHandler; -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 kamkeel.npcs.entity.EntityAbilityZone; -import kamkeel.npcs.entity.EntityEnergyDome; -import kamkeel.npcs.entity.EntityEnergyPanel; -import kamkeel.npcs.entity.EntityEnergySlicer; import noppes.npcs.client.renderer.blocks.BlockBannerRenderer; import noppes.npcs.client.renderer.blocks.BlockBarrelRenderer; import noppes.npcs.client.renderer.blocks.BlockBeamRenderer; @@ -200,13 +200,16 @@ import noppes.npcs.client.renderer.items.ItemShortLampRenderer; import noppes.npcs.client.renderer.items.ItemTallLampRenderer; import noppes.npcs.client.renderer.items.ItemToolRenderer; import noppes.npcs.client.renderer.items.ScriptedBlockItemRenderer; -import noppes.npcs.client.ScriptClientConfig; import noppes.npcs.config.ConfigClient; import noppes.npcs.config.ConfigItem; import noppes.npcs.config.ConfigMain; import noppes.npcs.config.StringCache; import noppes.npcs.constants.EnumGuiType; import noppes.npcs.containers.ContainerAnvilRepair; +import noppes.npcs.containers.ContainerAuctionBidding; +import noppes.npcs.containers.ContainerAuctionListing; +import noppes.npcs.containers.ContainerAuctionSell; +import noppes.npcs.containers.ContainerAuctionTrades; import noppes.npcs.containers.ContainerCarpentryBench; import noppes.npcs.containers.ContainerCrate; import noppes.npcs.containers.ContainerCustomGui; @@ -219,11 +222,6 @@ import noppes.npcs.containers.ContainerNPCFollower; import noppes.npcs.containers.ContainerNPCFollowerHire; import noppes.npcs.containers.ContainerNPCFollowerSetup; import noppes.npcs.containers.ContainerNPCInv; -import noppes.npcs.containers.ContainerAuction; -import noppes.npcs.containers.ContainerAuctionBidding; -import noppes.npcs.containers.ContainerAuctionTrades; -import noppes.npcs.containers.ContainerAuctionListing; -import noppes.npcs.containers.ContainerAuctionSell; import noppes.npcs.containers.ContainerNPCTrader; import noppes.npcs.containers.ContainerNPCTraderSetup; import noppes.npcs.containers.ContainerNpcItemGiver; @@ -525,9 +523,7 @@ public class ClientProxy extends CommonProxy { abilityNpc.width = 0.6f; } return new GuiNpcManageAbilities(abilityNpc, npc != null); - } - - else if (gui == EnumGuiType.MainMenuGlobal) + } else if (gui == EnumGuiType.MainMenuGlobal) return new GuiNPCGlobalMainMenu(npc); else if (gui == EnumGuiType.MainMenuAI) diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index 05af02800..5a59461b7 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -136,8 +136,8 @@ public class ClientTickHandler { // Prevent jumping when locked (allow gravity only if not flying) if ((ClientAbilityState.movementLocked || ClientAbilityState.positionLocked) - && !ClientAbilityState.hasAbilityMovement - && !AbilityController.Instance.isPlayerFlying(mc.thePlayer)) { + && !ClientAbilityState.hasAbilityMovement + && !AbilityController.Instance.isPlayerFlying(mc.thePlayer)) { mc.thePlayer.motionY = Math.min(mc.thePlayer.motionY, 0); } } @@ -226,7 +226,7 @@ public class ClientTickHandler { // Block movement keys during ability lock (only when no GUI is open and world exists). // Non-movement keys (ESC, chat, inventory, etc.) always pass through. if (mc.theWorld != null && mc.currentScreen == null && keyDown - && ClientAbilityState.shouldSuppressMovementInput() && isMovementKey(key)) { + && ClientAbilityState.shouldSuppressMovementInput() && isMovementKey(key)) { // Unpress the keybind so vanilla doesn't process it KeyBinding.setKeyBindState(key, false); return; diff --git a/src/main/java/noppes/npcs/client/ScriptClientConfig.java b/src/main/java/noppes/npcs/client/ScriptClientConfig.java index 863f991ba..2af091723 100644 --- a/src/main/java/noppes/npcs/client/ScriptClientConfig.java +++ b/src/main/java/noppes/npcs/client/ScriptClientConfig.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; /** * Client-side cache for script configuration synced from server. * Prevents client from using local ConfigScript which may differ from server settings. - * + *

* IMPORTANT: This class is CLIENT-ONLY. Server-side NBT writing is done in * ScriptConfigSync to avoid @SideOnly crashes on dedicated servers. */ @@ -46,16 +46,44 @@ public class ScriptClientConfig { } // Setters for individual packet updates - public static void setScriptingEnabled(boolean value) { scriptingEnabled = value; } - public static void setRunLoadedScriptsFirst(boolean value) { runLoadedScriptsFirst = value; } - public static void setGlobalPlayerScripts(boolean value) { globalPlayerScripts = value; } - public static void setGlobalForgeScripts(boolean value) { globalForgeScripts = value; } - public static void setGlobalNPCScripts(boolean value) { globalNPCScripts = value; } + public static void setScriptingEnabled(boolean value) { + scriptingEnabled = value; + } + + public static void setRunLoadedScriptsFirst(boolean value) { + runLoadedScriptsFirst = value; + } + + public static void setGlobalPlayerScripts(boolean value) { + globalPlayerScripts = value; + } + + public static void setGlobalForgeScripts(boolean value) { + globalForgeScripts = value; + } + + public static void setGlobalNPCScripts(boolean value) { + globalNPCScripts = value; + } // Getters - public static boolean isScriptingEnabled() { return scriptingEnabled; } - public static boolean isRunLoadedScriptsFirst() { return runLoadedScriptsFirst; } - public static boolean isGlobalPlayerScripts() { return globalPlayerScripts; } - public static boolean isGlobalForgeScripts() { return globalForgeScripts; } - public static boolean isGlobalNPCScripts() { return globalNPCScripts; } + public static boolean isScriptingEnabled() { + return scriptingEnabled; + } + + public static boolean isRunLoadedScriptsFirst() { + return runLoadedScriptsFirst; + } + + public static boolean isGlobalPlayerScripts() { + return globalPlayerScripts; + } + + public static boolean isGlobalForgeScripts() { + return globalForgeScripts; + } + + public static boolean isGlobalNPCScripts() { + return globalNPCScripts; + } } diff --git a/src/main/java/noppes/npcs/client/fx/ZoneParticleFX.java b/src/main/java/noppes/npcs/client/fx/ZoneParticleFX.java index 80f6f687b..eb04c2159 100644 --- a/src/main/java/noppes/npcs/client/fx/ZoneParticleFX.java +++ b/src/main/java/noppes/npcs/client/fx/ZoneParticleFX.java @@ -16,9 +16,9 @@ public class ZoneParticleFX extends EntityFX { private final boolean glow; public ZoneParticleFX(World world, double x, double y, double z, - double motionX, double motionY, double motionZ, - float r, float g, float b, float alpha, - float scale, int maxAge, float gravity, boolean glow) { + double motionX, double motionY, double motionZ, + float r, float g, float b, float alpha, + float scale, int maxAge, float gravity, boolean glow) { super(world, x, y, z, 0, 0, 0); this.motionX = motionX; this.motionY = motionY; diff --git a/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawnerFullscreen.java b/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawnerFullscreen.java index 4919ccbae..80e0a971f 100644 --- a/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawnerFullscreen.java +++ b/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawnerFullscreen.java @@ -74,10 +74,10 @@ public class GuiNpcMobSpawnerFullscreen extends GuiDirectory implements IGuiData this.posZ = posZ; // Configure GuiDirectory layout percentages - leftPanelPercent = 0.15f; + leftPanelPercent = 0.15f; rightPanelPercent = 0.08f; - minLeftPanelW = 120; - minRightPanelW = 62; + minLeftPanelW = 120; + minRightPanelW = 62; PacketClient.sendClient(new CloneAllTagsPacket()); if (GuiNpcMobSpawner.showingClones == 2) { diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java b/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java index 86f174bc4..17996759e 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiNpcDialogVisual.java @@ -1,9 +1,6 @@ package noppes.npcs.client.gui; -import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.dialog.DialogSavePacket; import net.minecraft.client.gui.GuiButton; -import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.NoppesUtil; import noppes.npcs.client.gui.util.GuiCustomScroll; import noppes.npcs.client.gui.util.GuiMenuTopButton; 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 8e0db5e71..e95b2c97b 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCAbilities.java @@ -1,7 +1,7 @@ package noppes.npcs.client.gui.advanced; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityAction; import kamkeel.npcs.controllers.data.ability.AbilityVariant; import kamkeel.npcs.controllers.data.ability.ChainedAbility; @@ -33,7 +33,14 @@ import noppes.npcs.client.gui.util.SubGuiInterface; import noppes.npcs.constants.EnumScrollData; import noppes.npcs.entity.EntityNPCInterface; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.Vector; /** * GUI for managing NPC abilities. @@ -42,30 +49,30 @@ import java.util.*; public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, ICustomScrollListener, IGuiData, ITextfieldListener, ISubGuiListener, IAbilityConfigCallback, IChainedAbilityConfigCallback { // ── Button IDs ──────────────────────────────────────────────────────────── - private static final int BTN_SCROLL_TYPE = 50; - private static final int BTN_ADD_ABILITY = 70; - private static final int BTN_REMOVE = 71; - private static final int BTN_EDIT = 72; - private static final int BTN_MOVE_UP = 73; - private static final int BTN_MOVE_DOWN = 74; - private static final int BTN_LOAD = 75; - private static final int BTN_SAVE_PRESET = 76; - private static final int BTN_TOGGLE_SLOT = 77; - private static final int BTN_ADD_CHAIN = 78; - private static final int BTN_ENABLED = 100; + private static final int BTN_SCROLL_TYPE = 50; + private static final int BTN_ADD_ABILITY = 70; + private static final int BTN_REMOVE = 71; + private static final int BTN_EDIT = 72; + private static final int BTN_MOVE_UP = 73; + private static final int BTN_MOVE_DOWN = 74; + private static final int BTN_LOAD = 75; + private static final int BTN_SAVE_PRESET = 76; + private static final int BTN_TOGGLE_SLOT = 77; + private static final int BTN_ADD_CHAIN = 78; + private static final int BTN_ENABLED = 100; // ── Scroll IDs ──────────────────────────────────────────────────────────── - private static final int SCROLL_TYPES = 0; - private static final int SCROLL_NPC = 1; + private static final int SCROLL_TYPES = 0; + private static final int SCROLL_NPC = 1; // ── TextField / Label IDs ───────────────────────────────────────────────── - private static final int TF_MIN_COOLDOWN = 101; - private static final int TF_MAX_COOLDOWN = 102; - private static final int TF_SEARCH = 4; - private static final int LBL_TYPES = 1; - private static final int LBL_NPC = 2; - private static final int LBL_MIN_COOLDOWN = 101; - private static final int LBL_MAX_COOLDOWN = 102; + private static final int TF_MIN_COOLDOWN = 101; + private static final int TF_MAX_COOLDOWN = 102; + private static final int TF_SEARCH = 4; + private static final int LBL_TYPES = 1; + private static final int LBL_NPC = 2; + private static final int LBL_MIN_COOLDOWN = 101; + private static final int LBL_MAX_COOLDOWN = 102; // ── Scroll lists ────────────────────────────────────────────────────────── private GuiCustomScroll availableTypesScroll; @@ -127,7 +134,8 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public String toString() { switch (this) { - case CNPC: return "CustomNPCs"; + case CNPC: + return "CustomNPCs"; case MODDED: if (Register.isEmpty("ability")) return "modded"; @@ -135,8 +143,10 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC String namespace = Register.REGISTERED_NAMESPACES.get("ability").get(modIndex); String displayName = Register.NAMESPACE_DISPLAY_NAMES.get(namespace); return displayName != null ? displayName : namespace; - case ALL: return "filter.all"; - default: return name(); + case ALL: + return "filter.all"; + default: + return name(); } } } @@ -855,13 +865,37 @@ public class GuiNPCAbilities extends GuiNPCInterface2 implements IScrollData, IC @Override public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiAbilityVariantSelect) { handleVariantSelectClosed((SubGuiAbilityVariantSelect) subgui); initGui(); return; } - if (subgui instanceof SubGuiChainedAbilityConfig) { handleChainConfigClosed(); initGui(); return; } - if (subgui instanceof SubGuiAbilityEditMode) { handleEditModeClosed((SubGuiAbilityEditMode) subgui); return; } - if (subgui instanceof SubGuiAbilitySaveConfirm) { handleSaveConfirmClosed((SubGuiAbilitySaveConfirm) subgui); initGui(); return; } - if (subgui instanceof SubGuiLoadTypeChoice) { handleLoadTypeChoiceClosed((SubGuiLoadTypeChoice) subgui); return; } - if (subgui instanceof SubGuiChainSelect) { handleChainSelectClosed((SubGuiChainSelect) subgui); return; } - if (subgui instanceof SubGuiAbilityConfig) { handleAbilityConfigClosed(); return; } + if (subgui instanceof SubGuiAbilityVariantSelect) { + handleVariantSelectClosed((SubGuiAbilityVariantSelect) subgui); + initGui(); + return; + } + if (subgui instanceof SubGuiChainedAbilityConfig) { + handleChainConfigClosed(); + initGui(); + return; + } + if (subgui instanceof SubGuiAbilityEditMode) { + handleEditModeClosed((SubGuiAbilityEditMode) subgui); + return; + } + if (subgui instanceof SubGuiAbilitySaveConfirm) { + handleSaveConfirmClosed((SubGuiAbilitySaveConfirm) subgui); + initGui(); + return; + } + if (subgui instanceof SubGuiLoadTypeChoice) { + handleLoadTypeChoiceClosed((SubGuiLoadTypeChoice) subgui); + return; + } + if (subgui instanceof SubGuiChainSelect) { + handleChainSelectClosed((SubGuiChainSelect) subgui); + return; + } + if (subgui instanceof SubGuiAbilityConfig) { + handleAbilityConfigClosed(); + return; + } } private void handleVariantSelectClosed(SubGuiAbilityVariantSelect gui) { 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 bcfce7687..f0b610d19 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityConfig.java @@ -3,10 +3,10 @@ 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.gui.AbilityFieldBuilder; -import noppes.npcs.client.gui.builder.FieldDef; import net.minecraft.client.gui.GuiButton; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; +import noppes.npcs.client.gui.builder.FieldDef; import noppes.npcs.client.gui.util.GuiMenuTopButton; import noppes.npcs.client.gui.util.GuiNpcButton; import noppes.npcs.client.gui.util.GuiNpcLabel; @@ -75,11 +75,11 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi for (FieldDef def : fieldDefs) { String tab = def.getTab(); if (tab != null - && !TAB_NAME_GENERAL.equals(tab) - && !TAB_NAME_TYPE.equals(tab) - && !TAB_NAME_TARGET.equals(tab) - && !TAB_NAME_EFFECTS.equals(tab) - && !customTabNames.contains(tab)) { + && !TAB_NAME_GENERAL.equals(tab) + && !TAB_NAME_TYPE.equals(tab) + && !TAB_NAME_TARGET.equals(tab) + && !TAB_NAME_EFFECTS.equals(tab) + && !customTabNames.contains(tab)) { customTabNames.add(tab); } } @@ -187,11 +187,21 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi } } else { switch (tabIndex) { - case TAB_GENERAL: tabName = TAB_NAME_GENERAL; break; - case TAB_TYPE: tabName = TAB_NAME_TYPE; break; - case TAB_TARGET: tabName = TAB_NAME_TARGET; break; - case TAB_EFFECTS: tabName = TAB_NAME_EFFECTS; break; - default: tabName = TAB_NAME_TYPE; break; + case TAB_GENERAL: + tabName = TAB_NAME_GENERAL; + break; + case TAB_TYPE: + tabName = TAB_NAME_TYPE; + break; + case TAB_TARGET: + tabName = TAB_NAME_TARGET; + break; + case TAB_EFFECTS: + tabName = TAB_NAME_EFFECTS; + break; + default: + tabName = TAB_NAME_TYPE; + break; } } @@ -264,17 +274,36 @@ public class SubGuiAbilityConfig extends SubGuiInterface implements ITextfieldLi int id = guibutton.id; // 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 == 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; + } // Custom tabs (94+) if (id >= 94 && id < 94 + customTabNames.size()) { activeTab = 4 + (id - 94); initGui(); return; } - if (id == -1000) { close(); return; } + if (id == -1000) { + close(); + return; + } // Condition buttons (50-80) if (handleConditionButton(id)) return; 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 595f5a773..dda5ee8e6 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiAbilityLoad.java @@ -1,7 +1,7 @@ package noppes.npcs.client.gui.advanced; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.request.ability.CustomAbilitiesGetPacket; import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket; diff --git a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiChainedAbilityConfig.java b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiChainedAbilityConfig.java index ccef30b0d..090d86dbb 100644 --- a/src/main/java/noppes/npcs/client/gui/advanced/SubGuiChainedAbilityConfig.java +++ b/src/main/java/noppes/npcs/client/gui/advanced/SubGuiChainedAbilityConfig.java @@ -43,37 +43,37 @@ public class SubGuiChainedAbilityConfig extends SubGuiInterface implements IText private static final int LABEL_ID_START = 3000; // ── Tab constants (core tabs) ──────────────────────────────────────────── - private static final int TAB_GENERAL = 0; - private static final int TAB_ENTRIES = 1; + private static final int TAB_GENERAL = 0; + private static final int TAB_ENTRIES = 1; private static final int TAB_CONDITIONS = 2; private static final int CORE_TAB_COUNT = 3; // ── Tab button IDs ──────────────────────────────────────────────────────── - private static final int BTN_TAB_GENERAL = 90; - private static final int BTN_TAB_ENTRIES = 91; + private static final int BTN_TAB_GENERAL = 90; + private static final int BTN_TAB_ENTRIES = 91; private static final int BTN_TAB_CONDITIONS = 92; private static final int BTN_TAB_EXTRA_BASE = 93; - private static final int BTN_CLOSE = -1000; + private static final int BTN_CLOSE = -1000; // ── Entries tab: per-entry ID encoding ───────────────────────────────────── // Actual ID = ENTRY_BASE + i * ENTRY_STRIDE + offset // offset 0 = name/select button, 1 = delay text field, 2 = up, 3 = down, 4 = delete - private static final int ENTRY_BASE = 100; - private static final int ENTRY_END = 200; - private static final int ENTRY_STRIDE = 10; + private static final int ENTRY_BASE = 100; + private static final int ENTRY_END = 200; + private static final int ENTRY_STRIDE = 10; private static final int BTN_ADD_ENTRY = 200; // ── Conditions tab: per-condition ID encoding ───────────────────────────── // Actual ID = COND_BASE + i * COND_STRIDE + offset // offset 0 = name/click, 1 = edit, 2 = delete - private static final int COND_BASE = 50; - private static final int COND_END = 80; - private static final int COND_STRIDE = 10; - private static final int BTN_ADD_COND = 80; + private static final int COND_BASE = 50; + private static final int COND_END = 80; + private static final int COND_STRIDE = 10; + private static final int BTN_ADD_COND = 80; // ── Layout constants ────────────────────────────────────────────────────── - private static final int L_LABEL_X = 5; - private static final int ROW_H = 24; + private static final int L_LABEL_X = 5; + private static final int ROW_H = 24; private static final int MAX_ENTRIES = 10; private final ChainedAbility chain; @@ -109,7 +109,7 @@ public class SubGuiChainedAbilityConfig extends SubGuiInterface implements IText } public SubGuiChainedAbilityConfig(ChainedAbility chain, IChainedAbilityConfigCallback callback, - boolean npcContext, List npcSlots) { + boolean npcContext, List npcSlots) { this.chain = chain; this.callback = callback; this.npcContext = npcContext; @@ -417,10 +417,26 @@ public class SubGuiChainedAbilityConfig extends SubGuiInterface implements IText int id = guibutton.id; // Tab switching — core tabs - if (id == BTN_TAB_GENERAL) { activeTab = TAB_GENERAL; initGui(); return; } - if (id == BTN_TAB_ENTRIES) { activeTab = TAB_ENTRIES; initGui(); return; } - if (id == BTN_TAB_CONDITIONS) { activeTab = TAB_CONDITIONS; initGui(); return; } - if (id == BTN_CLOSE) { saveOnClose = true; close(); return; } + if (id == BTN_TAB_GENERAL) { + activeTab = TAB_GENERAL; + initGui(); + return; + } + if (id == BTN_TAB_ENTRIES) { + activeTab = TAB_ENTRIES; + initGui(); + return; + } + if (id == BTN_TAB_CONDITIONS) { + activeTab = TAB_CONDITIONS; + initGui(); + return; + } + if (id == BTN_CLOSE) { + saveOnClose = true; + close(); + return; + } // Tab switching — extra tabs if (id >= BTN_TAB_EXTRA_BASE && id < BTN_TAB_EXTRA_BASE + extraTabs.size()) { @@ -575,12 +591,35 @@ public class SubGuiChainedAbilityConfig extends SubGuiInterface implements IText } } - if (subgui instanceof SubGuiAbilitySelect) { handleAbilitySelectClosed((SubGuiAbilitySelect) subgui); initGui(); return; } - if (subgui instanceof SubGuiChainedEntrySource) { handleEntrySourceClosed((SubGuiChainedEntrySource) subgui); return; } - if (subgui instanceof SubGuiNpcSlotPicker) { handleSlotPickerClosed((SubGuiNpcSlotPicker) subgui); initGui(); return; } - if (subgui instanceof SubGuiAbilityTypeSelect) { handleTypeSelectClosed((SubGuiAbilityTypeSelect) subgui); if (!hasSubGui()) initGui(); return; } - if (subgui instanceof SubGuiAbilityConfig) { editingEntryIndex = -1; initGui(); return; } - if (subgui instanceof SubGuiConditionEdit) { handleConditionEditClosed((SubGuiConditionEdit) subgui); initGui(); return; } + if (subgui instanceof SubGuiAbilitySelect) { + handleAbilitySelectClosed((SubGuiAbilitySelect) subgui); + initGui(); + return; + } + if (subgui instanceof SubGuiChainedEntrySource) { + handleEntrySourceClosed((SubGuiChainedEntrySource) subgui); + return; + } + if (subgui instanceof SubGuiNpcSlotPicker) { + handleSlotPickerClosed((SubGuiNpcSlotPicker) subgui); + initGui(); + return; + } + if (subgui instanceof SubGuiAbilityTypeSelect) { + handleTypeSelectClosed((SubGuiAbilityTypeSelect) subgui); + if (!hasSubGui()) initGui(); + return; + } + if (subgui instanceof SubGuiAbilityConfig) { + editingEntryIndex = -1; + initGui(); + return; + } + if (subgui instanceof SubGuiConditionEdit) { + handleConditionEditClosed((SubGuiConditionEdit) subgui); + initGui(); + return; + } } private void handleAbilitySelectClosed(SubGuiAbilitySelect gui) { diff --git a/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java b/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java index aec4b766a..66e433f45 100644 --- a/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java +++ b/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java @@ -2,12 +2,12 @@ package noppes.npcs.client.gui.builder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import noppes.npcs.controllers.AnimationController; -import noppes.npcs.controllers.data.Animation; 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.SubGuiInterface; +import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.data.Animation; import java.util.List; import java.util.function.BooleanSupplier; @@ -175,8 +175,8 @@ public class FieldDef { } public static FieldDef animSubGui(String label, - Supplier idGetter, Consumer idSetter, - Supplier nameGetter, Consumer nameSetter) { + Supplier idGetter, Consumer idSetter, + Supplier nameGetter, Consumer nameSetter) { return subGuiField(label, () -> new GuiAnimationSelection(idGetter.get(), nameGetter.get()), gui -> { @@ -202,7 +202,10 @@ public class FieldDef { } return "gui.none"; }) - .clearable(() -> { idSetter.accept(-1); nameSetter.accept(""); }); + .clearable(() -> { + idSetter.accept(-1); + nameSetter.accept(""); + }); } // ═══════════════════════════════════════════════════════════════════ @@ -264,21 +267,65 @@ public class FieldDef { // GETTERS // ═══════════════════════════════════════════════════════════════════ - public String getLabel() { return label; } - public FieldType getType() { return type; } - public String getTab() { return tab; } - public boolean isVisible() { return visibleWhen.getAsBoolean(); } - public boolean isEnabled() { return enabledWhen.getAsBoolean(); } - public String getHoverText() { return hoverText; } - public float getMin() { return min; } - public float getMax() { return max; } - public boolean hasRange() { return min != Float.NEGATIVE_INFINITY || max != Float.POSITIVE_INFINITY; } - 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 String getLabel() { + return label; + } + + public FieldType getType() { + return type; + } + + public String getTab() { + return tab; + } + + public boolean isVisible() { + return visibleWhen.getAsBoolean(); + } + + public boolean isEnabled() { + return enabledWhen.getAsBoolean(); + } + + public String getHoverText() { + return hoverText; + } + + public float getMin() { + return min; + } + + public float getMax() { + return max; + } + + public boolean hasRange() { + return min != Float.NEGATIVE_INFINITY || max != Float.POSITIVE_INFINITY; + } + + 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; @@ -305,8 +352,13 @@ public class FieldDef { return buttonTextColorSupplier != null ? buttonTextColorSupplier.get() : null; } - public FieldDef getLeftChild() { return leftChild; } - public FieldDef getRightChild() { return rightChild; } + public FieldDef getLeftChild() { + return leftChild; + } + + public FieldDef getRightChild() { + return rightChild; + } // ═══════════════════════════════════════════════════════════════════ // LIST MANIPULATION (for mod injection) @@ -356,7 +408,7 @@ public class FieldDef { * * @param fields The field list to modify * @param targetLabel The label of the field to modify - * @param condition The condition to replace + * @param condition The condition to replace * @return true if the target was found and the condition was modified */ public static boolean modifyVisibility(List fields, String targetLabel, BooleanSupplier condition) { diff --git a/src/main/java/noppes/npcs/client/gui/builder/GuiFieldBuilder.java b/src/main/java/noppes/npcs/client/gui/builder/GuiFieldBuilder.java index 1ef3d52e5..bb069b8f5 100644 --- a/src/main/java/noppes/npcs/client/gui/builder/GuiFieldBuilder.java +++ b/src/main/java/noppes/npcs/client/gui/builder/GuiFieldBuilder.java @@ -69,13 +69,32 @@ public class GuiFieldBuilder { // CONFIG CHAINING // ═══════════════════════════════════════════════════════════════════ - public GuiFieldBuilder scrollWindowId(int id) { this.scrollWindowId = id; return this; } - public GuiFieldBuilder contentRight(int v) { this.contentRight = v; return this; } - public GuiFieldBuilder startIds(int widget, int clear, int label) { - this.widgetId = widget; this.clearId = clear; this.labelId = label; return this; + public GuiFieldBuilder scrollWindowId(int id) { + this.scrollWindowId = id; + return this; + } + + public GuiFieldBuilder contentRight(int v) { + this.contentRight = v; + return this; + } + + public GuiFieldBuilder startIds(int widget, int clear, int label) { + this.widgetId = widget; + this.clearId = clear; + this.labelId = label; + return this; + } + + public GuiFieldBuilder startY(int y) { + this.startY = y; + return this; + } + + public GuiFieldBuilder rowHeight(int h) { + this.rowHeight = h; + return this; } - public GuiFieldBuilder startY(int y) { this.startY = y; return this; } - public GuiFieldBuilder rowHeight(int h) { this.rowHeight = h; return this; } // ═══════════════════════════════════════════════════════════════════ // BUILD @@ -98,6 +117,7 @@ public class GuiFieldBuilder { /** * Processes all fields and adds widgets to the scroll window. + * * @return the final Y position after all fields */ protected int build(List fields) { @@ -173,8 +193,14 @@ public class GuiFieldBuilder { } private int lastHandledIndex = -1; - protected void setLastHandledIndex(int index) { this.lastHandledIndex = index; } - protected int getLastHandledIndex() { return lastHandledIndex; } + + protected void setLastHandledIndex(int index) { + this.lastHandledIndex = index; + } + + protected int getLastHandledIndex() { + return lastHandledIndex; + } // ═══════════════════════════════════════════════════════════════════ // FIELD RENDERING @@ -268,7 +294,10 @@ public class GuiFieldBuilder { String curVal = def.getStringEnumValue(); int selected = 0; for (int i = 0; i < values.length; i++) { - if (values[i].equals(curVal)) { selected = i; break; } + 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); @@ -321,14 +350,21 @@ public class GuiFieldBuilder { protected 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 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; + case STRING_ENUM: + return 120; + case SUB_GUI: + return def.hasClearAction() ? 175 : 200; + default: + return 80; } } @@ -410,7 +446,8 @@ public class GuiFieldBuilder { def.setValue(newVal); return true; } - } catch (NumberFormatException ignored) {} + } catch (NumberFormatException ignored) { + } return false; case INT: try { @@ -421,7 +458,8 @@ public class GuiFieldBuilder { def.setValue(newVal); return true; } - } catch (NumberFormatException ignored) {} + } catch (NumberFormatException ignored) { + } return false; case STRING: String newVal = field.getText(); @@ -453,10 +491,27 @@ public class GuiFieldBuilder { // GETTERS // ═══════════════════════════════════════════════════════════════════ - public Map getButtonFieldMap() { return buttonFieldMap; } - public Map getTextFieldMap() { return textFieldMap; } - public Map getClearFieldMap() { return clearFieldMap; } - public GuiScrollWindow getScrollWindow() { return sw; } - public int getLastBuildY() { return lastBuildY; } - public int getNextLabelId() { return labelId; } + public Map getButtonFieldMap() { + return buttonFieldMap; + } + + public Map getTextFieldMap() { + return textFieldMap; + } + + public Map getClearFieldMap() { + return clearFieldMap; + } + + public GuiScrollWindow getScrollWindow() { + return sw; + } + + public int getLastBuildY() { + return lastBuildY; + } + + public int getNextLabelId() { + return labelId; + } } 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 fef120604..52ddbba9d 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManageAbilities.java @@ -1,7 +1,8 @@ package noppes.npcs.client.gui.global; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; +import kamkeel.npcs.controllers.data.ability.AbilityVariant; import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.request.ability.BuiltInAbilityGetPacket; @@ -19,7 +20,6 @@ import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; import noppes.npcs.client.NoppesUtil; -import kamkeel.npcs.controllers.data.ability.AbilityVariant; import noppes.npcs.client.gui.advanced.SubGuiAbilityTypeSelect; import noppes.npcs.client.gui.advanced.SubGuiAbilityVariantSelect; import noppes.npcs.client.gui.advanced.SubGuiChainedAbilityConfig; @@ -50,7 +50,7 @@ import java.util.Vector; /** * 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 @@ -58,29 +58,29 @@ import java.util.Vector; * - Toggle between Custom and Built-in ability views */ public class GuiNpcManageAbilities extends GuiAbilityInterface - implements ICustomScrollListener, ISubGuiListener, IAbilityConfigCallback, - IChainedAbilityConfigCallback, ITextfieldListener, GuiYesNoCallback, - IScrollData, IGuiData { + implements ICustomScrollListener, ISubGuiListener, IAbilityConfigCallback, + IChainedAbilityConfigCallback, ITextfieldListener, GuiYesNoCallback, + IScrollData, IGuiData { // ── Button IDs ──────────────────────────────────────────────────────────── - private static final int BTN_REMOVE = 1; - private static final int BTN_ADD = 2; - private static final int BTN_TOGGLE_VIEW = 10; - private static final int BTN_EDIT = 100; - private static final int BTN_PREVIEW_PLAY = 91; - private static final int BTN_PREVIEW_PAUSE = 92; - private static final int BTN_PREVIEW_STOP = 93; + private static final int BTN_REMOVE = 1; + private static final int BTN_ADD = 2; + private static final int BTN_TOGGLE_VIEW = 10; + private static final int BTN_EDIT = 100; + private static final int BTN_PREVIEW_PLAY = 91; + private static final int BTN_PREVIEW_PAUSE = 92; + private static final int BTN_PREVIEW_STOP = 93; // ── TextField / Label IDs ───────────────────────────────────────────────── - private static final int TF_SEARCH = 55; + private static final int TF_SEARCH = 55; private static final int LBL_PREVIEW_STATUS = 90; // ── Scroll IDs ──────────────────────────────────────────────────────────── - private static final int SCROLL_MAIN = 0; + private static final int SCROLL_MAIN = 0; // ── Confirm dialog IDs ──────────────────────────────────────────────────── private static final int CONFIRM_REMOVE_ABILITY = 1; - private static final int CONFIRM_REMOVE_CHAIN = 2; + private static final int CONFIRM_REMOVE_CHAIN = 2; // ==================== DATA ==================== private GuiCustomScroll scroll; @@ -474,11 +474,20 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface @Override public void subGuiClosed(SubGuiInterface subgui) { - if (subgui instanceof SubGuiChainedAbilityConfig) { handleChainConfigClosed(); initGui(); return; } - if (subgui instanceof SubGuiAbilityVariantSelect) { if (handleVariantSelectClosed((SubGuiAbilityVariantSelect) subgui)) return; } - else if (subgui instanceof SubGuiAbilityTypeSelect) { if (handleTypeSelectClosed((SubGuiAbilityTypeSelect) subgui)) return; } - else if (subgui instanceof SubGuiDuplicateNameConfirm) { if (handleDuplicateNameClosed((SubGuiDuplicateNameConfirm) subgui)) return; } - else if (pendingSaveAbility != null) { if (handlePendingSave()) return; } + if (subgui instanceof SubGuiChainedAbilityConfig) { + handleChainConfigClosed(); + initGui(); + return; + } + if (subgui instanceof SubGuiAbilityVariantSelect) { + if (handleVariantSelectClosed((SubGuiAbilityVariantSelect) subgui)) return; + } else if (subgui instanceof SubGuiAbilityTypeSelect) { + if (handleTypeSelectClosed((SubGuiAbilityTypeSelect) subgui)) return; + } else if (subgui instanceof SubGuiDuplicateNameConfirm) { + if (handleDuplicateNameClosed((SubGuiDuplicateNameConfirm) subgui)) return; + } else if (pendingSaveAbility != null) { + if (handlePendingSave()) return; + } initGui(); } @@ -491,7 +500,9 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface } } - /** @return true if a SubGui was opened (caller should return early, skipping initGui) */ + /** + * @return true if a SubGui was opened (caller should return early, skipping initGui) + */ private boolean handleVariantSelectClosed(SubGuiAbilityVariantSelect gui) { int idx = gui.getSelectedIndex(); if (idx >= 0 && pendingTypeId != null) { @@ -514,7 +525,9 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface return false; } - /** @return true if a SubGui was opened (caller should return early, skipping initGui) */ + /** + * @return true if a SubGui was opened (caller should return early, skipping initGui) + */ private boolean handleTypeSelectClosed(SubGuiAbilityTypeSelect gui) { String typeId = gui.getSelectedTypeId(); if (typeId != null) { @@ -542,7 +555,9 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface return false; } - /** @return true if a SubGui was opened (caller should return early, skipping initGui) */ + /** + * @return true if a SubGui was opened (caller should return early, skipping initGui) + */ private boolean handleDuplicateNameClosed(SubGuiDuplicateNameConfirm gui) { if (gui.isConfirmed() && pendingSaveAbility != null) { if (pendingNewCreation) { @@ -569,7 +584,9 @@ public class GuiNpcManageAbilities extends GuiAbilityInterface return false; } - /** @return true if a SubGui was opened (caller should return early, skipping initGui) */ + /** + * @return true if a SubGui was opened (caller should return early, skipping initGui) + */ private boolean handlePendingSave() { if (hasDuplicateName(pendingSaveAbility)) { pendingNewCreation = false; 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 a9473f2e9..f07cb5ac6 100644 --- a/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java +++ b/src/main/java/noppes/npcs/client/gui/player/AuctionTooltipHandler.java @@ -12,20 +12,20 @@ import net.minecraft.util.StatCollector; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import noppes.npcs.client.AuctionClientConfig; import noppes.npcs.constants.EnumClaimType; -import noppes.npcs.util.AuctionFormatUtil; import noppes.npcs.containers.ContainerAuctionListing; import noppes.npcs.containers.ContainerAuctionSell; import noppes.npcs.containers.ContainerAuctionTrades; import noppes.npcs.containers.SlotAuctionDisplay; import noppes.npcs.controllers.data.AuctionClaim; import noppes.npcs.controllers.data.AuctionListing; +import noppes.npcs.util.AuctionFormatUtil; import java.util.List; /** * Handles adding auction information to item tooltips when viewing auction GUIs. * Called from ItemTooltipEvent in ClientEventHandler. - * + *

* Uses slot-based lookup (slot index) instead of ItemStack comparison to correctly * handle duplicate items with different auction data (e.g., two porkchops at different prices). */ 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 f74a354df..61634bb0a 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionBidding.java @@ -82,7 +82,9 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis return -1; } - /** Update button visibility based on listing state */ + /** + * Update button visibility based on listing state + */ private void updateButtonState() { if (listing == null) { if (btnBid != null) btnBid.setVisible(false); @@ -185,7 +187,9 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis drawAuctionInfo(); } - /** Draw auction listing information on the right side */ + /** + * Draw auction listing information on the right side + */ private void drawAuctionInfo() { int x = guiLeft + infoX; int y = guiTop + infoY; @@ -226,7 +230,7 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis label = AuctionFormatUtil.formatCurrency(listing.startingPrice); length = fontRendererObj.getStringWidth(label); - fontRendererObj.drawString(EnumChatFormatting.GOLD + label, xRight - length, y, 0xFFFFFF); + fontRendererObj.drawString(EnumChatFormatting.GOLD + label, xRight - length, y, 0xFFFFFF); y += lineHeight + 4; } @@ -237,7 +241,7 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis label = AuctionFormatUtil.formatCurrency(listing.buyoutPrice); length = fontRendererObj.getStringWidth(label); - fontRendererObj.drawString(EnumChatFormatting.GREEN + label, xRight - length, y, 0xFFFFFF); + fontRendererObj.drawString(EnumChatFormatting.GREEN + label, xRight - length, y, 0xFFFFFF); y += lineHeight + 4; } @@ -306,5 +310,7 @@ public class GuiAuctionBidding extends GuiAuctionInterface implements ISubGuiLis // Block all slot interactions - view only } - public AuctionListing getListing() { return listing; } + public AuctionListing getListing() { + return listing; + } } 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 e6e87383a..048260d4c 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionInterface.java @@ -69,7 +69,9 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { initNavigationButtons(); } - /** Initialize navigation buttons */ + /** + * Initialize navigation buttons + */ protected void initNavigationButtons() { int page = getCurrentPage(); @@ -89,7 +91,9 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { addButton(btnClaims); } - /** Returns current page constant - implement in subclass */ + /** + * Returns current page constant - implement in subclass + */ protected abstract int getCurrentPage(); @Override @@ -136,7 +140,9 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { } } - /** Draw navigation button tooltips */ + /** + * Draw navigation button tooltips + */ protected void drawNavButtonTooltips(int mouseX, int mouseY) { List tooltip = null; if (btnListings != null && btnListings.isHovered()) tooltip = btnListings.getTooltipLines(); @@ -154,14 +160,18 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { // ========== Slot Drawing Utilities ========== - /** Draw auction slot background (18x18) */ + /** + * Draw auction slot background (18x18) + */ protected void drawAuctionSlot(int x, int y) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.renderEngine.bindTexture(AUCTION_SLOT); Gui.func_146110_a(x, y, 0, 0, 18, 18, 18, 18); } - /** Draw colored overlay on slot (ARGB format) */ + /** + * Draw colored overlay on slot (ARGB format) + */ protected void drawColoredOverlay(int x, int y, int color) { GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -173,12 +183,16 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } - /** Draw dark overlay for unavailable slots */ + /** + * Draw dark overlay for unavailable slots + */ protected void drawDarkenedOverlay(int x, int y) { drawColoredOverlay(x, y, OVERLAY_DARK); } - /** Draw icon texture on slot (16x16) */ + /** + * Draw icon texture on slot (16x16) + */ protected void drawIconOverlay(int x, int y, ResourceLocation icon) { GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); @@ -192,7 +206,9 @@ public abstract class GuiAuctionInterface extends GuiContainerNPCInterface { GL11.glPopMatrix(); } - /** Subclasses implement this to draw specific content */ + /** + * Subclasses implement this to draw specific content + */ protected abstract void drawAuctionContent(float partialTicks, int mouseX, int mouseY); @Override diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionListing.java b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionListing.java index c08569598..85312f5ad 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionListing.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionListing.java @@ -98,12 +98,16 @@ public class GuiAuctionListing extends GuiAuctionInterface implements ISubGuiLis return PAGE_LISTINGS; } - /** Request listings from server */ + /** + * Request listings from server + */ private void requestListings() { AuctionActionPacket.requestListings(filter, currentPage); } - /** Update pagination button visibility based on current page state */ + /** + * Update pagination button visibility based on current page state + */ private void updatePaginationVisibility() { if (btnPageUp != null) { btnPageUp.setVisible(currentPage > 0); @@ -193,7 +197,8 @@ public class GuiAuctionListing extends GuiAuctionInterface implements ISubGuiLis } @Override - public void subGuiClosed(SubGuiInterface subgui) {} + public void subGuiClosed(SubGuiInterface subgui) { + } // ========== Data Handling ========== @@ -294,6 +299,11 @@ public class GuiAuctionListing extends GuiAuctionInterface implements ISubGuiLis // Block other slot interactions } - public AuctionFilter getFilter() { return filter; } - public ContainerAuctionListing getListingContainer() { return listingContainer; } + public AuctionFilter getFilter() { + return filter; + } + + public ContainerAuctionListing getListingContainer() { + return listingContainer; + } } 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 5b514cff6..af87ab39b 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionSell.java @@ -7,16 +7,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; +import noppes.npcs.client.AuctionClientConfig; import noppes.npcs.client.NoppesUtil; import noppes.npcs.client.gui.util.GuiAuctionNavButton; 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.AuctionClientConfig; import noppes.npcs.containers.ContainerAuctionSell; -import noppes.npcs.util.AuctionFormatUtil; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.util.AuctionFormatUtil; import org.lwjgl.opengl.GL11; import java.util.ArrayList; @@ -105,7 +105,9 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis return PAGE_SELL; } - /** Update visibility of buyout price field based on toggle state */ + /** + * Update visibility of buyout price field based on toggle state + */ private void updateBuyoutVisibility() { if (lblBuyout != null) { lblBuyout.enabled = allowBuyout; @@ -119,7 +121,9 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis } } - /** Update the buyout toggle button tooltip */ + /** + * Update the buyout toggle button tooltip + */ private void updateBuyoutTooltip() { if (btnAllowBuyout == null) return; @@ -252,7 +256,9 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis drawSellSlotIndicator(slotX, slotY); } - /** Draw indicator showing staged vs available items */ + /** + * Draw indicator showing staged vs available items + */ private void drawSellSlotIndicator(int slotX, int slotY) { ItemStack sellItem = sellContainer.getItemToSell(); if (sellItem != null) { @@ -310,7 +316,9 @@ public class GuiAuctionSell extends GuiAuctionInterface implements ITextfieldLis drawSellPageTooltips(mouseX, mouseY); } - /** Draw tooltips for sell page buttons */ + /** + * Draw tooltips for sell page buttons + */ private void drawSellPageTooltips(int mouseX, int mouseY) { List tooltip = null; diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionTrades.java b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionTrades.java index f52d5fa63..45a527dca 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiAuctionTrades.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiAuctionTrades.java @@ -50,7 +50,7 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { private int pendingSlot = -1; private PendingOp pendingOp = PendingOp.NONE; - private enum PendingOp { NONE, CANCEL, CLAIM } + private enum PendingOp {NONE, CANCEL, CLAIM} public GuiAuctionTrades(EntityNPCInterface npc, ContainerAuctionTrades container) { super(npc, container); @@ -117,7 +117,9 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { } } - /** Handle click on pending operation slot */ + /** + * Handle click on pending operation slot + */ private void handlePendingClick(int mouseButton) { if (pendingOp == PendingOp.CANCEL && mouseButton == 1) { // Right-click confirms cancel @@ -159,14 +161,18 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { } } - /** Set pending operation and hide slot item */ + /** + * Set pending operation and hide slot item + */ private void setPending(int slot, PendingOp op) { pendingSlot = slot; pendingOp = op; tradesContainer.setHiddenSlot(slot); } - /** Clear pending operation and restore slot */ + /** + * Clear pending operation and restore slot + */ private void clearPending() { if (pendingSlot >= 0) { tradesContainer.clearHiddenSlot(); @@ -175,13 +181,17 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { pendingOp = PendingOp.NONE; } - /** Play confirmation sound */ + /** + * Play confirmation sound + */ private void playConfirmSound() { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a( new ResourceLocation("random.orb"), 1.0F)); } - /** Get slot index at mouse position */ + /** + * Get slot index at mouse position + */ private int getSlotAt(int mouseX, int mouseY) { int relX = mouseX - guiLeft - GRID_X; int relY = mouseY - guiTop - GRID_Y; @@ -239,7 +249,9 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { } } - /** Get tint color for slot based on contents */ + /** + * Get tint color for slot based on contents + */ private int getSlotTint(int slot) { AuctionListing listing = tradesContainer.getListingAt(slot); AuctionClaim claim = tradesContainer.getClaimAt(slot); @@ -281,7 +293,9 @@ public class GuiAuctionTrades extends GuiAuctionInterface implements IGuiData { } } - /** Draw tooltip for a trade slot */ + /** + * Draw tooltip for a trade slot + */ private void drawTradeTooltip(int slot, int x, int y) { List tooltip = new ArrayList<>(); 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 7161722d5..e6f2ce61c 100644 --- a/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java +++ b/src/main/java/noppes/npcs/client/gui/select/GuiAnimationSelection.java @@ -5,7 +5,6 @@ import kamkeel.npcs.network.packets.request.animation.AnimationsGetPacket; import net.minecraft.client.gui.GuiButton; 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.GuiNpcTextField; import noppes.npcs.client.gui.util.ICustomScrollListener; import noppes.npcs.client.gui.util.IScrollData; diff --git a/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java b/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java index 6ed26666f..6d2534633 100644 --- a/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java +++ b/src/main/java/noppes/npcs/client/gui/util/AbilityPreviewExecutor.java @@ -19,10 +19,10 @@ import java.util.List; /** * Client-side executor for previewing abilities in the GUI. - * + *

* Uses unified execution: calls the REAL ability methods (onWindUpTick, onExecute, onActiveTick) * with previewMode=true. Abilities skip damage/effects/sounds when isPreview() returns true. - * + *

* Lifecycle: * 1. WINDUP phase - real onWindUpTick() called, telegraph shown, entities may spawn * 2. ACTIVE phase - real onExecute() then onActiveTick() called, physics simulated @@ -36,8 +36,11 @@ public class AbilityPreviewExecutor implements PreviewEntityHandler { private Ability previewAbility; private EntityNPCInterface previewNpc; - /** Executor's own phase tracking (separate from ability.getPhase()) */ - private enum ExecutorPhase { IDLE, WINDUP, ACTIVE, EXTENDED } + /** + * Executor's own phase tracking (separate from ability.getPhase()) + */ + private enum ExecutorPhase {IDLE, WINDUP, ACTIVE, EXTENDED} + private ExecutorPhase executorPhase = ExecutorPhase.IDLE; private int currentTick = 0; @@ -424,21 +427,48 @@ public class AbilityPreviewExecutor implements PreviewEntityHandler { // ==================== GETTERS ==================== - public boolean isPlaying() { return playing; } - public boolean isPaused() { return paused; } - public boolean isActive() { return playing || paused; } + public boolean isPlaying() { + return playing; + } + + public boolean isPaused() { + return paused; + } + + public boolean isActive() { + return playing || paused; + } + public AbilityPhase getPhase() { switch (executorPhase) { - case WINDUP: return AbilityPhase.WINDUP; - case ACTIVE: return AbilityPhase.ACTIVE; - default: return AbilityPhase.IDLE; + case WINDUP: + return AbilityPhase.WINDUP; + case ACTIVE: + return AbilityPhase.ACTIVE; + default: + return AbilityPhase.IDLE; } } - 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 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) { 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 74bc3abd0..4bf2ffd58 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiAbilityInterface.java @@ -21,7 +21,7 @@ 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) @@ -33,15 +33,23 @@ import java.util.List; public class GuiAbilityInterface extends GuiNPCInterface2 { // ==================== FIXED CAMERA SETTINGS ==================== - /** Fixed camera zoom level (higher = more zoomed in) */ + /** + * Fixed camera zoom level (higher = more zoomed in) + */ protected static float CAMERA_ZOOM = 45.0f; - /** NPC facing direction - affects anchor points and visual facing */ + /** + * NPC facing direction - affects anchor points and visual facing + */ protected static float NPC_FACING_YAW = 160.0f; - /** Camera pitch (slight downward angle) */ + /** + * Camera pitch (slight downward angle) + */ protected static float CAMERA_PITCH = 10.0f; // ==================== VIEWING ROTATION ==================== - /** Viewing direction rotation (rotates entire 3D space) */ + /** + * Viewing direction rotation (rotates entire 3D space) + */ protected static float viewRotation = 0.0f; private GuiNpcButton btnLeft, btnRight; @@ -49,21 +57,33 @@ public class GuiAbilityInterface extends GuiNPCInterface2 { // ==================== NPC STATE ==================== public EntityNPCInterface npc; - /** NPC starting position (saved when preview starts, used to track movement) */ + /** + * NPC starting position (saved when preview starts, used to track movement) + */ protected double npcStartX, npcStartY, npcStartZ; - /** Whether we're tracking NPC movement */ + /** + * Whether we're tracking NPC movement + */ protected boolean trackingNpcMovement = false; - /** Entities to render in preview space */ + /** + * Entities to render in preview space + */ protected List previewEntities = new ArrayList<>(); - /** Current telegraph to render in preview */ + /** + * Current telegraph to render in preview + */ protected TelegraphInstance previewTelegraph; // ==================== LAYOUT ==================== - /** Preview area bounds */ + /** + * Preview area bounds + */ protected int previewX, previewY, previewWidth, previewHeight; - /** NPC render position on screen */ + /** + * NPC render position on screen + */ protected int npcScreenX, npcScreenY; public int xOffset = 0; @@ -74,7 +94,7 @@ public class GuiAbilityInterface extends GuiNPCInterface2 { } /** - * @param npc The NPC for preview rendering + * @param npc The NPC for preview rendering * @param hasMenuNpc If false, the top menu tabs (Display, Stats, etc.) are hidden. * Use false when opened from the global menu without a real NPC. */ @@ -99,8 +119,8 @@ public class GuiAbilityInterface extends GuiNPCInterface2 { 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; + npcScreenX = previewX + (int) (previewWidth * 0.33f) + xOffset; + npcScreenY = previewY + (int) (previewHeight * 0.85f) + yOffset; // Viewing rotation buttons (below preview area) int btnY = guiTop + 192; @@ -351,7 +371,7 @@ public class GuiAbilityInterface extends GuiNPCInterface2 { super.drawBackground(); drawGradientRect(previewX, previewY, previewX + previewWidth, previewY + previewHeight, - 0xc0101010, 0xd0101010); + 0xc0101010, 0xd0101010); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiAuctionNavButton.java b/src/main/java/noppes/npcs/client/gui/util/GuiAuctionNavButton.java index 665dd2259..a71c9762f 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiAuctionNavButton.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiAuctionNavButton.java @@ -64,14 +64,14 @@ public class GuiAuctionNavButton extends GuiNpcButton { /** * Create a fully customizable button. * - * @param id Button ID - * @param x X position - * @param y Y position - * @param buttonSize Size of the button background texture (e.g., 18 for 18x18, 10 for 10x10) - * @param iconSize Size of the icon texture (e.g., 16 for 16x16, 8 for 8x8) - * @param tooltipKey Lang key for tooltip - * @param iconTexture Icon texture to draw inside the button - * @param textureNormal Background texture for normal state + * @param id Button ID + * @param x X position + * @param y Y position + * @param buttonSize Size of the button background texture (e.g., 18 for 18x18, 10 for 10x10) + * @param iconSize Size of the icon texture (e.g., 16 for 16x16, 8 for 8x8) + * @param tooltipKey Lang key for tooltip + * @param iconTexture Icon texture to draw inside the button + * @param textureNormal Background texture for normal state * @param texturePressed Background texture for pressed/hover state */ public GuiAuctionNavButton(int id, int x, int y, int buttonSize, int iconSize, String tooltipKey, diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiDirectory.java b/src/main/java/noppes/npcs/client/gui/util/GuiDirectory.java index 750c60668..957237610 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiDirectory.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiDirectory.java @@ -4,29 +4,29 @@ package noppes.npcs.client.gui.util; * Abstract base class for fullscreen directory-browsing GUIs. * Provides a configurable three-panel layout (left nav, center content, right actions) * with percentage-based sizing, panel backgrounds/borders, and an optional resizable divider. - * + *

* Subclasses override abstract hooks to populate each panel region. * Designed for reuse across Cloner, Quest Manager, Dialog Manager, etc. */ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScrollListener, ISubGuiListener { // ===== LAYOUT CONFIG (subclasses may override in constructor) ===== - protected float leftPanelPercent = 0.20f; + protected float leftPanelPercent = 0.20f; protected float rightPanelPercent = 0.10f; - protected int minLeftPanelW = 80; + protected int minLeftPanelW = 80; protected int minRightPanelW = 40; - protected int minCenterW = 100; + protected int minCenterW = 100; // ===== LAYOUT CONSTANTS ===== - protected int pad = 10; + protected int pad = 10; protected int topBarH = 24; - protected int gap = 4; - protected int btnH = 20; + protected int gap = 4; + protected int btnH = 20; // ===== PANEL COLORS ===== - protected int panelBg = 0xC0101010; + protected int panelBg = 0xC0101010; protected int panelBorder = 0xFF333333; - protected int topBarBg = 0xC0181818; + protected int topBarBg = 0xC0181818; // ===== COMPUTED LAYOUT (populated by computeLayout) ===== protected int originX, originY, usableW, usableH; @@ -35,10 +35,10 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr protected int rightX; // ===== OPTIONAL RESIZABLE DIVIDER (between left and center) ===== - protected boolean enableDivider = false; - protected int dividerWidth = 5; - protected int dividerLineHeight = 20; - protected int minDividerPanelW = 50; + protected boolean enableDivider = false; + protected int dividerWidth = 5; + protected int dividerLineHeight = 20; + protected int minDividerPanelW = 50; private int dividerOffset; private boolean isDragging = false; private int dragStartX; @@ -57,8 +57,8 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr usableW = width - 2 * pad; usableH = height - 2 * pad; - leftPanelW = Math.max(minLeftPanelW, (int)(usableW * leftPanelPercent)); - rightPanelW = Math.max(minRightPanelW, (int)(usableW * rightPanelPercent)); + leftPanelW = Math.max(minLeftPanelW, (int) (usableW * leftPanelPercent)); + rightPanelW = Math.max(minRightPanelW, (int) (usableW * rightPanelPercent)); if (rightPanelPercent <= 0) { rightPanelW = 0; @@ -73,7 +73,7 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr contentX = originX + leftPanelW + gap; contentY = originY + topBarH + gap; contentH = usableH - topBarH - gap; - rightX = contentX + contentW + gap; + rightX = contentX + contentW + gap; if (enableDivider && dividerOffset == 0) { dividerOffset = leftPanelW; @@ -128,7 +128,9 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr drawRect(divX + 1, handleTop, divX + dividerWidth - 1, handleTop + dividerLineHeight, 0xFF707070); } - /** Override for extra drawing after super.drawScreen (e.g. status text) */ + /** + * Override for extra drawing after super.drawScreen (e.g. status text) + */ protected void drawOverlay(int mouseX, int mouseY, float partialTicks) { } @@ -177,7 +179,9 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr super.mouseMovedOrUp(mouseX, mouseY, state); } - /** Called when divider is dragged. Override to update scroll sizes. */ + /** + * Called when divider is dragged. Override to update scroll sizes. + */ protected void onDividerMoved(int newOffset) { } @@ -192,15 +196,23 @@ public abstract class GuiDirectory extends GuiNPCInterface implements ICustomScr // ===== ABSTRACT HOOKS (subclass must implement) ===== - /** Populate top bar buttons. topBtnY is the y-coordinate for the button row. */ + /** + * Populate top bar buttons. topBtnY is the y-coordinate for the button row. + */ protected abstract void initTopBar(int topBtnY); - /** Populate the left navigation panel (scrolls, search fields, buttons). */ + /** + * Populate the left navigation panel (scrolls, search fields, buttons). + */ protected abstract void initLeftPanel(); - /** Populate the center content panel (main scroll list). */ + /** + * Populate the center content panel (main scroll list). + */ protected abstract void initCenterPanel(); - /** Populate the right action panel. startY is the first button y-coordinate. */ + /** + * Populate the right action panel. startY is the first button y-coordinate. + */ protected abstract void initRightPanel(int startY); } 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 df6651521..37ce2b789 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiModelInterface2.java @@ -34,7 +34,7 @@ public class GuiModelInterface2 extends GuiNPCInterface2 { } /** - * @param npc The NPC for preview rendering + * @param npc The NPC for preview rendering * @param hasMenuNpc If false, the top menu tabs (Display, Stats, etc.) are hidden. * Use false when opened from the global menu without a real NPC. */ diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNpcLabel.java b/src/main/java/noppes/npcs/client/gui/util/GuiNpcLabel.java index 60b4afdb6..4a1ac4b24 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNpcLabel.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNpcLabel.java @@ -60,12 +60,13 @@ public class GuiNpcLabel extends Gui { /** * Draws hover tooltip if the mouse is over this label. - * @param localMouseX Mouse X in scroll-local coordinates (for hit testing) - * @param localMouseY Mouse Y in scroll-local coordinates (for hit testing) + * + * @param localMouseX Mouse X in scroll-local coordinates (for hit testing) + * @param localMouseY Mouse Y in scroll-local coordinates (for hit testing) * @param screenMouseX Mouse X in screen coordinates (for tooltip positioning) * @param screenMouseY Mouse Y in screen coordinates (for tooltip positioning) - * @param hasSubGui Whether a sub-gui is open - * @param fr FontRenderer for measuring label width + * @param hasSubGui Whether a sub-gui is open + * @param fr FontRenderer for measuring label width */ public void drawHover(int localMouseX, int localMouseY, int screenMouseX, int screenMouseY, boolean hasSubGui, FontRenderer fr) { if (hasSubGui || hoverableText.isEmpty()) return; 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 a30b53fa8..e6e02d10e 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNpcTextField.java @@ -1,17 +1,17 @@ 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.GuiScreen; import net.minecraft.client.gui.GuiTextField; -import net.minecraft.util.StatCollector; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.util.StatCollector; 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; @@ -224,7 +224,7 @@ public class GuiNpcTextField extends GuiTextField { public boolean isMouseOver(int mouseX, int mouseY) { return mouseX >= xPosition && mouseX < xPosition + width && - mouseY >= yPosition && mouseY < yPosition + height; + mouseY >= yPosition && mouseY < yPosition + height; } public void drawHover(int mouseX, int mouseY, boolean hasSubGui) { @@ -334,14 +334,14 @@ public class GuiNpcTextField extends GuiTextField { } 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; + 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); @@ -350,11 +350,11 @@ public class GuiNpcTextField extends GuiTextField { 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.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.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); diff --git a/src/main/java/noppes/npcs/client/gui/util/IClonerGui.java b/src/main/java/noppes/npcs/client/gui/util/IClonerGui.java index db4989b56..60346560a 100644 --- a/src/main/java/noppes/npcs/client/gui/util/IClonerGui.java +++ b/src/main/java/noppes/npcs/client/gui/util/IClonerGui.java @@ -8,6 +8,8 @@ import java.util.UUID; public interface IClonerGui { int getShowingClones(); + HashMap getTags(); + TagMap getTagMap(); } diff --git a/src/main/java/noppes/npcs/config/ConfigMarket.java b/src/main/java/noppes/npcs/config/ConfigMarket.java index 2909ec2a6..976452d08 100644 --- a/src/main/java/noppes/npcs/config/ConfigMarket.java +++ b/src/main/java/noppes/npcs/config/ConfigMarket.java @@ -135,11 +135,11 @@ public class ConfigMarket { // ========================================= config.setCategoryComment(AUCTION_BLACKLIST, "Item Blacklist settings for the Auction House.\n" + - "Prevents specific items, mods, or items with certain NBT tags from being listed.\n\n" + - "ITEM FORMAT: Use 'modid:itemname' format (e.g., 'minecraft:bedrock', 'customnpcs:npcWand')\n" + - "WILDCARDS: Use * for wildcards (e.g., 'customnpcs:npc*' blocks all items starting with 'npc')\n" + - "MOD FORMAT: Use just the mod ID (e.g., 'projecte' blocks all items from that mod)\n" + - "NBT FORMAT: Use the NBT tag key name (e.g., 'AdminOnly' blocks items with that tag)"); + "Prevents specific items, mods, or items with certain NBT tags from being listed.\n\n" + + "ITEM FORMAT: Use 'modid:itemname' format (e.g., 'minecraft:bedrock', 'customnpcs:npcWand')\n" + + "WILDCARDS: Use * for wildcards (e.g., 'customnpcs:npc*' blocks all items starting with 'npc')\n" + + "MOD FORMAT: Use just the mod ID (e.g., 'projecte' blocks all items from that mod)\n" + + "NBT FORMAT: Use the NBT tag key name (e.g., 'AdminOnly' blocks items with that tag)"); BlacklistEnabled = config.get(AUCTION_BLACKLIST, "Enable Blacklist", true, "Enable item blacklist checking when creating listings").getBoolean(true); @@ -157,17 +157,17 @@ public class ConfigMarket { "customnpcs:npcSoulstoneFilled" }, "Items that cannot be listed on the Auction House.\n" + - "Format: modid:itemname (supports * wildcards)\n" + - "Example: 'minecraft:diamond_sword' or 'customnpcs:npc*'").getStringList(); + "Format: modid:itemname (supports * wildcards)\n" + + "Example: 'minecraft:diamond_sword' or 'customnpcs:npc*'").getStringList(); BlacklistedMods = config.get(AUCTION_BLACKLIST, "Blacklisted Mods", new String[]{}, "All items from these mods are blocked from the Auction House.\n" + - "Format: modid (e.g., 'projecte', 'thaumcraft')").getStringList(); + "Format: modid (e.g., 'projecte', 'thaumcraft')").getStringList(); BlacklistedNBTTags = config.get(AUCTION_BLACKLIST, "Blacklisted NBT Tags", new String[]{}, "Items containing any of these NBT tag keys are blocked.\n" + - "Checks the root level of the item's NBT compound.\n" + - "Example: 'AdminOnly', 'CreativeMode'").getStringList(); + "Checks the root level of the item's NBT compound.\n" + + "Example: 'AdminOnly', 'CreativeMode'").getStringList(); // ========================================= // Auction Logging Settings diff --git a/src/main/java/noppes/npcs/constants/EnumAuctionLogAction.java b/src/main/java/noppes/npcs/constants/EnumAuctionLogAction.java index 7e48589f4..6c6fdce44 100644 --- a/src/main/java/noppes/npcs/constants/EnumAuctionLogAction.java +++ b/src/main/java/noppes/npcs/constants/EnumAuctionLogAction.java @@ -16,19 +16,29 @@ public enum EnumAuctionLogAction { CLAIMED, CLAIM_EXPIRED; - /** Check if this action should be logged based on config settings */ + /** + * Check if this action should be logged based on config settings + */ public boolean shouldLog() { if (!ConfigMarket.AuctionLoggingEnabled) return false; switch (this) { - case CREATED: return ConfigMarket.LogAuctionCreated; - case BID: return ConfigMarket.LogAuctionBid; - case BUYOUT: return ConfigMarket.LogAuctionBuyout; - case SOLD: return ConfigMarket.LogAuctionSold; - case EXPIRED: return ConfigMarket.LogAuctionExpired; - case CANCELLED: return ConfigMarket.LogAuctionCancelled; + case CREATED: + return ConfigMarket.LogAuctionCreated; + case BID: + return ConfigMarket.LogAuctionBid; + case BUYOUT: + return ConfigMarket.LogAuctionBuyout; + case SOLD: + return ConfigMarket.LogAuctionSold; + case EXPIRED: + return ConfigMarket.LogAuctionExpired; + case CANCELLED: + return ConfigMarket.LogAuctionCancelled; case CLAIMED: - case CLAIM_EXPIRED: return ConfigMarket.LogAuctionClaimed; - default: return false; + case CLAIM_EXPIRED: + return ConfigMarket.LogAuctionClaimed; + default: + return false; } } } diff --git a/src/main/java/noppes/npcs/constants/EnumAuctionPage.java b/src/main/java/noppes/npcs/constants/EnumAuctionPage.java index c6c2c2a36..7f98cb2f0 100644 --- a/src/main/java/noppes/npcs/constants/EnumAuctionPage.java +++ b/src/main/java/noppes/npcs/constants/EnumAuctionPage.java @@ -1,7 +1,5 @@ package noppes.npcs.constants; -import noppes.npcs.constants.EnumGuiType; - /** * Enum for auction GUI page navigation. * Maps page indices to GUI types for packet-based navigation. diff --git a/src/main/java/noppes/npcs/containers/ContainerAuction.java b/src/main/java/noppes/npcs/containers/ContainerAuction.java index 2ccaa2e52..0741fdd9a 100644 --- a/src/main/java/noppes/npcs/containers/ContainerAuction.java +++ b/src/main/java/noppes/npcs/containers/ContainerAuction.java @@ -71,6 +71,7 @@ public class ContainerAuction extends ContainerNpcInterface { /** * Get the ItemStack in a player inventory slot. + * * @param containerSlotIndex The container slot index (0-35 for player inv) */ public ItemStack getPlayerInventoryStack(int containerSlotIndex) { diff --git a/src/main/java/noppes/npcs/containers/ContainerAuctionBidding.java b/src/main/java/noppes/npcs/containers/ContainerAuctionBidding.java index 0e46b6b9b..2b6f9a67f 100644 --- a/src/main/java/noppes/npcs/containers/ContainerAuctionBidding.java +++ b/src/main/java/noppes/npcs/containers/ContainerAuctionBidding.java @@ -28,9 +28,14 @@ public class ContainerAuctionBidding extends ContainerAuction { // Display slot (read-only) addSlotToContainer(new Slot(displayInventory, 0, ITEM_SLOT_X, ITEM_SLOT_Y) { @Override - public boolean isItemValid(ItemStack stack) { return false; } + public boolean isItemValid(ItemStack stack) { + return false; + } + @Override - public boolean canTakeStack(EntityPlayer player) { return false; } + public boolean canTakeStack(EntityPlayer player) { + return false; + } }); } diff --git a/src/main/java/noppes/npcs/containers/ContainerAuctionSell.java b/src/main/java/noppes/npcs/containers/ContainerAuctionSell.java index e5a01dd6f..f703a206d 100644 --- a/src/main/java/noppes/npcs/containers/ContainerAuctionSell.java +++ b/src/main/java/noppes/npcs/containers/ContainerAuctionSell.java @@ -27,9 +27,14 @@ public class ContainerAuctionSell extends ContainerAuction { // Sell slot blocks direct interaction addSlotToContainer(new Slot(sellInventory, 0, SELL_SLOT_X, SELL_SLOT_Y) { @Override - public boolean isItemValid(ItemStack stack) { return false; } + public boolean isItemValid(ItemStack stack) { + return false; + } + @Override - public boolean canTakeStack(EntityPlayer player) { return false; } + public boolean canTakeStack(EntityPlayer player) { + return false; + } }); } @@ -44,8 +49,9 @@ public class ContainerAuctionSell extends ContainerAuction { /** * Add items from inventory to sell slot. * Not limited by inventory - just stages items for sale. Validation on submit. + * * @param sourceSlot Inventory slot index - * @param fullStack True=full stack, False=1 item + * @param fullStack True=full stack, False=1 item */ public void addToSellSlot(int sourceSlot, boolean fullStack) { if (!isPlayerInventorySlot(sourceSlot)) return; @@ -78,6 +84,7 @@ public class ContainerAuctionSell extends ContainerAuction { /** * Remove items from sell slot. + * * @param removeAll True=clear slot, False=remove 1 item */ public void removeFromSellSlot(boolean removeAll) { @@ -91,12 +98,16 @@ public class ContainerAuctionSell extends ContainerAuction { } } - /** Check if sell slot is this container slot index */ + /** + * Check if sell slot is this container slot index + */ public boolean isSellSlot(int slotIndex) { return slotIndex == SELL_SLOT_INDEX; } - /** Check if two stacks match using NoppesUtilPlayer.compareItems (same item, damage, and NBT) */ + /** + * Check if two stacks match using NoppesUtilPlayer.compareItems (same item, damage, and NBT) + */ private boolean itemsMatch(ItemStack a, ItemStack b) { return NoppesUtilPlayer.compareItems(a, b, false, false); } diff --git a/src/main/java/noppes/npcs/containers/ContainerAuctionTrades.java b/src/main/java/noppes/npcs/containers/ContainerAuctionTrades.java index 43e91f428..187d50d13 100644 --- a/src/main/java/noppes/npcs/containers/ContainerAuctionTrades.java +++ b/src/main/java/noppes/npcs/containers/ContainerAuctionTrades.java @@ -5,8 +5,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import noppes.npcs.constants.EnumClaimType; -import noppes.npcs.controllers.AuctionController; import noppes.npcs.constants.EnumTradeSlotType; +import noppes.npcs.controllers.AuctionController; import noppes.npcs.controllers.data.AuctionClaim; import noppes.npcs.controllers.data.AuctionListing; import noppes.npcs.entity.EntityNPCInterface; @@ -55,7 +55,9 @@ public class ContainerAuctionTrades extends ContainerAuction { refreshData(); } - /** Refresh data from controller (server-side only) */ + /** + * Refresh data from controller (server-side only) + */ public void refreshData() { // Clear existing data clearData(); @@ -70,7 +72,9 @@ public class ContainerAuctionTrades extends ContainerAuction { populateDisplay(newListings, newBids, newClaims); } - /** Set data from NBT received from server (client-side) */ + /** + * Set data from NBT received from server (client-side) + */ public void setTradesData(NBTTagCompound compound) { // Clear existing data clearData(); @@ -111,7 +115,9 @@ public class ContainerAuctionTrades extends ContainerAuction { populateDisplay(newListings, newBids, newClaims); } - /** Clear all data and reset display */ + /** + * Clear all data and reset display + */ private void clearData() { activeListings.clear(); activeBids.clear(); @@ -125,7 +131,9 @@ public class ContainerAuctionTrades extends ContainerAuction { } } - /** Populate display from provided data lists */ + /** + * Populate display from provided data lists + */ private void populateDisplay(List newListings, List newBids, List allClaims) { activeListings = new ArrayList<>(newListings); activeBids = new ArrayList<>(newBids); @@ -218,7 +226,9 @@ public class ContainerAuctionTrades extends ContainerAuction { // ========== Slot Data Accessors ========== - /** Get listing at slot (or null if claim/empty) */ + /** + * Get listing at slot (or null if claim/empty) + */ public AuctionListing getListingAt(int slot) { if (slot < 0 || slot >= SLOT_COUNT) return null; EnumTradeSlotType type = slotTypes[slot]; @@ -233,7 +243,9 @@ public class ContainerAuctionTrades extends ContainerAuction { return null; } - /** Get claim at slot (or null if listing/empty) */ + /** + * Get claim at slot (or null if listing/empty) + */ public AuctionClaim getClaimAt(int slot) { if (slot < 0 || slot >= SLOT_COUNT) return null; if (slotTypes[slot] == EnumTradeSlotType.CLAIM) { @@ -245,17 +257,23 @@ public class ContainerAuctionTrades extends ContainerAuction { return null; } - /** Check if slot is player's active listing */ + /** + * Check if slot is player's active listing + */ public boolean isSellingAt(int slot) { return slot >= 0 && slot < SLOT_COUNT && slotTypes[slot] == EnumTradeSlotType.SELLING; } - /** Check if slot is player's active bid */ + /** + * Check if slot is player's active bid + */ public boolean isBiddingAt(int slot) { return slot >= 0 && slot < SLOT_COUNT && slotTypes[slot] == EnumTradeSlotType.BIDDING; } - /** Find listing matching item (searches both selling and bidding) */ + /** + * Find listing matching item (searches both selling and bidding) + */ public AuctionListing getListingForItem(ItemStack stack) { if (stack == null) return null; for (AuctionListing listing : activeListings) { @@ -267,7 +285,9 @@ public class ContainerAuctionTrades extends ContainerAuction { return null; } - /** Find listing in selling list */ + /** + * Find listing in selling list + */ public AuctionListing getSellingListingForItem(ItemStack stack) { if (stack == null) return null; for (AuctionListing listing : activeListings) { @@ -276,7 +296,9 @@ public class ContainerAuctionTrades extends ContainerAuction { return null; } - /** Find listing in bidding list */ + /** + * Find listing in bidding list + */ public AuctionListing getBiddingListingForItem(ItemStack stack) { if (stack == null) return null; for (AuctionListing bid : activeBids) { @@ -285,7 +307,9 @@ public class ContainerAuctionTrades extends ContainerAuction { return null; } - /** Find claim matching item */ + /** + * Find claim matching item + */ public AuctionClaim getClaimForItem(ItemStack stack) { if (stack == null) return null; for (AuctionClaim claim : claims) { @@ -296,14 +320,27 @@ public class ContainerAuctionTrades extends ContainerAuction { // ========== List Getters ========== - public List getActiveListings() { return activeListings; } - public List getActiveBids() { return activeBids; } - public List getClaims() { return claims; } - public int getTotalTradeCount() { return activeListings.size() + activeBids.size() + claims.size(); } + public List getActiveListings() { + return activeListings; + } + + public List getActiveBids() { + return activeBids; + } + + public List getClaims() { + return claims; + } + + public int getTotalTradeCount() { + return activeListings.size() + activeBids.size() + claims.size(); + } // ========== Slot Hiding (for pending operations) ========== - /** Hide slot for pending operation display */ + /** + * Hide slot for pending operation display + */ public void setHiddenSlot(int slot) { if (hiddenSlot >= 0 && hiddenSlot < SLOT_COUNT) { restoreSlotItem(hiddenSlot); @@ -314,7 +351,9 @@ public class ContainerAuctionTrades extends ContainerAuction { } } - /** Restore hidden slot */ + /** + * Restore hidden slot + */ public void clearHiddenSlot() { if (hiddenSlot >= 0 && hiddenSlot < SLOT_COUNT) { restoreSlotItem(hiddenSlot); @@ -322,7 +361,9 @@ public class ContainerAuctionTrades extends ContainerAuction { hiddenSlot = -1; } - /** Restore item at slot from data using slot tracking */ + /** + * Restore item at slot from data using slot tracking + */ private void restoreSlotItem(int slot) { if (slot < 0 || slot >= SLOT_COUNT) return; @@ -348,8 +389,14 @@ public class ContainerAuctionTrades extends ContainerAuction { } } - public int getHiddenSlot() { return hiddenSlot; } + public int getHiddenSlot() { + return hiddenSlot; + } - /** Get player's max trade slots (synced from server based on permissions) */ - public int getMaxTradeSlots() { return maxTradeSlots; } + /** + * Get player's max trade slots (synced from server based on permissions) + */ + public int getMaxTradeSlots() { + return maxTradeSlots; + } } diff --git a/src/main/java/noppes/npcs/controllers/AnimationController.java b/src/main/java/noppes/npcs/controllers/AnimationController.java index e7c29f324..bfbf978d2 100644 --- a/src/main/java/noppes/npcs/controllers/AnimationController.java +++ b/src/main/java/noppes/npcs/controllers/AnimationController.java @@ -22,14 +22,17 @@ 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.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.stream.Stream; import java.util.zip.GZIPInputStream; @@ -364,6 +367,7 @@ public class AnimationController implements IAnimationHandler { /** * Get a built-in animation by name. + * * @param name The animation name (case-insensitive) * @return The built-in animation, or null if not found */ @@ -395,6 +399,7 @@ public class AnimationController implements IAnimationHandler { /** * 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 */ diff --git a/src/main/java/noppes/npcs/controllers/AuctionConfigSync.java b/src/main/java/noppes/npcs/controllers/AuctionConfigSync.java index 2b921aad6..dae214f5c 100644 --- a/src/main/java/noppes/npcs/controllers/AuctionConfigSync.java +++ b/src/main/java/noppes/npcs/controllers/AuctionConfigSync.java @@ -7,7 +7,7 @@ import noppes.npcs.config.ConfigMarket; /** * Server-side utility for syncing auction configuration to clients. * Handles Vault integration for currency name resolution. - * + *

* This class is SERVER-SIDE ONLY. Client reads via AuctionClientConfig. */ public class AuctionConfigSync { @@ -15,7 +15,7 @@ public class AuctionConfigSync { /** * Write auction config to NBT for sending to client. * Called on server side when building login packet. - * + *

* Currency name is resolved from Vault if enabled and available, * otherwise falls back to ConfigMarket.CurrencyName. */ diff --git a/src/main/java/noppes/npcs/controllers/AuctionController.java b/src/main/java/noppes/npcs/controllers/AuctionController.java index 2d02cd9ce..7ea79baeb 100644 --- a/src/main/java/noppes/npcs/controllers/AuctionController.java +++ b/src/main/java/noppes/npcs/controllers/AuctionController.java @@ -6,7 +6,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import noppes.npcs.CustomNpcs; @@ -23,12 +22,12 @@ import noppes.npcs.constants.EnumAuctionSort; import noppes.npcs.constants.EnumAuctionStatus; import noppes.npcs.constants.EnumClaimType; import noppes.npcs.constants.EnumNotificationType; -import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.controllers.data.AuctionBlacklist; import noppes.npcs.controllers.data.AuctionClaim; import noppes.npcs.controllers.data.AuctionFilter; import noppes.npcs.controllers.data.AuctionListing; import noppes.npcs.controllers.data.PlayerData; +import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.controllers.data.PlayerTradeData; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.player.AuctionEvent; @@ -37,18 +36,23 @@ import noppes.npcs.util.CustomNPCsThreader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; /** * Main controller for the Auction system. - * + *

* Thread Safety: * - Uses ConcurrentHashMap for all data stores - no locking required * - Claims are stored in PlayerData, not here - reduces contention * - Saves are performed asynchronously on the CNPC+ thread - * + *

* Performance: * - Auction processing runs every 30 seconds (600 ticks) * - Save interval is every 30 seconds (600 ticks) @@ -65,29 +69,41 @@ public class AuctionController implements IAuctionHandler { // Player Indices for O(1) Lookups // ========================================= - /** Listings by seller UUID - for quick "my listings" lookups */ + /** + * Listings by seller UUID - for quick "my listings" lookups + */ private final Map> playerListingIds = new ConcurrentHashMap<>(); - /** Listings where player is current high bidder */ + /** + * Listings where player is current high bidder + */ private final Map> playerBidIds = new ConcurrentHashMap<>(); - /** Cached max trade slots per player - computed on login, cleared on logout */ + /** + * Cached max trade slots per player - computed on login, cleared on logout + */ private final Map playerMaxTradesCache = new ConcurrentHashMap<>(); // ========================================= // Threading & State // ========================================= - /** Flag indicating data needs to be saved */ + /** + * Flag indicating data needs to be saved + */ private final AtomicBoolean dirty = new AtomicBoolean(false); - /** Flag to prevent concurrent saves */ + /** + * Flag to prevent concurrent saves + */ private final AtomicBoolean saving = new AtomicBoolean(false); private String filePath = ""; private int tickCounter = 0; - /** Process auctions and save every 30 seconds (600 ticks) */ + /** + * Process auctions and save every 30 seconds (600 ticks) + */ private static final int TICK_INTERVAL = 600; public AuctionController() { @@ -375,7 +391,7 @@ public class AuctionController implements IAuctionHandler { logAuction(EnumAuctionLogAction.CANCELLED, listing.sellerName, listing.item.getDisplayName(), listing.currentBid, "Penalty: " + penalty + ", Bidder refunded: " + listing.highBidderName + - (isAdmin ? ", Cancelled by admin: " + player.getCommandSenderName() : "")); + (isAdmin ? ", Cancelled by admin: " + player.getCommandSenderName() : "")); } else { // No bids - just return item AuctionClaim itemClaim = AuctionClaim.createItemReturnedClaim( @@ -1126,12 +1142,16 @@ public class AuctionController implements IAuctionHandler { // Save / Load - Async on CNPC+ Thread // ========================================= - /** Mark data as dirty - will be saved on next save cycle */ + /** + * Mark data as dirty - will be saved on next save cycle + */ private void markDirty() { dirty.set(true); } - /** Save synchronously - used for server shutdown */ + /** + * Save synchronously - used for server shutdown + */ public void save() { if (!dirty.compareAndSet(true, false)) { return; // Nothing to save @@ -1139,7 +1159,9 @@ public class AuctionController implements IAuctionHandler { saveInternal(); } - /** Save asynchronously on CNPC+ thread */ + /** + * Save asynchronously on CNPC+ thread + */ public void saveAsync() { if (!dirty.compareAndSet(true, false)) { return; // Nothing to save @@ -1167,7 +1189,9 @@ public class AuctionController implements IAuctionHandler { }); } - /** Internal synchronous save */ + /** + * Internal synchronous save + */ private void saveInternal() { try { NBTTagCompound compound = writeToNBT(new NBTTagCompound()); @@ -1236,7 +1260,9 @@ public class AuctionController implements IAuctionHandler { } } - /** Rebuild all indices from loaded data */ + /** + * Rebuild all indices from loaded data + */ private void rebuildIndices() { playerListingIds.clear(); playerBidIds.clear(); @@ -1460,8 +1486,8 @@ public class AuctionController implements IAuctionHandler { // Remove ended/cancelled listings (claims are in PlayerData now) listings.entrySet().removeIf(entry -> entry.getValue().status == EnumAuctionStatus.CLAIMED || - entry.getValue().status == EnumAuctionStatus.ENDED || - entry.getValue().status == EnumAuctionStatus.CANCELLED); + entry.getValue().status == EnumAuctionStatus.ENDED || + entry.getValue().status == EnumAuctionStatus.CANCELLED); // Rebuild indices rebuildIndices(); diff --git a/src/main/java/noppes/npcs/controllers/ScriptConfigSync.java b/src/main/java/noppes/npcs/controllers/ScriptConfigSync.java index 5a9d32ed3..9e322ea10 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptConfigSync.java +++ b/src/main/java/noppes/npcs/controllers/ScriptConfigSync.java @@ -5,7 +5,7 @@ import noppes.npcs.config.ConfigScript; /** * Server-side utility for syncing script configuration to clients. - * + *

* This class is SERVER-SIDE ONLY. Client reads via ScriptClientConfig. */ public class ScriptConfigSync { diff --git a/src/main/java/noppes/npcs/controllers/ScriptHookController.java b/src/main/java/noppes/npcs/controllers/ScriptHookController.java index 3b79637d8..dd8c18550 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptHookController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptHookController.java @@ -3,12 +3,11 @@ package noppes.npcs.controllers; import noppes.npcs.api.event.IAbilityEvent; import noppes.npcs.api.event.IAnimationEvent; import noppes.npcs.api.event.IAuctionEvent; -import noppes.npcs.api.event.IEnergyBarrierEvent; -import noppes.npcs.api.event.IPlayerAbilityEvent; import noppes.npcs.api.event.IBlockEvent; import noppes.npcs.api.event.ICustomGuiEvent; import noppes.npcs.api.event.ICustomNPCsEvent; import noppes.npcs.api.event.IDialogEvent; +import noppes.npcs.api.event.IEnergyBarrierEvent; import noppes.npcs.api.event.IEnergyProjectileEvent; import noppes.npcs.api.event.IFactionEvent; import noppes.npcs.api.event.IForgeEvent; @@ -16,6 +15,7 @@ import noppes.npcs.api.event.IItemEvent; import noppes.npcs.api.event.ILinkedItemEvent; import noppes.npcs.api.event.INpcEvent; import noppes.npcs.api.event.IPartyEvent; +import noppes.npcs.api.event.IPlayerAbilityEvent; import noppes.npcs.api.event.IPlayerEvent; import noppes.npcs.api.event.IProjectileEvent; import noppes.npcs.api.event.IQuestEvent; diff --git a/src/main/java/noppes/npcs/controllers/data/AuctionBlacklist.java b/src/main/java/noppes/npcs/controllers/data/AuctionBlacklist.java index 5a950816c..1f4d331a4 100644 --- a/src/main/java/noppes/npcs/controllers/data/AuctionBlacklist.java +++ b/src/main/java/noppes/npcs/controllers/data/AuctionBlacklist.java @@ -10,10 +10,10 @@ import noppes.npcs.config.ConfigMarket; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.regex.Pattern; -import java.util.Iterator; public class AuctionBlacklist { private static volatile Set blacklistedItems = new HashSet<>(); diff --git a/src/main/java/noppes/npcs/controllers/data/AuctionClaim.java b/src/main/java/noppes/npcs/controllers/data/AuctionClaim.java index c76aece11..604ff1023 100644 --- a/src/main/java/noppes/npcs/controllers/data/AuctionClaim.java +++ b/src/main/java/noppes/npcs/controllers/data/AuctionClaim.java @@ -33,7 +33,9 @@ public class AuctionClaim implements IAuctionClaim { this.otherPlayerName = ""; } - /** Create claim for winning an item (buyer won auction or buyout) */ + /** + * Create claim for winning an item (buyer won auction or buyout) + */ public static AuctionClaim createItemWonClaim(UUID playerUUID, String playerName, String listingId, ItemStack item) { AuctionClaim claim = new AuctionClaim(); claim.playerUUID = playerUUID; @@ -46,7 +48,9 @@ public class AuctionClaim implements IAuctionClaim { return claim; } - /** Create claim for returned item (seller's expired/cancelled listing) */ + /** + * Create claim for returned item (seller's expired/cancelled listing) + */ public static AuctionClaim createItemReturnedClaim(UUID playerUUID, String playerName, String listingId, ItemStack item) { AuctionClaim claim = new AuctionClaim(); claim.playerUUID = playerUUID; @@ -59,7 +63,9 @@ public class AuctionClaim implements IAuctionClaim { return claim; } - /** Create claim for seller's proceeds (stores item name for tooltip, not full item) */ + /** + * Create claim for seller's proceeds (stores item name for tooltip, not full item) + */ public static AuctionClaim createCurrencyClaim(UUID playerUUID, String playerName, String listingId, long currency, String itemName, String buyerName) { AuctionClaim claim = new AuctionClaim(); claim.playerUUID = playerUUID; @@ -74,7 +80,9 @@ public class AuctionClaim implements IAuctionClaim { return claim; } - /** Create claim for outbid refund (stores item for display and rebid option) */ + /** + * Create claim for outbid refund (stores item for display and rebid option) + */ public static AuctionClaim createRefundClaim(UUID playerUUID, String playerName, String listingId, long currency, String itemName, String outbidderName, ItemStack item) { AuctionClaim claim = new AuctionClaim(); claim.playerUUID = playerUUID; diff --git a/src/main/java/noppes/npcs/controllers/data/AuctionFilter.java b/src/main/java/noppes/npcs/controllers/data/AuctionFilter.java index 5018ec2e0..e6841fcea 100644 --- a/src/main/java/noppes/npcs/controllers/data/AuctionFilter.java +++ b/src/main/java/noppes/npcs/controllers/data/AuctionFilter.java @@ -25,14 +25,18 @@ public class AuctionFilter { return searchText != null && !searchText.trim().isEmpty(); } - /** Normalize string for search (strip colors, lowercase, trim) */ + /** + * Normalize string for search (strip colors, lowercase, trim) + */ public static String normalizeForSearch(String input) { if (input == null || input.isEmpty()) return ""; String stripped = EnumChatFormatting.getTextWithoutFormattingCodes(input); return stripped != null ? stripped.toLowerCase().trim() : input.toLowerCase().trim(); } - /** Check if item name or seller name matches search text */ + /** + * Check if item name or seller name matches search text + */ public boolean matchesSearch(String itemName, String sellerName) { if (!hasSearchText()) return true; String normalizedItem = normalizeForSearch(itemName); @@ -41,12 +45,16 @@ public class AuctionFilter { return normalizedItem.contains(normalizedSearch) || normalizedSeller.contains(normalizedSearch); } - /** Legacy method - only checks item name */ + /** + * Legacy method - only checks item name + */ public boolean matchesSearch(String itemName) { return matchesSearch(itemName, ""); } - /** Advanced search - all words must be present in item name OR seller name */ + /** + * Advanced search - all words must be present in item name OR seller name + */ public boolean matchesSearchAdvanced(String itemName, String sellerName) { if (!hasSearchText()) return true; String normalizedItem = normalizeForSearch(itemName); @@ -63,7 +71,9 @@ public class AuctionFilter { return true; } - /** Legacy method - only checks item name */ + /** + * Legacy method - only checks item name + */ public boolean matchesSearchAdvanced(String itemName) { return matchesSearchAdvanced(itemName, ""); } @@ -101,13 +111,20 @@ public class AuctionFilter { } // Getters and setters - public String getSearchText() { return searchText; } + public String getSearchText() { + return searchText; + } public void setSearchText(String searchText) { this.searchText = searchText; this.normalizedSearch = normalizeForSearch(searchText); } - public EnumAuctionSort getSortBy() { return sortBy; } - public void setSortBy(EnumAuctionSort sortBy) { this.sortBy = sortBy; } + public EnumAuctionSort getSortBy() { + return sortBy; + } + + public void setSortBy(EnumAuctionSort sortBy) { + this.sortBy = sortBy; + } } diff --git a/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java b/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java index a30923eac..50ef13c0e 100644 --- a/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java +++ b/src/main/java/noppes/npcs/controllers/data/BuiltInAnimation.java @@ -23,6 +23,7 @@ public class BuiltInAnimation extends Animation { /** * Built-in animations cannot be saved. + * * @return this animation unchanged */ @Override @@ -33,6 +34,7 @@ public class BuiltInAnimation extends Animation { /** * Built-in animations have no valid ID. + * * @return always -1 */ @Override @@ -50,6 +52,7 @@ public class BuiltInAnimation extends Animation { /** * Check if this is a built-in animation. + * * @return always true for BuiltInAnimation */ public boolean isBuiltIn() { diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java index d3add842c..a11483bc0 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java @@ -1,12 +1,14 @@ package noppes.npcs.controllers.data; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityPhase; import kamkeel.npcs.controllers.data.ability.ChainedAbility; import kamkeel.npcs.controllers.data.ability.IAbilityAction; import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; +import kamkeel.npcs.network.packets.data.ability.PlayerAbilityStatePacket; +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 net.minecraft.entity.EntityLivingBase; @@ -17,17 +19,14 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.util.DamageSource; import noppes.npcs.AbstractDataAbilities; -import noppes.npcs.LogWriter; import noppes.npcs.EventHooks; +import noppes.npcs.LogWriter; import noppes.npcs.api.ability.IPlayerAbilityData; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.player.PlayerAbilityEvent; -import kamkeel.npcs.network.packets.data.ability.PlayerAbilityStatePacket; -import kamkeel.npcs.network.packets.data.ability.PlayerAbilitySyncPacket; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -152,7 +151,7 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA @Override protected void fireInterruptEvent(Ability ability, EntityLivingBase target, - DamageSource source, float damage) { + DamageSource source, float damage) { EntityPlayer player = playerData.player; if (ScriptController.Instance == null || player == null) return; PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); @@ -310,7 +309,9 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA return activateAbility(player, key); } - /** Prefix used to identify chained ability keys in the unlocked list. */ + /** + * Prefix used to identify chained ability keys in the unlocked list. + */ public static final String CHAIN_PREFIX = "chain:"; /** diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index 7f326a344..9052811cf 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -18,13 +18,13 @@ 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; import noppes.npcs.api.handler.IPlayerData; import noppes.npcs.api.handler.IPlayerDialogData; import noppes.npcs.api.handler.IPlayerFactionData; import noppes.npcs.api.handler.IPlayerItemGiverData; import noppes.npcs.api.handler.IPlayerMailData; import noppes.npcs.api.handler.IPlayerQuestData; +import noppes.npcs.api.handler.IPlayerTradeData; import noppes.npcs.api.handler.IPlayerTransportData; import noppes.npcs.config.ConfigMain; import noppes.npcs.constants.EnumRoleType; @@ -47,8 +47,6 @@ import java.io.FileOutputStream; import java.util.HashSet; import java.util.UUID; -import static noppes.npcs.util.CustomNPCsThreader.customNPCThread; - public class PlayerData implements IExtendedEntityProperties, IPlayerData { public PlayerDialogData dialogData = new PlayerDialogData(this); public PlayerBankData bankData = new PlayerBankData(this); diff --git a/src/main/java/noppes/npcs/controllers/data/action/Action.java b/src/main/java/noppes/npcs/controllers/data/action/Action.java index cb2af9454..cfa80afc6 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -345,10 +345,10 @@ public class Action implements IAction { try { onStart.accept(this); } catch (Throwable t) { - String err = "IAction" + getName() + " onStart threw an exception:"; + String err = "IAction" + getName() + " onStart threw an exception:"; if (reportTo != null) reportTo.appendConsole(err + "\n" + ExceptionUtils.getStackTrace(t)); - + manager.LOGGER.error("onStart Task of " + this + " threw an exception:", t); } @@ -384,7 +384,7 @@ public class Action implements IAction { try { onDone.accept(this); } catch (Throwable t) { - String err = "IAction" + getName() + " onDone threw an exception:"; + String err = "IAction" + getName() + " onDone threw an exception:"; if (reportTo != null) reportTo.appendConsole(err + "\n" + ExceptionUtils.getStackTrace(t)); diff --git a/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java b/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java index 427749e33..035003cfe 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java +++ b/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java @@ -134,7 +134,7 @@ public class ConditionalAction extends Action implements IConditionalAction { String err = "IConditionalAction '" + getName() + "' threw an exception:"; if (reportTo != null) reportTo.appendConsole(err + "\n" + ExceptionUtils.getStackTrace(t)); - + manager.LOGGER.error("Task of " + this + " threw an exception:", t); markDone(); } @@ -151,7 +151,7 @@ public class ConditionalAction extends Action implements IConditionalAction { try { onTermination.accept(this); } catch (Throwable t) { - String err = "IConditionalAction" + getName() + " onTermination threw an exception:"; + String err = "IConditionalAction" + getName() + " onTermination threw an exception:"; if (reportTo != null) reportTo.appendConsole(err + "\n" + ExceptionUtils.getStackTrace(t)); diff --git a/src/main/java/noppes/npcs/items/ItemStaff.java b/src/main/java/noppes/npcs/items/ItemStaff.java index 2a54c49a3..5891df2e1 100644 --- a/src/main/java/noppes/npcs/items/ItemStaff.java +++ b/src/main/java/noppes/npcs/items/ItemStaff.java @@ -1,7 +1,13 @@ package noppes.npcs.items; import kamkeel.npcs.controllers.data.ability.AnchorPoint; -import kamkeel.npcs.controllers.data.ability.data.*; +import kamkeel.npcs.controllers.data.ability.data.EnergyAnchorData; +import kamkeel.npcs.controllers.data.ability.data.EnergyCombatData; +import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; +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.EnergyTrajectoryData; import kamkeel.npcs.entity.EntityAbilityOrb; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -22,7 +28,7 @@ import noppes.npcs.entity.EntityProjectile; import noppes.npcs.util.IProjectileCallback; import org.lwjgl.opengl.GL11; -import java.awt.*; +import java.awt.Color; public class ItemStaff extends ItemNpcInterface implements IProjectileCallback { @@ -33,7 +39,8 @@ public class ItemStaff extends ItemNpcInterface implements IProjectileCallback { public ItemStaff(int par1, EnumNpcToolMaterial material) { super(par1); this.material = material; - this.color = OrbColor.get(material.ordinal());; + this.color = OrbColor.get(material.ordinal()); + ; setCreativeTab(CustomItems.tabWeapon); } diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index d1d041c8e..aebc9321d 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -3,10 +3,10 @@ package noppes.npcs.scripted; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventBus; import foxz.command.ScriptedCommand; +import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.AttributeController; import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.TelegraphController; -import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.entity.EntityAbilityBeam; import kamkeel.npcs.entity.EntityAbilityDisc; import kamkeel.npcs.entity.EntityAbilityLaser; @@ -58,9 +58,9 @@ import noppes.npcs.api.IContainer; import noppes.npcs.api.IDamageSource; import noppes.npcs.api.INbt; import noppes.npcs.api.IParticle; -import noppes.npcs.api.ITelegraph; import noppes.npcs.api.IPos; import noppes.npcs.api.ISkinOverlay; +import noppes.npcs.api.ITelegraph; import noppes.npcs.api.ITileEntity; import noppes.npcs.api.IWorld; import noppes.npcs.api.entity.ICustomNpc; @@ -70,8 +70,8 @@ import noppes.npcs.api.gui.ICustomGui; import noppes.npcs.api.handler.IAbilityHandler; import noppes.npcs.api.handler.IActionManager; import noppes.npcs.api.handler.IAnimationHandler; -import noppes.npcs.api.handler.IAuctionHandler; import noppes.npcs.api.handler.IAttributeHandler; +import noppes.npcs.api.handler.IAuctionHandler; import noppes.npcs.api.handler.ICloneHandler; import noppes.npcs.api.handler.ICustomEffectHandler; import noppes.npcs.api.handler.IDialogHandler; diff --git a/src/main/java/noppes/npcs/scripted/ScriptWorld.java b/src/main/java/noppes/npcs/scripted/ScriptWorld.java index b827315d2..5bbe3909a 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptWorld.java +++ b/src/main/java/noppes/npcs/scripted/ScriptWorld.java @@ -1,5 +1,9 @@ package noppes.npcs.scripted; +import kamkeel.npcs.entity.EntityAbilityBeam; +import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityLaser; +import kamkeel.npcs.entity.EntityAbilityOrb; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; import net.minecraft.entity.Entity; @@ -21,10 +25,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.world.BlockEvent; -import kamkeel.npcs.entity.EntityAbilityBeam; -import kamkeel.npcs.entity.EntityAbilityDisc; -import kamkeel.npcs.entity.EntityAbilityLaser; -import kamkeel.npcs.entity.EntityAbilityOrb; import noppes.npcs.CustomNpcs; import noppes.npcs.NoppesUtilServer; import noppes.npcs.api.IBlock; diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyAbility.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyAbility.java index b84c2bf4b..86bae44b3 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyAbility.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyAbility.java @@ -29,40 +29,95 @@ public abstract class ScriptEnergyAbility extends // ==================== DISPLAY ==================== - public int getInnerColor() { return entity.getInnerColor(); } - public void setInnerColor(int color) { entity.setInnerColor(color); } + public int getInnerColor() { + return entity.getInnerColor(); + } - public float getInnerAlpha() { return entity.getInnerAlpha(); } - public void setInnerAlpha(float alpha) { entity.setInnerAlpha(alpha); } + public void setInnerColor(int color) { + entity.setInnerColor(color); + } - public int getOuterColor() { return entity.getOuterColor(); } - public void setOuterColor(int color) { entity.setOuterColor(color); } + public float getInnerAlpha() { + return entity.getInnerAlpha(); + } - public boolean isOuterColorEnabled() { return entity.isOuterColorEnabled(); } - public void setOuterColorEnabled(boolean enabled) { entity.setOuterColorEnabled(enabled); } + public void setInnerAlpha(float alpha) { + entity.setInnerAlpha(alpha); + } - public float getOuterColorWidth() { return entity.getOuterColorWidth(); } - public void setOuterColorWidth(float width) { entity.setOuterColorWidth(width); } + public int getOuterColor() { + return entity.getOuterColor(); + } - public float getOuterColorAlpha() { return entity.getOuterColorAlpha(); } - public void setOuterColorAlpha(float alpha) { entity.setOuterColorAlpha(alpha); } + public void setOuterColor(int color) { + entity.setOuterColor(color); + } + + public boolean isOuterColorEnabled() { + return entity.isOuterColorEnabled(); + } + + public void setOuterColorEnabled(boolean enabled) { + entity.setOuterColorEnabled(enabled); + } + + public float getOuterColorWidth() { + return entity.getOuterColorWidth(); + } + + public void setOuterColorWidth(float width) { + entity.setOuterColorWidth(width); + } + + public float getOuterColorAlpha() { + return entity.getOuterColorAlpha(); + } + + public void setOuterColorAlpha(float alpha) { + entity.setOuterColorAlpha(alpha); + } // ==================== LIGHTNING ==================== - public boolean hasLightningEffect() { return entity.hasLightningEffect(); } - public void setLightningEffect(boolean enabled) { entity.setLightningEffect(enabled); } + public boolean hasLightningEffect() { + return entity.hasLightningEffect(); + } - public float getLightningDensity() { return entity.getLightningDensity(); } - public void setLightningDensity(float density) { entity.setLightningDensity(density); } + public void setLightningEffect(boolean enabled) { + entity.setLightningEffect(enabled); + } - public float getLightningRadius() { return entity.getLightningRadius(); } - public void setLightningRadius(float radius) { entity.setLightningRadius(radius); } + public float getLightningDensity() { + return entity.getLightningDensity(); + } - public int getLightningFadeTime() { return entity.getLightningFadeTime(); } - public void setLightningFadeTime(int ticks) { entity.setLightningFadeTime(ticks); } + public void setLightningDensity(float density) { + entity.setLightningDensity(density); + } + + public float getLightningRadius() { + return entity.getLightningRadius(); + } + + public void setLightningRadius(float radius) { + entity.setLightningRadius(radius); + } + + public int getLightningFadeTime() { + return entity.getLightningFadeTime(); + } + + public void setLightningFadeTime(int ticks) { + entity.setLightningFadeTime(ticks); + } // ==================== STATE ==================== - public boolean isCharging() { return entity.isCharging(); } - public float getChargeProgress() { return entity.getChargeProgress(); } + public boolean isCharging() { + return entity.isCharging(); + } + + public float getChargeProgress() { + return entity.getChargeProgress(); + } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java index 9455b28cd..29f330ff7 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java @@ -81,17 +81,37 @@ public class ScriptEnergyBarrier extends ScriptEn // ==================== BARRIER ==================== - public float getDefaultMultiplier() { return entity.getBarrierData().defaultMultiplier; } - public void setDefaultMultiplier(float multiplier) { entity.getBarrierData().defaultMultiplier = multiplier; } + public float getDefaultMultiplier() { + return entity.getBarrierData().defaultMultiplier; + } - public boolean isKnockbackEnabled() { return entity.getBarrierData().knockbackEnabled; } - public void setKnockbackEnabled(boolean enabled) { entity.getBarrierData().knockbackEnabled = enabled; } + public void setDefaultMultiplier(float multiplier) { + entity.getBarrierData().defaultMultiplier = multiplier; + } - public float getKnockbackStrength() { return entity.getBarrierData().knockbackStrength; } - public void setKnockbackStrength(float strength) { entity.getBarrierData().knockbackStrength = strength; } + public boolean isKnockbackEnabled() { + return entity.getBarrierData().knockbackEnabled; + } - public int getKnockbackTarget() { return entity.getBarrierData().knockbackTarget; } - public void setKnockbackTarget(int target) { entity.getBarrierData().knockbackTarget = target; } + public void setKnockbackEnabled(boolean enabled) { + entity.getBarrierData().knockbackEnabled = enabled; + } + + public float getKnockbackStrength() { + return entity.getBarrierData().knockbackStrength; + } + + public void setKnockbackStrength(float strength) { + entity.getBarrierData().knockbackStrength = strength; + } + + public int getKnockbackTarget() { + return entity.getBarrierData().knockbackTarget; + } + + public void setKnockbackTarget(int target) { + entity.getBarrierData().knockbackTarget = target; + } public int getBarrierType() { return entity instanceof EntityEnergyDome ? 0 : 1; diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBeam.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBeam.java index b42a32b1d..9c5a8b8be 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBeam.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBeam.java @@ -29,16 +29,33 @@ public class ScriptEnergyBeam extends ScriptEnergyP // ==================== BEAM-SPECIFIC ==================== - public float getBeamWidth() { return entity.getBeamWidth(); } - public void setBeamWidth(float width) { entity.setBeamWidth(width); } + public float getBeamWidth() { + return entity.getBeamWidth(); + } - public float getHeadSize() { return entity.getHeadSize(); } - public void setHeadSize(float size) { entity.setHeadSize(size); } + public void setBeamWidth(float width) { + entity.setBeamWidth(width); + } - public boolean isAttachedToOwner() { return entity.isAttachedToOwner(); } - public void setAttachedToOwner(boolean attached) { entity.setAttachedToOwner(attached); } + public float getHeadSize() { + return entity.getHeadSize(); + } - public boolean shouldRenderTailOrb() { return entity.shouldRenderTailOrb(); } + public void setHeadSize(float size) { + entity.setHeadSize(size); + } + + public boolean isAttachedToOwner() { + return entity.isAttachedToOwner(); + } + + public void setAttachedToOwner(boolean attached) { + entity.setAttachedToOwner(attached); + } + + public boolean shouldRenderTailOrb() { + return entity.shouldRenderTailOrb(); + } // ==================== FIRE ==================== diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDisc.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDisc.java index 62dde7979..c02fdad31 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDisc.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDisc.java @@ -29,22 +29,49 @@ public class ScriptEnergyDisc extends ScriptEnergyP // ==================== DISC-SPECIFIC ==================== - public float getDiscRadius() { return entity.getDiscRadius(); } - public void setDiscRadius(float radius) { entity.setDiscRadius(radius); } + public float getDiscRadius() { + return entity.getDiscRadius(); + } - public float getDiscThickness() { return entity.getDiscThickness(); } - public void setDiscThickness(float thickness) { entity.setDiscThickness(thickness); } + public void setDiscRadius(float radius) { + entity.setDiscRadius(radius); + } - public boolean isVertical() { return entity.isVertical(); } - public void setVertical(boolean vertical) { entity.setVertical(vertical); } + public float getDiscThickness() { + return entity.getDiscThickness(); + } - public boolean isBoomerang() { return entity.isBoomerang(); } - public void setBoomerang(boolean boomerang) { entity.setBoomerang(boomerang); } + public void setDiscThickness(float thickness) { + entity.setDiscThickness(thickness); + } - public int getBoomerangDelay() { return entity.getBoomerangDelay(); } - public void setBoomerangDelay(int ticks) { entity.setBoomerangDelay(ticks); } + public boolean isVertical() { + return entity.isVertical(); + } - public boolean isReturning() { return entity.isReturning(); } + public void setVertical(boolean vertical) { + entity.setVertical(vertical); + } + + public boolean isBoomerang() { + return entity.isBoomerang(); + } + + public void setBoomerang(boolean boomerang) { + entity.setBoomerang(boomerang); + } + + public int getBoomerangDelay() { + return entity.getBoomerangDelay(); + } + + public void setBoomerangDelay(int ticks) { + entity.setBoomerangDelay(ticks); + } + + public boolean isReturning() { + return entity.isReturning(); + } // ==================== FIRE ==================== diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java index 8d331c170..e022118f7 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java @@ -27,6 +27,11 @@ public class ScriptEnergyDome extends ScriptEnergyBa // ==================== DOME-SPECIFIC ==================== - public float getDomeRadius() { return entity.getDomeRadius(); } - public void setDomeRadius(float radius) { entity.setDomeRadius(radius); } + public float getDomeRadius() { + return entity.getDomeRadius(); + } + + public void setDomeRadius(float radius) { + entity.setDomeRadius(radius); + } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyLaser.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyLaser.java index 976fd948d..3963794fc 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyLaser.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyLaser.java @@ -29,31 +29,77 @@ public class ScriptEnergyLaser extends ScriptEnerg // ==================== LASER-SPECIFIC ==================== - public float getLaserWidth() { return entity.getLaserWidth(); } - public void setLaserWidth(float width) { entity.setLaserWidth(width); } + public float getLaserWidth() { + return entity.getLaserWidth(); + } - public float getExpansionSpeed() { return entity.getExpansionSpeed(); } - public void setExpansionSpeed(float speed) { entity.setExpansionSpeed(speed); } + public void setLaserWidth(float width) { + entity.setLaserWidth(width); + } - public int getLingerTicks() { return entity.getLingerTicks(); } - public void setLingerTicks(int ticks) { entity.setLingerTicks(ticks); } + public float getExpansionSpeed() { + return entity.getExpansionSpeed(); + } - public float getCurrentLength() { return entity.getCurrentLength(); } - public boolean isFullyExtended() { return entity.isFullyExtended(); } + public void setExpansionSpeed(float speed) { + entity.setExpansionSpeed(speed); + } - public double getDirX() { return entity.getDirX(); } - public double getDirY() { return entity.getDirY(); } - public double getDirZ() { return entity.getDirZ(); } - public void setDirection(double x, double y, double z) { entity.setDirection(x, y, z); } + public int getLingerTicks() { + return entity.getLingerTicks(); + } - public double getEndX() { return entity.getEndX(); } - public double getEndY() { return entity.getEndY(); } - public double getEndZ() { return entity.getEndZ(); } + public void setLingerTicks(int ticks) { + entity.setLingerTicks(ticks); + } - public float getLingerAlpha() { return entity.getLingerAlpha(); } + public float getCurrentLength() { + return entity.getCurrentLength(); + } - public boolean isLockVerticalDirection() { return entity.isLockVerticalDirection(); } - public void setLockVerticalDirection(boolean lock) { entity.setLockVerticalDirection(lock); } + public boolean isFullyExtended() { + return entity.isFullyExtended(); + } + + public double getDirX() { + return entity.getDirX(); + } + + public double getDirY() { + return entity.getDirY(); + } + + public double getDirZ() { + return entity.getDirZ(); + } + + public void setDirection(double x, double y, double z) { + entity.setDirection(x, y, z); + } + + public double getEndX() { + return entity.getEndX(); + } + + public double getEndY() { + return entity.getEndY(); + } + + public double getEndZ() { + return entity.getEndZ(); + } + + public float getLingerAlpha() { + return entity.getLingerAlpha(); + } + + public boolean isLockVerticalDirection() { + return entity.isLockVerticalDirection(); + } + + public void setLockVerticalDirection(boolean lock) { + entity.setLockVerticalDirection(lock); + } // ==================== FIRE ==================== diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java index 5da93dc4a..04c730fad 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java @@ -27,15 +27,31 @@ public class ScriptEnergyPanel extends ScriptEnergy // ==================== PANEL-SPECIFIC ==================== - public float getPanelWidth() { return entity.getPanelData().panelWidth; } - public void setPanelWidth(float width) { entity.getPanelData().setPanelWidth(width); } + public float getPanelWidth() { + return entity.getPanelData().panelWidth; + } - public float getPanelHeight() { return entity.getPanelData().panelHeight; } - public void setPanelHeight(float height) { entity.getPanelData().setPanelHeight(height); } + public void setPanelWidth(float width) { + entity.getPanelData().setPanelWidth(width); + } - public float getPanelYaw() { return entity.getPanelYaw(); } + public float getPanelHeight() { + return entity.getPanelData().panelHeight; + } - public int getPanelMode() { return entity.getMode().ordinal(); } + public void setPanelHeight(float height) { + entity.getPanelData().setPanelHeight(height); + } - public boolean isLaunched() { return entity.getMode() == EntityEnergyPanel.PanelMode.LAUNCHED; } + public float getPanelYaw() { + return entity.getPanelYaw(); + } + + public int getPanelMode() { + return entity.getMode().ordinal(); + } + + public boolean isLaunched() { + return entity.getMode() == EntityEnergyPanel.PanelMode.LAUNCHED; + } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyProjectile.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyProjectile.java index 9da13936f..38a95db0c 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyProjectile.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyProjectile.java @@ -3,10 +3,10 @@ package noppes.npcs.scripted.entity; import kamkeel.npcs.entity.EntityEnergyProjectile; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import noppes.npcs.EventHooks; import noppes.npcs.api.entity.IEnergyProjectile; import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IEntityLivingBase; -import noppes.npcs.EventHooks; import noppes.npcs.scripted.constants.EntityType; public class ScriptEnergyProjectile extends ScriptEnergyAbility implements IEnergyProjectile { @@ -67,74 +67,171 @@ public class ScriptEnergyProjectile extends Sc // ==================== DISPLAY (PROJECTILE-SPECIFIC) ==================== - public float getRotationSpeed() { return entity.getRotationSpeed(); } - public void setRotationSpeed(float speed) { entity.setRotationSpeed(speed); } + public float getRotationSpeed() { + return entity.getRotationSpeed(); + } + + public void setRotationSpeed(float speed) { + entity.setRotationSpeed(speed); + } // ==================== INTERPOLATION ==================== - public float getInterpolatedRotationX(float partialTicks) { return entity.getInterpolatedRotationX(partialTicks); } - public float getInterpolatedRotationY(float partialTicks) { return entity.getInterpolatedRotationY(partialTicks); } - public float getInterpolatedRotationZ(float partialTicks) { return entity.getInterpolatedRotationZ(partialTicks); } - public float getInterpolatedSize(float partialTicks) { return entity.getInterpolatedSize(partialTicks); } + public float getInterpolatedRotationX(float partialTicks) { + return entity.getInterpolatedRotationX(partialTicks); + } + + public float getInterpolatedRotationY(float partialTicks) { + return entity.getInterpolatedRotationY(partialTicks); + } + + public float getInterpolatedRotationZ(float partialTicks) { + return entity.getInterpolatedRotationZ(partialTicks); + } + + public float getInterpolatedSize(float partialTicks) { + return entity.getInterpolatedSize(partialTicks); + } // ==================== LIFESPAN ==================== - public float getMaxDistance() { return entity.getMaxDistance(); } - public void setMaxDistance(float distance) { entity.setMaxDistance(distance); } + public float getMaxDistance() { + return entity.getMaxDistance(); + } - public int getMaxLifetime() { return entity.getMaxLifetime(); } - public void setMaxLifetime(int ticks) { entity.setMaxLifetime(ticks); } + public void setMaxDistance(float distance) { + entity.setMaxDistance(distance); + } + + public int getMaxLifetime() { + return entity.getMaxLifetime(); + } + + public void setMaxLifetime(int ticks) { + entity.setMaxLifetime(ticks); + } // ==================== COMBAT ==================== - public float getDamage() { return entity.getDamage(); } - public void setDamage(float damage) { entity.setCombatDamage(damage); } + public float getDamage() { + return entity.getDamage(); + } - public float getKnockback() { return entity.getKnockback(); } - public void setKnockback(float knockback) { entity.setCombatKnockback(knockback); } + public void setDamage(float damage) { + entity.setCombatDamage(damage); + } - public float getKnockbackUp() { return entity.getKnockbackUp(); } - public void setKnockbackUp(float knockbackUp) { entity.setCombatKnockbackUp(knockbackUp); } + public float getKnockback() { + return entity.getKnockback(); + } - public boolean isExplosive() { return entity.isExplosive(); } - public void setExplosive(boolean explosive) { entity.setExplosive(explosive); } + public void setKnockback(float knockback) { + entity.setCombatKnockback(knockback); + } - public float getExplosionRadius() { return entity.getExplosionRadius(); } - public void setExplosionRadius(float radius) { entity.setExplosionRadius(radius); } + public float getKnockbackUp() { + return entity.getKnockbackUp(); + } - public float getExplosionDamageFalloff() { return entity.getExplosionDamageFalloff(); } - public void setExplosionDamageFalloff(float falloff) { entity.setExplosionDamageFalloff(falloff); } + public void setKnockbackUp(float knockbackUp) { + entity.setCombatKnockbackUp(knockbackUp); + } + + public boolean isExplosive() { + return entity.isExplosive(); + } + + public void setExplosive(boolean explosive) { + entity.setExplosive(explosive); + } + + public float getExplosionRadius() { + return entity.getExplosionRadius(); + } + + public void setExplosionRadius(float radius) { + entity.setExplosionRadius(radius); + } + + public float getExplosionDamageFalloff() { + return entity.getExplosionDamageFalloff(); + } + + public void setExplosionDamageFalloff(float falloff) { + entity.setExplosionDamageFalloff(falloff); + } // ==================== MOVEMENT ==================== - public float getSpeed() { return entity.getSpeed(); } - public void setSpeed(float speed) { entity.setSpeed(speed); } + public float getSpeed() { + return entity.getSpeed(); + } - public boolean isHoming() { return entity.isHoming(); } - public void setHoming(boolean homing) { entity.setHomingEnabled(homing); } + public void setSpeed(float speed) { + entity.setSpeed(speed); + } - public float getHomingStrength() { return entity.getHomingStrength(); } - public void setHomingStrength(float strength) { entity.setHomingStrength(strength); } + public boolean isHoming() { + return entity.isHoming(); + } - public float getHomingRange() { return entity.getHomingRange(); } - public void setHomingRange(float range) { entity.setHomingRange(range); } + public void setHoming(boolean homing) { + entity.setHomingEnabled(homing); + } + + public float getHomingStrength() { + return entity.getHomingStrength(); + } + + public void setHomingStrength(float strength) { + entity.setHomingStrength(strength); + } + + public float getHomingRange() { + return entity.getHomingRange(); + } + + public void setHomingRange(float range) { + entity.setHomingRange(range); + } // ==================== ANCHOR ==================== - public int getAnchor() { return entity.getAnchor(); } - public float getAnchorOffsetX() { return entity.getAnchorOffsetX(); } - public float getAnchorOffsetY() { return entity.getAnchorOffsetY(); } - public float getAnchorOffsetZ() { return entity.getAnchorOffsetZ(); } + public int getAnchor() { + return entity.getAnchor(); + } + + public float getAnchorOffsetX() { + return entity.getAnchorOffsetX(); + } + + public float getAnchorOffsetY() { + return entity.getAnchorOffsetY(); + } + + public float getAnchorOffsetZ() { + return entity.getAnchorOffsetZ(); + } // ==================== POSITION ==================== - public double getStartX() { return entity.getStartX(); } - public double getStartY() { return entity.getStartY(); } - public double getStartZ() { return entity.getStartZ(); } + public double getStartX() { + return entity.getStartX(); + } + + public double getStartY() { + return entity.getStartY(); + } + + public double getStartZ() { + return entity.getStartZ(); + } // ==================== STATE ==================== - public boolean hasHit() { return entity.getHasHit(); } + public boolean hasHit() { + return entity.getHasHit(); + } // ==================== FIRE ==================== diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergySlicer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergySlicer.java index 270266123..f0105cdd9 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergySlicer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergySlicer.java @@ -29,14 +29,29 @@ public class ScriptEnergySlicer extends ScriptEner // ==================== SLICER-SPECIFIC ==================== - public float getSliceWidth() { return entity.getSliceWidth(); } - public void setSliceWidth(float width) { entity.setSliceWidth(width); } + public float getSliceWidth() { + return entity.getSliceWidth(); + } - public float getSliceThickness() { return entity.getSliceThickness(); } - public void setSliceThickness(float thickness) { entity.setSliceThickness(thickness); } + public void setSliceWidth(float width) { + entity.setSliceWidth(width); + } - public boolean isPiercing() { return entity.isPiercing(); } - public void setPiercing(boolean piercing) { entity.setPiercing(piercing); } + public float getSliceThickness() { + return entity.getSliceThickness(); + } + + public void setSliceThickness(float thickness) { + entity.setSliceThickness(thickness); + } + + public boolean isPiercing() { + return entity.isPiercing(); + } + + public void setPiercing(boolean piercing) { + entity.setPiercing(piercing); + } // ==================== FIRE ==================== diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java index 78134a3fc..25734b7e4 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java @@ -1,5 +1,6 @@ package noppes.npcs.scripted.entity; +import kamkeel.npcs.entity.EntityEnergyProjectile; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import noppes.npcs.NoppesUtilServer; @@ -29,7 +30,6 @@ import noppes.npcs.constants.EnumMovingType; import noppes.npcs.constants.EnumNavType; import noppes.npcs.constants.EnumRoleType; import noppes.npcs.constants.EnumStandingType; -import kamkeel.npcs.entity.EntityEnergyProjectile; import noppes.npcs.controllers.FactionController; import noppes.npcs.controllers.data.DialogOption; import noppes.npcs.controllers.data.Line; diff --git a/src/main/java/noppes/npcs/scripted/event/player/AuctionEvent.java b/src/main/java/noppes/npcs/scripted/event/player/AuctionEvent.java index 8cebf5a6c..fc3a121e1 100644 --- a/src/main/java/noppes/npcs/scripted/event/player/AuctionEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/player/AuctionEvent.java @@ -38,13 +38,19 @@ public class AuctionEvent extends PlayerEvent implements IAuctionEvent { } @Override - public IItemStack getItem() { return item; } + public IItemStack getItem() { + return item; + } @Override - public long getStartingPrice() { return startingPrice; } + public long getStartingPrice() { + return startingPrice; + } @Override - public long getBuyoutPrice() { return buyoutPrice; } + public long getBuyoutPrice() { + return buyoutPrice; + } } @Cancelable @@ -64,10 +70,14 @@ public class AuctionEvent extends PlayerEvent implements IAuctionEvent { } @Override - public IAuctionListing getListing() { return listing; } + public IAuctionListing getListing() { + return listing; + } @Override - public long getBidAmount() { return bidAmount; } + public long getBidAmount() { + return bidAmount; + } } @Cancelable @@ -85,7 +95,9 @@ public class AuctionEvent extends PlayerEvent implements IAuctionEvent { } @Override - public IAuctionListing getListing() { return listing; } + public IAuctionListing getListing() { + return listing; + } } @Cancelable @@ -105,10 +117,14 @@ public class AuctionEvent extends PlayerEvent implements IAuctionEvent { } @Override - public IAuctionListing getListing() { return listing; } + public IAuctionListing getListing() { + return listing; + } @Override - public boolean isAdmin() { return admin; } + public boolean isAdmin() { + return admin; + } } @Cancelable @@ -126,6 +142,8 @@ public class AuctionEvent extends PlayerEvent implements IAuctionEvent { } @Override - public IAuctionClaim getClaim() { return claim; } + public IAuctionClaim getClaim() { + return claim; + } } } diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java index f6b9379c1..8e0bda906 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDataAbilities.java @@ -1,7 +1,7 @@ package noppes.npcs.scripted.wrapper; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.data.ability.AbilityAction; import net.minecraft.entity.EntityLivingBase; import noppes.npcs.DataAbilities; diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java index 8d3d068d5..c66a12a48 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptPlayerAbilityData.java @@ -1,7 +1,7 @@ package noppes.npcs.scripted.wrapper; -import kamkeel.npcs.controllers.data.ability.Ability; import kamkeel.npcs.controllers.AbilityController; +import kamkeel.npcs.controllers.data.ability.Ability; import net.minecraft.entity.player.EntityPlayer; import noppes.npcs.api.ability.IAbility; import noppes.npcs.api.ability.IPlayerAbilityData; diff --git a/src/main/java/somehussar/gui/AnnotatedGui.java b/src/main/java/somehussar/gui/AnnotatedGui.java index 8cdf224d5..7a1244f89 100644 --- a/src/main/java/somehussar/gui/AnnotatedGui.java +++ b/src/main/java/somehussar/gui/AnnotatedGui.java @@ -33,7 +33,7 @@ public class AnnotatedGui extends SubGuiInterface { int i = 0; for (EditableField field : metadata.getParent().getDeclaredFields()) { - addLabel(new GuiNpcLabel(i++, field.getName(), guiLeft+8, guiTop+i*15+5)); + 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 index 5f49a9d84..fba3c5a4d 100644 --- a/src/main/java/somehussar/gui/ImmediateTextField.java +++ b/src/main/java/somehussar/gui/ImmediateTextField.java @@ -5,7 +5,7 @@ import net.minecraft.client.gui.FontRenderer; import noppes.npcs.client.gui.util.GuiNpcTextField; import somehussar.gui.annotationHandling.field.EditableField; -public class ImmediateTextField extends GuiNpcTextField{ +public class ImmediateTextField extends GuiNpcTextField { private final EditableField editableField; // // private final GuiNpcTextField encapsulatedField; @@ -13,6 +13,7 @@ public class ImmediateTextField extends GuiNpcTextField{ 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); diff --git a/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java b/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java index 596f3ab2f..95a74658e 100644 --- a/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java +++ b/src/main/java/somehussar/gui/annotationHandling/GuiEditable.java @@ -27,6 +27,7 @@ public @interface GuiEditable { @Retention(RetentionPolicy.RUNTIME) @interface Size { int labelWidth() default 60; + int fieldWidth() default 50; GuiEditable.Size DEFAULT_SIZE = new GuiEditable.Size() { @@ -39,7 +40,11 @@ public @interface GuiEditable { public int fieldWidth() { return 50; } - @Override public Class annotationType() { return GuiEditable.Size.class; } + + @Override + public Class annotationType() { + return GuiEditable.Size.class; + } }; } diff --git a/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java b/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java index c6b7f3625..b54e70e52 100644 --- a/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java +++ b/src/main/java/somehussar/gui/annotationHandling/GuiFieldHandler.java @@ -26,7 +26,8 @@ public final class GuiFieldHandler { } - private GuiFieldHandler() {} + private GuiFieldHandler() { + } public static ClassMetadata getMetadata(Class type) { return CACHE.computeIfAbsent(type, GuiFieldHandler::scanClass); @@ -69,7 +70,8 @@ public final class GuiFieldHandler { if (Modifier.isFinal(field.getModifiers())) return null; GuiEditable.Size size = field.getAnnotation(GuiEditable.Size.class); - if (size == null) size = GuiEditable.Size.DEFAULT_SIZE;; + if (size == null) size = GuiEditable.Size.DEFAULT_SIZE; + ; field.setAccessible(true); EditableField.Builder builder = new EditableField.Builder() diff --git a/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java index 3b9268a30..faccc6418 100644 --- a/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java +++ b/src/main/java/somehussar/gui/annotationHandling/constraints/NumericConstraint.java @@ -9,5 +9,6 @@ import java.lang.annotation.Target; @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/annotationHandling/field/EditableField.java b/src/main/java/somehussar/gui/annotationHandling/field/EditableField.java index 73172ef42..97e8500f1 100644 --- a/src/main/java/somehussar/gui/annotationHandling/field/EditableField.java +++ b/src/main/java/somehussar/gui/annotationHandling/field/EditableField.java @@ -46,7 +46,9 @@ public final class EditableField { return this.constraints; } - public int getOrder() { return this.order; } + public int getOrder() { + return this.order; + } EditableField(Builder b) { this.name = b.name; @@ -69,14 +71,45 @@ public final class EditableField { 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; } - 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 Builder size(GuiEditable.Size size) { this.size = size; return this; } + 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 Builder size(GuiEditable.Size size) { + this.size = size; + return this; + } public EditableField build() { return new EditableField<>(this);