immersive_cinematics-forge-0.3.3.jar
Curse Maven Snippet
What's new
[0.3.3] - 2026-07-26
Architectury 多平台迁移 + 编辑器交互大优化 + 播放器数据对齐。
Added — 编辑器交互
- 缩放系统:Ctrl+滚轮以鼠标位置为中心缩放(每步25%),滚轮=水平滚动,Ctrl+0 重置为 1:1
- 播放头与标尺:纵贯全轨道的红色竖线 + 三角形指示器,标尺主/次刻度线,点击空白处跳转播放头
- 多轨道渲染:5 种轨道(CAMERA/LETTERBOX/AUDIO/EVENT/MOD_EVENT)全部独立显示,左侧标签列 + 颜色标记 + 分隔线 + 空轨道提示
- 视觉设计:clip 按轨道类型着色(蓝/绿/黄/红/紫),3D 凸起边框,选中态金色左侧条,clip 名称标签
- 拖拽吸附:半透明 ghost 拖拽预览,8px 阈值吸附到播放头/clip 边缘,金色闪烁吸附指示器
- 框选与多选:矩形框选(蓝色半透明)选中范围内所有 clip,Ctrl+click 多选切换,
sel.selectClips()全量选择 - 右键菜单:新建通用 ContextMenu 组件,支持 clip(复制/删除/添加关键帧)、空白(添加clip/新增轨道/吸附排列)、标尺(跳转)三种右键菜单
- 标签栏:LeftPanel 顶部 5 标签(Scripts/Properties/Clip/Keyframe/Tracks),TRACK_LIST 模式下可点击轨道行选中轨道
- 轨道选中:
selectedTrackIndex持久化轨道选中态,时间轴轨道高亮 + 标签列点击选轨 - 关键帧空支持:EVENT/AUDIO/MOD_EVENT 关键帧默认为空时间标记(仅
{"time": x}),不强制填充数据;copyKeyframeProperties空安全 - 剪贴板:Ctrl+C 复制携带
_trackType元数据,Ctrl+V 按轨道类型匹配自动粘贴,无匹配时自动addTrack - 跨轨道操作:Ctrl+↑/↓ 移动 clip 到上/下轨道,
moveClipToTrack/findTrackIndex - clip 分割(Razor):右键菜单"分割(在播放头位置)",
EditorOperations.splitClip()拆分 keyframes
Added — 快捷键
Space播放/暂停(300ms 防重复)、Enter播放选中 clipCtrl+A全选、Ctrl+C复制、Ctrl+V粘贴、Ctrl+X剪切Ctrl+Z撤销、Ctrl+Y/Ctrl+Shift+Z重做(50 步快照栈)←/→移动播放头 0.5s、Shift+←/→5sCtrl+←/→跳转 prev/next clip、Ctrl+Shift+←/→时间线起点/终点Delete删除选中、Ctrl+D复制偏移 0.5sF缩放至全部可见、Ctrl+0重置缩放Home/End时间线起点/终点、PageUp/PageDown上/下轨道[/]跳转 clip 起点/终点
Added — 播放器数据对齐
- 新增
EditorOperations.validateScript()保存前全量校验:version/duration/关键帧单调性/必填字段/同轨道重叠检测 - 新增
EditorOperations.sortTrackClips()保证 clips 数组按 start_time 升序,addClip/splitClip 后自动调用 sortKeyframes()添加去重,相邻重复时间的关键帧自动合并EditorScreen.saveScript()调用 validateScript,有错误时阻断保存- EVENT clip 补齐必填字段
command,AUDIO 补齐sound,addClip()零时长保护 transition/transition_duration从通用字段改为 CAMERA 专属,不再写入 AUDIO/EVENT/MOD_EVENT
Changed
- Architectury 多平台迁移:Forge + Fabric 统一构建(API 声明式配置、Mixin 模块化、事件总线抽象、网络层 AbstractPacket)
- 运行时数据模型统一:5 个 Clip 类 + 2 个 Keyframe 类 → schema 驱动通用
Clip/Keyframe+Map<String,Object> data - 新增
schema.json定义所有轨道类型字段结构和默认值,SchemaLoader运行时加载 ScriptParser从独立解析方法重构为 schema 驱动统一解析TimelineTrack统一为getClips(),删除 5 个类型安全访问器+C工具栏按钮改为按当前选中 clip 所在轨道添加,而非硬编码 CAMERAfillKeyframeDefaults()只对 CAMERA/LETTERBOX 填充默认值,AUDIO/EVENT/MOD_EVENT 保持空关键帧UITextInput从实时提交改为失焦提交(Enter 确认)MenuBarArea/PreviewArea的mouseClicked提取共享静态方法- LeftPanel 编辑触发
scheduleBuild()防抖(150ms 内跳过重复重建)
Fixed
- 致命:EVENT clip 缺失 schema 必填字段
command,保存后播放器无法解析 - 致命:拖拽移动/裁剪/关键帧微调/属性编辑无撤销,操作后 Ctrl+Z 无效
boxEndTime未初始化 → 点击空白处误触发从 t=0 开始的框选- 框选只选中第一个命中 clip,改为选中范围内所有 clip
- Space 键码误绑为 57(数字 9),改为 32(Space)
- Space 按住时重复触发播放/暂停,300ms 冷却防护
fmt()无小时位 →fmt(3661)="61:01",改为"1:01:01"- 标尺刻度极限缩放下异常(≤5s 时 interval=10s 零刻度),改为 0.5s/1s/5s/10s 自适应
- 时间轴 render() 缺少
drawTracks()/drawPlayhead()调用,导致时间轴空白 - 点击末帧关键帧预览错位(边界时间在半开区间外),微减 0.001s 保持在活跃区间内
copyKeyframeProperties()空指针风险,改为空安全访问sortKeyframes()不防重复时间,添加去重- 硬编码
transition/transition_duration写入非 CAMERA clip ensureBoundaryKeyframes()仅非空源才复制属性
Removed
CameraClip.java、CameraKeyframe.java、LetterboxClip.java、LetterboxKeyframe.javaAudioClip.java、EventClip.java、ModEventClip.javaonClickEmpty回调(已合并到点击空白跳转播放头)architectury分支(已合并到 main)
Changelog
This mod has no additional files

