FilmCraft
Vytvoř mi Minecraft mod pro NeoForge 1.21.1, který bude sloužit jako lehký, ale komplexní nástroj pro filmové natáčení (machinima) v Minecraftu. Cílem je umožnit jednomu uživateli (režisérovi / kameramanovi) natáčet plynulé, profesionálně vypadající záběry bez nutnosti dalších hráčů nebo složitého nastavování. Mod musí splňovat následující požadavky: 1. KAMERA A POHYB - Freecam mód: Možnost odpojit kameru od postavy a volně létat scénou. - Smooth pohyb: Kamera se pohybuje plynule, bez trhání (vyhlazený pohyb jako v ReplayModu).
Read the full description
- Rychlost letu: Možnost plynule měnit rychlost letu (pomalé pro detailní záběry, rychlejší pro průlety). - Cinematic zoom: Plynulé přibližování a oddalování pomocí kolečka myši (s možností nastavit rychlost zoomu). 2. NAHRÁVÁNÍ A PŘEHRÁVÁNÍ - Nahrávání pohybu: Možnost nahrát pohyb kamery a postav (hráčů/NPC) do souboru. - Přehrávání: Možnost přehrát nahraný pohyb (např. pro opakování stejného záběru). - Časová osa: Jednoduchá časová osa s možností posouvat se v čase (vpřed / vzad). 3. NPC A HERCI - Jednoduché NPC: Možnost vytvořit NPC postavu s vybraným skinem a jménem. - Pohyb po trase: NPC se dá naprogramovat, aby chodilo po předem určené trase (waypoints). - Animace: NPC umí základní animace (stát, chodit, sedět, mávat). 4. UŽIVATELSKÉ ROZHRANÍ (GUI) A OVLÁDÁNÍ - Hlavní GUI: Otevírá se klávesou (výchozí např. 'M' nebo 'J'), ale klávesa musí jít změnit v nastavení. - Settings / Možnosti: Mod musí mít vlastní sekci v Minecraft nastavení (Options → Controls → FilmCraft), kde půjde: * Změnit klávesu pro otevření GUI. * Nastavit rychlost freecamu (pomalá / střední / rychlá). * Nastavit rychlost zoomu. * Zapnout/vypnout smooth pohyb. - Ovládací tlačítka v GUI: Nahrávání, přehrávání, freecam, zoom, vytvoření NPC, nastavení trasy. 5. STABILITA A VÝKON - Mod musí být stabilní na NeoForge 1.21.1 a nesmí způsobovat lagy. - Nahrávání a přehrávání musí být optimalizované, aby nezpomalovalo hru. 6. JEDNODUCHÉ POUŽITÍ - Mod musí být snadno použitelný i pro začátečníky (žádné složité příkazy, vše přes GUI nebo klávesy). - Stačí nainstalovat a používat bez dalšího nastavování. Mod pojmenuj "FilmCraft" a vytvoř ho jako jeden .jar soubor.
package eu.codexe.filmcraft.client.camera;
import net.minecraft.client.Minecraft;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class FreecamController {
private boolean freecamEnabled = false;
private Vec3 freecamPosition = new Vec3(0, 0, 0);
private float freecamYaw = 0;
private float freecamPitch = 0;
private float currentSpeed = 0.1f;
private float targetSpeed = 0.1f;
private float zoom = 1.0f;
private float targetZoom = 1.0f;
private final Minecraft minecraft;
public FreecamController(Minecraft minecraft) {
this.minecraft = minecraft;
}
public void toggleFreecam() {
if (freecamEnabled) {
disableFreecam();
} else {
enableFreecam();
}
}
public void enableFreecam() {
if (minecraft.player == null) return;
freecamEnabled = true;
freecamPosition = minecraft.player.getEyePosition();
freecamYaw = minecraft.player.getYRot();
freecamPitch = minecraft.player.getXRot();
}
public void disableFreecam() {
freecamEnabled = false;
}
public void updateFreecamPosition(double forward, double strafe, double vertical) {
if (!freecamEnabled || minecraft.player == null) return;
targetSpeed = Math.max(0.01f, Math.min(0.5f, targetSpeed));
currentSpeed = currentSpeed + (targetSpeed - currentSpeed) * 0.1f;
double yawRad = Math.toRadians(freecamYaw);
double forwardX = Math.sin(yawRad) * forward;
double forwardZ = Math.cos(yawRad) * forward;
double strafeX = Math.sin(yawRad - Math.PI / 2) * strafe;
double strafeZ = Math.cos(yawRad - Math.PI / 2) * strafe;
Vec3 movement = new Vec3(
(forwardX + strafeX) * currentSpeed,
vertical * currentSpeed,
(forwardZ + strafeZ) * currentSpeed
);