promotional bannermobile promotional banner

Anvil's Search

Anvil's Search is a companion mod for Tinkers' Search, adding part browsing, tool simulation, and modifier search to the Tinker's Anvil GUI.
Back to Files

anvilssearch-1.0.1-1.18.2.jar

File nameanvilssearch-1.0.1-1.18.2.jar
Uploader
leipishuleipishu
Uploaded
Oct 7, 2026
Downloads
13
Size
229.6 KB
Mod Loaders
Forge
File ID
9088362
Type
R
Release
Supported game versions
  • 1.18.2

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:anvils-search-1726231:9088362")

Learn more about Curse Maven

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.core package (Easing / ColorUtil / Animation / Animator / AnimationManager)

  • Panel slide in/out migrated to the unified animation system, EASE_OUT_CUBIC easing, mid-animation reversal smoothly interpolates from the current offset

  • Panel 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's panel. / 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 RenderTickEvent and directly reuses AnimationManager.update() driven by TinkersSearch.onRenderTick

  • Animation key prefix isolation: all Anvil-side animation keys start with anvil., fully isolated from TinkersSearch's panel. / widget. / detail.; cleanup on either side does not affect the other

  • Dual-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 via levels list index

  • Fixed id collision when re-matching the selection: applyFilter now compares selected.modifier == e.modifier instead of selected.id.equals(e.id)

  • Fixed item stack count digit and icon layer confusion: g.renderItem() is now always followed by g.renderItemDecorations(), with the count digit rendered automatically by the system

  • Fixed 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's AnimationManager.update() — nearly zero cost when no animation is active

  • Animation instance reuse: same-key Animation / Animator instances are reused inside AnimationManager, avoiding per-frame allocations

  • SearchBox / ScrollBar animation id integration: setAnimationId(String) enables smooth focus / hover / thumb-position transitions; falls back to no animation when unset, fully backward-compatible

  • Layered icon-and-count rendering: g.renderItem() renders the icon, g.renderItemDecorations() renders the count, avoiding layer confusion from manual intervention

  • Popup 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 ordering

  • Animation key prefix bulk cleanup: AnvilAnimations.clearAll() can be called on panel close / Tab switch to clean up all anvil.* 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.core package (Easing / ColorUtil / Animation / Animator / AnimationManager) instead of reinventing the wheel

  • Added client.animation.AnvilAnimations: anvil. prefix constants and bulk-cleanup utilities

  • Added client.animation.controller package: 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.1

  • AnvilPanelAnimation state externalized: visible and targetWidth are the only two target-state fields; animations are triggered once by AnvilPanelAnimations and rendering only reads the interpolated results

  • AnvilPanelAnimations uses Animation (fixed 350ms + EASE_OUT_CUBIC) for slide and width transitions with a definite completion time, and Animator (exponential approach) for Tab indicator and hover animations

  • AnvilWidgetAnimations.expandProgress(key, expanded) uses Animation (fixed 200ms + EASE_OUT_QUAD) with a definite completion time, avoiding the exponential "long tail" stutter

  • Animation key prefix bulk cleanup: AnimationManager.stopPrefix("anvil."), no residue on panel close / world switch

  • One 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