diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleBuff.java b/src/main/java/electroblob/wizardry/client/particle/ParticleBuff.java index db14cd28..e62e0ed4 100644 --- a/src/main/java/electroblob/wizardry/client/particle/ParticleBuff.java +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleBuff.java @@ -59,13 +59,7 @@ public class ParticleBuff extends ParticleWizardry { float rotationYZ, float rotationXY, float rotationXZ){ // Copied from ParticleWizardry, needs to be here since we're not calling super - updateEntityLinking(partialTicks); - - // I don't know why, but despite not being in any superclass renderParticle these also need to be here if we're - // not calling super - interpPosX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * (double)partialTicks; - interpPosY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * (double)partialTicks; - interpPosZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * (double)partialTicks; + updateEntityLinking(viewer, partialTicks); GlStateManager.pushMatrix(); GlStateManager.pushAttrib(); diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleSphere.java b/src/main/java/electroblob/wizardry/client/particle/ParticleSphere.java index 9a1d8204..a863911d 100644 --- a/src/main/java/electroblob/wizardry/client/particle/ParticleSphere.java +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleSphere.java @@ -41,13 +41,7 @@ public class ParticleSphere extends ParticleWizardry { float rotationXY, float rotationXZ){ // Copied from ParticleWizardry, needs to be here since we're not calling super - updateEntityLinking(partialTicks); - - // I don't know why, but despite not being in any superclass renderParticle these also need to be here if we're - // not calling super - interpPosX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * (double)partialTicks; - interpPosY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * (double)partialTicks; - interpPosZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * (double)partialTicks; + updateEntityLinking(viewer, partialTicks); float x = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks); float y = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks); diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleTargeted.java b/src/main/java/electroblob/wizardry/client/particle/ParticleTargeted.java index 9b512ffd..aff023a6 100644 --- a/src/main/java/electroblob/wizardry/client/particle/ParticleTargeted.java +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleTargeted.java @@ -76,13 +76,7 @@ public abstract class ParticleTargeted extends ParticleWizardry { float rotationXY, float rotationXZ){ // Copied from ParticleWizardry, needs to be here since we're not calling super - updateEntityLinking(partialTicks); - - // I don't know why, but despite not being in any superclass renderParticle these also need to be here if we're - // not calling super - interpPosX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * (double)partialTicks; - interpPosY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * (double)partialTicks; - interpPosZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * (double)partialTicks; + updateEntityLinking(viewer, partialTicks); float x = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks); float y = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks); diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleWizardry.java b/src/main/java/electroblob/wizardry/client/particle/ParticleWizardry.java index 4d65ddcd..57a5f74b 100644 --- a/src/main/java/electroblob/wizardry/client/particle/ParticleWizardry.java +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleWizardry.java @@ -336,7 +336,7 @@ public abstract class ParticleWizardry extends Particle { public void renderParticle(BufferBuilder buffer, Entity viewer, float partialTicks, float lookZ, float lookY, float lookX, float lookXY, float lookYZ){ - updateEntityLinking(partialTicks); + updateEntityLinking(viewer, partialTicks); if(Float.isNaN(this.yaw) || Float.isNaN(this.pitch)){ // Normal behaviour (rotates to face the viewer) @@ -369,12 +369,18 @@ public abstract class ParticleWizardry extends Particle { super.renderParticle(buffer, viewer, partialTicks, rotationX, rotationY, rotationZ, rotationYZ, rotationXY); } - protected void updateEntityLinking(float partialTicks){ + protected void updateEntityLinking(Entity viewer, float partialTicks){ + // TODO: Still not working, it seems this bug was a thing back in 4.2.x anyway if(this.entity != null){ // This is kind of cheating but we know it's always a constant velocity so it works fine prevPosX = posX + entity.prevPosX - entity.posX - relativeMotionX * (1-partialTicks); prevPosY = posY + entity.prevPosY - entity.posY - relativeMotionY * (1-partialTicks); prevPosZ = posZ + entity.prevPosZ - entity.posZ - relativeMotionZ * (1-partialTicks); + }else if(this.getFXLayer() == 3){ + // Not sure why, but when fx layer is 3, the interp pos is wrong when not linked to an entity + interpPosX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * (double)partialTicks; + interpPosY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * (double)partialTicks; + interpPosZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * (double)partialTicks; } }