
动物吃什么
使用JSON配置动物繁殖食物和玩家持有的诱饵,支持热重载、KubeJS脚本,以及每个实体的持久覆盖。
动物吃什么
动物吃什么模组允许整合包作者通过简单、可读的 JSON 配置文件自定义动物的繁殖食物和玩家手持的吸引物。
特性
- 使用
what_animals_eat_food.json配置繁殖食物。 - 使用
what_animals_eat_attractant.json配置玩家手持吸引物。 - 支持为一种动物配置多种物品。
- 支持物品 ID、物品标签和 KubeJS 物品堆栈。
- 服务器启动时自动生成默认配置。
- 自动将新注册的动物实体追加到现有的 JSON 文件中。
- 保留现有的实体条目和自定义物品列表。
- 使用
/reload应用配置更改。 - 通过 KubeJS 立即修改规则。
- 将每实体的覆盖规则存储在持久化的实体 NBT 中。
- 提供喂食前和喂食后的 KubeJS 事件。
- 适用于 Minecraft Forge 1.20.1 和 NeoForge 1.21.1。
配置
食物配置:
config/what_animals_eat_food.json
吸引物配置:
config/what_animals_eat_attractant.json
示例:
{
"minecraft:cow": [
"minecraft:apple",
"minecraft:golden_carrot"
],
"minecraft:chicken": [
"#minecraft:seeds"
],
"*": [
"minecraft:beetroot"
]
}
每个键是一个实体 ID,每个值是一个物品 ID 数组。使用 * 为所有支持的动物定义规则。使用 #tag_id 引用物品标签。
食物规则会替换动物的默认繁殖食物。吸引物规则定义玩家手持哪些物品时动物会跟随他们。
编辑任一 JSON 文件后运行 /reload 即可应用更改,无需重启服务器。
自动配置更新
当服务器启动时,模组会扫描注册的动物实体并检测它们的默认繁殖食物和吸引物。
如果新安装的模组添加了具有可检测默认规则的动物,其实体 ID 将自动以检测到的默认值追加到适当的 JSON 文件中。现有的实体条目和自定义物品列表永远不会被覆盖。
旧的 what_animals_eat.json 和 what_animals_eat-common.toml 文件会在可能的情况下迁移到 what_animals_eat_food.json。
KubeJS 示例
将脚本放在 server_scripts 文件夹中。
更改繁殖食物
// 更改每头牛的繁殖食物。
WhatAnimalsEat.setBreedingFoods(
'minecraft:cow',
['minecraft:apple', 'minecraft:golden_carrot']
)// 为每头猪添加甜菜根作为额外的繁殖食物。
WhatAnimalsEat.addBreedingFood(
'minecraft:pig',
'minecraft:beetroot'
)
更改吸引物
// 更改吸引每头牛的物品。
WhatAnimalsEat.setAttractant(
'minecraft:cow',
['minecraft:apple', 'minecraft:golden_carrot']
)// 为每头猪添加甜菜根作为吸引物。
WhatAnimalsEat.addAttractant(
'minecraft:pig',
'minecraft:beetroot'
)
修改单个实体
传递 event.animal 只会更改被喂食的那个个体实体。覆盖规则存储在实体的持久化 NBT 中,并在世界保存和服务器重启后仍然有效。
WhatAnimalsEatEvents.afterAnimalFed(event => {
console.log(
event.player.name +
' fed ' +
event.animal.id +
' with ' +
event.item.id
) // 仅更改此个体动物。
WhatAnimalsEat.setBreedingFoods(
event.animal,
['minecraft:apple', 'minecraft:golden_carrot']
)
// 仅此个体动物会被甜菜根吸引。
WhatAnimalsEat.setAttractant(
event.animal,
['minecraft:beetroot']
)
})
传递实体 ID 字符串会更改该类型的所有实体。传递动物实体对象只会更改该个体实体。
喂食前后事件
WhatAnimalsEatEvents.beforeAnimalFed(event => {
console.log(
'Player ' + event.player.name +
' is feeding ' + event.animal.id +
' with ' + event.item.id
) // 必要时取消喂食操作。
// event.cancel()
})
WhatAnimalsEatEvents.afterAnimalFed(event => {
console.log(
'Player ' + event.player.name +
' fed ' + event.animal.id +
' with ' + event.item.id
)
})
喂食事件提供:
event.player:正在喂食实体的玩家。event.animal:被喂食的动物。event.item:正在使用的物品。
移除或重置规则
// 从每头猪中移除一种繁殖食物。
WhatAnimalsEat.removeBreedingFood(
'minecraft:pig',
'minecraft:carrot'
)// 重置单个繁殖食物覆盖规则。
WhatAnimalsEat.resetBreedingFoods(event.animal)
// 重置单个吸引物覆盖规则。
WhatAnimalsEat.resetAttractant(event.animal)
// 读取当前生效的规则。
console.log(WhatAnimalsEat.getBreedingFoods('minecraft:cow'))
console.log(WhatAnimalsEat.getAttractants('minecraft:cow'))
KubeJS 的更改会立即应用到当前服务器。个体实体覆盖规则存储在持久化的实体 NBT 中,而 JSON 文件包含实体类型的默认规则。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。