From b17a425dd8c861df0041b3cc78983e14b54dd775 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Thu, 1 Jun 2023 22:02:27 -0500 Subject: [PATCH] ScriptLivingBase & ScriptWorld: -Added additional IEntity[] ignoreEntities parameter to ignore those entities when creating lists. -For ScriptLivingBase, the entity using getLookingAtEntities is ignored. --- src/api | 2 +- .../noppes/npcs/scripted/ScriptWorld.java | 33 +++++++++++++++---- .../scripted/entity/ScriptLivingBase.java | 20 +++++++++-- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/api b/src/api index 8c61d07b1..f76a79bb5 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 8c61d07b10d15c4b6a6107d581f16b885cba70da +Subproject commit f76a79bb521d5ffb9ed407c43b7d40b1ac5841f4 diff --git a/src/main/java/noppes/npcs/scripted/ScriptWorld.java b/src/main/java/noppes/npcs/scripted/ScriptWorld.java index b3093f25c..4ef97b6cd 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptWorld.java +++ b/src/main/java/noppes/npcs/scripted/ScriptWorld.java @@ -806,15 +806,28 @@ public class ScriptWorld implements IWorld { public IEntity[] rayCastEntities(double[] startPos, double[] lookVector, int maxDistance, double offset, double range, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) { + return rayCastEntities(null,startPos,lookVector,maxDistance,offset,range,stopOnBlock,stopOnLiquid,stopOnCollision); + } + + public IEntity[] rayCastEntities(IEntity[] ignoreEntities, double[] startPos, double[] lookVector, + int maxDistance, double offset, double range, + boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) { + if (ignoreEntities == null) { + ignoreEntities = new IEntity[0]; + } + Vec3 startVec = Vec3.createVectorHelper(startPos[0], startPos[1], startPos[2]); Vec3 endVec = startVec.addVector(lookVector[0]*maxDistance,lookVector[1]*maxDistance,lookVector[2]*maxDistance); startVec = startVec.addVector(lookVector[0]*offset, lookVector[1]*offset, lookVector[2]*offset); - Set> entities = this.rayCastEntities(startVec,endVec,range,stopOnBlock,stopOnLiquid,stopOnCollision); + LinkedHashSet ignoredEntitiesSet = new LinkedHashSet<>(); + Collections.addAll(ignoredEntitiesSet, ignoreEntities); + + Set> entities = this.rayCastEntities(ignoredEntitiesSet,startVec,endVec,range,stopOnBlock,stopOnLiquid,stopOnCollision); return entities.toArray(new IEntity[0]); } - public Set> rayCastEntities(Vec3 startVec, Vec3 endVec, double range, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) + public Set> rayCastEntities(LinkedHashSet ignoredEntitiesSet, Vec3 startVec, Vec3 endVec, double range, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) { LinkedHashSet> entities = new LinkedHashSet<>(); @@ -832,7 +845,11 @@ public class ScriptWorld implements IWorld { int k1 = this.world.getBlockMetadata(l, i1, j1); IEntity[] surrounding = this.getEntitiesNear(l,i1,j1,range); - Collections.addAll(entities, surrounding); + for (IEntity entity : surrounding) { + if (!ignoredEntitiesSet.contains(entity)) { + entities.add(entity); + } + } if (block.canCollideCheck(k1, false)) { @@ -850,12 +867,12 @@ public class ScriptWorld implements IWorld { { if (Double.isNaN(startVec.xCoord) || Double.isNaN(startVec.yCoord) || Double.isNaN(startVec.zCoord)) { - return null; + return entities; } if (l == endX && i1 == endY && j1 == endZ) { - return null; + return entities; } boolean flag6 = true; @@ -1003,7 +1020,11 @@ public class ScriptWorld implements IWorld { int l1 = this.world.getBlockMetadata(l, i1, j1); IEntity[] surroundingEntities = this.getEntitiesNear(l,i1,j1,range); - Collections.addAll(entities, surroundingEntities); + for (IEntity entity : surroundingEntities) { + if (!ignoredEntitiesSet.contains(entity)) { + entities.add(entity); + } + } MovingObjectPosition movingobjectposition1 = block1.collisionRayTrace(this.world, l, i1, j1, startVec, endVec); if (movingobjectposition1 != null) diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java index 561f05ed6..638c1682a 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java @@ -16,6 +16,11 @@ import noppes.npcs.api.item.IItemStack; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.constants.EntityType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + public class ScriptLivingBase extends ScriptEntity implements IEntityLivingBase { protected T entity; @@ -181,12 +186,23 @@ public class ScriptLivingBase extends ScriptEntity[0]; + } + ArrayList entities = new ArrayList<>(); + entities.add(this); + Collections.addAll(entities, ignoreEntities); + + return getWorld().rayCastEntities(entities.toArray(new IEntity[0]),startPos,lookVector,maxDistance,offset,range,stopOnBlock,stopOnLiquid,stopOnCollision); + } + + public IEntity[] getLookingAtEntities(int maxDistance, double offset, double range, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) { + return this.getLookingAtEntities(null,maxDistance,offset,range,stopOnBlock,stopOnLiquid,stopOnCollision); } public IEntity[] getLookingAtEntities(int maxDistance, double offset, double range) {