promotional bannermobile promotional banner

Tinkers' Search

Tinkers' Construct Smeltery Fluid Search Mod. Adds fluid search, filtering, and JEI quick interaction to the Smeltery GUI.
Back to Files

tinkerssearch-1.6.1-1.18.2.jar

File nametinkerssearch-1.6.1.jar
Uploader
leipishuleipishu
Uploaded
Oct 5, 2026
Downloads
25
Size
561.4 KB
Mod Loaders
Forge
File ID
9070185
Type
R
Release
Supported game versions
  • 1.18.2

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:tinkers-search-1664879:9070185")

Learn more about Curse Maven

What's new

TinkersSearch-1.6.1

🆕 新增 / Added

  • 全新统一动画系统:全局单例 AnimationManager + RenderTickEvent 驱动,提供缓动枚举、ARGB 插值、触发型 Animation、持久型 Animator 四层基础设施

  • 面板滑入滑出动画迁移到统一动画系统,缓动 EASE_OUT_CUBIC,动画中途反向从当前 offset 平滑过渡

  • 部件展开 / 收起动画:展开时尺寸先到位再淡入内容;收起时内容先淡出再收缩卡片,方向反转无跳变

  • 部件邻居卡片位置平滑动画:展开 / 收起时其余卡片以 90ms 时间常数平滑让位,点击跟随动画中的视觉位置

  • 详情页窗口开关动画:打开时 0.92 → 1.0 缩放 + 遮罩淡入;关闭时 1.0 → 0.96 缩放 + 遮罩淡出,完成后才切换屏幕

  • 详情页翻页动画:点击 ◀ / ▶ 或键盘 ← / → 时,卡片网格先淡出滑出 40px,数据切换后从另一侧滑入淡入,标题、翻页按钮、页脚纹丝不动

  • 触发型反馈动画:左键点击卡片缩放脉冲、点击收藏星标缩放脉冲、点击刷新按钮缩放脉冲,均带过冲缓动

  • 持久型过渡动画:Tab hover 背景色过渡、Tab 指示器平滑滑动、卡片 hover 背景 / 边框过渡、刷新按钮 hover 颜色过渡、搜索框 focus 边框变亮、滚动条 thumb 位置平滑跟随(拖拽时立即跟随)

  • 面板卡片图标延迟淡入淡出:面板滑入到 80% 位置时图标才开始淡入;面板刚开始滑出图标就淡出

  • 详情页部件标题行显示浇筑模式标签:单页材料显示 [直接浇筑],复合页显示 [浇筑于: 材料名],材料名跟随游戏语言动态本地化

  • 1.19.2 完整移植:动画模块 + 详情页 + 面板层,全部重写适配 Component.literal / ForgeRegistries.FLUIDS.getKey() / GuiGraphics 前的 API

  • 1.20.1 完整移植:GuiGraphics 全面替换 PoseStack,renderWidget / updateWidgetNarration 适配,AbstractWidget 自有 x/y/width/height 字段

  • Brand-new unified animation system: global AnimationManager singleton driven by RenderTickEvent, with four-layer infrastructure — easing enum, ARGB interpolation, trigger-type Animation, persistent Animator

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

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

  • Neighbor part card position smoothing: surrounding cards smoothly yield with a 90ms time constant, clicks follow the animated visual position

  • Detail window open/close animation: opens with 0.92 → 1.0 scale + mask fade-in; closes with 1.0 → 0.96 scale + mask fade-out, screen swap happens only after completion

  • Detail screen page-turn animation: clicking ◀ / ▶ or pressing ← / → fades + slides the card grid out by 40px, swaps data, then slides + fades the new page in from the opposite side — title, page buttons, and footer stay put

  • Trigger-type feedback animations: card click pulse, favorite star pulse, refresh button pulse, all with overshoot easing

  • Persistent transition animations: Tab hover background, Tab indicator slide, card hover background / border, refresh button hover color, search box focus border, scrollbar thumb position (immediate while dragging, smooth otherwise)

  • Panel card icon delayed fade: icons only fade in once panel slide is at 80%; icons fade out immediately when panel starts sliding out

  • Detail screen part title row now shows the casting mode: single-page materials show [Direct Casting], composite pages show [Cast onto: material], with the material name dynamically localized to the current language

  • Full 1.19.2 port: animation module + detail screen + panel layer, all rewritten for Component.literal / ForgeRegistries.FLUIDS.getKey() / pre-GuiGraphics API

  • Full 1.20.1 port: GuiGraphics fully replaces PoseStack, renderWidget / updateWidgetNarration adapted, AbstractWidget uses its own x/y/width/height fields

