chromatic/Freelook
2
1
Fork
You've already forked Freelook
0
📷 Allows you to rotate your camera freely around your character! https://modrinth.com/mod/freelook-oneconfig
  • Java 100%
Find a file
awruff 0faba22c1a
2.1.0 beta 4
- Now supports 26.2!
- Mark fabric api dependency (oops)
- Update icon
2026年06月18日 23:45:42 -04:00
gradle/wrapper migrate to stonecutter 2026年06月05日 11:26:33 -04:00
src/main 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
.gitignore migrate to stonecutter 2026年06月05日 11:26:33 -04:00
build.gradle.kts 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
CHANGELOG.md 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
gradle.properties 2.1.0 beta 2 2026年06月08日 22:20:10 -04:00
gradlew [1.21.5] Get started on modern port 2026年02月07日 18:41:01 -05:00
gradlew.bat [1.21.5] Get started on modern port 2026年02月07日 18:41:01 -05:00
LICENSE Initial Commit 2025年03月04日 16:06:02 -05:00
README.md 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
settings.gradle.kts 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
stonecutter.gradle.kts 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00
stonecutter.properties.toml 2.1.0 beta 4 2026年06月18日 23:45:42 -04:00

Freelook Mod

Allows you to rotate your camera freely around your character!


Features

  • Multiple Camera Perspectives
  • Customizable Activation Style
  • Camera Cycle Integration
  • Smooth Transitions

Server Opt-Opt

Some servers may consider freelook a competitive advantage. As of 2.0.0, Freelook includes a simple opt‐out protocol.

How it works

  1. When a player joins, the client sends a freelook:handshake packet.
  2. If the server wants to disable freelook, it responds with a freelook:disable packet.
  3. Then the player cannot use freelook for that session.
Click to expand code example
publicclass ExampleimplementsModInitializer{@OverridepublicvoidonInitialize(){PayloadTypeRegistry.clientboundPlay().register(DisableModPayload.TYPE,DisableModPayload.CODEC);PayloadTypeRegistry.serverboundPlay().register(HandshakePayload.TYPE,HandshakePayload.CODEC);ServerPlayNetworking.registerGlobalReceiver(HandshakePayload.TYPE,(payload,ctx)->ServerPlayNetworking.send(ctx.player(),newDisableModPayload()));}publicrecord DisableModPayload()implementsCustomPacketPayload{publicstaticfinalType<DisableModPayload>TYPE=newType<>(Identifier.parse("freelook:disable"));publicstaticfinalStreamCodec<RegistryFriendlyByteBuf,DisableModPayload>CODEC=StreamCodec.unit(newDisableModPayload());@OverridepublicType<?extendsCustomPacketPayload>type(){returnTYPE;}}publicrecord HandshakePayload()implementsCustomPacketPayload{publicstaticfinalType<HandshakePayload>TYPE=newType<>(Identifier.parse("freelook:handshake"));publicstaticfinalStreamCodec<RegistryFriendlyByteBuf,HandshakePayload>CODEC=StreamCodec.unit(newHandshakePayload());@OverridepublicType<?extendsCustomPacketPayload>type(){returnTYPE;}}}

Code licensed under LGPL 3.0.