void LuaEntitySAO::punch(ServerActiveObject *puncher, float time_from_last_punch) { if(!m_registered){ // Delete unknown LuaEntities when punched m_removed = true; return; } lua_State *L = m_env->getLua(); scriptapi_luaentity_punch(L, m_id, puncher, time_from_last_punch); }
int LuaEntitySAO::punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, float time_from_last_punch) { if(!m_registered){ // Delete unknown LuaEntities when punched m_removed = true; return 0; } // It's best that attachments cannot be punched if(isAttached()) return 0; ItemStack *punchitem = NULL; ItemStack punchitem_static; if(puncher){ punchitem_static = puncher->getWieldedItem(); punchitem = &punchitem_static; } PunchDamageResult result = getPunchDamage( m_armor_groups, toolcap, punchitem, time_from_last_punch); if(result.did_punch) { setHP(getHP() - result.damage); actionstream<<getDescription()<<" punched by " <<puncher->getDescription()<<", damage "<<result.damage <<" hp, health now "<<getHP()<<" hp"<<std::endl; { std::string str = gob_cmd_punched(result.damage, getHP()); // create message and add to list ActiveObjectMessage aom(getId(), true, str); m_messages_out.push_back(aom); } if(getHP() == 0) m_removed = true; } lua_State *L = m_env->getLua(); scriptapi_luaentity_punch(L, m_id, puncher, time_from_last_punch, toolcap, dir); return result.wear; }