Fix particle orientation during omnidirectional rendering in 1.15

This commit is contained in:
Jonas Herzig
2020-04-01 23:44:59 +02:00
parent bf6f71ef89
commit c0e27634f4
2 changed files with 41 additions and 6 deletions

View File

@@ -1,20 +1,25 @@
package com.replaymod.render.mixin;
// FIXME 1.15 seems like the way orientation is passed to particles has changed significantly
//#if MC>=10904 && MC<11500
//#if MC>=10904
import com.replaymod.core.versions.MCVer;
import com.replaymod.render.blend.BlendState;
import com.replaymod.render.blend.exporters.ParticlesExporter;
import com.replaymod.render.blend.mixin.ParticleAccessor;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.util.math.Vec3d;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
//#if MC>=11500
//$$ import net.minecraft.client.render.VertexConsumer;
//$$ import net.minecraft.util.math.Quaternion;
//#else
import com.replaymod.render.blend.mixin.ParticleAccessor;
import net.minecraft.client.render.BufferBuilder;
//#endif
//#if MC>=11400
import net.minecraft.client.render.Camera;
//#else
@@ -23,6 +28,37 @@ import net.minecraft.client.render.Camera;
@Mixin(ParticleManager.class)
public abstract class MixinParticleManager {
//#if MC>=11500
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/VertexConsumer;Lnet/minecraft/client/render/Camera;F)V"))
//$$ private void buildOrientedGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
//$$ if (handler == null || !handler.omnidirectional) {
//$$ buildGeometry(particle, vertexConsumer, camera, partialTicks);
//$$ } else {
//$$ Quaternion rotation = camera.getRotation();
//$$ Quaternion org = rotation.copy();
//$$ try {
//$$ Vec3d from = new Vec3d(0, 0, 1);
//$$ Vec3d to = MCVer.getPosition(particle, partialTicks).subtract(camera.getPos()).normalize();
//$$ Vec3d axis = from.crossProduct(to);
//$$ rotation.set((float) axis.x, (float) axis.y, (float) axis.z, (float) (1 + from.dotProduct(to)));
//$$ rotation.normalize();
//$$
//$$ buildGeometry(particle, vertexConsumer, camera, partialTicks);
//$$ } finally {
//$$ rotation.set(org.getA(), org.getB(), org.getC(), org.getD());
//$$ }
//$$ }
//$$ }
//$$
//$$ private void buildGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
//$$ BlendState blendState = BlendState.getState();
//$$ if (blendState != null) {
//$$ blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
//$$ }
//$$ particle.buildGeometry(vertexConsumer, camera, partialTicks);
//$$ }
//#else
//#if MC>=11200
//#if MC>=11400
@Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V"))
@@ -87,5 +123,6 @@ public abstract class MixinParticleManager {
}
particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
}
//#endif
}
//#endif

View File

@@ -17,9 +17,7 @@
//#endif
"WorldRendererAccessor",
//#if MC>=10904
//#if MC<11500
"MixinParticleManager",
//#endif
//#else
//$$ "MixinEffectRenderer",
//$$ "MixinRendererLivingEntity",