anvilssearch-1.0.1-1.19.2.jar
Curse Maven Snippet
What's new
AnvilsSearch-1.0.1
🎮 新增支持版本 / Added Supported Versions
- 🟩 Minecraft 1.19.2 (Forge)
- 🟦 Minecraft 1.20.1 (Forge)
🆕 新增 / Added
引入 TinkersSearch v1.6.1 的统一动画系统,Anvil 侧全部 UI 过渡复用其
client.animation.core包(Easing/ColorUtil/Animation/Animator/AnimationManager)面板滑入滑出迁移到统一动画系统,缓动
EASE_OUT_CUBIC,动画中途反向从当前 offset 平滑过渡面板宽度过渡(normal ↔ wide)平滑插值
Tab 指示器(1px 金线)位置随 Tab 切换平滑滑动
Tab hover 背景色过渡
行 hover / 选中背景色过渡
按钮 hover 颜色过渡
星标点击缩放脉冲(带过冲缓动)
弹出窗口(MaterialPicker / ToolPresetBrowser)出现与消失的缩放 + 淡入淡出
部件详情卡、材料卡展开 / 收起动画:展开时尺寸先到位再淡入内容;收起时内容先淡出再收缩卡片,方向反转无跳变
详情卡邻居位置平滑让位,时间常数 90ms
引入 1.20.1 的 Variant 概念,右侧信息面板新增独立变体卡片
动画 key 命名约定化:
anvil.<模块>.<类型>[:<身份>],与 TinkersSearch 的panel./widget./detail.完全隔离,支持按前缀批量清理Introduced the unified animation system from TinkersSearch v1.6.1; all Anvil-side UI transitions reuse its
client.animation.corepackage (Easing/ColorUtil/Animation/Animator/AnimationManager)Panel slide in/out migrated to the unified animation system,
EASE_OUT_CUBICeasing, mid-animation reversal smoothly interpolates from the current offsetPanel width transition (normal ↔ wide) smoothly interpolated
Tab indicator (1px gold line) slides smoothly when switching tabs
Tab hover background color transition
Row hover / selected background color transition
Button hover color transition
Favorite star click scale pulse (with overshoot easing)
Popup windows (MaterialPicker / ToolPresetBrowser) scale + fade-in/out on show/hide
Part detail card and material card expand / collapse animation: expand grows size first then fades in content; collapse fades out content first then shrinks the card, no jump on direction reversal
Detail card neighbor position smoothing, 90ms time constant
Introduced the 1.20.1 Variant concept; a dedicated variant card is added to the right-side info panel
Animation key naming convention:
anvil.<module>.<type>[:<id>], fully isolated from TinkersSearch'spanel./widget./detail., supporting prefix-based bulk cleanup
🔄 变更 / Changed
动画系统共享:动画核心逻辑由 TinkersSearch 提供,Anvil 侧不再重复挂
RenderTickEvent,直接复用TinkersSearch.onRenderTick的AnimationManager.update()驱动动画 key 前缀隔离:Anvil 侧所有动画 key 以
anvil.开头,与 TinkersSearch 的panel./widget./detail.完全隔离,清理互不影响1.19.2 与 1.20.1 双版本支持:动画系统核心为纯逻辑、无 MC 依赖,两个版本共享同一份代码,仅 UI 渲染入口有
PoseStack↔GuiGraphics的差异Animation system shared: the animation core logic is provided by TinkersSearch; Anvil no longer registers its own
RenderTickEventand directly reusesAnimationManager.update()driven byTinkersSearch.onRenderTickAnimation key prefix isolation: all Anvil-side animation keys start with
anvil., fully isolated from TinkersSearch'spanel./widget./detail.; cleanup on either side does not affect the otherDual-version support for 1.19.2 and 1.20.1: the animation core is pure logic with no MC dependency, shared by both versions, with only the UI rendering entry differing (
PoseStack↔GuiGraphics)
🐛 修复 / Fixed
修复同一 Entry 下同名子项动画 key 碰撞导致的同时高亮问题:Entry 级用
System.identityHashCode(modifier)区分,子项级用levels列表索引区分修复选中项重新匹配时的 id 碰撞:
applyFilter里用selected.modifier == e.modifier而非selected.id.equals(e.id)匹配修复物品槽位数量数字与图标层级错乱:
g.renderItem()之后统一调用g.renderItemDecorations(),数量数字由系统自动渲染修复预览槽位"大一圈"的橙色外框误显示
修复配方不需要槽位时全槽位误显示黄框的问题:新增
hasAnyRequiredSlot()前置判定,只有配方确实要求槽位时才进入边框渲染Fixed the "two same-named sub-rows highlight together" bug caused by animation key collision: Entry-level distinction via
System.identityHashCode(modifier), sub-row-level vialevelslist indexFixed id collision when re-matching the selection:
applyFilternow comparesselected.modifier == e.modifierinstead ofselected.id.equals(e.id)Fixed item stack count digit and icon layer confusion:
g.renderItem()is now always followed byg.renderItemDecorations(), with the count digit rendered automatically by the systemFixed the "one-size-larger" orange frame incorrectly shown on preview slots
Fixed all slots showing a yellow frame when the recipe doesn't require slots: added a
hasAnyRequiredSlot()pre-check, only recipes that genuinely require slots enter border rendering
⚡ 优化 / Improved
动画驱动统一化:Anvil 侧移除自身每帧驱动逻辑,复用
TinkersSearch.onRenderTick每帧的AnimationManager.update(),无活跃动画时几乎零成本动画实例复用:同 key 的
Animation/Animator实例在AnimationManager内复用,避免每帧 new 对象SearchBox/ScrollBar接入动画 id:通过setAnimationId(String)启用 focus / hover / thumb 位置平滑过渡;未指定 id 时退化为无动画,完全向后兼容图标与数量分层渲染:
g.renderItem()渲染图标,g.renderItemDecorations()渲染数量,避免手动干预导致的层级错乱弹窗渲染前后强制 flush:
flushBatch()在图标 / 数字渲染后和弹窗渲染前后各调用一次,避免批次交叉导致的层级错乱动画 key 前缀批量清理:面板关闭 / 切换 Tab 时可调用
AnvilAnimations.clearAll()一次性清理所有anvil.*动画Unified animation driving: Anvil no longer has its own per-frame driver and reuses
TinkersSearch.onRenderTick'sAnimationManager.update()— nearly zero cost when no animation is activeAnimation instance reuse: same-key
Animation/Animatorinstances are reused insideAnimationManager, avoiding per-frame allocationsSearchBox/ScrollBaranimation id integration:setAnimationId(String)enables smooth focus / hover / thumb-position transitions; falls back to no animation when unset, fully backward-compatibleLayered icon-and-count rendering:
g.renderItem()renders the icon,g.renderItemDecorations()renders the count, avoiding layer confusion from manual interventionPopup rendering flushes batches before and after:
flushBatch()is called once after icon / count rendering and again before and after popup rendering, avoiding layer confusion from cross-batch orderingAnimation key prefix bulk cleanup:
AnvilAnimations.clearAll()can be called on panel close / Tab switch to clean up allanvil.*animations in one shot
🔧 技术改进 / Technical Improvements
复用 TinkersSearch v1.6.1 的
client.animation.core包(Easing/ColorUtil/Animation/Animator/AnimationManager),不重复造轮子新增
client.animation.AnvilAnimations:anvil.前缀常量与批量清理工具新增
client.animation.controller包:AnvilPanelAnimations(面板滑入滑出 / 宽度 / Tab 指示器 / Tab hover / 侧边按钮 hover)、AnvilWidgetAnimations(行 hover / 行选中 / 卡片展开 / 卡片淡入 / 星标脉冲 / 按钮 hover / 槽位状态色 / Popup 出现消失 / 反馈文本淡入)动画核心(
Easing/ColorUtil/Animation/Animator/AnimationManager)为纯逻辑、无 MC 依赖,1.19.2 与 1.20.1 共享同一份代码AnvilPanelAnimation状态外置:visible与targetWidth为仅有的两个目标态字段,动画由AnvilPanelAnimations一次性触发,渲染时纯读插值结果AnvilPanelAnimations使用Animation(固定 350ms +EASE_OUT_CUBIC)驱动滑入滑出与宽度过渡,有明确完成时刻;使用Animator(指数趋近)驱动 Tab 指示器与 hover 类动画AnvilWidgetAnimations.expandProgress(key, expanded)使用Animation(固定 200ms +EASE_OUT_QUAD),有明确完成时刻,避免指数趋近的"长尾卡顿"动画 key 前缀批量清理:
AnimationManager.stopPrefix("anvil."),面板关闭 / 世界切换时无残留跨 1.19.2 / 1.20.1 双版本维护同一份动画系统代码,仅 UI 渲染入口有
PoseStack↔GuiGraphics的差异Reuses TinkersSearch v1.6.1's
client.animation.corepackage (Easing/ColorUtil/Animation/Animator/AnimationManager) instead of reinventing the wheelAdded
client.animation.AnvilAnimations:anvil.prefix constants and bulk-cleanup utilitiesAdded
client.animation.controllerpackage:AnvilPanelAnimations(panel slide / width / Tab indicator / Tab hover / side button hover),AnvilWidgetAnimations(row hover / row selected / card expand / card fade / star pulse / button hover / slot state color / popup show-hide / feedback text fade)Animation core (
Easing/ColorUtil/Animation/Animator/AnimationManager) is pure logic with no MC dependency, shared by 1.19.2 and 1.20.1AnvilPanelAnimationstate externalized:visibleandtargetWidthare the only two target-state fields; animations are triggered once byAnvilPanelAnimationsand rendering only reads the interpolated resultsAnvilPanelAnimationsusesAnimation(fixed 350ms +EASE_OUT_CUBIC) for slide and width transitions with a definite completion time, andAnimator(exponential approach) for Tab indicator and hover animationsAnvilWidgetAnimations.expandProgress(key, expanded)usesAnimation(fixed 200ms +EASE_OUT_QUAD) with a definite completion time, avoiding the exponential "long tail" stutterAnimation key prefix bulk cleanup:
AnimationManager.stopPrefix("anvil."), no residue on panel close / world switchOne animation system codebase maintained across 1.19.2 and 1.20.1, with only the UI rendering entry differing (
PoseStack↔GuiGraphics)
This mod has no additional files

