From 0e3ecb3d6e353f9f04024bf55e5e3f570a241f74 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 3 Feb 2026 18:00:52 -0300 Subject: [PATCH 1/2] Added EnergyTrajectoryData (WIP) --- src/api | 2 +- .../ability/data/EnergyTrajectoryData.java | 117 +++++++++++++++--- .../npcs/entity/EntityAbilityProjectile.java | 15 ++- 3 files changed, 113 insertions(+), 21 deletions(-) diff --git a/src/api b/src/api index 96b8d8a43..78be0a51e 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 96b8d8a43cd7441f988f486dcc791c5f06771d8b +Subproject commit 78be0a51ebe72c7d1a8dd85e03d9d9f8067ed39b 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 77d8cda00..ff7e2cc3e 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 @@ -1,46 +1,131 @@ package kamkeel.npcs.controllers.data.ability.data; import net.minecraft.util.Vec3; +import noppes.npcs.api.IPos; import noppes.npcs.api.ability.data.IEnergyTrajectoryData; +import noppes.npcs.scripted.NpcAPI; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class EnergyTrajectoryData implements IEnergyTrajectoryData { - public float speed = 0.5f; public int currentPath = 0; - private List trajectory = new ArrayList<>(); + private final List trajectory = new ArrayList<>(); - public int getDelay(int path) { - if (path < 0 || path >= trajectory.size()) return -1; - return trajectory.get(path).delayTicks; + public EnergyTrajectoryData() {} + + public EnergyTrajectoryData(int startingPath, Path... paths) { + trajectory.addAll(Arrays.asList(paths)); + this.currentPath = startingPath < trajectory.size() && startingPath >= 0 ? startingPath : 0; } - public Vec3 getVec(int path) { - if (path < 0 || path >= trajectory.size()) return null; - return trajectory.get(path).coords; + public int getCurrentPath() { + return currentPath; + } + + public void setCurrentPath(int currentPath) { + this.currentPath = currentPath; + } + + public int getDelay(int path) { + if (getPath(path) == null) return -1; + return getPath(path).delayTicks; + } + + public void setDelay(int path, int ticks) { + if (getPath(path) == null) return; + getPath(path).delayTicks = ticks; + } + + public IPos getPos(int path) { + if (getPath(path) == null) return null; + return getPath(path).coords; + } + + public void setPos(int path, IPos coords) { + if (getPath(path) == null) return; + getPath(path).coords = coords; } public double getX(int path) { - if (getVec(path) == null) return 0; - return getVec(path).xCoord; + if (getPos(path) == null) return 0; + return getPos(path).getX(); + } + + public void setX(int path, double x) { + if (getPos(path) == null) return; + setPos(path, NpcAPI.Instance().getIPos(x, getY(path), getZ(path))); } public double getY(int path) { - if (getVec(path) == null) return 0; - return getVec(path).yCoord; + if (getPos(path) == null) return 0; + return getPos(path).getY(); + } + + public void setY(int path, double y) { + if (getPos(path) == null) return; + setPos(path, NpcAPI.Instance().getIPos(getX(path), y, getZ(path))); } public double getZ(int path) { - if (getVec(path) == null) return 0; - return getVec(path).zCoord; + if (getPos(path) == null) return 0; + return getPos(path).getZ(); + } + + public void setZ(int path, double z) { + if (getPos(path) == null) return; + setPos(path, NpcAPI.Instance().getIPos(getX(path), getY(path), z)); + } + + public Path getPath(int path) { + if (path < 0 || path >= trajectory.size()) return null; + return trajectory.get(path); + } + + public void setPath(int path, IPos pos) { + setPath(path, pos, 0); + } + + public void setPath(int path, IPos pos, int delay) { + setPath(path, pos.getX(), pos.getY(), pos.getZ(), delay); + } + + public void setPath(int path, double x, double y, double z) { + setPath(path, x, y, z, 0); + } + + public void setPath(int path, double x, double y, double z, int delay) { + Path newPath = createPath(x, y, z, delay); + + if (trajectory.isEmpty()) { + trajectory.add(newPath); + } else { + trajectory.set(path, newPath); + } + } + + public Path createPath(IPos coords) { + return new Path(coords, 0); + } + + public Path createPath(IPos coords, int delay) { + return new Path(coords, delay); + } + + public Path createPath(double x, double y, double z) { + return createPath(x, y, z, 0); + } + + public Path createPath(double x, double y, double z, int delay) { + return new Path(NpcAPI.Instance().getIPos(x, y, z), delay); } public static class Path { - public Vec3 coords; + public IPos coords; public int delayTicks; - public Path(Vec3 coords, int delayTicks) { + public Path(IPos coords, int delayTicks) { this.coords = coords; this.delayTicks = delayTicks; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java index 0e66cfc56..d3405275f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityProjectile.java @@ -61,6 +61,9 @@ public abstract class EntityAbilityProjectile extends Entity implements IEnergyP // ==================== HOMING PROPERTIES ==================== protected EnergyHomingData homingData = new EnergyHomingData(); + // ==================== TRAJECTORY PROPERTIES ==================== + protected EnergyTrajectoryData trajectoryData = new EnergyTrajectoryData(); + // ==================== TRACKING ==================== protected double startX, startY, startZ; protected int ownerEntityId = -1; @@ -576,10 +579,7 @@ public abstract class EntityAbilityProjectile extends Entity implements IEnergyP @Override public float getExplosionDamageFalloff() { return combatData.explosionDamageFalloff; } - // ==================== VISUAL GETTERS ==================== - - @Override - public float getSpeed() { return homingData.getSpeed(); } + // ==================== HOMING GETTERS ==================== @Override public boolean isHoming() { return homingData.isHoming(); } @@ -590,8 +590,15 @@ public abstract class EntityAbilityProjectile extends Entity implements IEnergyP @Override public float getHomingRange() { return homingData.getHomingRange(); } + // ==================== TRAJECTORY GETTERS ==================== + + + // ==================== ANCHOR GETTERS ==================== + @Override + public float getSpeed() { return homingData.getSpeed(); } + public AnchorPoint getAnchorPoint() { return anchorData.getAnchorPoint(); } @Override From 4eb6072a25ec06ad23c4b6a87630e1715ce0079e Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 3 Feb 2026 18:08:07 -0300 Subject: [PATCH 2/2] Added API class to EnergyTrajectoryData --- src/api | 2 +- .../ability/data/EnergyTrajectoryData.java | 33 +++++++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/api b/src/api index 78be0a51e..0a7aee1f8 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 78be0a51ebe72c7d1a8dd85e03d9d9f8067ed39b +Subproject commit 0a7aee1f8b3a03a6ac4ed0a66b7e83ceddcae1ea 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 ff7e2cc3e..5abf737b6 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 @@ -1,6 +1,5 @@ package kamkeel.npcs.controllers.data.ability.data; -import net.minecraft.util.Vec3; import noppes.npcs.api.IPos; import noppes.npcs.api.ability.data.IEnergyTrajectoryData; import noppes.npcs.scripted.NpcAPI; @@ -20,59 +19,71 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { this.currentPath = startingPath < trajectory.size() && startingPath >= 0 ? startingPath : 0; } + @Override public int getCurrentPath() { return currentPath; } + @Override public void setCurrentPath(int currentPath) { this.currentPath = currentPath; } + @Override public int getDelay(int path) { if (getPath(path) == null) return -1; return getPath(path).delayTicks; } + @Override public void setDelay(int path, int ticks) { if (getPath(path) == null) return; getPath(path).delayTicks = ticks; } + @Override public IPos getPos(int path) { if (getPath(path) == null) return null; return getPath(path).coords; } + @Override public void setPos(int path, IPos coords) { if (getPath(path) == null) return; getPath(path).coords = coords; } + @Override public double getX(int path) { if (getPos(path) == null) return 0; return getPos(path).getX(); } + @Override public void setX(int path, double x) { if (getPos(path) == null) return; setPos(path, NpcAPI.Instance().getIPos(x, getY(path), getZ(path))); } + @Override public double getY(int path) { if (getPos(path) == null) return 0; return getPos(path).getY(); } + @Override public void setY(int path, double y) { if (getPos(path) == null) return; setPos(path, NpcAPI.Instance().getIPos(getX(path), y, getZ(path))); } + @Override public double getZ(int path) { if (getPos(path) == null) return 0; return getPos(path).getZ(); } + @Override public void setZ(int path, double z) { if (getPos(path) == null) return; setPos(path, NpcAPI.Instance().getIPos(getX(path), getY(path), z)); @@ -83,20 +94,24 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { return trajectory.get(path); } + @Override public void setPath(int path, IPos pos) { setPath(path, pos, 0); } + @Override public void setPath(int path, IPos pos, int delay) { setPath(path, pos.getX(), pos.getY(), pos.getZ(), delay); } + @Override public void setPath(int path, double x, double y, double z) { setPath(path, x, y, z, 0); } + @Override public void setPath(int path, double x, double y, double z, int delay) { - Path newPath = createPath(x, y, z, delay); + Path newPath = (Path) createPath(x, y, z, delay); if (trajectory.isEmpty()) { trajectory.add(newPath); @@ -105,23 +120,27 @@ public class EnergyTrajectoryData implements IEnergyTrajectoryData { } } - public Path createPath(IPos coords) { + @Override + public IPath createPath(IPos coords) { return new Path(coords, 0); } - public Path createPath(IPos coords, int delay) { + @Override + public IPath createPath(IPos coords, int delay) { return new Path(coords, delay); } - public Path createPath(double x, double y, double z) { + @Override + public IPath createPath(double x, double y, double z) { return createPath(x, y, z, 0); } - public Path createPath(double x, double y, double z, int delay) { + @Override + public IPath createPath(double x, double y, double z, int delay) { return new Path(NpcAPI.Instance().getIPos(x, y, z), delay); } - public static class Path { + public static class Path implements IEnergyTrajectoryData.IPath{ public IPos coords; public int delayTicks;