Skip to content

Commit c593f8a

Browse files
authored
Freecam Schematica Compatibility (#481)
1 parent 9b5e426 commit c593f8a

File tree

4 files changed

+28
-58
lines changed

4 files changed

+28
-58
lines changed

src/main/java/com/lambda/mixin/render/MixinRenderGlobal.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
import com.lambda.client.event.events.RenderEntityEvent;
66
import com.lambda.client.module.modules.player.Freecam;
77
import com.lambda.client.module.modules.render.SelectionHighlight;
8+
import com.lambda.client.util.Wrapper;
9+
import net.minecraft.client.entity.EntityPlayerSP;
810
import net.minecraft.client.renderer.RenderGlobal;
11+
import net.minecraft.client.renderer.ViewFrustum;
912
import net.minecraft.client.renderer.culling.ICamera;
1013
import net.minecraft.entity.Entity;
1114
import net.minecraft.entity.player.EntityPlayer;
@@ -15,6 +18,7 @@
1518
import org.spongepowered.asm.mixin.injection.At;
1619
import org.spongepowered.asm.mixin.injection.Inject;
1720
import org.spongepowered.asm.mixin.injection.ModifyVariable;
21+
import org.spongepowered.asm.mixin.injection.Redirect;
1822
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1923

2024
@Mixin(RenderGlobal.class)
@@ -50,4 +54,16 @@ public BlockPos setupTerrainStoreFlooredChunkPosition(BlockPos playerPos) {
5054

5155
return playerPos;
5256
}
57+
58+
@Redirect(method = "setupTerrain", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ViewFrustum;updateChunkPositions(DD)V"))
59+
public void updateSetupTerrain(ViewFrustum viewFrustum, double viewEntityX, double viewEntityZ) {
60+
if (Freecam.INSTANCE.isEnabled()) {
61+
EntityPlayerSP player = Wrapper.getPlayer();
62+
if (player != null) {
63+
viewEntityX = player.posX;
64+
viewEntityZ = player.posZ;
65+
}
66+
}
67+
viewFrustum.updateChunkPositions(viewEntityX, viewEntityZ);
68+
}
5369
}

src/main/java/com/lambda/mixin/render/MixinViewFrustum.java

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/main/kotlin/com/lambda/client/module/modules/player/Freecam.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ import com.lambda.client.util.threads.onMainThreadSafe
2323
import com.lambda.client.util.threads.runSafeR
2424
import com.lambda.client.util.threads.safeListener
2525
import kotlinx.coroutines.runBlocking
26-
import net.minecraft.client.entity.EntityOtherPlayerMP
2726
import net.minecraft.client.entity.EntityPlayerSP
2827
import net.minecraft.client.multiplayer.WorldClient
28+
import net.minecraft.client.network.NetHandlerPlayClient
2929
import net.minecraft.entity.Entity
3030
import net.minecraft.entity.MoverType
3131
import net.minecraft.entity.player.EntityPlayer
32+
import net.minecraft.network.Packet
3233
import net.minecraft.network.play.client.CPacketUseEntity
3334
import net.minecraft.network.play.server.SPacketEntityHeadLook
3435
import net.minecraft.util.MovementInput
@@ -265,7 +266,7 @@ object Freecam : Module(
265266
}
266267
}
267268

268-
private class FakeCamera(world: WorldClient, val player: EntityPlayerSP) : EntityOtherPlayerMP(world, mc.session.profile) {
269+
private class FakeCamera(world: WorldClient, val player: EntityPlayerSP) : EntityPlayerSP(mc, world, NoOpNetHandlerPlayerClient(player.connection), player.statFileWriter, player.recipeBook) {
269270
init {
270271
copyLocationAndAnglesFrom(player)
271272
capabilities.allowFlying = true
@@ -276,6 +277,7 @@ object Freecam : Module(
276277
// Update inventory
277278
inventory.copyInventory(player.inventory)
278279

280+
this.movementInput = MovementInput()
279281
// Update yaw head
280282
updateEntityActionState()
281283

@@ -331,6 +333,12 @@ object Freecam : Module(
331333
override fun isInvisibleToPlayer(player: EntityPlayer) = true
332334
}
333335

336+
private class NoOpNetHandlerPlayerClient(realNetHandler: NetHandlerPlayClient) : NetHandlerPlayClient(mc, null, realNetHandler.networkManager, realNetHandler.gameProfile) {
337+
override fun sendPacket(packetIn: Packet<*>) {
338+
// no packets from freecam player, thanks
339+
}
340+
}
341+
334342
/**
335343
* @param forward <Forward, Backward>
336344
* @param strafe <Left, Right>

src/main/resources/mixins.lambda.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
"accessor.network.AccessorCPacketPlayer",
2525
"accessor.network.AccessorCPacketUseEntity",
2626
"accessor.network.AccessorSPacketChat",
27+
"accessor.network.AccessorSPacketEntity",
28+
"accessor.network.AccessorSPacketEntityHeadLook",
2729
"accessor.network.AccessorSPacketEntityVelocity",
2830
"accessor.network.AccessorSPacketExplosion",
2931
"accessor.network.AccessorSPacketPosLook",
30-
"accessor.network.AccessorSPacketEntity",
31-
"accessor.network.AccessorSPacketEntityHeadLook",
3232
"accessor.player.AccessorEntityPlayerSP",
3333
"accessor.player.AccessorPlayerControllerMP",
3434
"accessor.render.AccessorRenderGlobal",
@@ -75,7 +75,6 @@
7575
"render.MixinTileEntityRendererDispatcher",
7676
"render.MixinTileEntitySignRenderer",
7777
"render.MixinTileRendererDispatcher",
78-
"render.MixinViewFrustum",
7978
"render.MixinVisGraph",
8079
"world.MixinBlock",
8180
"world.MixinBlockDragonEgg",

0 commit comments

Comments
 (0)