./gradlew :1.15.2:setCoreVersion

Also `./gradlew :jGui:1.15.2:setCoreVersion`.
This commit is contained in:
Jonas Herzig
2020-04-06 12:35:56 +02:00
parent f3c4092c72
commit b119d2d127
70 changed files with 1217 additions and 1217 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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 =

View File

@@ -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();

View File

@@ -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

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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();

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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();

View File

@@ -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