🔄 变更 / Changed

  • 面板滑入滑出动画状态外置:PanelAnimationManager 不再自持 offset / targetOffset / animationStartTime / isAnimating,全部由 AnimationManager 的 "panel.slide" 动画 key 持有;对外接口保持不变

  • 详情页部件收起流程重排:原来卡片立即缩小 + 内容立即消失,现改为先内容淡出(80ms)→ 卡片再收缩(180ms),节奏更清晰

  • 详情页翻页仅作用于卡片网格:标题、翻页按钮、页脚不参与滑动,只有卡片网格先淡出滑出 → 数据切换 → 滑入淡入

  • 窗口开关动画不做 alpha 合成:只做缩放 + 全屏遮罩 alpha,避免污染全局 GL 状态导致 tooltip 被"蒙层"覆盖

  • 图标淡入淡出改为单曲线:progress < 0.8 时 alpha = 0,0.8 ≤ progress ≤ 1.0 时线性到 1,同时表达"打开晚出现、关闭早消失"

  • 动画节奏整体加速:EXPAND_DURATION 250ms → 180ms,CONTENT_FADE_DURATION 150ms → 80ms,PART_POS_TAU 140ms → 90ms

  • 动画 key 命名约定化:<模块>.<类型>[:<身份>],例如 panel.slide / panel.card.hover:<fluidId> / detail.part.expand:<key> / detail.page.turn,便于按前缀批量清理

  • Panel slide animation state externalized: PanelAnimationManager no longer holds offset / targetOffset / animationStartTime / isAnimating; all of it lives in the "panel.slide" animation key inside AnimationManager; public API is unchanged

  • Detail part collapse reordered: previously card shrank + content vanished at once; now content fades out first (80ms) → card shrinks after (180ms) for clearer pacing

  • Detail page turn only affects the card grid: title, page buttons, and footer do not slide — only the card grid fades + slides out, data is swapped, then slides + fades in

  • Window open/close no longer does alpha blending: only scale + full-screen mask alpha, avoiding pollution of global GL state that caused the "veil" over tooltips

  • Icon fade switched to a single curve: alpha = 0 while progress < 0.8, linearly to 1 while 0.8 ≤ progress ≤ 1.0, capturing both "late on open, early on close"

  • Overall animation timing sped up: EXPAND_DURATION 250ms → 180ms, CONTENT_FADE_DURATION 150ms → 80ms, PART_POS_TAU 140ms → 90ms

  • Animation key naming convention: <module>.<type>[:<id>], e.g. panel.slide / panel.card.hover:<fluidId> / detail.part.expand:<key> / detail.page.turn, enabling prefix-based bulk cleanup

