Tags
Creators
Details
4.2.0
Compatibility
Required content
Changes
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][SIZE=6][B]◆ Emaki Cooking v4.1.0 Release ◆[/B][/SIZE][/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]━━━━━━━━━━━━━━━━━━━━[/B][/CENTER] [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/<uuid>.yml files are treated as empty and rebuilt from per-type defaults. Back up data/nutrition/ and rename the values: section to nutrition: in each player file before upgrading, otherwise all player nutrition is lost. []MANDATORY STEP 2 - short nutrition action aliases are removed. ecaddnutrition, cookingaddnutrition, ecremovenutrition, ectakenutrition, cookingremovenutrition, ecsetnutrition, and cookingsetnutrition are gone; only emakicookingaddnutrition, emakicookingremovenutrition, and emakicookingsetnutrition remain. Any action chain using a short alias will report an unregistered action, so search your configs and scripts and replace them with the full emakicooking* names. []Station state data is NOT broken: primary storage moved to block PDC, but legacy YAML is still scanned and automatically archived to data/stations-legacy-backup/, and blocks without a tile state fall back to YAML. Recipe files, the stations. structure, and permission keys are unchanged. []Breaking: the browser-based Web Console layer is removed, including web-console.yml, the GUI surface web extension, and the web-console frontend project. []New world blacklists, global and per station: station.disabled_worlds: [] plus stations.<type>.disabled_worlds: []. In a blacklisted world the plugin does not take over events and vanilla block behavior is preserved. []New 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. A station_<name>_<field> form also exists to target a specific station type. []New public station interaction event so third-party plugins can react to station interactions. []New command /ecooking station reindex (requires emakicooking.admin) to rebuild the station state index. []New /ecooking inspect block, 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 adds recipe-directory and station-state-directory messages, plus storage backend hints per station, and new localized station names and error keys are included. []Fixed station floating text losing 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. []Fixed the sample action lines in the default config.yml being invalid and never firing because they used unregistered ids. The defaults are corrected, so the out-of-the-box examples work: chopping board, wok, grinder, steamer, oven, juicer, fermentation barrel sound and particle feedback, and nutrition overeating feedback. []Descriptor renamed from plugin.yml to paper-plugin.yml with structured dependencies (EmakiCoreLib required; PlaceholderAPI / CraftEngine / ItemsAdder / Nexo / Oraxen / PacketEvents / MMOItems / NeigeItems optional). All 25 permission keys and their defaults are unchanged, and /ecooking (alias ec) 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. []Message prefix switched to a new brand gradient, and the third-party item/furniture integration set is unchanged. []Requires EmakiCoreLib 4.6.0. api-version moves from 1.21 to 1.21.8 and the build base moves from spigot-api to paper-api; folia-supported: true and the Java 25 target are unchanged. []The new config keys station.disabled_worlds and the per-station disabled_worlds default to empty lists, meaning nothing is disabled, so leaving them out changes nothing. [/LIST]
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.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:NlpcnczH:X9lPTZxv"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:NlpcnczH:X9lPTZxv"
}

