mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 21:17:32 +00:00
Fix Beam and Laser Scripting
This commit is contained in:
1 parent
f546bd72b8
commit
2e21b36796
3 files changed
+53
-1
No files matched your search
@@ -40,6 +40,7 @@ public class EntityAbilityLaser extends EntityEnergyProjectile {
|
||||
private float desiredLength = 0.0f; // Intended beam reach (grows to maxLength)
|
||||
private float currentLength = 0.0f; // Actual length after block truncation (visual + collision)
|
||||
private boolean fullyExtended = false;
|
||||
private boolean trackOwnerOrigin = true; // When false, laser fires independently (fireAt mode)
|
||||
|
||||
// Direction (normalized)
|
||||
private double dirX, dirY, dirZ;
|
||||
@@ -158,7 +159,8 @@ public class EntityAbilityLaser extends EntityEnergyProjectile {
|
||||
|
||||
// Origin/direction tracking runs on BOTH sides so the client can render the beam.
|
||||
// Once reflected, never resume owner-tracking — the laser flies in a fixed direction.
|
||||
if (!reflected) {
|
||||
// When trackOwnerOrigin is false (fireAt mode), skip owner tracking entirely.
|
||||
if (!reflected && trackOwnerOrigin) {
|
||||
updateLaserOriginAndDirection();
|
||||
}
|
||||
|
||||
@@ -727,6 +729,14 @@ public class EntityAbilityLaser extends EntityEnergyProjectile {
|
||||
this.dirZ = z;
|
||||
}
|
||||
|
||||
public boolean isTrackOwnerOrigin() {
|
||||
return trackOwnerOrigin;
|
||||
}
|
||||
|
||||
public void setTrackOwnerOrigin(boolean track) {
|
||||
this.trackOwnerOrigin = track;
|
||||
}
|
||||
|
||||
public float getCurrentLength() {
|
||||
return currentLength;
|
||||
}
|
||||
@@ -868,6 +878,7 @@ public class EntityAbilityLaser extends EntityEnergyProjectile {
|
||||
this.desiredLength = nbt.getFloat("DesiredLength");
|
||||
this.currentLength = nbt.getFloat("CurrentLength");
|
||||
this.fullyExtended = nbt.getBoolean("FullyExtended");
|
||||
this.trackOwnerOrigin = !nbt.hasKey("TrackOwnerOrigin") || nbt.getBoolean("TrackOwnerOrigin");
|
||||
this.endX = nbt.getDouble("EndX");
|
||||
this.endY = nbt.getDouble("EndY");
|
||||
this.endZ = nbt.getDouble("EndZ");
|
||||
@@ -886,6 +897,7 @@ public class EntityAbilityLaser extends EntityEnergyProjectile {
|
||||
nbt.setFloat("DesiredLength", desiredLength);
|
||||
nbt.setFloat("CurrentLength", currentLength);
|
||||
nbt.setBoolean("FullyExtended", fullyExtended);
|
||||
nbt.setBoolean("TrackOwnerOrigin", trackOwnerOrigin);
|
||||
nbt.setDouble("EndX", endX);
|
||||
nbt.setDouble("EndY", endY);
|
||||
nbt.setDouble("EndZ", endZ);
|
||||
|
||||
@@ -3,6 +3,7 @@ package noppes.npcs.scripted.entity;
|
||||
import kamkeel.npcs.entity.EntityAbilityBeam;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import noppes.npcs.api.entity.IEnergyBeam;
|
||||
import noppes.npcs.api.entity.IEntity;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
|
||||
public class ScriptEnergyBeam<T extends EntityAbilityBeam> extends ScriptEnergyProjectile<T> implements IEnergyBeam {
|
||||
@@ -62,4 +63,22 @@ public class ScriptEnergyBeam<T extends EntityAbilityBeam> extends ScriptEnergyP
|
||||
protected void launchFromOwner(EntityLivingBase target) {
|
||||
entity.startFiring(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAt(IEntity target) {
|
||||
entity.setAttachedToOwner(false);
|
||||
super.fireAt(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAt(double x, double y, double z) {
|
||||
entity.setAttachedToOwner(false);
|
||||
super.fireAt(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireDirection(float yaw, float pitch) {
|
||||
entity.setAttachedToOwner(false);
|
||||
super.fireDirection(yaw, pitch);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package noppes.npcs.scripted.entity;
|
||||
import kamkeel.npcs.entity.EntityAbilityLaser;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import noppes.npcs.api.entity.IEnergyLaser;
|
||||
import noppes.npcs.api.entity.IEntity;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
|
||||
public class ScriptEnergyLaser<T extends EntityAbilityLaser> extends ScriptEnergyProjectile<T> implements IEnergyLaser {
|
||||
@@ -95,8 +96,15 @@ public class ScriptEnergyLaser<T extends EntityAbilityLaser> extends ScriptEnerg
|
||||
entity.startMoving(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAt(IEntity target) {
|
||||
entity.setTrackOwnerOrigin(false);
|
||||
super.fireAt(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAt(double x, double y, double z) {
|
||||
entity.setTrackOwnerOrigin(false);
|
||||
double dx = x - entity.posX;
|
||||
double dy = y - entity.posY;
|
||||
double dz = z - entity.posZ;
|
||||
@@ -106,4 +114,17 @@ public class ScriptEnergyLaser<T extends EntityAbilityLaser> extends ScriptEnerg
|
||||
}
|
||||
ensureSpawned();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireDirection(float yaw, float pitch) {
|
||||
entity.setTrackOwnerOrigin(false);
|
||||
float yawRad = (float) Math.toRadians(yaw);
|
||||
float pitchRad = (float) Math.toRadians(pitch);
|
||||
entity.setDirection(
|
||||
-Math.sin(yawRad) * Math.cos(pitchRad),
|
||||
-Math.sin(pitchRad),
|
||||
Math.cos(yawRad) * Math.cos(pitchRad)
|
||||
);
|
||||
ensureSpawned();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user