aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
diff options
context:
space:
mode:
authormakamys <makamys@outlook.com>2022-06-09 12:57:52 +0200
committermakamys <makamys@outlook.com>2022-06-09 12:57:52 +0200
commit5bea63de0d78487b91dd701a8f6931b9314f2be5 (patch)
tree9a23fc91c986d8763b31c48f670b812e9ce24c8a /src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
parent5820fe56fb4022ddda044a8fe502b59e18147836 (diff)
downloadNeodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.tar.gz
Neodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.tar.bz2
Neodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.zip
Rebrand pt. 1: Rename mod to Neodymium
Diffstat (limited to 'src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java')
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java181
1 files changed, 0 insertions, 181 deletions
diff --git a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java b/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
deleted file mode 100644
index 5753798..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package makamys.lodmod.mixin;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.lwjgl.opengl.GL11;
-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;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-import makamys.lodmod.LODMod;
-import makamys.lodmod.ducks.IWorldRenderer;
-import makamys.lodmod.renderer.ChunkMesh;
-import makamys.lodmod.renderer.FarChunkCache;
-import makamys.lodmod.renderer.FarWorldRenderer;
-import makamys.lodmod.renderer.LODRenderer;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.client.renderer.entity.RenderItem;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.world.ChunkCache;
-import net.minecraft.world.World;
-
-@Mixin(WorldRenderer.class)
-abstract class MixinWorldRenderer implements IWorldRenderer {
-
- @Shadow
- public int posX;
- @Shadow
- public int posY;
- @Shadow
- public int posZ;
-
- @Shadow
- private boolean isInFrustum;
- @Shadow
- public boolean[] skipRenderPass;
- @Shadow
- private int glRenderList;
-
- @Shadow
- public boolean needsUpdate;
-
- boolean savedDrawnStatus;
-
- public List<ChunkMesh> chunkMeshes;
-
- @Redirect(method = "setPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RenderItem;renderAABB(Lnet/minecraft/util/AxisAlignedBB;)V"))
- private void redirectRenderAABB(AxisAlignedBB p1) {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- RenderItem.renderAABB(p1);
- }
- }
-
- @Redirect(method = "updateRenderer", at = @At(value = "NEW", target = "Lnet/minecraft/world/ChunkCache;"))
- private ChunkCache redirectConstructChunkCache(World p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8) {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- return new ChunkCache(p1, p2, p3, p4, p5, p6, p7, p8);
- } else {
- return new FarChunkCache(p1, p2, p3, p4, p5, p6, p7, p8);
- }
- }
-
- @Inject(method = "updateRenderer", at = @At(value = "HEAD"))
- private void preUpdateRenderer(CallbackInfo ci) {
- saveDrawnStatus();
-
- if(LODMod.isActive()) {
- if(needsUpdate) {
- if(chunkMeshes != null) {
- chunkMeshes.clear();
- } else {
- chunkMeshes = new ArrayList<>();
- }
- } else {
- chunkMeshes = null;
- }
- }
- }
-
- @Inject(method = "updateRenderer", at = @At(value = "RETURN"))
- private void postUpdateRenderer(CallbackInfo ci) {
- notifyIfDrawnStatusChanged();
-
- if(LODMod.isActive()) {
- if(chunkMeshes != null) {
- LODMod.renderer.onWorldRendererPost(WorldRenderer.class.cast(this));
- chunkMeshes.clear();
- }
- }
- }
-
- @Inject(method = "postRenderBlocks", at = @At(value = "HEAD"))
- private void prePostRenderBlocks(int pass, EntityLivingBase entity, CallbackInfo ci) {
- if(LODMod.isActive() && !LODMod.disableChunkMeshes) {
- if(chunkMeshes != null) {
- chunkMeshes.add(ChunkMesh.fromTessellator(pass, WorldRenderer.class.cast(this), Tessellator.instance));
- }
- }
- }
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Tessellator;draw()I"))
- private int redirectPostRenderBlocksDraw() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- return Tessellator.instance.draw();
- } else {
- Tessellator.instance.reset();
- return 0;
- }
- }
-
- // There's probably a nicer way to do this
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glPopMatrix()V"))
- private void redirectPostRenderBlocksGL1() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- GL11.glPopMatrix();
- }
- }
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glEndList()V"))
- private void redirectPostRenderBlocksGL2() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- GL11.glEndList();
- }
- }
-
- // XXX this is inconsistent, Forge callbacks are preserved in postRenderBlocks but not preRenderBlocks
-
- @Inject(method = "preRenderBlocks", at = @At(value = "HEAD"))
- private void preRenderBlocksInjector(CallbackInfo ci) {
- if(FarWorldRenderer.class.isInstance(this.getClass())) {
- Tessellator.instance.setTranslation((double)(-this.posX), (double)(-this.posY), (double)(-this.posZ));
- ci.cancel();
- }
- }
-
- @Inject(method = "setDontDraw", at = @At(value = "HEAD"))
- private void preSetDontDraw(CallbackInfo ci) {
- if(LODMod.isActive()) {
- LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), LODRenderer.WorldRendererChange.DELETED);
- }
- }
-
- @Override
- public List<ChunkMesh> getChunkMeshes() {
- return chunkMeshes;
- }
-
- @Inject(method = "updateInFrustum", at = @At(value = "HEAD"))
- private void preUpdateInFrustum(CallbackInfo ci) {
- saveDrawnStatus();
- }
-
- @Inject(method = "updateInFrustum", at = @At(value = "RETURN"))
- private void postUpdateInFrustum(CallbackInfo ci) {
- notifyIfDrawnStatusChanged();
- }
-
- private void saveDrawnStatus() {
- savedDrawnStatus = isDrawn();
- }
-
- private void notifyIfDrawnStatusChanged() {
- boolean drawn = isDrawn();
- if(LODMod.isActive() && drawn != savedDrawnStatus) {
- LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), drawn ? LODRenderer.WorldRendererChange.VISIBLE : LODRenderer.WorldRendererChange.INVISIBLE);
- }
- }
-
- @Override
- public boolean isDrawn() {
- return isInFrustum && (!skipRenderPass[0] || !skipRenderPass[1]);
- }
-}