Загрузка данных
==================================================
FILE: FreeOrbitCameraClient.java
PATH: src/main/java/com/example/freeorbitcamera/FreeOrbitCameraClient.java
==================================================
package com.example.freeorbitcamera;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.lwjgl.glfw.GLFW;
public class FreeOrbitCameraClient implements ClientModInitializer {
public static boolean enabled = false;
public static float cameraYaw;
public static float cameraPitch = 10.0F;
private KeyBinding toggleKey;
@Override
public void onInitializeClient() {
toggleKey = KeyBindingHelper.registerKeyBinding(
new KeyBinding(
"key.freeorbitcamera.toggle",
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_LEFT_ALT,
KeyBinding.Category.MISC
)
);
ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (toggleKey.wasPressed()) {
enabled = !enabled;
if (enabled && client.player != null) {
cameraYaw = client.player.getYaw();
cameraPitch = client.player.getPitch();
}
}
});
}
public static void rotateCamera(double deltaX, double deltaY) {
cameraYaw += (float) deltaX * 0.15F;
cameraPitch += (float) deltaY * 0.15F;
cameraPitch = Math.max(-89.0F, Math.min(89.0F, cameraPitch));
}
}
==================================================
FILE: MouseMixin.java
PATH: src/main/java/com/example/freeorbitcamera/mixin/MouseMixin.java
==================================================
package com.example.freeorbitcamera.mixin;
import com.example.freeorbitcamera.FreeOrbitCameraClient;
import net.minecraft.client.Mouse;
import net.minecraft.client.network.ClientPlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Mouse.class)
public abstract class MouseMixin {
@Redirect(
method = "updateMouse",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/network/ClientPlayerEntity;changeLookDirection(DD)V"
)
)
private void freeorbitcamera$mouseLook(
ClientPlayerEntity player,
double deltaX,
double deltaY
) {
if (FreeOrbitCameraClient.enabled) {
FreeOrbitCameraClient.rotateCamera(deltaX, deltaY);
} else {
player.changeLookDirection(deltaX, deltaY);
}
}
}
==================================================
FILE: CameraMixin.java
PATH: src/main/java/com/example/freeorbitcamera/mixin/CameraMixin.java
==================================================
package com.example.freeorbitcamera.mixin;
import com.example.freeorbitcamera.FreeOrbitCameraClient;
import net.minecraft.client.render.Camera;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Camera.class)
public abstract class CameraMixin {
@Redirect(
method = "update",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/Camera;setRotation(FF)V"
)
)
private void freeorbitcamera$orbitCamera(
Camera camera,
float yaw,
float pitch
) {
if (FreeOrbitCameraClient.enabled) {
camera.setRotation(
FreeOrbitCameraClient.cameraYaw,
FreeOrbitCameraClient.cameraPitch
);
} else {
camera.setRotation(yaw, pitch);
}
}
}
==================================================
FILE: fabric.mod.json
PATH: src/main/resources/fabric.mod.json
==================================================
{
"schemaVersion": 1,
"id": "freeorbitcamera",
"version": "1.0.0",
"name": "Free Orbit Camera",
"description": "Free camera rotation around the player",
"environment": "client",
"entrypoints": {
"client": [
"com.example.freeorbitcamera.FreeOrbitCameraClient"
]
},
"mixins": [
"freeorbitcamera.mixins.json"
],
"depends": {
"fabricloader": ">=0.16.0",
"minecraft": "1.21.4",
"java": ">=21",
"fabric-api": "*"
}
}
==================================================
FILE: freeorbitcamera.mixins.json
PATH: src/main/resources/freeorbitcamera.mixins.json
==================================================
{
"required": true,
"package": "com.example.freeorbitcamera.mixin",
"compatibilityLevel": "JAVA_21",
"client": [
"MouseMixin",
"CameraMixin"
],
"injectors": {
"defaultRequire": 1
}
}