🐛 修复 / Fixed

  • 修复面板关闭动画不播放:startHideAnimation 在读取当前 offset 之前就修改了 targetVisible,导致动画起点与终点重合

  • 修复面板渲染位置与命中检测不一致:PanelRenderer 在 panel.getPanelX() 之上再次叠加 animationOffset,视觉位置是鼠标命中位置的两倍

  • 修复面板关闭时滑出动画被立即杀死:handleSmelteryClose 改为调用 forceHideImmediate(),不再启动随后被清空的滑出动画

  • 修复详情页 tooltip 被"蒙层"覆盖:窗口内容不再修改全局 setShaderColor,改用缩放 + 颜色 alpha,tooltip 与窗口内容彻底分离

  • 修复部件展开动画中途反向跳变:旧实现总从端点重新起播,新实现从当前插值位置起播

  • 修复部件淡出 / 收缩过程中卡片溢出原槽位:布局尺寸由"视觉展开态"决定,淡出和收缩阶段保持扩展布局

  • 修复 IMaterial.getDisplayName() 在 1.19+ 被移除导致编译失败:材料名改为直接构造 material.<ns>.<path> 翻译键交给 Component.translatable() 解析,与流体卡片走同一套本地化机制

  • 修复 1.19.2 Fluid#getRegistryName() 被移除:统一替换为 ForgeRegistries.FLUIDS.getKey(fluid)

  • 修复 1.19.2 TextComponent / TranslatableComponent 弃用:统一替换为 Component.literal / Component.translatable

  • 修复 1.20.1 AbstractWidget 父类 x/y/width/height 变为私有:FloatingSearchPanel 改为自有字段 + 独立 getter

  • 修复 1.20.1 renderButton 被 renderWidget 取代:FloatingSearchPanel 覆写 renderWidget

  • 修复 1.20.1 updateNarration 被 updateWidgetNarration 取代:同样覆写替换

  • Fixed panel close animation not playing: startHideAnimation mutated targetVisible before reading the current offset, making the animation start and end coincide

  • Fixed panel render position mismatching hit detection: PanelRenderer added animationOffset on top of panel.getPanelX(), making the visual position move at twice the mouse hit position

  • Fixed slide-out animation being killed immediately on smeltery close: handleSmelteryClose now calls forceHideImmediate(), no longer spawning a slide-out that is subsequently cleared

  • Fixed detail tooltip being covered by a "veil": window content no longer modifies global setShaderColor, using scale + color alpha instead, fully separating tooltip from window content

  • Fixed part expand animation jumping on mid-flight reversal: old implementation always restarted from an endpoint; new one restarts from the current interpolated value

  • Fixed part cards overflowing their slot during fade-out / shrink: layout size determined by "visual expanded state", keeping the expanded layout through fade-out and shrink

  • Fixed IMaterial.getDisplayName() removal in 1.19+: material name now constructed directly as the material.<ns>.<path> translation key fed to Component.translatable(), sharing the same localization path as fluid cards

  • Fixed Fluid#getRegistryName() removal in 1.19.2: uniformly replaced with ForgeRegistries.FLUIDS.getKey(fluid)

  • Fixed TextComponent / TranslatableComponent deprecation in 1.19.2: uniformly replaced with Component.literal / Component.translatable

  • Fixed AbstractWidget x/y/width/height becoming private in 1.20.1: FloatingSearchPanel switched to its own fields + getters

  • Fixed renderButton replaced by renderWidget in 1.20.1: FloatingSearchPanel now overrides renderWidget

  • Fixed updateNarration replaced by updateWidgetNarration in 1.20.1: same override swap

⚡ 优化 / Improved

  • 动画驱动统一化:移除 PanelRenderer 每帧调用 animationManager.updateAnimation() 的旧驱动,改为 TinkersSearch.onRenderTick 每帧调用 AnimationManager.update(),无活跃动画时几乎零成本

  • 动画实例复用:同 key 的 Animation / Animator 实例在 AnimationManager 内复用,避免每帧 new 对象

  • 位置动画支持中途目标变化:使用 Animator 的指数趋近模型,动画中途改变目标从当前值继续,不会跳变

  • 详情页部件布局缓存优化:useExpandedLayout 一次判定视觉展开态,渲染与布局共用同一判据,避免每帧重复计算

  • 详情页翻页 alpha 延迟应用:currentPageAlpha ≤ 0.01 时直接跳过卡片渲染并清空命中区,省去完全透明帧的绘制开销

  • Unified animation driving: removed the per-frame animationManager.updateAnimation() call from PanelRenderer, replaced with TinkersSearch.onRenderTick calling 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

  • Position animation supports mid-flight target changes: uses the Animator exponential-approach model, continuing from the current value when the target changes, no jump

  • Detail part layout cache optimization: useExpandedLayout decides the visual expanded state once and both render and layout share the same predicate, avoiding per-frame recomputation

  • Detail page-turn alpha applied late: when currentPageAlpha ≤ 0.01 the card render is skipped and hit areas are cleared, saving draw cost on fully transparent frames

