Fix path preview rendering in 1.15

This commit is contained in:
Jonas Herzig
2020-04-01 14:27:54 +02:00
parent b11b9db548
commit 4116a3a7c9
3 changed files with 48 additions and 9 deletions

View File

@@ -3,15 +3,31 @@ package com.replaymod.core.events;
import de.johni0702.minecraft.gui.utils.Event;
//#if MC>=11500
//$$ import net.minecraft.client.util.math.MatrixStack;
//#endif
public interface PostRenderWorldCallback {
Event<PostRenderWorldCallback> EVENT = Event.create((listeners) ->
//#if MC>=11500
//$$ (MatrixStack matrixStack) -> {
//#else
() -> {
//#endif
for (PostRenderWorldCallback listener : listeners) {
listener.postRenderWorld();
listener.postRenderWorld(
//#if MC>=11500
//$$ matrixStack
//#endif
);
}
}
);
void postRenderWorld();
void postRenderWorld(
//#if MC>=11500
//$$ MatrixStack matrixStack
//#endif
);
}
//#endif

View File

@@ -30,7 +30,11 @@ public class MixinGameRenderer {
//$$ MatrixStack matrixStack,
//#endif
CallbackInfo ci) {
PostRenderWorldCallback.EVENT.invoker().postRenderWorld();
PostRenderWorldCallback.EVENT.invoker().postRenderWorld(
//#if MC>=11500
//$$ matrixStack
//#endif
);
}
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)

View File

@@ -24,6 +24,11 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import org.lwjgl.opengl.GL11;
//#if MC>=11500
//$$ import com.mojang.blaze3d.systems.RenderSystem;
//$$ import net.minecraft.client.util.math.MatrixStack;
//#endif
//#if FABRIC>=1
import com.replaymod.core.events.PostRenderWorldCallback;
//#else
@@ -55,7 +60,11 @@ public class PathPreviewRenderer extends EventRegistrations {
//#if FABRIC>=1
{ on(PostRenderWorldCallback.EVENT, this::renderCameraPath); }
//#if MC>=11500
//$$ private void renderCameraPath(MatrixStack matrixStack) {
//#else
private void renderCameraPath() {
//#endif
//#else
//$$ @SubscribeEvent
//$$ public void renderCameraPath(RenderWorldLastEvent event) {
@@ -80,18 +89,27 @@ public class PathPreviewRenderer extends EventRegistrations {
int renderDistance = mc.options.viewDistance * 16;
int renderDistanceSquared = renderDistance * renderDistance;
//#if MC>=10800
Triple<Double, Double, Double> viewPos = Triple.of(
Entity_getX(view),
//#if MC>=10800 && MC<11500
// Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height)
Triple<Double, Double, Double> viewPos = Triple.of(Entity_getX(view), Entity_getY(view) - view.getStandingEyeHeight(), Entity_getZ(view));
Entity_getY(view) - view.getStandingEyeHeight(),
//#else
//$$ Triple<Double, Double, Double> viewPos = Triple.of(view.posX, view.posY, view.posZ);
//$$ Entity_getY(view),
//#endif
Entity_getZ(view)
);
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glPushMatrix();
try {
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_TEXTURE_2D);
//#if MC>=11500
//$$ RenderSystem.multMatrix(matrixStack.peek().getModel());
//#endif
for (PathSegment segment : path.getSegments()) {
Interpolator interpolator = segment.getInterpolator();
Keyframe start = segment.getStartKeyframe();
@@ -180,6 +198,7 @@ public class PathPreviewRenderer extends EventRegistrations {
}
}
} finally {
GL11.glPopMatrix();
GlStateManager.popAttributes();
}
}