
EmakiForge | Blueprint Forging
Blueprint-driven forging where material combinations decide stats and quality rolls with a pity counter.
Список изменений
Added
- The forge capacity slot lists what the recipe wants and how much you have placed. A new
%blueprint_requirements%placeholder goes in thecapacity_displayslot lore ofgui/forge_gui.yml, one material per line, a tick when the amount is met and a cross when it is not, followed by placed/required. The count is what sits in the forge GUI, not what is in the player's inventory. - Per-recipe grouping for that list when one blueprint is shared by several recipes: a header per recipe, at most 3 groups, and the rest collapsed into a single "N more recipes" line. The lists are deliberately not merged, because a recipe wanting iron and another wanting gold would both show as missing when satisfying either is enough. The same slot can also read
%recipe_count%. - Editable wording for the checklist under
gui.blueprint.*:no_recipe,recipe_group_header,requirement_satisfied,requirement_missing,more_recipes. - Multi-line lore expansion: a lore line holding nothing but one placeholder expands into as many lines as the value has entries. Keep
%blueprint_requirements%on a line of its own. - A
gui_templatekey on recipes, naming a template file undergui/without the.yml, so a recipe can open with its own forge GUI. Left out,forge_guiis used as before. console.config_precheck_issue_warnandconsole.config_precheck_issue_errormessage keys, used to colour precheck problem lines by severity.
Changed
- Actions use a new syntax, and most of it is rewritten for you. On first startup CoreLib rewrites the config files of every Emaki plugin under
plugins/, once only. Each edited file keeps the original beside it with a.legacy-backupsuffix. A line that cannot be converted leaves your config untouched and goes into a separate.v2-failedfile, with the file and line listed in the console. - The three forge refresh actions are the only ones you need to rename by hand; automatic rewriting does not cover them. Drop the leading
emaki:emakiforge_refresh_held→forge_refresh_heldemakiforge_refresh_player→forge_refresh_playeremakiforge_refresh_all→forge_refresh_all
- Forge's own variables need a
var.prefix wherever recipes orconfig.ymluse them, for example%forge_result_item_name%→%var.forge_result_item_name%and%forge_failure_reason%→%var.forge_failure_reason%. The old inline token<show_item>in the quality broadcast becomes%var.forge_show_item%, already applied in the newconfig.yml. GUI text and player placeholders such as%player%are unaffected. - Action names gain their underscores automatically:
sendmessage→send_message,playsound→play_sound,broadcastmessage→broadcast_message. The bundledrecipes/example_recipe.ymlshows the converted form. - Console errors for an action line that failed to compile state the problem, its position in the line and the likely intended value, instead of an internal code. The file, recipe id, phase and line index still follow, and the wording comes from the language file.
- Config precheck problem lines are coloured by severity across the whole line: red for error and fatal, yellow for warn, grey for info as before. Older language files missing the two new keys fall back to the previous template rather than printing bare keys.
- Six startup and reload console lines changed from white to grey for consistency with the other Emaki plugins.
- For developers:
EmakiForgeApiProvideris removed, andavailable(),apiVersion(),pluginName()andisReady()are replaced byEmakiForgeApi.status()returningApiStatus. Newcatalog()(recipes,recipe,materialById,materialByItem,matchRecipe,validate,previewResult,mastery,accepting),operations()(forgeAsync,openForgeGui,openRecipeBook,viewingRecipeBook,refreshItem,refreshPlayer) andextensions()(reserved, currently empty) accessors return degraded implementations when the plugin is absent instead of throwing. Return values are unified asEmakiResult, withFailureKindseparating a disabled subsystem from a missing plugin. New model types:ForgeInputs,ForgeOutcome,ForgeRecipeView,ForgeMaterialView,ForgeBlueprintView,ForgeValidation.ForgeStartEventandForgeCompletedEventdocument their thread semantics.EmakiForgeApi.BridgeandForgeExtensionsare@ApiStatus.NonExtendable. This is a breaking API release with no legacy signatures or transitional compatibility.
Removed
- JS scripting, including the forge success-rate rules and result hooks it provided. There is no automatic conversion, but both have config equivalents:
success_rateandfailure_outcomesfor the odds, and thepre/success/failurelists under a recipe'sactionssection plusresult.success.actionsfor rewards. The bundledscripts/examples/forge_success.jssample is gone as well. - The old
emakiforge_-prefixed action names and the bare-variable placeholder form; neither is kept as an alias.
Notes
- Update EmakiCoreLib to
4.7.0first. - Back up your whole
plugins/EmakiForge/folder before upgrading, especiallyrecipes/andgui/. - Three things need doing by hand: renaming the three refresh actions, adding the
var.prefix to Forge variables, and rewriting JS success-rate or reward scripts as recipe config. Everything else is rewritten for you. - Showing the material checklist requires adding a
%blueprint_requirements%line to thecapacity_displayslot lore ingui/forge_gui.yml. An older GUI file still forges fine, it just shows no checklist. - Recipe structure, blueprints and player forge mastery data are unchanged and need no migration.
- After updating, run
/emakiforge reloadand/emakiforge debug statsto confirm the registered recipe count matches expectations, then open the forge GUI and check the checklist.
Emaki Forge v4.6.0
MineBBS 更新日志
破坏性变更与必要迁移
- 【破坏性】配方
result结构调整且不再兼容旧格式:原result.item_sources、result.meta_actions.name_actions、result.meta_actions.lore_actions、result.actions需改写为result.success.outputs[].item_sources以及result.success.name_actions、result.success.lore_actions、result.success.actions。插件只读取success;缺失时该配方不会报错,但也不会产出任何物品,所有自定义配方必须迁移。 - 【破坏性】GUI 槽位物品结构改为嵌套组件:原
item: "<MATERIAL>"搭配display_name、lore、hidden_components: [tooltip],现改为item.source搭配item.components.custom_name、item.components.lore、item.components.tooltip_display.hide_tooltip。所有自定义gui/*.yml必须迁移。 - 【破坏性】插件描述文件从
plugin.yml迁移到paper-plugin.yml,其中的commands:段已移除(命令改为运行时注册)。不再支持纯 Spigot,必须使用 Paper 或 Paper 分支。 - 【移除】浏览器端 Web Console 层整体移除:
web-console.yml、web-extensions/以及web-console/前端项目。此前通过浏览器修改配置的服主需要直接编辑 YAML。 - 【移除】管理端配方编辑器模板
gui/editor_gui.yml已删除,它唯一的入口就是被移除的网页编辑器。
新增功能
- 新增三个可配置动作,可用于任意动作链:
emakiforge_refresh_held、emakiforge_refresh_player、emakiforge_refresh_all。 - 新增
/emakiforge debug stats(别名status),输出运行时与配方加载报告:generation、文件数/解析数/跳过数/注册数/重复数、问题与警告、耗时、来源状态。 - 配置预检与配方加载诊断(目录创建失败、id 为空、id 重复、加载失败)现已可本地化;玩家可见的运行时状态提示(重载中、无可用配方、加载失败、能力缺失、索引未就绪、已关闭、会话过期)同样可本地化。
- 新增对 EmakiItem 的可选软依赖;未安装该插件时,EmakiAttribute 对接会降级运行,不再直接失败。
重载与结算可靠性
- 重载改为原子操作:候选运行时在后台构建,只有在不存在阻断性问题时才整体安装。失败时继续由原运行时提供服务;被后续重载取代的重载会被报告为已过期。
- 重载汇总数字改为取自本次重载自身的结果,并发重载不会再报出混合的计数。
- 锻造结算加入明确的提交边界,已过期的完成流程不会二次返还已消耗的输入。
- 配方书绑定打开时取得的运行时快照,重载期间翻页不会混用不同 generation 的数据。
- GUI 模板由独立加载器读取,并纳入重载候选校验。
- 消息前缀更换为新的品牌渐变配色。
修复
/emakiforge reload此前无条件回报成功并吞掉失败,现在会回报失败并附带详情(general.reload_fail消息键此前存在但从未被发送)。- 重载回复改为在发送者自身的执行域上送达,这是 Folia 上的正确行为所必需的。
运行环境与兼容性
api-version由1.21提升到1.21.8,仅支持 1.21.8 及以上版本。- 构建基座由 spigot-api 改为 paper-api,使用本插件 API 的开发者需要同步切换编译基座。
- Java 目标版本仍为 25,
folia-supported: true保持不变,权限集保持不变(use/book/reload/debug/admin)。 - 移除了跨插件的强制 API 版本门禁,混用小版本略有差异的 Emaki 插件不再在启动阶段被阻止。
升级说明
- 需要 EmakiCoreLib
4.6.0。 - 升级前请备份
recipes/与gui/目录,并按上述结构迁移全部自定义配方与 GUI 模板。 - 升级后建议执行一次
/emakiforge reload与/emakiforge debug stats,确认配方注册数量与预期一致,再验证锻造 GUI 和配方书流程。
SpigotMC Update Log
CENTER[B]◆ Emaki Forge v4.6.0 Release ◆/B[/CENTER] [CENTER]New recipe result and GUI item structures, atomic reloads, a debug stats report, and a Paper-only 1.21.8+ baseline.[/CENTER] CENTER━━━━━━━━━━━━━━━━━━━━/B [LIST] []Breaking: recipe results move to result.success.outputs[].item_sources and result.success.name_actions / lore_actions / actions. Only success is read; a recipe without it silently produces nothing, so every custom recipe must be migrated. []Breaking: GUI slot items move to nested components - item.source plus item.components.custom_name, item.components.lore, and item.components.tooltip_display.hide_tooltip. Every custom gui/.yml must be migrated. []Breaking: the descriptor moved from plugin.yml to paper-plugin.yml and its commands section is gone; commands register at runtime and plain Spigot is no longer supported. []Removed: the browser-based Web Console layer (web-console.yml, web-extensions/, the web-console/ frontend project). Edit YAML directly instead. []Removed: gui/editor_gui.yml, the admin recipe-editor template, whose only entry point was the removed web editor. []Added three action-chain actions: emakiforge_refresh_held, emakiforge_refresh_player, emakiforge_refresh_all. []Added /emakiforge debug stats (alias status) reporting generation, files, parsed, skipped, registered, duplicates, issues, warnings, elapsed time, and source state. []Config precheck, recipe-load diagnostics, and player-facing runtime state messages are now localizable. []Added an optional soft dependency on EmakiItem; the EmakiAttribute integration now degrades gracefully when that plugin is absent. []Reload is atomic: a candidate runtime is built in the background and installed only when no blocking problems exist, a failed reload keeps the previous runtime serving, and a superseded reload is reported as stale. []Reload summary numbers come from that reload's own result, so concurrent reloads no longer report mixed counts. []Forge settlement has an explicit commit boundary, so a stale completion cannot return already-consumed inputs twice. []The recipe book binds to the runtime snapshot taken when it was opened, and GUI templates now take part in reload candidate validation. []Fixed /emakiforge reload always reporting success and swallowing failures; it now reports failure with detail. []Fixed reload replies so they are delivered on the sender's own execution domain, which is required for correctness on Folia. []api-version raised from 1.21 to 1.21.8 and the build base moved from spigot-api to paper-api. Java target stays 25, folia-supported stays true, and the permission set is unchanged. []Cross-plugin hard API version gating was removed, so mixing slightly different Emaki minor versions is no longer blocked at startup. [*]Requires EmakiCoreLib 4.6.0. Back up recipes/ and gui/ before updating. [/LIST]
Modrinth Changelog
Added
- Three action-chain actions:
emakiforge_refresh_held,emakiforge_refresh_player,emakiforge_refresh_all. /emakiforge debug stats(aliasstatus) reporting generation, files, parsed, skipped, registered, duplicates, issues, warnings, elapsed time, and source state.- Localizable config precheck and recipe-load diagnostics (directory creation failure, blank id, duplicate id, load failure) plus localizable player-facing runtime state messages (reloading, no recipes, load failed, capability missing, index not ready, closed, session expired).
- Optional soft dependency on EmakiItem, so the EmakiAttribute integration degrades gracefully when that plugin is absent instead of hard-failing.
Changed
- Reload is atomic: a candidate runtime is built in the background and installed only when no blocking problems exist. A failed reload keeps the previous runtime serving, and a superseded reload is reported as stale.
- Reload summary numbers come from that reload's own result, so concurrent reloads no longer report mixed counts.
- Forge settlement has an explicit commit boundary, so a stale completion no longer returns already-consumed inputs a second time.
- The recipe book binds to the runtime snapshot taken when it was opened, so paging during a reload cannot mix generations.
- GUI templates are loaded by their own loader and participate in reload candidate validation.
- Message prefix switched to a new brand gradient.
api-versionraised from1.21to1.21.8; only 1.21.8+ is supported. The build base moved from spigot-api to paper-api, so API consumers must switch their compile base. Java target stays 25,folia-supported: trueand the permission set (use/book/reload/debug/admin) are unchanged.- Cross-plugin hard API version gating was removed, so mixing slightly different Emaki minor versions is no longer blocked at startup.
Fixed
/emakiforge reloadused to report success unconditionally and swallow failures; it now reports failure with detail (thegeneral.reload_failmessage key existed but was never sent).- Reload replies are delivered on the sender's own execution domain, which is required for correctness on Folia.
Removed
- The browser-based Web Console layer (
web-console.yml,web-extensions/, theweb-console/frontend project). Owners who edited config through the browser must edit YAML directly. gui/editor_gui.yml, the admin recipe-editor template, whose only entry point was the removed web editor.- Backward compatibility for the old recipe
resultstructure:result.item_sources,result.meta_actions.name_actions,result.meta_actions.lore_actionsandresult.actionsbecomeresult.success.outputs[].item_sourcesandresult.success.name_actions/lore_actions/actions. Onlysuccessis read; if it is missing the recipe silently produces nothing, so all custom recipes must be migrated. - The flat GUI slot item structure:
item: "<MATERIAL>"withdisplay_name,loreandhidden_components: [tooltip]becomesitem.sourcewithitem.components.custom_name,item.components.loreanditem.components.tooltip_display.hide_tooltip. All customgui/*.ymlmust be migrated. - The
commands:section, as the descriptor moved fromplugin.ymltopaper-plugin.ymland commands register at runtime. Plain Spigot is no longer supported; Paper or a Paper fork is required.
Notes
- Requires EmakiCoreLib 4.6.0.
- Back up
recipes/andgui/before updating, then migrate all custom recipes and GUI templates to the structures above. - After updating, run
/emakiforge reloadand/emakiforge debug statsto confirm the registered recipe count matches expectations, then verify the forge GUI and recipe book.
