Merge branch 'stable' into blend

This commit is contained in:
Jonas Herzig
2018-06-10 19:55:12 +02:00
150 changed files with 2821 additions and 599 deletions

View File

@@ -7,38 +7,68 @@ package com.replaymod.render.mixin;
//$$ import net.minecraft.client.Minecraft;
//$$ import net.minecraft.client.particle.EffectRenderer;
//$$ import net.minecraft.client.particle.EntityFX;
//$$ import net.minecraft.client.renderer.WorldRenderer;
//$$ import net.minecraft.entity.Entity;
//$$ import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Redirect;
//$$
//#if MC>=10800
//$$ import net.minecraft.client.renderer.WorldRenderer;
//#else
//$$ import net.minecraft.client.renderer.Tessellator;
//#endif
//$$
//$$ @Mixin(EffectRenderer.class)
//$$ public abstract class MixinEffectRenderer {
//#if MC>=10800
//#if MC>=10809
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
//#else
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
//#endif
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//#else
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
//$$ private void renderNormalParticle(EntityFX fx, Tessellator tesselator, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, tesselator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//#endif
//$$
//#if MC>=10800
//#if MC>=10809
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
//#else
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
//#endif
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//#else
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
//$$ private void renderLitParticle(EntityFX fx, Tessellator tessellator, float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ renderParticle(fx, tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//$$ }
//#endif
//$$
//$$ private void renderParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
//$$ private void renderParticle(EntityFX fx,
//#if MC>=10800
//$$ WorldRenderer worldRenderer, Entity view,
//#else
//$$ Tessellator tessellator,
//#endif
//$$ float partialTicks,
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
//$$ if (handler != null && handler.omnidirectional) {
//#if MC<=10710
//$$ Entity view = Minecraft.getMinecraft().renderViewEntity;
//#endif
//$$ // Align all particles towards the camera
//$$ double dx = fx.prevPosX + (fx.posX - fx.prevPosX) * partialTicks - view.posX;
//$$ double dy = fx.prevPosY + (fx.posY - fx.prevPosY) * partialTicks - view.posY;
@@ -60,7 +90,11 @@ package com.replaymod.render.mixin;
//#if MC>=10809
//$$ fx.renderParticle(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//#else
//#if MC>=10800
//$$ fx.func_180434_a(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//#else
//$$ fx.renderParticle(tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
//#endif
//#endif
//$$ }
//$$ }

View File