🔧 技术改进 / Technical Improvements

  • 新增 client.animation.core 包:Easing(11 种缓动)、ColorUtil(ARGB 插值 / 缩放)、Animation(触发型)、Animator(持久型)、AnimationManager(全局单例,注册 / 驱动 / 清理)

  • 新增 client.animation.controller 包:PanelAnimations(卡片 hover / Tab / 指示器 / 空状态 / 刷新 / 脉冲)、WidgetAnimations(SearchBox focus / hover、ScrollBar thumb / hover)、DetailAnimations(窗口开关)、DetailPageAnimations(翻页)

  • 版本兼容层:Easing / ColorUtil / Animation / Animator / AnimationManager 为纯逻辑,无 MC 依赖,三版本共享同一份代码

  • SearchBox 组件新增 setAnimationId(String),focus / hover 平滑过渡;未指定 id 时退化为无动画,完全向后兼容

  • ScrollBar 组件新增 setAnimationId(String),thumb 位置平滑跟随、hover 颜色过渡;拖拽时立即跟随,滚轮滚动时平滑

  • SmelteryDataHelper.drawFluidIcon 拆为两个重载,新增带外部 alpha 参数的版本,供面板图标延迟淡入淡出使用

  • PanelAnimationManager 重写:新增 hideImmediate()(父界面关闭时立即隐藏)与 isTargetVisible()(暴露滑入滑出方向)

  • FloatingSearchPanel 新增 forceHideImmediate() 委托,与 hideImmediate() 语义对齐

  • TinkersSearch.onRenderTick 挂载 AnimationManager.update(),使用 RenderTickEvent.Phase.START 保证每帧渲染读到最新值

  • 动画 key 前缀批量清理:AnimationManager.stopPrefix("panel.") / stopPrefix("widget.") / stopPrefix("detail.part.") / stopPrefix("detail.page."),界面关闭时无残留

  • 跨 1.18.2 / 1.19.2 / 1.20.1 三版本维护同一份动画系统代码,仅 UI 渲染入口有 API 差异(PoseStack ↔ GuiGraphics)

  • New client.animation.core package: Easing (11 easings), ColorUtil (ARGB interpolation / scaling), Animation (trigger type), Animator (persistent type), AnimationManager (global singleton — register / drive / cleanup)

  • New client.animation.controller package: PanelAnimations (card hover / Tab / indicator / empty state / refresh / pulses), WidgetAnimations (SearchBox focus / hover, ScrollBar thumb / hover), DetailAnimations (window open/close), DetailPageAnimations (page turn)

  • Version-compat layer: Easing / ColorUtil / Animation / Animator / AnimationManager are pure logic with no MC dependency, shared across all three versions

  • SearchBox gains setAnimationId(String) for smooth focus / hover transitions; falls back to no animation when unset, fully backward-compatible

  • ScrollBar gains setAnimationId(String) for smooth thumb follow and hover color transition; immediate while dragging, smooth on wheel scroll

  • SmelteryDataHelper.drawFluidIcon split into two overloads, with a new version taking an external alpha parameter for the panel icon delayed fade

  • PanelAnimationManager rewritten: added hideImmediate() (immediate hide when parent screen closes) and isTargetVisible() (exposes slide direction)

  • FloatingSearchPanel gains a forceHideImmediate() delegate aligned with hideImmediate()

  • TinkersSearch.onRenderTick hooks AnimationManager.update(), using RenderTickEvent.Phase.START so each frame reads the latest values

  • Animation key prefix bulk cleanup: AnimationManager.stopPrefix("panel.") / stopPrefix("widget.") / stopPrefix("detail.part.") / stopPrefix("detail.page."), no residue on screen close

  • One animation system codebase maintained across 1.18.2 / 1.19.2 / 1.20.1, with only the UI rendering entry differing (PoseStack ↔ GuiGraphics)

Type
Name
Game Versions
Mod Loaders
Size
Downloads
Uploaded