diff --git a/src/main/java/com/lambda/mixin/render/MixinRenderGlobal.java b/src/main/java/com/lambda/mixin/render/MixinRenderGlobal.java index 08e69085b..9c87939c4 100644 --- a/src/main/java/com/lambda/mixin/render/MixinRenderGlobal.java +++ b/src/main/java/com/lambda/mixin/render/MixinRenderGlobal.java @@ -5,7 +5,10 @@ import com.lambda.client.event.events.RenderEntityEvent; import com.lambda.client.module.modules.player.Freecam; import com.lambda.client.module.modules.render.SelectionHighlight; +import com.lambda.client.util.Wrapper; +import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.ViewFrustum; import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -15,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(RenderGlobal.class) @@ -50,4 +54,16 @@ public BlockPos setupTerrainStoreFlooredChunkPosition(BlockPos playerPos) { return playerPos; } + + @Redirect(method = "setupTerrain", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ViewFrustum;updateChunkPositions(DD)V")) + public void updateSetupTerrain(ViewFrustum viewFrustum, double viewEntityX, double viewEntityZ) { + if (Freecam.INSTANCE.isEnabled()) { + EntityPlayerSP player = Wrapper.getPlayer(); + if (player != null) { + viewEntityX = player.posX; + viewEntityZ = player.posZ; + } + } + viewFrustum.updateChunkPositions(viewEntityX, viewEntityZ); + } } diff --git a/src/main/java/com/lambda/mixin/render/MixinViewFrustum.java b/src/main/java/com/lambda/mixin/render/MixinViewFrustum.java deleted file mode 100644 index 74cc187af..000000000 --- a/src/main/java/com/lambda/mixin/render/MixinViewFrustum.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.lambda.mixin.render; - -import com.lambda.client.module.modules.player.Freecam; -import com.lambda.client.util.Wrapper; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.renderer.ViewFrustum; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.util.math.MathHelper; -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; - -@Mixin(ViewFrustum.class) -public abstract class MixinViewFrustum { - @Shadow public RenderChunk[] renderChunks; - @Shadow protected int countChunksX; - @Shadow protected int countChunksY; - @Shadow protected int countChunksZ; - - @Shadow - protected abstract int getBaseCoordinate(int p_178157_1_, int p_178157_2_, int p_178157_3_); - - @Inject(method = "updateChunkPositions", at = @At("HEAD"), cancellable = true) - public void updateChunkPositionsHead(double viewEntityX, double viewEntityZ, CallbackInfo ci) { - if (Freecam.INSTANCE.isDisabled()) return; - - EntityPlayerSP player = Wrapper.getPlayer(); - if (player == null) return; - - int centerX = MathHelper.floor(player.posX) - 8; - int centerZ = MathHelper.floor(player.posZ) - 8; - - int multipliedCountX = this.countChunksX * 16; - - for (int x = 0; x < this.countChunksX; ++x) { - int posX = this.getBaseCoordinate(centerX, multipliedCountX, x); - - for (int z = 0; z < this.countChunksZ; ++z) { - int poxZ = this.getBaseCoordinate(centerZ, multipliedCountX, z); - - for (int y = 0; y < this.countChunksY; ++y) { - int poxY = y * 16; - RenderChunk renderchunk = this.renderChunks[(z * this.countChunksY + y) * this.countChunksX + x]; - renderchunk.setPosition(posX, poxY, poxZ); - } - } - } - - ci.cancel(); - } -} diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/Freecam.kt b/src/main/kotlin/com/lambda/client/module/modules/player/Freecam.kt index 6b16ac72f..0cc763aa6 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/Freecam.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/Freecam.kt @@ -23,12 +23,13 @@ import com.lambda.client.util.threads.onMainThreadSafe import com.lambda.client.util.threads.runSafeR import com.lambda.client.util.threads.safeListener import kotlinx.coroutines.runBlocking -import net.minecraft.client.entity.EntityOtherPlayerMP import net.minecraft.client.entity.EntityPlayerSP import net.minecraft.client.multiplayer.WorldClient +import net.minecraft.client.network.NetHandlerPlayClient import net.minecraft.entity.Entity import net.minecraft.entity.MoverType import net.minecraft.entity.player.EntityPlayer +import net.minecraft.network.Packet import net.minecraft.network.play.client.CPacketUseEntity import net.minecraft.network.play.server.SPacketEntityHeadLook import net.minecraft.util.MovementInput @@ -265,7 +266,7 @@ object Freecam : Module( } } - private class FakeCamera(world: WorldClient, val player: EntityPlayerSP) : EntityOtherPlayerMP(world, mc.session.profile) { + private class FakeCamera(world: WorldClient, val player: EntityPlayerSP) : EntityPlayerSP(mc, world, NoOpNetHandlerPlayerClient(player.connection), player.statFileWriter, player.recipeBook) { init { copyLocationAndAnglesFrom(player) capabilities.allowFlying = true @@ -276,6 +277,7 @@ object Freecam : Module( // Update inventory inventory.copyInventory(player.inventory) + this.movementInput = MovementInput() // Update yaw head updateEntityActionState() @@ -331,6 +333,12 @@ object Freecam : Module( override fun isInvisibleToPlayer(player: EntityPlayer) = true } + private class NoOpNetHandlerPlayerClient(realNetHandler: NetHandlerPlayClient) : NetHandlerPlayClient(mc, null, realNetHandler.networkManager, realNetHandler.gameProfile) { + override fun sendPacket(packetIn: Packet<*>) { + // no packets from freecam player, thanks + } + } + /** * @param forward * @param strafe diff --git a/src/main/resources/mixins.lambda.json b/src/main/resources/mixins.lambda.json index a67d4dceb..13f8ec477 100644 --- a/src/main/resources/mixins.lambda.json +++ b/src/main/resources/mixins.lambda.json @@ -24,11 +24,11 @@ "accessor.network.AccessorCPacketPlayer", "accessor.network.AccessorCPacketUseEntity", "accessor.network.AccessorSPacketChat", + "accessor.network.AccessorSPacketEntity", + "accessor.network.AccessorSPacketEntityHeadLook", "accessor.network.AccessorSPacketEntityVelocity", "accessor.network.AccessorSPacketExplosion", "accessor.network.AccessorSPacketPosLook", - "accessor.network.AccessorSPacketEntity", - "accessor.network.AccessorSPacketEntityHeadLook", "accessor.player.AccessorEntityPlayerSP", "accessor.player.AccessorPlayerControllerMP", "accessor.render.AccessorRenderGlobal", @@ -75,7 +75,6 @@ "render.MixinTileEntityRendererDispatcher", "render.MixinTileEntitySignRenderer", "render.MixinTileRendererDispatcher", - "render.MixinViewFrustum", "render.MixinVisGraph", "world.MixinBlock", "world.MixinBlockDragonEgg",