@@ -7,10 +7,10 @@ import com.replaymod.render.hooks.EntityRendererHandler;
import com.replaymod.replay.camera.CameraEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.ReadableColor;
@@ -28,6 +28,14 @@ import net.minecraft.util.math.RayTraceResult;
//$$ import net.minecraft.util.MovingObjectPosition;
//#endif
//#if MC>=10800
import net.minecraft.client.renderer.GlStateManager;
//#else
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
//#endif
import static com.replaymod.core.versions.MCVer.*;
@Mixin(value = EntityRenderer.class)
public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective {
@Shadow
@@ -45,6 +53,17 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
return replayModRender_handler;
}
//#if MC<=10710
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE",target =
//$$ "Lnet/minecraft/client/renderer/RenderGlobal;updateRenderers(Lnet/minecraft/entity/EntityLivingBase;Z)Z"))
//$$ private boolean replayModRender_updateAllChunks(RenderGlobal self, EntityLivingBase view, boolean renderAllChunks) {
//$$ if (replayModRender_handler != null) {
//$$ renderAllChunks = true;
//$$ }
//$$ return self.updateRenderers(view, renderAllChunks);
//$$ }
//#endif
@Inject(method = "setupFog", at = @At("HEAD"), cancellable = true)
private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) {
if (replayModRender_handler == null) return;
@@ -56,7 +75,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
@Inject(method = "orientCamera", at = @At("HEAD"))
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
if (replayModRender_handler != null) {
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
RenderSettings settings = replayModRender_handler.getSettings();
if (settings.isStabilizeYaw()) {
entity.prevRotationYaw = entity.rotationYaw = 0;
@@ -79,7 +98,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
if (replayModRender_handler != null) {
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
orgYaw = entity.rotationYaw;
orgPitch = entity.rotationPitch;
orgPrevYaw = entity.prevRotationYaw;
@@ -91,7 +110,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
if (replayModRender_handler != null) {
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
entity.rotationYaw = orgYaw;
entity.rotationPitch = orgPitch;
entity.prevRotationYaw = orgPrevYaw;
@@ -109,7 +128,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
ci.cancel();
return; // No spectator hands during 360° view, we wouldn't even know where to put it
}
Entity currentEntity = Minecraft.getMinecraft().getRenderViewEntity();
Entity currentEntity = getRenderViewEntity(Minecraft.getMinecraft());
if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) {
if (renderPass == 2) { // Need to update render pass
renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0;
@@ -127,7 +146,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
//#else
//#if MC>=10800
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
//#else
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
//#endif
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
//#endif
if (replayModRender_handler == null) {
@@ -137,7 +160,12 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
private int orgRenderDistanceChunks;
//#if MC>=10800
@Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
//#else
//$$ @Inject(method = "renderWorld", at = @At(value = "INVOKE", ordinal = 0, shift = At.Shift.AFTER,
//$$ target = "Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;getInstance()Lnet/minecraft/client/renderer/culling/ClippingHelper;"))
//#endif
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
GameSettings settings = Minecraft.getMinecraft().gameSettings;
@@ -146,15 +174,24 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
}
}
//#if MC>=10800
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
//#else
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V"))
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks) {
//#endif
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks;
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT);
} else {
//#if MC>=10800
instance.renderSky(partialTicks, renderPass);
//#else
//$$ instance.renderSky(partialTicks);
//#endif
}
}
@@ -162,7 +199,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
* Stereoscopic Renderer
*/
//#if MC>=10800
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/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, int renderPass, CallbackInfo ci) {
if (replayModRender_getHandler() != null) {
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
@@ -173,7 +214,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
}
}
//#if MC>=10800
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/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, int renderPass, CallbackInfo ci) {
if (replayModRender_getHandler() != null) {
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
@@ -193,15 +238,21 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
}
//#if MC>=10800
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
//#else
//$$ @Redirect(method = "renderHand", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
//#endif
private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) {
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
}
//#if MC>=10800
@Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) {
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
}
//#endif
@Override
public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) {

View File

@@ -2,13 +2,22 @@ package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.culling.Frustum;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
//#if MC>=10800
import net.minecraft.client.renderer.culling.Frustum;
//#else
//$$ import net.minecraft.client.renderer.culling.Frustrum;
//#endif
//#if MC>=10800
@Mixin(Frustum.class)
//#else
//$$ @Mixin(Frustrum.class)
//#endif
public abstract class MixinFrustum {
@Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true)
public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable<Boolean> ci) {

View File

@@ -0,0 +1,18 @@
//#if MC<=10710
//$$ package com.replaymod.render.mixin;
//$$
//$$ import com.replaymod.render.hooks.GLStateTracker;
//$$ import net.minecraft.client.renderer.OpenGlHelper;
//$$ import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$
//$$ @Mixin(OpenGlHelper.class)
//$$ public abstract class MixinOpenGlHelper {
//$$ @Inject(method = "setActiveTexture", at = @At("RETURN"))
//$$ private static void replayModRender_trackActiveTexture(int magic, CallbackInfo ci) {
//$$ GLStateTracker.getInstance().updateActiveTexture(magic);
//$$ }
//$$ }
//#endif

View File

@@ -1,3 +1,4 @@
//#if MC>=10800
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
@@ -9,6 +10,7 @@ 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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC<10904
@@ -66,4 +68,19 @@ public abstract class MixinRenderGlobal {
ci.cancel();
}
}
@Inject(method = "setWorldAndLoadRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher;stopWorkerThreads()V"))
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
if (replayModRender_hook != null) {
replayModRender_hook.updateRenderDispatcher(null);
}
}
@Inject(method = "loadRenderers", at = @At(value = "RETURN"))
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
if (replayModRender_hook != null) {
replayModRender_hook.updateRenderDispatcher(renderDispatcher);
}
}
}
//#endif