./gradlew :1.15.2:setCoreVersion
Also `./gradlew :jGui:1.15.2:setCoreVersion`.
This commit is contained in:
@@ -1,34 +1,34 @@
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
//$$ package com.replaymod.render.mixin;
|
||||
//$$
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//$$
|
||||
//$$ import java.util.List;
|
||||
//#if MC>=10904
|
||||
import java.util.concurrent.PriorityBlockingQueue;
|
||||
//$$ import java.util.concurrent.PriorityBlockingQueue;
|
||||
//#else
|
||||
//$$ import java.util.concurrent.BlockingQueue;
|
||||
//#endif
|
||||
|
||||
@Mixin(ChunkBuilder.class)
|
||||
public interface ChunkRenderDispatcherAccessor {
|
||||
@Accessor("workers")
|
||||
List<ChunkRenderWorker> getListThreadedWorkers();
|
||||
|
||||
//$$
|
||||
//$$ @Mixin(ChunkBuilder.class)
|
||||
//$$ public interface ChunkRenderDispatcherAccessor {
|
||||
//$$ @Accessor("workers")
|
||||
//$$ List<ChunkRenderWorker> getListThreadedWorkers();
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
@Accessor("pendingChunks")
|
||||
PriorityBlockingQueue<ChunkRenderTask> getQueueChunkUpdates();
|
||||
@Accessor("pendingChunks")
|
||||
void setQueueChunkUpdates(PriorityBlockingQueue<ChunkRenderTask> value);
|
||||
//$$ @Accessor("pendingChunks")
|
||||
//$$ PriorityBlockingQueue<ChunkRenderTask> getQueueChunkUpdates();
|
||||
//$$ @Accessor("pendingChunks")
|
||||
//$$ void setQueueChunkUpdates(PriorityBlockingQueue<ChunkRenderTask> value);
|
||||
//#else
|
||||
//$$ @Accessor
|
||||
//$$ BlockingQueue<ChunkCompileTaskGenerator> getQueueChunkUpdates();
|
||||
//$$ @Accessor
|
||||
//$$ void setQueueChunkUpdates(BlockingQueue<ChunkCompileTaskGenerator> value);
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=10800 && MC<11500
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(ChunkRenderWorker.class)
|
||||
public abstract class MixinChunkRenderWorker implements MCVer.ChunkRenderWorkerAccessor {
|
||||
@Shadow abstract void runTask(ChunkRenderTask task) throws InterruptedException;
|
||||
|
||||
public void doRunTask(ChunkRenderTask task) throws InterruptedException {
|
||||
runTask(task);
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ import com.replaymod.core.versions.MCVer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
//$$
|
||||
//$$ @Mixin(ChunkRenderWorker.class)
|
||||
//$$ public abstract class MixinChunkRenderWorker implements MCVer.ChunkRenderWorkerAccessor {
|
||||
//$$ @Shadow abstract void runTask(ChunkRenderTask task) throws InterruptedException;
|
||||
//$$
|
||||
//$$ public void doRunTask(ChunkRenderTask task) throws InterruptedException {
|
||||
//$$ runTask(task);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -14,8 +14,8 @@ import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -98,7 +98,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_renderSpectatorHand(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
//#if MC>=11400
|
||||
Camera camera,
|
||||
@@ -140,76 +140,76 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
*/
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ Matrix4f offset;
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(0.07f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(-0.07f, 0, 0);
|
||||
//$$ } else {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ offset.multiply(ci.getReturnValue());
|
||||
//$$ ci.setReturnValue(offset);
|
||||
//$$ }
|
||||
//$$ }
|
||||
@Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
|
||||
private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
Matrix4f offset;
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
offset = Matrix4f.translate(0.07f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
offset = Matrix4f.translate(-0.07f, 0, 0);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
offset.multiply(ci.getReturnValue());
|
||||
ci.setReturnValue(offset);
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//$$ @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicProjection(
|
||||
float partialTicks,
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(
|
||||
//$$ float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GL11.glTranslatef(0.07f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GL11.glTranslatef(-0.07f, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ matrixStack.translate(0.1, 0, 0);
|
||||
//$$ GL11.glTranslatef(0.07f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ matrixStack.translate(-0.1, 0, 0);
|
||||
//$$ GL11.glTranslatef(-0.07f, 0, 0);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicModelView(
|
||||
float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
|
||||
//#if MC>=11500
|
||||
@Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GL11.glTranslatef(0.1f, 0, 0);
|
||||
matrixStack.translate(0.1, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GL11.glTranslatef(-0.1f, 0, 0);
|
||||
matrixStack.translate(-0.1, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||
//#endif
|
||||
//$$ private void replayModRender_setupStereoscopicModelView(
|
||||
//$$ float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ GL11.glTranslatef(0.1f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ GL11.glTranslatef(-0.1f, 0, 0);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
/*
|
||||
@@ -217,25 +217,25 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
*/
|
||||
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
@Redirect(method = "method_22973", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;"))
|
||||
//#endif
|
||||
private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
@Redirect(method = "renderAboveClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//$$ private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
//$$ return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Redirect(method = "renderAboveClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//$$ private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
|
||||
//$$ return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
@@ -243,7 +243,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
fovY = 90;
|
||||
aspect = 1;
|
||||
}
|
||||
return Matrix4f.method_4929(fovY, aspect, zNear, zFar);
|
||||
return Matrix4f.viewboxMatrix(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//#else
|
||||
//$$ @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
|
||||
@@ -18,7 +18,7 @@ public abstract class MixinFogRenderer {
|
||||
@Inject(method = "applyFog", at = @At("HEAD"), cancellable = true)
|
||||
private
|
||||
//#if MC>=11500
|
||||
//$$ static
|
||||
static
|
||||
//#endif
|
||||
void replayModRender_onSetupFog(CallbackInfo ci) {
|
||||
EntityRendererHandler handler =
|
||||
|
||||
@@ -20,9 +20,9 @@ import net.minecraft.client.render.Frustum;
|
||||
//#endif
|
||||
public abstract class MixinFrustum {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "isAnyCornerVisible", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "isAnyCornerVisible", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
@Inject(method = "intersects", at = @At("HEAD"), cancellable = true)
|
||||
//$$ @Inject(method = "intersects", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
public void intersects(CallbackInfoReturnable<Boolean> ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
|
||||
@@ -13,11 +13,11 @@ 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;
|
||||
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;
|
||||
//$$ import com.replaymod.render.blend.mixin.ParticleAccessor;
|
||||
//$$ import net.minecraft.client.render.BufferBuilder;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -29,40 +29,40 @@ 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);
|
||||
//$$ }
|
||||
@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"))
|
||||
private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks,
|
||||
//$$ @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"))
|
||||
//$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks,
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks,
|
||||
@@ -71,11 +71,11 @@ public abstract class MixinParticleManager {
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/VertexBuffer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks,
|
||||
//#endif
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
|
||||
// Seems to be gone by 1.14
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Seems to be gone by 1.14
|
||||
//#if MC<11400
|
||||
//#if MC>=11200
|
||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
@@ -88,41 +88,41 @@ public abstract class MixinParticleManager {
|
||||
//$$ renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private void renderParticle(Particle particle,
|
||||
BufferBuilder vertexBuffer,
|
||||
//$$
|
||||
//$$ private void renderParticle(Particle particle,
|
||||
//$$ BufferBuilder vertexBuffer,
|
||||
//#if MC>=11400
|
||||
Camera view,
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
//$$ Entity view,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
// Align all particles towards the camera
|
||||
//$$ float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
//$$ if (handler != null && handler.omnidirectional) {
|
||||
//$$ // Align all particles towards the camera
|
||||
//#if MC>=11400
|
||||
Vec3d pos = view.getPos();
|
||||
//$$ Vec3d pos = view.getPos();
|
||||
//#else
|
||||
//$$ Vec3d pos = new Vec3d(view.posX, view.posY, view.posZ);
|
||||
//#endif
|
||||
Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos);
|
||||
double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z));
|
||||
double yaw = -Math.atan2(d.x, d.z);
|
||||
|
||||
rotX = (float) Math.cos(yaw);
|
||||
rotZ = (float) Math.sin(yaw);
|
||||
rotXZ = (float) Math.cos(pitch);
|
||||
|
||||
rotYZ = (float) (-rotZ * Math.sin(pitch));
|
||||
rotXY = (float) (rotX * Math.sin(pitch));
|
||||
}
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
}
|
||||
particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
//$$ Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos);
|
||||
//$$ double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z));
|
||||
//$$ double yaw = -Math.atan2(d.x, d.z);
|
||||
//$$
|
||||
//$$ rotX = (float) Math.cos(yaw);
|
||||
//$$ rotZ = (float) Math.sin(yaw);
|
||||
//$$ rotXZ = (float) Math.cos(pitch);
|
||||
//$$
|
||||
//$$ rotYZ = (float) (-rotZ * Math.sin(pitch));
|
||||
//$$ rotXY = (float) (rotX * Math.sin(pitch));
|
||||
//$$ }
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
//$$ }
|
||||
//$$ particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -11,10 +11,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class MixinRender {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//$$ @Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//$$ @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
|
||||
@@ -10,10 +10,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
//$$ import net.minecraft.util.math.Quaternion;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.util.math.Quaternion;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -25,17 +25,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
@Mixin(EntityRenderDispatcher.class)
|
||||
public abstract class MixinRenderManager {
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow private Quaternion rotation;
|
||||
@Shadow private Quaternion rotation;
|
||||
//#else
|
||||
@Shadow private float cameraPitch;
|
||||
@Shadow private float cameraYaw;
|
||||
//$$ @Shadow private float cameraPitch;
|
||||
//$$ @Shadow private float cameraYaw;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "render", at = @At("HEAD"))
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400 && FABRIC>=1
|
||||
@Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderEntity", at = @At("HEAD"))
|
||||
@@ -47,11 +47,11 @@ public abstract class MixinRenderManager {
|
||||
//#if MC>=10904
|
||||
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
MatrixStack matrixStack,
|
||||
VertexConsumerProvider vertexConsumerProvider,
|
||||
int int_1,
|
||||
//#else
|
||||
boolean iDoNotCare,
|
||||
//$$ boolean iDoNotCare,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
@@ -62,12 +62,12 @@ public abstract class MixinRenderManager {
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
//#if MC>=11500
|
||||
//$$ this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
|
||||
this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
|
||||
this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
|
||||
this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
|
||||
//#else
|
||||
this.cameraPitch = (float) Math.toDegrees(pitch);
|
||||
this.cameraYaw = (float) Math.toDegrees(yaw);
|
||||
//$$ this.cameraPitch = (float) Math.toDegrees(pitch);
|
||||
//$$ this.cameraYaw = (float) Math.toDegrees(yaw);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,111 +1,111 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
//$$ import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
//$$ import net.minecraft.util.thread.TaskExecutor;
|
||||
//$$ import org.spongepowered.asm.mixin.Final;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//$$
|
||||
//$$ import java.util.Queue;
|
||||
//$$ import java.util.concurrent.CompletableFuture;
|
||||
//$$ import java.util.concurrent.locks.Condition;
|
||||
//$$ import java.util.concurrent.locks.Lock;
|
||||
//$$ import java.util.concurrent.locks.ReentrantLock;
|
||||
//$$
|
||||
//$$ @Mixin(ChunkBuilder.class)
|
||||
//$$ public abstract class Mixin_BlockOnChunkRebuilds implements ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds {
|
||||
//$$ @Shadow @Final private Queue<BlockBufferBuilderStorage> threadBuffers;
|
||||
//$$
|
||||
//$$ @Shadow public abstract boolean upload();
|
||||
//$$
|
||||
//$$ @Shadow @Final private TaskExecutor<Runnable> mailbox;
|
||||
//$$
|
||||
//$$ @Shadow protected abstract void scheduleRunTasks();
|
||||
//$$
|
||||
//$$ @Shadow @Final private Queue<Runnable> uploadQueue;
|
||||
//$$ private final Lock waitingForWorkLock = new ReentrantLock();
|
||||
//$$ private final Condition newWork = waitingForWorkLock.newCondition();
|
||||
//$$ private volatile boolean allDone;
|
||||
//$$
|
||||
//$$ private int totalBufferCount;
|
||||
//$$
|
||||
//$$ @Inject(method = "<init>", at = @At("RETURN"))
|
||||
//$$ private void rememberTotalThreads(CallbackInfo ci) {
|
||||
//$$ this.totalBufferCount = this.threadBuffers.size();
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "scheduleRunTasks", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadIfEverythingIsDone(CallbackInfo ci) {
|
||||
//$$ if (this.threadBuffers.size() == this.totalBufferCount) {
|
||||
//$$ // Looks like we're done, better notify the main thread in case the previous task didn't generate an upload
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ this.allDone = true;
|
||||
//$$ this.newWork.signalAll();
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ } else {
|
||||
//$$ this.allDone = false;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "scheduleUpload", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadOfNewUpload(CallbackInfoReturnable<CompletableFuture<Void>> ci) {
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ this.newWork.signal();
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private boolean waitForMainThreadWork() {
|
||||
//$$ boolean allDone = this.mailbox.<Boolean>ask(reply -> () -> {
|
||||
//$$ scheduleRunTasks();
|
||||
//$$ reply.send(this.threadBuffers.size() == this.totalBufferCount);
|
||||
//$$ }).join();
|
||||
//$$
|
||||
//$$ if (allDone) {
|
||||
//$$ return true;
|
||||
//$$ } else {
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ while (true) {
|
||||
//$$ if (this.allDone) {
|
||||
//$$ return true;
|
||||
//$$ } else if (!this.uploadQueue.isEmpty()) {
|
||||
//$$ return false;
|
||||
//$$ } else {
|
||||
//$$ this.newWork.awaitUninterruptibly();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public boolean uploadEverythingBlocking() {
|
||||
//$$ boolean anything = false;
|
||||
//$$
|
||||
//$$ boolean allChunksBuilt;
|
||||
//$$ do {
|
||||
//$$ allChunksBuilt = waitForMainThreadWork();
|
||||
//$$ while (upload()) {
|
||||
//$$ anything = true;
|
||||
//$$ }
|
||||
//$$ } while (!allChunksBuilt);
|
||||
//$$
|
||||
//$$ return anything;
|
||||
//$$ }
|
||||
//$$ }
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.util.thread.TaskExecutor;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
@Mixin(ChunkBuilder.class)
|
||||
public abstract class Mixin_BlockOnChunkRebuilds implements ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds {
|
||||
@Shadow @Final private Queue<BlockBufferBuilderStorage> threadBuffers;
|
||||
|
||||
@Shadow public abstract boolean upload();
|
||||
|
||||
@Shadow @Final private TaskExecutor<Runnable> mailbox;
|
||||
|
||||
@Shadow protected abstract void scheduleRunTasks();
|
||||
|
||||
@Shadow @Final private Queue<Runnable> uploadQueue;
|
||||
private final Lock waitingForWorkLock = new ReentrantLock();
|
||||
private final Condition newWork = waitingForWorkLock.newCondition();
|
||||
private volatile boolean allDone;
|
||||
|
||||
private int totalBufferCount;
|
||||
|
||||
@Inject(method = "<init>", at = @At("RETURN"))
|
||||
private void rememberTotalThreads(CallbackInfo ci) {
|
||||
this.totalBufferCount = this.threadBuffers.size();
|
||||
}
|
||||
|
||||
@Inject(method = "scheduleRunTasks", at = @At("RETURN"))
|
||||
private void notifyMainThreadIfEverythingIsDone(CallbackInfo ci) {
|
||||
if (this.threadBuffers.size() == this.totalBufferCount) {
|
||||
// Looks like we're done, better notify the main thread in case the previous task didn't generate an upload
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
this.allDone = true;
|
||||
this.newWork.signalAll();
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
} else {
|
||||
this.allDone = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "scheduleUpload", at = @At("RETURN"))
|
||||
private void notifyMainThreadOfNewUpload(CallbackInfoReturnable<CompletableFuture<Void>> ci) {
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
this.newWork.signal();
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean waitForMainThreadWork() {
|
||||
boolean allDone = this.mailbox.<Boolean>ask(reply -> () -> {
|
||||
scheduleRunTasks();
|
||||
reply.send(this.threadBuffers.size() == this.totalBufferCount);
|
||||
}).join();
|
||||
|
||||
if (allDone) {
|
||||
return true;
|
||||
} else {
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
while (true) {
|
||||
if (this.allDone) {
|
||||
return true;
|
||||
} else if (!this.uploadQueue.isEmpty()) {
|
||||
return false;
|
||||
} else {
|
||||
this.newWork.awaitUninterruptibly();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean uploadEverythingBlocking() {
|
||||
boolean anything = false;
|
||||
|
||||
boolean allChunksBuilt;
|
||||
do {
|
||||
allChunksBuilt = waitForMainThreadWork();
|
||||
while (upload()) {
|
||||
anything = true;
|
||||
}
|
||||
} while (!allChunksBuilt);
|
||||
|
||||
return anything;
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -10,9 +10,9 @@ import org.spongepowered.asm.mixin.injection.Constant;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyConstant;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
//#else
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
//$$ import net.minecraft.client.render.GameRenderer;
|
||||
//#endif
|
||||
|
||||
/**
|
||||
@@ -20,17 +20,17 @@ import net.minecraft.client.render.GameRenderer;
|
||||
* at 4 or greater.
|
||||
*/
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(WorldRenderer.class)
|
||||
@Mixin(WorldRenderer.class)
|
||||
//#else
|
||||
@Mixin(GameRenderer.class)
|
||||
//$$ @Mixin(GameRenderer.class)
|
||||
//#endif
|
||||
public abstract class Mixin_ChromaKeyForceSky {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @ModifyConstant(method = "render", constant = @Constant(intValue = 4))
|
||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 4))
|
||||
//#else
|
||||
@ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
|
||||
//$$ @ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
|
||||
//#endif
|
||||
private int forceSkyWhenChromaKeying(int value) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) this.client.gameRenderer).replayModRender_getHandler();
|
||||
|
||||
@@ -8,19 +8,19 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
//#else
|
||||
import org.lwjgl.opengl.GL11;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getMinecraft;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(value = net.minecraft.client.render.GameRenderer.class)
|
||||
@Mixin(value = net.minecraft.client.render.GameRenderer.class)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Mixin(value = net.minecraft.client.render.Camera.class)
|
||||
//$$ @Mixin(value = net.minecraft.client.render.Camera.class)
|
||||
//#else
|
||||
//$$ @Mixin(value = net.minecraft.client.renderer.EntityRenderer.class)
|
||||
//#endif
|
||||
@@ -31,19 +31,19 @@ public abstract class Mixin_CubicRotation {
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
@Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "update", at = @At("HEAD"))
|
||||
//$$ @Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
private void replayModRender_setupCubicFrameRotation(
|
||||
//#if MC>=11500
|
||||
//$$ float partialTicks,
|
||||
//$$ long frameStartNano,
|
||||
//$$ MatrixStack matrixStack,
|
||||
float partialTicks,
|
||||
long frameStartNano,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
@@ -79,20 +79,20 @@ public abstract class Mixin_CubicRotation {
|
||||
break;
|
||||
}
|
||||
//#if MC>=11500
|
||||
//$$ matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
|
||||
matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
|
||||
//#else
|
||||
GL11.glRotatef(angle, x, y, 0);
|
||||
//$$ GL11.glRotatef(angle, x, y, 0);
|
||||
//#endif
|
||||
}
|
||||
//#if MC<11500
|
||||
if (getHandler() != null && getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//$$ if (getHandler() != null && getHandler().omnidirectional) {
|
||||
//$$ // Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11400
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,14 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import java.util.Set;
|
||||
import java.util.Set;
|
||||
//#else
|
||||
import net.minecraft.client.render.VisibleRegion;
|
||||
import net.minecraft.entity.Entity;
|
||||
//$$ import net.minecraft.client.render.VisibleRegion;
|
||||
//$$ import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400 && MC<11500
|
||||
import net.minecraft.client.render.Camera;
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -43,118 +43,118 @@ public abstract class Mixin_ForceChunkLoading {
|
||||
public ChunkLoadingRenderGlobal replayModRender_hook;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild;
|
||||
//$$
|
||||
//$$ @Shadow private ChunkBuilder chunkBuilder;
|
||||
//$$
|
||||
//$$ @Shadow private boolean needsTerrainUpdate;
|
||||
//$$
|
||||
//$$ @Shadow public abstract void scheduleTerrainUpdate();
|
||||
//$$
|
||||
//$$ @Shadow protected abstract void setupTerrain(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2);
|
||||
//$$
|
||||
//$$ @Shadow private int frame;
|
||||
//$$
|
||||
//$$ private boolean passThrough;
|
||||
//$$ @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
//$$ private void forceAllChunks(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2, CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook == null) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ if (passThrough) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ ci.cancel();
|
||||
//$$
|
||||
//$$ passThrough = true;
|
||||
//$$ try {
|
||||
//$$ do {
|
||||
//$$ // Determine which chunks shall be visible
|
||||
//$$ setupTerrain(camera_1, frustum_1, boolean_1, frame++, boolean_2);
|
||||
//$$
|
||||
//$$ // Schedule all chunks which need rebuilding (we schedule even important rebuilds because we wait for
|
||||
//$$ // all of them anyway and this way we can take advantage of threading)
|
||||
//$$ for (ChunkBuilder.BuiltChunk builtChunk : this.chunksToRebuild) {
|
||||
//$$ builtChunk.scheduleRebuild(this.chunkBuilder);
|
||||
//$$ builtChunk.cancelRebuild();
|
||||
//$$ }
|
||||
//$$ this.chunksToRebuild.clear();
|
||||
//$$
|
||||
//$$ // Upload all chunks
|
||||
//$$ this.needsTerrainUpdate |= ((ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds) this.chunkBuilder).uploadEverythingBlocking();
|
||||
//$$
|
||||
//$$ // Repeat until no more updates are needed
|
||||
//$$ } while (this.needsTerrainUpdate);
|
||||
//$$ } finally {
|
||||
//$$ passThrough = false;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
private boolean replayModRender_passThroughSetupTerrain;
|
||||
@Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild;
|
||||
|
||||
@Shadow
|
||||
public boolean needsTerrainUpdate;
|
||||
@Shadow private ChunkBuilder chunkBuilder;
|
||||
|
||||
@Shadow
|
||||
public ChunkBuilder chunkBuilder;
|
||||
@Shadow private boolean needsTerrainUpdate;
|
||||
|
||||
@Shadow
|
||||
public abstract void setUpTerrain(
|
||||
//#if MC>=11400
|
||||
Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
VisibleRegion camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator
|
||||
);
|
||||
@Shadow public abstract void scheduleTerrainUpdate();
|
||||
|
||||
@Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_setupTerrain(
|
||||
//#if MC>=11400
|
||||
Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
VisibleRegion camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_hook != null && !replayModRender_passThroughSetupTerrain) {
|
||||
replayModRender_passThroughSetupTerrain = true;
|
||||
@Shadow protected abstract void setupTerrain(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2);
|
||||
|
||||
@Shadow private int frame;
|
||||
|
||||
private boolean passThrough;
|
||||
@Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
private void forceAllChunks(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2, CallbackInfo ci) {
|
||||
if (replayModRender_hook == null) {
|
||||
return;
|
||||
}
|
||||
if (passThrough) {
|
||||
return;
|
||||
}
|
||||
ci.cancel();
|
||||
|
||||
passThrough = true;
|
||||
try {
|
||||
do {
|
||||
setUpTerrain(
|
||||
viewEntity,
|
||||
// Determine which chunks shall be visible
|
||||
setupTerrain(camera_1, frustum_1, boolean_1, frame++, boolean_2);
|
||||
|
||||
// Schedule all chunks which need rebuilding (we schedule even important rebuilds because we wait for
|
||||
// all of them anyway and this way we can take advantage of threading)
|
||||
for (ChunkBuilder.BuiltChunk builtChunk : this.chunksToRebuild) {
|
||||
builtChunk.scheduleRebuild(this.chunkBuilder);
|
||||
builtChunk.cancelRebuild();
|
||||
}
|
||||
this.chunksToRebuild.clear();
|
||||
|
||||
// Upload all chunks
|
||||
this.needsTerrainUpdate |= ((ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds) this.chunkBuilder).uploadEverythingBlocking();
|
||||
|
||||
// Repeat until no more updates are needed
|
||||
} while (this.needsTerrainUpdate);
|
||||
} finally {
|
||||
passThrough = false;
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ private boolean replayModRender_passThroughSetupTerrain;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public boolean needsTerrainUpdate;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public ChunkBuilder chunkBuilder;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public abstract void setUpTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ VisibleRegion camera,
|
||||
//$$ int frameCount,
|
||||
//$$ boolean playerSpectator
|
||||
//$$ );
|
||||
//$$
|
||||
//$$ @Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true)
|
||||
//$$ private void replayModRender_setupTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ VisibleRegion camera,
|
||||
//$$ int frameCount,
|
||||
//$$ boolean playerSpectator,
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_hook != null && !replayModRender_passThroughSetupTerrain) {
|
||||
//$$ replayModRender_passThroughSetupTerrain = true;
|
||||
//$$
|
||||
//$$ do {
|
||||
//$$ setUpTerrain(
|
||||
//$$ viewEntity,
|
||||
//#if MC<11400
|
||||
//$$ partialTicks,
|
||||
//#endif
|
||||
camera,
|
||||
replayModRender_hook.nextFrameId(),
|
||||
playerSpectator
|
||||
);
|
||||
replayModRender_hook.updateChunks();
|
||||
} while (this.needsTerrainUpdate);
|
||||
|
||||
this.needsTerrainUpdate = true;
|
||||
|
||||
replayModRender_passThroughSetupTerrain = false;
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
//$$ camera,
|
||||
//$$ replayModRender_hook.nextFrameId(),
|
||||
//$$ playerSpectator
|
||||
//$$ );
|
||||
//$$ replayModRender_hook.updateChunks();
|
||||
//$$ } while (this.needsTerrainUpdate);
|
||||
//$$
|
||||
//$$ this.needsTerrainUpdate = true;
|
||||
//$$
|
||||
//$$ replayModRender_passThroughSetupTerrain = false;
|
||||
//$$ ci.cancel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//#if MC<10904
|
||||
//$$ @Inject(method = "isPositionInRenderChunk", at = @At("HEAD"), cancellable = true)
|
||||
//$$ public void replayModRender_isPositionInRenderChunk(BlockPos pos, RenderChunk chunk, CallbackInfoReturnable<Boolean> ci) {
|
||||
@@ -163,31 +163,31 @@ public abstract class Mixin_ForceChunkLoading {
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "updateChunks", at = @At("HEAD"), cancellable = true)
|
||||
public void replayModRender_updateChunks(long finishTimeNano, CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateChunks();
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
// Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance
|
||||
//$$
|
||||
//$$ @Inject(method = "updateChunks", at = @At("HEAD"), cancellable = true)
|
||||
//$$ public void replayModRender_updateChunks(long finishTimeNano, CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateChunks();
|
||||
//$$ ci.cancel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance
|
||||
//#if MC>=10904
|
||||
@Inject(method = "setWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/chunk/ChunkBuilder;stop()V"))
|
||||
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(null);
|
||||
}
|
||||
}
|
||||
//$$ @Inject(method = "setWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/chunk/ChunkBuilder;stop()V"))
|
||||
//$$ private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateRenderDispatcher(null);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "reload", at = @At(value = "RETURN"))
|
||||
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(this.chunkBuilder);
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ @Inject(method = "reload", at = @At(value = "RETURN"))
|
||||
//$$ private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateRenderDispatcher(this.chunkBuilder);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class Mixin_SkipBlockOutlinesDuringRender {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
@Inject(method = "drawHighlightedBlockOutline", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "drawBlockOutline", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_drawSelectionBox(CallbackInfo ci) {
|
||||
if (((EntityRendererHandler.IEntityRenderer) this.client.gameRenderer).replayModRender_getHandler() != null) {
|
||||
ci.cancel();
|
||||
|
||||
@@ -10,30 +10,30 @@ import java.util.Set;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
//#else
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public interface WorldRendererAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("field_4076")
|
||||
void setRenderEntitiesStartupCounter(int value);
|
||||
|
||||
//$$ @Accessor("field_4076")
|
||||
//$$ void setRenderEntitiesStartupCounter(int value);
|
||||
//$$
|
||||
//#if MC>=10800
|
||||
@Accessor("chunkBuilder")
|
||||
ChunkBuilder getRenderDispatcher();
|
||||
|
||||
@Accessor("needsTerrainUpdate")
|
||||
void setDisplayListEntitiesDirty(boolean value);
|
||||
|
||||
@Accessor("chunksToRebuild")
|
||||
//$$ @Accessor("chunkBuilder")
|
||||
//$$ ChunkBuilder getRenderDispatcher();
|
||||
//$$
|
||||
//$$ @Accessor("needsTerrainUpdate")
|
||||
//$$ void setDisplayListEntitiesDirty(boolean value);
|
||||
//$$
|
||||
//$$ @Accessor("chunksToRebuild")
|
||||
//#if MC>=11500
|
||||
//$$ Set<BuiltChunk> getChunksToUpdate();
|
||||
//#else
|
||||
Set<ChunkRenderer> getChunksToUpdate();
|
||||
//$$ Set<ChunkRenderer> getChunksToUpdate();
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
Reference in New Issue
Block a user