Replace all ATs with Mixin on 1.13+ in preparation for Fabric

This commit is contained in:
Jonas Herzig
2019-04-26 11:20:31 +02:00
parent d5b9e60c4d
commit 17fe5b345f
67 changed files with 1035 additions and 399 deletions

View File

@@ -0,0 +1,34 @@
//#if MC>=10800
package com.replaymod.render.mixin;
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
import net.minecraft.client.renderer.chunk.ChunkRenderTask;
import net.minecraft.client.renderer.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;
//#else
//$$ import java.util.concurrent.BlockingQueue;
//#endif
@Mixin(ChunkRenderDispatcher.class)
public interface ChunkRenderDispatcherAccessor {
@Accessor
List<ChunkRenderWorker> getListThreadedWorkers();
//#if MC>=10904
@Accessor
PriorityBlockingQueue<ChunkRenderTask> getQueueChunkUpdates();
@Accessor
void setQueueChunkUpdates(PriorityBlockingQueue<ChunkRenderTask> value);
//#else
//$$ @Accessor
//$$ BlockingQueue<ChunkCompileTaskGenerator> getQueueChunkUpdates();
//$$ @Accessor
//$$ void setQueueChunkUpdates(BlockingQueue<ChunkCompileTaskGenerator> value);
//#endif
}
//#endif

View File

@@ -0,0 +1,15 @@
//#if MC>=11300
package com.replaymod.render.mixin;
import net.minecraft.client.MainWindow;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(MainWindow.class)
public interface MainWindowAccessor {
@Accessor
void setFramebufferWidth(int value);
@Accessor
void setFramebufferHeight(int value);
}
//#endif

View File

@@ -0,0 +1,42 @@
//#if MC>=10800
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.FogStateCallback;
import com.replaymod.render.hooks.Texture2DStateCallback;
import net.minecraft.client.renderer.GlStateManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(GlStateManager.class)
public class MixinGlStateManager {
//#if MC>=11300
@Accessor
//#else
//$$ @Accessor("activeTextureUnit")
//#endif
private static int getActiveTexture() { return 0; }
@Inject(method = "enableFog", at = @At("HEAD"))
private static void enableFog(CallbackInfo ci) {
FogStateCallback.EVENT.invoker().fogStateChanged(true);
}
@Inject(method = "disableFog", at = @At("HEAD"))
private static void disableFog(CallbackInfo ci) {
FogStateCallback.EVENT.invoker().fogStateChanged(false);
}
@Inject(method = "enableTexture2D", at = @At("HEAD"))
private static void enableTexture2D(CallbackInfo ci) {
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(getActiveTexture(), true);
}
@Inject(method = "disableTexture2D", at = @At("HEAD"))
private static void disableTexture2D(CallbackInfo ci) {
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(getActiveTexture(), false);
}
}
//#endif

View File

@@ -4,6 +4,7 @@ package com.replaymod.render.mixin;
import com.replaymod.core.versions.MCVer;
import com.replaymod.render.blend.BlendState;
import com.replaymod.render.blend.exporters.ParticlesExporter;
import com.replaymod.render.blend.mixin.ParticleAccessor;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleManager;
@@ -51,9 +52,10 @@ public abstract class MixinParticleManager {
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
if (handler != null && handler.omnidirectional) {
// Align all particles towards the camera
double dx = particle.prevPosX + (particle.posX - particle.prevPosX) * partialTicks - view.posX;
double dy = particle.prevPosY + (particle.posY - particle.prevPosY) * partialTicks - view.posY;
double dz = particle.prevPosZ + (particle.posZ - particle.prevPosZ) * partialTicks - view.posZ;
ParticleAccessor acc = (ParticleAccessor) particle;
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * partialTicks - view.posX;
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * partialTicks - view.posY;
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * partialTicks - view.posZ;
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
double yaw = -Math.atan2(dx, dz);

View File

@@ -0,0 +1,29 @@
package com.replaymod.render.mixin;
import net.minecraft.client.renderer.WorldRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Set;
//#if MC>=10800
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
import net.minecraft.client.renderer.chunk.RenderChunk;
//#endif
@Mixin(WorldRenderer.class)
public interface WorldRendererAccessor {
@Accessor
void setRenderEntitiesStartupCounter(int value);
//#if MC>=10800
@Accessor
ChunkRenderDispatcher getRenderDispatcher();
@Accessor
void setDisplayListEntitiesDirty(boolean value);
@Accessor
Set<RenderChunk> getChunksToUpdate();
//#endif
}