Список изменений
Changed
- Actions use a new syntax, and you do not have to rewrite anything yourself. 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 seven nutrition actions are the only ones you need to rename by hand; automatic rewriting does not cover them. Underscores now separate the words:
emakicookingaddnutrition→cooking_add_nutritionemakicookingremovenutrition→cooking_remove_nutritionemakicookingsetnutrition→cooking_set_nutritionemakicookingclearnutrition→cooking_clear_nutritionemakicookingresetnutrition→cooking_reset_nutritionemakicookingrechecknutritionthreshold→cooking_recheck_nutrition_thresholdemakicookingrunrecipereward→cooking_run_recipe_reward
- Nutrition loops need editing by hand too:
loopsync/cancelloopbecomestart_task/stop_task,%player_name%becomes%caster.uuid%,mode=replacebecomeson_conflict=replace, andstop_if_offlinebecomesstop_when_offline. The comments in the nutrition threshold section ofconfig.ymlalready show the new format. The repeat count ofstart_taskis capped by CoreLibaction.pipeline.max_repeat_times(default100). - The juicer inspect action is
right_clickin the newconfig.yml. If you keep your old config file, changeinspectunderstations.juicer, or the juicer block cannot be mined. - For developers:
EmakiCookingApi.available(),apiVersion(),pluginName()andisReady()are replaced byEmakiCookingApi.status(), which returnsApiStatus.EmakiCookingApiProvideris removed; call the static methods onEmakiCookingApidirectly. Newnutrition(),catalog()andoperations()accessors return no-op implementations when the plugin is absent instead of throwing.EmakiCookingApi.Bridgeis now@ApiStatus.NonExtendable.
Fixed
- Stations breaking down for good after a while (chopping board, wok, grinder, juicer): a wok that finished cooking but could not be served, ingredients vanishing or being overwritten by the next ones added, a chopping board that would neither cut nor return items, a grinder with a frozen progress bar. One flaw caused all of it: a counter on the station's saved record climbed on every read, and once a save failed the station looked empty to the plugin with no way back. The counter no longer climbs and a failed save rolls back.
- The pipeline jamming when a dish moves between stations, on Folia servers. An error mid-transfer blocked that station and everything queued behind it until a restart; it now recovers on its own.
- Items being taken even when a recipe
conditionfailed, on the wok and juicer. The bowl or container was removed before the condition was checked, so a failure had already cost the item and still reported success. The check now happens first, and only theon_failactions run. - Items sometimes taken at odd moments. Recipes pulling ingredients from a player's inventory retried forever when they could not find them, so items could disappear after the player walked away or swapped items. Capped at 5 attempts, then the station is released without taking anything.
- The juicer block being impossible to break while it held liquid, because inspect took over left click in survival and creative.
- A flood of error messages when serving from the juicer without a container in hand.
- Floating text and displayed items left in the world after removing a station, on all seven types, when the plugin could not read the station's contents.
Removed
- JS scripting, including
.jsreward scripts in recipes. There is no automatic conversion, so rewrite those rewards using config actions. The bundledscripts/examples/cooking_reward.jssample is gone as well. - Two config options that never did anything:
stations.juicer.drop_completed_result_on_breakandstations.fermentation_barrel.require_sealed. They sat in the config file but were never read, so no value ever had an effect. Delete them from your own config whenever you like.
Notes
- Update EmakiCoreLib to
4.7.0first. - Back up your whole
plugins/EmakiCooking/folder before upgrading. - Three things need doing by hand: renaming the seven nutrition actions, rewriting JS reward scripts as config actions, and converting nutrition loops to
start_task/stop_task. Everything else is rewritten for you. - Player nutrition data and stations already placed in the world are unaffected and need no migration. The action syntax inside recipe files is rewritten automatically; the recipe structure itself has not changed.
Emaki Cooking v4.1.0
MineBBS 更新日志
【必读】升级前必须完成的两件事
- 不处理会静默清空玩家营养数据。 营养数据键由
values:改为nutrition:,没有兼容旧键的回退读取,也没有提升数据版本号,因此旧的data/nutrition/<uuid>.yml会被判定为空并按各营养类型默认值重建。升级前必须先备份data/nutrition/,并把每个玩家文件中的values:段改名为nutrition:,否则所有玩家营养数据都会丢失。 - 营养动作短别名已移除。
ecaddnutrition、cookingaddnutrition、ecremovenutrition、ectakenutrition、cookingremovenutrition、ecsetnutrition、cookingsetnutrition全部不再存在,只保留emakicookingaddnutrition、emakicookingremovenutrition、emakicookingsetnutrition。升级前必须检索所有配置与脚本,把短别名替换为完整的emakicooking*动作名,否则使用短别名的动作链会报动作未注册。
工位数据未被破坏
- 工位状态存储主体迁移到方块 PDC,但旧的 YAML 仍会被扫描并自动归档到
data/stations-legacy-backup/;没有方块实体的方块继续走 YAML 回退。 - 配方文件、
stations.*结构与权限键均未改变。
破坏性变更:移除 Web Console
- 浏览器端 Web Console 层已整体移除,包含
web-console.yml、GUI 界面的网页扩展与配套前端项目;原先依赖该网页界面完成的运维操作需要改用配置文件或命令。
世界黑名单与工位占位符
- 新增全局与按工位的世界黑名单:
station.disabled_worlds: []与stations.<type>.disabled_worlds: []。在黑名单世界中,插件不接管相关事件,保留原版方块行为。 - 新增工位占位符族
%emakicooking_station_*%,解析玩家最近交互的工位:type、type_name、world、x、y、z、location、block、heat_block、burning、burning_seconds、heat、moisture、steam、input、input_source、input_amount、ingredient_count、recipe、recipe_id、progress、progress_target、progress_percent、completed、fluid、fluid_amount、player。另有station_<name>_<field>形式用于指定某一工位类型。 - 新增公开的工位交互事件,第三方插件可以据此做联动。
命令、动作与预检
- 新增命令
/ecooking station reindex(需要emakicooking.admin),用于重建工位状态索引。 - 新增
/ecooking inspect block(此前只有inspect hand),可查看工位类型、来源、方块、方块状态、是否为方块实体、存储后端、PDC 状态、索引状态、索引后端、是否存在旧版 YAML,以及是否被世界黑名单禁用交互。 - 新增营养动作:
emakicookingclearnutrition、emakicookingresetnutrition、emakicookingrechecknutritionthreshold、emakicookingrunrecipereward。 - 配置预检新增配方目录与工位状态目录提示,并按工位给出存储后端提示。
- 新增本地化工位名称与错误提示键。
修复
- 修复工位悬浮文本丢失原版物品译名的问题:此前文本会被拍平成旧式字符串,客户端无法本地化可翻译组件。现在保留组件结构,原版物品名按客户端语言显示。
- 修复默认
config.yml中示例动作行无效、从不触发的问题:它们使用了未注册的动作 id。默认值已修正,开箱示例(砧板、炒锅、研磨机、蒸锅、烤炉、榨汁机、发酵桶的音效与粒子反馈,以及营养过量反馈)现在可以真正生效。
其他改进
- 插件描述文件由
plugin.yml更名为paper-plugin.yml,改用结构化依赖(必需 EmakiCoreLib;可选 PlaceholderAPI / CraftEngine / ItemsAdder / Nexo / Oraxen / PacketEvents / MMOItems / NeigeItems)。全部 25 个权限键及其默认值保持不变;/ecooking(别名ec)改为代码注册,别名保留。 - 工位状态主要存放在方块 PDC 并带版本账本,配合索引恢复与完成事务恢复,崩服或强制关服后工位进度与产出更不容易丢失或重复发放。
- 消息前缀更换为新的品牌渐变样式。
- 第三方物品 / 家具接入范围保持不变。
升级说明
- 需要 EmakiCoreLib
4.6.0。 - 升级前请依次完成:备份
data/nutrition/,把各玩家文件的values:改名为nutrition:,再检索配置与脚本替换全部营养动作短别名。 api-version由1.21提升到1.21.8,构建基线由 spigot-api 改为 paper-api;folia-supported: true与 Java 25 目标保持不变。- 新增配置键
station.disabled_worlds与按工位的disabled_worlds默认为空列表,即不禁用任何世界,不填写则行为不变。 - 升级后建议用
/ecooking inspect block抽查若干已放置工位,确认存储与索引状态正常,并检查一次玩家营养数值是否符合预期。
SpigotMC Update Log
CENTER[B]◆ Emaki Cooking v4.1.0 Release ◆/B[/CENTER]
[CENTER]Two mandatory pre-upgrade steps for nutrition data and nutrition action aliases, plus world blacklists, station placeholders, PDC-backed station state, and removal of the Web Console.[/CENTER]
CENTER━━━━━━━━━━━━━━━━━━━━/B
[LIST]
[]MANDATORY STEP 1 - player nutrition data will be silently reset unless you act. The nutrition data key changed from values: to nutrition: with no fallback read and no schema version bump, so old data/nutrition/
Modrinth Changelog
Added
- World blacklists, global and per station:
station.disabled_worlds: []plusstations.<type>.disabled_worlds: []. In a blacklisted world the plugin does not take over events and vanilla block behavior is preserved. - Station placeholder family
%emakicooking_station_*%resolving the player's most recent interacted station:type,type_name,world,x,y,z,location,block,heat_block,burning,burning_seconds,heat,moisture,steam,input,input_source,input_amount,ingredient_count,recipe,recipe_id,progress,progress_target,progress_percent,completed,fluid,fluid_amount,player. Astation_<name>_<field>form also exists to target a specific station type. - Public station interaction event so third-party plugins can react to station interactions.
- New command
/ecooking station reindex(requiresemakicooking.admin) to rebuild the station state index. /ecooking inspect block(previously onlyinspect hand), reporting station type, source, block, block state, whether it is a tile state, storage backend, PDC state, index state, index backend, whether legacy YAML exists, and whether interaction is disabled by the world blacklist.- New nutrition actions:
emakicookingclearnutrition,emakicookingresetnutrition,emakicookingrechecknutritionthreshold,emakicookingrunrecipereward. - Config precheck messages for the recipe directory and station state directory, plus storage backend hints per station.
- New localized station names and error keys.
Changed
- Descriptor renamed from
plugin.ymltopaper-plugin.ymlwith structured dependencies (EmakiCoreLib required; PlaceholderAPI / CraftEngine / ItemsAdder / Nexo / Oraxen / PacketEvents / MMOItems / NeigeItems optional). All 25 permission keys and their defaults are unchanged;/ecooking(aliasec) registers in code with the alias preserved. - Station state now primarily lives in block PDC with a version ledger, plus index recovery and completion transaction recovery, so station progress and output are less likely to be lost or double-granted after a crash or hard shutdown. Legacy YAML is still scanned and automatically archived to
data/stations-legacy-backup/, and blocks without a tile state fall back to YAML. - Message prefix switched to a new brand gradient.
- The third-party item/furniture integration set is unchanged.
api-versionraised from1.21to1.21.8and the build base moved from spigot-api to paper-api;folia-supported: trueand the Java 25 target are unchanged.
Fixed
- Station floating text lost vanilla item translation names: the text was flattened to a legacy string, so translatable components could not be localized by the client. Components are now preserved and vanilla item names render in the client's own language.
- The sample action lines in the default
config.ymlwere invalid and never fired because they used ids that were not registered. The defaults are corrected, so the out-of-the-box examples now work: chopping board, wok, grinder, steamer, oven, juicer, fermentation barrel sound and particle feedback, and nutrition overeating feedback.
Removed
- Player nutrition data will be silently reset unless you act first. The nutrition data key changed from
values:tonutrition:with no fallback read and no schema version bump, so olddata/nutrition/<uuid>.ymlfiles are treated as empty and rebuilt from per-type defaults. Back updata/nutrition/and rename thevalues:section tonutrition:in each player file before upgrading, otherwise all player nutrition is lost. - Short nutrition action aliases are removed.
ecaddnutrition,cookingaddnutrition,ecremovenutrition,ectakenutrition,cookingremovenutrition,ecsetnutrition, andcookingsetnutritionare gone; onlyemakicookingaddnutrition,emakicookingremovenutrition, andemakicookingsetnutritionremain. Any action chain using a short alias will report an unregistered action, so search your configs and scripts and replace them with the fullemakicooking*names. - The browser-based Web Console layer, including
web-console.yml, the GUI surface web extension, and theweb-console/frontend project.
Notes
- Requires EmakiCoreLib 4.6.0.
- Before upgrading, in order: back up
data/nutrition/, renamevalues:tonutrition:in each player nutrition file, then search configs and scripts and replace every short nutrition action alias with its fullemakicooking*name. - Station state data is not broken: recipe files, the
stations.*structure, and permission keys are unchanged. The new config keysstation.disabled_worldsand the per-stationdisabled_worldsdefault to empty lists, meaning nothing is disabled, so leaving them out changes nothing. After upgrading, spot-check a few placed stations with/ecooking inspect blockand verify player nutrition values look correct.

