You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Minetest中的食物物品实现多种功能?[模组开发]

问题解决与修正代码

核心问题分析

原代码存在以下关键问题导致物品不消失:

  • on_use参数错误,未正确接收物品栈与玩家对象,无法处理物品消耗逻辑
  • 硬编码玩家名称,无法适配多玩家场景
  • 手动修改HP后未正确返回item_eat处理后的物品栈,游戏无法识别物品已被食用
  • 速度加成设置为永久,不符合临时buff需求
  • 同时设置on_left_click和on_use,触发逻辑冲突

修正后的代码

minetest.register_craftitem("hot_chocolate_mod:hot_chocolate", {
    description = "Cup of Hot Chocolate",
    inventory_image = "hot_chocolate_mod_hot_chocolate.png",
    groups = { craftitem = 1, food = 3, eatable = 6, can_eat_when_full=1 },
    
    on_use = function(itemstack, user, pointed_thing)
        -- 添加临时速度加成,持续10秒,可自行修改数字调整时长
        user:set_physics_override({ speed = 3 })
        minetest.after(10, function(player)
            if player and player:is_player() then
                player:set_physics_override({ speed = 1 }) -- 恢复原速度
            end
        end, user)
        
        -- 调用内置食用逻辑处理HP回复与物品消耗,返回处理后的物品栈
        return minetest.item_eat(2, "mcl_buckets:bucket_empty")(itemstack, user, pointed_thing)
    end
})

关键修改说明

  • 修正on_use参数:使用Minetest标准的itemstack, user, pointed_thing参数,直接通过user获取当前玩家,无需硬编码名称
  • 临时速度buff:用minetest.after设置定时器,到期后自动恢复玩家原速度
  • 正确处理物品消耗:调用minetest.item_eat并返回其处理后的物品栈,游戏会自动扣除物品或替换为空桶
  • 移除冗余的on_left_click:MineClone2中食物默认右键食用,on_use已覆盖该逻辑

参考教程核心内容翻译

物品与食用逻辑(Minetest模组开发手册)

  • 注册可食用物品时,minetest.item_eat(hp_change, replace_item)会返回一个内置处理函数,自动完成玩家HP回复、物品消耗或替换操作
  • on_use函数必须返回处理后的物品栈,否则游戏不会认定物品已被食用
  • 若要添加额外效果(如速度buff),需先在on_use中执行自定义逻辑,再调用item_eat并返回其结果

内容的提问来源于stack exchange,提问作者That_Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:53:10